Saya juga telah berjuang dengan masalah ini selama beberapa bulan. Namun, saya telah menemukan solusi yang dapat membantu Anda juga.
Singkatnya, masalah terjadi ketika kolom teks tertentu tidak muncul setelah kolom bilangan bulat/numerik. Saat kolom tidak disejajarkan dengan benar dalam kueri, kesalahan invalid index
dilemparkan dan koneksi Anda mungkin membeku. Masalahnya kemudian adalah, bagaimana saya tahu apa yang harus diletakkan di akhir kueri saya?
Untuk menentukan ini, seseorang biasanya dapat memeriksa kolom menggunakan class()
atau typeof()
. Untuk memeriksa informasi tersebut dari database, Anda dapat menggunakan kueri seperti:
dbColumnInfo(dbSendQuery(con, "SELECT * from schema.table")) # You may not require the schema part...
Ini akan mengembalikan tabel dengan bidang tipe untuk setiap kolom dalam kumpulan data yang diinginkan. Anda kemudian dapat menggunakan tabel ini sebagai indeks untuk mengurutkan select()
penyataan. Kesulitan khusus saya adalah bahwa type
bidang dalam tabel adalah semua angka! Namun, saya perhatikan bahwa setiap kolom dengan angka negatif, ketika ditempatkan di akhir pernyataan pilih, memperbaiki kueri saya dan saya dapat menarik seluruh tabel dengan baik. Misalnya, solusi lengkap saya :
# 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)))
Adapun alasan mengapa ini terjadi, saya tidak yakin dan saya tidak memiliki hak akses data untuk menggali lebih dalam kasus penggunaan saya