SIS - Importazione di file flat di grandi dimensioni

martedì 11 marzo 2008 - 12.32

jordi75 Profilo | Junior Member

Ciao.
Sto importando un file txt in ina tabella di sql server 2005 tramite ssis.
In totale vengono caricate 1500500 record di 45 campi.
Il file txt contiene il delimitatore di riga ma non di colonna, di conseguenza ho dovuto inserire una trasformazione colonna derivata tra la mia origine flat e la destinazione sql inserendo una serie di funzioni substring (conosco la lunghezza di ciascun campo).
Il risultato è un'operazione che il mio pc (il server spero ci metta meno) svolge in 3 minuti e 40 sec circa.
Sapete dirmi se questa è la soluzione migliore o se c'è qualche altra strada?
Ad esempio se lavorassi con access potrei collegare i dati esterni del file txt ad una tabella del db. In sql server non esiste nulla del genere, vero?

lbenaglia Profilo | Guru

>Sapete dirmi se questa è la soluzione migliore o se c'è qualche
>altra strada?

Ciao Giorgio,

Mi pare di capire che le colonne sono a lunghezza fissa.
In questo caso puoi procedre all'importazione utilizzando l'utility command line bcp.exe oppure il comando T-SQL BULK INSERT definendo un opportuno file di formato come nel seguente esempio:
http://groups.google.it/group/microsoft.public.it.sql/msg/24f7f20953fb8f40

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

alx_81 Profilo | Guru

>Ciao.
Ciao!

>Sto importando un file txt in ina tabella di sql server 2005 tramite ssis.
>In totale vengono caricate 1500500 record di 45 campi.
>Il file txt contiene il delimitatore di riga ma non di colonna,
>di conseguenza ho dovuto inserire una trasformazione colonna
>derivata tra la mia origine flat e la destinazione sql inserendo
>una serie di funzioni substring (conosco la lunghezza di ciascun
>campo).
>Il risultato è un'operazione che il mio pc (il server spero ci metta meno) svolge in 3 minuti e 40 sec circa.
>Sapete dirmi se questa è la soluzione migliore o se c'è qualche altra strada?
Se il campo è di lunghezza fissa e se sai le dimensioni di ogni campo (sembra proprio sia così come indica Lorenzo) usa un flat file connection manager.
Ti consente di tagliare il file proprio dove ti serve, la colonna derivata appesantisce di molto l'elaborazione, perchè ragiona riga per riga (o quasi).
Tagli il file definiendolo a lunghezza fissa nel Flat File connection manager.
Al massimo se poi devi gestire dei dati null, puoi usare il conditional split e/o la colonna derivata, ma il flat file ti prepara il file già corretto.

Se il caricamento non è necessariamente legato a logiche di importazioni particolari (tipo elaborazioni intermedie durante il caricamento) allora ti consiglio di utilizzare bcp come ti dice correttamente Lorenzo. Se ti servono logiche impegnative, puoi stare su SSIS che, per loro natura, sfruttando l'architettura NUMA , vanno fortissimo . Inoltre puoi gestire anche la cache per eventuali lookup. Ed infine hai un buon provider di log che ti consente di mantenere salvato il comportamento del tuo ssis. Infine, hai anche i dataviewers che ti permettono un monitoring in fase di debug. Dipende tutto da cosa devi fare tu. Non ha senso costruire un palazzo se ti serve una capanna
Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

jordi75 Profilo | Junior Member

Grazie mille ad entrambi. ora faccio un po' di analisi

jordi75 Profilo | Junior Member

Sc

alx_81 Profilo | Guru

>Sc
??

Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5