BigQueryIO.write()或bigquery.insertAll()方法对数据流而言更好

时间:2019-03-04 18:08:03

标签: google-cloud-platform google-bigquery google-cloud-dataflow dataflow

我正在开发Java代码以从GCS读取记录并将其插入到BQ表中,从成本和性能的角度来看,这是更好的BigqueryIO.write()或bigquery.insertAll()方法

2 个答案:

答案 0 :(得分:1)

如果您使用的是Dataflow,则首选的方法应该是使用Beam的BigQueryIO-该类具有很多知识,它们封装了处理错误的最佳方法以及将数据发送到BigQuery的不同方法。

您可以使用BigQueryIO.Write选择的2种方法:

FILE_LOADS

  

使用BigQuery加载作业来插入数据。记录将首先写入文件,然后将这些文件加载​​到BigQuery中。输入受限时,这是默认方法。只要还使用BigQueryIO.Write.withTriggeringFrequency设置触发频率,也可以为无界输入选择此方法。 BigQuery每天都会对每天允许的加载作业的数量进行配额,因此请注意不要将触发频率设置得过于频繁。有关更多信息,请参阅从Cloud Storage加载数据。

STREAMING_INSERTS

  

使用BigQuery流式处理插入API插入数据。这为BigQuery提供了最低延迟的插入路径,因此是无界输入时的默认方法。 BigQuery将竭尽全力确保在使用此路径时不会重复,但是在某些情况下BigQuery无法做出此保证。可以在输出表上运行查询,以定期清除这些罕见的重复项。另外,使用FILE_LOADS插入方法可确保不会重复,尽管将BigQuery插入的延迟会更长。有关更多信息,请参阅将数据流式传输到BigQuery。

答案 1 :(得分:0)

最好使用

BigQueryIO,因为它是Beam的一部分,因此管道可以理解发送到BigQuery的记录。这意味着可以对其进行监视,内置重试等。BigQueryIO.Write实际上允许您通过withMethod设置选择使用加载作业还是流插入。