Xin chào mọi người, ở bài viết SCD (Slowly Changing Dimension) là gì? Các loại SCD và ví dụ cụ thể (https://magz.techover.io/2023/07/03/scd-slowly-changing-dimension-la-gi-cac-loai-scd-va-vi-du-cu-the/) chúng ta đã nắm được sơ lược về SCD type 1. Hôm nay chúng ta cùng đi tìm hiểu kỹ hơn về SCD type 1 và các test cases cần thiết trong quá trình kiểm thử nhé!
1. Tìm hiểu về SCD type 1 (Ghi đè – Overwrite)
Ở SCD1 các dữ liệu mới sẽ ghi đè dữ liệu cũ, không theo dõi dữ liệu lịch sử.
Ví dụ:
Original Record – Dữ liệu gốc
Cust_ID | Name | City |
---|---|---|
1001 | Nguyễn Văn A | HCM |
1002 | Nguyễn Văn B | Nam Định |
Updated Record – Dữ liệu được thay đổi
Cust_ID | Name | City |
---|---|---|
1001 | Nguyễn Văn A | Hà Nội |
1002 | Nguyễn Văn B | Nam Định |
Ưu điểm: Dễ bảo trì.
Nhược điểm: Không kiểm tra được dữ liệu lịch sử.
2. SCD1 validation test cases
Kiểm tra SCD Loại 1 khá đơn giản vì chúng ta có thể đạt được kết quả bằng cách so sánh đơn giản giữa dữ liệu nguồn và dữ liệu đích. Ví dụ chúng ta có bẳng nguồn và bảng đích như sau:
Employee table – bảng nguồn với các cột:
Cust_ID |
---|
Name |
City |
EMPLOYEE_DIM SCD Type 1 – bảng đích với các cột dưới đây:
Cust_ID |
---|
Name |
City |
Partition_date |
2.1 Test case 1: Chúng ta sẽ đi kiểm tra số lượng cột, tên cột và data type từng cột có đúng với yêu cầu document không?
VD: Cus_ID có type là bigint, thì trên bảng đích data type cũng là bigint.
Target Query: Describe Table_Name
;
or Desc Table_Name
2.2 Test case 2: Kiểm tra số lượng records.
Source Query: Select count (*) from db.Emlpoyee
Target Query: Select count (*) from db.Employee_Dim
2.3 Test case 3: Kiểm tra logic insert
- Insert thêm records mới ở bảng nguồn:
Chúng ta sẽ thêm các records mới tại bảng nguồn, rồi khởi chạy job ETL. Sau khi job chạy thành công thì kiểm tra dữ liệu ở bảng đích có lên đúng và đủ so với bảng nguồn không.
- Delete records ở bảng nguồn
Ngược lại với thêm mới, chúng ta sẽ xóa bớt dữ liệu ở bảng nguồn rồi chạy job ETL. Sau khi job chạy thành công thì kiểm tra dữ liệu ở bảng đích và bảng nguồn có mapping với nhau không.
2.4 Test case 4: Kiểm tra logic update
Tại bảng nguồn chúng ta sẽ update các bản ghi trước đó, rồi chạy job ETL. Sau khi job chạy thành công, kiểm tra dữ liệu bảng đích có lên đúng so với bảng nguồn không.
2.5 Test case 5: Kiểm tra dữ liệu có bị duplicate không? – Xác minh tính duy nhất của dữ liệu
Target Query:
Select Cust_ID, Name, City, Partition_date, count(*) from db.Employee_Dim group by Cust_ID, Name, City, Partition_date having count(*) > 1
;
Select Cust_ID, count(Cust_ID) from db.Employee_Dim group by Cust_ID having count(Cust_ID) > 1
;
2.6 Test case 6: Kiểm tra dữ liệu null
Target Query:
Select * from db.Employee_Dim where Cust_ID is not null
;
Kết luận
- SCD1: các dữ liệu mới sẽ ghi đè dữ liệu cũ, không theo dõi dữ liệu lịch sử
- Kiểm tra số lượng bản ghi bảng đích so với bảng nguồn
- Sau khi thay đổi dữ liệu bảng nguồn (insert, delete, update) phải thực hiện quy trình ETL để EMPLOYEE_DIM có dữ liệu mới nhất
- Sửa đổi một vài bản ghi trong bảng nguồn bằng cách cập nhật các giá trị trong các cột chính (key columns) để kiểm tra logic update
- Xác minh tính duy nhất của dữ liệu
- Xác minh rằng sự khác biệt là như mong đợi
Trên đây là những chia sẻ của mình về testing SCD type 1 trong ETL testing, mong rằng bài viết này sẽ giúp ích được cho các bạn. Nếu mọi người có thắc mắc hay câu hỏi gì đừng ngần ngại comment và cùng nhau giải đáp nhé!
Hẹn gặp lại mọi người trong bài viết tiếp theo.
2 comments
Rất hữu ích
Hí…