在apache Iceberg 上的同一个表中合并多个流的问题

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

我在不同字段的同一个表中有多个 Spark Streaming 写入。 Iceberg 文档说了以下内容:Iceberg 支持使用乐观并发的多个并发写入。

但是尝试合并时出现错误消息:

原因:org.apache.iceberg.exceptions.ValidationException:发现可能包含与 true 匹配的记录的冲突文件

Spark 合并:

spark.sql(
  f"""
  MERGE INTO datahub.replicacao.pefin_table tgt
  USING (select nu_documento, co_cadus, aud_enttyp, nu_particao from pefin_pf) src
  ON tgt.nu_documento = src.nu_documento and src.nu_particao in ('1', '2', '4')
  WHEN MATCHED AND src.aud_enttyp = 'D' THEN DELETE
  WHEN MATCHED THEN UPDATE SET *
  WHEN NOT MATCHED THEN INSERT *
""")

Spark 会话配置

 val spark = SparkSession.builder()
.master("local[*]")
.config("spark.sql.catalog.datahub", "org.apache.iceberg.spark.SparkSessionCatalog")
.config("spark.sql.catalog.datahub.type", "hadoop")
.config("spark.sql.catalog.datahub", "org.apache.iceberg.spark.SparkCatalog")
.config("spark.sql.catalog.datahub.warehouse", "file:///C:/dev/warehouse")
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")
.getOrCreate()
apache-spark spark-streaming apache-iceberg
1个回答
0
投票

Iceberg 不支持同时更新同一个表、同一个分区、同一个数据文件。 这是冰山的限制。 因此,您不能使用合并到同一个表中来进行多个流处理。 虽然它并不优雅,但您可以在应用程序中使用重试逻辑来完成这项工作。

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