【发布时间】:2021-12-30 11:17:12
【问题描述】:
我正在使用sqldf 在 SQL 中训练一些 r 用户。在加载sqldf 之前加载RPostgreSQL 或RH2 将更改sqldf 使用的默认SQL。这适用于 h2,但每次我加载 RPostgreSQL 时,R 都会在第一次尝试查询时崩溃。我想让sqldf 与RPostgreSQL 一起使用,以启用SQLite 和h2 中缺少的日期功能。
# packages
library(tidyverse)
# library(RH2) # comment out this row or the next to determine default SQL for sqldf
library(RPostgreSQL)
library(sqldf)
输出确认“sqldf 将默认使用 PostgreSQL”
创建一些数据:
set.seed(42)
N <- 1e6
sales <- tibble(
buyer_id = 1:N/100,
sales_date = sample(seq(as.Date('2018/01/01'), as.Date('2021/01/01'), by="day"), N, replace = TRUE),
sales_amount = rpois(N, 200)
)
崩溃R:
sqldf("
select
max(sales_date)
from sales
")
"R 会话中止 R 遇到致命错误 会话已终止”
【问题讨论】:
-
加载 sqldf 和 RPostgreSQL 的顺序无关紧要。您是否还阅读了
?sqldf并为 postgresql 正确配置了它?你安装postgreSQL吗?没有R可以用吗? h2 有 18 个时间和日期函数,所以你可能不需要 postgresql。 h2database.com/html/functions.html -
@G.Grothendieck h2 中缺少的关键日期函数是 date_trunc()。我没有看到允许在 h2 中按周、月、qtr、yr 快速分组日期的等效函数。 h2 用户必须分两步解析出年和周或年月,然后重新组合。
-
我已经阅读了?sqldf,并进行了相应的配置。该错误似乎与 RPostgreSQL 有关。
-
(1) 如果您只需要该功能进行分组,则在 h2 中使用 formatdatetime。或者使用年、月等函数,将它们组合起来得到你需要的。 (2) 我相信 h2 实际上确实有 trunc_date 但它只在 postgresql 模式下打开,因为它不是标准 SQL。您可能需要修改 RH2 才能做到这一点。
标签: r sqldf rpostgresql