Data Engineering Project — Cửa hàng bán lẻ phần 3 — Data Warehousing
Mở đầu
Đây là phần 3 của "Data Engineering Project - Cửa hàng bán lẻ" series. Trong 2 bài viết trước, tôi đã trích xuất dữ liệu rượu whiskey qua web scraping, thiết kế MySQL database được sử dụng như nguồn dữ liệu chính của tổ chức và load dữ liệu vào đó.
Cơ sở dữ liệu hiện tại sẽ trông như thế này:
Phần này sẽ tập trung vào 1 thành phần quan trọng trong kiến trúc dữ liệu của tổ chức chính là: Data Warehouse. Nói 1 cách đơn giản, kho dữ liệu là 1 cơ sở dữ liệu quan hệ khác được sử dụng cùng với cơ sở dữ liệu trung tâm của tổ chức.
Kho dữ liệu sao chép dữ liệu từ cơ sở dữ liệu của tổ chức và lưu trữ dữ liệu đó theo 1 cách cụ thể giúp nó có hiệu suất cao cho các hoạt động đọc. Nó cho phép tổ chức có 1 nguồn dữ liệu lịch sử duy nhất bao gồm các quá trình kinh doanh chính trong tổ chức.
Kho dữ liệu có thể là tại chỗ, có nghĩa là tổ chức sẽ phải tự triển khai và duy trì nó hoặc nó có thể là 1 dịch vụ trả phí của 1 nhà cung cấp đám mây. Tất cả phụ thuộc vào trường hợp sử dụng. Công cụ này rất cần thiết để phân tích dữ liệu 1 cách chính xác và đưa ra các quyết định liên quan đến BI.
Tôi sẽ sử dụng MySQL làm data warehouse. Vì vậy nói cách khác, cả cơ sở dữ liệu trung tâm của tổ chức và kho dữ liệu sẽ được xây dựng tại chỗ bằn MySQL.
Các bước của project
1. Thiết kế kho dữ liệu - dựa trên lý thuyết
2. Thiết kế kho dữ liệu - dựa trên thực tế
3. Tạo triggers để tự động hóa việc truyền dữ liệu
Bước #1 - Thiết kế kho dữ liệu - Dựa trên lý thuyết
Trước khi bắt đầu thiết kế kho dữ liệu, điều quan trọng là ta phải hiểu nhu cầu của tổ chức, kỳ vọng của người dùng, quy trình kinh doanh nào sẽ liên quan, vv.
1. Chọn quy trình kinh doanh
Trước tiên, ta nên hiểu tổ chức đang thực hiện loại quy trình nào. Quy trình kinh doanh là các hành động và hoạt động mà doanh nghiệp thực hiện để tạo ra 1 sản phẩm hoặc 1 dịch vụ. Các hoạt động này thường cũng sẽ tạo ra dữ liệu.
Ví dụ: nhận đơn đặt hàng, tạo giao dịch, đăng ký vào 1 website, giao sản phẩm, vv. Đối với project này, quy chính kinh doanh đơn giản chính là tập hợp các hành động cần thiết để bán rượu whisky cho khách hàng.
2. Declare the Grain
Declaring the grain trong Data warehouse có nghĩa là trả lời câu hỏi sau: "Quy trình nghiệp vụ nào là 1 hàng trong bảng dữ kiện sẽ mô tả?"
Ví dụ: Trong trường hợp này, tôi đang thiết kế kho dữ liệu cho 1 cửa hàng bán lẻ nhỏ bán đa dạng các loại đồ uống whisky.
Theo phần 1, quy trình kinh doanh chính trong tổ chức là bán rượu whisky. Vì vậy, the grain trong trường hợp này sẽ mô tả 1 khách hàng mua 1 sản phẩm tại 1 thời điểm cụ thể (1 khách hàng mua nhiều sản phẩm sẽ có nhiều hàng).
3. Xác định Dimensions
Dimensions trong Data Warehouse là các bảng bao gồm các mô tả về các thuộc tính trong bảng dữ liệu. Ví dụ: dimension về khách hàng sẽ là bảng giữ thông tin về khách hàng trong tổ chức. Nó sẽ được kết nối với bảng fact thông qua khóa ngoại.
Trong phần này, ta cần hiểu rõ về dimensions trong data warehouse, chúng phải đại diện cho: "ai, cái gì, ở đâu, khi nào, tại sao và như thế nào" được liên kết với quy trình kinh doanh được chọn từ phần 1. Trong trường hợp này, quy trình kinh doanh chính là bán rượu whiskey, vậy dimensions sẽ là: khách hàng, nhân viên, sản phẩm và ngày.
4. Xác định Facts
Fact trong data warehouse lưu trữ dữ liệu giao dịch định lượng như các phép đo và chỉ số cho quy trình kinh doanh từ phần 1.
Trong trường hợp này, các phép đo cho 1 giao dịch của 1 sản phẩm đơn lẻ sẽ là:
* Khách hàng
* Nhân viên
* Bộ phận
* Sản phẩm
* Ngày tháng
* 4 số cuối của khách hàng
* Quốc gia của khách hàng
* Nhà cung cấp thẻ tín dụng của khách hàng
* Giá
Bước #2 - Thiết kế kho dữ liệu - Dựa trên thực tế
Bây gia ta đã có sự đồng thuận trong tổ chức về cách thiết kế kho dữ liệu, hãy bắt đầu thực sự tạo ra nó. Tôi sẽ sử dụng mô hình thiết kế giản đồ hình sao để áp dụng kích thước cho kho dữ liệu.
Ngoài ra, trong bài viết thứ 2 của chuỗi bài viết này, tôi đã load dữ liệu vào MySQL RDBMS là nơi hoạt động như cơ sở dữ liệu trung tâm của tổ chức. Trong phần này, tôi sẽ sử dụng MySQL để thiết kế kho dữ liệu theo tiếp bước 1.
Trước tiên, hãy tạo 1 schema mới cho kho dữ liệu.
1. Tạo kho dữ liệu trong 1 schema mới
Bây giờ hãy cùng tạo các dimension từ bước 1, các dimension là: khách hàng, nhân viên, sản phẩm và ngày giờ.
2. Tạo Date dimension
Date dimension là 1 trong những dimension quan trọng nhất mà ta có thể thêm vào kho dữ liệu. Nó sẽ cho phép các user trong tổ chức có thể nhận được thông tin về các giao dịch trong các giai đoạn khác nhau.
Đây là 1 trong những dimension mặc định phải luôn có trong kho dữ liệu. Thêm vào đó, ta có thể tạo dimension này từ hư không, không giống như các dimension còn lại phải phụ thuộc vào dữ liệu thực tế từ cơ sở dữ liệu chính. Tôi sẽ tạo ra daily dates, kể từ ngày giao dịch đầu tiên được thực hiện trong tổ chức cho đến năm 2100.
Cùng check ngày của giao dịch đầu tiên từ cơ sở dữ liệu trung tâm:
Vậy giao dịch đầu tiên là vào ngày 01-01-1990. Hãy cùng tạo daily dates từ 1990 cho đến 2100. Tôi nghĩ Python sẽ phù hợp vì vậy tôi sẽ dùng Python cho việc này và chèn bảng vào MySQL.
Kết nối Python với MySQL
Tạo daily dates và đưa vào dataframe
Tạo ra bảng date
Cùng xem kết quả:
Và đó là date dimension, hãy cùng load bảng vào MySQL nhé!
Load date dimension vào MySQL
Trước tiên tạo 1 bảng trống:
Giờ ta có thể chèn dữ liệu vào bảng:
Bây giờ date dimension đã được lưu trữ trong MySQL.
3. Tạo dimension khách hàng
Tôi sẽ tạo dimension này bằng việc copy dữ liệu từ cơ sở dữ liệu trung tâm của tổ chức (từ part 2 của series).
Hãy cùng xem kết quả:
4. Tạo dimension nhân viên
Cùng xem kết quả:
5. Tạo dimension sản phẩm
Và như thế, tôi đã hoàn thành các dimension cho kho dữ liệu. Hãy tiếp tục bằng việc tạo bảng fact theo step 1. Tôi sẽ sử dụng dữ liệu lấy từ cơ sở dữ liệu trung tâm để hỗ trợ việc tạo bảng này:
Và đã xong. Giờ ta đã có 1 data warehouse lưu trữ dữ liệu lịch sử về các giao dịch khác nhau. Mỗi hàng đại diện cho 1 lần mua hàng của khách hàng trong 1 ngày.
Hãy cùng xem bảng fact mới trông như thế nào:
Và cùng xem qua data warehouse trông như thế nào:
Cần lưu ý là bảng fact này khá là nhỏ và nó chỉ dành chỉ mục đích của project này. Mỗi bảng fact thực tế sẽ có 100 cột cho mỗi giao dịch.
Giờ chúng ta đã có 1 data warehouse sẽ được sử dụng cho việc phân tích và phục vụ nhu cầu phân tích sâu và viết báo của các BI engineer, các data scientist.
Bước #3 - Tạo các Triggers để tự động hóa việc truyền dữ liệu
Bước tiếp theo là tạo đa dạng các triggers sẽ giúp việc load dữ liệu từ cơ sở dữ liệu trung tâm đến data warehouse và đồng bộ hóa cơ sở dữ liệu và data warehouse khi 1 số tình huống nhất định xảy ra trong tổ chức. Hãy cùng chứng minh 1 số tình huống có thể xảy ra.
Trigger #1. Thêm khách hàng
Trigger này sẽ được kích hoạt bất cứ khi nào 1 khách hàng mới được thêm vào cơ sở dữ liệu trung tâm. Trigger sẽ chèn dữ liệu khách hàng mới vào kho dữ liệu.
Để làm rõ thì cơ sở dữ liệu chính được gọi là: whiskey_retail_shop và kho dữ liệu được gọi là dwh_whiskey. Vì vậy, sau khi có sự thêm mới trên bảng whiskey_retail_shop.customers thì trigger sẽ tự động insert thông tin đó vào dwh_whiskey.dwh_customers.
Các loại triggers này sẽ đảm bảo rằng cơ sở dữ liệu trung tâm và kho dữ liệu luôn được đồng bộ hóa.
Ví dụ
Giả sử rằng 1 khách hàng mới đã đăng ký vào trang web của tổ chức. Trang web theo dõi dữ liệu khách hàng và tự động chèn dữ liệu vào cơ sở dữ liệu trung tâm. Giả sử rằng Legolas Greenleaf là 1 khách hàng mới và thông tin chi tiết của anh ta hiện đã được lưu trữ trong cơ sở dữ liệu chính bằng lệnh insert.
Cùng check Legolas bên trong cơ sở dữ liệu trung tâm
Bây giờ cùng check xem trigger có được kích hoạt không. Legolas bây giờ cũng sẽ tồn tại trong data warehouse.
Nó đã hoạt động. Giờ ta có thể giả định 1 cách an toàn rằng các database đã được đồng bộ hóa.
Trigger #2. Thêm nhân viên
Giống như trước, trigger này sẽ được kích hoạt khi 1 nhân viên mới được thêm vào cơ sở dữ liệu trung tâm, nó cũng sẽ thêm dữ liệu vào data warehouse.
Ví dụ
Giả sử rằng 1 nhân viên mới đã được tuyển dụng. Bộ phân nhân sự đã đăng ký 1 biểu mẫu với thông tin chi tiết của nhân viên mới sẽ tự động chèn dữ liệu của anh ta vào cơ sở dữ liệu trung tâm, như sau:
Cùng check thông tin nhân viên mới trong cơ sở dữ liệu trung tâm
Giờ cùng check xem trigger có hoạt động không. Nhân viên mới Elrond sẽ tồn tại trong data warehouse
Trigger #3. Hóa đơn mới
Trigger sẽ insert 1 dòng mới tới bảng fact trong data warehouse khi 1 hóa đơn mới được tạo.
Ví dụ
Giả sử rằng 1 khách hàng mới vừa thực hiện 1 giao dịch và dữ liệu hóa đơn được được thêm vào cơ sở dữ liệu trung tâm.
Cùng check xem liệu thông tin về giao dịch mới có xuất hiện trong bảng fact của data warehouse không.
Trigger hoạt động ổn. Bất cứ khi nào khách hàng mua hàng, dữ liệu sẽ được tự động hóa với data warehouse.
Và đó là toàn bộ cho phần 3 của project. Trong phần tới, tôi sẽ đi sâu vào vị trí của các nhà phân tích trong tổ chức và có gắng tạo ra 1 số phân tích đơn giản.
See yyah :D
Comments
Post a Comment