1

RJDBC は正常に Hive に接続し、Hive からデータを読み取ります。しかし、-> dbWriteTable を使用して Hive にデータを書き込んでいません。

下記参照-

options(java.parameters = "-Xmx8g")
library(DBI)
library(rJava)
library(RJDBC)

cp <- c(list.files("/tmp/R_hive_libs/cloudera_hive_jars", pattern = "[.]jar", full.names=TRUE, recursive=TRUE),list.files("/tmp/R_hive_libs/R_hadoop_libs", pattern = "[.]jar", full.names=TRUE, recursive=TRUE),list.files("/tmp/R_hive_libs/R_hadoop_libs/lib", pattern = "[.]jar", full.names=TRUE, recursive=TRUE), recursive=TRUE)

drv <- JDBC(driverClass = "com.cloudera.hive.jdbc4.HS2Driver", classPath=cp)
conn <- dbConnect(drv, "jdbc:hive2://XXXXXX:10000/default", "user", "password")
show_databases <- dbGetQuery(conn, "show databases")
List_of_Tables <- dbListTables(conn)

data1 <- dbGetQuery(conn, "select * from XXX.xxx limit 10000")
data_to_write_back_to_hive <- data.frame(aggregate(data1$xxx.xxx, by=list(Month=data1$xxx.cmp_created_timestamp_month), FUN=sum))
data_to_write_back_to_hive[[2]] <-c(10,20)
colnames(data_to_write_back_to_hive) <- c("Month", "Energy")
dbWriteTable(conn, "xxxx.checking",data_to_write_back_to_hive)

データをハイブに書き戻す方法は? 以下のエラーが発生しています-

.local(conn, statement, ...) のエラー: JDBC 更新クエリの実行が dbSendUpdate で失敗しました ([Simba]HiveJDBCDriver エラー処理クエリ/ステートメント。エラー コード: 40000、SQL 状態: TStatus(statusCode:ERROR_STATUS、infoMessages:[* org.apache.hive.service.cli.HiveSQLException: ステートメントのコンパイル中にエラーが発生しました: 失敗しました: ParseException 行 1:36 の入力 'PRECISION' が一致しません) テーブル作成ステートメントの 'DOUBLE' の近く: 28:27、 org.apache.hive.service.cli.operation.Operation:toSQLException:Operation.java:326、org.apache.hive.service.cli.operation.SQLOperation:prepare:SQLOperation.java:102、org.apache.hive。 service.cli.operation.SQLOperation:runInternal:SQLOperation.java:171、org.apache.hive.service.cli.operation.Operation:run:Operation.java:268、org.apache.hive.service.cli.session。 HiveSessionImpl:executeStatementInternal:HiveSessionImpl.java:410、org.apache.hive.service.cli.session.HiveSessionImpl:executeStatement:HiveSessionImpl.java:391、sun.reflect.GeneratedMethodAccessor56:invoke::-1、sun.reflect.DelegatingMeth

4

1 に答える 1

0

この質問はかなり出てきます。簡単に言えば、現時点ではやりたいことができないということだと思います。DBI/JDBC ドライバーは、構文的に正しい HiveQL をメタプログラミングしません。

于 2016-07-25T16:22:19.827 に答える