sql >> Databasteknik >  >> RDS >> Database

SCD typ 1

Dimensionsdata som förändras långsamt eller oförutsägbart fångas i Slowly Changing Dimensions (SCD) analyser. I en datalagermiljö har en dimensionstabell en primärnyckel som unikt identifierar varje post och annan information som kallas dimensionsdata.

Alla uppdateringsmetoder för de olika SCD-typerna kan utföras med programmet SortCL i IRI CoSort. I IRI Voracity finns det en guide som hjälper dig att skapa SCD-jobbskripten som används när du kör SortCL-programmet. De flesta typer använder en fullständig yttre koppling för att matcha poster från den ursprungliga datakällan med poster i uppdateringskällan baserat på att likställa en nyckel från varje. Register med matchningar måste uppdateras. Poster i uppdateringskällan som inte har en matchning måste läggas till i mastern.

Den här artikeln täcker SCD Type 1-modellen, där ny information från uppdateringsdata skriver över den ursprungliga informationen i huvudkällan. Poster i uppdateringskällan utan matchningar läggs till i den nya mastern. Eftersom denna modell innebär att gamla värden skrivs över med de nuvarande värdena och inte har någon historik, används den inte ofta.

Uppdateringen görs genom att ansluta med avseende på fältet ProductCode. I det här exemplet kommer aktuell data att vara källfilen master1.dat och update.dat används för att ändra värden eller lägga till poster i den aktuella huvudkällan.

Källan master1.dat innehåller:

Produktkod Kostnad Startdatum
C123 125,50 20110228
F112 2365.00 20120101
G101 19.25 20110930
J245 450,50 20110430
S022 98,75 20110515

I det här fallet kommer alla uppdateringsdata att ha samma startdatum. Update.dat-källan innehåller poster med följande värden:

Produktkod Kostnad Startdatum
F112 2425.00 20120701
J245 550.50 20120701
M447 101,75 20120701
S022 101,75 20120701

Den nya dimensionstabellen kommer att ha dessa värden efter uppdateringen:

Produktkod Kostnad 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

I IRI Workbench finns det en guide som hjälper dig att skapa skript för uppdatering av dimensionsfiler och tabeller. Den här guiden finns i rullgardinsmenyn Voracity i navigeringsfältet. Först väljer du SCD-typen. Då visas fönstret där du väljer de filer som används för att bearbeta uppdateringen.

Nästa skärm är för att definiera kopplingen som utförs med master- och uppdateringskällorna

Nedan finns sortcl-jobbskriptet som produceras vid bearbetning av de två filerna master1.dat och 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. Returnera en lista över tabeller och vyer i SQL Server med T-SQL (sp_tables)

  2. Fel vid inställning av n_distinct med en plpgsql-variabel

  3. Skenor:PG::UndefinedTable:FEL:relation ... existerar inte

  4. Automatisera databasschemaobjektkontroll