รอบที่แล้วพลโน๊ตอธิบายเรื่องของประโยชน์และเทคนิคในการสร้าง Table แบบ round robin ใน Azure Synapse Analytic ไว้ วันนี้ของมาขยายในส่วนของ distribution แบบ Hash ไว้อีกอันหนึงครับ
ใครตามมาจากเรื่องที่แล้ว ข้ามหัวข้อด้านล่าง ไปหัวข้อ Distribution แบบ Hash แทนได้เลย
ระบบประมวลผลใน Azure Synapse Analytics เหมือนทีมนักฟุตบอล
- สำหรับพวกเราที่ยังนึกภาพไม่ออก ใน Azure Synapse Analytics นั้น เราสามารถกำหนดจำนวนส่วนจัดการข้อมูลได้
- ซึ่งกลุ่มระบบพวกนี้ถูกเรียกว่า SQL Pool
- ใน Pool หนึ่ง จะประกอบไปด้วย Compute Node หลายตัว ลองมองว่าเป็นนักอเมริกันฟุตบอลก็ได้
อ่ะพร้อมแล้วก็ไปต่อ
หมวกคัดสรร: การกำหนด Distribution แบบ Hash ให้ Table
ในการสร้าง Table สำหรับการจัดเก็บข้อมูล เราสามารถบอกให้ Synapse Analytics จัดการแบ่งข้อมูลไปยัง Compute node ต่างๆ ได้โดยมีการยึดเอา column หนึงใน Dataset เป็นตัวหลัก
และแนวทางการแบ่งข้อมูล (row) ไปยัง compute node ต่างๆ นี้ จะอาศัยการคำนวนที่เรียกว่า Hash ครับ (ที่มาของชื่อเลยล่ะ)
สำหรับใครเคยดูหนัง Harry Potter จะมีตอนหนึงที่บรรดาตัวเอกถูกเลือกให้ไปอยู่ประจำบ้านต่างๆ ผ่าน “การตัดสินใจของหมวกคัดสรร” ลองมองว่า Hash นี่คือกลไกของหมวกคัดสรรก็จะเห็นภาพมากขึ้น
ด้านล่างนี้คือโค้ด SQL ในการกำหนดให้ Table ที่ถูกสร้างขึ้นมีการทำงานดังกล่าว
CCREATE TABLE my_table (
id INT PRIMARY KEY,
name VARCHAR(255),
value FLOAT,
potter_value INT
) WITH (DISTRIBUTION = HASH(potter_value)); <--- สำคัญตรงนี้แหละ สังเกตว่าเราเอาชื่อ column หนึ่งใน table มาใช้ในการ hash
ลักษณะการทำงาน
- เราจะมีการใช้ชื่อ column ของ table เป็นค่าที่เอาไปให้ หมวกคัดสรร เอ้ย hash ทำการคำนวน
- ผลที่ได้จากการคำนวน จะถูกใช้ในการโยน data row นั้นไปไว้ใน compute node
แนวทางการเลือก column มา hash
- ควรเลือก data column ที่มีข้อมูลแตกต่างกันมากที่สุดมาใช้ (distinct value)
- และ column นั้นพิจารณาแล้วว่าจะถูกใช้ในการ query ข้อมูลบ่อยๆ
- แบบนี้จะทำให้ได้ performance สูงในการ query จ้า