簡體   English   中英

如何在使用Apache Beam將插入插入BigQuery時指定insertId

[英]How to specify insertId when spreaming insert to BigQuery using Apache Beam

BigQuery支持流式插入的重復數據刪除。 如何使用Apache Beam使用此功能?

https://cloud.google.com/bigquery/streaming-data-into-bigquery#dataconsistency

為幫助確保數據一致性,您可以為每個插入的行提供insertId。 BigQuery會記住此ID至少一分鍾。 如果您嘗試在該時間段內流式傳輸相同的行集並且設置了insertId屬性,則BigQuery會使用insertId屬性在盡力而為的基礎上對數據進行重復數據刪除。 您可能必須重試插入,因為在某些錯誤條件下無法確定流式插入的狀態,例如系統和BigQuery之間的網絡錯誤或BigQuery中的內部錯誤。 如果重試插入,請對同一組行使用相同的insertId,以便BigQuery可以嘗試對數據進行重復數據刪除。 有關更多信息,請參閱流式插入疑難解答

我在Java doc中找不到這樣的功能。 https://beam.apache.org/releases/javadoc/2.9.0/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIO.Write.html

這個問題中 ,他建議在TableRow中設置insertId。 它是否正確?

https://developers.google.com/resources/api-libraries/documentation/bigquery/v2/java/latest/com/google/api/services/bigquery/model/TableRow.html?is-external=true

BigQuery客戶端庫具有此功能。

https://googleapis.github.io/google-cloud-java/google-cloud-clients/apidocs/index.html?com/google/cloud/bigquery/package-summary.html https://github.com/googleapis /google-cloud-java/blob/master/google-cloud-clients/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/InsertAllRequest.java#L134

  • Pub / Sub + Beam / Dataflow + BigQuery :應該保證“完全一次”,你不需要擔心這個。 當你要求Dataflow使用FILE_LOADS而不是STREAMING_INSERTS插入BigQuery時,這種保證會更強。

  • Kafka + Beam / Dataflow + BigQuery :如果消息可以從Kafka多次發出(例如,如果生產者重新插入插入),那么您需要處理重復數據刪除。 在BigQuery中(根據您的評論當前實現),或在具有.apply(Distinct.create())轉換的Dataflow中。

正如Felipe在評論中提到的那樣,似乎Dataflow已經在使用insertId來實現“一次性”。 所以我們不能手動指定insertId。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM