Dataflow中使用Template方法的动态碎片



我有一个管道,可以从BigQuery中提取数据,并使用Apache Beam将数据写入文件。在这里,我正在使用Dataflow的模板方法。如果我在模板创建期间在编译时对碎片的数量进行硬编码,那一切都很好。但我的要求是根据从BigQuery中提取的行数来决定运行时碎片的数量。例如,如果有超过100万条记录,则写入另一个文件。在使用模板方法的情况下,这在数据流中可以实现吗。我知道,如果我们使用非模板方法,所有参数都在运行时传递,这很好我明确地在寻找模板方法

您可以在编写模板时使用ValueProvider。

对要在运行时设置或使用的所有管道选项使用ValueProvider

然后可以使用逻辑中的参数值来确定碎片的数量。

在将记录写入文件时,我们可以调用PTransform,它可以根据上游Pcollection中的记录数量来决定共享使用的数量。

FileIO.write().withSharding(new calculateNumOfShards()).via(TextIO.sink())

您应该研究使用Flex模板,它具有非模板管道的全部灵活性。

最新更新