## 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 တခုခု ကို ပြောင်းတာ/ဖျက်တာမျိုး လုပ်တဲ့အခါ
-