Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Package SSIS
mercoledì 30 luglio 2008 - 14.17
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
squilibrium
Profilo
| Junior Member
168
messaggi | Data Invio:
mer 30 lug 2008 - 14:17
Ciao a tutti
Vorrei chiedere un consiglio su come progettare un ETL con SSIS di sql server 2005.
L'ETL si deve scorrere una directory. All'interno ci sono 2 tipi di file che contengono dati da caricare su 2 tabelle.
TIPO FILE A : i record del file devono andare nella tabella GOLD
TIPO FILE B : i record del file devono andare nella tabella CLIENTI
Fin qui sembrerebbe una cosa standard.
La difficoltà nasce nel caso B : se alcuni record presentano delle caratteristiche particolari devono andare nella tabella GOLD anzichè nella tabella CLIENTI
I record destinati alla tabella GOLD devono subire delle trasformazioni standard (sia se provengono da A che da B)
e delle trasformazioni differenti a seconda della provenienza (se provengono quindi da file di tipo A o da file di tipo B).
La strada + immediata è di creare 2 dataflow:
DATAFLOW A che elabora i file di TIPO A e inserisce dentro tabella GOLD
DATAFLOW B che elabora i file di TIPO B e inserisce a seconda dei casi dentro GOLD o dentro CLIENTI.
Così facendo mi ritroverei però replicate le trasformazioni che devo fare sempre e comunque per i record che vanno inseriti dentro la tabella GOLD.
Mi piacerebbe trovare una soluzione più modulare ma non sono ancora molto pratico di SSIS e quindi non riesco ad organizzarla.
Ho letto che è possibile creare dei custom source, task e destination e credo che questa potrebbe essere una strada valida.
Qualcuno sa darmi qualche indicazione?
Grazie
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
mer 30 lug 2008 - 15:29
>Ciao a tutti
Ciao!
>Fin qui sembrerebbe una cosa standard.
>La difficoltà nasce nel caso B : se alcuni record presentano
>delle caratteristiche particolari devono andare nella tabella
>GOLD anzichè nella tabella CLIENTI
>I record destinati alla tabella GOLD devono subire delle trasformazioni
>standard (sia se provengono da A che da B)
>e delle trasformazioni differenti a seconda della provenienza
>(se provengono quindi da file di tipo A o da file di tipo B).
>
>La strada + immediata è di creare 2 dataflow:
>DATAFLOW A che elabora i file di TIPO A e inserisce dentro tabella GOLD
>DATAFLOW B che elabora i file di TIPO B e inserisce a seconda dei casi dentro GOLD o dentro CLIENTI.
>
>Così facendo mi ritroverei però replicate le trasformazioni che
>devo fare sempre e comunque per i record che vanno inseriti dentro
>la tabella GOLD.
>
>Mi piacerebbe trovare una soluzione più modulare ma non sono
>ancora molto pratico di SSIS e quindi non riesco ad organizzarla.
>
>Ho letto che è possibile creare dei custom source, task e destination
>e credo che questa potrebbe essere una strada valida.
>
>Qualcuno sa darmi qualche indicazione?
Sicuramente scriversi un custom task ti permette elasticità, anche se si introducono altre problematiche come la manutenibilità del codice scritto per quanto riguarda la compatibilità con le nuove versioni, ecc.. Oppure il fatto di dover ricompilare un task per ogni modifica..
Duplicare, diventa scomodo per la manutenibilità del SSIS stesso.
Io vedo altre due possibilità:
1 - Scrivere una stored procedure che gestisca la parte di trasformazione, in modo che sia per il file A che per i record del B che devono andare in A richiami la stessa sp.
2 - Scrivere prima i record di B che vanno in A in append al file A (formattati identici) e poi fare due dataflow diretti, senza casistiche (se non quella che salta i record del file B che devono andare in A).
La prima, ti obbliga a scrivere una Stored Procedure non troppo semplice, ma ti permette di avere un solo punto centrale.
La seconda ti aumenta un po' lo stress io, andando a ridondare su file le informazioni.
--
Alessandro Alpi | SQL Server MVP
http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
squilibrium
Profilo
| Junior Member
168
messaggi | Data Invio:
mer 30 lug 2008 - 16:32
Innanzitutto grazie per la risposta
Penso che la prima soluzione (la stored) sia la più immediata.
A me piacerebbe però creare un modulo indipendente che accetta una struttura dati (anche in memoria) e fa le sue elaborazioni. Con una stored se cambia un campo nel flusso dei dati devo modificare la chiamata alla stessa in tutti i punti in cui la utilizzo.
Con la seconda soluzione da un lato risolverei questo problema ma in realtà non posso modificare i file che leggo e crearne di nuovi mi sembra eccessivo.
Esiste un modo per impostare come data flow source una struttura in memoria? Ho visto che come data flow destination esiste il "Recordset Destination" ma non trovo una struttura equivalente fra i source
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
mer 30 lug 2008 - 17:57
>Innanzitutto grazie per la risposta
figurati
>Esiste un modo per impostare come data flow source una struttura
>in memoria? Ho visto che come data flow destination esiste il
>"Recordset Destination" ma non trovo una struttura equivalente
>fra i source
puoi usare un datareader, puoi usare uno script component come source e crearti un oggetto tuo (un buffer).
Lo script a mio avviso potrebbe darti una buona elasticità..
--
Alessandro Alpi | SQL Server MVP
http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Torna su
Stanze Forum
Elenco Threads
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 !