Spark SQL结合Rest Catalog与MinIO环境下Iceberg表的行数据更新/删除方案咨询
Spark SQL结合Rest Catalog与MinIO环境下Iceberg表的行数据更新/删除方案咨询
我目前在Spark环境下,搭配Iceberg的Rest Catalog来创建表,数据是存在MinIO里的。最近遇到了需要基于ID列更新或删除行数据的需求,但发现没有直接的操作方法,于是自己摸索出了下面的实现方案,分享给大家参考:
一、更新(UPDATE)表数据
首先来看原表(default.ns.tbl)的初始数据:
+----+------+------+------+ | ID | COL1 | COL2 | COL3 | +----+------+------+------+ | 1 | one | two | three| +----+------+------+------+ | 2 | one | two | three| +----+------+------+------+ | 3 | one | two | three| +----+------+------+------+
我先把需要更新的行单独做成一张临时表(default.ns.temp),数据如下:
+----+------+------+------+ | ID | COL1 | COL2 | COL3 | +----+------+------+------+ | 1 | ten | ten | seven| +----+------+------+------+
接着执行更新的核心SQL命令:
INSERT INTO default.ns.tbl REPLACE WHERE ID = 1 SELECT * FROM default.ns.temp
操作完成后,记得清理掉临时表:
DROP TABLE IF EXISTS default.ns.temp PURGE
二、删除(DELETE)行数据
删除操作我是借助INSERT OVERWRITE来实现的,核心思路就是只保留不需要删除的行数据:
INSERT OVERWRITE default.ns.tbl SELECT * FROM default.ns.tbl WHERE ID != [你要删除的ID值]
举个例子,如果要删除ID为2的行,对应的SQL就是:
INSERT OVERWRITE default.ns.tbl SELECT * FROM default.ns.tbl WHERE ID != 2
备注:内容来源于stack exchange,提问作者ARIJIT SINGH
相关产品推荐
相关产品推荐

