init について
データチーム向けに、データウェアハウスのリファレンスを初期化するスキルです。ウェアハウスのメタデータと、コードベース内の dbt、SQL、ドキュメントの情報を組み合わせ、編集・バージョン管理可能なスキーマガイドを生成します。更新と概念キャッシュにも対応します。
主な機能
- 01データベース、スキーマ、テーブル、列の検出
- 02コードベースの説明によるメタデータ補完
- 03行数の記録と大規模テーブルの識別
- 04編集可能なウェアハウスリファレンスの生成
- 05概念キャッシュのインポートと更新
活用シーン
- 01新規プロジェクトのウェアハウス一覧作成
- 02業務概念に対応するテーブルの検索
- 03スキーマ変更後のリファレンス更新
- 04CLAUDE.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/ に cd してください。
この処理について
- ウェアハウスからすべてのデータベース、スキーマ、テーブル、列を検出します
- コードベースのコンテキストを補足します(dbt モデル、gusty SQL、スキーマドキュメント)
- 行数を記録し、大規模なテーブルを特定します
.astro/warehouse.mdを生成します。これはバージョン管理でき、チームで共有できるリファレンスです- ウェアハウスへのクエリなしで、概念からテーブルをすぐに検索できるようにします
手順
ステップ 1:ウェアハウスの設定を読む
cat ~/.astro/agents/warehouse.yml
検出するデータベースの一覧を取得します(例:databases: [HQ, ANALYTICS, RAW])。
ステップ 2:コードベースを検索してコンテキストを取得する(並列)
コード内のビジネスコンテキストを探すサブエージェントを起動します:
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 ツールを使用して、データベースごとにサブエージェントを 1 つ起動します:
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"
"""
)
すべてのサブエージェントを並列で実行します(複数の Task 呼び出しを 1 つのメッセージで送信します)。
ステップ 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 つ
- スキーマのサブセクション — スキーマごとにテーブルをグループ化
- テーブルの詳細 — 列、行数、コードから取得した説明、警告
ステップ 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% に向上します。
選択肢:
- はい、CLAUDE.md に追加する(推奨)— クイックリファレンスセクションを追加
- いいえ、スキップする — warehouse.md とキャッシュのみを使用
ユーザーが「はい」を選択した場合:
.claude/CLAUDE.mdまたはCLAUDE.mdが存在するか確認します- 存在する場合は、クイックリファレンスセクションを追記します(重複を避けます)
- 存在しない場合は、クイックリファレンスのみを記載した
.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 が指定された場合:
- 既存の warehouse.md を読み込みます
- すべての HTML コメント(``)を保持します
- クイックリファレンステーブルの項目(ユーザーが追加したもの)を保持します
- ユーザーが追加した説明を保持します
- 行数を更新し、新しいテーブルを追加します
- 削除されたテーブルに `` コメントを付けます
キャッシュの有効期限とスキーマの変更
ランタイムキャッシュのデフォルトの TTL は 7 日間です。7 日が経過すると、キャッシュされたエントリは期限切れとなり、次回の使用時に再検出されます。
更新のタイミング
次の場合は /data:init --refresh を実行してください。
- スキーマの変更:テーブルの追加、名前の変更、削除があった場合
- カラムの変更:新しいカラムが追加された場合、または型が変更された場合
- デプロイ後:データパイプラインでスキーママイグレーションをデプロイする場合
- 毎週:変更が確認されていなくても、適切な方法として実行してください
キャッシュが古くなっている兆候
次の兆候に注意してください。
- クエリが「table not found」エラーで失敗する
- 結果が誤っている、または古いように見える
- 新しいテーブルが検出されない
手動でのキャッシュリセット
キャッシュに問題があると思われる場合:
# 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/**/*.yml | dbt | テーブル/カラムの説明、テスト |
**/dags/**/*.sql | gusty | YAML フロントマター(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