ใบงานที่ 4: แผนระลอกการย้ายระบบ
จัดลำดับอ็อบเจกต์ NYC Taxi สิบรายการเป็นระลอกการย้ายระบบ และให้เกรดความซับซ้อนของแต่ละรายการ พร้อมผลตรวจทันทีในทุกคำตอบ
เวลาที่ใช้โดยประมาณ: 15–20 นาที เอกสารอ้างอิง: โมดูล 03 — จัดเตรียมและย้ายข้อมูล → โมดูล 04 — สร้างไปป์ไลน์ dbt ขึ้นใหม่ → โมดูล 05 — เบนช์มาร์กและตัดสวิตช์ สำหรับลำดับการดำเนินการ
แนวคิด
อ็อบเจกต์ในฐานข้อมูลมี dependency view ที่คิวรี fact_trips ไม่สามารถสร้างได้ก่อนที่
fact_trips จะมีอยู่ materialized view ที่อ่านจาก trips_raw ไม่สามารถถูกเติมข้อมูลได้
ก่อนที่ trips_raw จะมีข้อมูล การย้ายข้อมูลผิดลำดับทำให้การสร้างตารางล้มเหลว
ได้ผลลัพธ์ว่างเปล่า หรือได้ข้อมูลไม่ครบซึ่งวินิจฉัยยาก
ทางออก: การวางแผนระลอก จัดทุกอ็อบเจกต์ลงในระลอกที่มีหมายเลข โดยแต่ละระลอกบรรจุ เฉพาะอ็อบเจกต์ที่ dependency ของมันถูกเติมเต็มโดยระลอกก่อนหน้าแล้ว
การให้เกรดความซับซ้อน ช่วยจัดลำดับความสำคัญของแรงที่ต้องลงในการย้ายระบบ เส้นแบ่งระหว่าง B กับ C คือว่า คำสั่ง ต้องถูกปรับโครงสร้างใหม่ หรือเพียงเปลี่ยนชนิดข้อมูลใหม่:
- เกรด A — ง่ายมาก: ตารางมาตรฐานหรือ view ที่ส่งผ่านตรง ๆ ไม่มีตรรกะพิเศษ การแมปชนิดข้อมูลตรงไปตรงมา
- เกรด B — ปานกลาง: มีโครงสร้างเฉพาะของ ClickHouse หนึ่งอย่างที่ต้องเรียนและทดสอบ
แต่การแปลงตัวมันเองเป็นการแทนที่ — เอนจิน ClickHouse บวกคอนฟิก incremental,
CREATE DICTIONARY,REFRESH EVERYของ MV ที่รีเฟรชได้ หรือ pathJSONExtract*ที่มาแทนการอ่านVARIANT - เกรด C — ซับซ้อน: คำสั่งต้องถูกสร้างใหม่ ไม่ใช่แค่เปลี่ยนชนิดข้อมูล (
QUALIFYที่ห่อไว้ใน subquery,MERGE INTOที่แทนด้วยกลยุทธ์ incremental) และการเขียนใหม่นั้น ต้องสอดคล้องกับการเลือกเอนจินและการวางFINALในทุกสิ่งที่อยู่ปลายน้ำ ทดสอบอย่างรอบคอบ - เกรด D — ต้องออกแบบใหม่: ฟีเจอร์เฉพาะของ Snowflake ที่ไม่มีสิ่งเทียบเท่าโดยตรง (Stream → การตัดสวิตช์ producer มายัง ClickHouse, Task → MV ที่รีเฟรชได้ หรือการรัน dbt ตามกำหนดเวลา)
แบบฝึกหัดที่ 3 ด้านล่างให้คุณให้เกรดบนสเกลสามระดับที่ย่อลงแทนที่จะเป็นสี่ตัวอักษร ด้านบน — Low (เกรด A), Medium (เกรด B), High (เกรด C หรือ D) — เพราะ ความแตกต่างที่สำคัญที่สุดต่อการจัดลำดับแรงงานคือ ง่ายมาก / ต้องทดสอบ / ต้องออกแบบใหม่ ไม่ใช่การแบ่งสี่ทาง คำอธิบายของแต่ละคำตอบระบุว่าเข้ากับตัวอักษรใดใน A–D คุณจึงยังแมปกลับไปยังเกรดตัวอักษรได้
แบบฝึกหัดที่ 1: DAG ของ dependency
สำหรับแต่ละอ็อบเจกต์ด้านล่าง ให้เลือกว่ามันพึ่งพาอะไร สามในสิบรายการเป็นข้อมูลอ้างอิงแบบ คงที่ที่ไม่มี dependency เลย — นั่นเป็นคำตอบจริง ไม่ใช่ช่องว่างที่ต้องกรอกทีหลัง
แบบฝึกหัดที่ 2: การกำหนดระลอกการย้ายระบบ
ระลอก 0 และ 1 ถูกกรอกไว้เป็นบริบท สำหรับระลอก 2 ถึง 4 ให้เลือกว่าอ็อบเจกต์ใดอยู่ใน ระลอกนั้น แล้วตอบว่าเกิดอะไรขึ้นจริง ๆ ในระลอกนั้น
แบบฝึกหัดที่ 3: การให้เกรดความซับซ้อน
ให้เกรดแต่ละอ็อบเจกต์ แล้วตอบคำถามเรื่องความท้าทายหลักของมันใต้ตาราง
คำถามทบทวน
คำถามสองข้อสุดท้ายครอบคลุมสามรายการในทะเบียนความเสี่ยงของเฉลย — การตรวจสอบ
fact_trips (เกรด C) และ agg_hourly_zone_trips หลังจากที่มันลงจอด และการตรวจสอบ
การตัดสวิตช์ producer ที่มาแทน TRIPS_CDC_STREAM และ CDC_CONSUME_TASK
(เกรด D) ทะเบียนนี้ไม่ใช่แค่ชุดของเกรด C/D เท่านั้น: agg_hourly_zone_trips ได้เกรด
Medium แต่หน้าต่างการคำนวณซ้ำแบบเลื่อนของมันคือสิ่งที่ผิดพลาดแบบละเอียดอ่อนได้ง่ายที่สุด
ในไปป์ไลน์นี้
Loading worksheet...
ถ่ายลงใน migration-plan.md
คัดลอกแผนระลอกและเกรดความซับซ้อนของคุณไปยังส่วนที่ 6 ของ migration-plan.md และ
ติ๊กช่อง:
- [ ] Migration wave plan: completed