Intro to Data Warehouse | Data Warehouse คืออะไร แตกต่างกับ Database ยังไง

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

ปัญหาของ Database

ลองนึกภาพว่าคุณทำงานอยู่แผนก IT ในบริษัทแห่งหนึ่ง โดยมีหน้าที่คอย Query SQL เพื่อคอยตอบคำถามให้กับผู้บริหาร คำถามที่ผู้บริหารส่วนใหญ่ถามจะเป็นประมาณนี้

  • ยอดขายของสินค้าที่มาจากบริษัท ABC ในปี 2015
  • สรุปยอดขายรายปีของ 5 ปีล่าสุด

แล้วคุณมี Relational Database ซึ่งออกแบบด้วยวิธี Normalization ดังนี้

ตัวอย่าง Relational Database ที่ออกแบบด้วยวิธี Normalization

ลองคิด SQL Command ที่ใช้ตอบคำถามเมื่อกี้นี้ดูนะครับ

ยอดขายของสินค้าที่มาจากบริษัท ABC ในปี 2015: 
SELECT Items.Name as ItemName, Items.Price * Item_sold.Qty as TotalSale FROM Purchases INNER JOIN Item_sold ON Purchases.TransID = Item_sold.TransID INNER JOIN Items ON Item_sold.ItemID = Items.ItemID INNER JOIN Suppliers ON Items.SupplierID = Suppliers.SupplierID WHERE CompanyName = ‘ABC’ AND DATEPART(yyyy, Purchases.Date) = 2015

สรุปยอดขายรายปีของ 5 ปีล่าสุด: 
SELECT DATEPART(yyyy, Purchases.Date) AS Year, SUM(Purchases.Amount) AS Total FROM Purchases GROUP BY DATEPART(yyyy, Purchases.Date) ORDER BY DATEPART(yyyy, Purchases.Date) DESC

SQL Command ที่เขียนไปข้างต้นอาจจะไม่ถูกต้อง 100% นะครับ แต่เราจะสังเกตได้ว่า

  1. SQL Command ค่อนข้าวยาวและซับซ้อน มีการเรียกใช้ Function ที่ไม่คุ้นตา เช่น DATEPART เป็นต้น
  2. ใช้คำสั่ง JOIN ค่อนข้างเยอะ ซึ่งคำสั่ง JOIN เป็นคำสั่งที่ทำงานช้ามาก
  3. เมื่อมีการเปลี่ยนแปลงคำถาม SQL Command จะเปลี่ยนรูปแบบการเขียนแตกต่างกันอย่างสิ้นเชิง

ซึ่งปัญหาที่กล่าวมานี้ ทำให้การออกแบบ Relational Database แบบ Normalization ไม่เหมาะกับการ Query เพื่อตอบคำถามผู้บริหาร

Data Warehouse…พระเอกของเรา

Data Warehouse เป็น Relational Database ออกแบบด้วยวิธี Dimensional Modeling ซึ่งลักษณะของ Schema จะเหมือนเป็นรูปดาว หรือเราเรียกว่า Star Schema นั่นเอง

ตัวอย่าง Data Warehouse (Relational Database ที่ออกแบบด้วยวิธี Normalization)

ให้คุณลองใช้ SQL Command Query ข้อมูลจาก Data Warehouse นี้เพื่อตอบคำถามแบบเดียวกับที่ทำไปเมื่อซักครู่นะครับ

ยอดขายของสินค้าที่มาจากบริษัท ABC ในปี 2015: 
SELECT Product_Dim.Name AS ItemName, Purchases_Fact.Total AS TotalSale FROM Purchase_Fact INNER JOIN Product_Dim ON Purchase_Fact.ProductKey = Product_Dim.ProductKey INNER JOIN Time_Dim ON Purchase_Fact.TimeKey = Time_Dim.TimeKey WHERE Product_Dim.SupplierName = ‘ABC’ AND Time_Dim.TimeYear = 2015

สรุปยอดขายรายปีของ 5 ปีล่าสุด: 
SELECT Time_Dim.TimeYear AS Year, Total FROM Purchases_Fact INNER JOIN Time_Dim ON Purchase_Fact.TimeKey = Time_Dim.TimeKey ORDER BY Time_Dim.TimeYear

สังเกตได้ว่าจากตัวอย่างนี้

  1. SQL Command ยาวและซับซ้อนน้อยลง ไม่มีการเรียกใช้ Function แปลก ๆ แล้ว (อาจจะเห็นว่า SQL มันยาวพอ ๆ กัน แต่ชื่อ Table ใน Data Warehouse มันยาวกว่านะ 55555)
  2. จำนวนการ Join ลดลงจาก Database ต้องใช้ Join ถึง 3 ครั้ง เหลือแค่ 2 ครั้ง 
    ยิ่งไปกว่านั้น ต่อให้มีคำถามที่ต้อง Join ทุก Table เพื่อตอบคำถาม ใน Data Warehouse ข้างต้นจะ Join กันเพียงแค่ 3 Table เท่านั้น ผิดกับ Database ที่ต้อง Join กันถึง 5 ครั้งเลยทีเดียว
  3. วิธีการ Query ค่อนข้างจะคล้ายคลึงกัน

เหตุผลที่ Database ที่ออกแบบด้วยวิธี Normalization ไม่เหมาะสำหรับการนำมาวิเคราะห์ เพราะ Normaliztion ใช้เพื่อออกแบบ Database ที่ใช้ในการจัดเก็บข้อมูลที่รวดเร็ว ส่วน Data Warehouse ถูกออกแบบขึ้นมาเพื่อ Query ข้อมูลไปวิเคราะห์ได้ง่ายขึ้น คนที่ใช้ SQL ไม่คล่องก็สามารถ Query ข้อมูลไปวิเคราะห์เองได้

เปรียบเทียบระหว่าง Database กับ Data Warehouse

ต่อจากนี้ไป ถ้าผมพูดถึงคำว่า Database ผมจะหมายถึง Relational Database ที่ถูกออกแบบด้วยวิธี Normalization ถ้าผมพูดถึงคำว่า Data Warehouse ผมจะหมายถึง Relational Database ที่ถูกออกแบบด้วยวิธี Dimensional Modelling นะครับ

Task/System

Database จะถูกใช้ในงานที่เกี่ยวข้องกับการจัดการ Transaction เป็นหลักครับ เราจะเรียกระบบที่มีการจัดการ Transaction เป็นหลักว่า Online Transaction Processing System หรือที่เราเรียกย่อ ๆ ว่า OLTP ครับ ระบบแบบนี้จะเน้นที่การ Insert, Delete, Update ข้อมูลที่รวดเร็วครับ

ส่วน Data Warehouse จะถูกใช้ในงานที่เกี่ยวกับการวิเคราะห์เป็นหลักครับ เรียกระบบแบบนี้ว่า Online Analytical Processing System หรือ OLAP ครับ ระบบแบบนี้จะเน้นที่การ Query ข้อมูลที่รวดเร็ว (และง่าย) ครับ

Data

ข้อมูลใน Database จะเป็นข้อมูลที่ค่อนข้างอัพเดตพอสมควรครับ เพราะว่าข้อมูลเหล่านี้จะถูก update ตลอดเวลาครับ เรียกว่า Operational data หรือ Transaction data ก็ได้ครับ

ส่วนข้อมูลใน Data Warehouse จะค่อนข้างเป็นข้อมูลในอดีต เพราะข้อมูลพวกนี้ไม่ได้ถูก update บ่อยเท่าข้อมูลใน Database ครับ

Query

การ Query ข้อมูลใน Database ส่วนใหญ่มักจะ Query ข้อมูลมาใช้เพียงแค่ Record เดียวครับ เช่น นาย A ได้รับเงินเดือนเดือนละเท่าไหร่ เราสามารถใช้ข้อมูลเพียงแค่ Record เดียวมาตอบคำถามได้

ส่วนการ Query ข้อมูลใน Data Warehouse มักจะ Query ข้อมูลมาหลายร้อยหลายพัน record มาใช้ครับ เช่น ผู้บริหารอยากรู้ว่ากำไรของร้านค้าในแต่ละภูมิภาคเปลี่ยนไปในแต่ละปีอย่างไรบ้าง คำถามในลักษณะนี้ต้องอาศัยการ Query ข้อมูลหลาย Record มาเพื่อตอบคำถามครับ

Usage

การใช้งาน Database มักจะใช้ในลักษณะเดิม ๆ ก็คือมีการ Insert, Update, Delete ข้อมูลในลักษณะเดิม ๆ ครับ เช่น เพิ่ม User ใน Database ก็ใช้ SQL Command แบบเดียวตลอด

ส่วนการใช้งาน Data Warehouse ลักษณะการใช้งานมักจะเปลี่ยนไปตลอดเวลา กล่าวคือ ผู้บริหารมักจะเปลี่ยนคำถามที่อยากรู้เสมอ จึงทำให้ SQL Command ที่ใช้ Query ข้อมูลเปลี่ยนไปเสมอ

Server

ผมอยากให้ผู้อ่านนึกถึงร้านสะดวกซื้อ 7–11 ครับ ร้าน 7–11 มันมีหลายสาขาในประเทศไทยซึ่งในแต่ละสาขาก็จะมีการซื้อขายกัน ก็คือจะมีการ Insert ข้อมูลการซื้อสินค้าของลูกค้าบ่อย ๆ เพื่อให้สามารถเช็คจำนวนของใน Stock รวมทั้งยอดขายของแต่ละสาขาได้ นั่นหมายความว่าใน 1 สาขาของร้าน 7–11 จะต้องมี Server ที่ใช้เก็บข้อมูล 1 ตัวครับ

ส่วน Data Warehouse ผู้ใช้งานเป็นผู้บริหารหรือแผนก Marketing ของบริษัท CP (เจ้าของ 7–11) ครับ ซึ่งถ้าผู้บริหารหรือแผนก Marketing ต้องการ Query ข้อมูลเพื่อตอบคำถาม ซึ่งคำถามส่วนใหญ่จะเป็นคำถามภาพรวมซะส่วนใหญ่ เช่น แต่ละสาขาทำกำไรได้เท่าไหร่ในแต่ละปี คำถามในลักษณะนี้จะต้องอาศัยข้อมูลจากทุก ๆ Database Server จากทุกสาขา ซึ่งจะเสียเวลามากในการดึงข้อมูลมาตอบคำถาม ดังนั้น วิธีที่ทำกันคือในทุก ๆ วัน หรือทุก ๆ สัปดาห์จะนำข้อมูลในแต่ละสาขามาเก็บไว้ใน Server กลางของบริษัท ซึ่งต้องถูกออกแบบให้เป็น Data Warehouse เพื่อการวิเคราะห์ที่ง่ายขึ้นครับ

สรุปก็คือ Database เป็น Local Server แต่ Data Warehouse เป็น Global Server ครับ

Design

อย่างที่บอกตอนแรกครับ Database ออกแบบด้วยวิธี Normalization ส่วน Data Warehouse ออกแบบด้วยวิธี Dimensional Modelling ครับ

มี Database หรือ Data Warehouse อย่างใดอย่างหนึ่งได้มั้ย?

อย่างที่บอกว่า Database กับ Data Warehouse ถูกออกแบบมาด้วยจุดประสงค์ที่ต่างกัน เพราะฉะนั้นในแต่ละบริษัทจะมีทั้ง Database และ Data Warehouse ก็คือให้ Database เป็นตัวที่ใช้จัดเก็บข้อมูลและค่อยทำการ process เอาข้อมูลไปเก็บใน Data Warehouse เพื่อให้ Query ข้อมูลไปวิเคราะห์ง่ายขึ้น process นั้นเรียกว่า Extract-Transform-Load Process (เรียกย่อ ๆ ว่า ETL Process) โดย process นี้จะทำ Scheduling ไว้ให้ทำ process นี้ทุก ๆ ________ ก็ว่าไป (เช่น ทุก ๆ วันตอนตีสองไรงี้)

คราวหน้าถ้าผมมีเวลาว่างจะมาเขียนเรื่องวิธีการออกแบบ Data Warehouse (Dimensional Modelling) ครับ

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.