【问题标题】:Firebase BigQuery server offset timeFirebase BigQuery 服务器偏移时间
【发布时间】:2019-04-13 19:21:17
【问题描述】:

背景: 我正在将 Firebase 分析数据导出到 BigQuery。我正在使用 cron 作业来处理 BigQuery 中的数据以获得洞察力。

问题: 为了能够仅处理增量数据,即自上次运行我的 cron 作业以来到达的数据,我需要一种方法来确定数据到达服务器的时间,因为生成了 event_timestamp在客户端,可以在发送前缓存在客户端。

见解: 我已经使用 event_server_timestamp_offset(偏移量)进行了实验,我认为我可以将其与 event_timestamp 一起使用。但我预计偏移量只会是正数,但也可能是负数。当我查看整个导出的 Firebase 分析数据集中的偏移量的 MAX 和 MIN 并将其重新计算为年而不是微秒时,我可以获得超过 18 年的偏移量。

查询:

SELECT
  MAX(event_server_timestamp_offset)/(1000000*60*60*24) max_days, 
  MIN(event_server_timestamp_offset)/(1000000*60*60*24) min_days
FROM
  `analytics_<project_id>.events_*`

结果:max_days=6784.485790436655, min_days=-106.95833052104166

问题:

  • 如何确定 Firebase 导出的 BigQuery 数据的服务器到达时间,以便我可以运行仅处理增量数据的 cron 作业?
  • 我可以将 event_server_timestamp_offsetevent_timestamp 一起使用吗?如果有,怎么做?

最好的问候, 丹尼尔

【问题讨论】:

  • 平平平平
  • 你是如何解决这个问题的?我还认为使用 event_timestamp 和 event_server_timestamp_offset 可以获取服务器记录时间。不是这样吗?

标签: firebase google-bigquery firebase-analytics


【解决方案1】:

令人惊讶的是,这个问题已经有将近 2 年没有明确的答案了,我把从 Firebase 支持团队那里得到的答案留在这里。格式是 - 提出问题,然后是支持人员的回答。

第一季度。 event_date - 记录事件的日期(应用注册时区中的 YYYYMMDD 格式)。这是否意味着该事件发生在该日期,或者它实际上是在该日期收集的?

A1。根据文档, event_date 是指事件记录/发生的日期。请注意,event_date 基于您的 Firebase 项目的 Analytics 时区设置。

第二季度。 event_timestamp - 事件在客户端上记录的时间(以微秒为单位,UTC)。可以安全地假设这是事件在客户端发生的确切时间戳(当然是在应用程序时区)?

A2。是的,这基于设备时区设置。但是,如果设备时间不正确,则 event_timestamp 可能会出现偏差。

第三季度。 event_server_timestamp_offset - 收集时间和上传时间之间的时间戳偏移量,单位为微秒。这是导致所有误解的主要字段 - 在我们 2020 年的 BigQuery 表中,该字段的值介于 5 天到 -2 天之间。我的意思是收集时间怎么会提前 2 天?

A3。导出模式中的 event_server_timestamp_offset 字段是事件发生与应用程序将其上传到我们的服务器之间的时间差。换句话说,这是根据我们的服务器估计的客户端本地时间和实际时间之间的差异。该字段的值通常为正值,但如果设备时间设置不正确,也可以为负值。

第四季度。最后一个问题非常重要——我们可以忽略 event_server_timestamp_offset 字段,只依赖 event_timestamp - 作为事件发生在客户端的确切日期和时间(不是 收集,不上传等)。如果不是 - 请解释我们如何获得 发生在客户端的事件的确切日期时间。但如果是 请告诉我为什么我们需要 event_server_timestamp_offset 字段?

A4。是的,您实际上可能会忽略它并单独使用 event_timestamp 。但是,如前所述,如果设备时间设置不正确,event_timestamp 可能会关闭,但它不会真正影响分析数据的整体情况,因为此类情况通常是一次性的。

【讨论】:

  • 为了让答案更清楚,让我们考虑一下场景,如果我将设备时间更改为 2010 年 1 月 1 日。 event_date 和 event_timestamp 会显示“1-jan-2010”的时间吗?对此的回答将使上述帖子更加具体
【解决方案2】:

我们使用 event_date 作为指标,每天加载一次数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 2012-09-02
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    相关资源
    最近更新 更多