Add one-skill
This commit is contained in:
@@ -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' -- 动态分区覆盖模式
|
||||
);
|
||||
|
||||
-- ============================================================================
|
||||
-- 场景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<type> | 数组 | 多值字段 |
|
||||
| MAP<k,v> | 映射 | 属性字典 |
|
||||
*/
|
||||
|
||||
-- ============================================================================
|
||||
-- 建表规范说明
|
||||
-- ============================================================================
|
||||
/*
|
||||
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(推荐)
|
||||
*/
|
||||
Reference in New Issue
Block a user