BigQuery 中使用 Firebase 分析数据的每日计划
Posted
技术标签:
【中文标题】BigQuery 中使用 Firebase 分析数据的每日计划【英文标题】:Daily schedule in BigQuery using data from Firebase analytics 【发布时间】:2020-10-14 11:35:46 【问题描述】:所以我在 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 中安排前一天的每日更新的最佳做法是什么,这样我就不会错过几天?
【问题讨论】:
【参考方案1】:Bigquery 计划设置为在固定时间运行。如果您的传入数据在交付时间上有所不同,那么 BigQuery 计划就不是您想要的。
但是,如果您坚持使用 BigQuery 计划,则可以放宽 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
那么您就不需要为计划配置目标表了。
此外,如果您的目标表是时间戳分区的,您可以通过添加一个严格限制为单个日期而不是整张桌子:
...
AND DATE(T.event_timestamp) = DATE_SUB(CURRENT_DATE(), INTERVAL 2)
...
【讨论】:
以上是关于BigQuery 中使用 Firebase 分析数据的每日计划的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 BigQuery 从 Firebase 分析中获取事件转换
能否以编程方式从 ios 应用端访问 bigquery 或 Firebase 分析数据?
如何将应用程序的旧分析数据从 firebase 获取到 bigquery?