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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据流:我可以使用批处理作业连续写/流写入BigQuery吗?相关的知识,希望对你有一定的参考价值。

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

[+]问题:

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

提前致谢

答案

由于您在批处理模式下工作,因此需要在同一个表中同时写入数据。如果您正在使用分区,则需要同时写入属于分区的所有数据。这就是最后插入的原因。

请注意,当您批量处理时,WriteDisposition非常重要,因为您要么追加数据,要么截断。但这种区别对流媒体管道有意义吗?

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

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

我没有测试它,但我相信它应该按预期工作。另请注意,BigQuery的流式插入不是免费的。

另一答案

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

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

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

以上是关于数据流:我可以使用批处理作业连续写/流写入BigQuery吗?的主要内容,如果未能解决你的问题,请参考以下文章

字符输出流的续写和换行和使用try--catch--finally处理流中的异常

ObjectOutputStream 追加写入读取错误

字节输出流写多个字节的方法和字节输出流的续写和换行

字节输出流写多个字节的方法,字节输出流的续写和换行

java IO流

android中实现向sd卡中续写文件的问题: