【问题标题】:Daily schedule in BigQuery using data from Firebase analyticsBigQuery 中使用 Firebase 分析数据的每日计划
【发布时间】: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 中安排前一天的每日更新的最佳做法是什么,这样我就不会错过几天?

【问题讨论】:

    标签: firebase google-bigquery firebase-analytics


    【解决方案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)
    ...
    

    【讨论】:

      猜你喜欢
      • 2021-07-21
      • 2018-02-01
      • 2019-03-16
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 2012-05-11
      相关资源
      最近更新 更多