--- name: sql-context-builder description: 当逻辑计划已经完成,需要固定 SQL 生成和 SQL review 共同依赖的 alias、字段来源、join key、指标、维度、过滤、时间窗口、事实表/维表上下文时使用。消费 logic_plan 和 validation_result,不写 SQL,不调用 MCP。 --- # SQL Context Builder(SQL 上下文构建) ## 目标 把 SQL 生成时可能被临时猜测的内容提前固定下来。下游只能使用本 skill 输出的 alias、字段、join、指标、过滤、时间窗口和输出列。 ## 输入 ```yaml logic_plan: status: PLANNED validation_result: status: VALIDATED field_mapping: {} joins: [] ``` ## 工作顺序 1. 给每张表分配唯一、稳定、短小的 alias。 2. 标记事实表、维表、码表和目标表。 3. 把每个业务字段解析成 `alias.column`。 4. 固定 join 谓词、join 类型和基数假设。 5. 固定指标表达式、维度字段、时间字段、分区字段和过滤字段。 6. 固定时间窗口 SQL 片段,尤其是 T-1 完整日边界。 7. 固定输出列顺序和别名。 8. 检查 logic plan 中引用的字段都能在 context 中找到。 9. 对派生字段记录来源步骤和依赖字段。 ## 时间窗口上下文 当存在时间过滤时,必须输出 `time_windows`。对“近 N 天按 T-1 完整日”: ```yaml time_windows: - name: t_minus_1_complete_days event_field: fl.login_time lower_bound_sql: date_sub(current_date(), N) upper_bound_sql: current_date() predicate_sql: fl.login_time >= date_sub(current_date(), N) AND fl.login_time < current_date() boundary: left_closed_right_open ``` 下游 SQL 必须复用 `predicate_sql`,不得临时改成 `BETWEEN`。 ## 转化指标上下文 转化率必须固定分母、分子和顺序约束: ```yaml metrics: - name: conversion_rate numerator: converted_user_cnt denominator: new_user_cnt order_constraint: pay_time >= register_time null_policy: denominator_zero_returns_0 exists_after_anchor_event: true ``` ## 输出格式 ```yaml sql_context: status: CONTEXT_READY | NEED_USER_CONFIRMATION aliases: - alias: fl table: user_login role: fact | dimension | lookup | target source_file: "元数据来源" fields: - id: fl.user_id alias: fl table: user_login column: user_id type: bigint role: [join_key, metric] nullable: false source_file: "元数据来源" joins: - left: fl.user_id right: ur.user_id type: left cardinality: "N:1" source_step: S3 time_windows: [] metrics: [] dimensions: [] filters: [] outputs: [] write_intent: mode: query_only | insert_into | insert_overwrite target_table: "可为空" overwrite_confirmed: false unresolved: [] ``` ## 用户可见摘要 除了 YAML,必须输出: ```markdown ## SQL 上下文 ### 表别名 | Alias | 表名 | 角色 | |---|---|---| ### 字段来源 | 字段 | 来源 | 用途 | |---|---|---| ### Join 关系 | 左字段 | 右字段 | 类型 | 基数风险 | |---|---|---|---| ### 指标公式 | 指标 | 分子 | 分母 | 空值策略 | |---|---|---|---| ### 时间窗口 | 字段 | 下界 | 上界 | 边界 | |---|---|---|---| ``` ## 规则 - alias 一旦生成,下游不能重新命名。 - context 中不存在的字段,下游视为不存在。 - join key 只能来自元数据校验和逻辑计划。 - 指标表达式必须能追溯到 logic plan 的 aggregate 步骤。 - 输出列必须来自 `fields`、`metrics` 或明确派生字段。 - 如果 SQL 生成需要新字段,回到 metadata-validator 或 logic-planner。 ## 停止条件 只在 alias、字段、join、指标、时间字段、过滤字段、输出列和写入意图都完整时输出 `CONTEXT_READY`。