使用DBI包从R数据帧创建数据并将其插入到Cloudera Impala

时间:2018-12-10 17:38:35

标签: sql r cloudera impala r-dbi

我已经在R中创建了几张表(数据框),需要将它们上载到Cloudera Impala,我正在使用DBI包与Impala进行连接。所以我有例如:

df <-data.frame(x)

如何将df作为表格插入Impala?

我已经看到使用dbSendUpdate()可以做到这一点,所以我已经做了类似的事情:

dbSendUpdate(dbh,paste0(“将表db.df创建为select * from”,db))

但没有运气。

关于如何使用此功能或我可以为此使用的任何其他功能处理此问题的任何想法?

1 个答案:

答案 0 :(得分:0)

我认为您应该改用dbCreateTable包中的函数dbWriteTable()DBI

根据您的情况,您可以通过以下方式发送df

data <- DBI::dbCreateTable(con, "impala_new_df", df)

其中con是您的数据库连接,"impala_new_df"是Impala中所需的新表的名称,而df是您要从中写入数据的框架。显然,您需要对Impala实例具有读/写访问权限。

我相信dbSendUpdate函数来自软件包RJDBC。仅当您的连接是jdbc而不是odbc时,该方法才有效。另外,我不认为您对paste0的使用会表现出您想要的方式。

以下是有关R中数据库的有用参考: https://db.rstudio.com/odbc/

更新

由于您使用的是RJDBC,因此我认为以下方法应该有效:

dbSendUpdate(con, "Create Table ?", df)

类似于此处的解决方案:https://stackoverflow.com/a/35407579/6535514

如果这不起作用,我将开始研究软件包implyr,以寻求其他解决方法