-- ===================================================================== -- @SparkSqlName: PAIMONA-D-SQL-{表名}-CREATE -- @Version: 1.0 -- @Desc: 建表模板(CREATE TABLE) -- @TargetTables: {新表名} -- @TargetDatabase: Paimon -- ===================================================================== -- ============================================================================ -- 场景1:基础表创建(非分区) -- ============================================================================ CREATE TABLE IF NOT EXISTS ${db_eda_env}.basic_table ( -- 主键/标识字段 id BIGINT COMMENT '主键ID', -- 业务字段 name STRING COMMENT '名称', category STRING COMMENT '类别', amount DECIMAL(18,2) COMMENT '金额', status STRING COMMENT '状态', -- 时间字段 created_at TIMESTAMP COMMENT '创建时间', updated_at TIMESTAMP COMMENT '更新时间', -- 技术字段 etl_time TIMESTAMP COMMENT '数据加工时间', etl_remark STRING COMMENT '备注信息' ) COMMENT '基础业务表' STORED AS PARQUET; -- 存储格式 -- ============================================================================ -- 场景2:分区表创建(单分区字段) -- ============================================================================ CREATE TABLE IF NOT EXISTS ${db_eda_env}.partitioned_table ( -- 主键/标识字段 id BIGINT COMMENT '主键ID', -- 业务字段 user_id STRING COMMENT '用户ID', user_name STRING COMMENT '用户姓名', order_count BIGINT COMMENT '订单数', total_amount DECIMAL(18,2) COMMENT '总金额', -- 维度字段 department STRING COMMENT '部门', region STRING COMMENT '地区', -- 技术字段 etl_time TIMESTAMP COMMENT '数据加工时间' ) COMMENT '按日分区的统计表' PARTITIONED BY (day_id STRING COMMENT '统计日期,格式yyyy-MM-dd') STORED AS PARQUET; -- ============================================================================ -- 场景3:多分区字段表 -- ============================================================================ CREATE TABLE IF NOT EXISTS ${db_eda_env}.multi_partition_table ( id BIGINT COMMENT '主键ID', name STRING COMMENT '名称', amount DECIMAL(18,2) COMMENT '金额', etl_time TIMESTAMP COMMENT '数据加工时间' ) COMMENT '多分区字段示例表' PARTITIONED BY ( year_id STRING COMMENT '年份', month_id STRING COMMENT '月份' ) STORED AS PARQUET; -- ============================================================================ -- 场景4:带表属性配置 -- ============================================================================ CREATE TABLE IF NOT EXISTS ${db_eda_env}.configured_table ( id BIGINT COMMENT '主键ID', name STRING COMMENT '名称', amount DECIMAL(18,2) COMMENT '金额', etl_time TIMESTAMP COMMENT '数据加工时间' ) COMMENT '带属性配置的表' PARTITIONED BY (day_id STRING) STORED AS PARQUET TBLPROPERTIES ( 'parquet.compression' = 'SNAPPY', -- 压缩格式 'spark.sql.partitionOverwriteMode' = 'dynamic' -- 动态分区覆盖模式 ); -- ============================================================================ -- 场景5:Paimon 表创建(主键表) -- ============================================================================ CREATE TABLE IF NOT EXISTS ${db_eda_env}.paimon_pk_table ( -- 主键字段(Paimon 主键表必须包含所有主键字段) id BIGINT COMMENT '主键ID', day_id STRING COMMENT '分区日期', -- 业务字段 name STRING COMMENT '名称', amount DECIMAL(18,2) COMMENT '金额', status STRING COMMENT '状态', -- 技术字段 etl_time TIMESTAMP COMMENT '数据加工时间' ) COMMENT 'Paimon 主键表(支持 MERGE INTO)' PARTITIONED BY (day_id) TBLPROPERTIES ( 'primary-key' = 'id,day_id', -- 主键定义 'bucket' = '4', -- 分桶数 'changelog-producer' = 'input' -- 变更日志生产 ); -- ============================================================================ -- 场景6:临时表创建 -- ============================================================================ CREATE TEMPORARY TABLE tmp_processing_table ( id BIGINT, name STRING, amount DECIMAL(18,2) ); -- 或使用 AS 创建临时表 CREATE TEMPORARY TABLE tmp_source AS SELECT id, name, amount FROM source_table WHERE day_id = '${day_id}'; -- ============================================================================ -- 字段类型速查 -- ============================================================================ /* | 类型 | 说明 | 适用场景 | |---------------|----------------|------------------------| | STRING | 字符串 | 名称、编码、描述 | | INT | 整数 | 数量、等级、标志 | | BIGINT | 大整数 | ID、计数、金额(整数) | | DECIMAL(p,s) | 定点数 | 金额、比例、精度数值 | | DOUBLE | 浮点数 | 科学计算(慎用于金额) | | BOOLEAN | 布尔 | 状态标志 | | DATE | 日期 | 日期字段 | | TIMESTAMP | 时间戳 | 时间字段 | | ARRAY | 数组 | 多值字段 | | MAP | 映射 | 属性字典 | */ -- ============================================================================ -- 建表规范说明 -- ============================================================================ /* 1. 字段命名规范 - 使用 snake_case:user_id, total_amount - 主键:id 或 {业务}_id - 技术字段:etl_time, etl_remark 2. COMMENT 必须添加 - 每个字段必须有 COMMENT - 表必须有 COMMENT 3. 分区字段选择 - 按时间分区:day_id, month_id - 分区粒度:日分区最常用 4. 存储格式 - 推荐:PARQUET(列存储,压缩好) - 可选:ORC、AVRO 5. Paimon 表特性 - primary-key:主键字段列表 - bucket:分桶数(影响并发) - 支持 MERGE INTO 操作 6. 表属性配置 - 压缩格式:SNAPPY(推荐)、GZIP、LZ4 - 动态分区模式:dynamic(推荐) */