BigqueryIO文件加载:仅在需要时使用其他分片

问题描述 投票:0回答:1

我有一个数据流作业,它从pubsub读取,将PubsubMessage转换为TableRow,然后使用FILE_LOAD方法将此行写入BQ(每10分钟,一个分片)。作业有时会抛出ByteString would be too long异常。当您将行连接到Google Cloud Storage(GCS)临时文件时,应引发此异常,因为您无法追加到GCS文件。如果我理解正确,可以允许发生此异常,因为稍后将使用“大”临时文件将其加载到BQ,然后将附加到应该成功的新文件中。但是,我想在不增加加载作业数量的情况下防止发生此错误,因为我已经接近该项目的每日加载作业配额。

我可以:

  • 将分片数量增加到2?还是那会导致编写者即使只需要写少量行也总是使用2个分片?
  • 使用setMaxFileSize()以及分片数量?还是即使实际上不是真的,作者仍会使用2个分片?

提前感谢!

python google-cloud-dataflow apache-beam
1个回答
0
投票

将分片数量设置为2将始终使用2个分片。

但是,我认为GCS不会出现“ ByteString会太长”错误。当Dataflow中捆绑软件的总输出大小太大(> 2GB)时,通常会发生该错误,当DoFn的输出远远大于其输入时,可能会发生此错误。

解决此问题的一种方法是使用GroupByKey拆分来自Pubsub的捆绑包。您可以使用输入的哈希值或随机数作为键,并将触发器设置为AfterPane.elementCountAtLeast(1),以允许元素一到达就输出。

© www.soinside.com 2019 - 2024. All rights reserved.