mcpField
I
init

init

github.com/astronomer数据与数据库459176 次安装2 天前更新
代码仓库

关于 init

用于数据团队初始化数据仓库参考文档的技能。它结合仓库元数据与代码库中的 dbt、SQL 和文档上下文,生成可编辑、可版本管理的 schema 说明,并支持刷新与概念缓存。

主要功能

  1. 01发现数据库、schema、表和列
  2. 02结合代码库描述丰富元数据
  3. 03记录行数并标记大表
  4. 04生成可编辑的仓库参考文件
  5. 05导入概念缓存并支持刷新

适用场景

  1. 01为新项目生成数据仓库目录
  2. 02查找业务概念对应的数据表
  3. 03schema 变更后更新参考文档
  4. 04将表映射添加到 CLAUDE.md

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/astronomer/agents --skill init

安装后在 Claude Code 中输入/init确认已加载。

详细介绍

初始化数仓架构

生成一份全面、可由用户编辑的数据仓库架构参考文件。

脚本: ../analyzing-data/scripts/ — 以下所有 CLI 命令均以 analyzing-data 技能目录为基准。运行任何 scripts/cli.py 命令前,请先相对于本文件切换到 ../analyzing-data/ 目录。

功能说明

  1. 从数仓中发现所有数据库、架构、表和列
  2. 补充代码库上下文(dbt 模型、gusty SQL、架构文档)
  3. 记录行数并识别大型表
  4. 生成 .astro/warehouse.md —— 可进行版本控制并供团队共享的参考文件
  5. 无需查询数仓,即可即时查找概念对应的表

流程

第 1 步:读取数仓配置
cat ~/.astro/agents/warehouse.yml

获取要发现的数据库列表(例如,databases: [HQ, ANALYTICS, RAW])。

第 2 步:搜索代码库中的上下文(并行)

启动一个子 Agent,在代码中查找业务上下文:

Task(
    subagent_type="Explore",
    prompt="""
    Search for data model documentation in the codebase:

    1. dbt models: **/models/**/*.yml, **/schema.yml
       - Extract table descriptions, column descriptions
       - Note primary keys and tests

    2. Gusty/declarative SQL: **/dags/**/*.sql with YAML frontmatter
       - Parse frontmatter for: description, primary_key, tests
       - Note schema mappings

    3. AGENTS.md or CLAUDE.md files with data layer documentation

    Return a mapping of:
      table_name -> {description, primary_key, important_columns, layer}
    """
)
第 3 步:并行发现数仓信息

使用 Task 工具,为每个数据库启动一个子 Agent:

For each database in configured_databases:
    Task(
        subagent_type="general-purpose",
        prompt="""
        Discover all metadata for database {DATABASE}.

        Use the CLI to run SQL queries:
        # Scripts are relative to ../analyzing-data/
        uv run scripts/cli.py exec "df = run_sql('...')"
        uv run scripts/cli.py exec "print(df)"

        1. Query schemas:
           SELECT SCHEMA_NAME FROM {DATABASE}.INFORMATION_SCHEMA.SCHEMATA

        2. Query tables with row counts:
           SELECT TABLE_SCHEMA, TABLE_NAME, ROW_COUNT, COMMENT
           FROM {DATABASE}.INFORMATION_SCHEMA.TABLES
           ORDER BY TABLE_SCHEMA, TABLE_NAME

        3. For important schemas (MODEL_*, METRICS_*, MART_*), query columns:
           SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, COMMENT
           FROM {DATABASE}.INFORMATION_SCHEMA.COLUMNS
           WHERE TABLE_SCHEMA = 'X'

        Return a structured summary:
        - Database name
        - List of schemas with table counts
        - For each table: name, row_count, key columns
        - Flag any tables with >100M rows as "large"
        """
    )

并行运行所有子 Agent(在一条消息中调用多个 Task)。

第 4 步:发现分类值族

对于关键分类列(例如 OPERATOR、STATUS、TYPE、FEATURE),发现其值族:

uv run cli.py exec "df = run_sql('''
SELECT DISTINCT column_name, COUNT(*) as occurrences
FROM table
WHERE column_name IS NOT NULL
GROUP BY column_name
ORDER BY occurrences DESC
LIMIT 50
''')"
uv run cli.py exec "print(df)"

按共同前缀或后缀将相关值归为一组(例如,为 ExportCSV、ExportJSON、ExportParquet 归为 Export*)。

第 5 步:合并结果

整合数仓元数据与代码库上下文:

  1. 快速参考表 — 概念 → 表的映射(如果能从代码中找到,则预先填充)
  2. 分类列 — 关键筛选列的值族
  3. 数据库分区 — 每个数据库一个分区
  4. 架构子分区 — 按架构对表分组
  5. 表详情 — 列、行数、来自代码的描述、警告
第 6 步:生成 warehouse.md

将文件写入:

  • .astro/warehouse.md(默认值 — 项目专用,可进行版本控制)
  • ~/.astro/agents/warehouse.md(使用 --global 标志时)

输出格式

# Warehouse Schema

> Generated by `/data:init` on {DATE}. Edit freely to add business context.

## Quick Reference

| Concept | Table | Key Column | Date Column |
|---------|-------|------------|-------------|
| customers | HQ.MODEL_ASTRO.ORGANIZATIONS | ORG_ID | CREATED_AT |


## Categorical Columns

When filtering on these columns, explore value families first (values often have variants):

| Table | Column | Value Families |
|-------|--------|----------------|
| {TABLE} | {COLUMN} | `{PREFIX}*` ({VALUE1}, {VALUE2}, ...) |


## Data Layer Hierarchy

Query downstream first: `reporting` > `mart_*` > `metric_*` > `model_*` > `IN_*`

| Layer | Prefix | Purpose |
|-------|--------|---------|
| Reporting | `reporting.*` | Dashboard-optimized |
| Mart | `mart_*` | Combined analytics |
| Metric | `metric_*` | KPIs at various grains |
| Model | `model_*` | Cleansed sources of truth |
| Raw | `IN_*` | Source data - avoid |

## {DATABASE} Database

### {SCHEMA} Schema

#### {TABLE_NAME}
{DESCRIPTION from code if found}

| Column | Type | Description |
|--------|------|-------------|
| COL1 | VARCHAR | {from code or inferred} |

- **Rows:** {ROW_COUNT}
- **Key column:** {PRIMARY_KEY from code or inferred}
{IF ROW_COUNT > 100M: - **⚠️ WARNING:** Large table - always add date filters}

## Relationships

{根据列名(如 *_ID)推断的关系}

命令选项

选项效果
/data:init生成 .astro/warehouse.md
/data:init --refresh重新生成,同时保留用户编辑内容
/data:init --database HQ仅发现指定数据库
/data:init --global写入 ~/.astro/agents/
第 7 步:预填充缓存

生成 warehouse.md 后,填充概念缓存:

# Scripts are relative to ../analyzing-data/
uv run cli.py concept import -p .astro/warehouse.md
uv run cli.py concept learn customers HQ.MART_CUST.CURRENT_ASTRO_CUSTS -k ACCT_ID
第 8 步:询问是否集成到 CLAUDE.md

询问用户:

是否要将快速参考表添加到 CLAUDE.md 文件中?

这样可确保架构映射始终包含在数据查询上下文中,从而将复杂查询的准确率从约 25% 提升至约 100%。

选项:

  1. 是,添加到 CLAUDE.md(推荐)— 附加快速参考部分
  2. 否,跳过 — 仅使用 warehouse.md 和缓存

如果用户选择“是”:

  1. 检查 .claude/CLAUDE.md 或 CLAUDE.md 是否存在
  2. 如果存在,附加快速参考部分(避免重复)
  3. 如果不存在,创建仅包含快速参考部分的 .claude/CLAUDE.md

要添加的快速参考部分:

## Data Warehouse Quick Reference

When querying the warehouse, use these table mappings:

| Concept | Table | Key Column | Date Column |
|---------|-------|------------|-------------|
{rows from warehouse.md Quick Reference}

**Large tables (always filter by date):** {list tables with >100M rows}

> Auto-generated by `/data:init`. Run `/data:init --refresh` to update.

如果用户选择“是”: 将快速参考部分附加到 .claude/CLAUDE.md 或 CLAUDE.md。

生成后

告知用户:

Generated .astro/warehouse.md

Summary:
  - {N} databases, {N} schemas, {N} tables
  - {N} tables enriched with code descriptions
  - {N} concepts cached for instant lookup

Next steps:
  1. Edit .astro/warehouse.md to add business context
  2. Commit to version control
  3. Run /data:init --refresh when schema changes

刷新行为

指定 --refresh 时:

  1. 读取现有的 warehouse.md
  2. 保留所有 HTML 注释(``)
  3. 保留快速参考表中的条目(用户添加)
  4. 保留用户添加的描述
  5. 更新行数并添加新表
  6. 使用 `` 注释标记已删除的表

缓存过期与架构漂移

运行时缓存默认有 7 天的 TTL。7 天后,缓存条目会过期,并在下次使用时重新发现。

何时刷新

在以下情况下运行 /data:init --refresh:

  • 架构变更:添加、重命名或删除表
  • 列变更:添加新列或更改列类型
  • 部署后:如果数据管道部署了架构迁移
  • 每周:作为良好实践,即使没有已知变更也要执行
缓存过期的迹象

留意以下迹象:

  • 查询失败并提示“找不到表”
  • 结果似乎有误或已过时
  • 未能发现新表
手动重置缓存

如果怀疑缓存存在问题:

# Scripts are relative to ../analyzing-data/
uv run scripts/cli.py cache status
uv run scripts/cli.py cache clear --stale-only
uv run scripts/cli.py cache clear

识别出的代码库模式

模式来源提取内容
**/models/**/*.ymldbt表/列描述、测试
**/dags/**/*.sqlgustyYAML frontmatter(description、primary_key)
AGENTS.md、CLAUDE.md文档数据层级结构、约定
**/docs/**/*.md文档业务背景

会话示例

User: /data:init

Agent:
→ Reading warehouse configuration...
→ Found 1 warehouse with databases: HQ, PRODUCT

→ Searching codebase for data documentation...
  Found: AGENTS.md with data layer hierarchy
  Found: 45 SQL files with YAML frontmatter in dags/declarative/

→ Launching parallel warehouse discovery...
  [Database: HQ] Discovering schemas...
  [Database: PRODUCT] Discovering schemas...

→ HQ: Found 29 schemas, 401 tables
→ PRODUCT: Found 1 schema, 0 tables

→ Merging warehouse metadata with code context...
  Enriched 45 tables with descriptions from code

→ Generated .astro/warehouse.md

Summary:
  - 2 databases
  - 30 schemas
  - 401 tables
  - 45 tables enriched with code descriptions
  - 8 large tables flagged (>100M rows)

Next steps:
  1. Review .astro/warehouse.md
  2. Add concept mappings to Quick Reference
  3. Commit to version control
  4. Run /data:init --refresh when schema changes

评论

支持 Markdown