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_customers
raw_orders
raw_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