Ik worstel ook al een aantal maanden met dit probleem. Ik ben echter een oplossing tegengekomen die ook voor jou kan helpen.
In een notendop, het probleem doet zich voor wanneer bepaalde tekstkolommen niet verschijnen na gehele/numerieke kolommen. Als de kolommen niet goed zijn uitgelijnd in de zoekopdracht, wordt de fout invalid index
wordt gegooid en uw verbinding kan vastlopen. Het probleem is dan:hoe weet ik wat ik aan het einde van mijn zoekopdracht moet zetten?
Om dit te bepalen, zou men typisch een kolom kunnen onderzoeken met behulp van class()
of typeof()
. Om dergelijke informatie uit de database te onderzoeken, kunt u een zoekopdracht gebruiken zoals:
dbColumnInfo(dbSendQuery(con, "SELECT * from schema.table")) # You may not require the schema part...
Dit retourneert een tabel met een typeveld voor elke kolom in de dataset van belang. U kunt deze tabel dan als index gebruiken om de select()
. te sorteren uitspraak. Mijn bijzondere probleem is dat het type
veld in de tabel waren alle nummers! Ik merkte echter dat elke kolom met een negatief getal, wanneer deze aan het einde van de select-instructie werd geplaatst, mijn vraag repareerde en ik de hele tabel prima kon ophalen. Bijvoorbeeld mijn volledige oplossing :
# 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)))
Wat betreft de reden waarom dit gebeurt, weet ik niet zeker en ik heb niet de gegevenstoegangsrechten om veel dieper in mijn use-case te graven