Database
 sql >> Base de données >  >> RDS >> Database

DSC Type 1

Les données dimensionnelles qui changent lentement ou de manière imprévisible sont capturées dans les analyses de dimensions à variation lente (SCD). Dans un environnement d'entrepôt de données, une table de dimension possède une clé primaire qui identifie de manière unique chaque enregistrement et d'autres informations appelées données dimensionnelles.

Toutes les méthodes de mise à jour pour les différents types de SCD peuvent être réalisées à l'aide du programme SortCL dans IRI CoSort. Dans IRI Voracity, un assistant vous aide à créer les scripts de travail SCD utilisés lors de l'exécution du programme SortCL. La plupart des types utilisent une jointure externe complète pour faire correspondre les enregistrements de la source de données d'origine avec les enregistrements de la source de mise à jour en fonction de l'équivalence d'une clé de chacun. Les enregistrements avec des correspondances doivent être mis à jour. Les enregistrements de la source de mise à jour qui n'ont pas de correspondance doivent être ajoutés au maître.

Cet article couvre le modèle SCD de type 1, où les nouvelles informations des données de mise à jour écrasent les informations d'origine dans la source principale. Les enregistrements de la source de mise à jour sans correspondance sont ajoutés au nouveau maître. Comme ce modèle implique de remplacer les anciennes valeurs par les valeurs actuelles et ne conserve aucun historique, il n'est pas souvent utilisé.

La mise à jour s'effectue par jointure par rapport au champ ProductCode. Pour cet exemple, les données actuelles seront le fichier source master1.dat et update.dat est utilisé pour modifier des valeurs ou ajouter des enregistrements dans la source principale actuelle.

La source master1.dat contient :

ProductCode Coût Date de début
C123 125,50 20110228
F112 2365.00 20120101
G101 19.25 20110930
J245 450.50 20110430
S022 98,75 20110515

Dans ce cas, les données de mise à jour auront toutes la même StartDate. La source update.dat contient des enregistrements avec les valeurs suivantes :

ProductCode Coût Date de début
F112 2425.00 20120701
J245 550,50 20120701
M447 101.75 20120701
S022 101.75 20120701

La nouvelle table dimensionnelle aura ces valeurs après la mise à jour :

ProductCode Coût Date de début
C123 125,50 20110228
F112 2425.00 20120701
G101 19.25 20110930
J245 550,50 20120701
M447 139.25 20120701
S022 101.75 20120701

Dans IRI Workbench, il existe un assistant pour aider à la création de scripts pour la mise à jour des fichiers et tables Dimensional. Cet assistant se trouve dans la liste déroulante Voracité de la barre de navigation. Vous choisissez d'abord le type de SCD. Ensuite, la fenêtre de sélection des fichiers utilisés pour le traitement de la mise à jour s'affiche.

L'écran suivant permet de définir la jointure réalisée avec les sources maître et mise à jour

Vous trouverez ci-dessous le script de travail sortcl produit lors du traitement des deux fichiers master1.dat et 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 ""