私もこの問題に数ヶ月苦労しています。しかし、私はあなたにも役立つかもしれない解決策に出くわしました。
一言で言えば、この問題は、特定のテキスト列が整数/数値列の後に表示されない場合に発生します。クエリで列が適切に配置されていない場合、invalid index
のエラーが発生します がスローされ、接続がフリーズする可能性があります。 問題は、クエリの最後に何を入力するかをどのように知るかです。
これを判断するには、通常、class()
を使用して列を調べることができます。 またはtypeof()
。データベースからこのような情報を調べるには、次のようなクエリを使用できます。
dbColumnInfo(dbSendQuery(con, "SELECT * from schema.table")) # You may not require the schema part...
これにより、対象のデータセットのすべての列のタイプフィールドを含むテーブルが返されます。次に、このテーブルをインデックスとして使用して、select()
を並べ替えることができます。 声明。私の特に難しいのは、type
表のフィールドはすべて数字でした!ただし、selectステートメントの最後に配置すると、負の数のすべての列がクエリを修正し、テーブル全体を正常にプルできることに気付きました。たとえば、私の完全なソリューション :
# 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)))
これが発生する理由については、よくわかりません。また、ユースケースをさらに深く掘り下げるためのデータアクセス権限がありません
。