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 <schema_name>
设置搜索路径(不等于)
dbSendQuery(con,"set search_path to <schema_name>");
如果底层 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的主要内容,如果未能解决你的问题,请参考以下文章