Override merge incremental model ใน dbt

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
    ..

ใครมีวิธีเจ๋งๆ แนะนำกันได้นะครับ :smiley:

3 Likes