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.
fitur dbt
dbt memiliki fitur-fitur utama berikut ini:
- Berbasis SQL
dbt menggunakan SQLSELECT
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
.
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.
models:
+ jaffle_shop:
+ +materialized: table
- example:
- +materialized: view
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