使用dbi包从r dataframe向cloudera impala创建和插入数据

tzcvj98z  于 2021-06-10  发布在  Impala
关注(0)|答案(1)|浏览(342)

我在r中创建了一对表(Dataframe),需要上传到cloudera impala,我正在使用dbi包连接impala。我举个例子:
df<-Dataframe(x)
如何将df作为表插入到impala中?
我知道使用dbsendupdate()可以做到这一点,所以我做了如下工作:
dbsendupdate(dbh,paste0(“create table db.df as select*from”,db))
但运气不好。
关于如何用这个函数或者我可以使用的任何其他函数来处理这个问题,有什么想法吗?

hof1towb

hof1towb1#

我认为你应该改用这个函数 dbCreateTable 或者 dbWriteTable()DBI 包裹。
在你的情况下,你可以 df 在以下方面:

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

哪里 con 是你的数据库连接, "impala_new_df" 是impala中所需的新表的名称,以及 df 是从中写入的Dataframe。显然,您需要对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 其他的方法

相关问题