dbt incremental models
แบบไวๆ เป็นการ insert หรือ update ข้อมูลจาก source table ไปที่ target table
แบบยาวๆ Configuring incremental models | dbt Docs (getdbt.com)
ในตัวอย่างนี้จะทำการ override get_merge_sql
ของ dbt ที่เป็น built-in macro
ซึ่งเป็น macro ที่จะสร้าง merge query ขึ้นมาโดยจะมี 2 ส่วนที่ทำการ update ข้อมูลคือ
- จะ insert ถ้ามี
unique_key
ไม่ตรงกันกับ target table - จะ update ถ้า
unique_key
ตรงกันกับ target table
ถ้าสั่ง dbt run ก่อนที่จะ override จะมีหน้าตา sql ประมาณแบบนี้
merge into ......
.
.
.
when match then update set
..
when not match then insert
....
วิธีการ override
สร้างไฟล์ get_merge_sql.sql
ที่ {projects}/macros/
ชื่อไฟล์ตั้งว่าอะไรก็ได้ แต่ชื่อ macro ต้องตรงกับที่จะ override
โดยชื่อ macro ที่จะ override ชื่อว่า default__get_merge_sql
ในไฟล์ get_merge_sql.sql
เขียน marcro ไว้แบบนี้ สิ่งที่ต่างจากของเดิมคือได้ลองลบตรง insert ไปจะเหลือแต่ที่ update
ถ้าสั่ง dbt run จะมีหน้าตา sql ประมาณแบบนี้
merge into ......
.
.
.
when match then update set
..
ใครมีวิธีเจ๋งๆ แนะนำกันได้นะครับ