Source¶
Source1 adalah bahan mentah pemrosesan yang berasal dari sumber data, dipanggil dalam SQL dengan menggunakan {{source('nama_source', 'nama_table')}}
- HTML for content and structure
- JavaScript for interactivity
- CSS for text running out of boxes
- Internet Explorer ... huh?
-
Set up in 5 minutes
Install
mkdocs-material
withpip
and get up and running in minutes -
It's just Markdown
Focus on your content and generate a responsive and searchable static site
-
Made to measure
Change the colors, fonts, language, icons, logo and more with a few lines
-
Open Source, MIT
Material for MkDocs is licensed under MIT and available on [GitHub]
- Sed sagittis eleifend rutrum
- Donec vitae suscipit est
- Nulla tempor lobortis orci
- Sed sagittis eleifend rutrum
- Donec vitae suscipit est
- Nulla tempor lobortis orci
Method | Description |
---|---|
GET |
Fetch resource |
PUT |
Update resource |
DELETE |
Delete resource |
Image caption
The HTML specification is maintained by the W3C.
Note
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.
Tip
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.
Question
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.
Warning
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.
Quote
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.
Misal kita buat file dalam folder model/<filename>.yml
dengan isi sebagai berikut.
model/filename.yml | |
---|---|
I'm a code annotation! I can contain
code
, formatted text, images, ... basically anything that can be written in Markdown.
Ctrl+Alt+Del
graph LR
A[Start] --> B{Error?};
B -->|Yes| C[Hmm...];
C --> D[Debug];
D --> B;
B ---->|No| E[Yay!];
Artinya kita bisa memanggil table raw.orders
dengan {{ source('jaffle_shop', 'orders')}}
.
Tips: Sources bisa dikumpulkan di satu folder model/sources/*_sources.yml
Tips: Sources bisa dinamakan sources.yml
jika hanya satu source, atau <sesuatu>_sources.yml
. Akan lebih baik jika bisa membedakan dari sistem mana data ini diambil dari namanya.
Tips: Supaya tidak bingung dengan alias source, sebaiknya nama source dinamakan dengan <database>_<schema>
, misal pada contoh di atas menjadi raw_jaffle_shop
Counter Tips: Tapi gimana kalau sumbernya ganti table saja? Seharusnya namanya lebih generic sehingga modular.
Counter Counter Tips: Kalau sumbernya ganti table likely ganti schema juga jadi bakal perlu tetep berubah.
Tips: description diisi oleh engineer somewhere lalu integrated ke sini somehow
Tips: wrap source dengan menggunakan sql query supaya kalau ada perubahan source bisa dihandle di sini. Caranya bikin model yang isinya cuma SELECT * FROM source()
.
Identifier¶
Kalau nama tablenya aneh, kita bisa pakai identifier
sebagai nama table asli, dan name
sebagai alias
Quoting¶
Dalam beberapa kasus, query ke database mewajibkan kita untuk menambahkan quote di dalam query. Contohnya di Snowflake, nama table yang berasal dari reserved words perlu ditambahkan quote. Caranya adalah sebagai berikut.
Testing¶
Source bisa kita cek apakah ada masalah atau tidak dengan kualitas datanya, misal di bawah ini dites apakah id-nya unique dan tidak null.
Running¶
Saat ada data dari sumber yang bermasalah, biasanya kita ingin menjalankan ulang semua pemrosesan yang terkait sumber tersebut. Caranya adalah menggunakan suffix +
. Misal
Freshness¶
Saat memproses data, tentu kita perlu mengecek apakah data yang kita akan proses sudah up-to-date atau belum. Misalkan kita memproses 100 sources, jika satu saja source out-dated, kita perlu memperoses ulang semuanya dan ini akan sangat costly. Maka dari itu, kita bisa menggunakan freshness. Deklarasi freshness menggunakan keyword freshness
untuk konfigurasi seberapa sensitif terhadap ketertinggalan, dan loaded_at_field
sebagai patokan kolom apa yang digunakan untuk mengecek waktu dibandingkan dengan waktu saat dijalankan. Freshness dapat dideklarasikan di level database maupun table. Contoh di bawah ini adalah deklarasi freshness di level table dengan _etl_loaded_at
sebagai kolom untuk mengecek waktu.
Dengan deklarasi di atas, saat kita menjalankan dbt source freshness
atau dbt source freshness --select source:jaffle_shop
misalnya, kita akan mendapatkan status fresheness untuk masing-masing table. Bisa dilihat juga bahwa kita bisa menggunakan filter
untuk memilih kondisi apa yang akan digunakan saat mengecek freshness, dalam contoh di atas hanya yang statusnya completed
saja. Jika ada table yang mau dikecualikan dari freshness, bisa dideklarasikan freshness: null
.
Lalu hasilnya bisa kita gunakan pada command build seperti berikut, misalnya untuk memproses ulang data yang lulus freshness check.
Hasil dari freshneess ini disimpan di target/sources.json
dan bisa dibaca dengan menggunakan script misalnya dengan membaca json dengan python sources[0].status == 'pass'
.
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. ↩