Google bigquery BigQuery标准SQL:使用_TABLE_后缀的最后7天

Google bigquery BigQuery标准SQL:使用_TABLE_后缀的最后7天,google-bigquery,Google Bigquery,问题:我想使用_TABLE_后缀从多个Google Analytics sessions表中提取数据,但我想将后缀参数设置为“七天前”和“一天前”(即提取过去7天的数据) 当前语法(不起作用): 在我看来,语法中没有错误,但BigQuery无法读取我的日期函数,因此无法将它们附加到ga_sessions_*通配符中 灵感: BigQuery Cookbook有一个legacySQL示例,我一直以此为基础:() 我尝试过的事情:(那不起作用) 使用DATE_SUB代替DATE_ADD,使用CURR

问题:我想使用_TABLE_后缀从多个Google Analytics sessions表中提取数据,但我想将后缀参数设置为“七天前”和“一天前”(即提取过去7天的数据)

当前语法(不起作用):

在我看来,语法中没有错误,但BigQuery无法读取我的日期函数,因此无法将它们附加到ga_sessions_*通配符中

灵感:

BigQuery Cookbook有一个legacySQL示例,我一直以此为基础:()

我尝试过的事情:(那不起作用)

使用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_格式,以获取不带破折号的日期:

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。”

试图跳过日期子条款周围的连字符“”

WHERE
  _TABLE_SUFFIX BETWEEN 
  DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) AND
  DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
导致以下错误消息“错误:参数类型之间的运算符没有匹配的签名:字符串、日期、日期。支持的签名:(ANY)介于(ANY)和(ANY)之间)


提前感谢,

您的最后一次尝试几乎成功了。您需要将字符串转换为日期,以便在比较中使用它:

WHERE
  PARSE_DATE('%Y%m%d', _TABLE_SUFFIX) BETWEEN 
  DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) AND
  DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)

Elliott的回答是正确的,但如果您想在此类查询中获得BigQuery的最佳性能,而不是将
\u TABLESUFFIX
转换为
日期
,您应该将
当前日期
表达式转换为字符串:

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))

这适用于那些只想在大查询中分割上周数据的人。适用于任何数据集,只要您有时间戳

where TIMESTAMPFIELD >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)

如果您还想包括今天的数据,请使用
日内
表:

谷歌分析:()

谷歌Firebase分析:()


非常感谢。您的建议导致了另一个错误,但在对通配符进行了一些轻微的编辑后,仍然有效。(对新读者的解释:parse_date无法处理日期内数据集,因此新的通配符应该是
projectname.123456789.ga_sessions_20*
,并且parse date应该是parse_date(“%y%m%d”,_TABLE_后缀),带有非大写y,以获得2位数的年份,而不是4位数的年份。)谢谢!信用,信用是由于Elliot,但性能也是一个重要的角度,特别是在处理大量数据时。更改为已接受的答案。(对于新读者,另请参阅我对Elliott Brossards答案的评论,关于对通配符的小编辑)我认为日期格式需要是“%Y%m%d”,因为国会Y输出4位数的年份,而小写是2位数year@Elliott布罗萨德的答案是正确的。我自己尝试过,但没有返回结果。但埃利奥特的答案对我来说是可行的。我不确定这是否正确——当我硬编码日期范围时——我似乎使用“20180708”和“20180715”之间的“WHERE”TABLE_后缀得到了不同的数据。“WHERE”TABLE_后缀使用的是相同的,但现在它显示的是0b,没有结果,现在在硬编码日期时起作用
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))
where TIMESTAMPFIELD >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
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())
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())