【发布时间】:2018-03-20 12:51:57
【问题描述】:
我在使用 Apache Beam 在流式 BigQuery 表之上实施的小型增量作业遇到了一个奇怪的问题。
我正在将数据流式传输到 BigQuery 表,并且每小时我都会运行一项作业以将任何新记录从该流式传输表复制到协调后的表。增量建立在我在流表上介绍的 CreateDatetime 列之上。一旦记录被加载到流表中,它就会获得当前的 UTC 时间戳。因此,增量自然会将 CreateDatetime 比上次更新的所有记录带到 Batch 运行的当前时间。
CreatedDatetime >= LastDeltaDate AND
CreatedDatetime < NowUTC
LastDeltaDate 的逻辑如下:
1. Start: LastDeltaDate = 2017-01-01 00:00:00
2. 1st Delta Run:
- NowUTC = 2017-10-01 06:00:00
- LastDeltaDate = 2017-01-01 00:00:00
- at the end of the successful run LastDeltaDate = NowUTC
3. 2nd Delta Run:
- NowUTC = 2017-10-01 07:00:00
- LastDeltaDate = 2017-10-01 06:00:00
- at the end of the successful run LastDeltaDate = NowUTC
...
现在,我每隔一天就会发现流表上的记录,但从未到达我的核对表上。当我检查时间戳时,我发现它们离批处理运行很远,当我检查 Google Datflow 日志时,我可以看到当时没有为查询返回任何记录,但是当我现在运行相同的查询时,我得到了记录。流式记录是否有可能在查询中超晚到达,或者 Apache Beam 是否有可能正在处理记录但很长时间没有写入?我没有应用任何窗口策略。
有什么想法吗?
【问题讨论】:
-
你如何确定 LastDeltaDate?
-
@BenChambers 我更新了我的问题,描述了 LastDeltaDate 是如何确定的。
标签: google-bigquery google-cloud-dataflow apache-beam