R:如何使用 dplyr(函数 scr_postgres)从 redshift 中的模式中选择表?

Posted

技术标签:

【中文标题】R:如何使用 dplyr(函数 scr_postgres)从 redshift 中的模式中选择表?【英文标题】:R: How to select a table from a schema in redshift using dplyr (function scr_postgres)? 【发布时间】:2015-09-08 12:34:14 【问题描述】:

我使用 dplyr(函数 scr_postgres)在 redshift 中与我的数据库建立了连接,但因为它在一个架构下,我无法选择表。

尝试在不使用架构的情况下访问时出错:

requests <- tbl(my_db, "sessions")
Error in postgresqlExecStatement(conn, statement, ...) : RS-DBI driver: (could not Retrieve the result : ERROR:  relation     "sessions" does not exist

尝试使用一个字符串中的架构访问时出错:

requests <- tbl(my_db, "analytics.sessions")
Erro: Table analytics.sessions not found in database 

尝试使用模式组合字符串访问时出错:

requests <- tbl(my_db, c("analytics", "sessions"))
Erro: length(from) not equal to 1

但在 RPostgreSQL 中它可以工作:

dbExistsTable(my_db$con, c("analytics", "sessions"))
[1] TRUE

【问题讨论】:

你能显示你的表模式吗?为什么查询analytics.sessions时会报错Table snowplow_pivots.sessions not found in database ?根据我在手册 (cran.r-project.org/web/packages/DBI/DBI.pdf) 中阅读的内容,您不能将具有 2 个值的数组传递给 dbExistsTable。函数tbl从何而来? @VerenaHaunschmid 感谢您强调这个问题。为了简洁起见,我更改了名称。 tbl 是 dplyr 包中的一个函数。 好的,我不知道您可以使用 dplyr 的函数直接查询数据库。但正如我所说,最后一个命令似乎不对,因为它只需要一个字符值而不是数组。你能展示你的数据库结构吗? 你能在 dplyr 中设置 search_path 吗?这将在会话级别设置它,但根据您的设置,您可以在集群级别默认它以包含分析架构。 @mike_pdb 就是这样!谢谢你。我可以设置它并且它工作:my_db &lt;- src_postgres(host="host", port="5439", dbname = "dbname", user = "user", password = "XXXX", options="-c search_path=analytics") 【参考方案1】:

按照@mike_db here 的建议,我可以在 search_path 中设置架构。

为此,我需要在打开与 src_postgres 的连接时设置 [options] 参数:

my_db <- src_postgres(host="host", port="5439", 
         dbname = "dbname", user = "user", password = "XXXX", 
         options="-c search_path=analytics")

或者,您可以在选择表格时使用类似的东西:

requests <- tbl(my_db, sql("SELECT * from analytics.sessions WHERE 0=1"))

【讨论】:

感谢@mike_db 和雷纳托。对我来说,关键的见解是您可以将 select 语句包装在 sql() 中,作为指定模式的一种方式。这对用户更友好。

以上是关于R:如何使用 dplyr(函数 scr_postgres)从 redshift 中的模式中选择表?的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中使用 dplyr 在 group_by 之后应用自定义函数

R语言dplyr包使用dplyr函数使用group_by函数summarise函数和mutate函数计算分组占比实战

R语言使用dplyr包的select函数和filter函数进行行数据筛选(row selection)

R语言dplyr包使用group_by函数和summarise函数构建频率表实战

R行数据过滤基于dplyr包filter函数

函数R中的Dplyr变量名称