เข้าใจ Data Warehouse, Data Lake และ Data Lakehouse ฉบับมือใหม่
บทความนี้เราจะมาเล่าว่า Data Lakehouse คืออะไรและสำคัญยังไง แต่ก่อนอื่นใด เราจะเล่าปูความเป็นมาก่อนจะเกิด Data Lakehouse โดยแบ่งออกเป็น 3 generation ดังนี้
First generation of data analytics platform
Data Warehouse คืออะไร?
ย้อนกลับไปสมัยยุคแรกๆของการทำ data warehouse ซึ่งเป็นการเก็บข้อมูล structured data (ข้อมูลที่เป็น table ชัดเจน จัดระเบียบเรียบร้อย เหมือนสิ่งที่ของถูกจัดเก็บเรียบร้อยในคลังสินค้า) เป็นช่วงที่เรารวบรวมข้อมูลมาไว้ที่ centralized เพื่อนำไปทำการวิเคราห์ข้อมูลและ business intelligence (BI) ซึ่งเป็น goal หลักของการทำ data analytics เลย
ส่วนใหญ่แล้ว data warehouse จะถูกติดตั้งที่ on-premises ซึ่งก็คือ server ที่ตามบริษัทเขาจะซื้อตั้งไว้เพื่อใช้เก็บเป็น storage และ compute ไปในตัว
ฟังดูยังไม่มีปัญหาอะไร แต่ปัญหาที่ตามมาต่อจากนี้คือ เมื่อสัก 10 ปีที่แล้ว โลกของเราเริ่มมีการเก็บ storage ราคาถูกลง และความต้องการ query มีมากขึ้น อีกทั้งโลกนี้ก็มีไฟล์มากขึ้นที่ไม่ใช่แค่ structured data แล้ว แต่มี semi-structured, unstructured มากขึ้น อย่างพวกไฟล์ Audio, Video, XML, JSON, Sensor เป็นต้น
คราวนี้ data warehouse เริ่มเอาไม่อยู่ละ เพราะเก็บได้แค่ structured data อย่างเดียว จึงมี Data Lake เข้ามามีบทบาทตรงนี้ จนมาสู่ generation ที่ 2
Second generation of data analytics platform
Data Lake คืออะไร?
Data Lake คือทะเลสาปที่รวบรวมข้อมูลได้ทุกรูปแบบของข้อมูล ไม่ว่าจะ structured, semi-structured, และ unstructured เพราะตัวเองเก็บข้อมูลในรูปแบบ file format ต่างๆได้
โดยในยุคแรกๆของ data lake ก็มี Hadoop File System (HDFS) นำร่องมาก่อนเลย จนสักเมื่อ 2015 เป็นต้นมา พวก cloud provider ต่างๆก็ออก service ต่างๆที่เป็นคอนเซปนี้ คือ AWS S3, Azure Data Lake, และ Google Cloud Storage เรียกได้ว่าเป็น choice ที่เพิ่มขึ้นไปอีก
ข้อดีของ Data Lake พวกนี้คือราคาถูกมากๆ แถมยังเลือกได้ว่าจะเก็บ storage ประเภท hot หรือ cold storage ได้อีก (storage ที่ access เข้าไปดูข้อมูลบ่อย หรือน้อยมากๆต่อปี) ยิ่ง cold storage ก็ราคาถูกลงไป สามารถเก็บข้อมูลเก่าๆที่ไม่ค่อยใช้แล้ว backup ไว้ได้
กลับมาที่หัวข้อของเรา ความจริงแล้วใน generation นี้ Data Lake นำมาใช้คู่กับ Data Warehouse โดยที่จะเก็บพวก raw data ใน Data Lake แล้วค่อย transform ข้อมูลเป็นรูปแบบ structured นำเก็บไว้ที่ data warehouse เพื่อสะดวกแก่การ analyze ข้อมูลปลายทางเช่นเดิม
Flow ของการ generation นี้เป็นยุคที่นิยมที่สุดและถูกใช้อย่าง stable แล้วในหลายๆองค์กร
การเปลี่ยนแปลงจาก generation เก่ามา generation นี้ ข้อดีคือทำให้การทำ Machine Learning ที่เคยดึงข้อมูลจาก Data warehouse ก็ยิ่งมีตัวเลือกมากขึ้นเพราะไปดึงข้อมูลจาก Data Lake แทน ซึ่งมีข้อมูลที่จำนวนมากกว่าในการทำ model
แต่ข้อเสียของ generation ก็ยังมีอยู่ ตัวอย่างเช่น
- Reliability — หากทำ ETL ไว้ไม่ดี data lake และ data warehouse ก็จะมีข้อมูลที่ไม่สอดคล้องกัน ดึงจาก data lake ก็ได้อย่างนึง ดึงจาก data warehouse ดันได้อีกอย่างหนึ่ง
- Data Staleness — ส่วนที่เป็นจุดบอดคือ data warehouse อาจได้ข้อมูลที่ช้ากว่า data lake เนื่องจากรอบของข้อมูลที่ยังมาไม่ถึง เพราะอาจจะต้องรอเป็นวัน
- Machine Learning ทั้งหลายต้อง process data ที่มากขึ้นด้วยวิธี non-SQL code ดังนั้น data warehouse อาจจะไม่พอละ จึงต้องแก้ปัญหาด้วยการ export files ออกจาก Data Warehouse แล้วพวก ML ทั้งหลายก็ไปอ่านจากไฟล์ตรงนี้แทน ซึ่งข้อเสียคือเราสูญเสียฟีเจอร์ของ data warehouse ในเรื่องของ ACID, data versioning, และ indexing ไป
- พอต้อง export ไฟล์มาอีกรอบ ก็ทำให้ต้องเสียค่า storage เพิ่มเป็น 2 เท่าเข้าไปอีก
Third Generation
จนมาถึง generation สุดท้าย ในปี 2020 Databricks ก็ได้นิยาม generationใหม่ที่เป็นตัวเอกของเรื่องคือ Data Lakehouse
Data Lakehouse คือส่วนผสมของ Data Lake และ Data Warehouse
- คล้าย Data Lake: เก็บ raw data เหมือนกันซึ่งอยู่ในรูป open file format (Parquet file, ORC file)
- คล้าย Data Warehouse: เอาข้อดีของ Data Warehouse เข้ามาในเรื่องความสามารถทำ data versioning, auditing, indexing, caching เพราะมีการทำ metadata layer บน storage อีกทีเพื่อระบุว่าเป็น table version ไหน โดยใช้ tools อย่าง Delta Lake และ Apache Iceberg ช่วย
- Support บน cloud environment ได้ดีมากๆ: แต่ก็ support on-premise storage ได้อยู่เหมือนกันอย่าง HDFS
- ส่วนของ ML: มี ML library เช่น TensorFlow, Spark MLlib ก็สามารถอ่าน Parquet, ORC files ได้แล้ว และ ใช้ dataframe ในการจัดการข้อมูล จึงมี declarative DataFrame API เกิดขึ้นมาในการ query ข้อมูลจาก Lakehouse
Lakehouse ถือว่าเริ่มมีบทบาทที่สำคัญ จะเห็นได้ว่ามี data warehouse หลายๆเจ้าอย่าง Azure Synapse, BigQuery, AWS Redshift, Snowflake เองก็มีฟีเจอร์ External table ได้แล้ว คือ query ข้อมูลจาก Data Lake อีกทีแล้วทำตัวเองเป็น Query Engine อย่างเช่น เก็บข้อมูลใน Cloud storage แต่ให้ BigQuery เป็นตัว query ไปหา
จริงๆแล้วไม่เพียงแต่ data warehouse ที่ query ได้ ก็ยังมี SQL engines ต่างๆเช่น Spark SQL, Presto, Hive และ AWS Athena ที่สามารถทำหน้าที่เป็น Query Engine ได้เหมือนกัน (แต่ถึงอย่างไร พวกนี้ก็ไม่ใช่ Data Lake นะ อย่าเข้าใจผิด)
อีกเรื่องที่สำคัญมากคือในส่วนของการทำ Metadata Layer
กล่าวคือเรามีตัวช่วยอย่าง
- Delta Lake ที่ถูกพัฒนาโดย Databricks โดยเก็บในรูปแบบ Parquet format
- Apache Iceberg ถูกพัฒนาโดย Netflix ที่เก็บทั้ง Parquet และ ORC formats
ซึ่งเป็นส่วนที่พัฒนาไปจาก generation ก่อนๆในเรื่อง
- Data Quality: เพราะอย่าง Delta Lake จะมี schema enforcement หรือ schema validation เป็นตัวเช็คว่า table ที่เขียนจะมี schema ตรงกับที่เซ็ตไว้ ไม่เปลี่ยนมั่วซั่วไประหว่างทางโดยเราไม่รู้ ซึ่งมันก็จะป้องกันไม่ให้ write ทันที
- Data Governance: เพราะทำในเรื่องของ access control และ audit logging ได้ เช่น metadata layer นี้จะเช็คว่า user จะสามารถเข้าไปดูข้อมูล raw data ได้ก็ต้องมีสิทธิ์หรือ credential ก่อน
สรุป
เราได้เข้าใจว่าแต่ละยุคสมัยของ Data Analytics platform มีตั้งแต่ยุคที่มีแต่ Data Warehouse เป็นหลัก จนกระทั่งมี data หลายๆประเภทที่ต้องรับมืออย่าง unstructured data ทำให้ต้องมี Data Lake มารองรับตรงนี้ แต่ถึงกระนั้น เรายังคงต้องการฟีเจอร์ที่สำคัญเช่น ACID, data versioning ที่ Warehouse มี จึงเกิดเป็นส่วนผสมของ Data Lake และ Data Warehouse คือ Data Lakehouse ที่เป็นหัวใจหลักของบทความของเรา
Lakehouse เริ่มเป็นที่รู้จักและถูก implement ในหลายๆบริษัทแล้ว ในอนาคตเราจะได้เห็นคำๆนี้ในแวดวง data แน่นอน
ref:
- CIDR paper: http://cidrdb.org/cidr2021/papers/cidr2021_paper17.pdf
- https://databricks.com/glossary/data-lakehouse
- https://databricks.com/blog/2020/01/30/what-is-a-data-lakehouse.html