Database, Data Warehouse, Data Lake ต่างกันยังไง?

เคยสงสัยไหมครับว่า Database, Data Warehouse, Data Lake ต่างกันยังไง?

ผมสงสัยนะ แต่ละไว้ในฐานที่ (ไม่ค่อย) เข้าใจ เพราะคิดว่าดูจากชื่อก็พอเดาได้

แต่หลังจากได้ดูคลิปนี้ ทำให้รู้ว่ามีบางส่วนที่เข้าใจผิด และทำให้เชื่อมโยงความเข้าใจหลายอย่างเข้าด้วยกัน

ผู้ทำคลิปนี้คือคุณชานดู (Chandoo) ถ้าใครชอบ Excel ชื่อนี้ต้องรู้จักแน่นอน เพราะเป็นคนที่เก่ง Excel มาก ๆ (Excel MVP) แถมยังเก่งหลายโปรแกรมด้วย

ความเจ๋งของคลิปนี้คือวิธีการอธิบาย คุณชานดูย่อยสิ่งที่ยากให้เข้าใจง่าย และสนุก (แนะนำให้ดู)

จุดด้อยเพียงนิดเดียวคือ สำเนียงภาษาอังกฤษที่อาจฟังยากเล็กน้อย ผมจึงใช้วิธีเปิด subtitle (cc) ควบคู่ไปด้วย

ถ้าใครไม่มีเวลาดู นี่คือโน้ตย่อของผมจากการดูคลิปนี้ครับ (เพิ่มความเข้าใจส่วนตัวเข้าไปด้วย)

Database, Data Warehouse, Data Lake สามคำนี้ไม่เหมือนกันเลย ทั้งในแง่ concept และการใช้งาน

Database ดูจะเป็นคำที่เข้าใจง่ายที่สุด นั่นก็คือฐานข้อมูล หรือการเชื่อมโยงตารางต่าง ๆ เข้าด้วยกันแบบ One-to-One, One-to-Many, Many-to-Many ตามหลักการของ RDBMS (Relational Database Management System)

ตาราง (Table) แบ่งได้เป็น 2 ประเภทใหญ่ ๆ คือ Fact และ Dimension

Fact คือข้อมูลที่เกิดขึ้นจริง มักบันทึกเป็น Transaction เช่น บันทึกการขายของทุกเซลล์ออเดอร์ บันทึกการผลิตสินค้าในแต่ละวัน บันทึกการเข้า-ออกของพนักงาน

Dimension คือ ตารางแสดงรายละเอียดของข้อมูล (มักเรียกกันติดปากว่า Master Data) เช่น ตารางแสดงรายละเอียดสินค้า (Product) ตารางแสดงรายละเอียดลูกค้า (Customer) ตารางแสดงรายละเอียดวัน (Calendar, เช่น แสดงว่าวันนี้อยู่ในสัปดาห์ใด เดือนใด ปีใด)

Dimension ต้องมีข้อมูลที่เป็น unique หรือข้อมูลที่ห้ามซ้ำ ศัพท์เทคนิคเรียกว่า Primary Key

ถ้าเป็นตาราง Product: Primary Key มักเป็น Product Code
ถ้าเป็นตาราง Customer: Primary Key มักเป็น Customer Code
ถ้าเป็นตาราง Calendar: Primary Key มักเป็น Date (วันที่)

หลักการของตาราง Fact คือ narrow and tall นั่นคือควรมีคอลัมน์น้อย แต่บรรทัดเยอะ (ล้านหรือหลายล้านบรรทัด) เก็บเฉพาะข้อมูลที่เป็น code (เช่น Primary Key) หรือข้อมูลที่เป็นตัวเลข (เช่น จำนวนที่ขาย ส่วนลด)

หลักการของตาราง Dimension คือ wide and short นั่นคือควรมีคอลัมน์เยอะ (เพราะเก็บรายละเอียดปลีกย่อย) แต่บรรทัดน้อย
คำว่า “น้อย” ขึ้นกับบริบทของตารางนั้น ๆ เช่น
เช่น ถ้าเป็นตาราง Product อาจมีเป็นหลักพันหรือหลักหมื่น
ถ้าเป็นตาราง Customer อาจมีได้ถึงหลักหมื่นหรือหลักแสน
แต่ถ้าเป็นตาราง Calendar หลักพันก็น่าจะพอ (ปีนึงมี 365 วัน ถ้าเก็บข้อมูล 20 ปี ก็ใช้ประมาณ 7,000 บรรทัด)

จากประสบการณ์ตรง ปัญหาที่พบคือ มีแค่ตารางเดียว และตารางนั้นมี 100 คอลัมน์ (โดยเฉพาะผู้ใช้ Excel)
เจอแบบนี้ทีไร บอกเลยร้องไห้ใหญ่มาก (T_T)
เพราะทำได้เพียง Pivot Table แต่จะวิเคราะห์เชิงลึกหรือเพิ่มเงื่อนไขซับซ้อนไม่ได้ (ยกเว้นสร้างตารางคำนวณขึ้นมาซ้อน ๆ ๆ กัน ซึ่งไม่เวิร์กและคำนวณช้า)

Data Warehouse คือการเก็บข้อมูลเพื่อใช้ในการวิเคราะห์ ทำรีพอร์ต หรือตอบคำถามต่าง ๆ
มักเก็บข้อมูลในรูปแบบของ Query นั่นคือคล้ายยึดตาราง Fact เป็นหลัก แล้วเพิ่มบางคอลัมน์จากตาราง Dimension เข้าไป
หรืออาจเพิ่มเงื่อนไขบางอย่างเข้าไป

เช่น เก็บข้อมูลเฉพาะลูกค้าที่เป็นผู้หญิงในแต่ละวัน เก็บข้อมูลเฉพาะสินค้าที่ขายในประเทศไทยในแต่ละเดือน

บางคนเรียกข้อมูลที่เก็บใน Data Warehouse ว่า Cube เพราะคล้ายดึงข้อมูลจากหลาย ๆ Dimension มารวมกัน
จากตารางที่มีแค่สองมิติ พอรวมกันหลายตารางก็เลยมีสามมิติ กลายเป็นลูกบาศก์ (Cube) นั่นเอง

ดูเผิน ๆ Data Warehouse คล้าย Database แต่ความแตกต่างคือ Data Warehouse เก็บข้อมูลที่เป็น Historical Data
นั่นคือ ถ้าอนาคตข้อมูลใน Database เกิดการเปลี่ยนแปลง ข้อมูลใน Data Warehouse จะไม่เปลี่ยนตาม

เช่น ลูกค้าชื่อสมชายเคยซื้อของวันที่ 1 มกราคม 2020
แต่ลูกค้าคนนี้เปลี่ยนชื่อเป็น พิชรวัชช์ วันที่ 1 มกราคม 2021
ดังนั้น ชื่อลูกค้าใน Database ตอนนี้คือ พิชรวัชช์
แต่ชื่อลูกค้าใน Data Warehouse ของการซื้อวันที่ 1 มกราคม 2020 ยังคงเป็น สมชาย

อีกตัวอย่างนึงคือ สินค้าเคยมีการวางขายในปี 2020 แต่ไม่มีการวางขายตั้งแต่ปี 2021 (อาจเพราะล้าสมัย หรือเหตุผลอื่น ๆ )
ถ้าเช็คใน Database จะพบว่าไม่มีสินค้าชนิดนี้แล้ว (อาจใช้การ mark for delete ในตาราง Product)
แต่ถ้าเช็คการซื้อในปี 2020 จะพบว่ายังคงมีสินค้าชนิดนี้อยู่

กลับมาที่ตาราง Excel 100 คอลัมน์
ใช่, นั่นคือการเก็บข้อมูลในรูปแบบ Data Warehouse

แล้วทำไมถึงเก็บข้อมูลในรูปแบบ Data Warehouse ไม่ได้?
เก็บได้ แต่ถ้าจะเก็บแบบนั้นจำเป็นต้องมี Database ด้วย
ถ้าเก็บเฉพาะ Data Warehouse โดยไม่มี Database จะไม่สามารถวิเคราะห์ข้อมูลเชิงลึก หรือวิเคราะห์ข้อมูลที่มีเงื่อนไขซับซ้อน (เช่น แสดงยอดขายของสินค้าที่เป็น Top 10 ของแต่ละเดือน)
ได้แต่วิเคราะห์ในรูปแบบง่าย ๆ
ถ้าพูดให้เห็นภาพคือ วิเคราะห์ได้เพียง Pivot Table ซึ่งไม่สามารถเพิ่มเงื่อนไขเชิงลึกได้
(ยกเว้นใช้ Power Pivot ซึ่งหลักการของ Power Pivot ก็คือ Data Model หรือ Database นั่นเอง)

การส่งผ่านข้อมูลจาก Database มายัง Data Warehouse คือกระบวนการที่เรียกว่า ETL (Extract Transform Load)
(ใช่, มันคือคอนเส็ปต์ของ Power Query) และต้องทำเป็นระยะ (Periodically Archive)
เมื่อส่งผ่านข้อมูลแล้วจะเก็บข้อมูลเป็นอย่างนั้นเลย ห้ามแก้ไข
ถ้าต้องการแก้ไขจริงๆ (เช่น พบว่าข้อมูลที่เก็บนั้นผิดพลาด) ต้องมีการขอ approve หลายสเต็ป เพื่อไม่ให้ข้อมูลถูกแก้ไขโดยไม่จำเป็น
(เคยขอแก้ข้อมูลแล้วไอทีไม่ยอมไหม? นั่นแหละ)

Data Lake คือการเก็บข้อมูลทุกอย่างเข้าระบบ รวมถึงข้อมูลที่ยังไม่รู้ว่าจะใช้ทำอะไร แต่คิดว่าอาจมีประโยชน์ในอนาคต

ข้อมูลที่เก็บนี้ อาจเป็นทั้ง ตาราง, ไฟล์, ภาพ หรือแม้กระทั่งวิดีโอก็ได้

พูดง่าย ๆ คือ ดัมพ์ (dump) ข้อมูลเข้าไปในระบบก่อน เผื่อจะได้ใช้สักวันนั่นแหละ

แต่ไม่ใช่ว่าจะดัมพ์ข้อมูลอะไรเข้าไปก็ได้ ข้อมูลที่ถูกดัมพ์ต้องถูกจัดและเก็บอย่างมีระบบ ศัพท์เทคนิคเรียกว่า Semi-structured (ปรึกษาหน่วยงานไอทีว่าโยนข้อมูลอะไรเข้าไปได้บ้าง และต้องโยนยังไง)

เมื่อข้อมูลถูกจัดและเก็บอย่างมีระบบแล้ว มักใช้ Algorithm, Artificial Intelligence (AI) หรือ Machine Learning (ML) เข้ามาช่วยวิเคราะห์ หรือหา pattern อะไรบางอย่าง

ในแง่ของความเป็นระเบียบแล้ว Data Lake มีน้อยมากเมื่อเทียบกับ Database, Data Warehouse
แต่ก็ต้องเก็บข้อมูลไว้ก่อน วันนี้เราอาจไม่รู้ว่าจะใช้ประโยชน์ยังไง แต่วันหน้าอาจนึกวิธีใช้ประโยชน์จากข้อมูลนี้ก็เป็นได้
(แต่ต้องเก็บแบบมีโครงสร้างนะ ไม่งั้นเก็บไปก็เรียกออกมาใช้ไม่ได้)

มาคุยกันเรื่องโปรแกรมในการจัดการบ้าง

ถ้าเป็น Database มักใช้โปรแกรมจัดการฐานข้อมูลทั่วไป
เช่น SQL Server, MS Access, Oracle หรือโปรแกรมจัดการฐานข้อมูลอื่น ๆ
ถ้าเป็นฐานข้อมูลเล็ก ๆ อาจใช้ Excel ก็ได้ (แต่ห้ามทำเป็นตารางเดียว 100 คอลัมน์นะ ขอร้อง)

ถ้าเป็น Data Warehouse อาจใช้บางโปรแกรมฐานข้อมูล เช่น SQL Server หรืออาจใช้โปรแกรมเฉพาะ เช่น BW (Business Warehouse)

ถ้าเป็น Data Lake มักใช้เป็น cloud service เช่น AWS, MS Azure, Google Big Query
ถ้ามีเซิร์ฟเวอร์ส่วนตัว อาจใช้เป็นแบบ on-premise ก็ได้ (แต่ก็ต้องมี algorithm, AI, ML ช่วยวิเคราะห์)

ส่วนโปรแกรมที่ใช้แสดงผล (ไม่ว่าจะเชื่อมต่อกับ Database, Data Warehouse, Data Lake ก็ตาม) อาจใช้โปรแกรม BI (Business Intelligence) เช่น Power BI, Tableau, Google Studio, Qlik Sense
หรือจะใช้ภาษา Python, R ช่วยวิเคราะห์และแสดงผล
หรืออาจใช้ MS Excel, Google Sheet ช่วยแสดงผลก็ได้เช่นกัน

เป็นยังไงกันบ้างกับ Database, Data Warehouse, Data Lake เชื่อว่าบทความนี้ทำให้เข้าใจอย่างแจ่มแจ้ง ไม่ต้องละไว้ในฐานที่ (ไม่ค่อย) เข้าใจแล้ว ^_^

ใครอ่านจบแล้ว ขอคนละเมนต์นะครับ

วิศวกรรีพอร์ต

คนธรรมดาผู้มีประสบการณ์ทำงานหลากหลายตำแหน่ง คลุกคลีกับการทำรีพอร์ตมาโดยตลอด สุดท้ายค้นพบแนวทางของตัวเอง จึงอยากแบ่งปันเคล็ดลับและประสบการณ์ให้กับผู้สนใจ

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.