Skip to content

Cum să definești surse de date în dbt cu source()

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn about Cum să definești surse de date în dbt cu source(). We cover key concepts, practical examples, and best practices.

Vei învăța cum să definești și să referențiezi surse de date brute în dbt folosind funcția source(), permițând track-uirea provenienței și monitorizarea prospețimii datelor.

Problema

Tabelele brute din baza de date (raw tables) sunt referențiate direct în SQL cu nume hardcodate. Când structura se schimbă, trebuie actualizat peste tot. dbt oferă source() pentru a abstractiza accesul la datele brute.

Modul Greșit

-- Query hardcodat — numele bazei și schemei sunt fixe
SELECT * FROM production.raw.orders
WHERE order_date >= '2024-01-01';
-- Dacă baza se redenumește, toate query-urile se strică

Modul Corect

# models/sources.yml — definiția sursei
version: 2
sources:
  - name: raw
    database: production
    schema: raw
    tables:
      - name: orders
        description: "Comenzi brute din sistemul ERP"
        columns:
          - name: id
            description: "ID unic comandă"
          - name: status
            description: "Status comandă"
      - name: users
        description: "Utilizatori din sistemul CRM"
-- models/stg_orders.sql — referință prin source()
SELECT
    id,
    user_id,
    total,
    status,
    created_at
FROM {{ source('raw', 'orders') }}
WHERE status IS NOT NULL
dbt run --model stg_orders

Output:

17:23:45  1 of 1 START sql view model stg_orders
17:23:46  1 of 1 OK created sql view model stg_orders

Pas cu Pas

1. Creează fișierul sources.yml

version: 2
sources:
  - name: raw
    database: analytics_db
    schema: raw_data
    tables:
      - name: orders
      - name: users
      - name: products

2. Referențiază sursa în model

SELECT * FROM {{ source('raw', 'orders') }}

3. Configurează freshness

sources:
  - name: raw
    freshness:
      warn_after: {count: 12, period: hour}
      error_after: {count: 24, period: hour}
    loaded_at_field: created_at
    tables:
      - name: orders
dbt source freshness

Sfaturi de Prevenție

  • Definește toate tabelele brute ca surse în YAML
  • Configurează freshness pentru a monitoriza întârzierile
  • Documentează fiecare coloană din sursă
  • Folosește source() în loc de ref() pentru date brute

Greșeli Comune

  1. Nume sursă greșitsource('raws', 'orders') când sursa se numește raw — eroare de compilare
  2. Sursă nedeclarată — folosești source() fără să definești sursa în YAML
  3. Database sau schema incorectă — dbt nu găsește tabela dacă database sau schema din YAML nu corespund
  4. Freshness fără loaded_at_field — dbt nu poate verifica prospețimea fără câmpul de timestamp

Întrebări Frecvente

### Care e diferența între `source()` și `ref()`?

source() referențiază tabele brute din baza de date, definite în sources.yml. ref() referențiază alte modele dbt transformate.

Pot avea mai multe surse în același proiect?

Da — poți defini oricâte surse, fiecare cu nume unic. De exemplu: raw_mysql, raw_postgres, api_data.

Cum fac dacă o sursă nu mai este disponibilă?

dbt semnalează eroare la compilare. Actualizează sources.yml cu noua locație sau dezactivează sursa temporar.

Construit de dezvoltătorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu dbt pentru gestionarea surselor de date.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro