![](https://nextflow.in.th/wp-content/uploads/Robot-with-a-pile-of-paper-sheet-1024x502.webp)
รอบที่แล้วพลโน๊ตอธิบายเรื่องของประโยชน์และเทคนิคในการสร้าง Table แบบ round robin ใน Azure Synapse Analytic ไว้ วันนี้ของมาขยายในส่วนของ distribution แบบ Hash ไว้อีกอันหนึงครับ
ใครตามมาจากเรื่องที่แล้ว ข้ามหัวข้อด้านล่าง ไปหัวข้อ Distribution แบบ Hash แทนได้เลย
ระบบประมวลผลใน Azure Synapse Analytics เหมือนทีมนักฟุตบอล
![](https://nextflow.in.th/wp-content/uploads/A-team-of-americans-football-players-1024x1024.webp)
- สำหรับพวกเราที่ยังนึกภาพไม่ออก ใน Azure Synapse Analytics นั้น เราสามารถกำหนดจำนวนส่วนจัดการข้อมูลได้
- ซึ่งกลุ่มระบบพวกนี้ถูกเรียกว่า SQL Pool
- ใน Pool หนึ่ง จะประกอบไปด้วย Compute Node หลายตัว ลองมองว่าเป็นนักอเมริกันฟุตบอลก็ได้
อ่ะพร้อมแล้วก็ไปต่อ
หมวกคัดสรร: การกำหนด Distribution แบบ Hash ให้ Table
![](https://nextflow.in.th/wp-content/uploads/wizard-child-in-the-hall-1024x1024.webp)
ในการสร้าง 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 จ้า