【问题标题】:BigQuery: Dynamic TABLE_DATE_RANGE depending on iso week and day of the weekBigQuery:动态 TABLE_DATE_RANGE 取决于 iso 星期和星期几
【发布时间】:2017-07-19 13:56:47
【问题描述】:

我有一个关于 BQ 的查询,我每周运行一次,但并不总是在一周的同一天(有时是星期一,有时是星期二等)

每周,我需要查询最近两个日历周的数据:例如假设我们现在在 CW 27(等周,星期一是第一天),我想要 从 CW 25 的星期一到 CW 26 的星期日的数据。

FROM (TABLE_DATE_RANGE([xxx.ga_sessions_], DATE_ADD(CURRENT_TIMESTAMP(), -14, 'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY')))如果我每周一都在星期一运行查询,则可以工作,但限制是我在不同的工作日运行它。

有人知道吗?非常感谢任何输入。

提前致谢!

【问题讨论】:

  • 只是想知道,有没有理由不使用Standard 版本的BQ?它比传统的要好得多:)!
  • 我肯定会考虑迁移,我对 SQL 和 BQ 还很陌生,仍然需要弄清楚两者之间的区别 ;) - 感谢您的建议!

标签: sql google-bigquery


【解决方案1】:

以下是您仍在使用的 BigQuery Legacy SQL

#legacySQL
SELECT 
  <your fields here ...>
FROM (TABLE_DATE_RANGE([xxx.ga_sessions_], 
        DATE_ADD(CURRENT_TIMESTAMP(), -14 - DAYOFWEEK(CURRENT_TIMESTAMP()) + 2, 'DAY'), 
        DATE_ADD(CURRENT_TIMESTAMP(),  -1 - DAYOFWEEK(CURRENT_TIMESTAMP()) + 2, 'DAY')
      ))

请注意,非常推荐migrate to Standard SQL

使用标准 SQL,您可以使用 _TABLE_SUFFIX 伪列上的过滤器实现与 TABLE_DATE_RANGE 相同的语义

见下面的例子

#standardSQL
SELECT 
  <your fields here ...>
FROM `xxx.ga_sessions_*`
WHERE _TABLE_SUFFIX 
  BETWEEN FORMAT_DATE('%Y%m%d',DATE_ADD(CURRENT_DATE(), INTERVAL -14 - EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) + 2 DAY))
  AND FORMAT_DATE('%Y%m%d',DATE_ADD(CURRENT_DATE(), INTERVAL -1 - EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) + 2 DAY))

【讨论】:

  • 非常感谢您的帮助。它确实有效,我肯定会考虑建议的迁移。 :)
猜你喜欢
  • 1970-01-01
  • 2019-03-19
  • 2016-10-22
  • 2015-05-13
  • 2022-08-10
  • 1970-01-01
  • 2013-12-31
  • 2018-02-10
  • 1970-01-01
相关资源
最近更新 更多