sql >> Base de Datos >  >> RDS >> Database

SCD tipo 1

Los datos dimensionales que cambian lentamente o de manera impredecible se capturan en análisis de dimensiones que cambian lentamente (SCD). En un entorno de almacenamiento de datos, una tabla de dimensiones tiene una clave principal que identifica de forma única cada registro y otras piezas de información que se conocen como datos dimensionales.

Todos los métodos de actualización para los diferentes tipos de SCD se pueden realizar mediante el programa SortCL en IRI CoSort. En IRI Voracity hay un asistente que ayuda a crear los scripts de trabajo SCD que se usan cuando se ejecuta el programa SortCL. La mayoría de los tipos utilizan una combinación externa completa para hacer coincidir los registros de la fuente de datos original con los registros de la fuente de actualización en función de la equiparación de una clave de cada uno. Los registros con coincidencias deben actualizarse. Los registros en la fuente de actualización que no tienen una coincidencia deben agregarse al maestro.

Este artículo cubre el modelo SCD Tipo 1, donde la nueva información de los datos de actualización sobrescribe la información original en la fuente principal. Los registros en la fuente de actualización sin coincidencias se agregan al nuevo maestro. Como este modelo implica sobrescribir valores antiguos con los valores actuales y no mantiene un historial, no se usa con frecuencia.

La actualización se logra uniendo con respecto al campo ProductCode. Para este ejemplo, los datos actuales serán el archivo fuente master1.dat y update.dat se usa para cambiar valores o agregar registros en la fuente maestra actual.

La fuente master1.dat contiene:

ProductCode Coste Fecha de inicio
C123 125,50 20110228
F112 2365.00 20120101
G101 19,25 20110930
J245 450,50 20110430
S022 98,75 20110515

En este caso, todos los datos de actualización tendrán la misma fecha de inicio. La fuente update.dat contiene registros con los siguientes valores:

ProductCode Coste Fecha de inicio
F112 2425.00 20120701
J245 550,50 20120701
M447 101,75 20120701
S022 101,75 20120701

La nueva tabla dimensional tendrá estos valores después de la actualización:

ProductCode Coste Fecha de inicio
C123 125,50 20110228
F112 2425.00 20120701
G101 19,25 20110930
J245 550,50 20120701
M447 139,25 20120701
S022 101,75 20120701

En IRI Workbench, hay un asistente para ayudar en la creación de scripts para actualizar archivos y tablas dimensionales. Este asistente se encuentra en el menú desplegable Voracidad en la barra de navegación. Primero eliges el tipo SCD. Luego se muestra la ventana donde selecciona los archivos que se utilizan para procesar la actualización.

La siguiente pantalla es para definir la unión realizada con el maestro y las fuentes de actualización

A continuación se muestra el script de trabajo sortcl que se produce al procesar los dos archivos master1.dat y 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 ""