Add one-skill

This commit is contained in:
Xin Wang
2026-05-13 11:03:00 +08:00
parent a4c8b29176
commit f9e36ef92d
34 changed files with 7656 additions and 0 deletions

View File

@@ -0,0 +1,176 @@
-- =====================================================================
-- @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' -- 动态分区覆盖模式
);
-- ============================================================================
-- 场景5Paimon 表创建(主键表)
-- ============================================================================
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<type> | 数组 | 多值字段 |
| MAP<k,v> | 映射 | 属性字典 |
*/
-- ============================================================================
-- 建表规范说明
-- ============================================================================
/*
1. 字段命名规范
- 使用 snake_caseuser_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推荐
*/