我有一个通过 Firebase 导出连接到 BigQuery Warehouse 的移动应用程序。为了使仪表板保持最新状态,我每天运行几次增量作业 (dbt),以从 BigQuery 创建的包含导入 Firebase 数据的表中提取数据。 (参见本文)。
对于实时数据流,会创建一个后缀为“_intraday”的表。当这一天结束后,数据将转移到仅包含全天的表中,并且日内表将被删除。
看起来当这种情况发生时(从盘中变为全天),每个条目的 event_timestamp (UNIX) 都会略有变化(几毫秒)。问题:我将 user_id 和 event_timestamp 的组合定义为唯一键。由于这个问题,处理移动表的第一个作业会将每一行识别为一个新的、唯一的行,将我的结果数据精确复制 2。
有人见过这个问题并知道它是否是预期的吗?除了在客户端实现事件 ID、为每个事件提供唯一标识符(通过自定义事件参数)并使用它而不是 user_id + 时间戳之外,您还知道其他解决方案吗?
谢谢你。
考虑“event_server_timestamp_offset”应该可以解决这个问题。
event_timestamp - ifnull(event_server_timestamp_offset, 0) as event_timestamp
我想确认这个错误(或功能?)是否发生。 ChunYu提供的解决方案有时也不起作用,因为在某些情况下,提供的公式会错过合并时间戳1、2微秒。我不确定误差是否总是很小,也许你可以推导出一些逻辑来处理这种不确定性。
我个人认为最好等待日表中的数据合并,因为这些数据不会再改变了。或者,您可以使用热门实时数据,然后用整合数据替换它。
还有另一篇post证实了这个问题。