Search

onze sponsors

microsoft_logo.gif


 

computrain_logo.JPG

Forum Login | Register
   Forum

 

Subject: HULP gezocht voor ETL probleem
Prev Next
You are not authorized to post a reply.

Author Messages
Ruud BootsUser is Offline

Posts:62

21-11-2006 20:53:04 Alert 
wie kan mij helpen met onderstaand ETL probleem?


de input is een flatfile met de volgende structuur en volgorde:

100 regel 1
200 regel 2
300 regel 3
400 regel 4
500 regel 5
100 regel 1a
200 regel 2a
300 regel 3a
400 regel 4a
500 regel 5a


en moet omgezet worden naar een tabel met de volgende structuur:

kolom1              kolom2              kolom3                  kolom4          kolom5
100 regel 1       200 regel 2       300 regel 3       400 regel 4        500 regel 5
100 regel 1a     200 regel 2a     300 regel 3a     400 regel 4a      500 regel 5a



bij voorbaat dank

Ruud


pbraake@computrain.nlUser is Offline

Posts:0

24-11-2006 16:10:25 Alert 
Hoi Ruud,

Als het even statisch is als je voorbeeld lijkt, klint het als de nieuwe T-SQL pivot.
Het zal echter wel wat dynamischer zijn

Peter
Ruud BootsUser is Offline

Posts:62

27-11-2006 20:39:48 Alert 
Het is inderdaad een dynamische flat file source, wisselend van structuur en inhoud.
De enige constante is dat elk record start met de regel die begint met 100.

Inmiddels een T-SQL oplossing met een nested cursor aan het ontwikkelen, met dank aan Paul van Oordt.

Andre Kamman ook bedankt voor je reactie !

Ruud
André KammanUser is Offline
PASS Nederland

Posts:137


29-11-2006 09:10:50 Alert 
Ik had geen rekening gehouden met de feature "Email me when someone replies to this thread. ".
De oplossingsrichting waar ik mee kwam gaf namelijk geen correct antwoord op je vraag. Toen ik dat zag heb ik de posting gewist maar toen had je al een mail gehad waarschijnlijk :-)

Dan kan ik net zo goed mijn antwoord weer posten :

Je kunt met de SSIS "conditional split" functionaliteit je stroom records afhankelijk van de inhoud naar verschillende outputs sturen.
Dit is met name geschikt als je die output ook naar verschillende tabellen wilt hebben. In combinatie met andere SSIS componenten kun je wellicht toch voor elkaar krijgen wat jij van plan bent. Ik heb al een flink aantal van dergelijke puzzels kunnen oplossen die ik anders alleen maar met een cursor of zo zou kunnen doen.

Met een nested cursor kun je nagenoeg elke constructie wel verwerken, nadeel is dan wel dat het veel tijd kost. Als het dus om veel records gaat kun je snel in tijdnood raken.
Ruud BootsUser is Offline

Posts:62

29-11-2006 12:28:34 Alert 
dank voor je uitgebreide post;

laadtijd zal vermoedelijk geen issue worden, het betreft bestanden van electronische betalingen van Bank en Postbank; voor onze organisatie zijn dat relatief weing records. Ik schat dat 10.000 records meer uitzondering dan regel zijn.
Een test met ruim 5000 records laad met bulk insert en wat datacleansing in zo'n 7 secs. op mijn notebook. Op de server zal dat sneller moeten kunnen.

Ruud
Marcel WestraUser is Offline

Posts:8

22-01-2007 17:25:07 Alert 
het is alweer een tijdje geleden , maar een script source is misschien ook een oplossing. het boekje Scritping SQL Server 2005 Integration Service beschrijft hoe je dit moet doen (van donald farmer)
biesebejUser is Offline

Posts:0

06-02-2007 16:34:31 Alert 


Hoi Ruud,

Ik zie dat je gegevens van een kolom naar records moest omzetten.

ieder record moest met 100 beginnen.

Ik heb een zelfde probleem maar bij mij is de uitslag RC1 het laatste veld die bij een record.

9 uitslagen en dan weer een nieuw record.

06036072

917

10028030018

20061231

K

BW1

0

RC1

06035824

774

10031972010

20061228

K

BW1

0

RC1


moet worden :
kolom1 kolom2 kolom3 kolom4 kolom5 kolom6 kolom7 kolom8 kolom9
6036072 917 1E+10 20061231 K BW1 0 RC1
6035824 774 1E+10 20061228 K BW1 0 RC1

wat is de handigst truuk ?

groetjes Jan Dirk

Ruud BootsUser is Offline

Posts:62

07-02-2007 12:21:57 Alert 
Hoi jan Dirk,

een pragmatische oplossing wellicht, maar wel doeltreffend;
importeer de gegevens in een tabel met een id veld met een identity property.
een cursor over de tabel met aflopende sortering op het id; het laatste veld RC1 wordt het 1e veld, er vanuit gaande dat de structuur in het voorbeeld consequent is tot aan het eind van het bestand.


Voor de verdere verwerking van de gegevens gebruik ik zelf het onderstaande script, hier en daar aan jou voorbeeld aangepast

--@maxint om laatste recordset te kunnen afhandelen
declare @maxint int
set @maxint = 2147483647 --hoogste INT waarde

declare t cursor for
select id, text
from brontabel --bevat het id en data geïmporteerd in het veld text volgens bovenstaande oplossing
where code = 'RC1'
order by id desc --aflopende sortering is noodzakelijk voor de juiste volgorde
declare @id1 int, @id2 int, @text1 nvarchar(max), @text2 nvarchar(max)
set @id2 = @maxint
open t
--begin recordset
fetch next from t into @id1, @text1
if @@fetch_status <> 0 goto einde
--begin volgende recordset
fetch next from t into @id2, @text2
while @id2 is not null and @id1 <> @maxint
begin

--plaats hier de gewenste bewerking op de selectie uit de cursor
--bijvoorbeeld:
insert target_table (id,text)
select @id1, text
from brontabel
where id between @id1 and @id2-1 -- -1 selecteert laatste record behorende bij @id1

set @id1 = @id2
fetch next from t into @id2, @text2
if @@fetch_status <> 0
set @id2 = @maxint
end
close t
deallocate t
einde:
print 'klaar'


--groet Ruud
biesebejUser is Offline

Posts:0

07-02-2007 15:08:00 Alert 
Hoi Ruud,

Bedankt voor de snelle reactie.
ga vandaag proberen of het werkt.

groetjes Jan Dirk
You are not authorized to post a reply.
Forums > Forums > Ontwikkelen > HULP gezocht voor ETL probleem



ActiveForums 3.6
  
Copyright (c) 2012 PASS Nederland   Privacy Statement  Terms Of Use