Impalaデータベースにクエリを実行するRスクリプトを作成しようとしています。データベースへのクエリは次のとおりです。
select columnA, max(columnB) from databaseA.tableA where columnC in (select distinct(columnC) from databaseB.tableB ) group by columnA order by columnA
このクエリを手動で実行すると(読み取り:impala-Shellを介してRscriptの外部)、テーブルの内容を取得できます。ただし、同じことをRスクリプトで実行しようとすると、次のエラーが発生します。
[1] "HY000 140 [Cloudera][ImpalaODBC] (140) Unsupported query."
[2] "[RODBC] ERROR: Could not SQLExecDirect 'select columnA, max(columnB) from databaseA.tableA where columnC in (select distinct(columnC) from databaseB.tableB ) group by columnA order by columnA'
closing unused RODBC handle 1
R経由で試行したときにクエリが失敗するのはなぜですか?どうすればこれを修正できますか?前もって感謝します :)
編集1:
接続スクリプトは次のようになります。
library("RODBC");
connection <- odbcConnect("Impala");
query <- "select columnA, max(columnB) from databaseA.tableA where columnC in (select distinct(columnC) from databaseB.tableB ) group by columnA order by columnA";
data <- sqlQuery(connection,query);
関連するドライバをインストールする必要があります。以下をご覧ください リンク
同じ問題が発生しました。必要なのは、ODBCドライバーを更新することだけでした。
また、ユーザー名とパスワードでodbcConnectを更新できる場合
connection <- odbcConnect("Impala");
に
connection <- odbcConnect("Impala", uid="root", pwd="password")
これは、SQLクエリ自体のエラーが原因である可能性もあります。たとえば、次の一般化されたステートメントで「in」を見逃したときに、このエラーが発生しました。例:
stringstuff <- someDT$columnyouwanttouse
somestring <- toString(sprintf("'%s'", stringstuff))
RESULTS <- sqlQuery(con, paste0("select
fling as flam
and toot **in** (",somestring,")
limit 30
;"))
'in'を省略したときにエラーが発生したので、構文を再確認してください。