使用 R 进行红移

Posted

技术标签:

【中文标题】使用 R 进行红移【英文标题】:Redshift with R 【发布时间】:2016-01-12 21:23:58 【问题描述】:

我是通过 R 连接到 Redshift 的新手,我已阅读其他问题,但在尝试创建表时仍然出现错误。 我已经成功建立了一个连接,我认为建立表成功:

redshiftcon <- dbConnect(mm, user="username", password="secret_password",
                    dbname="dbtable", host="hostname", port="portnumber")


dbSendQuery(redshiftcon,
"create table ss_playground.test_table (unique_id VARCHAR,
category VARCHAR,
name VARCHAR,
number_min float);")

<PostgreSQLResult:(70214,5,1)> 

但是,当我尝试检查表是否存在以及字段是否存在时,我收到以下消息:

dbExistsTable(redshiftcon, ss_playground.test_table)

Error in is(object, Cl) : 
error in evaluating the argument 'name' in selecting a method for function
'dbExistsTable': Error: object 'ss_playground.test_table' not found

> dbExistsTable(redshiftcon, 'ss_playground.test_table')
[1] FALSE  

我很困惑,因为我以为表创建成功,但在数据库本身中也找不到。 当我尝试发送它并再次创建它时,我得到以下信息:

> dbSendQuery(redshiftcon,
         "create table ss_playground.test_table (unique_id VARCHAR,
category VARCHAR,
name VARCHAR,
number_min float);")

Error in postgresqlExecStatement(conn, statement, ...) : 
RS-DBI driver: (could not Retrieve the result : ERROR:  Relation   
'test_table' already exists)

我有什么遗漏吗?

请帮忙! 谢谢

【问题讨论】:

我不确定,但请在创建表后尝试添加commit;。您的更改可能是特定于会话的,您可能想先提交它们。 【参考方案1】:

我认为ss_playground 不是此用户/角色的默认架构。您可以尝试将架构设置为默认值。看看here。

要快速修复您的代码,您可以尝试:

dbExistsTable(redshiftcon, c("ss_playground","test_table"))

或将其破解为

any(grepl("test_table",dbListTables(redshiftcon)))

【讨论】:

感谢您的帮助!使用此代码,我看到该表实际上存在。 &gt; dbExistsTable(redshiftcon, c("ss_playground","test_table")) [1] TRUE 是否需要跟进才能授予权限? 假设您的用户username 可以访问架构,只需运行SET search_path = ss_playground, public;。所以看起来像rs &lt;- dbSendQuery(conn =redshiftcon, "SET search_path =ss_playground, public;")。然后你不需要做c(schema, tabl_name),只需通过dbExistsTable(redshiftcon, test_table)询问即可获得。 我不是特别想公开整个架构,有没有办法只公开那个特定的表?我在玩&gt; dbSendQuery(redshiftcon, "grant select on test_table in schema ss_playground to readonly;"),其中 readonly 是另一个用户 它并没有公开,它只是说每个查询应该首先尝试架构ss_playground,然后再尝试public。尝试阅读 redshift 文档docs.aws.amazon.com/redshift/latest/dg/r_search_path.html

以上是关于使用 R 进行红移的主要内容,如果未能解决你的问题,请参考以下文章

R将tbl对象更新为红移

从 R 连接到亚马逊红移时出错 - Windows 10

r 红移

JDBC 创建表并插入亚马逊红移时出错

红移时间数据类型

使用胶水数据目录中定义的外部表红移光谱