Traffine I/O

Bahasa Indonesia

2022-12-30

Mendesain Pipa Transformasi Data dengan dbt

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:

models/sources.yml
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:

models/staging/stg_my_table.sql
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:

models/marts/dim_customer.sql
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:

models/marts/fct_sales.sql
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

https://github.com/dbt-labs/corp/blob/main/dbt_style_guide.md
https://discourse.getdbt.com/t/how-we-used-to-structure-our-dbt-projects/355
https://docs.getdbt.com/faqs/project/example-projects
https://github.com/flexanalytics/dbt-business-intelligence

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!