Update sub skills

This commit is contained in:
li552233
2026-04-16 08:52:48 +00:00
parent eeb96b8f88
commit ec5a118ed4

View File

@@ -17,17 +17,27 @@ description: 编写 Spark SQL 或 Flink SQL。当用户需要写 SQL、数据查
- 每一个主要的逻辑步骤,必须物化为一张临时表。
- 必须遵循 "先清理,后创建" 的原则:在 `CREATE` 之前,必须先写 `DROP TABLE IF EXISTS`
3. **命名规范**:
- 临时表命名格式建议为 `tmp_{简述}_{逻辑步骤序号}`,确保表名具有可读性且不易冲突。
- 临时表库名固定为`${db_tmp_env}`
- 临时表和目标表命名格式建议为 `tmp_{简述}_{逻辑步骤序号}`,确保表名具有可读性且不易冲突。
- 临时表和目标表的库名固定为`${db_tmp_env}`
4. **字段明确**: 禁止使用 `SELECT *`。在 `CREATE TABLE` 时,必须明确列出所有字段及其类型(根据元数据推断)。
5. **别名规范**: 多表查询时,所有表必须使用简短的别名(如 `user` -> `u`, `order` -> `o`)。
6. **注释**: 每个 SQL 语句块之前,必须添加注释,说明该步骤对应【逻辑设计步骤】中的哪一步。
7. **插入目标表**: 在插入表之前,根据【需求分析】,【模型设计】上下文,自行判断该表是否为分区表。
- **如果是分区表使用delete关键字删除该分区**
- **⚠️ 防误删规则(强制)**: DELETE 语句中,除 day_id 外,**必须**额外添加业务过滤条件(如 idx_nbr、risktypecode、主题域标识等确保只删除当前 SQL 要写入的数据,**禁止仅按 day_id 单条件删除**。
- 示例(指标表):`DELETE FROM xxx where day_id = '${day_id}' and idx_nbr = 'D_DXT_00002085';`
- 示例(风险表):`DELETE FROM xxx where day_id = '${day_id}' and risktypecode = '103004';`
- **不是分区表,则不用删除**。
7. **创建目标表**根据【需求分析】,【模型设计】上下文,自行判断该表是否为分区表并创建该表
8. **插入目标表**: 在插入表之前,根据上一步,自行判断该表是否为分区表
9. **时间范围筛选规范 (重要)**:
- 当涉及多月份范围筛选(如"最近三个月"、"最近N个月")时,**必须使用日期函数动态计算**,禁止使用多个参数 + IN 的写法。
- **标准语法模板**
```sql
-- 最近N个月筛选月份格式 yyyyMM
WHERE month_id >= date_format(add_months(to_date('${month_id}', 'yyyyMM'), -N), 'yyyyMM')
AND month_id < '${month_id}'
-- 最近三个月示例:
WHERE month_id >= date_format(add_months(to_date('${month_id}', 'yyyyMM'), -3), 'yyyyMM')
AND month_id < '${month_id}'
```
- **参数简化**:只需传入一个 `${month_id}` 参数(统计月份),其他月份通过函数动态计算。
- **边界处理**:使用 `<` 而非 `<=`确保只统计历史N个月不包含当前统计月本身如统计月为202604则筛选202601-202603
# Workflow
1. **分析输入**: 阅读需求分析和模型设计。
@@ -59,19 +69,51 @@ description: 编写 Spark SQL 或 Flink SQL。当用户需要写 SQL、数据查
-- 版本号 更新时间 更新人员 更新内容
-- V1.0 20260227 理想-唐桐桐 创建脚本
-- @数据处理步骤:
-- Step01: 创建目标表
-- Step02: 汇总前一天所有平台接口访问数据
-- Step03: 判断账号是否发生共用
-- Step04: 结果插入风险结果表
-- 参数说明
-- 账期参数:
-- ${day_id} 日账期格式20250101
-- 环境变量:
-- 变量名 测试环境值 生产环境值
-- ${db_eda_env} db_eda_prj024_dev db_eda_prj024_prd
-- ${db_tmp_env} db_tmp_prj024_dev db_tmp_prj024_prd
-- ${db_tmp_env} db_eda_prj024_da db_eda_prj024_da
-- =====================================================================
-- ============================================================================
-- Step01: 汇总前一天所有平台接口访问数据
-- Step01: 创建目标表
-- ============================================================================
drop table if exists ${db_tmp_env}.prj024_rpt_data_riskcontrol_d;
CREATE TABLE ${db_tmp_env}.prj024_rpt_data_riskcontrol_d (
arearisk_id string comment"风险ID",
riskname string comment"风险名称",
riskdepartment string comment"风险所属单位/部门",
risklevel string comment"风险等级",
risktypecode string comment"风险类型编码",
riskdesc string comment"风险详情",
sourceip string comment"源DIP",
targetip string comment"目标IP",
happened_time string comment"风险发生时间",
isimport_coredata string comment"是否涉及重要核心数据",
isuserinfo string comment"是否涉及用户个人信息",
impactassetsname string comment"资产名称",
systemid string comment"资产 ID",
riskdisposalstat_us string comment"风险处置状态",
disposatime string comment"处理时间",
day_id string comment"日分区"
)
Using paimon COMMENT '涉及风险类型表'PARTITIONED BY (day_id) TBLPROPERTIES ('metastore.partitioned-table'= 'true');
-- ============================================================================
-- Step02: 汇总前一天所有平台接口访问数据
-- ============================================================================
drop table if exists ${db_tmp_env}.ttt_platform_data_summary_prev_day;
create table ${db_tmp_env}.ttt_platform_data_summary_prev_day using paimon as
@@ -101,7 +143,7 @@ where day_id = '${day_id}';
-- ============================================================================
-- Step02: 判断账号是否发生共用
-- Step03: 判断账号是否发生共用
-- ============================================================================
drop table if exists ${db_tmp_env}.ttt_is_oa_account_share;
create table ${db_tmp_env}.ttt_is_oa_account_share using paimon as
@@ -139,13 +181,9 @@ where diff_ip_nums >= 3 and rn = 1;
-- ============================================================================
-- Step010: 结果插入风险结果表
-- Step4: 结果插入风险结果表
-- ============================================================================
DELETE FROM ${db_eda_env}.prj024_rpt_data_riskcontrol_d
where day_id = '${day_id}'
and risktypecode = '103004';
insert into ${db_eda_env}.prj024_rpt_data_riskcontrol_d
insert into ${db_tmp_env}.prj024_rpt_data_riskcontrol_d
select uuid() as arearisk_id,
"账号是否发生共用" as riskname,
org_name as riskdepartment,
@@ -162,6 +200,7 @@ select uuid() as arearisk_id,
0 as riskdisposalstat_us,
cast(null as string) as disposatime,
day_id
from ${db_tmp_prj024_env}.ttt_is_oa_account_share;
from ${db_tmp_env}.ttt_is_oa_account_share;
```
将生成的sql写入/root/.config/opencode/ai_text路径下命名规范为SQL-DATA-当前时间-001.md。时间格式为yyyymmddhhmmss。
先输出完整的SQL脚本内容到对话中然后写入/root/.config/opencode/ai_text路径下命名规范为SQL-DATA-当前时间-001.md。时间与需求分析文本的一致。