使用 RPostgreSQL 和 dplyr 将 R 连接到 Redshift 的理论是什么
what is the theory of connecting R to Redshift using RPostgreSQL and dplyr
我只知道如何使用 RPostgreSQL 和 dplyr 将 R 连接到 Redshift。但我对一些事情感到困惑:
- 当我想在屏幕上显示某些内容时,例如 head(a),其中 a 是从 Redshift 检索的结果,它会非常慢。但是,如果我只选择了几个字段,比方说只有 4 列,那么它会快得多。那么R是如何连接Redshift的呢?
- 如果我想使用一些模型,例如随机森林或广义线性,是否有必要使用 as.data.frame 将结果传输到我本地机器上的数据帧?我试过了。我必须在使用 ggplot2 绘制图表之前执行此操作。
你读过dplyr vignette on databases了吗?您真的应该阅读更多详细信息。
您似乎混淆了 R 与数据库和代码执行之间的联系。连接允许 R 和数据库之间的通信 - R 可以向数据库发送 SQL 查询,数据库可以将结果发回。仅此而已。
dplyr
尝试将一些 R 代码转换为 SQL 代码,以便 SQL 可以在数据库上执行并且您无需编写 SQL 即可获得结果你自己。正如小插图所解释的那样,很少有 R 命令可以翻译。主要的 dplyr
动词起作用,即 select
、mutate
(虽然没有用于 SQLite 的分组数据框,但是这在 postgres 中可用),group_by
, summarize
, arrange
, filter
。还有基本的数学函数(从小插图中引用):
- basic math operators:
+, -, *, /, %%, ^
- math functions:
abs, acos, acosh, asin, asinh, atan, atan2, atanh, ceiling, cos, cosh, cot, coth, exp, floor, log, log10, round, sign, sin, sinh, sqrt, tan, tanh
- logical comparisons:
<, <=, !=, >=, >, ==, %in%
- boolean operations:
&, &&, |, ||, !, xor
- basic aggregations:
mean, sum, min, max, sd, var
任何其他内容,您会将数据拉入 R 并 运行 R 命令对其进行处理。对于不在列表中的 head()
,您可能将整个 table 拉入 R,然后查看前 6 行。
对于 Redshift,这对于宽范围来说会特别慢 table - Redshift 使用列式存储,因此仅提取您需要的列具有强大的性能优势。
此外,如小插图中所述,dplyr
将尽可能推迟 SQL 评估,从而提高效率。将结果带到 R 的预期方式是 collect
,但您的 as_data_frame
听起来也很有效。
我只知道如何使用 RPostgreSQL 和 dplyr 将 R 连接到 Redshift。但我对一些事情感到困惑:
- 当我想在屏幕上显示某些内容时,例如 head(a),其中 a 是从 Redshift 检索的结果,它会非常慢。但是,如果我只选择了几个字段,比方说只有 4 列,那么它会快得多。那么R是如何连接Redshift的呢?
- 如果我想使用一些模型,例如随机森林或广义线性,是否有必要使用 as.data.frame 将结果传输到我本地机器上的数据帧?我试过了。我必须在使用 ggplot2 绘制图表之前执行此操作。
你读过dplyr vignette on databases了吗?您真的应该阅读更多详细信息。
您似乎混淆了 R 与数据库和代码执行之间的联系。连接允许 R 和数据库之间的通信 - R 可以向数据库发送 SQL 查询,数据库可以将结果发回。仅此而已。
dplyr
尝试将一些 R 代码转换为 SQL 代码,以便 SQL 可以在数据库上执行并且您无需编写 SQL 即可获得结果你自己。正如小插图所解释的那样,很少有 R 命令可以翻译。主要的 dplyr
动词起作用,即 select
、mutate
(虽然没有用于 SQLite 的分组数据框,但是这在 postgres 中可用),group_by
, summarize
, arrange
, filter
。还有基本的数学函数(从小插图中引用):
- basic math operators:
+, -, *, /, %%, ^
- math functions:
abs, acos, acosh, asin, asinh, atan, atan2, atanh, ceiling, cos, cosh, cot, coth, exp, floor, log, log10, round, sign, sin, sinh, sqrt, tan, tanh
- logical comparisons:
<, <=, !=, >=, >, ==, %in%
- boolean operations:
&, &&, |, ||, !, xor
- basic aggregations:
mean, sum, min, max, sd, var
任何其他内容,您会将数据拉入 R 并 运行 R 命令对其进行处理。对于不在列表中的 head()
,您可能将整个 table 拉入 R,然后查看前 6 行。
对于 Redshift,这对于宽范围来说会特别慢 table - Redshift 使用列式存储,因此仅提取您需要的列具有强大的性能优势。
此外,如小插图中所述,dplyr
将尽可能推迟 SQL 评估,从而提高效率。将结果带到 R 的预期方式是 collect
,但您的 as_data_frame
听起来也很有效。