PlusMagi's Blog By Pitt Phunsanit Database Tabulator: data from html table

Tabulator: data from html table

ในโลกของการพัฒนาซอฟต์แวร์ระดับ Enterprise ข้อมูลมักจะมาจากหลายแหล่งที่มา และหนึ่งในแหล่งที่มาที่พบได้บ่อยที่สุดคือตารางข้อมูลที่ฝังอยู่ในหน้าเว็บ HTML การดึงข้อมูล (Data Extraction) จากตารางเหล่านี้จึงเป็นทักษะสำคัญที่นักพัฒนาระดับ Senior Architect ต้องมี

อย่างไรก็ตาม การพยายามให้ PostgreSQL ดึงข้อมูลจาก HTML โดยตรงนั้นเป็นเรื่องที่ทำไม่ได้ในทางปฏิบัติ เนื่องจาก PostgreSQL เป็นระบบจัดการฐานข้อมูล (DBMS) ที่ทำงานกับข้อมูลที่มีโครงสร้าง (Structured Data) เช่น ตาราง (Tables) หรือ JSONB เท่านั้น ไม่ใช่โค้ด HTML ที่มีรูปแบบการแสดงผล (Presentation Layer)

สถาปัตยกรรมที่ดีที่สุด: การแยกส่วนการทำงาน (Decoupling)

ในฐานะ System Specialist เราต้องยึดหลักการออกแบบระบบที่ถูกต้อง (Best Practice) ซึ่งหมายความว่า การแปลง HTML เป็นข้อมูลที่พร้อมใช้งานใน PostgreSQL จะต้องเกิดขึ้นในชั้นของแอปพลิเคชัน (Application Layer) ก่อนเสมอ

ขั้นตอนการทำงานที่ถูกต้อง (The Data Pipeline)

  1. Scraping/Parsing (Application Layer): ใช้ภาษาโปรแกรมมิ่งที่มีความสามารถในการจัดการ DOM (เช่น Python/BeautifulSoup, Node.js/Cheerio) เพื่ออ่าน HTML และแปลงตารางนั้นให้เป็นรูปแบบโครงสร้าง เช่น JSON หรือ CSV
  2. Data Validation (Application Layer): ทำการทำความสะอาดข้อมูล (Data Cleaning) ตรวจสอบประเภทข้อมูล (Data Type) และจัดการค่าว่าง (Null Values)
  3. Ingestion (PostgreSQL Layer): นำข้อมูลที่สะอาดแล้ว (JSON/CSV) เข้าสู่ PostgreSQL โดยใช้คำสั่งที่เหมาะสม

การนำเข้าข้อมูลเข้าสู่ PostgreSQL

เมื่อข้อมูลถูกแปลงเป็นรูปแบบ JSON หรือ CSV แล้ว PostgreSQL มีเครื่องมือที่ทรงพลังในการนำเข้าข้อมูลเหล่านี้ ทำให้เราสามารถจัดการกับข้อมูลที่มาจากแหล่งภายนอกได้อย่างมีประสิทธิภาพ

1. การใช้ JSONB (สำหรับข้อมูลที่ซับซ้อน)

หากข้อมูลที่ได้จากการ Parsing มีความซับซ้อนและมีโครงสร้างที่ไม่แน่นอน การเก็บไว้ในรูปแบบ JSONB (Binary JSON) คือทางออกที่ดีที่สุด เพราะ PostgreSQL สามารถจัดเก็บและค้นหาข้อมูลภายใน JSONB ได้ด้วยตัวดำเนินการที่ทรงพลัง เช่น -> และ ->>

SQL

-- สมมติว่าเราได้รับข้อมูลที่ Parse มาเป็น JSON object แล้ว
INSERT INTO extracted_data (data_json) VALUES
'{ "id": 1, "name": "Pitt", "age": 43, "details": { "gender": "Male" } }';

-- การดึงข้อมูลที่ต้องการจาก JSONB
SELECT
    (data_json ->> 'id')::INT AS record_id,
    (data_json ->> 'name') AS full_name,
    (data_json ->> 'age')::INT AS age,
    (data_json -> 'details' ->> 'gender') AS gender
FROM extracted_data;

2. การใช้ COPY Command (สำหรับ CSV/Flat Data)

หากข้อมูลที่ได้จากการ Parsing เป็นรูปแบบ CSV (Comma Separated Values) คำสั่ง COPY คือคำสั่งมาตรฐานและมีประสิทธิภาพสูงสุดในการนำเข้าข้อมูลจำนวนมากเข้าสู่ตารางที่กำหนดโครงสร้างไว้แล้ว

SQL

-- สมมติว่าเรามีไฟล์ 'temp_data.csv' ที่ได้จากการ Parsing
-- ไฟล์นี้มีโครงสร้าง: id, name, surname, age
COPY target_table (id, name, surname, age) FROM 'path/to/temp_data.csv' DELIMITER ',' CSV HEADER;

บทสรุปทางสถาปัตยกรรม

การแปลงข้อมูลจาก HTML Table ไปยัง PostgreSQL ไม่ใช่คำสั่ง SQL เพียงคำสั่งเดียว แต่เป็นกระบวนการทางสถาปัตยกรรมที่ประกอบด้วยหลายขั้นตอน ตั้งแต่การ Parsing ข้อมูลภายนอก (ด้วยภาษาโปรแกรมอื่น) ไปจนถึงการจัดเก็บและเรียกใช้ข้อมูลภายใน PostgreSQL การใช้ JSONB และคำสั่ง COPY อย่างถูกวิธี จะช่วยให้ระบบของคุณมีความยืดหยุ่น ทนทาน และสามารถรองรับการเปลี่ยนแปลงของโครงสร้างข้อมูลต้นทางได้อย่างยอดเยี่ยม

Exit mobile version