Dữ liệu về chiều thay đổi chậm hoặc không thể đoán trước được sẽ được ghi lại trong phân tích Kích thước thay đổi chậm (SCD). Trong môi trường kho dữ liệu, bảng thứ nguyên có khóa chính xác định duy nhất từng bản ghi và các phần thông tin khác được gọi là dữ liệu thứ nguyên.
Tất cả các phương pháp cập nhật cho các loại SCD khác nhau có thể được thực hiện bằng cách sử dụng chương trình SortCL trong IRI CoSort. Trong IRI Voracity có một trình hướng dẫn để hỗ trợ tạo các tập lệnh công việc SCD được sử dụng khi chạy chương trình SortCL. Hầu hết các loại sử dụng một phép nối bên ngoài đầy đủ để khớp các bản ghi từ nguồn dữ liệu ban đầu với các bản ghi trong nguồn cập nhật dựa trên việc cân bằng một khóa từ mỗi loại. Hồ sơ với các trận đấu cần được cập nhật. Bản ghi trong nguồn cập nhật không khớp cần được thêm vào bản chính.
Bài viết này đề cập đến mô hình SCD Loại 1, trong đó thông tin mới từ dữ liệu cập nhật sẽ ghi đè thông tin ban đầu trong nguồn chính. Bản ghi trong nguồn cập nhật không có kết quả phù hợp sẽ được thêm vào bản chính mới. Vì mô hình này liên quan đến việc ghi đè các giá trị cũ bằng các giá trị hiện tại và không lưu giữ lịch sử nên nó không thường được sử dụng.
Quá trình cập nhật được thực hiện bằng cách kết hợp với trường ProductCode. Đối với ví dụ này, dữ liệu hiện tại sẽ là tệp nguồn master1.dat và update.dat được sử dụng để thay đổi giá trị hoặc thêm bản ghi trong nguồn chính hiện tại.
Nguồn master1.dat chứa:
Mã sản phẩm | Chi phí | Ngày Bắt đầu |
---|---|---|
C123 | 125,50 | 20110228 |
F112 | 2365,00 | 20120101 |
G101 | 19,25 | 20110930 |
J245 | 450.50 | 20110430 |
S022 | 98,75 | 20110515 |
Trong trường hợp này, tất cả dữ liệu cập nhật sẽ có cùng Ngày bắt đầu. Nguồn update.dat chứa các bản ghi có các giá trị sau:
Mã sản phẩm | Chi phí | Ngày Bắt đầu |
---|---|---|
F112 | 2425,00 | 20120701 |
J245 | 550.50 | 20120701 |
M447 | 101,75 | 20120701 |
S022 | 101,75 | 20120701 |
Bảng thứ nguyên mới sẽ có các giá trị này sau khi cập nhật:
Mã sản phẩm | Chi phí | Ngày Bắt đầu |
---|---|---|
C123 | 125,50 | 20110228 |
F112 | 2425,00 | 20120701 |
G101 | 19,25 | 20110930 |
J245 | 550.50 | 20120701 |
M447 | 139,25 | 20120701 |
S022 | 101,75 | 20120701 |
Trong IRI Workbench, có một trình hướng dẫn để hỗ trợ việc tạo các tập lệnh để cập nhật các tệp và bảng Thứ nguyên. Trình hướng dẫn này nằm trong menu thả xuống Voracity trên thanh điều hướng. Đầu tiên, bạn chọn loại SCD. Sau đó, cửa sổ nơi bạn chọn các tệp được sử dụng để xử lý bản cập nhật sẽ hiển thị.
Màn hình tiếp theo là để xác định phép nối được thực hiện với nguồn chính và nguồn cập nhật
Dưới đây là kịch bản lệnh sortcl được tạo ra khi xử lý hai tệp master1.dat và update.dat:
/INFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/SCD1/master1.dat /PROCESS=DELIMITED /ALIAS=master1 /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"') /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"') /INFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/update.dat /PROCESS=DELIMITED /ALIAS=update /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"') /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"') /JOIN FULL_OUTER NOT_SORTED master1 NOT_SORTED update WHERE MASTER1.PRODUCTCODE == UPDATE.PRODUCTCODE /OUTFILE=/master1.dat # This processes all except the new records /PROCESS=DELIMITED /FIELD=(MASTER1.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(COST_NEW, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"', IF MASTER1.PRODUCTCODE EQ UPDATE.PRODUCTCODE THEN UPDATE.COST ELSE MASTER1.COST) /FIELD=(STARTDATE_NEW, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"', IF MASTER1.PRODUCTCODE EQ UPDATE.PRODUCTCODE THEN UPDATE.STARTDATE ELSE MASTER1.STARTDATE) /INCLUDE WHERE MASTER1.PRODUCTCODE NE "" /OUTFILE=master1.dat # This processes the new records to be added /PROCESS=DELIMITED /FIELD=(UPDATE.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"') /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"') /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"') I /INCLUDE WHERE MASTER1.PRODUCTCODE EQ ""