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

如何将应用程序的旧分析数据从 firebase 获取到 bigquery?

如何计算 Firebase 中的 MAU?我需要 BigQuery 吗?

Web 的 Firebase 分析不流向 BigQuery