Google cloud dataflow 写入BigQuery Apache beam v2.0时GroupByKey子任务中元素的累积

Google cloud dataflow 写入BigQuery Apache beam v2.0时GroupByKey子任务中元素的累积,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我正在实现一个数据流管道,它使用ApacheBeamSDK2.0.0forJava从Pubsub读取消息并将TableRows写入BigQuery(BQ) 这是代码的相关部分: tableRowPCollection .apply(BigQueryIO.writeTableRows().to(this.tableId) .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CR

我正在实现一个数据流管道,它使用ApacheBeamSDK2.0.0forJava从Pubsub读取消息并将TableRows写入BigQuery(BQ)

这是代码的相关部分:

 tableRowPCollection
            .apply(BigQueryIO.writeTableRows().to(this.tableId)
                .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_NEVER)
                .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND));
此代码在数据流管道的后台生成一组任务。这些任务之一是GroupByKey。此任务正在收集管道中的元素,如此打印屏幕所示: 阅读文档后,我怀疑这个问题与窗口配置有关。但是我找不到修改窗口配置的方法,因为它是由Window.Assign在改组任务内隐式创建的

有没有办法设置窗口参数和/或将触发器附加到此隐式窗口,或者我应该创建自己的DoFn,在BQ中插入TableRow

提前谢谢


[更新]


我让管道运行了大约一天,之后
GroupByKey
子任务变得更快,输入和输出的元素数量彼此接近(有时是相同的)。此外,我还注意到
水印
更接近当前日期,并且增长更快。因此,“问题”得到了解决。

BigQuery接收器中的
重新洗牌
没有引入任何等待。相反,它用于创建要写入BigQuery的行的批处理。由于每个输出元素代表一批(或一组)输入元素,因此从
GroupByKey
中输出的元素数量较小


您应该能够看到作为
ExpandIterable
输出的元素总数(改组的输出)。

问题是什么?GroupByKey对与特定键关联的值进行分组。同样地,如果您有N个键,那么您会期望GroupByKey中有N个元素。您所描述的内容听起来像是在按预期工作。@BenChambers关键是我不想等待太长时间才能在BQ中插入数据。我想选择在这个子任务中使用的触发器。我让管道运行了大约一天,之后
GroupByKey
子任务变得更快,输入和输出的元素数量彼此接近(有时是相同的)。此外,我还注意到
水印
更接近当前日期,并且增长更快。