【问题标题】:Delta job on BigQuery misses recordsBigQuery 上的 Delta 作业丢失记录
【发布时间】: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


【解决方案1】:

在执行流式插入时,这些行可用于批量导出的速度会有所延迟,如其文档 data availability 中所述。

因此,在 T2 时间,您可能已将一堆行流式传输到 BigQuery 中,这些行存储在流式缓冲区中。然后,您从 T1 到 T2 运行批处理作业,但只能看到 T2-buffer 之前的行。因此,每次增量运行的缓冲区中的所有行都将被删除。

您可能需要让您的 NowUTC 选择知道流缓冲区,以便 next 运行缓冲区内的进程行。

【讨论】:

  • 谢谢。我记得在某处读过,对于查询,流缓冲区中的数据将立即可用,但我猜 BigQueryIO 不算作查询?我想增量日期在 BigQuery 中不起作用,因为不能依赖时间戳(不幸的是,BigQuery 表没有默认值)。我看到的唯一其他选择是始终将流表与协调表进行比较以复制任何新记录。你还有什么想法吗?
  • 到目前为止,您可以尝试仅扫描表中的全部内容,而不是扫描。看起来最多90分钟。如果您发出 table.get 调用,它看起来也会为您提供流缓冲区的属性,包括“streamingBuffer.oldestEntryTime”——那里最旧条目的时间戳。如果您使用它而不是 NowUTC,您将不会跳过当前在缓冲区中的行,并且应该在下次扫描它们。
  • 在批处理中,BigQueryIO 执行导出操作,然后从 GCS 读取文件,因为这提高了并行性。
  • 不幸的是,“streamingBuffer.oldestEntryTime”并没有太大帮助,因为如果我在流表上检查这个,最早的条目是 14 小时前。在另一个(很少使用的表)上,它甚至已经 3 天了,它似乎没有在 90 分钟内清空缓冲区或没有更新信息?
  • 这更令人困惑,我在使用 BigQueryIO 运行 Beam 作业之前和之后监视表上的流缓冲区统计信息。缓冲区包含 11 条记录,但增量作业将它们全部复制到下一个表中。回来,这要么意味着统计信息错误,要么 BigQueryIO 正在执行查询?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多