iT邦幫忙

2023 iThome 鐵人賽

DAY 11
1
  • dbt test 基本介紹

前面的 dbt 核心功能指令有哪些? 要怎麼使用? 提到 dbt test 的基本功能,用於確保 data transformation 的資料正確性和一致性,通常搭配在 dbt run 前後使用

  • dbt test 為何重要?

dbt test 是我認爲 dbt 中僅次於 dbt run 的功能,因為就算 dbt 其他功能設計得多方便,你的資料要是不正確,最終也無法使用徒勞無功,所以你需要 dbt test 幫你完成資料產品的品質把關工作

  • dbt test 的種類及用法
    dbt test 的所有功能及用法官方文件都有提到,不會詳細介紹,本篇會偏重使用情境及延伸應用
    大家可以想其實 dbt test 使用方式和 dbt run 類似,只是不一定要寫 model.sql,所有設定也在 dbt_project.yml & schema.yml 完成
    • 種類

      • Singular tests
      -- Refunds have a negative amount, so the total amount should always be >= 0.
      -- Therefore return records where this isn't true to make the test fail
      select
          order_id,
          sum(amount) as total_amount
      from {{ ref('fct_payments' )}}
      group by 1
      having not(total_amount >= 0)
      

      Singular test 如上範例就是寫一個專用的 test query ,若出現結果就是 test fail。這樣寫法優點就是很彈性,想 test 什麼都可以,但缺點是若你的 test 項目很單純, e.g. unique, not null,而且共 10個 model 和 source 會用到,你要寫 10 次這樣的 test query,會很繁瑣且難維護。因此有 Generic tests 的產生

      • Generic tests
      {% test not_null(model, column_name) %}
      
          select *
          from {{ model }}
          where {{ column_name }} is null
      
      {% endtest %}
      

      generic test 可以讓你只要寫一次 test query,之後彈性的讓 model & column 重複使用

      不過 dbt 已經預設的4 個 test,而且周邊也有很多 package 讓你不用自己寫上面的 generic 語法 ,像是官方的 uniquenot_nullaccepted_values and relationships 4個基本 test,只要如下方 yaml,把 test 名字寫在 tests 下方即可
      ps: dbt 各種設定要寫在哪,怎麼寫? 提到設定項目的位置,因為 test 是屬於 properties,自定義 model & column 各種屬性,所以我們建議 test 都寫在 schema.yml 下

      version: 2
      
      models:
        - name: orders
          columns:
            - name: order_id
              tests:
                - unique
                - not_null
      					- dbt_utils.at_least_one
      

      如果這四個 test 還不夠,dbt-utils, dbt-expectation, elementary 的 dbt 周邊 package 也有各種 test 可以使用,安裝好後,如上方紅字一樣加上你想要的 test 就好,更多 package 介紹可以參考下篇

      如果以上 package 的 test 都不夠,需要自己寫 generic test,可以參考官方 Writing custom generic tests 內容


上一篇
dbt 指令的參數介紹(下)-如何透過 dbt 變數區分測試環境
下一篇
data quality 系列 - dbt test 常用的 package: dbt.utils 介紹
系列文
如何借助 dbt 優化當代資料倉儲及資料工程師的水肥之路分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言