SCD (Slowly Changing Dimension) là gì? Các loại SCD và ví dụ cụ thể

by hanhtm2
3.5K views

Xin chào mọi người, ở bài viết trước mình đã chia sẻ về ETL testing và trong quá trình test ETL mình có nhắc đến việc chúng ta sẽ đi kiểm tra, theo dõi cách ghi/thay đổi dữ liệu trong bảng đích đã đúng yêu cầu hay chưa? Vậy cách ghi/thay đổi dữ liệu đó là gì nhỉ? Hôm nay chúng ta sẽ đi tìm hiểu về Slowly Changing Dimension (SCD) nhé!


1. Slowly Changing Dimension (SCD) là gì?

image

SCD (Slowly Changing Dimension) có thể hiểu một cách đơn giản nhất đó là: so sánh dữ liệu nguồn với dữ liệu bảng đích hiện có bằng cách sử dụng Khóa nghiệp vụ – Business key (Khóa duy nhất – Unique Key).

Nếu không có bản ghi nào khớp thì sẽ coi là Bản ghi mới hoặc Nếu bản ghi khớp thì sẽ so sánh các thuộc tính với các thuộc tính đã thay đổi nếu dữ liệu có vẻ được cập nhật thì nó cập nhật bản ghi hoặc nếu không thì nó để nguyên như không thay đổi.

Slowly Changing Dimension sẽ kiểm tra các thuộc tính cho ba trường hợp: Bản ghi mới, đã thay đổi hoặc chưa thay đổi.

2. Tại sao cần Slowly Changing Dimension?

Trong thế giới Datawarehouse, đôi khi việc theo dõi sự thay đổi kích thước theo thời gian là rất quan trọng. Điều này giúp chúng ta theo dõi dữ liệu tốt hơn và cũng tạo ra các sản phẩm hiệu quả tùy thuộc vào các trường hợp sử dụng.

3. Tại sao lại gọi là Slowly Changing Dimension?

Slowly Chaning Dimension – gọi như trên có nghĩa là chúng ta sẽ phải sử dụng thành phần này chỉ cho các bảng không được cập nhật thường xuyên.

Lưu ý: Không áp dụng cho bảng thường xuyên thay đổi, chỉ áp dụng trên các bảng kích thước (Dimension table) thay đổi chậm.

4. Các loại SCD – Ví dụ về Slowly Changing Dimensions trong data warehouse (High-Level)

Các loại SCD (High-Level)

Sau đây là các loại SCD, mỗi loại đều có một số ưu điểm và nhược điểm riêng.

  1. Type – 0 Giữ lại dữ liệu gốc
  2. Type – 1 Ghi đè lên dữ liệu hiện có
  3. Type – 2 Thêm các bản ghi mới trên cùng một bảng
  4. Type – 3 Thêm cột mới trên cùng một bảng
  5. Type – 4 Sử dụng bảng lịch sử
  6. Type – 6 Phương pháp kết hợp (Loại 1 + Loại 2 + Loại 3)

image

SCD type 1 (Ghi đè)

Loại hành động SCD đầu tiên có thể thực hiện được là ghi đè. Ở đây, các giá trị kích thước được ghi đè bởi các giá trị mới.

Ví dụ: Khách hàng Nguyễn Văn A chuyển từ HCM đến Hà Nội, thì thành phố của anh ấy sẽ được cập nhật với giá trị mới nhất, tức là Hà Nội

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

Trong ví dụ trên, khách hàng đã di chuyển từ nơi này sang nơi khác và địa chỉ gần đây đã được ghi đè lên các bản ghi hiện có.

Nhược điểm: chúng ta không thể truy xuất thông tin địa chỉ trước đây của anh ấy từ tình huống này.

SCD type 2

  • Thêm bản ghi mới
  • Chúng ta có thể nắm bắt thay đổi thuộc tính bằng cách thêm một cột mới làm khóa thay thế (VD: IsActive)

Khi giá trị của bản ghi hiện tại thay đổi, bản ghi hiện tại được đánh dấu là không hoạt động (inactive – 0) và bản ghi mới được insert vào.

Kết quả, sẽ có 2 bản ghi được liên kết với Nguyễn Văn A trong bảng được cập nhật, nhưng chỉ có phiên bản mới nhất được đánh dấu là hoạt động (active – 1).

Original Record – Dữ liệu gốc

Cust_ID Name City IsActive
1001 Nguyễn Văn A HCM 1
1002 Nguyễn Văn B Nam Định 1

Updated Record – Dữ liệu được thay đổi

Cust_ID Name City IsActive
1001 Nguyễn Văn A HCM 0
1001 Nguyễn Văn A Hà Nội 1
1002 Nguyễn Văn B Nam Định 1

Ưu điểm: thỏa mãn điểm trừ trước đó theo dõi dữ liệu lịch sử bằng cách tạo mục nhập mới trên cùng một bảng.

Nhược điểm: mặc dù nó nắm bắt dữ liệu lịch sử, nhưng nó có thể dẫn đến hoạt động tốn kém ở phía cơ sở dữ liệu.

SCD Type 3 (Thêm cột giá trị trước đó)

Loại SCD phổ biến thứ ba là thêm một cột giá trị trước đó. Ở đây, các phiên bản trước và hiện tại được duy trì trong một hàng.

Hạn chế của phương pháp này là nó sẽ chỉ có hiện tại/trước đó chứ không phải toàn bộ lịch sử

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 Current City Previous City
1001 Nguyễn Văn A Hà Nội HCM
1002 Nguyễn Văn B Nam Định

SCD Type 4: Thêm bảng mới (Bảng lịch sử)

  • Sử dụng bảng Lịch sử
  • Trong cách tiếp cận này, bảng lịch sử riêng biệt được tạo ra để theo dõi các thay đổi.
  • Bảng chính sẽ chỉ có dữ liệu mới nhất
  • Ưu điểm: Phản hồi nhanh hơn đối với các truy vấn yêu cầu dữ liệu mới nhất. Dễ quản lý và viết mã, thuận lợi cho các thuộc tính có tính biến động cao hoặc được sử dụng thường xuyên ở kích thước rất lớn.
  • Nhược điểm: Đôi khi tổng hợp/tham gia giữa dữ liệu hoạt động và lịch sử có thể mất thời gian và trở nên phức tạp

Customer Table

Cust_ID Name City
1001 Nguyễn Văn A Hà Nội
1002 Nguyễn Văn B Nam Định

Customer History Table

Cust_ID Name City Last_updated_date
1001 Nguyễn Văn A HCM 11-03-2023
1001 Nguyễn Văn A Hà Nam 11-05-2023
1001 Nguyễn Văn A Bắc Ninh 11-06-2023

SCD Type 6

Phương pháp kết hợp (Loại 1 + Loại 2 + Loại 3)

  • Ưu điểm: Mọi bản chụp thay đổi dữ liệu đều có trong cùng một bảng
  • Nhược điểm: Phức tạp, khó quản lý, bảng lớn.
Cust_ID Name City EffectiveFrom EffectiveTo IsActive
1001 Nguyễn Văn A HCM 11-03-2023 11-05-2023 0
1001 Nguyễn Văn A Hà Nam 11-05-2023 11-06-2023 0
1001 Nguyễn Văn A Bắc Ninh 11-06-2023 03-07-2023 0
1001 Nguyễn Văn A Hà Nội 03-07-2023 1
1002 Nguyễn Văn B Nam Định 22-02-2023 1

Ở ví dụ trên, dữ liệu lịch sử được theo dõi trong hàng mới được xác định bởi các trường ngày bắt đầu và ngày kết thúc. Ngoài ra, chúng ta có thể có trường cờ isActive để xác định bản ghi hiện tại từ danh sách. Chúng ta có thể duy trì lịch sử của tất cả các thay đổi đồng thời cập nhật giá trị hiện tại trên các bản ghi hiện có.


Trên đây là những kiến thức về SCD (Slowly Changing Dimension), Các loại SCD và kịch bản kiểm thử, bài viết cũng khá dài rồi, nếu có cơ hội, bài viết tới mình sẽ chia sẻ chi tiết hơn về SCD type 2. Mong rằng bài viết này sẽ giúp ích được cho mọi người trong quá trình tìm hiểu về SCD. 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.

Tài liệu tham khảo:

https://www.expressanalytics.com/blog/what-is-a-slowly-changing-dimension-and-the-logic-in-implementation/

https://www.learnmsbitutorials.net/slowly-changing-dimensions-ssis.php

6 comments

Anonymous July 3, 2023 - 7:44 AM

Cảm ơn ad <3

Reply
hanhtm2 July 7, 2023 - 12:10 AM

<3 <3 <3

Reply
teresatranmyhanh98 July 7, 2023 - 9:44 AM

hi

Reply
DucVu March 10, 2024 - 4:55 PM

Với loại 6 mình thấy nó chỉ là sự kết hợp của loại 2 + 3. Bởi ví dụ bây giờ khách hàng 1001 lại thay đổi trường dữ liệu City với giá trị là HCM thì đâu có ghi đè lại record đầu tiên được, nếu thế sẽ xử lý sao với 2 cột effective from và to ?
Admin có thể giải thích rõ chỗ này giúp mình ?

Reply
Anonymous May 26, 2024 - 10:18 AM

Trường hợp SCD6 sẽ phải thêm cột Pre_City do tính chất SCD3, thì khi đó cột Cur_City sẽ ghi đè giá trị HCM lên trên các giá trị cũ do tính chất SCD1

Reply
Anonymous June 21, 2024 - 4:05 PM

Dạ mình cảm ơn nhiều nhé

Reply

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

%d bloggers like this: