BigQuery:在回填时如何在查询中使用run_date



我想从昨天的firebase Analytics事件表中获取数据,转换数据并更新具有与原始事件表相同后缀的现有分区表。
对于目标表,我可以使用模板:shares_{run_time-24h|"%Y%m%d"}
但是在查询本身中,我能想到的只是:

WHERE
_TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))

手动运行时效果很好,但显然会生成昨天我使用回填(而不是回填run_date(的日期
我尝试使用@run_date W/&带有偏移,但不是有效的查询。

您应该能够将@run_date作为参数传递给FORMAT_DATE

WHERE _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', @run_date)

这起作用,因为@run_date具有类型DATE,因此您可以在DATE表达式有效的任何地方使用它。

WHERE _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', @run_date)

实际上此方法有效。为此,我遇到了一些问题,例如@Sagilow说:"未宣布的查询参数"。这可能是因为@run_date无法操纵日期和在几天之间操作。因此,在查询构造函数中,它不起作用,在回填计划中,每天执行确切日子的查询(不要忘记,因为表已经存在,所以您不需要间隔(。

我已经将上述答案标记为正确,但是我只是想在此线程的一部分中添加另一个有趣的用例。我在以下查询下创建了每日活动用户的回填。然后可以将查询用作BQ的"计划查询"。它包含 @run_time -variable(而不是@run_date,但您也可以使用它(。注意:由于查询包含一个变量,您只能在计划查询的视图中而不是在BigQuery的IDE中进行测试。

目标表: daus_1dayactiveusers_BackFillTest{run_time|"%Y%m%d"}

查询:

SELECT
  FORMAT_DATE('%Y%m%d', DATE(@run_time)) AS current_date,
  FORMAT_DATE('%Y%m%d', DATE_ADD(DATE(@run_time), INTERVAL - 3 DAY)) AS beg_date,
  FORMAT_DATE('%Y%m%d', DATE_ADD(DATE(@run_time), INTERVAL - 2 DAY)) AS end_date,
  TIMESTAMP_DIFF(TIMESTAMP(DATE_ADD(DATE(@run_time), INTERVAL - 2 DAY)), TIMESTAMP(DATE_ADD(DATE(@run_time), INTERVAL - 3 DAY)), HOUR) AS hours_diff,
  COUNT(DISTINCT user_pseudo_id) AS uniq_users
FROM
  `<>.analytics_12345679810.<>`
WHERE
  event_name = 'user_engagement'
  AND event_date >= FORMAT_DATE('%Y%m%d', DATE_ADD(DATE(@run_time), INTERVAL - 3 DAY))
  AND event_date < FORMAT_DATE('%Y%m%d', DATE_ADD(DATE(@run_time), INTERVAL - 2 DAY))
  AND platform = "ANDROID"

最新更新