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

SCD Type 1

Dimensionsdata, der ændrer sig langsomt eller uforudsigeligt, fanges i Slowly Changing Dimensions (SCD) analyser. I et datavarehusmiljø har en dimensionstabel en primær nøgle, der unikt identificerer hver post og andre oplysninger, der er kendt som dimensionsdata.

Alle opdateringsmetoderne for de forskellige SCD-typer kan udføres ved hjælp af SortCL-programmet i IRI CoSort. I IRI Voracity er der en guide til at hjælpe med at skabe de SCD-jobscripts, der bruges, når du kører SortCL-programmet. De fleste typer bruger en fuld ydre joinforbindelse til at matche poster fra den originale datakilde med poster i opdateringskilden baseret på at sidestille en nøgle fra hver. Optegnelser med kampe skal opdateres. Poster i opdateringskilden, der ikke har et match, skal tilføjes til masteren.

Denne artikel dækker SCD Type 1-modellen, hvor ny information fra opdateringsdata overskriver original information i masterkilden. Poster i opdateringskilden uden match føjes til den nye master. Da denne model indebærer at overskrive gamle værdier med de nuværende værdier og ikke opretholder nogen historik, bruges den ikke ofte.

Opdateringen udføres ved at tilslutte sig med hensyn til feltet ProductCode. I dette eksempel vil de aktuelle data være kildefilen master1.dat og update.dat bruges til at ændre værdier eller tilføje poster i den aktuelle masterkilde.

Master1.dat-kilden indeholder:

Produktkode Omkostninger Startdato
C123 125,50 20110228
F112 2365.00 20120101
G101 19.25 20110930
J245 450,50 20110430
S022 98,75 20110515

I dette tilfælde vil opdateringsdataene alle have den samme startdato. Update.dat-kilden indeholder poster med følgende værdier:

Produktkode Omkostninger Startdato
F112 2425.00 20120701
J245 550,50 20120701
M447 101,75 20120701
S022 101,75 20120701

Den nye dimensionstabel vil have disse værdier efter opdateringen:

Produktkode Omkostninger Startdato
C123 125,50 20110228
F112 2425.00 20120701
G101 19.25 20110930
J245 550,50 20120701
M447 139,25 20120701
S022 101,75 20120701

I IRI Workbench er der en guide til at hjælpe med oprettelsen af ​​scripts til opdatering af dimensionsfiler og tabeller. Denne guide er placeret i rullemenuen Voracity på navigationslinjen. Først vælger du SCD-typen. Derefter vises vinduet, hvor du vælger de filer, der skal bruges til at behandle opdateringen.

Det næste skærmbillede er til at definere den joinforbindelse, der udføres med master- og opdateringskilderne

Nedenfor er sortcl-jobscriptet, der produceres ved behandling af de to filer master1.dat og 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 ""

  1. MySQL 1062 - Dublet indtastning '0' for nøglen 'PRIMÆR'

  2. Hvad betyder <> i Oracle

  3. Datokonvertering og kultur:Forskellen mellem DATE og DATETIME

  4. Skjult funktion:Træk og slip adgangsobjekter mellem filer