Cum să creezi modele efemere (CTE) în dbt
DodaTech
Updated 2025-01-15
2 min read
In this tutorial, you'll learn about Cum să creezi modele efemere (CTE) în dbt. We cover key concepts, practical examples, and best practices.
Vei învăța cum să creezi modele efemere (ephemeral) în dbt — modele care devin CTE-uri în query-urile modelelor dependente, fără a ocupa spațiu în baza de date.
Problema
Transformările intermediare repetate în mai multe modele duc la duplicarea codului SQL. Modelele efemere rezolvă această problemă ca CTE-uri reutilizabile fără stocare fizică.
Modul Greșit
-- models/order_summary.sql — CTE duplicat în mai multe modele
WITH cleaned_orders AS (
SELECT * FROM orders WHERE status IS NOT NULL
)
SELECT user_id, COUNT(*) FROM cleaned_orders GROUP BY user_id;
-- models/user_metrics.sql — același CTE copiat
WITH cleaned_orders AS ( -- Duplicat!
SELECT * FROM orders WHERE status IS NOT NULL
)
SELECT user_id, SUM(total) FROM cleaned_orders GROUP BY user_id;
Modul Corect
-- models/cleaned_orders.sql — model efemer
{{ config(materialized='ephemeral') }}
SELECT *
FROM {{ source('raw', 'orders') }}
WHERE status IS NOT NULL
AND total > 0
-- models/order_summary.sql — reutilizare
SELECT
user_id,
COUNT(*) AS order_count
FROM {{ ref('cleaned_orders') }}
GROUP BY user_id
-- models/user_metrics.sql — reutilizare același CTE
SELECT
user_id,
SUM(total) AS total_revenue
FROM {{ ref('cleaned_orders') }}
GROUP BY user_id
dbt compile --model order_summary
Output compilat (SQL generat):
-- target/compiled/order_summary.sql
WITH cleaned_orders AS (
SELECT * FROM raw.orders
WHERE status IS NOT NULL AND total > 0
)
SELECT
user_id,
COUNT(*) AS order_count
FROM cleaned_orders
GROUP BY user_id;
Pas cu Pas
1. Configurează materializarea ephemeral
{{ config(materialized='ephemeral') }}
SELECT ... FROM {{ source('raw', 'table') }}
2. Referențiază modelul efemer
SELECT * FROM {{ ref('cleaned_orders') }}
3. Rulează modelul părinte
dbt run --model order_summary
# cleaned_orders nu se execută separat — devine CTE în order_summary
Sfaturi de Prevenție
- Folosește ephemeral pentru transformări simple și reutilizabile
- Nu folosi ephemeral pentru modele referențiate de multe ori — CTE-ul se duplică în fiecare model părinte
- Testează modelul ephemeral ca view în dezvoltare, apoi treci la ephemeral
- Documentează modelele efemere ca atare
Greșeli Comune
- Ephemeral referențiat de prea multe modele — CTE-ul e duplicat, codul devine greu de citit
- Teste pe modele efemere — nu poți rula
dbt testdirect pe un model ephemeral - Ref() către ephemeral din afara proiectului — cross-project ref nu suportă ephemeral
- Ephemeral prea complex — CTE-uri greu de citit și de depanat
Întrebări Frecvente
Construit de dezvoltătorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu dbt pentru modele efemere eficiente.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro