Sono attualmente in procinto di creare ETL per il nostro data warehouse. Stiamo utilizzando SSIS 2008, ma stiamo riscontrando problemi, il più grande dei quali è la difficoltà nel riutilizzo dei componenti. Abbiamo pacchetti separati per ogni tabella e ogni pacchetto prende come input un numero di variabili da un pacchetto padre. Man mano che apportiamo modifiche a queste variabili di input, ci viene richiesto di andare in ciascun pacchetto (ne abbiamo circa 15 ora, ma questo numero crescerà in modo significativo) e modificare il pacchetto per far fronte a tali cambiamenti. Ci sono anche altri problemi, tra cui l'impossibilità di eseguire SQL arbitrario per la nostra estrazione, scarse capacità di registrazione, ecc.
L'intero processo sarebbe molto più solido se esistesse un modo per sviluppare i nostri ETL nel codice, consentendo il riutilizzo del codice, librerie comuni, test unitari migliori, ecc. Esiste un linguaggio / API ETL standard di fatto per SQL Server? Sto cercando di evitare il più possibile gli strumenti della GUI.
Modifica: dovrei menzionare il mio background. Non sono un DBA e non ho una formazione DBA formale (o informale), ho praticamente capito queste cose mentre procedevo, quindi c'è ogni probabilità che sto tentando di fare cose inappropriate con SSIS o di avvicinarmi a questo ETL proiettare dall'angolazione sbagliata. Inoltre, sono attualmente impiegato nel governo dello stato, quindi tutte le soluzioni che richiedono l'acquisto di un nuovo pacchetto software non rientrano nel campo delle possibilità.
Ecco uno dei nostri compiti. Stiamo utilizzando un singolo pacchetto SSIS per caricare ogni tabella nel nostro magazzino. Ogni pacchetto Fact e pacchetto Dimension sono generalmente uguali, differiscono solo per
- Estrazioni dal database di origine
- Manipolazioni in un flusso di dati
- Si unisce alla tabella di destinazione
Cosa vorrei poter fare (che sto trovando difficile da fare in SSIS)
- Carica la query di estrazione da un file di testo. Quando gli sviluppatori stanno scrivendo e testando le loro query di estrazione, non dovrei dover manipolare la loro query in alcun modo prima che SSIS la esegua e non dovrei tagliare e incollare la query in un oggetto DB Source.
- Testare ciascun componente singolarmente. Dovrei essere in grado di testare l'intero processo ETL per una singola tabella in modo indipendente, indipendentemente dagli altri carichi della tabella.
- Apporta modifiche alla logica condivisa in un unico posto, non è necessario modificare ogni singolo pacchetto. Ogni pacchetto carica i dati nelle tabelle di controllo allo stesso modo, se voglio cambiare i dati caricati controllati, non voglio modificare tutti i 15 pacchetti (questo numero diventerà molto più grande nel tempo).
L'intero processo sembra che sarebbe molto più facile da implementare e più robusto se fatto in modo programmatico con un uso corretto del codice condiviso.