ในช่วงระยะสองสามปีมานี้ คำว่า ELT เริ่มเป็นที่พูดถึงในวงการ data แทนคำว่า ETL ที่ใช้กันมานาน ครั้งแรกที่ผมได้ยินก็สงสัยเหมือนกันว่ามันดียังไง รู้แค่ว่า database หลายๆเจ้าอย่าง Redshift, BigQuery หรือ Snowflake ดูจะพร้อมหน้าพร้อมตาเชียร์กันมาก

วันนี้ผมจึงถือโอกาสสรุปเรื่องราวความเป็นมาทั้งหมดว่าอันไหนดีกว่ากันและเราควรจะใช้มันหรือไม่ครับ

Extract Transform Load

ETL ย่อมาจาก Extract Transform Load หรืออธิบายง่ายๆคือย้าย (Extract) data จากที่หนึ่งไปใส่อีกที่หนึ่ง โดยจะทำการ transform data ให้อยู่ในรูปแบบที่เหมาะสมกับ target ที่จะทำการ Load เช่น denormalization, clean หรือ mask anonymous data เป็นต้น

etl
https://docs.microsoft.com/en-us/azure/architecture/data-guide/relational-data/etl

จะว่าไปนั้น จุดกำเนิดของ ETL น่าจะมาพร้อมๆกับ data warehouse และการทำ data analytics นี้แหล่ะ คือการใช้ database ตัวเดียวเป็นทั้ง OLTP และ OLAP ส่งผลกระทบต่อ perfomance แน่ๆ เขาจึงคิดค้นวิธีการย้าย data ไปยัง database ควบคู่ไปกับ transform ให้อยู่ในรูปแบบที่ Analysts สามารถใช้งานได้ง่ายขึ้น เช่น Kimball Dimensional Modelling แทน

และเนื่องจากบริษัทส่วนใหญ่ใช้บริการของ Microsoft, หรือ Oracle อยู่แล้ว Vendor จึงมักขาย tools ที่ทำ ETL แบบ drag and drop ง่ายๆพร้อมกันไปเลย อย่าง Microsoft SSIS เป็นต้น

ตัวอย่าง tools สำเร็จรูปเช่น Informatica, Matillion, Alooma, หรือ Talend

Extract Load Transform

ELT คือการ transform ในตัว database เองเลยหลังจาก Load แทนที่จะ transform ข้างนอกก่อนจะ Load เข้ามาใน target

elt
https://www.matillion.com/events/etl-vs-elt-whats-big-difference/

เหตุผลสำคัญที่ทำให้ ELT paradigm เป็นที่สนใจมากในขณะนี้ มีด้วยกันหลักๆ 2 ประการ

  1. เนื่องจาก big data ที่หลั่งไหลเข้ามามากขึ้น จึงเริ่มมีการใช้ data lake เข้ามาเสริม ทำให้ architecture แบบเดิมๆอย่างการใช้ data warehouse เพียงอย่างเดียวไม่ตอบโจทย์และจำเป็นต้องคิดวิธีใหม่ๆที่เหมาะสมแทน
  2. Hardware และ Network บน cloud ดีขึ้นอย่างมาก และยังสามารถ spawn transient nodes เข้ามาช่วยเฉพาะกิจได้ด้วย ทำให้ data warehouse บน cloud ทรงพลังมากๆ

ทีนี้ หากเรายังคงใช้ ETL อยู่จะเกิดเหตุการณ์ดังต่อไปนี้

ลองมาเทียบในมองมุมของ ELT ดู

“Separating compute and storage” คือแยกการเก็บ data ออกจากการ compute ตัวอย่างเช่น HDFS หรือ AWS S3 เป็น storage และใช้ Presto หรือ SparkSQL เป็น compute ซึ่ง modern data warehouse หลายๆตัวทำตัวเองเป็นส่วนของ compute เท่านั้น และใช้การสร้าง metadata เพื่อเป็น pointers (schema on read) ระบุไปยัง storage จริงๆแทน ตัวอย่างเช่น BigQuery, Redshift Spectrum และ Snowflake เป็นต้น

เราจะเห็นการเกิดของ ELT stack ใหม่เยอะมากๆ ตัวอย่างเช่นใช้ StitchData (ล่าสุดโดน Talend ซื้อไปแล้ว) หรือ Fivetran ทำ EL และ dbt ทำ transform ใน data warehouse อย่าง BigQuery, Redshift และ Snowflake เป็นต้น

โดยสรุปแล้ว จะเห็นเลยว่าฟาก ETL ให้ความสำคัญกับ tools และพิธีรีตองต่างๆมากกว่า ในขณะที่ ELT จะให้สิทธิทั้งหมดในการทำ analytics กับ users เต็ม 100 %

อย่างไรก็ตาม ELT ก็มีข้อเสียครับ คืออาจ expose sensitive data ที่ violence rules บางอย่างให้กับ analysts ได้ เนื่องจากเรา Load raw data เข้ามาโดยปราศจากการทำ masking sensitive data ดังนั้นหลายๆคนจึงแก้โดยการทำ ETLT แทนครับ