Traffine I/O

Bahasa Indonesia

2022-12-30

dbt Sources

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

Jika Anda ingin menggunakan data mentah di dataset jaffle_shop sebagai Source, tuliskan yang berikut ini.

models/<filename>.yml
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.

models/orders.sql
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.

models/<filename>.yml
  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.

models/<filename>.yml
  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

https://docs.getdbt.com/docs/build/sources

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!