CommunityRecherche & Datenanalysegithub.com

Unknown-333/dbt-Modelle-erstellen

Baue gut strukturierte dbt-Modelle – Staging/Intermediate/Marts-Ebenen, ref() und source(), Materialisierungen und inkrementelle Modelle mit der richtigen Strategie. Verwende dies beim Erstellen oder Refaktorieren von dbt-Modellen, bei der Auswahl von Tabellen vs. Views vs. inkrementellen Modellen, beim Strukturieren eines dbt-Projekts oder beim Schreiben inkrementeller Logik.

Was ist dbt-Modelle-erstellen?

Diese Fähigkeit ist für Entwickler und Daten-Ingenieure gedacht, die mit dbt (data build tool) arbeiten und qualitativ hochwertige, wartbare SQL-Modelle erstellen möchten. Sie führt durch die Entscheidungen zur Projektstruktur (Staging, Intermediate, Marts), zur Wahl der richtigen Materialisierung (View, Tabelle, inkrementell, ephemeral) und zur Vermeidung typischer Fehler wie hartcodierte Tabellennamen oder fehlende unique_keys bei inkrementellen Modellen. Unterstützt werden alle gängigen dbt-Cloud- und Core-Umgebungen (einschließlich BigQuery, Snowflake, Spark) durch die Erklärung von Mustern und Fallstricken. Die Fähigkeit stellt sicher, dass Modelle den DAG (Directed Acyclic Graph) korrekt aufbauen, über ref()/source() referenzieren und für große Datenmengen optimiert sind – insbesondere durch inkrementelle Strategien wie 'merge' oder 'insert_overwrite'.

Funktioniert mit~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 & Datenanalyse skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

dbt-Modelle erstellen

Wann verwenden

  • Erstellen oder Refaktorieren von .sql-Modellen in einem dbt-Projekt.
  • Entscheidung über die Materialisierung (View / Tabelle / inkrementell / ephemeral).
  • Strukturierung der Ebenen (Staging → Intermediate → Marts).
  • Schreiben von inkrementellen Modellen für große, wachsende Tabellen.
  • NICHT verwenden für das Verfassen von Tests (verwende testing-dbt-projects) oder die Fehlerbehebung von Ausführungen (verwende debugging-dbt-runs).

Arbeitsablauf

- [ ] Platziere das Modell in der richtigen Ebene (Staging/Intermediate/Marts)
- [ ] Referenziere vorgelagerte Modelle nur über ref()/source() – niemals hartcodierte Namen
- [ ] Wähle die Materialisierung basierend auf Größe und Aktualisierungsbedarf
- [ ] Setze bei inkrementellen Modellen unique_key + is_incremental()-Filter
- [ ] Füge einen Schema.yml-Eintrag mit Tests hinzu
  1. Ebene festlegen. staging/ = ein Modell pro Quelltabelle, leichte Umbenennung/Typkonvertierung, materialisiert als Views. intermediate/ = wiederverwendbare Geschäftslogik. marts/ = finale dimensionale Modelle, die von BI konsumiert werden, materialisiert als Tabellen.
  2. Richtig referenzieren. Verwende {{ ref('stg_orders') }} und {{ source('shop', 'orders') }}, damit dbt den DAG erstellt und Umgebungen verwaltet. Schreibe niemals rohe schema.table.
  3. Materialisierung wählen: View (günstig, immer aktuell, klein), Tabelle (schnelles Lesen, wird bei jedem Lauf neu erstellt), inkrementell (große Append-/Update-Tabellen), ephemeral (inline als CTE, kein Objekt).
  4. Inkrementelle Modelle verarbeiten nur neue/geänderte Zeilen.

Muster

Staging-Modell – eines pro Quelle, dünn und konsistent:

-- 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

Inkrementelles Modell – filtere auf neue Zeilen und setze einen idempotenten Merge-Key:

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

select * from {{ ref('stg_orders') }}
{% if is_incremental() %}
  -- nur Zeilen, die neuer sind als bereits geladene, mit einem Lookback für verspätete Daten
  where ordered_at >= (select coalesce(max(ordered_at), '1900-01-01') from {{ this }})
                      - interval '3 days'
{% endif %}

unique_key + merge macht Wiederholungsläufe idempotent; der Lookback fängt verspätet eintreffende Zeilen. Auf BigQuery/Spark bevorzuge insert_overwrite mit einer Datumspartition.

Häufige Fallstricke

  • Hartcodierte Tabellennamen anstelle von ref()/source() – zerstört den DAG, die Linage und den Umgebungswechsel.
  • Inkrementell ohne unique_key – Wiederholungsläufe hängen Duplikate an.
  • max(id)-inkrementeller Filter ohne Lookback – verwirft stillschweigend verspätete Daten.
  • Geschäftslogik im Staging – halte Staging dünn; Joins/Aggregationen gehören in Intermediate/Marts.
  • Alles als table materialisiert – verschwendet Warehouse-Zeit; verwende Views für kleine/günstige Modelle und inkrementelle für große.
  • Ein riesiges Modell – teile es in Intermediate-Schritte auf, um Testbarkeit und Wiederverwendbarkeit zu verbessern.

Referenzen

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.

Verwandte Skills