更新 Iceberg 表数据 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

更新 Iceberg 表数据

Iceberg 表数据可以直接在 Athena 上使用 INSERTUPDATEDELETE 查询进行管理。每个数据管理事务都会生成一个新的快照,可以使用时间旅行查询该快照。UPDATEDELETE 语句遵循 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 [WHERE predicate]

以下示例从 iceberg_table 中删除 c3 作为 category 的值的行。

DELETE FROM iceberg_table WHERE category='c3'

UPDATE

Athena Iceberg UPDATE 将 Iceberg 位置删除文件和新更新的行作为数据文件写入同一事务中。UPDATE 可视为 INSERT INTODELETE 的组合。UPDATE 操作按扫描的数据量收费。

要更新表中的行,请使用以下语法。

UPDATE [db_name.]table_name SET xx=yy[,...] [WHERE predicate]

以下示例更新表 iceberg_table 中的指定值。

UPDATE iceberg_table SET category='c2' WHERE category='c1'