PlusMagi's Blog By Pitt Phunsanit Ai,Database OpenXML SDK Case: การอ่านค่าจากหลายๆ Worksheet พร้อมการตรวจสอบ Error ของโครงสร้างไฟล์

OpenXML SDK Case: การอ่านค่าจากหลายๆ Worksheet พร้อมการตรวจสอบ Error ของโครงสร้างไฟล์

ในโลกของการพัฒนาซอฟต์แวร์ระดับองค์กร การจัดการข้อมูลที่ซับซ้อนซึ่งมาจากหลายส่วน (Multi-source Data) เป็นเรื่องที่พบเจอได้บ่อยครั้ง ความท้าทายไม่ได้อยู่ที่การดึงข้อมูลจากแหล่งเดียวเท่านั้น แต่คือการที่เราต้องสามารถประมวลผลชุดข้อมูลขนาดใหญ่ที่กระจายตัวอยู่บนตารางหรือโครงสร้างข้อมูลที่แตกต่างกัน พร้อมทั้งรับประกันว่าโครงสร้างของข้อมูลนั้นมีความสมบูรณ์และไม่มีข้อบกพร่องทางเทคนิค เพื่อให้ระบบของเราทำงานได้อย่างน่าเชื่อถือในทุกสถานการณ์

หลักการจัดการข้อมูลหลายแหล่งใน PostgreSQL

เมื่อเราพูดถึงการประมวลผลข้อมูลที่เทียบเท่ากับการอ่านหลาย Worksheet ใน Excel แต่ใช้ PostgreSQL เราจะเปลี่ยนแนวคิดมาเป็นการจัดการกับความสัมพันธ์ของข้อมูล (Relational Data) หรือการจัดการ JSON/JSONB ที่ซับซ้อน หัวใจสำคัญคือการใช้ภาษา PL/pgSQL ร่วมกับการจัดการ Transaction และการดักจับข้อยกเว้น (Exception Handling) เพื่อให้มั่นใจว่าแม้ข้อมูลบางส่วนจะผิดพลาด ระบบหลักก็ยังสามารถทำงานต่อไปได้

การจำลองการอ่านหลายส่วนพร้อม Validation

เราสามารถจำลองการอ่านค่าจากหลายส่วนได้โดยการสร้างฟังก์ชันที่รับค่าอินพุตที่ซับซ้อน หรือวนลูปผ่านชุดข้อมูลที่เกี่ยวข้อง จากนั้นใช้บล็อก BEGIN...EXCEPTION...END เพื่อดักจับข้อผิดพลาดที่อาจเกิดขึ้น เช่น ข้อมูลที่ขาดหายไป (NULL) หรือรูปแบบข้อมูลที่ไม่ถูกต้อง (Data Type Mismatch)

ตัวอย่างโค้ดด้านล่างนี้แสดงฟังก์ชัน PL/pgSQL ที่จำลองการประมวลผลข้อมูลจากหลายส่วน (สมมติว่าข้อมูลมาจากตารางที่เกี่ยวข้อง) พร้อมการตรวจสอบความถูกต้องของโครงสร้างข้อมูลอย่างเข้มงวด:

SQL

-- สร้างตารางจำลองสำหรับเก็บข้อมูลที่ต้องตรวจสอบ
CREATE TABLE IF NOT EXISTS processed_data (
    id SERIAL PRIMARY KEY,
    source_sheet TEXT,
    data_value TEXT,
    is_valid BOOLEAN
);

-- ฟังก์ชัน PL/pgSQL สำหรับประมวลผลข้อมูลหลายส่วนพร้อม Error Handling
CREATE OR REPLACE FUNCTION process_multi_source_data(p_record_id INT) RETURNS VOID AS $$
DECLARE
    v_sheet_name TEXT := 'Sheet_A';
    v_data_value TEXT := '1,2,3';
BEGIN
    -- 1. การตรวจสอบโครงสร้างข้อมูลเบื้องต้น (Simulating Sheet A)
    INSERT INTO processed_data (source_sheet, data_value, is_valid) VALUES
    (v_sheet_name, v_data_value, TRUE);

    -- 2. การจำลองการประมวลผลส่วนที่สอง (Sheet B) ที่อาจเกิด Error
    BEGIN
        -- สมมติว่ามีการเรียกใช้ฟังก์ชันที่ต้องการข้อมูลที่ไม่มีอยู่
        SELECT data_col FROM non_existent_table WHERE id = 1;
        -- หากโค้ดถึงบรรทัดนี้ แสดงว่าไม่มี Error
        INSERT INTO processed_data (source_sheet, data_value, is_valid) VALUES
        ('Sheet_B', 'Success', TRUE);
    EXCEPTION
        WHEN undefined_table THEN
            -- ดักจับ Error เฉพาะกรณีตารางไม่มีอยู่
            INSERT INTO processed_data (source_sheet, data_value, is_valid) VALUES
            ('Sheet_B', 'Error: Table Not Found', FALSE);
            RAISE NOTICE 'Warning: ตรวจพบข้อผิดพลาดโครงสร้างใน Sheet B';
    END;

    -- 3. การประมวลผลส่วนที่สาม (Sheet C) ที่ตรวจสอบค่า NULL
    INSERT INTO processed_data (source_sheet, data_value, is_valid) VALUES
    ('Sheet_C', 'Valid Data', TRUE);

END;$$ LANGUAGE plpgsql;

-- เรียกใช้ฟังก์ชันเพื่อทดสอบ
SELECT process_multi_source_data(1);

การวิเคราะห์และแนวคิดเชิงสถาปัตยกรรม

จากตัวอย่างข้างต้น เราเห็นการใช้ BEGIN...EXCEPTION...END ซึ่งเป็นหัวใจของการทำ Data Validation ในระดับระบบ (System Level) ใน PostgreSQL แทนที่จะอาศัยการตรวจสอบ Schema ภายนอก เราใช้กลไกของภาษา SQL เองในการควบคุม Flow การทำงาน เมื่อส่วนใดส่วนหนึ่งล้มเหลว (เช่น non_existent_table) ระบบจะไม่ล่ม แต่จะบันทึกข้อผิดพลาดนั้นลงในตาราง processed_data พร้อมระบุสถานะ is_valid = FALSE

ในมุมมองของ Senior Architect การออกแบบนี้ช่วยให้มั่นใจได้ว่ากระบวนการ ETL (Extract, Transform, Load) ของเรามีความยืดหยุ่นสูง (Resilient) และสามารถบันทึกทั้งข้อมูลที่สำเร็จและข้อมูลที่ล้มเหลวไว้ในที่เดียว เพื่อให้ทีมงานสามารถนำไปตรวจสอบและแก้ไขได้ในรอบถัดไป

บทสรุป: ความน่าเชื่อถือของข้อมูล

การจัดการข้อมูลที่ซับซ้อนจากหลายแหล่งใน PostgreSQL ไม่ได้จบลงแค่การเขียนคำสั่ง SELECT แต่ต้องรวมถึงการออกแบบฟังก์ชันที่ชาญฉลาด การใช้ PL/pgSQL เพื่อควบคุม Flow และการใช้ EXCEPTION blocks เพื่อดักจับความผิดพลาดอย่างเป็นระบบ การทำเช่นนี้คือการยกระดับความน่าเชื่อถือของข้อมูล (Data Reliability) ให้เป็นระดับองค์กรอย่างแท้จริง