【发布时间】:2021-12-12 04:34:55
【问题描述】:
我的代码运行良好,如下所示:
sql <- paste0("
SELECT
date
, dimension2
, landingPagePath
, source
, medium
, campaign
, keyword
, adContent
FROM
`project_id.google_analytics.ga_cid_sessions`
WHERE
DATE(date) > cast('"
, today()-30
,"' as date)
")
table_bq_cid_sessions <- bq_project_query(bq_project, sql)
bq_cid_sessions <- bq_table_download(table_bq_cid_sessions)
我希望用 dplyr 替换它并尝试:
bq_cid_sessions <- select(
bq_tbl_ga_cid_sessions
, c(date, dimension2)
) %>%
filter(date >= today()-30) %>%
collect()
但有错误:
Ошибка: Job 'project_id.job_xxxxxxxxxxx.US' failed
x No matching signature for operator - for argument types: DATE, FLOAT64. Supported signatures: INT64 - INT64; NUMERIC - NUMERIC; BIGNUMERIC - BIGNUMERIC; FLOAT64 - FLOAT64; DATE - INT64; DATE - DATE; TIMESTAMP - TIMESTAMP; DATETIME - DATETIME; TIME - TIME; TIMESTAMP - INTERVAL; DATE - INTERVAL; DATETIME - INTERVAL; INTERVAL - INTERVAL at [4:28] [invalidQuery]
我做错了什么?
【问题讨论】:
-
似乎
today()-30正在返回 FLOAT64。是lubridate::today()吗?如果你使用filter(date >= as.Date(today())-30) %>%,它会解决吗? -
我试过你的代码,它对我来说很好用。我使用了
lubridate::today()并检查了today()-30返回一个日期。我正在使用lubridate_1.8.0和R version 4.1.1。你使用的是什么版本的 R 和 lubridate? -
@JonSpring,对不起,是的,它是润滑的。 @RiccoD,相同版本的包和 R。我现在看到,在 BigQuery 中的日期为 STRING。使用 dplyr 选择时如何转换它?
-
或许
filter(as.Date(date) >= today()-30)
标签: r dplyr google-bigquery