I programmatori dovrebbero usare SSIS e, in caso affermativo, perché? [chiuso]


94

In qualità di sviluppatore .NET, per quali motivi dovrei preferire i pacchetti SSIS alla scrittura di codice? Abbiamo un sacco di pacchetti in produzione dove attualmente lavoro, e sono un incubo sia da "scrivere" (forse disegnare?) Che da mantenere. Ogni pacchetto sembra una ciotola di spaghetti multicolori con script C # e VB.NET mescolati nei punti in cui le astrazioni si scompongono. Per capire cosa fa ogni "Esegui attività SQL" o "Foreach Loop", devo fare doppio clic sulla dannata cosa e sfogliare un albero di valori ed espressioni letterali, sparsi su più schede.

Sono di mentalità aperta, quindi mi piacerebbe sapere se altri bravi sviluppatori trovano SSIS più produttivo della semplice scrittura di codice. Se ritieni che SSIS sia più produttivo, dimmi perché.


4
non so come lo fa, ma SSIS è molto più veloce di qualsiasi codice manuale che ho scritto per creare un data warehouse. è uno strumento progettato per il lavoro - prova a suddividere le attività in pacchetti figlio che vengono eseguiti da un pacchetto principale
Mr Shoubs


5
Mi sono appena imbattuto in questo. Sto lavorando per mantenere alcuni pacchetti SSIS problematici e ho scritto un decompilatore per estrarne il lavoro utile in un programma C #. code.google.com/p/csharp-dessist
Ted Spence

5
Dalla mia esperienza, SSIS può essere doloroso se hai script "lunghi" e / o "complessi" o molti script. Il debug di un'app della console è molto più semplice. In SSIS, non è possibile eseguire il debug dello script da solo. I messaggi di errore prodotti a causa di uno script sono criptici e non è possibile vedere la riga esatta che ha causato l'errore. IMO, se le esigenze del progetto possono essere soddisfatte con componenti SSIS standard, SSIS potrebbe essere la strada da percorrere. Ma per questo è necessario conoscere i limiti dei componenti SSIS. Ad esempio, questo video mostra perché "invia attività di posta" è quasi inutile - youtube.com/watch?v=IlUzkMPYDSk
Steam

3
questa domanda ha 7 risposte, quindi non ha sollecitato dibattiti, argomenti, sondaggi o discussioni estese. Perché non tenerlo aperto?
Michael Freidgeim

Risposte:


94

Uso SSIS ogni giorno per mantenere e gestire un grande data warehouse e cubo. Sono stato al 100% business intelligence e data warehousing da due anni. Prima di allora ero uno sviluppatore di applicazioni .NET per 10.

Il valore di SSIS è come un motore di flusso di lavoro per spostare i dati da un punto a un altro con forse qualche trasformazione limitata e diramazioni condizionali lungo il percorso. Se i tuoi pacchetti contengono molti script, il tuo team sta usando SSIS per le attività sbagliate o non è a suo agio con SQL o è entrato nel clamore. I pacchetti SSIS sono molto difficili da eseguire il debug. I componenti dello script sono un incubo assoluto e dovrebbero essere usati solo per la formattazione, il loop o come ultima risorsa.

  1. Mantieni i tuoi pacchetti semplici, attività SQL e attività del flusso di dati.
  2. Eseguire quanto più lavoro possibile al di fuori di SSIS, preferibilmente in SQL
  3. Mantieni le tue variabili in un unico ambito globale
  4. Mantieni il tuo SQL in variabili o archivia procedure, mai in linea
  5. Conserva i valori delle tue variabili in un archivio di configurazione, preferibilmente un database SQL

1
Con i problemi che ho avuto con SSIS, avrei dato una risposta più parziale (come se non si potesse dire dalla tonalità della mia domanda :)). Bella risposta, Kevin.
Charles

6
Come hai lavorato con .NET per 10 anni se è stato rilasciato nel 2002?
Brady Holt

7
[quote] Microsoft ha avviato lo sviluppo di .NET Framework alla fine degli anni '90 originariamente con il nome di Next Generation Windows Services (NGWS). Verso la fine del 2000 furono rilasciate le prime versioni beta di .NET 1.0 [/ quote] Ecco come probabilmente stava lavorando con la beta.
nitefrog

Alla domanda è stata data risposta nel 2010, quindi togliete i due anni di BI, e poi gli ulteriori 10, dal 1998, due anni prima della versione beta di cui parli. Altrimenti, buona risposta! :)
finoutlook

Sì, l'ambito globale ha un senso. Se lo rendi locale e desideri accedervi altrove, allora hai un problema. Non puoi semplicemente cambiare l'ambito del locale in globale. Devi invece fare molti clic ed eliminare. Se hai anche 10-15 persone del posto, questo diventa un dolore.
Steam

52

Ho provato a utilizzare SSIS diverse volte e ci ho rinunciato. IMO è molto più semplice fare tutto ciò di cui ho bisogno in C #. SSIS è troppo complesso, ha troppi trucchi e non ne vale la pena. È molto meglio dedicare più tempo al miglioramento delle competenze C # piuttosto che dedicare lo stesso tempo all'apprendimento di SSIS: otterrai molto più ritorno sulla tua formazione.

Inoltre, trovare e mantenere le funzionalità in una soluzione VS è molto più semplice. Il test unitario con VS è facile. Tutto quello che devo fare è controllare il sorgente in Subversion e verificare come è stato caricato. I pacchetti SSIS di test unitario sono molto coinvolti per usare un eufemismo.

Inoltre, c'erano situazioni in cui SSIS non riusciva silenziosamente a popolare alcune colonne in alcune righe, saltandole semplicemente senza sollevare eccezioni. Abbiamo trascorso molto tempo a risolvere i problemi e a capire cosa stava succedendo. Lo sviluppo di una soluzione alternativa in C # ha richiesto meno di un'ora e funziona senza problemi per due anni.


Grazie per i tuoi punti Alex. Ecco un esempio di quello che penso possa essere un gotcha: stackoverflow.com/questions/21616435/… .
Steam

2
Esiste un elenco di tutti gli argomenti di programmazione / C # che uno sviluppatore ETL DEVE conoscere? Per esempio. LINQ, SqlDataReader, DataTable ecc. Anch'io ritengo che SSIS non sia adatto per attività complesse. Se si dispone di un semplice progetto / attività "copia-incolla", SSIS potrebbe essere lo strumento migliore.
Steam

@blasto, hai provato Rhino ETL: ayende.com/blog/3102/rhino-etl-2-0
AK

Alex, la risposta di Jerome ha anche suggerito Rhino ETL. Mi sembra oscuro. Quindi, sarei riluttante a usarlo per mancanza di documentazione, supporto e tutorial. Inoltre, sembra che solo uno sviluppatore ci stia lavorando. Ciò diminuisce la mia fiducia nello strumento. Lo proverei per divertimento o per curiosità, ma non posso usarlo per un vero progetto. Grazie.
Steam

Se qualcuno vuole un tutorial su Rhino ETL (con puro C #) eccone uno - codeproject.com/Articles/34556/Write-ETL-jobs-in-pure-C
Steam

14

A mio parere, SSIS è solo per operazioni ETL e non dovrebbe contenere alcuna logica al di fuori di tale ambito.


8
ETL = Extract Transform Load
Christoph

3
È più o meno come mi sento. Nel nostro caso, stiamo utilizzando SSIS per fare cose come CSV e-mail (o SFTP) contenenti informazioni sui prezzi. Le ramificazioni, gli script incorporati, ecc. Sono piuttosto orribili. Se spostassi solo alcuni dati con SSIS, probabilmente non sarebbe così male.
Charles

1
Penso che la tua risposta potrebbe avere un po 'più di profondità.
Steam

3
La T in ETL non può implicare una logica? Solo un pensiero ...
cs0815

Se è solo correlato alla modellazione / instradamento dei dati, certo. Ma eviterei qualsiasi logica aziendale.
Christoph

11

Ho avuto la sfortunata esperienza di lavorare a un progetto in cui pensavamo che SSIS sarebbe stata una soluzione abbastanza buona per aggregare e combinare i dati da diverse fonti. La cosa sfortunata è che all'inizio funzionava alla grande, ma poi i requisiti sono cambiati e alla fine ci siamo resi conto che era lo strumento sbagliato.

forse lo stavamo usando in modo errato ma abbiamo avuto molte difficoltà se avessimo cambiato il nostro schema e alla fine abbiamo semplicemente riutilizzato le nostre definizioni ORM dal front-end per scrivere uno strumento personalizzato in C # per farlo. Poiché avevamo già il modello di dati, è stato sorprendentemente facile. ovviamente YMMV e io non siamo affatto un esperto di SSIS, ma in questo caso SSIS ha causato un sacco di lavoro duplicato e mal di testa quando solo rimboccarsi le maniche e "codificare a mano" era più facile del previsto.

Quindi penserei molto alla flessibilità quando si considera SSIS.


7
Condivido alcune delle stesse sensazioni. È facile refactoring del codice ... non tanto con un DSL visivo.
Charles

Luke, puoi darci una descrizione dei requisiti del tuo progetto? Grazie.
Steam

@blasto stavamo cercando di integrare i dati da diversi database e utilizzare alcune delle utilità di corrispondenza delle stringhe probabilistiche integrate per unire i dati dai diversi sistemi (essenzialmente database CRM). Sono passati più di 5 anni, quindi non ricordo tutti i dettagli.
Luca

Se sei un negozio .net e sei coinvolto nello spostamento di dati per scopi di data warehousing, SSIS ti aiuterà solo se lo conosci abbastanza bene. Ho visto molte persone che sono guru .net ma non riescono a comprendere completamente SSIS (e non li biasimo). SSIS richiede sicuramente una persona che lo conosca abbastanza bene altrimenti finirai per scrivere pacchetti che sono inefficienti e non possono fare la cosa giusta.
rvphx

6

SSIS ha il suo posto e quel posto non è una programmazione generale o una sostituzione per le stored procedure. Proviene dalla scuola ETL (Extract, Transform, and Load) ed è lì che si trova la sua strada.

Il vecchio nome (DTS, Data Transformation Services) e il nuovo nome (SSIS, Sql Server Integration Services) chiariscono entrambi che si tratta di un servizio (o insieme di servizi) progettato per manipolare i dati per integrare il database di SQL Server in processi più grandi.


Non vedo come questa risposta dovrebbe ottenere così tanti voti positivi. Non menziona il motivo per cui SSIS non può darti la potenza di un linguaggio di programmazione. Non ha senso per me. Un esempio di dove SSIS non riesce a trovare una corrispondenza con un linguaggio di programmazione è il debug. Apparentemente, SSIS 2012 lo cambia. Quindi, forse, potrebbe essere, lo strumento sta per diventare più intuitivo per i programmatori.
Steam

>> Un esempio di dove SSIS non riesce a trovare una corrispondenza con un linguaggio di programmazione ... Sono d'accordo, non è un linguaggio di programmazione. È uno strumento ETL decente.
DaveE

4

Se desideri spostare i tuoi dati in modo programmatico, potresti dare un'occhiata a Rhino ETL.

Sto anche lavorando sul mio framework, Fluent ETL , poiché trovo SSIS un po 'troppo coinvolto per semplici attività di dati relative allo sviluppo, come il caricamento dei dati di unit test da un file CSV.


Rhino ETL è oscuro e al momento ha solo 24 domande su SO: stackoverflow.com/questions/tagged/rhino-etl . Penso che C # sarebbe abbastanza buono per ETL, se hai la conoscenza e l'esperienza.
Steam

1
Esistono alternative popolari a Rhino ETL?
Steam

3

SSIS non è un programma. Molte cose sono più veloci da fare in SSIS e si ottengono informazioni dettagliate sull'avanzamento e sugli errori come amministratore, il che può essere molto buono negli scenari che SSIS è destinato a risolvere, perché a volte le cose vanno storte e l'amministratore ha bisogno di molte informazione.

Detto questo, SSIS non è davvero così utile se non hai le cose che si auto-spiegano - sono pensate per qualcosa, entrare troppo nella programmazione generale le fa schifo.


2
Puoi darci un esempio di come SSIS può accelerare lo sviluppo in uno scenario e rallentare negli altri?
Steam
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.