Skip to main content

Data Warehouse

Data Warehouse คืออะไร?

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

เป้าหมายของการใช้งาน Data Warehouse

  • เพื่อความสะดวกในการทำความเข้าใจข้อมูล
  • ต้องการ performance
  • ใช้ข้อมูลที่มีคุณภาพ
  • จัดการ และตอบคำถามทางธุรกิจต่าง ๆ
  • ปลอดภัย

Operational vs. Analytical Business Processes

Operational Process

จะเป็นเรื่องที่เกี่ยวกับ operation ทั้งหมด เช่น การสั่งซื้อสินค้า การส่งมอบสินค้า การเก็บข้อมูลผู้ใช้งาน ระบบที่ใช้ในการเก็บข้อมูลจะเป็นประเภท Online Transactional Processing (OLTP)

Analytical Process

จะเป็นเรื่องที่เราจะคอยตอบคำถามอยู่เสมอว่า "เกิดอะไรขึ้น" ในธุรกิจของเราบ้าง เช่น ประสิทธิภาพของการขายในบริษัทของเราเป็นอย่างไรบ้าง ธุรกิจของเราเติบโตแค่ไหน และจะทำให้ดีขึ้นได้อย่างไร ระบบที่ใช้ในการเก็บข้อมูลจะเป็นประเภท Online Analytical Processing (OLAP)

เราสามารถใช้ OLTP มาวิเคราะห์ข้อมูลได้หรือไม่?

สามารถใช้ได้ แต่

  • การ query จะช้ากว่าแบบ OLAP
  • ตัว schema ของข้อมูล อาจจะเข้าใจยาก ถ้ามองในมุมธุรกิจ เพราะว่า schema ต่าง ๆ ถูกออกแบบมาเพื่อรองรับการใช้งาน operational process

กล่าวโดยสรุป ตัว Data Warehouse จะ

  • ถูก optmize เพื่อที่จะสนับสนุนในเรื่องการวิเคราะห์ข้อมูล
  • มีการรวบรวมข้อมูลจากหลาย ๆ แหล่งมาไว้รวมกัน
  • เป็นระบบแบบ Online Analytical Processing (OLAP)

Dimensional Modeling

หลัก ๆ เราจะใช้การ model ข้อมูลเป็นแบบตาราง facts และ dimensions

Data Warehouse Architecture

Kimball vs. Inmon

Kimball

เค้าจะเรียกว่า Dimensional Data Warehouse จะเป็นการนำข้อมูลจาก source เอามา denormalize ก่อน หรือทำข้อมูลให้ flat ซึ่งหลาย ๆ คนน่าจะรู้จักกันในชื่อ star schema หรือ snowflake schema นั่นเอง

ข้อดี

  • Reporting เร็ว เพราะว่าข้อมูลค่อนข้าง flat แล้ว ไม่ค่อยมีการ join กันระหว่าง table ทำให้ query เร็ว
  • User friendly ด้วย โดยเฉพาะฝั่ง business เพราะว่าการมี denormalized form นั้นทำให้เราไม่ต้องมานั่งดูว่ามี tables อะไรบ้างที่มีความสัมพันธ์ต่อกัน และต้องเอามา join กันท่าไหน

ข้อเสีย

  • เราอาจจะได้ complex ETL เพราะการที่จะ denormalize ได้ เราก็ต้องไป join กันหลาย ๆ tables และต้องคอยดูแลบำรุงรักษา ETL ของเราไปเรื่อย ๆ
  • เกิด data duplication ในหลาย ๆ data marts (ในกรณีที่เราแยกออกไปทำ star หรือ snowflake schema ให้ในแต่ละ business unit) และจะเริ่มเสียความเป็น single source of truth ไป ถ้าจัดการได้ไม่ดี
  • การออกแบบ ๆ Kimball นี่เป็น ongoing process ครับ เราต้องปรับไปเรื่อย ๆ ตาม business ที่เปลี่ยนแปลงไป

Inmon

เค้าจะเรียกกันว่า Enterprise Data Warehouse เป็นการนำข้อมูลจาก source เอามา clean ก่อน เสร็จแล้วเก็บใน data warehouse และเก็บอยู่ในรูป normalized form เวลาจะยกไปที่ data marts ตาม business unit ต่าง ๆ เราก็ยกไปเฉพาะข้อมูลที่จะใช้สำหรับ business unit นั้น ๆ หรือให้ business unit นั้น ๆ เข้าถึงข้อมูล หรือ table เฉพาะที่เค้าจะใช้งาน

ข้อดี

  • ข้อมูล cleaned และเป็น single source of truth แน่นอนเลย ตรงนี้ใช้ storage น้อยกว่า Kimball และ less data duplication
  • มี normalized data structure เลยสามารถทำ analysis แบบไหนก็ได้
  • ข้อมูลต่าง ๆ ในองค์กรที่อยู่ใน data warehouse จะค่อนข้างครบ เพราะเอาเข้ามาง่าย ไม่ต้องมา denormalize ก่อน

ข้อเสีย

  • Reporting จะช้า เพราะว่ามีการ join เยอะ เนื่องจากข้อมูลอยู่ในรูปแบบ normalized form
  • เกิด isolated data marts ทำให้เวลาเราอยากจะเปรียบเทียบข้อมูลกันระหว่าง 2 business units หรือ departments จะทำได้ลำบาก หรือถ้าอยากทำจริง ๆ ก็อาจจะต้องสร้างอีก mart หนึ่งมาเพื่อเปรียบเทียบข้อมูลกัน

สุดท้ายเราจะใช้แบบไหนดี?

ในงานจริง ๆ เราไม่สามารถไปจะไปทางใดทางหนึ่งได้เลย โจทย์แต่ละแบบก็ต้องการวิธีแก้ปัญหาที่แตกต่างกัน สุดท้ายถ้าเราสามารถเลือกในแบบที่เราสามารถ maximize business value ได้ก็จะดีที่สุดแล้ว

OLAP Cubes

Roll-Up & Drill Down

Roll-up คือการยุบ column หรือการ group by แกนใดแกนหนึ่ง เพื่อหาค่าผลรวม หรือค่าทางสถิติอื่น ๆ ส่วน Drill-down คือการที่เราแยก หรือ decompose ดูข้อมูลที่ละเอียดลงไปอีก เช่น เราอาจจะมี column ที่เป็นชื่อประเทศ แล้วเราอาจจะอยากดูข้อมูลเป็นรายจังหวัดนั่นเอง

Slicing & Dicing

การ Slicing คือการที่เราเลือกข้อมูล หรือ filter ข้อมูล ดึงออกมาเฉพาะข้อมูลที่เราสนใจ ยกตัวอย่างเช่น เรามีข้อมูลยอดขายเป็นรายเดือน แล้วเราอยากจะเห็นข้อมูลเฉพาะเดือน มี.ค. เราก็ filter เอาเฉพาะยอดขายของเดือน มี.ค. ออกมา ส่วน Dicing คือการที่เรา filter ข้อมูลมากกว่า 1 แกน เช่น เราอยากจะเห็นข้อมูลเฉพาะเดือน มี.ค. และ เฉพาะสาขาที่อยู่ใน กทม.

หมายเหตุ ในปัจจุบันนี้ เราจะใช้ columnar database สำหรับงาน analytics เลยไม่จำเป็นต้องใช้ท่า OLAP Cube