8

背景: 我将 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一起使用吗?如果是这样,怎么做?

最好的问候,丹尼尔

4

2 回答 2

11

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

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

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

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

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

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

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

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

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

于 2020-07-01T06:49:49.033 回答
-1

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

于 2019-10-21T23:46:50.290 回答