Database
 sql >> Database >  >> RDS >> Database

SCD di tipo 1

I dati dimensionali che cambiano lentamente o in modo imprevedibile vengono acquisiti nelle analisi delle dimensioni che cambiano lentamente (SCD). In un ambiente di data warehouse, una tabella dimensionale dispone di una chiave primaria che identifica in modo univoco ogni record e altre informazioni note come dati dimensionali.

Tutti i metodi di aggiornamento per i diversi tipi di SCD possono essere eseguiti utilizzando il programma SortCL in IRI CoSort. In IRI Voracity è disponibile una procedura guidata per facilitare la creazione degli script di lavoro SCD utilizzati durante l'esecuzione del programma SortCL. La maggior parte dei tipi utilizza un join esterno completo per abbinare i record dell'origine dati originale ai record nell'origine degli aggiornamenti in base all'identificazione di una chiave di ciascuno. I record con le corrispondenze devono essere aggiornati. I record nell'origine degli aggiornamenti che non hanno una corrispondenza devono essere aggiunti al master.

Questo articolo illustra il modello SCD di tipo 1, in cui le nuove informazioni dai dati di aggiornamento sovrascrivono le informazioni originali nell'origine principale. I record nell'origine degli aggiornamenti senza corrispondenze vengono aggiunti al nuovo master. Poiché questo modello prevede la sovrascrittura dei vecchi valori con i valori attuali e non mantiene alcuna cronologia, non viene utilizzato spesso.

L'aggiornamento si effettua unendo rispetto al campo ProductCode. Per questo esempio, i dati correnti saranno il file di origine master1.dat e update.dat viene utilizzato per modificare i valori o aggiungere record nell'origine principale corrente.

Il sorgente master1.dat contiene:

Codice prodotto Costo Data di inizio
C123 125,50 20110228
F112 2365.00 20120101
G101 19:25 20110930
J245 450,50 20110430
S022 98,75 20110515

In questo caso, i dati di aggiornamento avranno tutti la stessa StartDate. L'origine update.dat contiene record con i seguenti valori:

Codice prodotto Costo Data di inizio
F112 2425,00 20120701
J245 550,50 20120701
M447 101,75 20120701
S022 101,75 20120701

La nuova tabella dimensionale avrà questi valori dopo l'aggiornamento:

Codice prodotto Costo Data di inizio
C123 125,50 20110228
F112 2425,00 20120701
G101 19:25 20110930
J245 550,50 20120701
M447 139,25 20120701
S022 101,75 20120701

In IRI Workbench è presente una procedura guidata che assiste nella creazione di script per l'aggiornamento di file e tabelle dimensionali. Questa procedura guidata si trova nel menu a discesa Voracity sulla barra di navigazione. Per prima cosa scegli il tipo di SCD. Quindi viene visualizzata la finestra in cui si selezionano i file utilizzati per l'elaborazione dell'aggiornamento.

La schermata successiva serve per definire il join eseguito con il master e le sorgenti di aggiornamento

Di seguito è riportato lo script del lavoro sortcl che viene prodotto durante l'elaborazione dei due file master1.dat e 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 ""