Construction de modèles dbt

Construisez des modèles dbt bien structurés — couches staging/intermediate/marts, ref() et source(), matérialisations et modèles incrémentaux avec la bonne stratégie. À utiliser lors de la création ou du refactoring de modèles dbt, du choix entre table, vue et incrémental, de la structuration d'un projet dbt ou de l'écriture de logique incrémentale.

Qu'est-ce que Construction de modèles dbt ?

Ce skill guide les développeurs et agents IA dans la création et le refactoring de modèles dbt (data build tool) en suivant les bonnes pratiques de structuration. Il couvre le placement des modèles dans les bonnes couches (staging, intermediate, marts), l'utilisation correcte des macros ref() et source() pour maintenir le DAG et la gestion des environnements, le choix de la matérialisation appropriée (vue, table, incrémental, éphémère) selon les besoins de taille et de rafraîchissement, et l'écriture de modèles incrémentaux avec des stratégies robustes comme unique_key avec merge ou insert_overwrite. Le skill est utile pour tous les utilisateurs d'outils comme Claude Code, Cursor ou Codex qui travaillent avec dbt et souhaitent éviter les pièges courants tels que les noms de tables en dur ou les filtres incrémentaux sans lookback. Il s'applique aussi bien à la création de nouveaux modèles qu'au refactoring de projets existants, en promouvant des modèles testables, réutilisables et efficaces.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Unknown-333/awesome-data-engineering-skills/tree/main/skills/building-dbt-models

Installed? Explore more Recherche et analyse de données skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait Construction de modèles dbt ?

Quand l'utiliser

  • Lors de la création ou du refactoring de modèles .sql dans un projet dbt.
  • Pour choisir la matérialisation (vue / table / incrémental / éphémère).
  • Pour structurer les couches (staging → intermediate → marts).
  • Pour écrire des modèles incrémentaux pour des grandes tables en croissance.
  • Ne PAS utiliser pour la rédaction de tests (utiliser testing-dbt-projects) ni pour les échecs d'exécution (utiliser debugging-dbt-runs).

Flux de travail

- [ ] Placer le modèle dans la bonne couche (staging/intermediate/marts)
- [ ] Référencer les modèles en amont uniquement via ref()/source() — jamais de noms en dur
- [ ] Choisir la matérialisation selon la taille et les besoins de rafraîchissement
- [ ] Pour l'incrémental, définir unique_key + filtre is_incremental()
- [ ] Ajouter une entrée schema.yml avec des tests
  1. Couche. staging/ = un modèle par table source, renommage/typage léger, matérialisé en vues. intermediate/ = logique métier réutilisable. marts/ = modèles dimensionnels finaux consommés par la BI, matérialisés en tables.
  2. Référencer correctement. Utilisez {{ ref('stg_orders') }} et {{ source('shop', 'orders') }} pour que dbt construise le DAG et gère les environnements. N'écrivez jamais de schema.table en dur.
  3. Choisir la matérialisation : vue (peu coûteuse, toujours fraîche, petite), table (lectures rapides, reconstruite à chaque exécution), incrémental (grandes tables d'ajout/mise à jour), éphémère (CTE intégré, sans objet).
  4. Les modèles incrémentaux ne traitent que les lignes nouvelles ou modifiées.

Modèles

Modèle de staging — un par source, léger et cohérent :

-- models/staging/shop/stg_orders.sql
with source as (select * from {{ source('shop', 'orders') }})
select
    order_id,
    customer_id,
    cast(order_ts as timestamp) as ordered_at,
    round(amount_cents / 100.0, 2) as amount
from source

Modèle incrémental — filtrer les nouvelles lignes et définir une clé de fusion idempotente :

{{ config(materialized='incremental', unique_key='order_id',
          incremental_strategy='merge') }}

select * from {{ ref('stg_orders') }}
{% if is_incremental() %}
  -- uniquement les lignes plus récentes que ce qui a déjà été chargé, avec une fenêtre de rattrapage pour les données tardives
  where ordered_at >= (select coalesce(max(ordered_at), '1900-01-01') from {{ this }})
                      - interval '3 jours'
{% endif %}

Le unique_key + merge rend les ré-exécutions idempotentes ; la fenêtre de rattrapage capture les lignes arrivant en retard. Sur BigQuery/Spark, préférez insert_overwrite sur une partition de date.

Pièges courants

  • Noms de tables en dur au lieu de ref()/source() — casse le DAG, la lignée et le changement d'environnement.
  • Incrémental sans unique_key — les ré-exécutions ajoutent des doublons.
  • Filtre incrémental max(id) sans fenêtre de rattrapage — perd silencieusement les données tardives.
  • Logique métier dans le staging — gardez le staging léger ; les jointures/agrégations appartiennent à intermediate/marts.
  • Tout matérialisé en table — gaspille du temps d'entrepôt ; utilisez des vues pour les modèles petits/peu coûteux et l'incrémental pour les grands.
  • Un modèle géant — divisez en étapes intermédiaires pour la testabilité et la réutilisation.

Références

Individual skills in this repo

This repo contains 9 individual skills — each has its own dedicated page.

Unknown-333/authoring-airflow-dags

Write production-grade Apache Airflow DAGs using the TaskFlow API — idempotent tasks, correct scheduling and catchup, retries/SLAs, connections/variables, and avoiding top-level code. Use when creating or reviewing Airflow DAGs, scheduling pipelines, wiring task dependencies, configuring retries/backfills, or fixing non-idempotent tasks.

Unknown-333/building-dagster-assets

Build Dagster pipelines using software-defined assets — asset dependencies, partitions, resources and IO managers, asset checks, and schedules/sensors. Use when creating Dagster assets or jobs, modeling data as assets, adding partitions or backfills, wiring resources/IO managers, or migrating from task-based orchestration to assets.

Unknown-333/building-feature-pipelines

Build ML feature pipelines and feature stores — point-in-time-correct joins to avoid label leakage, offline/online parity, feature freshness and backfills, and materialization with tools like Feast. Use when engineering features for ML, preventing train/serve skew or data leakage, building a feature store, or backfilling historical features for training.

Unknown-333/building-iceberg-tables

Design and operate Apache Iceberg tables — partitioning and hidden partitioning, partition/schema evolution, snapshots and time travel, compaction and small-file cleanup, and MERGE/upsert for lakehouse tables on Spark, Flink, Trino, or Snowflake. Use when creating or maintaining Iceberg tables, choosing partitioning, evolving schema/partitions, or fixing small-file and metadata bloat.

Unknown-333/building-ingestion-pipelines

Build batch and incremental data ingestion (extract-load) pipelines — full vs incremental extraction, change data capture (CDC), watermarks and high-water marks, API pagination and rate limits, and choosing managed EL tools (Fivetran, Airbyte) vs custom code. Use when ingesting data from databases, APIs, files, or SaaS into a warehouse/lake, or designing incremental extraction and CDC.

Unknown-333/building-kafka-consumers

Build reliable Apache Kafka consumers and producers — consumer groups and partition assignment, offset commit strategy, at-least-once vs exactly-once, idempotent/transactional producers, rebalancing, and dead-letter handling. Use when writing Kafka consumers/producers, configuring offset commits or consumer groups, tuning throughput, or handling rebalances and poison messages.

Unknown-333/debugging-data-pipelines

Systematically root-cause data pipeline failures and data incidents — job errors, wrong or missing data, duplicates, and freshness misses — by tracing lineage upstream, isolating the failing stage, reconciling against source, and planning a safe fix and backfill. Use when a pipeline fails, numbers look wrong, data is missing or duplicated, a dashboard is stale, or a stakeholder reports a data discrepancy.

Unknown-333/designing-backfills-and-replays

Plan and run safe data backfills and replays — idempotent reprocessing of historical windows, partition-by-partition execution, isolating backfill compute from production, verifying results, and avoiding double-counting or changed history. Use when backfilling a new or fixed model, reprocessing after a bug, replaying events, or loading history for a new pipeline without corrupting existing data.

Unknown-333/designing-data-contracts

Define and enforce data contracts between producers and consumers — explicit schema, semantics, ownership, SLAs, and versioning — to prevent silent upstream changes from breaking downstream pipelines. Use when a producer schema change could break consumers, defining an interface between teams/services and the warehouse, or adding schema enforcement at ingestion.

Skills associés