Triển khai Data Warehouse với Qlik (P1)

“Garbage in, garbage out” là một phát biểu có thể xem là chân lý đối với mọi hệ thống xử lý thông tin. Mọi phân tích đều là vô nghĩa nếu dữ liệu đầu vào không đầy đủ hoặc thiếu chính xác. Ngoài ra, trong các doanh nghiệp hiện đại, dữ liệu còn phải được cung cấp kịp thời và dễ dàng truy cập đối với các bộ phận cần sử dụng.

Đầy đủ, chính xác, nhanh chóng, thuận tiện là yêu cầu quá tầm với các hệ thống xử lý nghiệp vụ (OLTP – Online Transaction Processing), ví dụ như hệ thống quản lý sản xuất hay bán hàng. Các hệ thống như vậy (tiêu biểu là các database truyền thống như Oracle hay MySQL) hướng đến việc tối ưu hóa hàng loạt thao tác ghi nhận và cập nhật dữ liệu liên tục của nhiều người sử dụng cùng một lúc. Đọc dữ liệu nhanh không phải là ưu tiên hàng đầu.

Ngược lại, một hệ thống Busines Intelligence như Qlik lại cần nguồn dữ liệu với khả năng đọc nhanh. Các truy vấn với quy mô lớn với hàng trăm triệu dòng dữ liệu, nếu được thực hiện trực tiếp trên một hệ thống OLTP có thể gây quá tải hoặc tê liệt hệ thống. Hơn nữa, đặc thù của các BI dashboard là cần tổng hợp dữ liệu từ nhiều hệ thống khác nhau. Đọc dữ liệu liên tục từ nhiều nguồn là một quá trình tốn nhiều thời gian và thiếu ổn định, ảnh hưởng đáng kể đến khả năng cung cấp thông tin kịp thời cho người ra quyết định.

Đây là lý do ngày càng nhiều doanh nghiệp có nhu cầu triển khai Data Warehouse (kho dữ liệu) như một thành phần cốt lõi của hệ thống Business Intelligence. Hiểu một cách đơn giản nhất, Data Warehouse là một kiểu database được thiết kế theo hướng hi sinh khả năng sửa, xóa dữ liệu và không gian lưu trữ (chấp nhận lưu dữ liệu trùng lắp) để đổi lấy tốc độ truy xuất nhanh các khối lượng dữ liệu lớn.

Trước khi xem xét khả năng triển khai Data Warehouse với QlikView và Qlik Sense, chúng ta sẽ cùng tìm hiểu khái niệm, cấu trúc dữ liệu và kiến trúc của một hệ thống Data Warehouse trong bài viết sau đây.

Khái niệm Data Warehouse

Có nhiều định nghĩa khác nhau về Data Warehouse, trong đó định nghĩa phổ biến nhất là của Bill Inmon trong cuốn sách nổi tiếng “What is a Data Warehouse?” (1995):

Data Warehouse là một tập hợp dữ liệu mang tính hướng chủ đề, tích hợp, biến đổi theo thời gian và ổn định, nhằm mục đích hỗ trợ ra quyết định của nhà quản lý.

Hãy cùng phân tích 4 yếu tố quan trọng trong định nghĩa trên:

  • Hướng chủ đề (Subject-Oriented): Dữ liệu trong Data Warehouse được xác định từ đầu là để phân tích về một hoặc một số chủ đề nhất định, ví dụ “doanh thu”. Data Warehouse không phải là nơi lưu trữ thông tin về mọi mặt hoạt động của công ty hoặc tổ chức.
  • Tích hợp (Integrated): Dữ liệu được tập hợp từ nhiều nguồn và lưu trữ nhất quán. Ví dụ, cùng một mặt hàng được quản lý với 2 tên khác nhau ở 2 hệ thống quản lý kho và hệ thống bán hàng. Khi tập hợp dữ liệu về Data Warehouse, sẽ có một bước biến đổi (transform) để đưa về một tên duy nhất cho mặt hàng này.
  • Biến đổi theo thời gian (Time-variant): Dữ liệu trong Data Warehouse luôn gắn với một thời điểm cụ thể trong một giới hạn thời gian nhất định. Ví dụ, người sử dụng dữ liệu có thể truy vấn lịch sử hàng tồn kho trong 3, 6 hoặc 12 tháng trước. Đây cũng là một trong những khác biệt căn bản của Data Warehouse với các hệ thống OLTP, vốn chỉ lưu trữ trạng thái dữ liệu mới nhất (trong ví dụ trên là lượng hàng tồn kho hiện tại).
  • Ổn định (Non-volatile): Một khi đã được đưa vào Data Warehouse, dữ liệu sẽ không bị thay đổi hoặc xóa. Đặc điểm này cho phép người quản lý có được bức tranh toàn cảnh về toàn bộ lịch sử hoạt động.

Cấu trúc dữ liệu trong Data Warehouse

Để có được lợi thế đọc dữ liệu nhanh, Data Warehouse áp dụng phương thức tổ chức dữ liệu tương đối khác biệt so với các hệ thống OLTP. Nếu có cơ hội làm việc với các database truyền thống, hẳn bạn rất quen thuộc với khái niệm “chuẩn hóa” (normalize) dữ liệu, với các dạng chuẩn từ 1NF đến 6NF. Chuẩn hóa là quá trình tổ chức lại dữ liệu nhằm mục đích loại bỏ thông tin dư thừa (redundant), trong đó các dữ liệu có liên quan với nhau được lưu trữ trong các bảng dữ liệu riêng biệt.

Ở ví dụ trong hình dưới, một giáo viên (teacher) có thể dạy nhiều sinh viên (student) khác nhau. Trong một database đã chuẩn hóa, tên của một sinh viên cụ thể được lưu trữ trong bảng Students, thay vì lặp lại nhiều lần trong bảng Teachers.

Chuẩn hóa dữ liệu đảm bảo database sử dụng không gian đĩa cứng tối thiểu để lưu trữ dữ liệu. Qua đó, tốc độ tạo mới và chỉnh sửa dữ liệu cũng được tối ưu hóa vì các thao tác Insert, Update, Delete được thực hiện trên các bảng dữ liệu tương đối nhỏ và không trùng lắp. Tuy nhiên, khi cần truy vấn dữ liệu ở nhiều bảng, dữ liệu càng chuẩn hóa thì câu truy vấn càng phức tạp vì phải join nhiều bảng với nhau. Các truy vấn như vậy sử dụng rất nhiều tài nguyên hệ thống và ảnh hưởng đáng kể đến thời gian trả về kết quả.

Phi chuẩn hóa (denormalize) dữ liệu từ Database vào Data Warehouse

Dữ liệu trong Data Warehouse, mặt khác, không cần được tổ chức để chỉnh sửa nhanh và chiếm dụng ít đĩa cứng. Vì vậy, Data Warehouse thường sử dụng các cấu trúc dữ liệu phi chuẩn hóa (de-normalized). Cấu trúc này sử dụng ít bảng dữ liệu hơn vì dữ liệu được join sẵn với nhau, chấp nhận lưu trữ trùng lắp một phần dữ liệu. Đổi lại, các truy vấn cần ít thao tác join hơn và vì vậy trả về kết quả trong thời gian ngắn hơn.

Lưu ý rằng trong Data Warehouse, không nhất thiết toàn bộ dữ liệu chỉ được lưu trữ trong một bảng lớn duy nhất như trong hình trên. Đây chỉ là một ví dụ minh họa cho quá trình phi chuẩn hóa dữ liệu từ Database vào Data Warehouse. Trên thực tế, các bảng dữ liệu trong Data Warehouse được tổ chức theo mô hình Star hoặc Snowflake. Đây cũng là một chủ đề quan trọng trong Data Warehouse, sẽ được trình bày trong một bài viết khác.

Kiến trúc hệ thống Data Warehouse

Nhìn chung, kiến trúc của các hệ thống Data Warehouse thường bao gồm các lớp (layer) sau:

  • Data Source Layer
  • Data Extraction Layer
  • Staging Area
  • ETL Layer
  • Data Storage Layer
  • Data Logic Layer
  • Data Presentation Layer
  • Metadata Layer
  • System Operations Layer
Kiến trúc tổng thể của một hệ thống Data Warehouse

Data Source Layer

Lớp này chính là các hệ thống nghiệp vụ và OLTP cung cấp dữ liệu nguồn cho Data Warehouse. Dữ liệu nguồn có thể ở nhiều định dạng khác nhau: Text file, database, API, Excel file, v.v.

Data Extraction Layer

Ở layer này, dữ liệu được trích xuất từ hệ thống nguồn vào Data Warehouse. Có thể bao gồm các bước làm sạch dữ liệu (data cleansing) nhỏ, nhưng thường không có biến đổi đáng kể. Để có sự tách biệt rõ ràng giữa các layer, Data Extraction thường copy nguyên vẹn dữ liệu từ nguồn. Các bước biến đổi sẽ được thực hiện trong các layer sau.

Staging Area

Đây là nơi dữ liệu thô được lưu trữ trước khi được làm sach và biến đổi thành dữ liệu chuẩn hóa trong Data Warehouse. Có một không gian lưu trữ chung tạo thuận lợi cho các bước xữ lý dữ liệu kế tiếp.

ETL Layer

ETL là viết tắt của cụm từ “Extract-Transform-Load” – các bước căn bản trong quá trình chuẩn bị dữ liệu cho Data Warehouse. Layer này là nơi dữ liệu có được tính “intelligence” (trong “Business Intelligence”) khi áp dụng một logic định sẵn để biến đổi dữ liệu thô thành dữ liệu chuyên dùng cho phân tích.

Layer này thường là giai đoạn tốn nhiều thời gian nhất trong toàn bộ dự án Data Warehouse, và cần sử dụng các công cụ ETL chuyên dụng.

Data Storage Layer

Đây là nơi lưu trữ dữ liệu đã được làm sạch và biến đổi. Tùy theo phạm vi của dự án Data Warehouse mà kết quả của Layer này có thể là một trong các thành phần sau:

  • Data Warehouse: Với những dự án nhỏ, kết quả của bước ETL đã có thể coi là một Data Warehouse hoàn chỉnh. Doanh nghiệp sẽ truy vấn trực tiếp từ Data Storage Layer để trả lời các câu hỏi nghiệp vụ, và không có nhu cầu phát triển thêm các công cụ Data Presentation ở Layer sau.
  • Data Mart: Là một bộ phận dữ liệu của Data Warehouse, chuyên phục vụ một chủ đề phân tích hoặc một đơn vị tổ chức/ phòng ban chuyên biệt.
  • ODS (Operational Data Store): Là một database lưu trữ dữ liệu transactional không qua hoặc qua ít biến đổi. Dữ liệu trong ODS thường rất giống với dữ liệu trong hệ thống nguồn, được tập hợp từ nhiều nguồn để phục vụ cho việc lập báo cáo hoạt động hơn là xây dựng các BI dashboard.

Data Logic Layer

Layer này chứa các logic nghiệp vụ phân tích dữ liệu, ví dụ với dữ liệu doanh thu, bộ phận bán hàng cần tính trung bình gối đầu 30 ngày. Các logic này không ảnh hưởng đến quá trình biến đổi dữ liệu trong ETL layer, nhưng ảnh hưởng đến số liệu và cách thức trình bày báo cáo hoặc dashboard ở layer sau.

Data Presentation Layer

Layer này là nơi dữ liệu đến được với người dùng và chuyên viên phân tích dưới dạng bảng biểu hoặc thể hiện bằng đồ họa. Các công cụ trực quan hóa dữ liệu thường được sử dụng ở layer này.

Metadata Layer

Đây là nơi thông tin định nghĩa dữ liệu được lưu trư nhất quán cho toàn bộ các thành phần trong kiến trúc Data Warehouse. Metadata bao gồm tên bảng dữ liệu, tên field, mô tả field, kiểu và định dạng dữ liệu, v.v. Có được một định nghĩa dữ liệu thống nhất sẽ giúp bạn liên kết được nhiều nguồn dữ liệu khác nhau. Ví dụ, nhờ metadata, bạn biết được mã hàng US-001235 trong hệ thống quản lý kho và mã sản phẩm 1235 trong hệ thống bán hàng là cùng chỉ một đơn vị sản phẩm, từ đó định ra logic biến đổi dữ liệu phù hợp ở bước ETL.

System Operations Layer

Layer này bao gồm các công cụ quản lý hoạt động của toàn bộ hệ thống Data Warehouse, như trạng thái và lịch thực thi (schedule) của các tác vụ ETL, mức độ sử dụng tài nguyên hệ thống, quản lý người dùng, phân quyền, v.v.