onze sponsors
Hallo,
Ik heb een fact tabel waarin door de DWH ontwerper ongeveer 25 dimensions zijn gekoppeld. Als ik dit in SSIS defineer om vanuit de transformatie de DimKey's op te halen via lookup's. Krijg je dus 25 lookup's in de package en dan zegt BIDS: Visual studio is busy...... en dit duur heel lang.
De opplossing is om alle lookup's te verwijderen en dit gewoon te doen in de select statement voor het vullen van de fact table door 25 joins toe te voegen. 2,5mln records met 25 joins worden in 5 minuten verwerkt dus dit is nog redelijk snel.
Dit kan ik echter doen doordat alle database op dezelfde server staan.
SELECT ISNULL(D1.DimKey1,-1) , etc , measures FROM Transformation.Trn_Fact F LEFT JOIN DWH.Dimensions.Dim1 D1 ON D1.DimUID = F.Dim1UID
En deze join 25 keer herhalen voor de overige dim's De connectie voor de DFT is die naar de database Staging
Stel nu de DWH database wordt verplaatst naar een andere server. Dan zou ik dus al een linked server moeten gaan defineren, welke dan een stuk trager zou zijn.
Een andere oplossing zou zijn om in het ETL proces voor alle Dimensions een lookup table bij te houden in de staging database zodat er geen linked server hoeft te worden gedefineerd.
Nu zit de logica echter in de select statements en niet in SSIS, dit is wellicht wel beter omdat je de SQL engine gebruikt.
Als de logica echter in SSIS zou zitten heb je meer mogelijkheden voor audit omdat je de error output van de lookup kan gebruiken voor tellingen ed.
Wie is al wel eens tegen dit soort problemen aangelopen en hoe heb je het opgelost?
Ik heb nog gekeken naar work-offline of validation uit te zetten maar zelfs dit is niet voldoende voor BIDS om normaal te kunnen functioneren.
Je zou nog kunnen bedenken om meerdere update packages te defineren en in de Transformatie tabel DimKey velden toe te voegen en deze middels lookups en updates te vullen met de dimkey waarde. Dit is echter een performance downgrade van het ETL proces of niet?
Gr,
Arjan
Rob, nog bedankt voor het herinnderen aan de OUTPUT INTO optie...
Hoi Arjan,
Ik heb ook zoiets gehad bij een project, je zegt dat validation uitzetten geen optie was ? Maar er zijn 2 manieren om validation uit te zette, dmv ValidateExternalMetadata op de data source of via DelayValidation to True on package elements. Dit zou ervoor moeten zorgen dat de externe systemen nooit worden aangesproken terwijl je in BIDS aan het werk bent. Dat is volgens mij toch echt het probleem bij jou op dit moment. Zie ook mijn blogpost over dit onderwerp.
Kasper de Jonge