Apa itu Source dalam dbt
Dalam dbt, Source adalah data mentah dalam DWH. dbt menyediakan fungsi-fungsi berikut untuk menangani Source:
- Memberi nama Source dan merujuknya dari sebuah model.
- Menguji data dalam sebuah Source.
- Memeriksa kesegaran data dalam sebuah Source.
Mendeklarasikan Source
Tempatkan file-file .yml yang dinamai sembarang di direktori yang dideklarasikan di model-paths dari dbt_project.yml.
Misalkan Anda memiliki data mentah berikut di BigQuery:
- ID Proyek:
proyek_saya - Dataset:
jaffle_shop- Tabel:
raw_customersraw_ordersraw_payments
- Tabel:
Jika Anda ingin menggunakan data mentah di dataset jaffle_shop sebagai Source, tuliskan yang berikut ini.
version: 2
sources:
- name: jaffle ## Any name
database: my_project
schema: jaffle_shop
tables:
- name: raw_customers
- name: raw_orders
- name: raw_payments
Gunakan Source
Source yang dideklarasikan dapat direferensikan dari model. Contoh berikut mereferensikan tabel raw_orders dan raw_customers dari Source yang dideklarasikan sebagai jaffle.
SELECT
*
FROM {{ source('jaffle', 'raw_orders') }}
LEFT JOIN {{ source('jaffle', 'raw_customers') }} USING (customer_id)
dbt mengkompilasi secara internal sebagai berikut.
SELECT
*
FROM jaffle.jaffle_shop.raw_orders
LEFT JOIN jaffle.jaffle_shop.raw_customers USING (customer_id)
Uji Source
Anda dapat menguji Source Anda dengan menulis berikut ini dan menjalankan dbt test.
version: 2
sources:
- name: jaffle
database: my_project
schema: jaffle_shop
tables:
- name: raw_customers
+ columns:
+ - name: id
+ tests:
+ - unique
+ - not_null
- name: raw_orders
+ columns:
+ - name: id
+ tests:
+ - unique
- name: raw_payments
Periksa kesegaran Source
Anda dapat memeriksa kesegaran Source dengan menulis tentang loaded_at_field dan freshness.
version: 2
sources:
- name: jaffle
database: my_project
schema: jaffle_shop
+ freshness: # default freshness
+ warn_after: {count: 12, period: hour}
+ error_after: {count: 24, period: hour}
+ loaded_at_field: _etl_loaded_at
tables:
- name: raw_customers # this will use the freshness defined above
- name: raw_orders
+ freshness: # make this a little more strict
+ warn_after: {count: 6, period: hour}
+ error_after: {count: 12, period: hour}
- name: raw_payments
+ freshness: null # do not check freshness for this table
loaded_at_field adalah kolom data waktu yang akan digunakan dalam perhitungan kesegaran. dbt memeriksa kesegaran data dengan mengambil nilai MAX dari kolom yang ditentukan dan mengukur perbedaan dari waktu saat ini. Namun, waktu harus dalam timestamp dan UTC. Jika tidak, Anda perlu menulis kueri untuk mengubah waktu sebagai berikut.
loaded_at_field: "convert_timezone('UTC', 'Asia/Tokyo', _etl_loaded_at)"
Parameter freshness mendefinisikan peringatan atau kesalahan tentang perbedaan antara waktu saat ini dan waktu data. Sebagai contoh, warn_after: {count: 12, periode: jam} berarti memperingatkan jika data terbaru lebih dari 12 jam di belakang waktu saat ini.
Anda dapat menjalankan dbt source freshness untuk mengukur kesegaran Source Anda.
$ dbt source freshness
Running with dbt=0.18.1
Found 5 models, 11 tests, 0 snapshots, 0 analyses, 155 macros, 0 operations, 0 seed files, 2 sources
20:35:05 | Concurrency: 4 threads (target='learn')
20:35:05 |
20:35:06 | 1 of 1 START freshness of jaffle.raw_orders........................... [RUN]
20:35:09 | 1 of 1 WARN freshness of jaffle.raw_orders............................ [WARN in 3.98s]
20:35:09 | Done.
Karena WARN ditampilkan, itu berarti bahwa tingkat kesegaran yang ditentukan oleh warn_after telah terlampaui, yaitu, lebih dari 6 jam telah berlalu sejak waktu saat ini (waktu eksekusi perintah). Perhatikan bahwa PASSS akan ditampilkan jika tidak ada masalah kesegaran, dan ERROR STALE akan ditampilkan jika error_after diterapkan.
Referensi