Archive for the ‘ Integration ’ Category

Import at filer via Foreach Loop i en SISS pakke

Jeg sad den anden dag med en opgave hvor en kunde dagligt ville have importeret en komma fil til en tabel i deres Sql database.

Da SQL serveren er en 2008’er, så lå det lige til højre benet at lave det med en SSIS pakke, da man kan drag n’ droppe en del af de funktioner som jeg ville få brug for.

Opgaven

Importing af komma fil indeholdende 2 kolonner, til seperat ny tabel i databasen.

Filen

Filen som jeg modtog indeholdt 2 kolonne hvor første række var headeren. Jeg har til dette indlæg ændret navnet og indhold af filen, men strukturen er den samme. I kan se filen her under.

Filen blev uploaded til webserveren af kunden i en forudbestem mappe, men i denne guide har jeg brugt D:Temp som source.

SSIS-pakken

I SSIS pakken brugte jeg et Foreach Loop Container til at kigge efter nye filer i min sourcemappe.

Foreach Loop’et blev sat op bruge en Foreach File Enumerator, og efterfølgende til at kigge efter *.txt filer i min source mappe.

Læg mærke til at det er valg Fully qualified under Retrieve file name, det får vi brug for lige om lidt.

Når Collection siden er sat op, skal vi ind på Variable Mappings op oprette en variabel hvor i stien til den fil Loop’et er nået til bliver gemt i. Og det er her vores valg af Retrieve file name har betydning. Afhængig af denne instilling, gemmes noget forskelligt i variablen.

Jeg kaldte min variable for CurrentFile. Når variablen er gemt, sørger Foreach Loopet selv for at gemme stien til filen ned i den oprettede variable. Så nu er loop’et sat op, og du skulle gerne have noget i stil med:

Nu skal der oprettes en Flat File Connection, som kan forbinde til den fil vi er nået til i Loop’et.

Flat File Connection oprettes ved at højre-klikke i området Connection Managers, og indstilles så den kan håndtere den struktur vores komma fil her. I mit tilfælde var det følgende:

Det er vigtigt at vi får ændret datatypen på vores kolonne til DT_WSTR, da vi ellers for konverterings problemer senere når vi vil importere til databasen.

Når connectoren er indstillet som vi ønsker, skal vi have fortalt den at variablen CurrentFile skal benyttes som File name. Dette gør vi ved at gå ind i Expressions, og mappe ConnectionString til variablen CurrentFile

Nu kan vi inde i loopet benytte vores forbindelsen SourceFile til at komme i kontakt med den aktuelle fil som loopet er kommet til.

Der er nu styr på forbindelsen til filerne. Nu skal vi sat en database om, samt en forbindelse til den i SISS pakken.

Først skal der oprettes en database tabellen som vi vil importere varene i, jeg har til formålet oprettet en tabel som jeg har kaldt ERP_DATA, hvor jeg har oprettet de to kolonner jeg har i filen.

Efterfølgende oprettes en OLE DB Connection som forbinder til databasen, i mit tilfælde så den således ud:

Nu har vi forbindelsen til Filen og til databasen klar, så nu er vi næsten i mål.

Nu hvor vi kan forbinde til databasen og vi kan loope på filerne, så er vi klar til at lave den del af pakken som skal importere vores data.

Der skal oprettes en Data Flow Task og inden i den oprette en Flat File Source som indstilles til at benytte fil forbindelsen SourceFile, yderligere som opretten vi en OLE DB Destination, som vi får til at benytte vores database forbindelse. Det er vigtigt at man får forbundet de to elelmter med den grønne Success pil, da man ellers får fejl når man indstiller OLE DB Destination.

Flat File Source sættes op således:

OLE DB Destination blev i mit tilfælde sat op som nedenstående, Mappings er i dette simple tilfælge bare til kolonnerne med samme navn. I mere advancerede setups vil man kunne mappe på kryds og tværs.:

Når dette er klaret, så kan vi kører pakken for første gang, og det skulle gerne spiller som Pjerrot med en banjo!.

Konklusion

SISS pakker er et stærkt værktøj som man hurtigt kan få glæde af når man skal lave store og små integrationsopgaver. Selv om guiden blev lang, så tog det ikke lang tid at sætte ovenstående kørsel op.
Jeg kun været forbi en brøkdel af det man kan med SISS pakker i denne guide, men jeg får sikkert skrevet meget mere om SQL Server Integration Services med tiden.

Teaser
Jeg har planer om inden længe at udvide guiden (evt. i en ny post), for at vise hvordan man kan flytte filen, efter den er importeret, og f.eks. appende en dato til filen.


Jeg håber i kom helskindet igennem hele smøren, den blev lidt længere end beregnet, men jeg måtte jo ikke glemme noget, og det håber jeg heller ikke jeg her.

Smid en kommentar hvis der er noget der er godt eller mindre godt, så får jeg rette op på det :-)

Jeg ligger hurtigst muligt alle filer op, så i kan hente hele pakken ned, hvis i får lyst til det.