我想在冰山表上执行 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)
感谢贾廷提出这个问题。您正在寻找的是
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)
这将失败或以原子操作的方式完成删除。