## Contract - Model Contract (သို့) Data Contract လို့လဲ ခေါ်ကြတယ်။ ဘာကြောင့်လဲ ဆိုတော့ dbt model တစ်ခုချင်းဆီမှာ contract ကြေညာရတာကြောင့်မို့လို့။ ပြင်ပ ကမ္ဘာမှာ စာချုပ်ထိုးရသလိုပါပဲ။ - Company တစ်ခုမှာ Data Governance ကို ပြီပြီပြင်ပြင် အကောင်ထည်ဖို့အတွက် [Model Access](https://docs.getdbt.com/docs/mesh/govern/model-access), [Model Contract](https://docs.getdbt.com/docs/mesh/govern/model-contracts), [Model Versions](https://docs.getdbt.com/docs/mesh/govern/model-versions) စတာတွေကို ချိတ်ဆက်ပြီး dbt ပေါ်မှာ အသုံးချလို့ ရပါတယ်။ ဒီနေရာမှာတော့ dbt-core နဲ့ dbt Cloud Enterprise Version အကြားမှာတော့ supporting ပေးတဲ့ functionality တွေ ကွာခြားမှု ရှိပါတယ်။ - Model Contracts ကို အသုံးပြုလို့ ရတဲ့ နေရာတွေက - - SQL Models - အောက် ဖော်ပြထားတဲ့ Materialization တွေ - `table` - `view` - Column names နဲ့ Data types တွေအတွက် အကန့်အသတ်နဲ့ support ပါတယ်။ ဒါပေမယ့် `constraints` တွေအတွက် မပါဘူး။ - `incremental` - `on_schema_change` config မှာ `append_new_columns` (သို့မဟုတ်) `fail` သတ်မှတ်ထားရမယ်။ - `on_schema_change` config မှာ `ignore` (သို့မဟုတ်) `sync_all_columns` သတ်မှတ်ထားတဲ့ models တွေမှာ model contract အသုံးပြုလို့ မရဘူး။ - ဥပမာ -`on_schema_change` config ကို လုံးဝ မကြေညာခဲ့တာ ၊ `on_schema_change: 'ignore'` လို့ သတ်မှတ်လိုက်တယ် ထား။ အဲဒါဆိုရင် column အသစ် တခုကို SQL code ထဲမှာ YAML ထဲမှာရော ရေးထည့်လိုက်တဲ့အခါ dbt က အဲဒီ column အသစ် ကို လျှစ်လျှူရှုလိုက်မှာ (ဆိုလိုတာက ထည့်စဥ်းစားမှာမဟုတ်ဘူး) ။ upsert/merge ကလဲ succeed ဖြစ်သွားမယ်။ ဘာကြောင့်လဲ ဆိုတော့ ရှိပြီးသား destination columns တွေကို ပဲ အခြေခံပြီး အလုပ်လုပ်သွားမှာကြောင့်မို့။ - `on_schema_change: 'sync_all_columns'` အခြေအနေကျပြန်တော့လဲ sync လုပ်တဲ့အခါ ရှိပီးသား columns တွေကို ဖျက်တာမျိုး ရှိရင် အဲဒါက contract ကို ဖေါက်ဖျက်တာပဲ။ columns အသစ်ထပ်ထည့်တာမျိုး အခြေအနေမှာတော့ `append_new_columns` အနေအထားနဲ့ တူတယ် ဆိုပေမယ့် column deleted အခြေအနေမျိုးကြောင့် contract နဲ့ တွဲသုံးမရတာ။ - contracted models တွေနဲ့ အလုပ်လုပ်ရင် Model Version ကိုပါ တွဲသုံးနိုင်ဖို့ လိုတယ်။ မဟုတ်ရင် အောက်မှာ ရေးထားတဲ့ [[#Contracts ပျက်တဲ့အချိန်]] မှာ Error တွေ တက်လာမှာမို့လို့။ - Model Contracts တွေကို ဒီနေရာတွေမှာ အသုံးပြုလို့ မရဘူး - Python Models - `materialized view` သို့ `ephemeral` Materialization ဖြစ်နေတဲ့ SQL Models တွေ - Custom Materialization အသုံးပြုထားတဲ့ SQL Models တွေ - `sources` , `seeds` , `snapshots` စတဲ့ အခြား resource types တွေ ### Contracts ဘယ်လို ကြေညာမလဲ - model အတွက် သုံးတဲ့ `<model_name>.yml` ထဲမှာ ကြေညာလို့ ရ။ ```yaml models: - name: dim_customer config: contract: enforced: true ``` ### Contracts ပျက်တဲ့အချိန် ဘယ်လို အခြေအနေမျိုးတွေမှာ model contracts တွေက Error တက်မလဲ ဆိုတော့ - - ရှိပြီးသား column တခု ကို remove လုပ်လိုက်တဲ့အခါ - ရှိပြီးသား column တခု ရဲ့ data type ကို ပြောင်းလိုက်တဲ့အခါ - ( dbt v1.6 နဲ့ အထက် )ရှိပြီးသား column တခုမှာ ကြေညာထားတဲ့ constraint တခုခု ကို ပြောင်းတာ/ဖျက်တာမျိုး လုပ်တဲ့အခါ -