PlusMagi's Blog By Pitt Phunsanit Database บทความและข้อคิดประจำเรื่อง 1

บทความและข้อคิดประจำเรื่อง 1

ในโลกของการจัดการข้อมูลจริง ข้อมูลที่เราได้รับมามักไม่ได้อยู่ในรูปแบบที่สมบูรณ์เสมอไป โดยเฉพาะข้อมูลที่ถูกคั่นด้วยเครื่องหมาย (Delimiter) เช่น CSV หรือข้อมูลที่รวมหลายค่าไว้ในสตริงเดียว การแปลงข้อมูลเหล่านี้ให้เป็นโครงสร้างที่ฐานข้อมูลเข้าใจ (เช่น แถวหรือ Array) จึงเป็นทักษะสำคัญที่นักพัฒนาและนักวิเคราะห์ข้อมูลต้องมี

บทความนี้จะพาคุณเจาะลึกถึงความสามารถอันทรงพลังของ PostgreSQL ในการจัดการกับข้อมูลประเภท String และการแปลงให้เป็น Array โดยใช้ฟังก์ชันมาตรฐาน ซึ่งช่วยยกระดับประสิทธิภาพในการประมวลผลข้อมูลได้อย่างมาก

🚀 การแยกสตริงและการแปลงเป็น Array ใน PostgreSQL

PostgreSQL มีเครื่องมือที่ยอดเยี่ยมในการจัดการกับข้อมูลที่ถูกคั่น (Delimited Data) คือฟังก์ชัน string_to_array() และ unnest() การทำงานร่วมกันของสองฟังก์ชันนี้ทำให้เราสามารถเปลี่ยนสตริงยาวๆ ที่มีค่าหลายค่า ให้กลายเป็นชุดข้อมูล (Array) และสามารถแตกออกเป็นแถว (Rows) เพื่อนำไปประมวลผลต่อได้ทันที

💡 หลักการทำงานของฟังก์ชัน

  1. string_to_array(string, delimiter): ฟังก์ชันนี้จะรับสตริงและตัวคั่น (Delimiter) เข้ามา จากนั้นจะส่งคืนค่าเป็น PostgreSQL Array (เช่น text[])
  2. unnest(array): ฟังก์ชันนี้ทำหน้าที่ ‘คลี่’ หรือ ‘แตก’ ค่าจาก Array ออกมาเป็นแถวข้อมูล (Row) แยกกัน ทำให้เราสามารถใช้มันในการ JOIN หรือ WHERE clause ได้อย่างมีประสิทธิภาพ

ลองดูตัวอย่างการใช้งานจริงเพื่อทำความเข้าใจกระบวนการนี้:

SQL

-- 1. ข้อมูลสตริงที่ถูกคั่นด้วยเครื่องหมายคอมม่า (,) --
WITH raw_data AS (
    SELECT 'apple,banana,orange' AS csv_string
)
-- 2. ใช้ string_to_array() เพื่อแปลงเป็น Array และ unnest() เพื่อแตกเป็นแถว --
SELECT unnest(string_to_array(csv_string, ',')) AS fruit_name
FROM raw_data;

ผลลัพธ์ที่ได้:

  • fruit_name: apple
  • fruit_name: banana
  • fruit_name: orange

ดังที่เห็น การใช้ unnest() ทำให้เราสามารถมองเห็นค่าแต่ละตัวในสตริงเดิมเป็นแถวข้อมูลอิสระ ซึ่งเหมาะอย่างยิ่งสำหรับการทำ Data Cleansing หรือการวิเคราะห์ข้อมูลที่มาจากแหล่งที่ไม่เป็นระเบียบ

✨ การประยุกต์ใช้ขั้นสูง: การ Join กับข้อมูลอื่น

ความสามารถที่แท้จริงของ PostgreSQL คือการนำ Array ที่ได้จากการ unnest() ไปใช้ในการ JOIN กับตารางอื่น ๆ เพื่อเพิ่มมิติของข้อมูล ตัวอย่างเช่น หากเรามีตาราง products และต้องการหาว่าสินค้าใดมีส่วนประกอบ (Ingredients) ที่ระบุในสตริง CSV เราสามารถทำได้โดยการ JOIN กับผลลัพธ์ของ unnest()

SQL

-- สมมติว่ามีตาราง ingredients (id, name) --
SELECT p.product_name, i.name AS ingredient_name
FROM products p
JOIN (SELECT unnest(string_to_array('salt,pepper,garlic', ',')) AS ingredient) AS ingredients_list ON TRUE
JOIN ingredients i ON i.name = ingredients_list.ingredient;

✅ บทสรุป: พลังของการจัดการข้อมูลใน PostgreSQL

การเข้าใจและใช้งานฟังก์ชัน string_to_array() และ unnest() อย่างเชี่ยวชาญ ไม่เพียงแต่ช่วยให้คุณสามารถจัดการข้อมูลที่ดูยุ่งเหยิงได้เท่านั้น แต่ยังช่วยให้โค้ด SQL ของคุณมีประสิทธิภาพสูงขึ้นอย่างมากในการประมวลผลข้อมูลขนาดใหญ่ (Big Data) นับเป็นทักษะที่จำเป็นอย่างยิ่งสำหรับ Senior Data Engineer ที่ทำงานกับระบบฐานข้อมูล PostgreSQL