DAG とは
DAGとは、Directed Acyclic Graphの略で、ノードが互いに方向性を持って関連し、方向性のある閉ループを形成しないグラフの一種です。例えば、「A -> B -> C」という実行順序はDAGであり、「A -> B -> C -> A」というような巡回する実行順序はDAGでありません。
データパイプラインの文脈においては、DAGは順序付けする必要があるタスクの集合を図示したものという意味合いで使われ、データモデル間の依存関係を理解するのに役立ちます。
例えば次のような図がDAGになります。
このDAGから次のことが分かります。
int_users
はstg_users
とstg_user_groups
から生成されるdim_users
はstg_orgs
とint_users
から生成されるdim_users
はDAGの末端であり、4つの異なるモデルから生成される
DAGを見ればすぐにモデルの依存関係とデータの系統を理解することができます。
dbt における DAG
dbtではref
関数を使うことでモデル間の依存関係、つまりはDAGを構築することができます。ref
の引数には他のモデルの名前を使います。
例えば次のようなDAGを構築したいとします。
stg_customers.sql
とstg_orders.sql
はそれぞれ次のようになっています。
models/stg_customers.sql
select
id as customer_id,
first_name,
last_name
from xxx.raw_customers
models/stg_orders.sql
select
id as order_id,
user_id as customer_id,
order_date,
status
from xxx.raw_orders
customers.sql
ではref
関数を使い、stg_customers
とstg_orders
を参照します。
models/customers.sql
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
上記のように記述すると、まずはstg_customers
とstg_orders
が生成されます。そしてcustomers
が生成され、そのときにstg_customers
とstg_orders
が参照されます。
このように、dbtではref
を使うことで簡単にモデルの依存関係を表現することができます。
参考
AlloyDB
Amazon Cognito
Amazon EC2
Amazon ECS
Amazon QuickSight
Amazon RDS
Amazon Redshift
Amazon S3
API
Autonomous Vehicle
AWS
AWS API Gateway
AWS Chalice
AWS Control Tower
AWS IAM
AWS Lambda
AWS VPC
BERT
BigQuery
Causal Inference
ChatGPT
Chrome Extension
CircleCI
Classification
Cloud Functions
Cloud IAM
Cloud Run
Cloud Storage
Clustering
CSS
Data Engineering
Data Modeling
Database
dbt
Decision Tree
Deep Learning
Descriptive Statistics
Differential Equation
Dimensionality Reduction
Discrete Choice Model
Docker
Economics
FastAPI
Firebase
GIS
git
GitHub
GitHub Actions
Google
Google Cloud
Google Search Console
Hugging Face
Hypothesis Testing
Inferential Statistics
Interval Estimation
JavaScript
Jinja
Kedro
Kubernetes
LightGBM
Linux
LLM
Mac
Machine Learning
Macroeconomics
Marketing
Mathematical Model
Meltano
MLflow
MLOps
MySQL
NextJS
NLP
Nodejs
NoSQL
ONNX
OpenAI
Optimization Problem
Optuna
Pandas
Pinecone
PostGIS
PostgreSQL
Probability Distribution
Product
Project
Psychology
Python
PyTorch
QGIS
R
ReactJS
Regression
Rideshare
SEO
Singer
sklearn
Slack
Snowflake
Software Development
SQL
Statistical Model
Statistics
Streamlit
Tabular
Tailwind CSS
TensorFlow
Terraform
Transportation
TypeScript
Urban Planning
Vector Database
Vertex AI
VSCode
XGBoost