更新时间:2026-10-16 GMT+08:00
分享

管理Iceberg Catalog

在AI DataLake Flink作业上配置Iceberg Catalog后,您可以通过AI DataLake Flink直接访问华为云数据湖构建(LakeFormation)中的Iceberg表。本文为您介绍如何在AI DataLake Flink作业中创建Iceberg Catalog,以及管理Iceberg数据库和Iceberg表。

操作方法:使用Postman等工具,调用创建FlinkJob作业接口提交Flink作业。

创建Iceberg LakeFormation Catalog

CREATE CATALOG lf_iceberg_catalog WITH (
  'type' = 'iceberg',
  'catalog-type' = 'lakeformation'
);

参数说明如下:

参数

描述

是否必填

备注

type

Catalog类型。

是

固定值为iceberg。

catalog-type

Catalog实现类型。

是

固定值为lakeformation。

lakecat.catalogname.default

指定访问LakeFormation中的Catalog名称。

此名称需要与您在云数据湖构建(LakeFormation)中创建的Catalog名称保持一致,即可完成映射。

否

默认为Flink引擎侧的catalogName,即lf_iceberg_catalog。

管理Iceberg数据库

  • 创建数据库

    创建Iceberg Catalog后,在lf_iceberg_catalog创建iceberg_db库。

    CREATE DATABASE IF NOT EXISTS lf_iceberg_catalog.iceberg_db
    WITH (
     'location' = 'obs://bucket/iceberg_catalog/iceberg_db/'
     );
  • 删除数据库
    DROP DATABASE lf_iceberg_catalog.iceberg_db; --只能删除内部没有任何表的数据库。

管理Iceberg表

  • 创建表

    在名为iceberg-catalog的Catalog下的my_db的数据库中,创建一张分区表,其中分区键为dt,主键为dt、shop_id和user_id。代码示例如下。

    CREATE TABLE lf_iceberg_catalog.iceberg_db.iceberg_table (
      dt STRING,
      shop_id BIGINT,
      user_id BIGINT,
      num_orders INT,
      total_amount INT,
      PRIMARY KEY (dt, shop_id, user_id) NOT ENFORCED
    ) PARTITIONED BY (dt);
  • 修改表

    操作

    代码示例

    临时修改表参数

    您可以通过在表名后添加SQL Hint的方式,在写入表时临时修改表参数。临时修改的表参数仅对当前SQL作业生效。

    • 在写入my_table表时,临时将upsert-enabled设为true。
       INSERT INTO tableName /*+ OPTIONS('upsert-enabled'='true') */ SELECT ...; 
    • 在消费my_table表时,临时将monitor-interval设为10s。
      SELECT * FROM my_table /*+ OPTIONS('monitor-interval'='10s') */

    重命名表

    将表的名称从my_table修改为my_table_new。仅EXTERNAL表和LAKE表可修改。

    ALTER TABLE my_table RENAME TO my_table_new;

    添加新列

    将类型为INT的c1列和类型为STRING的c2列添加在my_table表的末尾。

    ALTER TABLE my_table ADD (c1 INT, c2 STRING);

    重命名列

    将my_table表中名称为c0的列重命名为c1。

    ALTER TABLE my_table RENAME c0 TO c1;

    删除列

    将my_table表中c1和c2两列删除。

    ALTER TABLE my_table DROP (c1, c2);

    修改列注释

    将my_table表中buy_count列的注释改为this is buy count。

    ALTER TABLE my_table MODIFY buy_count BIGINT COMMENT 'this is buy count';

    修改列顺序

    • 将my_table表中名称为col_a,类型为DOUBLE的列移动到开头。
       ALTER TABLE my_table MODIFY col_a DOUBLE FIRST; 
    • 将my_table表中名称为col_a,类型为DOUBLE的列移动到col_b列的后面。
      ALTER TABLE my_table MODIFY col_a DOUBLE AFTER col_b;
  • 删除表
    DROP TABLE lf_iceberg_catalog.iceberg_db.iceberg_table;

相关文档