RJDBC dbGetQuery() 错误创建外部表 HIVE

Posted

技术标签:

【中文标题】RJDBC dbGetQuery() 错误创建外部表 HIVE【英文标题】:RJDBC dbGetQuery() ERROR to create external table HIVE 【发布时间】:2017-02-22 22:18:02 【问题描述】:

我遇到这个问题:DB调用只创建一个表,它有检索JDBC结果集的问题。

.verify.JDBC.result(r, "无法检索 JDBC 结果集 调用:dbGetQuery ... dbSendQuery -> dbSendQuery -> .local -> .verify.JDBC.result 执行停止

    options( java.parameters = "-Xmx32g" )
    library(rJava)
    library(RJDBC)
    drv <- JDBC("org.apache.hive.jdbc.HiveDriver", "/tmp/r_jars/hive-jdbc.jar")
    for(jar in list.files('/tmp/r_jars/'))
        .jaddClassPath(paste("/tmp/r_jars/",jar,sep=""))
    

    conn <- dbConnect(drv, "jdbc:hive2://10.40.51.75:10000/default", "myusername", "mypassword")

    createSCOREDDL_query <- "CREATE EXTERNAL TABLE hiveschema.mytable (
       myvariables
    )
    ROW FORMAT SERDE
    'com.bizo.hive.serde.csv.CSVSerde'
     STORED AS INPUTFORMAT
    'org.apache.hadoop.mapred.TextInputFormat'
     OUTPUTFORMAT
     'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
     LOCATION
    's3://mybucket/myschema/'"

    dbGetQuery(conn, createSCOREDDL_query)
    dbDisconnect(conn)

【问题讨论】:

表已创建,并从 S3 存储桶中分配了适当的数据,但是此过程总是停止并返回错误。所以我不能在一个 R 脚本中创建多个表,而是必须为我需要创建的每个表创建一个 R 脚本。 【参考方案1】:

您可以尝试使用 dbSendUpdate 代替 dbGetQuery 吗?我遇到了类似的问题,让这个开关解决了这个问题。

【讨论】:

【参考方案2】:

我按照@KaIC 的建议尝试了以下代码,并且成功了:

dbSendUpdate(conn, "CREATE EXTERNAL TABLE hiveschema.mytable ( col_A  string, col_B  string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE")

对于多个表,您可以在函数中创建列表或循环,并使用apply() 构造将其应用于整个循环。

【讨论】:

以上是关于RJDBC dbGetQuery() 错误创建外部表 HIVE的主要内容,如果未能解决你的问题,请参考以下文章

与 RedShift 的 RJDBC 连接在 Windows 上产生 .jfindClass class not found 错误

为每个请求创建与 MS SQL 数据库的新 RJDBC 连接是不是存在性能/其他缺点?

将另一个变量粘贴到我在 R 中的 SQL 查询中

将 R 与 Vertica 数据库连接

RJDBC 限制来自 Netezza 的行

R 使用 RJDBC 不将数据写入 Hive 表