sql >> Database >  >> RDS >> Database

SCD-type 4

Dimensionale gegevens die langzaam of onvoorspelbaar veranderen, worden vastgelegd in Slowly Changing Dimensions (SCD)-analyses. In een datawarehouse-omgeving heeft een dimensietabel een primaire sleutel die elk record en andere stukjes informatie die bekend staan ​​als de dimensionale gegevens op unieke wijze identificeert.

Alle updatemethoden voor de verschillende SCD-typen worden uitgevoerd met behulp van het SortCL-programma in IRI CoSort. In IRI Voracity is er een wizard die helpt bij het maken van de SCD-taakscripts die worden gebruikt bij het uitvoeren van het SortCL-programma. De meeste SCD-typen gebruiken een volledige outer join om records uit de oorspronkelijke gegevensbron te matchen met records in de bijgewerkte bron op basis van het gelijkstellen van een sleutel van elk. Type 4 voert de update echter uit met een sortering.

Type 4 SCD

Het Type 4-model is vergelijkbaar met dat voor Type 2. Het verschil is dat er 2 tabellen of bestanden worden bijgehouden:één voor de lopende kosten en één om de historiestukken bij te houden voor de kosten. Wanneer nieuwe huidige records aan de master worden toegevoegd, worden deze nieuwe records meestal tegelijkertijd aan de geschiedenis toegevoegd.

De velddefinities zijn hetzelfde in de update, de historie en de hoofdbestanden of tabellen. We sorteren de records voor de update en geschiedenis samen. Er wordt een nieuwe master gemaakt die slechts één record heeft voor elke ProductCode en dat record zal het meest actueel zijn. De geschiedenis bevat alle records voor elke ProductCode inclusief die van de updatebron.

De start-mastertabel zal hetzelfde zijn als de start-master uit ons voorbeeld van Type 1 met waarden zoals hieronder weergegeven.

Productcode Kosten Startdatum
C123 125,50 20110228
F112 2365,00 20120101
G101 19.25 20110930
J245 450,50 20110430
S022 98,75 20110515

Alle updategegevens hebben allemaal dezelfde StartDate. De bron update.dat bevat records met de volgende waarden:

Productcode Kosten Startdatum
F112 2425,00 20120701
J245 550,50 20120701
M447 101,75 20120701
S022 101,75 20120701

De startgeschiedenisbron hieronder is als de startende master in de Type 2. Type 4 is dus een combinatie van Type 1 en Type 2 waarbij de master hetzelfde is als een Type 1 master en de geschiedenis hetzelfde is als een Type 2 master.

Productcode Kosten Startdatum
C123 125,50 20110228
F112 2365,00 20120101
G101 19.25 20110930
G101 21.25 20110501
J245 450,50 20110430
J245 425,25 20101001
J245 385,25 20100215
S022 98,75 20110515

In IRI Workbench is er een Voracity-wizard die helpt bij het maken van scripts voor het bijwerken van dimensionale bestanden en tabellen. Deze wizard bevindt zich in de vervolgkeuzelijst Vraatzucht op de navigatiebalk. Kies eerst het SCD-type. Vervolgens wordt het venster weergegeven waarin u de bronnen selecteert die worden gebruikt voor het verwerken van de update.


In het volgende scherm stelt u de sortering in door de toetsen te selecteren. Er zijn 2 sleutels:ProductCode dan StartDatum . We groeperen op ProductCode , maar we moeten ook in aflopende volgorde sorteren op StartDate binnen elke ProductCode groepering. Dit is zodat we de meest recente record kunnen filteren voor elke ProductCode groep naar de nieuwe master.

Om de StartDate te maken een sleutel die in aflopende volgorde sorteert, selecteer die sleutel en selecteer vervolgens Sleutel bewerken . Dit zal het volgende scherm oproepen:

In de vervolgkeuzelijst voor Richting selecteer Aflopend .

Hier is het taakscript voor de sortering:

/INFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/SCD4/history4.dat
    /PROCESS=DELIMITED
    /ALIAS=history4
    /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='\"')

/SORT
    /KEY=(PRODUCTCODE, TYPE=ASCII)
    /KEY=(STARTDATE, DESCENDING, TYPE=ASCII)

/OUTFILE=history4.dat
 # This file will contain all the records from both inputs
    /PROCESS=DELIMITED
    /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
    /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
    /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')

/OUTFILE=master4.dat
# Include only one record for each ProductCode
    /PROCESS=DELIMITED
    /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
    /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
    /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')
    /INCLUDE WHERE PRODUCTCODE

Hieronder vindt u de bijgewerkte master die is geproduceerd door het bovenstaande taakscript uit te voeren met SortCL. De waarden zijn dezelfde die worden geproduceerd in een Type 1-update.

Productcode Kosten Startdatum
C123 125,50 20110228
F112 2425,00 20120701
G101 19.25 20110930
J245 550,50 20120701
M447 139,25 20120701
S022 101,75 20120701

Het geschiedenisbestand bevat alle eerdere records plus de nieuwe records uit het updatebestand.

Productcode Kosten Startdatum
C123 125,50 20110228
F112 2425,00 20120701
F112 2365,00 20120101
G101 19.25 20110930
G101 21.25 20110501
J245 550,50 20120701
J245 450,50 20110430
J245 425,25 20101001
J245 385,25 20100215
M447 101,75 220120701
S022 101,75 20120701
S022 98,75 20110515

  1. Zet de primaire sleutel van PostgreSQL terug op 1

  2. Hoe te bestellen op datum in SQLite

  3. PostgreSQL-prestaties benchmarken

  4. PostgreSQL UITLEG – Wat zijn de querykosten?