使用 Spark SQL 在 Iceberg 表上执行事务块

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

我想在冰山表上执行 DELETE,然后执行 INSERT。但是我想将它们作为一个块执行,这样要么都成功,要么都不成功。我的冰山表位于胶水数据目录中。我尝试将这两个语句作为一个块执行,但是它引发了解析异常。如果我单独运行查询,那么它的执行不会出现任何问题。有什么想法吗?

这是我的代码片段-

update_query =  """
                DELETE FROM glue_catalog.{}.{};
                INSERT INTO glue_catalog.{}.{} SELECT * FROM incoming_data;
                """ .format(self.dest_schema,self.dest_table,self.dest_schema,self.dest_table)
print(update_query)
self.spark.sql(update_query)
pyspark apache-spark-sql aws-glue apache-iceberg
1个回答
0
投票

感谢贾廷提出这个问题。您正在寻找的是

INSERT OVERWRITE
操作:

update_query = f"""
    INSERT OVERWRITE glue_catalog.{self.dest_schema}.{self.dest_table} SELECT * FROM incoming_data;
"""
print(update_query)
self.spark.sql(update_query)

这将失败或以原子操作的方式完成删除。

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