google-cloud-dataflow - 问题:BigQueryIO 为每个输入行创建一个文件,是否正确?
问题描述
我是 Apache Beam 的新手,我正在开发一个管道来从 JDBCIO 获取行并将它们发送到 BigQueryIO。我正在将行转换为 avro 文件,withAvroFormatFunction
但它正在为 JDBCIO 返回的每一行创建一个新文件。对于withFormatFunction
json 文件也是如此。
使用 DirectRunner 在本地运行非常慢,因为它会将大量文件上传到 Google 存储。这种方法是否适合在 Google Dataflow 上进行扩展?有没有更好的方法来处理它?
谢谢
解决方案
BigQueryIO 会将每个捆绑包的结果提交到 BigQuery。众所周知,DirectRunner 在捆绑方面有点低效。它从不合并捆绑包。因此,源提供的任何捆绑都会传播到接收器。您可以尝试使用其他运行器,例如 Flink、Spark 或 Dataflow。进程内开源运行器与直接运行器一样易于使用。只需更改--runner=DirectRunner
为--runner=FlinkRunner
,默认设置将在本地嵌入模式下运行。
推荐阅读
- java - 在构造函数中初始化空实例变量
- python - 如何根据另一个元素访问字典的子元素?
- office-js - Excel JavaScript 自定义函数中的“ReferenceError:找不到变量:需要”
- laravel - 30 分钟后取下按钮。拉拉维尔
- oracle-apex - 共享组件 oracle apex 中的动态 where 子句
- java - 每次重定向到错误页面时登录我的spring boot项目
- r - 将 renderUI 对象从 flexdashboard 移动到闪亮的应用程序
- angular - NestJs:Angular Universal ReferenceError - KeyboardEvent 未定义
- dart - 将 double 转换为二进制表示
- bootstrap-4 - Bootstrap 将第二列放在手机上的第一列下方