BigQuery中使用Firebase分析数据的每日日程安排



因此,我在BigQuery中使用"追加到表";首选项,所以它每天都会将昨天的数据添加到我指定的表中。我计划每天上午9点运行这个查询,但问题是有时Firebase会在上午9点之后在BigQuery中创建前一天的数据表。

我将使用的每日计划SELECT示例是:

SELECT * FROM `analytics.events_*` WHERE _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))

在Firebase的BigQuery中为前一天安排每日更新的最佳实践是什么,这样我就不会错过几天了?

Bigquery Schedules设置为在固定时间运行。如果传入数据的交付时间不同,那么BigQuery Schedules不是您想要的。

但是,如果您坚持使用BigQuery Schedules,您可以放宽WHERE条件并捕获";缺少";计划下一次运行的天数。然后,您翻转了您的问题,转而需要处理不追加已经追加的行的情况(也增加了查询成本(:

SELECT * 
FROM `analytics.events_*` 
LEFT JOIN [target dataset].[target table] AS T
USING (event_name, event_timestamp, user_pseudo_id)
WHERE T.event_name IS NULL
AND T.event_timestamp IS NULL
AND T.user_pseudo_id IS NULL
AND _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 2 DAY))

或者,您也可以将查询修改为INSERT语句,在其中插入记录并类似地处理重复:

INSERT `[target dataset].[target table]`
SELECT *
FROM `analytics.events_*` 
LEFT JOIN `[target dataset].[target table]` AS T
USING (event_name, event_timestamp, user_pseudo_id)
WHERE _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 2 DAY))
AND T.event_name IS NULL
AND T.event_timestamp IS NULL
AND T.user_pseudo_id IS NULL

那么您就不需要为时间表配置目标表了。

此外,如果您的目标表是时间戳分区的,您可以通过添加一个严格限制为单个日期而不是整个表的额外WHERE条件来限制在目标表中扫描的范围,从而减少扫描的数据量:

...
AND DATE(T.event_timestamp) = DATE_SUB(CURRENT_DATE(), INTERVAL 2)
...

最新更新