01 สภาพแวดล้อมต้นทาง
คู่มือผู้สอนสำหรับการจัดเตรียมสภาพแวดล้อมต้นทางบน Snowflake — การจัดเวลา producer ที่ต้องทำงานต่อเนื่อง และการแก้ปัญหา
คู่มือประกอบสำหรับผู้สอนของบทเรียนผู้เรียน 01 สภาพแวดล้อมต้นทาง
การจัดเวลา
รวมประมาณ 45 นาที ขั้นตอนที่ 2 (./setup.sh) เป็นช่วงเดียวที่รันเองโดยไม่ต้องเฝ้า — ราว
5-10 นาที ซึ่งส่วนใหญ่คือการหยอดข้อมูลสังเคราะห์ด้วย TABLE(GENERATOR) — และคุ้มค่าที่จะ
พูดคุยไปด้วยมากกว่าจะเฝ้าดูอย่างเงียบ ๆ มันเป็นจังหวะที่ดีสำหรับแนวการบรรยายด้านล่างนี้
เวลาที่เหลือ (ขั้นตอนที่ 1 และ 3-5) ต้องมีพาร์ตเนอร์อยู่ที่คีย์บอร์ด:
ตั้งค่าข้อมูลรับรอง ตรวจสอบว่า producer และ Superset ขึ้นมาแล้ว เริ่มลูปรีเฟรช dbt
และอ่านผ่านคำสั่งค้นหาทั้งเจ็ด
แนวการบรรยาย
- โมดูลนี้มีอยู่เพื่อสร้างต้นทางที่คุ้มค่าต่อการย้าย: คอลัมน์
VARIANTสตรีม CDC หนึ่งสตรีม งานตามกำหนดเวลาสองงาน และชั้น BI ที่อ่านอยู่บนทั้งหมดนั้น — ไม่ใช่ตาราง ของเล่น ทุกสิ่งเหล่านั้นจะกลายเป็นการตัดสินใจเรื่องการย้ายข้อมูลที่เฉพาะเจาะจงในโมดูล 02 - เดินผ่านรูปทรง Medallion หนึ่งครั้งบนไดอะแกรม: RAW -> STAGING -> ANALYTICS ภายใน
NYC_TAXI_DBและสองอ็อบเจ็กต์ที่ทำให้มันเคลื่อนไหวได้โดยไม่ขึ้นกับ dbt —TRIPS_CDC_STREAMและงานตามกำหนดเวลาสองงาน - ชี้ให้เห็นคลังคำสั่งค้นหา (ขั้นตอนที่ 5) แม้ว่าพาร์ตเนอร์จะยังไม่แปลงคำสั่งเหล่านั้น จนถึงโมดูล 02 — ทั้งเจ็ดคำสั่งมีคอมเมนต์ที่ร่างฝั่ง ClickHouse ไว้แล้ว ดังนั้น พาร์ตเนอร์จึงเริ่มจับรูปแบบได้ตั้งแต่ตอนนี้
- ระบุให้ชัด และย้ำอีกครั้งเมื่อจบโมดูล: ปล่อยให้ producer และลูปรีเฟรช dbt ทำงานต่อไป Cutover ของโมดูล 05 วัดช่องว่างที่แม่นยำซึ่ง producer สร้างขึ้นระหว่าง Snowflake กับ ClickHouse ในระหว่างการย้ายข้อมูล และพาร์ตเนอร์ที่เก็บกวาดด้วยการหยุดมันที่นี่จะ ทำลายการสาธิตนั้นอย่างเงียบ ๆ ในอีกสามโมดูลถัดไป
ปัญหาที่พบบ่อย
terraform initล้มเหลวด้วยข้อผิดพลาดของ provider ยืนยันว่า Terraform >= 1.6 และ เครื่องเข้าถึงอินเทอร์เน็ตไปยัง Terraform registry ได้snowsqlถูกปฏิเสธการเชื่อมต่อ ตรวจสอบSNOWFLAKE_ORGและSNOWFLAKE_ACCOUNTทดสอบ โดยตรงด้วยsnowsql -a ${SNOWFLAKE_ORG}-${SNOWFLAKE_ACCOUNT} -u ${SNOWFLAKE_USER}dbt runล้มเหลวด้วยrelation not foundรัน./setup.sh --skip-seedก่อน — มัน สร้างโครงสร้างฐานข้อมูล — และยืนยันว่าprofiles.ymlชี้ไปที่NYC_TAXI_DB- Superset แสดง
connection refusedSuperset ต้องใช้เวลาราว 60 วินาทีหลังdocker-compose upเพื่อเริ่มต้นระบบ ตรวจdocker logs nyc_taxi_supersetหากยังไม่ขึ้น หลังจากนั้น - การหยอดข้อมูลใช้เวลานานกว่าที่พาร์ตเนอร์คาด คำสั่ง insert ด้วย
TABLE(GENERATOR)สร้าง 50M แถวในราว 10-12 นาที ส่วนคำสั่งUPDATEที่ตามมาซึ่งเติมคอลัมน์ JSONTRIP_METADATAบนทั้ง 50M แถวอาจเพิ่มอีก 15-20 นาทีบน warehouse ขนาด SMALL นี่เป็น พฤติกรรมปกติของ Snowflake สำหรับการอัปเดตคอลัมน์VARIANTขนาดใหญ่ ไม่ใช่การ ค้าง — พูดให้ชัดก่อนที่พาร์ตเนอร์จะเริ่มไล่แก้สคริปต์ที่ทำงานถูกต้องอยู่แล้ว - พาร์ตเนอร์หยุด producer ของข้อมูลการเดินทางเมื่อโมดูลนี้ดูเหมือน "เสร็จ" แล้ว มันยังไม่เสร็จ — โมดูล 02 ถึง 05 ทั้งหมดขึ้นอยู่กับการที่มันยังทำงานอยู่ และ cutover ของโมดูล 05 วัดช่องว่างที่มันสร้างขึ้นโดยเฉพาะ นี่คือความผิดพลาดจากความอยากเก็บกวาดที่สร้าง ความเสียหายมากที่สุดในเวิร์กช็อปทั้งหมด พูดออกมาให้ชัด มากกว่าหนึ่งครั้ง
ขั้นตอนการรีเซ็ต
- จัดเตรียมใหม่โดยไม่ต้องจ่ายเวลาโหลดข้อมูล ~10 นาทีอีกครั้ง:
./setup.sh --skip-seed(โครงสร้างพื้นฐานมีอยู่แล้วและTRIPS_RAWมีข้อมูลอยู่แล้ว) - ปรับแก้เฉพาะการเปลี่ยนแปลงของ Terraform หรือ SQL: ใช้
./setup.sh --skip-seedเพียงอย่างเดียว - ปรับแก้เฉพาะโมเดล dbt โดยข้าม Superset ไปทั้งหมด:
./setup.sh --skip-seed --skip-superset - ทดสอบการเปลี่ยนแปลงของ Terraform โดยไม่รัน dbt ซ้ำ: เพิ่ม
--skip-dbt - หลังเปลี่ยนสคีมาของโมเดล dbt ให้บังคับสร้าง incremental ขึ้นใหม่ทั้งหมด:
--full-refresh(ใช้ร่วมกับ--skip-seedเพื่อเลี่ยงการจ่ายเวลาโหลดข้อมูลอีกครั้ง) - รีเซ็ตทั้งหมดเฉพาะเมื่อสภาพแวดล้อมกู้คืนไม่ได้แล้ว:
source .env && ./teardown.shจากworkshop_public/snowflake_migration_lab/01-setup-snowflake/แล้วรัน./setup.shแบบธรรมดาอีกครั้ง วิธีนี้ทำลายข้อมูลและต้องจ่ายเวลาหยอดข้อมูลเต็ม ~10-12 นาทีใหม่ — อย่าใช้เป็นทางเลือกแรกสำหรับพาร์ตเนอร์ที่ติดขัด