前端开发
数据仓库 Schema 发现初始化:为项目生成可版本控制…
当需要为数据仓库设置或刷新 schema 发现、生成 .astro/warehouse.md 并让概念到表查找无需查询仓库时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
数据仓库 Schema 发现初始化:为项特定
解决思路
- 先进入 `../analyzing-data/` 目录,再运行任何 `scripts/cli.py` 命令;所有 CLI 命令均以该 skill 目录为相对路径。
- 读取仓库配置:`cat ~/.astro/agents/warehouse.yml`,获取要发现的 databases 列表(如 `databases: [HQ, ANALYTICS, RAW]`)。
- 并行搜索代码库获取业务上下文:启动 `Task(subagent_type="Explore", prompt=...)` 子代理,按以下模式搜索:`**/models/**/*.yml`、`**/schema.yml`(dbt 模型,提取表/列描述、主键、测试);`**/dags/**/*.sql`(gusty/声明式 SQL,解析 YAML frontmatter 中的 description、primary_key、tests,记录 schema 映射);`AGENTS.md` 或 `CLAUDE.md`(数据层文档);`**/docs/**/*.md`(业务上下文)。返回 `table_name -> {description, primary_key, important_columns, layer}` 映射。
- 对配置中的每个 database 启动一个 `Task(subagent_type="general-purpose", prompt=...)` 子代理;在单条消息中用多个 Task 调用并行运行所有子代理。
- 在每个数据库子代理中,用 CLI 执行 SQL 查询:`uv run scripts/cli.py exec "df = run_sql('...')"`,然后 `uv run scripts/cli.py exec "print(df)"`。
- 查询 schemas:`SELECT SCHEMA_NAME FROM {DATABASE}.INFORMATION_SCHEMA.SCHEMATA`。
- 查询 tables 和行数:`SELECT TABLE_SCHEMA, TABLE_NAME, ROW_COUNT, COMMENT FROM {DATABASE}.INFORMATION_SCHEMA.TABLES ORDER BY TABLE_SCHEMA, TABLE_NAME`。
- 对重要 schemas(`MODEL_*`、`METRICS_*`、`MART_*`)查询 columns:`SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, COMMENT FROM {DATABASE}.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'X'`。
- 让子代理返回结构化摘要:数据库名、schema 及表数量、每张表的 name/row_count/key columns、标记行数 >100M 的表为 large。
- 发现分类值族:对关键分类列(如 `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)"`,按共同前后缀将相关值分组为 families(例如 `Export*` 包含 ExportCSV、ExportJSON、ExportParquet)。
- 合并仓库元数据与代码上下文:生成 Quick Reference 表(概念→表映射,能从代码预填则预填)、Categorical Columns、每个 database 的 Database sections、按 schema 分组的 Schema subsections、Table details(columns、row counts、来自代码的描述、warnings)。
- 将文件写到 `.astro/warehouse.md`(默认,项目级、可版本控制);如果使用 `--global` 则写到 `~/.astro/agents/warehouse.md`。
- 输出文件遵循给定 Markdown 格式:标题与生成日期、Quick Reference 表(Concept/Table/Key Column/Date Column)、Categorical Columns 表(Table/Column/Value Families)、Data Layer Hierarchy(下游优先:`reporting` > `mart_*` > `metric_*` > `model_*` > `IN_*`,含每层前缀/用途表)、`{DATABASE} Database` 与 `{SCHEMA} Schema` 和每张表详情(列/类型/描述、Rows、Key column、>100M 行的 WARNING)、Relationships(基于 `*_ID` 等列名推断)。
- 命令选项:`/astronomer-data:warehouse-init` 生成 `.astro/warehouse.md`;`--refresh` 重新生成并保留用户编辑;`--database HQ` 只发现指定 database;`--global` 写到 `~/.astro/agents/`。
- 生成 warehouse.md 后,预填充概念缓存:`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`。
- 询问用户是否将 Quick Reference 表加入 `CLAUDE.md`:说明可让 schema 映射始终在上下文,复杂查询准确率从约 25% 提升到约 100%;选项:1) Yes, add to CLAUDE.md(推荐)追加 Quick Reference 区块;2) No, skip 只用 warehouse.md 和 cache。
- 如果用户选择 Yes:检查 `.claude/CLAUDE.md` 或 `CLAUDE.md` 是否存在;存在则追加 Quick Reference 区块并避免重复;不存在则创建 `.claude/CLAUDE.md`,只放 Quick Reference。
- 要追加的 Quick Reference 区块包含:`## Data Warehouse Quick Reference`、`When querying the warehouse, use these table mappings:`、表格 `Concept | Table | Key Column | Date Column`(来自 warehouse.md Quick Reference)、`**Large tables (always filter by date):** {list tables with >100M rows}`、以及自动生成说明:`Auto-generated by /astronomer-data:warehouse-init. Run /astronomer-data:warehouse-init --refresh to update.`。
- 生成后告知用户:已生成 `.astro/warehouse.md`;汇总 `{N} databases, {N} schemas, {N} tables`、`{N} tables enriched with code descriptions`、`{N} concepts cached for instant lookup`;下一步:编辑 `.astro/warehouse.md` 添加业务上下文、提交到版本控制、schema 变化时运行 `/astronomer-data:warehouse-init --refresh`。
- `--refresh` 行为:读取现有 warehouse.md;保留所有 HTML 注释 `<!-- ... -->`;保留 Quick Reference 表条目(用户添加的);保留用户添加的描述;更新行数并加入新表;将已删除表标记为 `<!-- REMOVED -->`。
- 缓存过期与 schema drift:运行时缓存默认有 7 天 TTL,7 天后过期并在下次使用时重新发现。
- 需要刷新时机:schema 变化(表增加/重命名/删除)、列变化(新增列或类型变更)、数据管道部署 schema migrations 后、每周作为良好实践。
- 过期缓存迹象:查询失败并报 table not found、结果看起来错误或过时、新表未被发现。
- 手动缓存重置:`uv run scripts/cli.py cache status`;`uv run scripts/cli.py cache clear --stale-only`;`uv run scripts/cli.py cache clear`。
- 识别的代码库模式:`**/models/**/*.yml` 来自 dbt,提取表/列描述、测试;`**/dags/**/*.sql` 来自 gusty,提取 YAML frontmatter 的 description、primary_key;`AGENTS.md`、`CLAUDE.md` 提取数据层层级与约定;`**/docs/**/*.md` 提取业务上下文。
适用边界 · 注意事项
- 不适用于没有 `~/.astro/agents/warehouse.yml`、未配置 `analyzing-data` skill/CLI 或数据仓库不受该工具支持的环境。
- 不适用于只需一次性临时查询、不需要团队共享或缓存概念映射的场景。
- 若 schema 频繁变化且无法定期 refresh,生成的缓存可能很快过时,不建议依赖其做关键查询。