sql >> Database >  >> RDS >> Database

SCD-type 1

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 kunnen 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 typen gebruiken een volledige outer join om records uit de oorspronkelijke gegevensbron te matchen met records in de updatebron op basis van het gelijkstellen van een sleutel van elk. Records met overeenkomsten moeten worden bijgewerkt. Records in de updatebron die geen overeenkomst hebben, moeten aan de master worden toegevoegd.

Dit artikel behandelt het SCD Type 1-model, waarbij nieuwe informatie uit de updategegevens de oorspronkelijke informatie in de hoofdbron overschrijft. Records in de updatebron zonder overeenkomsten worden toegevoegd aan de nieuwe master. Aangezien dit model oude waarden met de huidige waarden overschrijft en geen geschiedenis bijhoudt, wordt het niet vaak gebruikt.

De update wordt bereikt door samen te voegen met betrekking tot het veld ProductCode. Voor dit voorbeeld zijn de huidige gegevens het bronbestand master1.dat en wordt update.dat gebruikt om waarden te wijzigen of records toe te voegen in de huidige hoofdbron.

De master1.dat-bron bevat:

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

In dit geval hebben de updategegevens 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 nieuwe dimensionale tabel zal deze waarden hebben na de 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

In IRI Workbench is er een 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 bestanden selecteert die worden gebruikt voor het verwerken van de update.

Het volgende scherm is voor het definiëren van de samenvoeging die wordt uitgevoerd met de master- en updatebronnen

Hieronder staat het sortcl job script dat wordt geproduceerd bij het verwerken van de twee bestanden master1.dat en 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. Oracle JDBC :ongeldige gebruikersnaam/wachtwoord (ora-01017)

  2. Gebruikersaccountbeheer, rollen, machtigingen, authenticatie PHP en MySQL

  3. LOAD DATA LOCAL INFILE geeft de fout De gebruikte opdracht is niet toegestaan ​​met deze MySQL-versie

  4. Hoe te converteren van de ene datumnotatie naar de andere in SQL Server met CONVERT()