java - 使用 Apache Beam 向 BigQuery 传播插入时如何指定 insertId
问题描述
BigQuery 支持流式插入的重复数据删除。如何使用 Apache Beam 使用此功能?
https://cloud.google.com/bigquery/streaming-data-into-bigquery#dataconsistency
为了帮助确保数据一致性,您可以为每个插入的行提供 insertId。BigQuery 会记住此 ID 至少一分钟。如果您尝试在该时间段内流式传输同一组行并设置了 insertId 属性,BigQuery 会使用 insertId 属性尽最大努力对您的数据进行重复数据删除。您可能必须重试插入,因为在某些错误条件下无法确定流式插入的状态,例如系统与 BigQuery 之间的网络错误或 BigQuery 中的内部错误。如果您重试插入,请对同一组行使用相同的 insertId,以便 BigQuery 可以尝试对您的数据进行重复数据删除。有关详细信息,请参阅流式插入故障排除。
我在 Java 文档中找不到这样的功能。 https://beam.apache.org/releases/javadoc/2.9.0/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIO.Write.html
在这个问题中,他建议在 TableRow 中设置 insertId。它是否正确?
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 中。
推荐阅读
- python - 将二维数组添加到 DataFrame
- c# - 如何在 C# 中检查非法文件/文件夹名称
- javascript - 为什么 chrome 扩展不能在后台标签页中执行?
- apache-spark - Spark Kafka 源和 Confluent 监控拦截器
- svn - TortoiseSVN 由于云同步而丢失修订
- flutter - Flutter 我放了一个 DB 或动态复选框,但我得到一个只读错误
- java - 如何修复 NullPointerException “org.apache.commons.lang3.SystemUtils.JAVA_SPECIFICATION_VERSION_AS_ENUM”为空?
- html - 你可以在 CSS 上的一个元素上使用两个不同的伪元素吗?
- excel - VBA - 从同一列中删除包含单词的单元格
- r - 在ggplot R中使用边框可自定义pch时,如何使geom_errorbar()与点的填充颜色相同?