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

Posted

技术标签:

【中文标题】使用 RPostgreSQL 和 dplyr 将 R 连接到 Redshift 的理论是啥【英文标题】:what is the theory of connecting R to Redshift using RPostgreSQL and dplyr使用 RPostgreSQL 和 dplyr 将 R 连接到 Redshift 的理论是什么 【发布时间】:2016-10-11 22:45:47 【问题描述】:

我只知道如何使用 RPostgreSQL 和 dplyr 将 R 连接到 Redshift。但我对几件事感到困惑:

    当我想在屏幕上显示某些内容时,例如 head(a),其中 a 是从 Redshift 检索的结果,它会非常慢。但是,如果我只选择了几个字段,比如说只有 4 列,那么它会快得多。那么 R 是如何连接 Redshift 的呢? 如果我想使用一些模型,例如随机森林或广义线性模型,是否需要使用 as.data.frame 将结果传输到本地计算机上的数据框?我试过了。在使用 ggplot2 绘制图表之前,我必须这样做。

【问题讨论】:

【参考方案1】:

你读过dplyr vignette on databases吗?你真的应该阅读更多细节。

您似乎混淆了 R 与数据库和代码执行之间的连接。连接允许 R 和数据库之间进行通信 - R 可以将 SQL 查询发送到 db,而 db 可以将结果发回。仅此而已。

dplyr 尝试将一些 R 代码转换为 SQL 代码,以便 SQL 可以在数据库上执行,您无需自己编写 SQL 即可获得结果。正如小插图所解释的,很少有 R 命令可以翻译。主要的dplyr 动词起作用,即selectmutate(虽然没有用于 SQLite 的分组数据帧,但它在 postgres 中可用)、group_bysummarizearrangefilter .还有基本的数学函数(引自小插图):

基本数学运算符:+, -, *, /, %%, ^ 数学函数:abs, acos, acosh, asin, asinh, atan, atan2, atanh, ceiling, cos, cosh, cot, coth, exp, floor, log, log10, round, sign, sin, sinh, sqrt, tan, tanh 逻辑比较:<, <=, !=, >=, >, ==, %in% 布尔运算:&, &&, |, ||, !, xor 基本聚合:mean, sum, min, max, sd, var

除此之外,您将把数据拉入 R 并在其上运行 R 命令。对于不在列表中的head(),您可能正在将整个表拉入 R,然后查看前 6 行。

对于 Redshift,这对于宽表来说会特别慢 - Redshift 使用列式存储,因此仅提取您需要的列具有强大的性能优势。

另外,正如小插图中所解释的,dplyr 将尽可能推迟 SQL 评估,从而提高效率。将结果带到 R 的预期方法是 collect,但您的 as_data_frame 听起来也很有效。

【讨论】:

非常感谢!我刚开始学习这个。我什至不知道这个文件 head() 只会从数据库中拉下 6 行。

以上是关于使用 RPostgreSQL 和 dplyr 将 R 连接到 Redshift 的理论是啥的主要内容,如果未能解决你的问题,请参考以下文章

R 在使用 dplyr 或 RPostgreSQL 的模式下访问 redshift 表

使用 dplyr 连接到 SSL 加密的远程数据库

将 RpostgreSQL 与 sqldf 一起使用会使 R 崩溃

如何使用 libssl 和 libpg 和 SSL 激活编译 RpostgreSQL

如何使用 RPostgreSQL 将表写入 Panoply?

无法使用 RPostgreSQL 连接到 AWS Redshift