Database
 sql >> Baza danych >  >> RDS >> Database

SCD typu 1

Dane wymiarowe, które zmieniają się powoli lub nieprzewidywalnie, są rejestrowane w analizach wolno zmieniających się wymiarów (SCD). W środowisku hurtowni danych tabela wymiarów ma klucz podstawowy, który jednoznacznie identyfikuje każdy rekord i inne informacje znane jako dane wymiarowe.

Wszystkie metody aktualizacji dla różnych typów SCD można wykonać za pomocą programu SortCL w IRI CoSort. W IRI Voracity dostępny jest kreator, który pomaga w tworzeniu skryptów zadań SCD używanych podczas uruchamiania programu SortCL. Większość typów używa pełnego sprzężenia zewnętrznego w celu dopasowania rekordów z oryginalnego źródła danych do rekordów w źródle aktualizacji na podstawie zrównania klucza z każdego z nich. Rekordy z dopasowaniami wymagają aktualizacji. Rekordy w źródle aktualizacji, które nie pasują do siebie, muszą zostać dodane do wzorca.

W tym artykule omówiono model SCD typu 1, w którym nowe informacje z danych aktualizacji zastępują oryginalne informacje w źródle głównym. Rekordy w źródle aktualizacji bez dopasowań są dodawane do nowego wzorca. Ponieważ ten model polega na zastępowaniu starych wartości bieżącymi wartościami i nie zachowuje historii, nie jest często używany.

Aktualizacja odbywa się poprzez dołączenie w odniesieniu do pola ProductCode. W tym przykładzie bieżącymi danymi będzie plik źródłowy master1.dat, a update.dat służy do zmiany wartości lub dodawania rekordów w bieżącym głównym źródle.

Źródło master1.dat zawiera:

Kod produktu Koszt Data rozpoczęcia
C123 125,50 20110228
F112 2365,00 20120101
G101 19,25 20110930
J245 450,50 20110430
S022 98,75 20110515

W takim przypadku wszystkie dane aktualizacji będą miały tę samą datę rozpoczęcia. Źródło update.dat zawiera rekordy o następujących wartościach:

Kod produktu Koszt Data rozpoczęcia
F112 2425,00 20120701
J245 550,50 20120701
M447 101,75 20120701
S022 101,75 20120701

Nowa tabela wymiarowa będzie miała następujące wartości po aktualizacji:

Kod produktu Koszt Data rozpoczęcia
C123 125,50 20110228
F112 2425,00 20120701
G101 19,25 20110930
J245 550,50 20120701
M447 139,25 20120701
S022 101,75 20120701

W IRI Workbench dostępny jest kreator, który pomaga w tworzeniu skryptów do aktualizacji plików i tabel Dimensional. Ten kreator znajduje się w menu rozwijanym Wolność na pasku nawigacyjnym. Najpierw wybierasz typ SCD. Następnie zostanie wyświetlone okno, w którym wybierasz pliki używane do przetwarzania aktualizacji.

Następny ekran służy do definiowania połączenia wykonanego z głównym i aktualizacyjnym źródłem

Poniżej znajduje się skrypt zadania sortcl, który jest tworzony podczas przetwarzania dwóch plików master1.dat i 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 ""

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak liczyć odrębne wartości w SQL?

  2. Twój ostateczny przewodnik po SQL Join:INNER JOIN – część 1

  3. Jak zainstalować ArangoDB na Ubuntu 20.04

  4. Kolejny sposób przeglądania automatycznych aktualizacji statystyk

  5. Agregaty i partycjonowanie