Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

SCD loại 2

Dữ liệu về thứ nguyên 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 lệnh SCD được sử dụng khi chạy chương trình SortCL. Hầu hết các loại SCD sử dụng một kết 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 trong bản chính. 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.

Dưới đây là tổng quan về cách cập nhật tệp kích thước bằng SCD Loại 2 mà tôi đang duy trì chi phí sản phẩm. Quá trình cập nhật được thực hiện bằng cách kết hợp với trường Mã sản phẩm .

SCD loại 2

Trong mô hình này, các bản ghi hiện tại và lịch sử được lưu giữ trong cùng một tệp. Trong cơ sở dữ liệu đang hoạt động, bạn có thể sẽ có một khóa thay thế để sử dụng làm khóa chính để liên kết đến các bảng dữ kiện ngoài Mã sản phẩm khóa được sử dụng cho quá trình cập nhật. Vì bản ghi hiện tại và bản ghi lịch sử được chứa trong cùng một tệp, nên cần có trường cho biết bản ghi có phải là bản ghi hiện tại cho Mã sản phẩm và chúng tôi cần một trường để chỉ ra thời điểm chi phí cho Mã sản phẩm không còn hiệu quả. Trong ví dụ này, chúng tôi có:

  • Mã sản phẩm :Đây là trường khóa định danh.
  • Chi phí :Chi phí trở nên hiệu quả vào Ngày bắt đầu cho bản ghi.
  • Ngày bắt đầu :đây là ngày mà chi phí cho hồ sơ có hiệu lực.
  • Ngày kết thúc :Đây là ngày mà Chi phí trong hồ sơ không còn hiệu lực. Nếu Chi phí vẫn có hiệu lực, thì Ngày kết thúc sẽ được đặt thành 99991231. Điều này nhằm tránh giá trị rỗng trong trường này.
  • Hiện tại :Y nếu chi phí vẫn còn hiệu lực, N nếu không.

Bảng bắt đầu đã có 3 bản ghi lịch sử. Chúng là những cái có giá trị N cho trường Hiện tại . Nguồn chính được gọi là master2.dat và nó chứa dữ liệu bên dưới:

Mã sản phẩm Chi phí Ngày Bắt đầu Ngày kết thúc Hiện tại
C123 125,50 20110228 99991231
F112 2365,00 20120101 99991231
G101 19,25 20110930 99991231
G101 21,25 20110501 20110930 N
J245 450.50 20110430 99991231
J245 425,25 20101001 20110430 N
J245 385,25 20100215 20101001 N
S022 98,75 20110515 99991231

Tất cả các bản ghi cập nhật đều có cùng một Ngày bắt đầu . Nguồn update.dat chứa các bản ghi với các giá trị trường 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

Trong IRI Workbench, có một trình hướng dẫn Voracity để 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 nguồn được sử dụng để xử lý bản cập nhật sẽ hiển thị. Đối với Loại 2, đích thường là bảng hoặc tệp chính ban đầu.

Với màn hình tiếp theo, bạn xác định cách dữ liệu cập nhật được ánh xạ và cách các giá trị trường hoặc cột khác được đặt. The update.Cost sẽ ánh xạ tới Master2.cost và bản cập nhật. Ngày bắt đầu sẽ ánh xạ tới master2.StartDate . Trường cờ là trường được sử dụng để xác định bản ghi có Chi phí hoạt động. Đó là, cho dù các giá trị trong bản ghi đang hoạt động hay lịch sử. Trong trường hợp này, Trường gắn cờ là trường Hiện tại . Giá trị tích cực của cờ là giá trị trong Hiện tại xác định xem Chi phí Chi phí hiện tại; giá trị là “Y” trong ví dụ của chúng tôi và Giá trị phủ định của cờ là "N". Trường Kết thúc chứa tên của trường chứa giá trị được sử dụng để xác định thời điểm Chi phí cho bản ghi không còn hiệu lực và Master.EndDate giữ giá trị đó. Giá trị cuối cùng được sử dụng làm giá trị cho Trường kết thúc khi bản ghi chứa các giá trị hiện tại cho một Mã sản phẩm .

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. Bạn nên lưu ý rằng cả hai nguồn phải được sắp xếp theo thứ tự đối với Mã sản phẩm . Nếu không, bạn cần chọn NOT_SORTED trong trình đơn thả xuống cho Tùy chọn sắp xếp thứ tự dưới nguồn dữ liệu cần được sắp xếp.

Đây là kịch bản công việc:

/INFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/SCD2/master2.dat
  /PROCESS=DELIMITED
  /ALIAS=master2
  /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
  /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
  /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')
  /FIELD=(ENDDATE, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"')
  /FIELD=(CURRENT, TYPE=ASCII, POSITION=5, 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=ASCII, POSITION=2, SEPARATOR=",", FRAME='\"')
  /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')

/JOIN FULL_OUTER master2 update WHERE MASTER2.PRODUCTCODE == UPDATE.PRODUCTCODE

/OUTFILE=master2.dat
# Include only records that are being updated
# Use the Cost and StartDate from the Update file 
  /PROCESS=DELIMITED
  /FIELD=(MASTER2.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='\"')
  /FIELD=(MASTER2.ENDDATE, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"')
  /FIELD=(MASTER2.CURRENT, TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"')
  /INCLUDE WHERE MASTER2.PRODUCTCODE == UPDATE.PRODUCTCODE AND MASTER2.CURRENT EQ “Y"
/OUTFILE=master2.dat
# Change any current records that are being updated to history records
# by giving the EndDate as the StartDate from the update record 
# and changing the field Current to N
  /PROCESS=DELIMITED
  /CONDITION=(MATCH, TEST=(MASTER2.PRODUCTCODE == UPDATE.PRODUCTCODE AND MASTER2.CURRENT EQ "Y"))
  /FIELD=(MASTER2.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
  /FIELD=(MASTER2.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
  /FIELD=(MASTER2.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')
  /FIELD=(ENDDATE_NEW, TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"', IF MATCH THEN UPDATE.STARTDATE ELSE MASTER2.ENDDATE)
  /FIELD=(CURRENT_NEW, TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"', IF MATCH THEN "N" ELSE MASTER2.CURRENT)
  /OMIT WHERE MASTER2.PRODUCTCODE EQ ""
/OUTFILE=master2.dat
# Add new records
  /PROCESS=DELIMITED
  /FIELD=(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='\"')
  /FIELD=(ENDDATE_NEW="99991231", TYPE=ASCII, POSITION=4, SEPARATOR=",", FRAME='\"')
  /FIELD=(CURRENT_NEW="Y", TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME='\"')
  /INCLUDE WHERE UPDATE.PRODUCTCODE NE "" AND MASTER2.PRODUCTCODE EQ ""

Tệp chính mới sẽ có các giá trị sau:

Mã sản phẩm Chi phí Ngày Bắt đầu Ngày kết thúc Hiện tại
C123 125,50 20110228 99991231
F112 2425,00 20120701 99991231
F112 2365,00 20120101 20120701 N
G101 19,25 20110930 99991231
G101 21,25 20110501 20110930 N
J245 550.50 20120701 99991231
J245 450.50 20110430 20120701 N
J245 425,25 20101001 20110430 N
J245 385,25 20100215 20101001 N
M447 101,75 20120701 99991231
S022 101,75 20120701 99991231
S022 98,75 20110515 20120701 N

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Anh bạn, ai sở hữu cái bàn #temp đó?

  2. TẠO BẢNG trong SQL - Mọi thứ bạn cần biết về tạo bảng trong SQL

  3. Tạo mối quan hệ trong SQL

  4. Chờ thống kê và kho truy vấn

  5. SQL CREATE TABLE… AS Câu lệnh CHỌN