ในโลกของการพัฒนาซอฟต์แวร์ การดึงข้อมูล (Data Extraction) จากแหล่งข้อมูลที่มีโครงสร้างเป็นสิ่งจำเป็นอย่างยิ่ง ไม่ว่าข้อมูลนั้นจะมาจากตารางในฐานข้อมูล (Database Table) หรือไฟล์รูปแบบอื่น ๆ การทำหน้าที่เสมือน ‘Table Reader’ หรือ ‘Data Parser’ จึงเป็นทักษะหลักที่นักพัฒนาต้องมี
แม้ว่าในบริบทของ Frontend เราอาจใช้ JavaScript ในการอ่าน DOM Table แต่เมื่อเราทำงานกับระบบหลังบ้าน (Backend) และใช้ PostgreSQL เป็นระบบหลัก การอ่านและประมวลผลตารางจะถูกจัดการด้วยพลังของภาษา SQL และฟังก์ชันเฉพาะของ PostgreSQL เอง บทความนี้จะพาคุณไปดูวิธีการที่ PostgreSQL ทำหน้าที่เป็นเครื่องมือในการอ่านและแปลงข้อมูลตารางอย่างมีประสิทธิภาพในระดับ Senior Architect
💡 หลักการทำงานของ Data Extraction ใน PostgreSQL
ในฐานะ System Specialist เราจะไม่เขียนโค้ดที่จำลองการอ่านตาราง แต่เราจะใช้ความสามารถของ PostgreSQL ในการจัดการข้อมูลที่มีโครงสร้าง (Structured Data) โดยเฉพาะอย่างยิ่งเมื่อข้อมูลเข้ามาในรูปแบบที่ยังไม่สมบูรณ์ เช่น ข้อมูล CSV หรือ JSON ที่ต้องการการแยกส่วน (Parsing) เพื่อให้กลายเป็นแถวและคอลัมน์ที่พร้อมใช้งาน
ฟังก์ชันหลักที่เราใช้ในการทำ Table Reader ใน PostgreSQL คือการใช้คำสั่ง SELECT ร่วมกับฟังก์ชันที่ช่วยในการแยกส่วนข้อมูล เช่น UNNEST() หรือการใช้ WITH clause เพื่อสร้าง Common Table Expressions (CTEs) เพื่อจำลองการอ่านข้อมูลทีละบรรทัด (Row-by-Row Processing) ซึ่งเป็นหลักการเดียวกับที่ Table Reader ทำงาน
🛠️ ตัวอย่างการใช้ PostgreSQL เพื่ออ่านและแปลงข้อมูล (Parsing)
สมมติว่าเราได้รับข้อมูลดิบ (Raw Data) ที่ถูกคั่นด้วยเครื่องหมายจุลภาค (Comma-Separated Values – CSV) และต้องการให้ PostgreSQL อ่านข้อมูลนี้และจัดเก็บเป็นคอลัมน์ที่ถูกต้อง
SQL
-- 1. สร้างตารางจำลองสำหรับเก็บข้อมูลที่อ่านได้<br>CREATE TABLE parsed_data (id INT, product_name VARCHAR, price NUMERIC);<br><br>-- 2. ข้อมูลดิบที่ถูกคั่นด้วย comma (CSV format)<br>WITH raw_data (data_string) AS (VALUES ('1,apple,100.00'), ('2,banana,250.50'), ('3,orange,50.00'))<br>SELECT<br> CAST(TRIM(SPLIT_PART(rd.data_string, ',', 1)) AS INT) AS id,<br> TRIM(SPLIT_PART(rd.data_string, ',', 2)) AS product_name,<br> CAST(TRIM(SPLIT_PART(rd.data_string, ',', 3)) AS NUMERIC) AS price<br>FROM raw_data rd;<br><br>-- 3. (Optional) นำข้อมูลที่อ่านได้เข้าสู่ตารางจริง<br>INSERT INTO parsed_data (id, product_name, price) <br>SELECT id, product_name, price FROM ( ... query above ... );
คำอธิบายโค้ด:
1. เราใช้ WITH raw_data เพื่อจำลองชุดข้อมูลดิบที่เข้ามา (แทนการอ่านจากไฟล์ภายนอกจริง ๆ)
2. เราใช้ฟังก์ชัน SPLIT_PART(string, delimiter, part_number) ซึ่งเป็นหัวใจสำคัญของการทำ Table Reader ใน PostgreSQL เพราะมันทำหน้าที่ ‘แยก’ ข้อมูลที่อยู่ในสตริงเดียวออกเป็นส่วนย่อย ๆ ตามตำแหน่งที่กำหนด (Comma, 1, 2, 3) และทำการแปลงชนิดข้อมูล (CAST) ให้เป็นประเภทที่ถูกต้อง (INT, VARCHAR, NUMERIC) ซึ่งให้ผลลัพธ์ที่แม่นยำกว่าการใช้ JavaScript ในการจัดการข้อมูลเชิงโครงสร้างในระดับ Backend
✅ สรุปและข้อได้เปรียบในระดับ Senior Architect
การใช้ PostgreSQL ในการทำ Data Extraction ไม่เพียงแต่ช่วยให้โค้ดมีความเสถียรและประสิทธิภาพสูงกว่าการประมวลผลฝั่งแอปพลิเคชัน (Application Layer) เท่านั้น แต่ยังทำให้กระบวนการทั้งหมดเป็น Atomic Transaction ซึ่งหมายความว่าการอ่าน, การแปลง, และการบันทึกข้อมูลจะเกิดขึ้นอย่างสมบูรณ์ในฐานข้อมูล ทำให้มั่นใจได้ในความถูกต้องของข้อมูล 100%
ดังนั้น หากโจทย์คือการอ่านและประมวลผลตารางข้อมูลที่มีโครงสร้างที่ชัดเจน การใช้ SQL Functions ของ PostgreSQL คือคำตอบที่เหนือกว่าและเป็นมาตรฐานระดับ Enterprise Architecture อย่างแท้จริง