Traffine I/O

Bahasa Indonesia

2022-12-30

Apa itu dbt

Apa itu dbt

dbt adalah alat yang menangani T ELT (Extract, Load, Transform). dbt hanya melakukan transformasi data, dan mengasumsikan bahwa data telah dimuat ke data warehouse (DWH) seperti Amazon Redshift, Google BigQuery, atau Snowflake. Dengan kata lain, dbt adalah alat yang memproses data yang disimpan di DWH dan menulis hasil olahan kembali ke DWH.

dbt in ELT
What, exactly, is dbt?

fitur dbt

dbt memiliki fitur-fitur utama berikut ini:

  • Berbasis SQL
    dbt menggunakan SQL SELECT untuk menggambarkan proses transformasi data.
  • Pemrosesan kueri lanjutan oleh Jinja
    dbt memungkinkan penggunaan Jinja, sebuah bahasa template ringan, dalam SQL. Hal ini memungkinkan Anda untuk menggunakan konstruksi kontrol seperti if dan for dalam SQL Anda, dan untuk memodularisasi pemrosesan Anda.
  • Dokumentasi
    dbt dapat mengetahui ketergantungan antara model-model yang dideskripsikan dalam SQL dan secara otomatis menghasilkan dokumentasi termasuk skema dan silsilah data untuk setiap model.
  • Pengujian
    dbt dapat memeriksa data untuk NULL dan integritas referensial.

Cara menggunakan dbt

dbt dapat digunakan dalam dua cara berikut:

  • dbt Core (OSS)
  • dbt Cloud (SaaS)

dbt Core adalah OSS dan dapat digunakan secara gratis. Sebaliknya, dbt Cloud adalah SaaS dan dikelola. dbt Cloud gratis untuk satu pengguna, tetapi ada biaya untuk beberapa pengguna.

dbt Cloud memiliki fitur-fitur berikut selain fitur dbt Core:

  • Fungsi pengembangan
    IDE disediakan untuk memungkinkan pengembangan berbasis dbt pada satu layar.
  • Notifikasi
    Konektivitas ke Slack dan layanan jejaring sosial lainnya.
  • Manajemen pekerjaan
    Fungsi untuk mengatur pekerjaan dan mengeksekusinya secara terjadwal disediakan.
  • ** Manajemen variabel lingkungan**
    Memungkinkan Anda mengelola pengaturan dan variabel untuk setiap lingkungan.
  • Manajemen kode sumber
    Repositori git untuk mengelola kode dbt disediakan secara default, sehingga Anda dapat memulai tanpa GitHub, dll.

Tutorial dbt Core

Mari kita coba memproses data BigQuery menggunakan dbt Core: Misalkan Anda memiliki dataset di BigQuery untuk situs EC fiktif bernama jaffle_shop. Dataset berisi tabel-tabel berikut

  • raw_customers
  • raw_orders
  • raw_payments

Membuat proyek

Pertama, mari kita install dbt Core. dbt Core dapat diinstall dengan 4 cara berikut ini.

  • Menggunakan Homebrew
  • Menggunakan pip
  • Menggunakan image Docker
  • Menggunakan kode sumber Github

Kali ini, kita akan menginstal dbt Core yang diinstal oleh pip.

$ mkdir dbt-projects && cd dbt-projects
$ python -m venv venv
$ source venv/bin/activate
$ pip install --upgrade pip

$ pip install dbt-bigquery

Periksa versi dbt.

$ dbt --version

Core:
  - installed: 1.3.1
  - latest:    1.3.1 - Up to date!

Plugins:
  - bigquery: 1.3.0 - Up to date!

Buat sebuah proyek bernama jaffle_shop. Kita akan diberikan pertanyaan secara interaktif.

$ dbt init jaffle_shop

04:58:32  Running with dbt=1.3.1

Which database would you like to use?
[1] bigquery
(Don't see the one you want? https://docs.getdbt.com/docs/available-adapters)

Enter a number: 1

[1] oauth
[2] service_account

Desired authentication method option (enter a number): 2

keyfile (/path/to/bigquery/keyfile.json): </PATH/TO/YOUR CLIENT SECRET FILE> (e.g., /Users/BBaggins/.dbt/dbt-tutorial-project-331118.json)

project (GCP project id): <PROJECT ID>

dataset (the name of your dbt dataset): jaffle_shop

threads (1 or more): 1

job_execution_timeout_seconds [300]: 300

[1] US
[2] EU
Desired location option (enter a number): 1

04:59:32  Profile jaffle_shop written to /Users/xxx/.dbt/profiles.yml using target's profile_template.yml and your supplied values. Run 'dbt debug' to validate the connection.
04:59:32
Your new dbt project "jaffle_shop" was created!

For more information on how to configure the profiles.yml file,
please consult the dbt documentation here:

  https://docs.getdbt.com/docs/configure-your-profile

One more thing:

Need help? Don't hesitate to reach out to us via GitHub issues or on Slack:

  https://community.getdbt.com/

Happy modeling!

Proyek ini dibuat sebagai berikut.

.
├── jaffle_shop
│   ├── README.md
│   ├── analyses
│   ├── dbt_project.yml
│   ├── macros
│   ├── models
│   │   └── example
│   │       ├── my_first_dbt_model.sql
│   │       ├── my_second_dbt_model.sql
│   │       └── schema.yml
│   ├── seeds
│   ├── snapshots
│   └── tests
└── logs
    └── dbt.log

Juga, file yaml telah dibuat di ~/.dbt/profiles.yml.

$ cat ~/.dbt/profiles.yml

jaffle_shop:
  outputs:
    dev:
      dataset: jaffle_shop
      job_execution_timeout_seconds: 300
      job_retries: 1
      keyfile: <PATH TO CLIENT SECRET FILE>
      location: US
      method: service-account
      priority: interactive
      project: <PROJECT ID>
      threads: 1
      type: bigquery
  target: dev

Anda dapat memeriksa koneksi ke BigQuery dengan perintah berikut.

$ dbt debug

Connection test: [OK connection ok]

Pemodelan

Mari kita buat file bernama customers.sql di direktori models. Kemudian masukkan SQL berikut ini ke dalam file customers.sql.

/models/customers.sql
with customers as (
    select
        id as customer_id,
        first_name,
        last_name
    from jaffle_shop.raw_customers
),
orders as (
    select
        id as order_id,
        user_id as customer_id,
        order_date,
        status
    from jaffle_shop.raw_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

Hapus folder /models/example dan edit models di dbt_project.yml sebagai berikut.

dbt_project.yml
 models:
+  jaffle_shop:
+      +materialized: table
-    example:
-      +materialized: view
dbt_project.yml
models:
  jaffle_shop:
    +materialized: table

Direktori akan terlihat seperti ini.

.
├── jaffle_shop
│   ├── README.md
│   ├── analyses
│   ├── dbt_project.yml
│   ├── macros
│   ├── models
│   │   └── customers.sql
│   ├── seeds
│   ├── snapshots
│   └── tests
└── logs
    └── dbt.log

Perintah dbt run membuat tabel di BigQuery dari file .sql di bawah direktori /models.

$ dbt run

Ini akan membuat tabel customers di dataset BigQuery jaffle_shop.

Referensi

https://www.getdbt.com/
https://docs.getdbt.com/docs/get-started/getting-started/overview
https://www.getdbt.com/blog/what-exactly-is-dbt/

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!