数据流:我可以使用批处理作业连续写/流写入BigQuery吗?

时间:2018-06-08 15:06:26

标签: google-bigquery google-cloud-dataflow apache-beam

我似乎无法找到有关此内容的任何文档。我有一个apache-beam管道,它接收一些信息,将它格式化为TableRows,然后写入BigQuery。

[+]问题:

在Dataflow作业完成之前,行不会写入BigQuery。如果我有一个需要很长时间的数据流作业,我希望能够看到插入到BigQuery中的行,是否有人能指出正确的方向?

提前致谢

2 个答案:

答案 0 :(得分:1)

由于您正在以批处理模式工作,因此需要将数据同时写入同一表中。如果您使用分区,则属于该分区的所有数据都必须同时写入。这就是为什么插入要最后完成的原因。

请注意,批量处理时 WriteDisposition 非常重要,因为您可以追加数据或截断数据。但是这种区别对流传输管道有意义吗?

在Java中,您可以使用以下函数指定插入方法:

.withMethod(BigQueryIO.Write.Method.STREAMING_INSERTS))

我尚未对其进行测试,但是我认为它应该可以正常工作。另请注意,向BigQuery插入流插入并非免费

答案 1 :(得分:0)

根据初始转换+加载操作的复杂程度,您可以使用大查询驱动程序从您自己的工作池中将流插入到表中,而不是通过显式的数据流作业加载它。

或者,你可以做更小的批次:

  • N个独立作业,每个加载TIME_PERIOD / N个数据量