我正在实现一个Dataflow管道,该管道从Pubsub读取消息,并使用Apache Beam SDK 2.0.0 for Java将TableRows写入BigQuery(BQ)。
这是代码的相关部分:
tableRowPCollection
.apply(BigQueryIO.writeTableRows().to(this.tableId)
.withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_NEVER)
.withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND));
此代码在Dataflow管道中生成一组任务。其中一个任务是GroupByKey。此任务正在累积管道中的元素,如此打印屏幕中所示: GBK elements accumulation image. 阅读文档后,我怀疑这个问题与Window配置有关。但是我找不到修改Window配置的方法,因为它是由 Window.Assign 在重新洗牌任务中创建的隐式创建的。
有没有办法设置窗口参数和/或将触发器附加到这个隐式 Window ,还是应该创建自己的在BQ中插入TableRow的DoFn?
提前致谢!
[更新]
我离开管道大约运行一天,然后GroupByKey
子任务变得更快,进出的元素数量相互接近(有时是相同的)。此外,我还注意到Watermark
更接近当前日期并且增长更快。那么"问题"解决了。
答案 0 :(得分:0)
BigQuery接收器中的Reshuffle
没有引入任何等待。相反,它用于创建要写入BigQuery的行的批处理。来自GroupByKey
的元素数量较少,因为每个输出元素代表一批(或组)输入元素。
您应该能够看到作为ExpandIterable
输出的元素总数(Reshuffle
的输出)。