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);