【问题标题】:BQ load Avro files with different schemas, field additions onlyBQ 加载具有不同模式的 Avro 文件,仅添加字段
【发布时间】: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"

问题:

  1. 由于 BQ 对所有 Avro 文件进行自动模式检测,关于旧/新模式的具体规则是什么?尤其是当只发生字段添加时?
  2. 为什么我第一次尝试 BQ 加载需要这么长时间?它是否使用旧架构加载,然后在中途发现新架构,然后重新完成所有工作?
  3. 有关如何调试此问题的任何建议?

【问题讨论】:

    标签: java google-bigquery google-cloud-dataflow avro apache-beam


    【解决方案1】:

    谷歌云支持在这里!

    1. 架构自动检测是 BigQuery 基于少量行样本执行的推理过程。这意味着推断的模式可能会因分析的样本而异。这可能解释了为什么您会遇到不一致的行为。欲了解更多信息,请查看此doc

    2. 要回答这个问题,我需要更多信息,因此我建议您向 Google Cloud 支持提交工单,以便我们更好地为您提供帮助。

    3. 见答案 2。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2022-12-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2021-06-04
      • 2019-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多