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

Paimon on Flink DDL语法说明

CREATE TABLE

在Paimon Catalog中创建的表由Catalog管理。当从Catalog中删除表时,其表文件也会被删除。

基本建表语句(含主键):

CREATE TABLE lf_paimon_catalog.paimon_db.paimon_table (
    user_id BIGINT,
    item_id BIGINT,
    behavior STRING,
    dt STRING,
    hh STRING,
    PRIMARY KEY (dt, hh, user_id) NOT ENFORCED
);

分区表建表语句:

CREATE TABLE lf_paimon_catalog.paimon_db.paimon_table (
    user_id BIGINT,
    item_id BIGINT,
    behavior STRING,
    dt STRING,
    hh STRING,
    PRIMARY KEY (dt, hh, user_id) NOT ENFORCED
) PARTITIONED BY (dt, hh);

指定统计模式(Statistics Mode)

Paimon会自动收集数据文件的统计信息以加速查询。支持以下四种模式:

  • full:收集完整指标(null_count、min、max)
  • truncate(length):收集null count和截断后的min/max值(默认 truncate(16),避免过大的列膨胀manifest 文件)
  • counts:仅收集null count
  • none:禁用元数据统计收集

统计收集模式通过metadata.stats-mode配置,默认为truncate(16)。可通过fields.{field_name}.stats-mode按字段配置。

对于none模式,默认metadata.stats-dense-store为true,可显著减少manifest的存储大小,但读取引擎的Paimon SDK需要至少0.9.1或1.0.0以上版本。

字段默认值(Field Default Value)

Paimon表支持通过在表属性中设置 fields.{field_name}.default-value为字段设置默认值。注意:分区字段和主键字段不能设置默认值。

CREATE TABLE AS SELECT(CTAS)

可以通过查询结果来创建并填充表。例如:CREATE TABLE table_b AS SELECT id, name FROM table_a,结果表table_b等价于先创建表再插入数据。

/* 流式模式需要启用 checkpoint */
CREATE TABLE lf_paimon_catalog.paimon_db.paimon_table (
    user_id BIGINT,
    item_id BIGINT
);
CREATE TABLE lf_paimon_catalog.paimon_db.paimon_table_as AS SELECT * FROM lf_paimon_catalog.paimon_db.paimon_table;

分区表CTAS:

CREATE TABLE lf_paimon_catalog.paimon_db.paimon_table (
    user_id BIGINT,
    item_id BIGINT,
    behavior STRING,
    dt STRING,
    hh STRING
) PARTITIONED BY (dt, hh);
CREATE TABLE lf_paimon_catalog.paimon_db.paimon_table_as WITH ('partition' = 'dt') AS SELECT * FROM lf_paimon_catalog.paimon_db.paimon_table;

修改选项CTAS:

CREATE TABLE lf_paimon_catalog.paimon_db.paimon_table (
    user_id BIGINT,
    item_id BIGINT
) WITH ('file.format' = 'orc');
CREATE TABLE lf_paimon_catalog.paimon_db.paimon_table_as WITH ('file.format' = 'parquet') AS SELECT * FROM lf_paimon_catalog.paimon_db.paimon_table;

主键CTAS:

CREATE TABLE lf_paimon_catalog.paimon_db.paimon_table (
    user_id BIGINT,
    item_id BIGINT,
    behavior STRING,
    dt STRING,
    hh STRING,
    PRIMARY KEY (dt, hh, user_id) NOT ENFORCED
);
CREATE TABLE lf_paimon_catalog.paimon_db.paimon_table_as WITH ('primary-key' = 'dt,hh') AS SELECT * FROM lf_paimon_catalog.paimon_db.paimon_table;

主键 + 分区CTAS:

CREATE TABLE lf_paimon_catalog.paimon_db.paimon_table (
    user_id BIGINT,
    item_id BIGINT,
    behavior STRING,
    dt STRING,
    hh STRING,
    PRIMARY KEY (dt, hh, user_id) NOT ENFORCED
) PARTITIONED BY (dt, hh);
CREATE TABLE lf_paimon_catalog.paimon_db.paimon_table_as WITH ('primary-key' = 'dt,hh', 'partition' = 'dt') AS SELECT * FROM lf_paimon_catalog.paimon_db.paimon_table;

CREATE TABLE LIKE

创建与另一张表具有相同表结构、分区和表属性的表。EXCLUDING OPTIONS 表示复制表结构但不复制表属性。

CREATE TABLE lf_paimon_catalog.paimon_db.paimon_table (
    user_id BIGINT,
    item_id BIGINT,
    behavior STRING,
    dt STRING,
    hh STRING,
    PRIMARY KEY (dt, hh, user_id) NOT ENFORCED
);
CREATE TABLE lf_paimon_catalog.paimon_db.paimon_table_like LIKE lf_paimon_catalog.paimon_db.paimon_table (EXCLUDING OPTIONS);

相关文档