更新 Iceberg 表数据
Iceberg 表数据可以直接在 Athena 上使用 INSERT、UPDATE 和 DELETE 查询进行管理。每个数据管理事务都会生成一个新的快照,可以使用时间旅行查询该快照。UPDATE 和 DELETE 语句遵循 Iceberg 格式 v2 行级位置删除
使用以下命令对 Iceberg 表执行数据管理操作。
INSERT INTO
将数据插入 Iceberg 表。Athena Iceberg INSERT INTO 收费与当前对外部 Hive 表进行 INSERT INTO 查询的收费一致,皆按扫描的数据量收费。要将数据插入到 Iceberg 表中,请使用以下语法,其中 query 可以是 VALUES
(val1, val2, ...) 或 SELECT (col1, col2, …) FROM
[。db_name.]table_name
WHERE predicate
INSERT INTO [db_name.]table_name[(col1, col2, …)]query
以下示例将值插入到表 iceberg_table 中。
INSERT INTO iceberg_table VALUES (1,'a','c1')
INSERT INTO iceberg_table (col1, col2, ...) VALUES (val1, val2, ...)
INSERT INTO iceberg_table SELECT * FROM another_table
DELETE
Athena Iceberg DELETE 将 Iceberg 位置删除文件写入表中。这称为读取时合并删除。与写入时复制删除不同,读取时合并删除效率更高,因为其不会重写文件数据。当 Athena 读取 Iceberg 数据时,将合并 Iceberg 位置删除文件与数据文件,以生成表的最新视图。若要删除这些位置删除文件,您可以运行 REWRITE DATA 压缩操作。DELETE 操作按扫描的数据量收费。
要从表中删除行,请使用以下语法。
DELETE FROM [db_name.]table_name[WHEREpredicate]
以下示例从 iceberg_table 中删除 c3 作为 category 的值的行。
DELETE FROM iceberg_table WHERE category='c3'
UPDATE
Athena Iceberg UPDATE 将 Iceberg 位置删除文件和新更新的行作为数据文件写入同一事务中。UPDATE 可视为 INSERT INTO 和 DELETE 的组合。UPDATE 操作按扫描的数据量收费。
要更新表中的行,请使用以下语法。
UPDATE [db_name.]table_nameSET xx=yy[,...] [WHEREpredicate]
以下示例更新表 iceberg_table 中的指定值。
UPDATE iceberg_table SET category='c2' WHERE category='c1'