Files
opencode-build/skills/metadata-validator/SKILL.md
T
2026-07-01 17:46:08 +08:00

3.7 KiB

name, description
name description
metadata-validator 当需要确认候选表、字段、字段归属、字段类型、时间列、分区列和 join key 是否真实存在于工作区元数据中时使用。消费 requirements-analysis 的 requirements_output,产出 validation_result 和 field_mapping;不写 SQL,不调用 MCP。

Metadata Validator(元数据校验)

目标

把需求里“想用的表和字段”与真实元数据对齐,防止模型凭感觉编表名、字段名和关联键。下游只能使用本 skill 确认过的字段映射。

输入

requirements_output:
  status: READY_FOR_METADATA
  candidate_tables: []
  candidate_fields: []
  join_hints: []
metadata_files: "当前工作区中的数据字典、DDL、schema、CSV 表头、Markdown 表格、Excel 等"

如果 requirements_output.status 不是 READY_FOR_METADATA,停止并回到 requirements-analysis

元数据查找顺序

  1. 递归查看工作区中的元数据文件,不只相信文件名。
  2. 优先读取结构化文件:DDL、JSON/YAML schema、CSV/Excel 数据字典、Markdown 表格。
  3. 对每张表记录证据:文件路径、表名出现位置、字段名、类型、注释、枚举。
  4. 文件名只能作为线索,不能作为存在性证据。

校验规则

  • 字段在别的表里存在,不等于在目标表里存在。
  • 字段名相似不等于字段可替换,必须保留候选并让用户确认。
  • 时间字段有多个时必须问清楚事件时间、分区时间和统计归属。
  • join key 有多个候选时必须问清楚,并标注基数风险。
  • 金额、数量、比率类指标要确认类型、单位和精度。
  • 结果表如果要写入,必须校验目标表存在性和字段兼容性;INSERT OVERWRITE 还需要用户显式确认。

工作顺序

  1. 整理所有候选表和候选字段。
  2. 从元数据中确认表是否存在。
  3. 校验字段是否存在于正确表中,并记录类型和来源。
  4. 校验指标字段是否适合聚合,时间字段是否适合时间过滤。
  5. 校验 join key 两边都存在,记录类型一致性和基数假设。
  6. 校验分区字段、状态枚举、金额单位等会影响结果的细节。
  7. 对缺失项给出证据和候选替代,不猜。
  8. 如果缺表、缺字段或 join/time 不明确,停止。

输出格式

validation_result:
  status: VALIDATED | NEED_USER_CONFIRMATION
  metadata_sources:
    - path: "元数据文件路径"
      evidence: "表/字段证据摘要"
  validated_tables:
    - table: "物理表名"
      role: fact | dimension | lookup | target | unknown
      source_file: "元数据来源"
  validated_fields:
    - table: "表名"
      column: "字段名"
      type: "字段类型"
      comment: "字段注释"
      source_file: "元数据来源"
  field_mapping:
    "业务字段名":
      table: "物理表名"
      column: "物理字段名"
      type: "字段类型"
      role: dimension | metric | filter | time | partition | join_key | output
      source_file: "元数据来源"
      confidence: high | medium | low
  joins:
    - left: "表A.字段"
      right: "表B.字段"
      type: inner | left | right | full | unknown
      cardinality: "1:1 | 1:N | N:1 | N:N | unknown"
      confidence: high | medium | low
  time_fields:
    - table: "表名"
      event_time: "事件时间字段"
      partition_time: "分区字段,可为空"
  missing_tables: []
  missing_fields: []
  alternatives:
    "缺失项": ["可能候选"]
  pending_questions:
    - "需要用户确认的问题"

停止条件

只在所有必需表、字段、join key、时间字段和目标写入字段都确认后输出 VALIDATED。否则输出 NEED_USER_CONFIRMATION