Av: Koen Verbeeck | Uppdaterad: 2018-08-09 | Kommentarer (4) | Related: 1 | 2 | 3 | 4 | Mer > Integration Services Utveckling
Fri MSSQLTips Webinar: Komma Igång med SSIS
Lär dig hur du ska komma igång med SQL Server Integration Services och hur man bygger en SSIS-projekt med denna demo fokuserade webinar.,
Problem
vi vill behålla historiken i vårt datalager för flera dimensioner.Vi använder SQL Server Integration Services (SSIS) för att genomföra ETL (ExtractTransform och Belastning). Vi försökte thebuilt-in långsamt föränderliga Dimension wizard, men prestanda verkar dålig. Hur kanvi implementera önskad funktionalitet med vanliga SSIS-komponenter?
lösning
introduktion till långsamt föränderliga dimensioner
en långsamt föränderlig dimension (SCD) håller reda på historien om dess individualmembers., Det finns flera metoder som föreslagits av Ralph Kimball i sin bok DatawarehouseToolkit:
- typ 1 – Skriv över fälten när värdet ändras. Ingen historia iskept.
- Type 2 – skapa en ny rad med de nya värdena för fälten. Extracolumns anger när i tid en rad var giltig.
- Type 3 – behåll det gamla värdet för en kolumn i en separat kolumn.
- Det finns fler typer av SCD, men de är oftast en hybrid kombination av ovanstående.
i det här tipset fokuserar vi på typ 2-situationen. Låt oss illustreramed ett exempel., Vi har ett enkelt bord som lagrar kunddata.
kolumnen SK_Customer är en kolumn med en identitetgenskap som genererar ett nytt värde för varje rad. Vi vill behålla Platsattributet. När platsen ändras från Antwerpen till Bryssel uppdaterar vi inte raden,men vi infogar en ny post:
Med fälten ValidFrom och ValidTo anger vi när en post var giltig i tid. En ny surrogatnyckel genereras, menföretagsnyckeln-CustomerName-förblir densamma., När ett faktabordladdas, kommer en sökning att göras på kundbordet. Beroende på tidsstämpelnav faktaposten kommer en av de två raderna att returneras. Till exempel:
alla fakta är för samma kund. När du skulle fråga den totala försäljningen beloppför CustomerA är resultatet 31. Den totala försäljningen per plats är 12,75 för Antwerp och 18,25 för Bryssel, även om uppgifterna är för samma kund. Med SCDType 2 kan vi analysera våra data med historiska attribut.,
implementeringsmetoder
det finns flera metoder för att ladda en långsamt föränderlig Dimension av typ 2 Ina datalager. Du kan välja en ren T-SQL-metod, antingen med multipleT-SQL-satser eller genom att använda KOPPLINGSUTDRAGET. Den senare förklaras ianvänder SQL Server MERGE-satsen för att bearbeta typ 2 långsamt ändra dimensioner.
med SSIS kan du använda den inbyggda, långsamt föränderliga Dimensionsguiden, som kan hantera flera scenarier., Den här guiden beskrivs i tipsLoading Historiska Data i en SQL Server-Data Warehouse andHandle Långsamt Föränderliga Dimensioner i SQL Server Integration Services. Nedsidan av den här guiden är prestanda: Den använder kommandot OLE DB för varje uppdatering, vilket kan leda till dålig prestanda för större datamängder. Om du gör ändringar i dataflödet för att lösa dessa problem kan du inte köra guiden igen eftersom du skulle förlora alla ändringar.
det sista alternativet – förutom att använda 3dparty – komponenter-bygger SCD Type 2-logiken själv i dataflödet,som vi beskriver i nästa avsnitt.,
implementering i SSIS
den lösning som föreslås i detta tips fungerar för alla versioner av SSIS. Vi kommer att överraska exemplet med kunddimensionen, men ett extra fält har lagts till: e-postattributet. Vi behåller inte historiken för e – postadresserna, så ett nytt värde kommer att skriva över alla andra värden.
först läser vi data från en källa, troligen en staging-miljö. När du använder en relationskälla kan du använda OLE DB-Källkomponenten med en SQL-frågaatt läsa data. Välj bara kolumner som du faktiskt behöver för din dimension. Validfrom-fältet beräknas här också., Eftersom du typisktladda in data från föregående dag, ValidFrom är inställd på igår. Om du inte har en relationskälla kan du lägga till den här kolumnen med en härledd Kolumntransformation.
i nästa steg gör vi en sökning mot dimensionen.Här kontrollerar vi om de inkommande raderna är antingen en insats eller en uppdatering.Om ingen matchning hittas är raden en ny dimensionsmedlem och den måste infogas.Om en matchning hittas finns dimensionsmedlemmen redan och vi behöver tocheck för SCD-typ 2-ändringar., Om du inte har en mycket stor dimension kan du användaden fullständiga cachen:
konfigurera söktransformationen för att skicka icke-matchande rader till no match-utgången. I SSIS 2005 finns inte det här alternativet ännu, så du kan antingen använda felutmatningen eller ställa in omvandlingen för att ignorera fel ochsplit ut insatser och uppdateringar med en villkorlig delning.
i anslutningsfönstret hämtar följande SQL-fråga surrogatekey, Business key (CustomerName) och SCD Type 2-kolumnerna., För varje medlem hämtas endast den senaste raden genom att filtrera på fältet ValidTo.
platsfältet byts om till Location_OLD för tydlighetens skull. I rutan kolumns, matcha på affärsnyckeln och välj alla andra kolumner.
Nu kan vi lägga till en OLE DB-Destination på duken. Denna destination kommer att skriva alla nya rader till dimensionen. Anslut Lookup Ingen Match Outputof lookup omvandling till destinationen.,
i kartläggningsfönstret kartlägger du kolumnerna i dataflödet med kolumnerna i dimensionstabellen.
kolumnen SK_Customer lämnas ommappad, eftersom det är en identitetskolumnoch dess värden genereras av databasmotorn. ValidTo columnis lämnade också tomt. Nya rader har inget värde för den här kolumnen.
i del 2 av detta tips fortsätter vi vår konfiguration av dataflödet,där vi kontrollerar om en rad är en typ 2-uppdatering eller inte.,
nästa steg
- Om du vill veta mer om att implementera långsamt föränderliga dimensioner inSSIS, kan du kolla in följande tips:
- använda SQL Server MERGE Statement för att bearbeta typ 2 långsamt ändra dimensioner
- laddar historiska Data i en SQL Server datalager
- hantera långsamt föränderliga dimensioner i SQL Server Integration Services
- Du kan hitta fler SSIS utvecklingstips iDenna översikt.,
Senast uppdaterad: 2018-08-09
om författaren
Visa alla mina tips