การปรับแต่งคิวรี

Data Modeling ใน Snowflake เบื้องต้น

Nuno Rocha

Director of Engineering

ลำดับการประมวลผลคิวรี

ลำดับการประมวลผลคิวรี แบบเต็ม

Data Modeling ใน Snowflake เบื้องต้น

ลำดับการประมวลผลคิวรี (1)

ลำดับการประมวลผลคิวรี; FROM

Data Modeling ใน Snowflake เบื้องต้น

ลำดับการประมวลผลคิวรี (2)

ลำดับการประมวลผลคิวรี; JOIN

Data Modeling ใน Snowflake เบื้องต้น

ลำดับการประมวลผลคิวรี (3)

ลำดับการประมวลผลคิวรี; WHERE

Data Modeling ใน Snowflake เบื้องต้น

ลำดับการประมวลผลคิวรี (4)

ลำดับการประมวลผลคิวรี; AGGREGATIONS

Data Modeling ใน Snowflake เบื้องต้น

ลำดับการประมวลผลคิวรี (5)

ลำดับการประมวลผลคิวรี; HAVING

Data Modeling ใน Snowflake เบื้องต้น

ลำดับการประมวลผลคิวรี (6)

ลำดับการประมวลผลคิวรี; SORT

Data Modeling ใน Snowflake เบื้องต้น

ลำดับการประมวลผลคิวรี (7)

ลำดับการประมวลผลคิวรี; LIMIT

Data Modeling ใน Snowflake เบื้องต้น

ลำดับการประมวลผลคิวรี (8)

ลำดับการประมวลผลคิวรีขั้นสุดท้าย

  • BEST PRACTICES:
    • หลีกเลี่ยงการใช้ SELECT *; ระบุเฉพาะคอลัมน์ที่จำเป็น
    • ใช้ LIMIT เพื่อลดปริมาณข้อมูลที่ดึงมา
    • ใช้ WHERE ตั้งแต่ต้นเพื่อกรองแถวและประหยัดหน่วยความจำ
    • ใช้ GROUP BY ร่วมกับการรวมกลุ่มบนชุดข้อมูลที่แคบลงเพื่อเพิ่มประสิทธิภาพ
Data Modeling ใน Snowflake เบื้องต้น

Subqueries

การแสดงภาพ Subquery

Data Modeling ใน Snowflake เบื้องต้น

Subqueries

โมเดลข้อมูลโปรแกรมสะสมคะแนนโรงแรม

Data Modeling ใน Snowflake เบื้องต้น

Subqueries

  • ดึงข้อมูลแขกทุกคนที่มีคะแนนสะสมมากกว่า 1000 คะแนน
SELECT *
FROM guests
WHERE id IN (SELECT guest_id 
                  FROM loyalty_program 
                  WHERE loyalty_points > 1000);
Data Modeling ใน Snowflake เบื้องต้น

Common table expressions

CTE

Data Modeling ใน Snowflake เบื้องต้น

Common table expressions

  • ดึงรายละเอียดการจองล่าสุด
WITH latest_booking AS (
    SELECT guest_id, 
           MAX(checkout_date) AS latest_checkout
    FROM booking_details
    GROUP BY guest_id
)
SELECT bd.*, 
       bd.checkout_date AS latest_booking_date
FROM booking_details bd
    JOIN latest_booking lb 
        ON bd.guest_id = lb.guest_id 
        AND bd.checkout_date = lb.latest_checkout;
Data Modeling ใน Snowflake เบื้องต้น

CTE และ Subqueries

CTEs

  • ข้อดี

    • เพิ่มความอ่านง่ายสำหรับคิวรีที่ซับซ้อน
    • นำกลับมาใช้ซ้ำในคิวรีเดียวกันได้
    • ช่วยจัดระเบียบ SQL query ได้ดีขึ้น
  • ข้อเสีย

    • อาจเพิ่มภาระด้านประสิทธิภาพได้
    • ใช้ได้ภายในขอบเขตของคิวรีเดียวเท่านั้น

Subqueries

  • ข้อดี

    • เรียบง่ายและตรงไปตรงมาสำหรับการใช้งานครั้งเดียว
    • ใช้งานได้ยืดหยุ่นในหลายส่วนของ SQL statement
  • ข้อเสีย

    • อาจลดความอ่านง่ายเมื่อมีความซับซ้อนสูง
    • อาจมีปัญหาด้านประสิทธิภาพเมื่อซ้อนกันหลายชั้น
Data Modeling ใน Snowflake เบื้องต้น

การแสดงภาพเวลาประมวลผลคิวรี

หน้า Query profile

Data Modeling ใน Snowflake เบื้องต้น

ภาพรวมคำศัพท์และฟังก์ชัน

  • Query Optimization: การปรับแต่งคิวรีเพื่อเพิ่มประสิทธิภาพสูงสุด
  • Subquery: คิวรีขนาดเล็กที่อยู่ภายในคิวรีหลัก ช่วยเจาะจงข้อมูลที่ต้องการ
  • Common Table Expressions (CTEs): ตารางเสมือนชั่วคราวที่สร้างขึ้นระหว่างการรันคิวรี
  • WITH .. AS: คำสั่ง SQL สำหรับกำหนด CTE
  • LIMIT: clause ของ SQL สำหรับจำกัดจำนวนแถวในผลลัพธ์
  • HAVING: clause ของ SQL สำหรับกรองข้อมูลหลังการรวมกลุ่มด้วยฟังก์ชัน เช่น SUM, MAX
  • WHERE: clause ของ SQL สำหรับกรองแถวก่อนการจัดกลุ่ม เพื่อเพิ่มประสิทธิภาพคิวรี
Data Modeling ใน Snowflake เบื้องต้น

ตัวอย่าง template สำหรับ CTE และ Subquery

  • Subquery
SELECT *
FROM table_name
WHERE column_name IN (SELECT column_name 
                  FROM table_name
                  WHERE column_name condition value);
  • CTE
WITH latest_booking_dates AS (
    SELECT column_name
    FROM table_name)
SELECT *
FROM table_name a
    JOIN other_table_name b 
    ON a.key_column = b.key_column;
Data Modeling ใน Snowflake เบื้องต้น

มาฝึกกันเถอะ!

Data Modeling ใน Snowflake เบื้องต้น

Preparing Video For Download...