R Redshift dbExistTable dbWriteTable

Posted

技术标签:

【中文标题】R Redshift dbExistTable dbWriteTable【英文标题】: 【发布时间】:2017-04-13 23:36:08 【问题描述】:

我在使用 R 连接 Redshift 时遇到问题。

url <- "jdbc:url:port/database?user=X123&password=fakepassword"
conn <- dbConnect(driver, url)

所以我连接得很好,当我列出表时,我注意到默认架构是公共的,但我不想使用该架构,如何切换架构?

说是不是:lab_space

当我尝试这个时,它仍然会公开列出表格:

dbListTables(conn, schema='lab_space')

试过了,我得到一个错误:

SET search_path = lab_space;

> SET search_path = 'cust_usr';
Error: unexpected symbol in "SET search_path"

我一定是做错了什么?

当我尝试说检查表并删除时:

droptable <- dbSendQuery(conn, "drop table if exists lab_space.Tablebla")

它会丢弃它,但仍然给我一个错误:

Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ",  : 
  Unable to retrieve JDBC result set for drop table if exists lab_space.Tablebla ([JDBC Driver]com.amazon.dsi.dataengine.impl.DSISimpleRowCountResult cannot be cast to com.amazon.dsi.dataengine.interfaces.IResultSet)

【问题讨论】:

在redshift中,可以使用set search_path to base(不等于)dbSendQuery(con,"set search_path to base"); 【参考方案1】:

您可以使用dbSendUpdate 更改架构以更改连接的search_path

dbSendUpdate(jdbc_con,"set search_path to my_schema")

【讨论】:

【参考方案2】:

好的,我和这个司机一起去了这个

drv <- dbDriver("PostgreSQL") 

然后一切正常,没有愚蠢的警告错误,我猜 R 和 Redshift 仍有很多成长要做,不确定:-)

【讨论】:

【参考方案3】:

在redshift中,你可以用set search_path to &lt;schema_name&gt;设置搜索路径(不等于) dbSendQuery(con,"set search_path to &lt;schema_name&gt;");

如果底层 sql 返回结果集,您可以将 dbSendQuery() 结果分配给 var。这里 drop 查询不返回任何结果集对象。尝试不分配给任何 var。

 dbSendQuery(conn, "drop table if exists lab_space.Tablebla")

【讨论】:

我尝试了你推荐的方法,所有错误,都不起作用:> dbSendQuery(conn,"set search_path to cust_usr") Error in .verify.JDBC.result(r, "Unable to retrieve JDBC ", 结果集:无法检索将 search_path 集设置为 cust_usr 的 JDBC 结果集([JDBC 驱动程序]com.amazon.dsi.dataengine.impl.DSISimpleRowCountResult 无法转换为 com.amazon.dsi.dataengine.interfaces.IResultSet) 我收到了 drop table 的类似错误。它删除了表格,但出错了。 对于切换模式,它也可以工作,但会出错。后来当我列出表时,它会从正确的模式中列出它们,错误非常烦人,我试图找出原因? 您正在加载哪些软件包来创建驱动程序?你能发布司机的详细信息吗? 嗨,这是我用于驱动程序的内容: library(RJDBC) # driver I am using download.file('s3.amazonaws.com/redshift-downloads/drivers/…) # connect to Amazon Redshift driver

以上是关于R Redshift dbExistTable dbWriteTable的主要内容,如果未能解决你的问题,请参考以下文章

.jfindClass 中的 R Redshift 错误

日期数学不会在 R 与 Redshift 中产生相同的结果

将数据从 R 写入 Redshift 问题

将 R 连接到 Redshift 时出错

如何使用 R 和 dplyr 从 Redshift 检索超过 100000 行

使用 RPostgreSQL 和 dplyr 将 R 连接到 Redshift 的理论是啥