我有一个数据流作业,它从pubsub读取,将PubsubMessage转换为TableRow,然后使用FILE_LOAD
方法将此行写入BQ(每10分钟,一个分片)。作业有时会抛出ByteString would be too long
异常。当您将行连接到Google Cloud Storage(GCS)临时文件时,应引发此异常,因为您无法追加到GCS文件。如果我理解正确,可以允许发生此异常,因为稍后将使用“大”临时文件将其加载到BQ,然后将附加到应该成功的新文件中。但是,我想在不增加加载作业数量的情况下防止发生此错误,因为我已经接近该项目的每日加载作业配额。
我可以:
setMaxFileSize()
以及分片数量?还是即使实际上不是真的,作者仍会使用2个分片? 提前感谢!
将分片数量设置为2将始终使用2个分片。
但是,我认为GCS不会出现“ ByteString会太长”错误。当Dataflow中捆绑软件的总输出大小太大(> 2GB)时,通常会发生该错误,当DoFn的输出远远大于其输入时,可能会发生此错误。
解决此问题的一种方法是使用GroupByKey拆分来自Pubsub的捆绑包。您可以使用输入的哈希值或随机数作为键,并将触发器设置为AfterPane.elementCountAtLeast(1),以允许元素一到达就输出。