【发布时间】:2017-11-29 22:52:42
【问题描述】:
问题:我想使用 _TABLE_SUFFIX 从多个 Google Analytics 会话表中提取数据,但我想将后缀参数设置在“七天前”和“一天前”之间(即拉取过去 7 天的数据)
当前语法(不起作用):
#StandardSQL
SELECT
date,
SUM (totals.visits) AS visits
FROM
`projectname.123456789.ga_sessions_*`
WHERE
_TABLE_SUFFIX BETWEEN
'DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL -7 DAY)' AND
'DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL -1 DAY)'
GROUP BY
date
ORDER BY
date ASC
这给了我消息“有效:此查询在运行时将处理 0 B。”在我看来,语法没有错误,但 BigQuery 无法读取我的日期函数,因此无法将它们添加到 ga_sessions_* 通配符
灵感:
BigQuery Cookbook 有一个 legacySQL 示例,我一直以此为基础:(https://support.google.com/analytics/answer/4419694?hl=en#7days)
#LegacySQL
SELECT
date,
SUM (totals.visits) AS visits
FROM
(TABLE_DATE_RANGE([73156703.ga_sessions_],
DATE_ADD(CURRENT_TIMESTAMP(), -7, 'DAY'),
DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY')))
GROUP BY
date
ORDER BY
date ASC
我尝试过的事情:(不起作用)
使用 DATE_SUB 代替 DATE_ADD 并使用 CURRENT_DATE 代替 CURRENT_TIMESTAMP:
WHERE
_TABLE_SUFFIX BETWEEN
'DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)' AND
'DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)'
导致“有效:此查询在运行时将处理 0 B。”
在 DATE_SUB 和 CURRENT_DATE 周围使用 DATE_FORMAT 以获得不带破折号的日期:
WHERE
_TABLE_SUFFIX BETWEEN
'FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY))' AND
'FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))'
导致“有效:此查询在运行时将处理 0 B。”
尝试在 DATE_SUB 子句周围跳过连字符 ''
WHERE
_TABLE_SUFFIX BETWEEN
DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) AND
DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
导致以下错误消息“错误:对于参数类型的运算符 BETWEEN 没有匹配签名:STRING、DATE、DATE。支持的签名:(ANY) BETWEEN (ANY) AND (ANY)”
提前致谢,
【问题讨论】:
标签: google-bigquery