khalilbenaz/claude-skills-collection/data-dbt-guide

Claude Code and agent skill by khalilbenaz/claude-skills-collection

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Transformation de données avec dbt — models, tests, sources, macros et documentation automatisée. Se déclenche avec "dbt", "data build tool", "dbt model", "dbt test", "transformation de données dbt". Also triggers on "dbt models", "dbt tests", "transform data with dbt".

Install

npx vskill@latest install khalilbenaz/claude-skills-collection/data-dbt-guide

SKILL.md

Guide dbt

Workflow

1. Initialiser et structurer le projet
bash
dbt init mon_projet # crée le squelette
cd mon_projet
dbt debug # vérifie la connexion au warehouse

Arborescence cible :

models/
staging/ ← nettoyage source, renommage, cast ; materialisation = view
intermediate/ ← jointures, logique métier complexe ; materialisation = view ou ephemeral
marts/ ← modèles finaux consommables ; materialisation = table
macros/
tests/
seeds/
snapshots/

dbt_project.yml — materialisations par dossier :

yaml
models:
mon_projet:
staging:
+materialized: view
+schema: staging
intermediate:
+materialized: view
marts:
+materialized: table
+schema: marts

2. Déclarer les sources
yaml
# models/staging/sources.yml
version: 2
sources:
- name: raw_crm
schema: raw
freshness:
warn_after: {count: 12, period: hour}
error_after: {count: 24, period: hour}
loaded_at_field: _loaded_at
tables:
- name: orders
description: "Commandes brutes issues du CRM"
columns:
- name: order_id
tests: [unique, not_null]

Référencer dans un modèle :

sql
select * from {{ source('raw_crm', 'orders') }}

Tester la fraîcheur :

bash
dbt source freshness

3. Développer les modèles

Staging — un modèle par table source, préfixe `stg_` :

sql
-- models/staging/stg_orders.sql
with source as (
select * from {{ source('raw_crm', 'orders') }}
),
renamed as (
select
order_id::varchar as order_id,
customer_id::int as customer_id,
created_at::timestamp as created_at,
status::varchar as status
from source
)
select * from renamed

Mart — utilise `ref()` pour chaque dépendance :

sql
-- models/marts/fct_orders.sql
with orders as (
select * from {{ ref('stg_orders') }}
),
customers as (
select * from {{ ref('stg_customers') }}
)
select
o.order_id,
o.created_at,
c.customer_name,
o.status
from orders o
left join customers c on o.customer_id = c.customer_id

Critères de choix de materialisation :

CasMaterialisation recommandée
Nettoyage léger / peu consomméview
Rapport BI / dashboardtable
Table > 10M lignes avec clé temporelleincremental
Sous-requête intermédiaire réutiliséeephemeral
Suivi de changements type SCD2snapshot

Modèle incrémental :

sql
-- models/marts/fct_events.sql
{{ config(materialized='incremental', unique_key='event_id') }}
select * from {{ ref('stg_events') }}
{% if is_incremental() %}
where event_at > (select max(event_at) from {{ this }})
{% endif %}

4. Tester les données

Fichier YAML associé à chaque modèle :

yaml
# models/marts/fct_orders.yml
version: 2
models:
- name: fct_orders
description: "Faits commandes enrichis"
columns:
- name: order_id
tests: [unique, not_null]
- name: status
tests:
- accepted_values:
values: ['pending', 'confirmed', 'shipped', 'cancelled']
- name: customer_id
tests:
- relationships:
to: ref('stg_customers')
field: customer_id

Test custom SQL dans tests/ :

sql
-- tests/assert_no_negative_amount.sql
select order_id
from {{ ref('fct_orders') }}
where amount < 0

Commandes :

bash
dbt test # tous les tests
dbt test --select fct_orders # tests d'un modèle
dbt test --store-failures # stocker les lignes en erreur dans le warehouse

5. Créer des macros
sql
-- macros/generate_surrogate_key.sql
{% macro generate_surrogate_key(fields) %}
{{ dbt_utils.generate_surrogate_key(fields) }}
{% endmacro %}
-- macros/audit_columns.sql
{% macro audit_columns() %}
current_timestamp as dbt_loaded_at,
'{{ invocation_id }}' as dbt_run_id
{% endmacro %}

Usage dans un modèle :

sql
select
{{ generate_surrogate_key(['order_id', 'customer_id']) }} as sk_order,
order_id,
{{ audit_columns() }}
from {{ ref('stg_orders') }}

6. Documenter
yaml
models:
- name: fct_orders
description: >
Faits commandes joints avec les clients.
Utilisé par le dashboard Revenue dans Metabase.
columns:
- name: order_id
description: "Identifiant unique de la commande (source CRM)"
bash
dbt docs generate # génère catalog.json
dbt docs serve # ouvre le site sur localhost:8080

7. CI/CD et environnements

profiles.yml — deux targets :

yaml
mon_projet:
target: dev
outputs:
dev:
type: snowflake
schema: "dbt_{{ env_var('DBT_USER', 'dev') }}"
...
prod:
type: snowflake
schema: marts
...

Pipeline CI (GitHub Actions) :

yaml
- run: dbt build --target prod --select state:modified+ # uniquement les modèles modifiés et leurs dépendants
- run: dbt test --target prod --select state:modified+
bash
dbt build # compile + run + test en une commande
dbt build --select +fct_orders # modèle + tous ses ancêtres
dbt run --exclude tag:slow # exclure les modèles lourds

Anti-patterns / Pièges

PiègeCorrection
select * en mart sans liste expliciteLister les colonnes exposées, ça évite les régressions silencieuses
Table en dur dans un modèle SQLToujours {{ ref() }} ou {{ source() }}
Pas de unique_key sur un incrémentalCrée des doublons à chaque run ; définir unique_key obligatoirement
Tests YAML uniquement sur la PKTester aussi les FK (relationships), les valeurs acceptées et les colonnes NOT NULL métier
Incrémental sans stratégie full refreshAjouter +full_refresh: false en dev seulement ; prévoir dbt run --full-refresh planifié
Modèles staging qui joinent plusieurs sourcesUn modèle staging = une source ; les jointures vont en intermediate/
Documentation rédigée après-coupÉcrire description + tests en même temps que le modèle, sinon jamais fait
dbt run en prod sans dbt testUtiliser dbt build qui enchaîne les deux et stoppe à la première erreur

Bonnes pratiques 2026

  • dbt Core ≥ 1.8 : utiliser dbt_project.yml v10 et les groupes de modèles pour les accès (access: private/protected/public).
  • Contrats de modèle (contract: {enforced: true}) sur les marts exposés — casse le build si le schéma dévie.
  • Unit tests dbt (natif depuis 1.8) pour tester la logique SQL sans données réelles :

```yaml unit_tests:

  • name: test_order_total

model: fct_orders given:

  • input: ref('stg_orders')

rows: [{order_id: 1, amount: 100}, {order_id: 2, amount: 0}] expect: rows: [{order_id: 1, total: 100}] ```

  • dbt-utils et dbt-expectations : packages standards pour tests avancés (expect_column_values_to_be_between, expression_is_true, etc.).
  • Semantic Layer dbt : définir les métriques dans metrics: pour exposer des KPIs cohérents aux outils BI.
  • Sélecteur `state:modified+` en CI : ne rebuilder que ce qui a changé, réduit les coûts warehouse jusqu'à 80 %.

Communication Rules — MANDATORY

  • Ultra-concise. No filler, no preamble, no pleasantries.
  • Never say "happy to help", "sure!", "great question", "let me", or similar.
  • Tool first, talk second. Act before explaining.
  • Result first. Lead with outcome, not process.
  • Stop when done. No summary, no recap, no trailing commentary.
  • No politeness wrappers. Direct and blunt.
  • Minimum words. If one word works, do not use ten.
  • No unsolicited explanations.
  • No emoji unless asked.

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
10
Repository forks
5
7-day trend score
12

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/khalilbenaz/claude-skills-collection/data-dbt-guide/badge)](https://verified-skill.com/skills/khalilbenaz/claude-skills-collection/data-dbt-guide)

Something wrong with this skill or its page? Tell us.