上下文:我们有一个数据流作业,它使用每周更改的模式(仅限字段添加)将avro文件写入gcs。这意味着,在gcs前缀下,我们有一堆不同模式的avro文件,很可能在任何给定时间有两个模式。有关更多详细信息,请参阅本文的上下文部分。
问题是:根据这篇文章,当将具有多个模式的avro文件加载到bigquery中时,bigquery会选择词典顺序最大的文件。然而,这不是我观察到的行为。我观察到不一致的行为。
在我的第一次尝试中,我的新模式被选中,新字段就在那里。然而,bq负载本身花费的时间比它应该花费的时间要长得多。加载368594条记录花了7分钟。
在我的第二次尝试中,具有较大词典顺序的文件正在使用新模式,并且我能够打开avro文件并在头中看到新字段。但是当我把这些文件加载到一个表中时,添加的字段丢失了。但是如果我以最大的顺序单独加载文件,表将有新的字段。
我们有一个自定义文件命名策略,即:“chunk-$windowstart-$windowend shardindex of shardnum uuid.avro”
问题:
既然bq对所有avro文件进行自动模式检测,那么关于旧/新模式的规则到底是什么?尤其是当只发生字段添加时?
为什么bq负载在我的第一次尝试中花费了这么长时间?它是否加载了旧的模式,然后中途发现了新的模式,然后重新做了所有的工作?
关于如何调试这个有什么建议吗?
1条答案
按热度按时间pxy2qtax1#
谷歌云支持这里!
模式自动检测是bigquery基于小样本行进行的推理过程。这意味着推断的模式可能因分析的样本而异。这也许可以解释为什么你会有不一致的行为。有关更多信息,请查看此文档
为了回答这个问题,我需要更多的信息,所以我鼓励你打开一张谷歌云支持的机票,这样我们可以更好地帮助你。
见答案2。
我希望这有帮助。