使用RJDBC包合并Hive表

时间:2017-04-24 10:02:28

标签: r rjdbc

我正在使用RJDBC程序包连接到Hive。

library(rJava)
library(RJDBC)
-
-
-
conn <- dbConnect(drv, "jdbc:hive2://ip:port","***", "****")

连接后,我输入此命令查看表格列表:

dbListTables(conn)

[1] "m_11"                     "m_12"                    
 [3] "m_16"                     "m_18"                    
 [5] "m_19"                     "m_20"     

其他命令,即

dbGetTables (conn, "m_11")
TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS
1                report m_11      TABLE    <NA>

但是当我想阅读表格时,它会将错误显示为“未找到表格”:

dbGetQuery(conn, "select * from m_11")
Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ",  : 
  Unable to retrieve JDBC result set for select * from m_11 (Error while compiling statement: FAILED: SemanticException [Error 10001]: Line 1:14 Table not found 'm_11')

此外,

d <- dbReadTable(conn, "m_11")
Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ",  : 
  Unable to retrieve JDBC result set for SELECT * FROM "m_11" (Error while compiling statement: FAILED: ParseException line 1:14 cannot recognize input near '"m_11"' '<EOF>' '<EOF>' in join source)

我想知道以下命令:

a)如何阅读表格,即m_11
b)合并两个表格,即m_11&amp; m_12 by“Consm_ID”

还有其他简单的替代方法可以在R中完成。

1 个答案:

答案 0 :(得分:0)

您应该将数据库名称附加到表名以访问它。我认为rjdbc默认使用“默认”db。

dbGetQuery(conn, "select * from dbName.m_11")

此外,你应该使用hive查询来合并或连接两个表,而不是在你获得R中的数据帧后合并它们,因为数据源(这里的hive)将比连接/合并函数更加智能化R作为数据源,可以更多地了解数据的布局。