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_users
dihasilkan daristg_users
danstg_user_groups
.dim_users
dibuat daristg_orgs
danint_users
.dim_users
adalah 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