Аз също се боря с този проблем от няколко месеца. Въпреки това попаднах на решение, което може да помогне и на вас.
Накратко, проблемът възниква, когато определени текстови колони не се появяват след целочислени/числови колони. Когато колоните не са подравнени правилно в заявката, грешка от invalid index
се прехвърля и връзката ви може да замръзне. Проблемът е как да разбера какво да сложа в края на заявката си?
За да се определи това, обикновено може да се изследва колона с помощта на class()
или typeof()
. За да разгледате такава информация от базата данни, можете да използвате заявка като:
dbColumnInfo(dbSendQuery(con, "SELECT * from schema.table")) # You may not require the schema part...
Това ще върне таблица с поле за тип за всяка колона в набора от данни, който представлява интерес. След това можете да използвате тази таблица като индекс за сортиране на select()
изявление. Конкретната ми трудност е, че type
полето в таблицата е всички числа! Забелязах обаче, че всяка колона с отрицателно число, когато е поставена в края на оператора за избор, коригира заявката ми и мога да изтегля цялата таблица добре. Например, моето пълно решение :
# Create my index of column types (ref to the current order)
index <- dbColumnInfo(dbSendQuery(con, "SELECT * from schema.table"))
index$type <- as.integer(index$type) # B/c they are + and - numbers!
# Create the ref to the table
mySQLTbl <- tbl(con, in_schema("schema", "tablename"))
# Use the select statement to put all the + numbered columns first!
mySQLTbl %>%
select(c(which(index$type>=0),
which(index$type<0)))
Що се отнася до причината защо това се случва, не съм сигурен и нямам привилегиите за достъп до данни, за да копая много по-дълбоко в моя случай на употреба