Database
 sql >> Base de Dados >  >> RDS >> Database

SCD Tipo 1


Dados dimensionais que mudam lentamente ou de forma imprevisível são capturados em análises de Dimensões de Alteração Lenta (SCD). Em um ambiente de data warehouse, uma tabela de dimensões tem uma chave primária que identifica exclusivamente cada registro e outras informações conhecidas como dados dimensionais.

Todos os métodos de atualização para os diferentes tipos de SCD podem ser realizados usando o programa SortCL no IRI CoSort. No IRI Voracity existe um assistente para auxiliar na criação dos scripts de trabalho SCD usados ​​ao executar o programa SortCL. A maioria dos tipos usa uma junção externa completa para corresponder registros da fonte de dados original com registros na fonte de atualização com base na igualdade de uma chave de cada um. Os registros com correspondências precisam ser atualizados. Os registros na fonte de atualização que não têm uma correspondência precisam ser adicionados ao mestre.

Este artigo abrange o modelo SCD Tipo 1, onde novas informações dos dados de atualização substituem as informações originais na fonte mestre. Os registros na fonte de atualização sem correspondências são adicionados ao novo mestre. Como esse modelo envolve a substituição de valores antigos pelos valores atuais e não mantém histórico, ele não é usado com frequência.

A atualização é realizada juntando-se em relação ao campo ProductCode. Para este exemplo, os dados atuais serão o arquivo de origem master1.dat e update.dat é usado para alterar valores ou adicionar registros na fonte mestre atual.

A fonte master1.dat contém:
ProductCode Custo Data de início
C123 125,50 20110228
F112 2365,00 20120101
G101 19,25 20110930
J245 450,50 20110430
S022 98,75 20110515

Nesse caso, todos os dados de atualização terão a mesma StartDate. A fonte update.dat contém registros com os seguintes valores:
ProductCode Custo Data de início
F112 2.425,00 20120701
J245 550,50 20120701
M447 101,75 20120701
S022 101,75 20120701

A nova tabela dimensional terá estes valores após a atualização:
ProductCode Custo Data de início
C123 125,50 20110228
F112 2.425,00 20120701
G101 19,25 20110930
J245 550,50 20120701
M447 139,25 20120701
S022 101,75 20120701

No IRI Workbench, existe um assistente para auxiliar na criação de scripts para atualização de arquivos e tabelas Dimensionais. Este assistente está localizado no menu suspenso Voracity na barra de navegação. Primeiro você escolhe o tipo de SCD. Em seguida, a janela onde você seleciona os arquivos que são usados ​​para processar a atualização é exibida.



A próxima tela é para definir a junção realizada com as fontes mestre e de atualização



Abaixo está o script de tarefa sortcl que é produzido ao processar os dois arquivos 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 ""