哪个更好BigqueryIO.write()或bigquery.insertAll()方法的数据流

问题描述 投票:1回答:2

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

google-cloud-platform google-bigquery google-cloud-dataflow dataflow
2个回答
1
投票

如果您使用的是Dataflow,那么您首选的方法应该是使用Beam的BigQueryIO - 这个类有很多知识封装在处理错误的最佳方法和将数据发送到BigQuery的不同方法上。

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

FILE_LOADS:

使用BigQuery加载作业来插入数据。记录将首先写入文件,这些文件将被加载到BigQuery中。这是输入有界时的默认方法。只要使用BigQueryIO.Write.withTriggeringFrequency设置触发频率,也可以为无界输入选择此方法。 BigQuery每天允许每天允许加载作业的数量,因此请注意不要过于频繁地设置触发频率。有关更多信息,请参阅从云存储加载数据。

STREAMING_INSERTS:

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.