【发布时间】:2020-05-11 06:01:44
【问题描述】:
背景: 我们有一个 Dataflow 作业,它将 Avro 文件写入 GCS,其架构每周更改(仅限字段添加)。这意味着,在 GCS 前缀下,我们有一堆具有不同模式的 Avro 文件,在任何给定时间很可能有 2 个模式。更多详细信息,请参阅this 帖子中的上下文部分。
问题: 根据this SO post 的说法,在将具有多个架构的 Avro 文件加载到 BigQuery 时,BigQuery 将选择具有最大词汇顺序的文件。但是,这不是我观察到的行为。我观察到不一致的行为。
在我的第一次尝试中,我选择了新的架构并且新的字段在那里。但是,BQ 负载本身花费的时间比它应该的要长得多。加载 368,594 条记录需要 7 分钟。
在我的第二次尝试中,具有较大词汇顺序的文件正在使用新架构,我能够打开 Avro 文件并在标题中看到新字段。但是当我将这些文件加载到表中时,添加的字段丢失了。但是,如果我单独加载具有最大订单的文件,则该表将具有新字段。
我们有一个自定义文件命名策略,即: "chunk-$windowStart-$windowEnd-shardIndex-of-shardNum-UUID.avro"
问题:
- 由于 BQ 对所有 Avro 文件进行自动模式检测,关于旧/新模式的具体规则是什么?尤其是当只发生字段添加时?
- 为什么我第一次尝试 BQ 加载需要这么长时间?它是否使用旧架构加载,然后在中途发现新架构,然后重新完成所有工作?
- 有关如何调试此问题的任何建议?
【问题讨论】:
标签: java google-bigquery google-cloud-dataflow avro apache-beam