К основному содержанию
скилл CX Codex

answering-natural-language-questions-with-dbt — скилл

Скилл отвечает на бизнес-вопросы по данным: сначала ищет метрику в семантическом слое dbt, потом пишет и выполняет SQL. Пригодится, когда нужно узнать цифры, а не строить модели.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add dbt-labs/dbt-agent-skills --skill answering-natural-language-questions-with-dbt -a claude-code
Открыть на GitHub

Что делает answering-natural-language-questions-with-dbt

Скилл берёт вопрос вида «сколько было продаж в прошлом квартале» и ищет ответ по четырём ступеням. Сначала семантический слой: list_metrics, get_dimensions, query_metrics. Если метрика есть, но не хватает измерения или нужен свой фильтр, скилл забирает скомпилированный SQL через get_metrics_compiled_sql, правит его и выполняет через execute_sql.

Без семантического слоя он переходит к поиску моделей: get_mart_models, get_model_details, дальше пишет SQL с {{ ref('model_name') }} и запускает через show --inline или execute_sql. Если MCP-сервера нет, но проект dbt под рукой, скилл читает target/manifest.json и target/catalog.json — и советует фильтровать их через jq, потому что файлы большие. Выполнить запрос в этом случае он не сможет: доступа к базе нет, SQL придётся запускать самому.

Скилл не для разработки: проверка логики моделей, dbt test, dbt build и правка моделей — не его работа. После ответа он предлагает дополнить семантический слой, если метрики или измерения не хватило, но не лезет в схему базы и ETL.

Какие задачи решает

  • получить сумму продаж за прошлый квартал без похода в BI
  • найти нужную метрику в семантическом слое dbt
  • дописать недостающее измерение к готовой метрике
  • разобрать схему mart-моделей и написать по ней SQL
  • вытащить список колонок из target/catalog.json

Примеры запросов агенту

  • Сколько активных клиентов у нас сейчас?
  • Покажи выручку по регионам
  • Какие клиенты принесли больше всего выручки в прошлом месяце?

Как установить answering-natural-language-questions-with-dbt

1Через Skills CLI (Vercel)

npx skills add dbt-labs/dbt-agent-skills --skill answering-natural-language-questions-with-dbt -a claude-code

2Вручную: положить файлы

~/.claude/skills/answering-natural-language-questions-with-dbt/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/answering-natural-language-questions-with-dbt/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора12

fetching-dbt-docs Ищет и загружает документацию dbt Cloud, dbt Core и Semantic Layer в формате Markdown без лишней HTML-разметки. CX Codex +1 1 100установок troubleshooting-dbt-job-errors Разбирает упавшие джобы dbt Cloud: смотрит логи, историю git и данные, чтобы найти причину. Пригодится, когда ошибка непонятная или плавает. CX Codex +1 1 000установок building-dbt-semantic-layer Скилл помогает ИИ настраивать семантический слой dbt: метрики, сущности, измерения и time spines. Пригодится при переходе на спецификацию dbt Core 1.12+ или работе со старыми конфигами. CX Codex +1 1 000установок configuring-dbt-mcp-server Скилл собирает JSON-конфиг для dbt MCP-сервера, разбирается с авторизацией и проверяет, что соединение работает. CX Codex +1 1 000установок working-with-dbt-mesh Оценивает риски ломающих изменений в dbt-моделях и настраивает версионирование, контракты и межпроектные ссылки dbt Mesh. CX Codex +1 869установок using-dbt-state Скилл объясняет агенту, как работает dbt State: когда узел пропускается, клонируется или пересобирается. Пригодится, если модели пересобираются без причины. CX Codex +1 554установок creating-mermaid-dbt-dag Строит Mermaid-диаграмму родословной моделей dbt: родители, дети и цветовая легенда по типам ресурсов. Пригодится, когда нужно показать зависимости в markdown. CX Codex +1 527установок migrating-dbt-project-across-platforms Скилл помогает перенести dbt-проект между хранилищами данных с помощью dbt Fusion. Он находит различия в SQL-диалектах и сверяет логику через unit-тесты. CX Codex +1 526установок

Похожие

dbt-transformation-patterns Seth Hobson Скилл для Claude, Codex и Cursor, который подсказывает агенту, как раскладывать dbt-модели по слоям, писать тесты и делать инкрементальные витрины. CX Codex 11 000установок dbt-data-transformation manutej Скилл по dbt для аналитической инженерии: модели, тесты, документация, инкрементальные сборки, макросы и пакеты. Пригодится, когда нужно навести порядок в SQL-преобразованиях в хранилище. CX Codex +1 441установок dbt-sf-to-bq-translator официальный google Переводит dbt-модели Snowflake в Standardized BigQuery SQL. Нужен для миграции пайплайнов на Google Cloud через Claude Code, Gemini CLI или Codex. CX Codex 2 300установок mongodb-natural-language-querying mongodb Создаёт MongoDB-запросы на чтение и конвейеры агрегации по описанию задачи. Пригодится для фильтрации, группировки и перевода SQL-подобных запросов. CX Codex +1 4 700установок cosmos-dbt-core astronomer Превращает проект dbt Core в Airflow DAG или TaskGroup через Astronomer Cosmos. Пригодится, когда нужно расписание и ретраи для моделей dbt. CX Codex +1 962установок natural-language dpearson2699 Скилл для разбора текста на устройстве: токенизация, определение языка, теги частей речи, сущности, тональность и перевод в приложениях Apple. CX Codex +1 3 700установок

Рядом в теме «Данные и базы»

Все скиллы по теме «Данные и базы» →

Вопросы о answering-natural-language-questions-with-dbt

Как установить answering-natural-language-questions-with-dbt в Claude?

Одной командой: npx skills add dbt-labs/dbt-agent-skills --skill answering-natural-language-questions-with-dbt -a claude-code. После установки файл скилла лежит в ~/.claude/skills/answering-natural-language-questions-with-dbt/SKILL.md.

Что делает answering-natural-language-questions-with-dbt?

Отвечает на вопросы по метрикам и данным: ищет метрику в семантическом слое dbt, при необходимости правит скомпилированный SQL или пишет запрос по mart-моделям и выполняет его.

Подходит ли скилл для разработки dbt-моделей?

Нет. Он не для проверки логики моделей, тестов и сборки — это отдельные задачи. Здесь речь только о вопросах к данным.

Исходный текст

SKILL.md · Apache-2.0
---
name: answering-natural-language-questions-with-dbt
description: Writes and executes SQL queries against the data warehouse using dbt's Semantic Layer or ad-hoc SQL to answer business questions. Use when a user asks about analytics, metrics, KPIs, or data (e.g., "What were total sales last quarter?", "Show me top customers by revenue"). NOT for validating, testing, or building dbt models during development.
user-invocable: false
metadata:
  author: dbt-labs
---

# Answering Natural Language Questions with dbt

## Overview

Answer data questions using the best available method: semantic layer first, then SQL modification, then model discovery, then manifest analysis. Always exhaust options before saying "cannot answer."

**Use for:** Business questions from users that need data answers
- "What were total sales last month?"
- "How many active customers do we have?"
- "Show me revenue by region"

**Not for:**
- Validating model logic during development
- Testing dbt models or semantic layer definitions
- Building or modifying dbt models
- `dbt run`, `dbt test`, or `dbt build` workflows

## Decision Flow

```mermaid
flowchart TD
    start([Business question received])
    check_sl{Semantic layer tools available?}
    list_metrics[list_metrics]
    metric_exists{Relevant metric exists?}
    get_dims[get_dimensions]
    sl_sufficient{SL can answer directly?}
    query_metrics[query_metrics]
    answer([Return answer])
    try_compiled[get_metrics_compiled_sql<br/>Modify SQL, execute_sql]
    check_discovery{Model discovery tools available?}
    try_discovery[get_mart_models<br/>get_model_details<br/>Write SQL, execute]
    check_manifest{In dbt project?}
    try_manifest[Analyze manifest/catalog<br/>Write SQL]
    cannot([Cannot answer])
    suggest{In dbt project?}
    improvements[Suggest semantic layer changes]
    done([Done])

    start --> check_sl
    check_sl -->|yes| list_metrics
    check_sl -->|no| check_discovery
    list_metrics --> metric_exists
    metric_exists -->|yes| get_dims
    metric_exists -->|no| check_discovery
    get_dims --> sl_sufficient
    sl_sufficient -->|yes| query_metrics
    sl_sufficient -->|no| try_compiled
    query_metrics --> answer
    try_compiled -->|success| answer
    try_compiled -->|fail| check_discovery
    check_discovery -->|yes| try_discovery
    check_discovery -->|no| check_manifest
    try_discovery -->|success| answer
    try_discovery -->|fail| check_manifest
    check_manifest -->|yes| try_manifest
    check_manifest -->|no| cannot
    try_manifest -->|SQL ready| answer
    answer --> suggest
    cannot --> done
    suggest -->|yes| improvements
    suggest -->|no| done
    improvements --> done
```

## Quick Reference

| Priority | Condition | Approach | Tools |
|----------|-----------|----------|-------|
| 1 | Semantic layer active | Query metrics directly | `list_metrics`, `get_dimensions`, `query_metrics` |
| 2 | SL active but minor modifications needed (missing dimension, custom filter, case when, different aggregation) | Modify compiled SQL | `get_metrics_compiled_sql`, then `execute_sql` |
| 3 | No SL, discovery tools active | Explore models, write SQL | `get_mart_models`, `get_model_details`, then `show`/`execute_sql` |
| 4 | No MCP, in dbt project | Analyze artifacts, write SQL | Read `target/manifest.json`, `target/catalog.json` |

## Approach 1: Semantic Layer Query

When `list_metrics` and `query_metrics` are available:

1. `list_metrics` - find relevant metric
2. `get_dimensions` - verify required dimensions exist
3. `query_metrics` - execute with appropriate filters

If semantic layer can't answer directly (missing dimension, need custom logic) → go to Approach 2.

## Approach 2: Modified Compiled SQL

When semantic layer has the metric but needs minor modifications:

- Missing dimension (join + group by)
- Custom filter not available as a dimension
- Case when logic for custom categorization
- Different aggregation than what's defined

1. `get_metrics_compiled_sql` - get the SQL that would run (returns raw SQL, not Jinja)
2. Modify SQL to add what's needed
3. `execute_sql` to run the raw SQL
4. **Always suggest** updating the semantic model if the modification would be reusable

```sql
-- Example: Adding sales_rep dimension
WITH base AS (
    -- ... compiled metric logic (already resolved to table names) ...
)
SELECT base.*, reps.sales_rep_name
FROM base
JOIN analytics.dim_sales_reps reps ON base.rep_id = reps.id
GROUP BY ...

-- Example: Custom filter
SELECT * FROM (compiled_metric_sql) WHERE region = 'EMEA'

-- Example: Case when categorization
SELECT
    CASE WHEN amount > 1000 THEN 'large' ELSE 'small' END as deal_size,
    SUM(amount)
FROM (compiled_metric_sql)
GROUP BY 1
```

**Note:** The compiled SQL contains resolved table names, not `{{ ref() }}`. Work with the raw SQL as returned.

## Approach 3: Model Discovery

When no semantic layer but `get_all_models`/`get_model_details` available:

1. `get_mart_models` - start with marts, not staging
2. `get_model_details` for relevant models - understand schema
3. Write SQL using `{{ ref('model_name') }}`
4. `show --inline "..."` or `execute_sql`

**Prefer marts over staging** - marts have business logic applied.

## Approach 4: Manifest/Catalog Analysis

When in a dbt project but no MCP server:

1. Check for `target/manifest.json` and `target/catalog.json`
2. **Filter before reading** - these files can be large

```bash
# Find mart models in manifest
jq '.nodes | to_entries | map(select(.key | startswith("model.") and contains("mart"))) | .[].value | {name: .name, schema: .schema, columns: .columns}' target/manifest.json

# Get column info from catalog
jq '.nodes["model.project_name.model_name"].columns' target/catalog.json
```

3. Write SQL based on discovered schema
4. Explain: "This SQL should run in your warehouse. I cannot execute it without database access."

## Suggesting Improvements

**When in a dbt project**, suggest semantic layer changes after answering (or when cannot answer):

| Gap | Suggestion |
|-----|------------|
| Metric doesn't exist | "Add a metric definition to your semantic model" |
| Dimension missing | "Add `dimension_name` to the dimensions list in the semantic model" |
| No semantic layer | "Consider adding a semantic layer for this data" |

**Stay at semantic layer level.** Do NOT suggest:
- Database schema changes
- ETL pipeline modifications
- "Ask your data engineering team to..."

## Rationalizations to Resist

| You're Thinking... | Reality |
|--------------------|---------|
| "Semantic layer doesn't support this exact query" | Get compiled SQL and modify it (Approach 2) |
| "No MCP tools, can't help" | Check for manifest/catalog locally |
| "User needs this quickly, skip the systematic check" | Systematic approach IS the fastest path |
| "Just write SQL, it's faster" | Semantic layer exists for a reason - use it first |
| "The dimension doesn't exist in the data" | Maybe it exists but not in semantic layer config |

## Red Flags - STOP

- Writing SQL without checking if semantic layer can answer
- Saying "cannot answer" without trying all 4 approaches
- Suggesting database-level fixes for semantic layer gaps
- Reading entire manifest.json without filtering
- Using staging models when mart models exist
- Using this to validate model correctness rather than answer business questions

## Common Mistakes

| Mistake | Fix |
|---------|-----|
| Giving up when SL can't answer directly | Get compiled SQL and modify it |
| Querying staging models | Use `get_mart_models` first |
| Reading full manifest.json | Use jq to filter |
| Suggesting ETL changes | Keep suggestions at semantic layer |
| Not checking tool availability | List available tools before choosing approach |

© dbt-labs · Apache-2.0 · dbt-labs/dbt-agent-skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой