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 ""