更新时间:2026-07-09 GMT+08:00
分享

Iceberg on Aura DDL语法说明

创建Iceberg表

通过CREATE TABLE语法创建Iceberg表。与其他格式的表相比,创建Iceberg表没有特别的参数需要指定,只需要指定STORE AS ICEBERG即可。具体语法请参见CREATE TABLE

示例:

1
2
3
4
5
6
7
8
9
CREATE TABLE iceberg_ext(
col1 int,
col2 varchar(20),
...
)PARTITION BY (col3 bigint) 
TABLEPROPERTIES (
'write.metadata.delete-after-commit.enabled'='true',
'write.metadata.previous-versions-max' = '10' 
) STORE AS ICEBERG;

其中write.metadata.delete-after-commit.enabled控制是否在提交事务后删除旧版本元数据文件,默认值为false。当该参数设为true时,可以通过write.metadata.previous-versions-max设定保留多少个metadata。

使用这两个参数需要谨慎,虽然删除元数据文件可以节省存储空间,但需要确保不会影响数据的一致性和可用性。

清空Iceberg表

通过TRUNCATE TABLE语法清空表中的数据,具体语法请参见TRUNCATE

示例:

1
TRUNCATE TABLE iceberg_ext;

删除Iceberg表

通过DROP TABLE语法删除Iceberg表,会同时删除表的元数据及数据(Managed表删除后可以从LakeFormation控制台恢复表的元数据及数据)。具体语法,请参见DROP TABLE

示例:

1
DROP TABLE iceberg_ext;

修改表中的列

通过ALTER TABLE语法的ADD COLUMN、RENAME COLUMN TO、ALTER COLUMN、DROP COLUMNS能力,可以对iceberg表的列进行加列、删列、重命名列、更新列和重新排序列等schema evolution操作。

iceberg通过唯一编号fieldId为列进行编号,在写入数据时会将fieldId写入文件的schema中,在读取文件的schema时通过fieldId将元数据的列与文件中的列映射起来,能够实现schema evolution后的读取。对于非iceberg写入的文件,schema中不存在fieldId,读取文件时会以列名为依据进行映射,进行schema evolution操作后,如果存在复用列名的情况,可能会导致类型不匹配而读取失败或者读取到了以前的数据。

示例:

建iceberg分区表:

CREATE TABLE t_iceberg(a int, b array<struct<x:int, y:int>>) partition by (c int) store as iceberg;
  • 添加列:

    iceberg表支持添加一列或者多列到表中或者复杂类型字段中,需要指定列名和类型,可以指定注释和位置。当添加到复杂类型字段中时,不能指定注释。

    -- 添加到表中
    alter table t_iceberg add column d int, e float comment 'this is e', f array<int> after a, g struct<x:int,y:int> comment 'this is g' before b;
    -- 添加到复杂类型字段中,需要使用element来指定array的子类型
    alter table t_iceberg add column b.element.z int after x;
  • 重命名列:

    iceberg表支持对表列或者复杂类型字段进行重命名。

    alter table t_iceberg rename column a to newa;
    alter table t_iceberg rename column b.element.x to newx;
  • 更新列:

    iceberg表支持更新表列的类型、注释和位置,支持更新复杂类型字段的类型和位置。

    alter table t_iceberg alter column a type bigint comment 'this is a' after c, c type bigint comment 'this is c' after a, b.element.y type bigint after first;

    当前仅支持从低精度类型更新到高精度类型:

    • 整数类型:从smallint更新到int或者bigint,从int更新到bigint。
    • 浮点类型:从float4更新到float8。
    • numeric类型:从低precision更新到高precision,不支持更新scale。
    • 字符串类型:varchar或者char的长度变长。

      浮点类型的存储是不精确的,从float4更新到float8后,数据的小数部分精度会变化,结果会发生变化。

  • 删除列

    iceberg支持删除表列或者复杂类型字段。不能删除分区列,不能删除表的所有列或者复杂类型的所有字段。

    alter table t_iceberg drop columns (a, b.x);

修改表属性

通过ALTER TABLE语法的SET/UNSET TABLEPROPERTIES能力,可以对表的属性值进行修改。

示例:

1
2
ALTER TABLE iceberg_ext SET TABLEPROPERTIES ('write.metadata.delete-after-commit.enabled' = 'false');
ALTER TABLE iceberg_ext UNSET TABLEPROPERTIES ('write.metadata.delete-after-commit.enabled');

相关文档