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

Google bigquery 数据流:我可以用批处理作业连续/流式写入BigQuery吗?,google-bigquery,google-cloud-dataflow,apache-beam,Google Bigquery,Google Cloud Dataflow,Apache Beam,我似乎找不到任何关于这个的文档。我有一个ApacheBeam管道,它接收一些信息,将其格式化为TableRows,然后写入BigQuery [+]问题: 在数据流作业完成之前,这些行不会写入BigQuery。如果我有一个需要很长时间的数据流作业,我希望能够看到将行插入到BigQuery中,有人能给我指出正确的方向吗 提前感谢根据初始transform+load操作的复杂程度,您可以使用大查询驱动程序从自己的工作池向表中进行流式插入,而不是通过数据流作业显式加载 或者,您可以进行小批量: N个独

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

[+]问题:

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


提前感谢

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

或者,您可以进行小批量:

  • N个独立作业每个加载时间\u周期/N个数据量

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

请注意,批量工作时,写入位置非常重要,因为要么追加数据,要么截断数据。但这种区别对流式管道有意义吗

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

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

我还没有测试过它,但我相信它应该像预期的那样工作。还要注意,流式插入到BigQuery并不是免费的

管道的行为由许多因素决定。如果没有更多细节,很难具体回答。例如,数据的来源是什么?源是否可以缓冲所有数据?源是否有界/无界?管道的窗口设置是什么?触发设置是什么?您是否尝试过窗口/触发、源/汇的其他设置?你能分享你的代码吗?很抱歉Anton,很不幸,由于工作政策,我不能分享代码,但我的源代码是有限的。我正在做没有窗口的批处理工作。我只使用了BigQueryIO.writeTableRows()接收器。至于何时数据到达何处,我有一个PTransform,它需要一段时间来完成这件事,但输出数据非常快…该数据正在经历另一个PTransform,将其转换为TableRows,然后最终将其发送到写入转换。在批处理模式下的设置中,这听起来是不可能的。我能想到的解决方法之一是切换到流模式(
--流
或Dataflow runner对应的
管道选项
标志)并添加触发(例如,
全局窗口
+
每xx秒触发一次
。顺便说一句,这将产生额外的成本,因为您将流到一个表中。()