Tôi cũng đã phải vật lộn với vấn đề này trong vài tháng. Tuy nhiên, tôi đã tìm ra một giải pháp có thể giúp ích cho bạn.
Tóm lại, sự cố xảy ra khi các cột văn bản nhất định không xuất hiện sau cột số nguyên / số. Khi các cột không được căn chỉnh chính xác trong truy vấn, sẽ xảy ra lỗi invalid index
bị ném và kết nối của bạn có thể bị đóng băng. Vấn đề sau đó là, làm cách nào để tôi biết nên đặt nội dung gì ở cuối truy vấn của mình?
Để xác định điều này, người ta thường có thể kiểm tra một cột bằng cách sử dụng class()
hoặc typeof()
. Để kiểm tra thông tin như vậy từ cơ sở dữ liệu, bạn có thể sử dụng truy vấn như:
dbColumnInfo(dbSendQuery(con, "SELECT * from schema.table")) # You may not require the schema part...
Điều này sẽ trả về một bảng có trường loại cho mọi cột trong tập dữ liệu quan tâm. Sau đó, bạn có thể sử dụng bảng này làm chỉ mục để sắp xếp select()
tuyên bố. Khó khăn cụ thể của tôi là type
trường trong bảng là tất cả các số! Tuy nhiên, tôi nhận thấy rằng mọi cột có số âm, khi được đặt ở cuối câu lệnh select, đã sửa truy vấn của tôi và tôi có thể kéo toàn bộ bảng tốt. Ví dụ: giải pháp đầy đủ của tôi :
# 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)))
Về lý do tại sao điều này xảy ra, tôi không chắc và tôi không có đặc quyền truy cập dữ liệu để tìm hiểu sâu hơn về trường hợp sử dụng của mình