问题:我想使用_TABLE_SUFFIX从多个Google Analytics会话表中提取数据,但我希望将后缀参数设置为"七天前"和#34;一天前" (即提取最近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有一个遗留SQL的例子,我一直基于这个例子:(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)"
提前致谢,
答案 0 :(得分:8)
Elliott的回答是正确的,但是如果您想要从BigQuery中获得最佳性能来进行此类查询,而不是将_TABLESUFFIX
转换为DATE
,则应转换CURRENT_DATE
个表达式字符串:
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))
答案 1 :(得分:5)
你的最后一次尝试几乎就在那里。您需要将字符串转换为日期才能在比较中使用它:
a
答案 2 :(得分:0)
这适用于任何希望在大查询中细分出最后一周的数据的人。只要有时间戳,即可用于任何数据集!
where TIMESTAMPFIELD >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
答案 3 :(得分:0)
如果您还想包括今天的数据,请使用 intraday
表:
谷歌分析:(docs)
SELECT *
FROM `myproject.xxxxxxx.ga_sessions_*`
WHERE _TABLE_SUFFIX BETWEEN
FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)) AND
FORMAT_DATE("intraday_%Y%m%d", CURRENT_DATE())
Google Analytics for Firebase: (docs)
SELECT *
FROM `myproject.analytics_xxxxxxx.events_*`
WHERE _TABLE_SUFFIX BETWEEN
FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)) AND
FORMAT_DATE("intraday_%Y%m%d", CURRENT_DATE())