Jeg har også kæmpet med dette problem i flere måneder. Jeg er dog stødt på en løsning, der måske også kan hjælpe dig.
I en nøddeskal opstår problemet, når visse tekstkolonner ikke vises efter heltal/numeriske kolonner. Når kolonnerne ikke er justeret korrekt i forespørgslen, vises en fejl med invalid index
er smidt, og din forbindelse kan fryse. Spørgsmålet er så, hvordan ved jeg, hvad jeg skal sætte i slutningen af min forespørgsel?
For at bestemme dette kunne man typisk undersøge en kolonne ved hjælp af class()
eller typeof()
. For at undersøge sådanne oplysninger fra databasen kan du bruge en forespørgsel som:
dbColumnInfo(dbSendQuery(con, "SELECT * from schema.table")) # You may not require the schema part...
Dette vil returnere en tabel med et typefelt for hver kolonne i datasættet af interesse. Du kan derefter bruge denne tabel som et indeks til at sortere select()
udmelding. Mit særlige problem er, at type
felt i tabellen var alle tal! Jeg bemærkede dog, at hver kolonne med et negativt tal, når den blev placeret i slutningen af select-sætningen, fiksede min forespørgsel, og jeg kunne fint trække hele tabellen. For eksempel min fulde løsning :
# 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)))
Hvad angår årsagen til, hvorfor dette sker, er jeg ikke sikker, og jeg har ikke dataadgangsrettigheder til at grave meget dybere i min use-case