Apa itu DAG
DAG adalah singkatan dari Directed Acyclic Graph (Graf Asiklik Terarah), sebuah jenis graf dimana node-node saling berhubungan satu sama lain secara terarah dan tidak membentuk sebuah lingkaran tertutup terarah. Sebagai contoh, urutan eksekusi "A -> B -> C" adalah DAG, sementara urutan eksekusi siklik seperti "A -> B -> C -> A" bukanlah DAG.
Dalam konteks pipeline data, DAG digunakan dalam arti bahwa itu adalah representasi grafis dari sekumpulan tugas yang perlu diurutkan, dan membantu untuk memahami ketergantungan di antara model data.
Sebagai contoh, diagram berikut ini adalah DAG.

Dari DAG ini kita bisa melihat yang berikut ini:
int_usersdihasilkan daristg_usersdanstg_user_groups.dim_usersdibuat daristg_orgsdanint_users.dim_usersadalah akhir dari DAG dan dihasilkan dari 4 model yang berbeda.
DAG memungkinkan kita untuk dengan cepat memahami ketergantungan model dan silsilah data.
DAG dalam dbt
Dalam dbt, fungsi ref dapat digunakan untuk membangun model dependensi, atau DAG. Parameter dari ref adalah nama model lain.
Sebagai contoh, misalkan anda ingin membuat DAG berikut ini.

stg_customers.sql dan stg_orders.sql masing-masing adalah sebagai berikut.
select
id as customer_id,
first_name,
last_name
from xxx.raw_customers
select
id as order_id,
user_id as customer_id,
order_date,
status
from xxx.raw_orders
Di customers.sql, gunakan fungsi ref untuk mereferensikan stg_customers dan stg_orders.
with customers as (
select * from {{ ref('stg_customers') }}
),
orders as (
select * from {{ ref('stg_orders') }}
),
customer_orders as (
select
customer_id,
min(order_date) as first_order_date,
max(order_date) as most_recent_order_date,
count(order_id) as number_of_orders
from orders
group by 1
),
final as (
select
customers.customer_id,
customers.first_name,
customers.last_name,
customer_orders.first_order_date,
customer_orders.most_recent_order_date,
coalesce(customer_orders.number_of_orders, 0) as number_of_orders
from customers
left join customer_orders using (customer_id)
)
select * from final
Hal di atas pertama-tama akan menghasilkan stg_customers dan stg_orders. Kemudian customers dibuat, dan stg_customers dan stg_orders direferensikan pada saat itu.
Dengan demikian, dbt dapat dengan mudah mengekspresikan ketergantungan model dengan menggunakan ref.
Referensi