ป้ายกำกับ: Chunks

Magi: ชื่อนี้มีที่มาMagi: ชื่อนี้มีที่มา

ในโลกของการจัดการข้อมูล (Data Engineering) ข้อมูลจำนวนมากมักไม่ได้ถูกจัดเก็บในรูปแบบที่สมบูรณ์เสมอไป บางครั้งเราอาจได้รับข้อมูลที่มาในรูปแบบของข้อความยาวๆ ที่มีการคั่นด้วยเครื่องหมาย (Delimiter) เช่น รายชื่อสินค้าที่คั่นด้วยเครื่องหมายจุลภาค (comma-separated values: CSV) การแยกข้อมูลเหล่านี้ให้กลับมาอยู่ในรูปแบบของแถว (Row) และคอลัมน์ (Column) ที่ถูกต้องจึงเป็นทักษะสำคัญที่นักพัฒนาฐานข้อมูลต้องมี

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

หลักการทำงานของ String Splitting ใน PostgreSQL

โดยปกติแล้ว PostgreSQL จะจัดการข้อมูลแบบโครงสร้าง (Structured Data) แต่เมื่อเจอกับข้อมูลแบบข้อความ (Unstructured String) เราจำเป็นต้องใช้ฟังก์ชันที่ช่วยในการแยกส่วน (Split) ฟังก์ชันหลักที่ใช้คือ string_to_array(string, delimiter) ซึ่งจะรับสตริงและตัวคั่น (Delimiter) เข้ามา แล้วส่งผลลัพธ์ออกมาเป็นอาร์เรย์ (Array) จากนั้นเราจะใช้ฟังก์ชัน unnest() เพื่อขยายอาร์เรย์นั้นให้กลายเป็นชุดของแถวข้อมูล (Rows) ที่เป็นมาตรฐานของ SQL

ตัวอย่างการใช้งาน String_Split

สมมติว่าเรามีข้อมูลรายการรหัสสินค้าที่ถูกรวมไว้ในสตริงเดียวคือ ‘ABC-101,XYZ-202,DEF-303’ เราต้องการแยกแต่ละรหัสให้เป็นแถวข้อมูลที่แยกกันอย่างชัดเจน

SQL

SELECT unnest(string_to_array('ABC-101,XYZ-202,DEF-303', ',')) AS product_code;

คำอธิบายโค้ด:

  • string_to_array('ABC-101,XYZ-202,DEF-303', ','): ทำหน้าที่แปลงสตริงให้เป็นอาร์เรย์ โดยใช้เครื่องหมายจุลภาค (',') เป็นตัวแบ่ง
  • unnest(...): ทำหน้าที่คลี่ (Unnest) อาร์เรย์ที่ได้ออกมาเป็นชุดของแถวข้อมูล (Set of Rows) ทำให้แต่ละค่าในอาร์เรย์กลายเป็นค่าในคอลัมน์

การประยุกต์ใช้ในสถานการณ์จริง (Advanced Use Case)

การใช้ string_to_array และ unnest มีประโยชน์อย่างยิ่งในการทำ ETL (Extract, Transform, Load) เมื่อคุณต้องโหลดข้อมูลจากไฟล์ CSV ที่มีโครงสร้างไม่แน่นอน หรือเมื่อคุณต้องการแยกข้อมูลที่ถูกเก็บไว้ในฟิลด์เดียว (เช่น รายชื่อผู้ติดต่อที่คั่นด้วยเครื่องหมาย ‘|’) ออกมาเป็นรายการย่อยๆ เพื่อนำไปประมวลผลต่อในตารางใหม่

SQL

-- ตัวอย่างการแยกรายการอีเมลที่คั่นด้วยเครื่องหมาย |<br>WITH raw_data (email_string) AS (SELECT '[email protected] | [email protected] | [email protected]' )<br>SELECT unnest(string_to_array(email_string, ' ')) AS email_address<br>FROM raw_data;

การทำเช่นนี้ช่วยให้เราสามารถเปลี่ยนข้อมูลที่ดูเหมือนเป็นข้อความธรรมดาให้กลายเป็นชุดข้อมูลเชิงโครงสร้างที่ PostgreSQL สามารถนำไป Query, Join, หรือ Aggregate ต่อไปได้อย่างมีประสิทธิภาพ

บทสรุป

การเข้าใจการทำงานของฟังก์ชัน string_to_array และ unnest ถือเป็นกุญแจสำคัญสำหรับผู้ที่ทำงานด้านการจัดการข้อมูลใน PostgreSQL การใช้เทคนิคนี้อย่างถูกต้องจะช่วยให้คุณสามารถจัดการกับข้อมูลที่ไม่มีโครงสร้าง (Semi-structured data) ได้อย่างง่ายดาย ทำให้กระบวนการ ETL ของคุณมีความยืดหยุ่นและแข็งแกร่งยิ่งขึ้นในการรองรับข้อมูลจากแหล่งที่มาที่หลากหลาย