ทำไมเวลาสร้าง Data Pipeline ควรโหลดข้อมูลมาเก็บลง Storage หรือ Data Lake ก่อน?

Kan Ouivirach
odds.team
Published in
1 min readJan 10, 2022

เป็นคำถามที่ได้ยินอยู่บ่อยๆ ว่าตอนที่สร้าง Data Pipeline ขึ้นมา เราควรที่จะเก็บข้อมูลลงไว้ที่ Storage สักที่หนึ่ง หรือเก็บลง Data Lake ก่อน? 🤔

แน่นอนว่าตอนที่เราเขียนโค้ดสร้าง Data Pipeline ขึ้นมานั้น จังหวะที่เราดึงข้อมูลมา ไม่ว่าจะทั้งทาง API หรือจากทาง Database ต้นทาง เราสามารถที่จะปรับเปลี่ยน หรือทำ Transform รูปแบบกับข้อมูลนั้นๆ ได้เลย พอเสร็จแล้วก็โหลดเข้าไปเก็บไว้ที่ Database ปลายทาง หรือ Data Warehouse เลยก็ได้ ในแง่ประสิทธิภาพ เราจะได้เรื่องความเร็ว เพราะว่าเราไม่ต้องมาเขียนลงไฟล์ และอ่านจากไฟล์ขึ้นมาอีก

ทำไมเราถึงควรโหลดข้อมูลมาเก็บลง Storage หรือ Data Lake ก่อน?

มีอยู่ 2 เหตุผลหลักๆ

1️⃣ อย่างแรกเลยคือว่า ในหลายๆ ครั้งที่เราโหลดข้อมูลมาใช้งาน มักจะมีคนอื่น หรือระบบอื่นมาร่วมใช้งานด้วย ดังนั้นการที่เราเอามาเก็บไว้ที่ Storage หรือ Data Lake ก่อน ทำให้เราสามารถที่จะแชร์ให้กับคนอื่น หรือระบบอื่นเข้ามาหยิบข้อมูลไปใช้งานได้ และเราก็สามารถนำข้อมูลนี้ไปใช้ซ้ำในงานอื่นๆ ได้อีกด้วย โดยไม่จำเป็นต้องไปโหลดข้อมูลมาใหม่จากต้นทาง

หรือการที่เรานำข้อมูลไปทำ Transformation แล้ว คนอื่นอยากจะมาขอหยิบไปใช้งาน ก็สามารถมาหยิบได้ที่ Storage หรือ Data Lake ของเราได้เลย ไม่ต้องไปทำ Transformation เอง

ซึ่งข้อนี้ก็เป็นจุดเริ่มต้นของเราที่จะทำเรื่อง Data Democratization ในองค์กรให้เกิดขึ้นได้อีกด้วย 👍

2️⃣ ข้อที่สอง และเป็นข้อที่สำคัญมากด้วยคือ เราอยากที่จะทำให้ Data Pipeline ของเราสามารถทำซ้ำได้ (Reproducible) เนื่องจากว่าเราอาจจะไม่สามารถปักใจเชื่อได้ว่าระบบต้นทางที่เราไปดึงมา ไม่ว่าจะเป็นหน้าเว็บที่เรา Scrape ข้อมูลมา หรือจะเป็น API ที่เราเขียนโค้ดไปดึงข้อมูลมา จะไม่มีอะไรเปลี่ยนแปลง และจะคงอยู่กับเราตลอดไป ยิ่งถ้า API ที่ไม่มีให้เราเลือก Date Range ได้เนี่ย 😅 ยิ่งมีความจำเป็นที่เราจะต้องเอาข้อมูลมาเก็บไว้ในการดึงแต่ละครั้ง

ดังนั้นการที่เราเก็บข้อมูลเอาไว้ที่ Storage หรือ Data Lake ก่อน เป็นการทำให้เรามั่นใจได้ว่าข้อมูลที่เราดึงมาเก็บ จะอยู่กับเราและเราสามารถหยิบเอาไปใช้เมื่อไหร่ก็ได้ตามที่เราต้องการ จะเอาข้อมูลย้อนหลังมาประมวลผลใหม่อีกรอบก็ได้! 🤩

โดยข้อมูลที่เราเก็บควรจะเป็น Copy จากแหล่งข้อมูลต้นทางเลย (หรือเรียกว่า Raw Data) ซึ่งตรงนี้ก็จะส่งผลให้ Data Pipeline อื่นๆ ที่มาหยิบข้อมูลนี้เอาไป Transform ก็จะมีคุณสมบัติ Reproducible ได้

OK! ประมาณนี้ครับ สุดท้ายก่อนจบบทความนี้อยากจะบอกไว้ว่า “การตัดสินใจทำอะไรในโลกเทคโนโลยี มันจะต้องมี Trade Off” เสมอ เช่น ถ้าเราเลือกที่จะเน้นไปที่ประสิทธิภาพ และความรวดเร็วระดับสูงสุด เราอาจจะเสียโอกาสในการแชร์ข้อมูลให้กับหน่วยงานอื่นๆ หรือทำให้ Data Pipeline ของเรามันทำซ้ำได้ และการเลือกเก็บข้อมูลลง Storage หรือ Data Lake ก่อน ก็จะเสียความรวดเร็วแบบนั้นไป

จริงๆ แล้วการตัดสินใจพวกนี้ไม่มีถูกหรือผิดครับ ให้ดูบริบท และ Information ที่เราใช้ในการตัดสินใจ ณ เวลานั้นๆ เป็นหลักเนอะ 😉

--

--

Kan Ouivirach
odds.team

Data Craftsman. Passionate in software engineering, data engineering, and data science. ♥