Door: Koen Verbeeck | Bijgewerkt: 2018-08-09 | Commentaren (4) | Verwante: 1 | 2 | 3 | 4 | Meer > Integration Services Development
Gratis MSSQLTips Webinar: Aan de Slag met SSIS
Leer hoe u aan de slag met SQL Server Integration Services en hoe te bouwen van een SSIS-project met deze demo gericht webinar.,
probleem
we willen de geschiedenis in ons datawarehouse voor meerdere dimensies bewaren.We gebruiken SQL Server Integration Services (SSIS) om de ETL (ExtractTransform en Load) te implementeren. We probeerden de ingebouwde langzaam veranderende dimensie wizard, maar de prestaties lijken slecht. Hoe kunnen we de gewenste functionaliteit implementeren met reguliere SSIS componenten?
oplossing
Inleiding tot langzaam veranderende dimensies
een langzaam veranderende dimensie (SCD) houdt de geschiedenis van zijn individuele leden bij., Er zijn verschillende methoden voorgesteld door Ralph Kimball in zijn boek The Datawarehousetoolkit:
- Type 1 – overschrijf de velden wanneer de waarde verandert. Er is geen geschiedenis.
- Type 2-Maak een nieuwe regel met de nieuwe waarden voor de velden. Extracolumns geven aan wanneer op tijd een Rij geldig was.
- Type 3-Houd de Oude waarde van een kolom in een aparte kolom.
- Er zijn meer soorten SCD ‘ s, maar ze zijn meestal een hybride combinatie van bovenstaande.
in deze tip zullen we ons richten op de type 2 situatie. Laten we illustreren met een voorbeeld., We hebben een eenvoudige tabel voor het opslaan van klantgegevens.
de kolom SK_Customer is een kolom met een identiteitsproperty die een nieuwe waarde voor elke rij zal genereren. We willen graag geschiedenis bewaren voor de locatie attribuut. Wanneer de locatie verandert van Antwerpen naar Brussel, werken we de rij niet bij, maar we voegen een nieuw record in:
met behulp van de velden ValidFrom en ValidTo geven we aan wanneer een record geldig was in de tijd. Er wordt een nieuwe surrogaatsleutel gegenereerd, maar de bedrijfssleutel-gebruikersnaam-blijft hetzelfde., Wanneer een fact tableis geladen, een lookup zal worden gedaan op de klant tafel. Afhankelijk van de tijdstempel van het feitenrecord, wordt een van de twee rijen geretourneerd. Bijvoorbeeld:
alle feiten zijn voor dezelfde klant. Wanneer u het totale verkoopbedrag voor CustomerA zou vragen, is het resultaat 31. De totale omzet per locatie bedraagt 12,75 voor Antwerpen en 18,25 voor Brussel, ook al zijn de gegevens voor dezelfde klant. Met SCDType 2 kunnen we onze gegevens analyseren met historische attributen.,
implementatiemethoden
Er zijn verschillende methoden voor het laden van een langzaam veranderende dimensie van type 2 Ina Data warehouse. Je zou kunnen kiezen voor een pure T-SQL benadering, ofwel met multipleT-SQL statements of door het MERGE statement te gebruiken. Dit laatste wordt uitgelegd in het tipgebruik van het SQL Server MERGE Statement Om type 2 langzaam veranderende dimensies te verwerken.
met SSIS kunt u de ingebouwde wizard langzaam veranderende dimensie gebruiken, die meerdere scenario ‘ s kan afhandelen., Deze wizard wordt beschreven in de tipsLoading Historische gegevens in een SQL Server Data Warehouse en handle langzaam veranderende afmetingen in SQL Server Integration Services. De downsidevan deze wizard is prestaties: het gebruikt de OLE DB-opdracht voor everyupdate, wat kan resulteren in slechte prestaties voor grotere datasets. Als u wijzigingen aanbrengt in de gegevensstroom om deze problemen op te lossen, kunt u de wizard niet opnieuw uitvoeren omdat u alle wijzigingen zou verliezen.
de laatste optie – afgezien van het gebruik van 3rdparty componenten – is het zelf bouwen van de SCD type 2 logica in de data flow,die we in de volgende sectie zullen beschrijven.,
implementatie in SSIS
De in deze tip voorgestelde oplossing werkt voor elke versie van SSIS. We zullen het voorbeeld van de klant dimensie, maar een extra veld is toegevoegd:de e-mail attribuut. We houden de geschiedenis van de e-mailadressen niet bij, dus elke nieuwe waarde zal alle andere waarden overschrijven.
Eerst lezen we de gegevens van een bron, waarschijnlijk een staging omgeving. Wanneer u een relationele bron gebruikt, kunt u de OLE DB Source component met een SQL querygebruiken om de gegevens te lezen. Selecteer alleen kolommen die u daadwerkelijk nodig hebt voor uw dimensie. De waarde van het veld wordt hier ook berekend., Omdat u typerend gegevens van de vorige dag laadt, wordt ValidFrom ingesteld op de datum van gisteren. Als u geen relationele bron hebt, kunt u deze kolom toevoegen met behulp van een afgeleide Columntransformatie.
In de volgende stap doen we een lookup tegen de dimensie.Hier zullen we controleren of de binnenkomende rijen een insert of een update zijn.Als er geen overeenkomst is gevonden, is de rij een nieuw dimensielid en moet deze worden ingevoegd.Als er een overeenkomst is gevonden, bestaat het dimension lid al en hebben we tocheck nodig voor SCD type 2 wijzigingen., Tenzij u een zeer grote dimensie hebt, kunt u de volledige cache gebruiken:
Configureer de lookup transformatie om niet-overeenkomende rijen naar de no match uitvoer te sturen. In SSIS 2005 bestaat deze optie nog niet, dus u kunt ofwel de foutuitvoer gebruiken, of de transformatie Instellen om fouten te negeren en inserts en updates te splitsen met behulp van een voorwaardelijke splitsing.
in het Verbindingsdeelvenster haalt de volgende SQL-query de kolommen surrogatekey, business key (CustomerName) en SCD type 2 op., Voor elk lid wordt alleen de meest recente rij opgehaald door te filteren op het veld ValidTo.
het veld Locatie wordt hernoemd naar Location_OLD voor de duidelijkheid. In het deelvenster kolommen, overeenkomen met de business-toets en selecteer alle andere kolommen.
nu kunnen we een OLE DB-bestemming op het canvas toevoegen. Deze bestemming zal alle nieuwe rijen naar de dimensie schrijven. Verbind de Lookup No Match Outputvan de lookup transformatie met de bestemming.,
in het deelvenster mapping worden de kolommen van de gegevensstroom in kaart gebracht met de kolommen van de dimensietabel.
De kolom SK_Customer is niet toegewezen, omdat het een IDENTITEITSCOLUMN is en de waarden worden gegenereerd door de database-engine. De validto columnis is ook leeg gelaten. Nieuwe rijen hebben geen waarde voor deze kolom.
in deel 2 van deze tip gaan we verder met onze configuratie van de data flow,waar we zullen controleren of een Rij een type 2 update is of niet.,
volgende stappen
- Als u meer wilt weten over het implementeren van langzaam veranderende dimensies inSSIS, kunt u de volgende tips bekijken:
- Het SQL Server MERGE Statement gebruiken om Type 2 langzaam veranderende dimensies
- laden van Historische gegevens in een SQL Server Data Warehouse
- Handle langzaam veranderende dimensies in SQL Server Integration Services
- u kunt meer SSIS-ontwikkelingstips vinden in dit overzicht.,
Laatst Bijgewerkt: 2018-08-09
Over de auteur
al mijn tips
weergeven