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