Snowflake MigrationClickHouse Workshops
ใบงานการวางแผน

ใบงานที่ 5: การออกแบบโมเดล dbt

ตั้งค่า materialization, เอนจิน และกลยุทธ์ incremental ให้แต่ละโมเดล dbt พร้อมผลตรวจทันทีในทุกคำตอบ

เวลาที่ใช้โดยประมาณ: 15–20 นาที เอกสารอ้างอิง: dbt บน ClickHouse

แนวคิด

ใบงานที่ 1–4 ผลิต อะไร: เอนจินไหน, ORDER BY แบบไหน, ชนิดข้อมูล ClickHouse ตัวไหน ใบงานนี้ผลิต อย่างไร: การตัดสินใจเหล่านั้นถูกแสดงออกเป็นคอนฟิก dbt อย่างไร ก่อนที่จะเขียน SQL ใด ๆ

โมเดล dbt-clickhouse มีคอนฟิกสามชั้นที่นักพัฒนา Snowflake ไม่จำเป็นต้องคิดถึง:

  1. Materialization — dbt สร้างอ็อบเจกต์ทางกายภาพแบบไหน (view, table, incremental, ephemeral)?
  2. คอนฟิกเอนจิน — สำหรับโมเดลแบบ table และ incremental ใช้เอนจิน ClickHouse ตัวไหน และคอลัมน์เวอร์ชันไหน?
  3. กลยุทธ์ incremental — สำหรับโมเดล incremental dbt จัดการแถวใหม่/แถวที่อัปเดต อย่างไร?

ยังมีข้อกังวลเรื่องความถูกต้องที่มีเฉพาะกับ ReplacingMergeTree ด้วย:

  1. การวาง FINAL — FINAL ควรอยู่ที่จุดใดใน DAG ของ dbt เพื่อรับประกันการอ่านที่ขจัด ข้อมูลซ้ำแล้ว?

ใช้แผนผังการตัดสินใจนี้สำหรับ materialization:

  • อ่านแบบเขียนเพิ่มเท่านั้นจาก source โดยไม่มีการเขียนลงในโมเดลเอง? → view
  • ตรรกะการ join ล้วน ๆ ไม่ถูกคิวรีโดยตรง? → ephemeral
  • สร้างใหม่ทั้งหมดในทุกการรัน dbt ไม่มีการอัปเดตบางส่วน? → table
  • ประมวลผลเฉพาะแถวใหม่/แถวที่เปลี่ยนแปลงต่อการรัน? → incremental

โมเดล staging เป็น view เสมอ — กฎเดียวกับในใบงานที่ 1 stg_trips และ stg_taxi_zones เป็นการอ่านแบบส่งผ่านที่ไม่มีการเขียนของตัวเอง จึงยังเป็น view ไม่ว่าข้อมูลต้นทางของมันจะทำงานอย่างไร

แบบฝึกหัดที่ 1: การเลือก Materialization

สำหรับแต่ละโมเดล ให้เลือก materialization ของ dbt ที่ถูกต้อง แล้วตอบว่าทำไมในคำถาม ใต้ตาราง

แบบฝึกหัดที่ 2: การตั้งค่าเอนจิน

มีเพียงโมเดลที่ materialization เป็น table หรือ incremental ที่ต้องมีเอนจิน ClickHouse — view และโมเดล ephemeral ไม่มี อ้างอิงคำตอบจากใบงานที่ 1 ของคุณ: คอนฟิกเอนจินของ dbt คือการนำการตัดสินใจเรื่องเอนจินที่คุณทำไว้แล้วที่นั่นไปปฏิบัติ

แบบฝึกหัดที่ 3: การออกแบบกลยุทธ์ incremental

สำหรับแต่ละโมเดล incremental ให้ออกแบบคอนฟิก incremental ทั้งชุด: unique_key, incremental_strategy และตัวกรอง SQL ที่อยู่ภายในบล็อกป้องกัน is_incremental():

{% if is_incremental() %}
  WHERE <your filter here>
{% endif %}

แบบฝึกหัดที่ 4: การวาง FINAL

การขจัดข้อมูลซ้ำของ ReplacingMergeTree เป็นแบบอะซิงโครนัส FINAL บังคับให้เกิดขึ้นตอน อ่าน — แต่การวาง FINAL ในโมเดลที่ผิดมีผลต่อความถูกต้องหรือประสิทธิภาพ สำหรับแต่ละ โมเดลด้านล่าง ให้ตอบว่า FINAL ควรอยู่ใน clause FROM ของโมเดลนั้นเองหรือไม่

Loading worksheet...

ถ่ายลงใน migration-plan.md

เมื่อทำใบงานนี้เสร็จแล้ว ให้กรอกส่วนที่ 10 ของ migration-plan.md ด้วยคำตอบของคุณ และติ๊กช่อง:

- [ ] dbt model design: completed

ในหน้านี้

Track your progress?

Optional. We email a link to confirm your address; progress records once you open it.

Please use your work email address, not a personal one.

Progress tracking also requires accepting the current Terms of Service in Privacy settings.

TH