ETL: estrazione da 200 tabelle: flusso di dati SSIS o T-SQL personalizzato?


12

Sulla base della mia analisi, un modello dimensionale completo per il nostro data warehouse richiederà l'estrazione da oltre 200 tabelle di origine. Alcune di queste tabelle verranno estratte come parte di un carico incrementale e altre saranno a pieno carico.

Da notare, abbiamo circa 225 database di origine tutti con lo stesso schema.

Da quello che ho visto, la creazione di un semplice flusso di dati in SSIS con un'origine OLE DB e una destinazione OLE DB richiede che le colonne e i tipi di dati siano determinati in fase di progettazione. Ciò significa che alla fine finirò con oltre 200 flussi di dati solo per l'estrazione.

Dal punto di vista della manutenibilità, questo mi sembra un grosso problema. Se avessi bisogno di apportare qualche modifica radicale al codice di estrazione, avrei dovuto modificare 200 diversi flussi di dati.

Un'opzione alternativa, ho scritto un piccolo script che legge i database di origine, i nomi delle tabelle e le colonne che desidero estrarre da una serie di tabelle di metadati. Il codice viene eseguito in più loop e utilizza SQL dinamico per estrarre dalle tabelle di origine tramite un server collegato e OPENQUERY.

Sulla base dei miei test, questo non è ancora veloce come l'utilizzo di un flusso di dati SSIS con un'origine e una destinazione OLEDB. Quindi mi chiedo che tipo di alternative ho. I pensieri finora includono:

  1. Utilizzo di EZAPI per generare programmaticamente pacchetti SSIS con un flusso di dati semplice. Le tabelle e le colonne da estrarre verrebbero dalle stesse tabelle di metadati menzionate in precedenza.
  2. Acquista software di terze parti (componente dinamico del flusso di dati)

Qual è il modo migliore per affrontare questo? Quando si tratta di programmazione .NET, sono un principiante, quindi anche il tempo necessario per accelerare solo con le basi è un problema.


1
Poiché tutti i 225 database hanno lo stesso schema, è possibile mantenere una vista che unisce i dati di tutti i 225 database e punta il pacchetto SSIS su quello? Anche se questo può sembrare uno strumento di clobbering e non funzionerà necessariamente magicamente, sembra molto più facile da gestire rispetto ai 225 pacchetti SSIS (anche se gestisci un po 'di automazione lì). Potresti anche andare a metà strada e creare una vista per ogni set di database, ad esempio database 1-25, 26-50, 51-75, ecc.
Aaron Bertrand

I database risiedono su più server che penso lo renda più complicato. In realtà ho provato a creare una vista di diverse tabelle sulla mia casella di sviluppo su 225 database e la lettura dei dati è stata dolorosamente lenta.
8kb,

1
Bene, si vorrebbe solo una vista per fare riferimento a database sullo stesso server. E ancora, una singola vista su tutte le 225 tabelle non funzionerà magicamente, ma penso che tu possa ancora dividere e conquistare e non avere 225 flussi di dati.
Aaron Bertrand

Risposte:


12

Non vorrei avere 200 flussi di dati in un unico pacchetto. Il tempo necessario per aprire e validare ti renderebbe vecchio prima del tuo tempo.

EzAPI è divertente ma se sei nuovo su .NET e SSIS, oh no, non lo vuoi. Penso che passerai molto più tempo a conoscere il modello a oggetti SSIS e possibilmente a gestire COM che a lavorare davvero.

Dato che sono pigro, collegherò BIML come opzione gratuita che non hai elencato. Da una risposta su SO /programming/13809491/generating-several-similar-ssis-packages-file-data-source-to-db/13809604#13809604

  • Biml è una bestia interessante. Varigence sarà felice di venderti una licenza per Mist, ma non è necessario. Tutto ciò di cui hai bisogno è BIDSHelper e quindi sfogliare BimlScript e cercare una ricetta che si avvicini alle tue esigenze. Una volta che lo hai fatto, fai clic sul pulsante del menu sensibile al contesto in BIDSHelper e whoosh, genera pacchetti.

Penso che potrebbe essere un approccio anche per te. Definisci il tuo BIML che descrive il comportamento dei pacchetti e quindi li genera. Nello scenario in cui descrivi dove apporti una modifica e devi correggere N pacchetti, no, correggi la tua definizione del problema e rigenera i pacchetti.

O se hai acquisito sufficiente familiarità con il framework, usa qualcosa come EzAPI per andare a riparare tutte le cose rotte. Diamine, dato che l'hai etichettato come 2005, potresti anche provare PacMan se hai bisogno di apportare modifiche di massa ai pacchetti esistenti.

Considerazioni sulla progettazione di SSIS

In generale, provo a concentrare i miei pacchetti sulla risoluzione di una singola attività (caricamento dei dati di vendita). Se ciò richiede 2 flussi di dati, così sia. Ciò che odio ereditare è un pacchetto dalla procedura guidata di importazione / esportazione con molti flussi di dati non correlati in un singolo pacchetto. Scomporli in qualcosa che risolva un problema molto specifico. Rende i miglioramenti futuri meno rischiosi poiché la superficie è ridotta. Un ulteriore vantaggio è che posso lavorare sul caricamento DimProductsmentre il mio servitore si occupa del caricamento del SnowflakeFromHellpacchetto.

Quindi utilizzare i pacchetti principali per orchestrare i flussi di lavoro secondari. So che sei nel 2005, ma la versione di SQL Server 2012 di SSIS è il pigiama del gatto. Adoro il modello di implementazione del progetto e la stretta integrazione che consente tra i pacchetti.

TSQL vs SSIS (la mia storia)

Per quanto riguarda il puro approccio TSQL, in un precedente lavoro hanno utilizzato un lavoro in 73 passaggi per replicare tutti i loro dati Informix in SQL Server. In genere ci sono voluti circa 9 ore ma potrebbe allungarsi a circa 12. Dopo aver acquistato una nuova SAN, è passata a circa 7+ ore. Lo stesso processo logico, riscritto in SSIS è stato un consistente sotto 2 ore. Facilmente il fattore più importante nel ridurre quel tempo è stata la parallelizzazione "libera" che abbiamo ottenuto utilizzando SSIS. Il processo dell'agente ha eseguito tutte queste attività in serie. Il pacchetto principale ha sostanzialmente diviso le tabelle in unità di elaborazione (5 serie parallele di attività serializzate di "esegui replicate tabella 1", tabella 2, ecc.) In cui ho cercato di dividere i bucket in unità di lavoro quasi uguali. Ciò ha consentito di popolare rapidamente le 60 tabelle di riferimento di ricerca e quindi l'elaborazione ha rallentato man mano che entrava nella "

Un altro vantaggio per me che utilizzo SSIS è che ottengo una configurazione "libera", la registrazione e l'accesso alle librerie .NET per i dati quadrati che devo colpire in un foro circolare. Penso che possa essere più facile mantenere (passare la manutenzione) un pacchetto SSIS che un approccio TSQL puro in virtù della natura grafica della bestia.

Come sempre, il tuo chilometraggio può variare.


BIML sembra molto interessante. Stavo anche considerando di creare ciascun flusso di dati come pacchetto separato e di averli poi richiamati tramite un pacchetto principale. Pensi che sia meglio? Inoltre, curioso di avere un'opinione sull'approccio T-SQL. È più lento ma l'ho provato e funzionerà.
8kb,

Ho aggiornato la mia risposta con riflessioni sul design e sul puro approccio ETL
tsql

0

Hai detto di avere 200 tabelle di origine e 225 database. Suppongo che le 200 tabelle di origine siano un conteggio di tutte le tabelle di tutti i 225 database (causa se in ogni database c'erano 200 tabelle che porteranno il numero totale di tabelle a 45000). Hai anche detto che lo schema del database è lo stesso per i 225 database.

Potresti creare prima i pacchetti SSIS solo per il 1 database e poi quando pianifichi i tuoi lavori puoi semplicemente cambiare la stringa di connessione al database usando la configurazione del pacchetto (se il tuo SQL 2005, allora userai il modello di distribuzione del pacchetto). Come menzionato nelle risposte precedenti, SQL 2012 offre nuovi modi per configurare i paremeters utilizzando il modello di distribuzione del progetto.

Puoi ottenere maggiori informazioni sulla configurazione del pacchetto con SSIS qui http://www.sql-server-performance.com/2007/package-configuration-2005/

Puoi ottenere maggiori informazioni sull'uso dei parametri di progetto da qui, /programming/15206184/how-to-configure-ssis-2012-project-to-run-under-different-environment-configurat

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.