Pendahuluan
Transformasi data adalah proses penting dalam pipeline data, dan dbt (data build tool) adalah solusi yang semakin populer untuk mengelola transformasi ini. Artikel ini akan memberi Anda pemahaman menyeluruh tentang cara mengatur proyek dbt secara efektif. Kita akan membahas sumber, model staging, dan model marts, masing-masing dengan contoh untuk membantu Anda memulai.
Definisi Sumber
Sumber adalah data mentah yang akan Anda gunakan dalam proyek dbt Anda. Mereka mewakili tabel dan tampilan dalam database Anda.
Mengidentifikasi Sumber Data
Sebelum mengonfigurasi sumber di dbt, Anda perlu mengidentifikasi tabel dan tampilan di database Anda yang akan Anda gunakan untuk proyek Anda.
Mengonfigurasi Source YAML
Di proyek dbt Anda, buat file sources.yml
di dalam folder models
. File ini akan menentukan sumber dan konfigurasinya.
Contoh: Menyiapkan Sumber:
Untuk menyiapkan sumber, tambahkan konfigurasi berikut ke file sources.yml
Anda:
version: 2
sources:
- name: my_source
database: my_database
schema: my_schema
tables: - name: my_table
Membangun Model Staging
Model staging adalah tahap pertama transformasi di dbt. Mereka menyediakan antarmuka yang konsisten untuk data mentah, memungkinkan Anda membersihkan dan standarisasi data.
Tujuan Model Staging
Model staging berfungsi sebagai jembatan antara data mentah dan transformasi yang spesifik untuk bisnis. Mereka memungkinkan Anda menerapkan pembersihan dan standarisasi data dasar sebelum beralih ke transformasi yang lebih kompleks.
Menamai dan Mengorganisir Model Staging
Model staging harus dinamai stg_
diikuti oleh nama sumber. Organisir di dalam folder bernama staging dalam folder models
Anda.
Contoh: Membuat Model Staging
Untuk membuat model staging untuk sumber my_table
, buat file bernama stg_my_table.sql
di folder staging
dengan konten berikut:
SELECT
column1,
column2,
...
FROM {{ source('my_source', 'my_table') }}
Merancang Model Marts
Model Marts adalah tahap akhir dari pipeline transformasi data Anda. Mereka membuat dataset yang diagregasi dan disederhanakan yang disesuaikan dengan kebutuhan kasus bisnis tertentu.
Memahami Model Marts
Model Marts mewakili output akhir dari proyek dbt Anda. Mereka mengubah data menjadi format yang dapat dengan mudah dikonsumsi oleh analis, ilmuwan data, dan stakeholder lainnya.
Jenis Model Marts
Model Marts dapat dikelompokkan menjadi dua jenis utama: model dimensi dan model fakta. Model dimensi, direpresentasikan dengan awalan dim_
dalam konvensi penamaan, membuat skema untuk data warehouse Anda dengan mengorganisasi atribut deskriptif. Model fakta, direpresentasikan dengan awalan fct_
dalam konvensi penamaan, menyimpan data kuantitatif dan mewakili indikator kinerja utama atau pengukuran yang penting.
Contoh: Implementasi Model Marts
Untuk membuat model dimensi dan fakta marts, pastikan Anda memiliki folder bernama marts
di dalam folder models
Anda.
Untuk model dimensi, buat file bernama dim_customer.sql
di dalam folder marts
dengan konten berikut:
SELECT
customer_id,
first_name,
last_name,
email,
...
FROM {{ ref('stg_customers') }}
Contoh ini menunjukkan cara membuat model dimensi untuk data pelanggan menggunakan model staging stg_customers
.
Untuk model fakta, buat file bernama fct_sales.sql
di dalam folder marts
dengan konten berikut:
WITH sales_data AS (
SELECT
order_id,
customer_id,
product_id,
SUM(quantity) AS total_quantity,
SUM(price) AS total_price,
...
FROM {{ ref('stg_orders') }}
GROUP BY order_id, customer_id, product_id
)
SELECT
order_id,
customer_id,
product_id,
total_quantity,
total_price,
...
FROM sales_data
Contoh ini menunjukkan cara membuat model fakta yang mengagregasi data penjualan dari model staging stg_orders
.
Contoh Direktori Models
Artikel memperkenalkan struktur direktori berdasarkan contoh rekaman pembayaran yang dimuat ke dalam data warehouse menggunakan API Stripe.
├── dbt_project.yml
└── models
├── marts
│ ├── core
│ │ ├── core.yml
│ │ ├── dim_customers.sql
│ │ ├── fct_orders.sql
│ ├── finance
│ ├── marketing
│ └── product
└── staging
└── stripe
├── src_stripe.yml
├── stg_stripe.yml
├── stg_stripe__customers.sql
└── stg_stripe__invoices.sql
Referensi