首页 > 解决方案 > 问题:BigQueryIO 为每个输入行创建一个文件,是否正确?

问题描述

我是 Apache Beam 的新手,我正在开发一个管道来从 JDBCIO 获取行并将它们发送到 BigQueryIO。我正在将行转换为 avro 文件,withAvroFormatFunction但它正在为 JDBCIO 返回的每一行创建一个新文件。对于withFormatFunctionjson 文件也是如此。

使用 DirectRunner 在本地运行非常慢,因为它会将大量文件上传到 Google 存储。这种方法是否适合在 Google Dataflow 上进行扩展?有没有更好的方法来处理它?

谢谢

标签: google-cloud-dataflowapache-beam

解决方案


BigQueryIO 会将每个捆绑包的结果提交到 BigQuery。众所周知,DirectRunner 在捆绑方面有点低效。它从不合并捆绑包。因此,源提供的任何捆绑都会传播到接收器。您可以尝试使用其他运行器,例如 Flink、Spark 或 Dataflow。进程内开源运行器与直接运行器一样易于使用。只需更改--runner=DirectRunner--runner=FlinkRunner,默认设置将在本地嵌入模式下运行。


推荐阅读