งาน Data pipeline บางครั้งจะต้องเจอกับไฟล์ขนาดใหญ่มากๆ จนกระทบกับ resource ของเครื่อง เราจึงจำเป็นต้องใช้วิธีอื่นเพื่อ process ไฟล์ให้ได้ผลลัพธ์ที่ดีกว่า

เขียนไฟล์แบบเบสิคด้วย Python

อันนี้ง่ายสุดฮะ แค่เปิดไฟล์ด้วยโหมด w (write) แล้ววางเนื้อหาแหมะเข้าไป จบเลย

ไฟล์ใหญ่ ต้องใช้ chunk

แต่การเปิดอ่านไฟล์มันต้องใช้ทรัพยากรตามขนาดไฟล์ฮะ ไฟล์ใหญ่ก็กินทรัพยากรมากตามไปด้วย ถ้าไฟล์ใหญ่มากๆ จนอ่านมาเก็บในแรมทีเดียวไม่ได้ล่ะ เราสามารถอ่านไฟล์มาทีละส่วนๆ เรียกว่า chunk ฮะ แต่ละครั้งก็จะใช้ทรัพยากรส่วนเล็กๆ เท่ากับขนาด chunk ที่เราอ่านมา จากนั้นก็ process chunk ไป แล้วก็อ่าน chunk ถัดไป จนครบทั้งไฟล์ฮะ

Chunk กับการบีบอัดไฟล์

การ process chunk รวมถึงการบีบอัดไฟล์ด้วยก็ได้เหมือนกันนะฮะ อย่างแบบนี้ เราใช้การอ่านไฟล์แบบไบนารี่ (rb: read as binary) อ่านข้อมูลจาก gzip แล้วใช้ library zlib แกะเนื้อหาออกมาและเขียนลงไฟล์แบบไบนารี่เช่นเดิม (wb: write as binary)

Chunk กับฐานข้อมูล

และการอ่านข้อมูลจากฐานข้อมูลก็ทำได้เหมือนกันฮะ โดยการ execute query ให้เรียบร้อย แล้วค่อยใช้ fetchmany() เพื่อหยิบ query result ออกมาก่อนจะใช้ csv library เพื่อเขียนไฟล์เป็น csv ฮะ


หวังว่าจะเป็นแนวทางให้จัดการไฟล์ได้อย่างมีประสิทธิภาพ จ๊อบไม่พังนะฮะ