Les programmeurs devraient-ils utiliser SSIS, et si oui, pourquoi? [fermé]

94

En tant que développeur .NET, pour quelles raisons devrais-je préférer les packages SSIS à l'écriture de code? Nous avons une tonne de paquets en production sur lesquels je travaille actuellement, et c'est un cauchemar à la fois à «écrire» (peut-être dessiner?) Et à maintenir. Chaque paquet ressemble à un bol de spaghettis multicolores avec des scripts C # et VB.NET mélangés aux points où les abstractions se décomposent. Pour comprendre ce que fait chaque "Exécuter une tâche SQL" ou "Foreach Loop", je dois double-cliquer sur cette fichue chose et parcourir un arbre de valeurs et d'expressions littérales, dispersées sur plusieurs onglets.

Je suis ouvert d'esprit, donc j'aimerais savoir si d'autres bons développeurs trouvent SSIS plus productif que la simple écriture de code. Si vous trouvez SSIS plus productif, dites-moi pourquoi.

Charles
la source
4
Je ne sais pas comment cela fonctionne, mais SSIS est beaucoup plus rapide que tout code manuel que j'ai écrit pour créer un entrepôt de données. c'est un outil conçu pour le travail - essayez de décomposer les tâches en packages enfants qui s'exécutent à partir d'un package principal
M. Shoubs
1
Lien vers une question similaire: stackoverflow.com/q/690123/327165
Ilya Berdichevsky
5
Je viens de tomber sur ça. Je travaille pour maintenir certains packages SSIS problématiques et j'ai écrit un décompilateur pour en extraire le travail utile dans un programme C #. code.google.com/p/csharp-dessist
Ted Spence
5
D'après mon expérience, SSIS peut être pénible si vous avez des sripts «longs» et / ou «complexes» ou de nombreux scripts. Le débogage d'une application console est bien plus simple. Dans SSIS, vous ne pouvez pas déboguer votre script seul. Les messages d'erreur produits en raison d'un script sont cryptiques et vous ne pouvez pas voir la ligne exacte qui a causé l'erreur. OMI, si les besoins du projet peuvent être satisfaits avec des composants SSIS standard, alors SSIS est peut-être la voie à suivre. Mais, pour cela, vous devez connaître les limites des composants SSIS. Par exemple, cette vidéo vous montre pourquoi "envoyer une tâche de courrier" est presque inutile - youtube.com/watch?v=IlUzkMPYDSk
Steam
3
cette question a 7 réponses, donc elle n'a pas sollicité de débat, d'arguments, de sondage ou de discussion prolongée. Pourquoi ne pas le garder ouvert?
Michael Freidgeim

Réponses:

94

J'utilise SSIS tous les jours pour maintenir et gérer un grand entrepôt de données et un cube. Je suis 100% business intelligence et data warehouse depuis deux ans. Avant cela, j'étais développeur d'applications .NET pendant 10 ans.

La valeur de SSIS est en tant que moteur de flux de travail pour déplacer les données d'un endroit à un autre avec peut-être une transformation limitée et un branchement conditionnel en cours de route. Si vos packages contiennent beaucoup de scripts, votre équipe utilise SSIS pour les mauvaises tâches ou n'est pas à l'aise avec SQL ou a adhéré au battage médiatique. Les packages SSIS sont très difficiles à déboguer. Les composants de script sont un cauchemar absolu et ne doivent être utilisés que pour le formatage, la mise en boucle ou en dernier recours.

  1. Gardez vos packages simples, les tâches SQL et les tâches de flux de données.
  2. Faites autant de travail que possible en dehors de SSIS, de préférence en SQL
  3. Conservez vos variables dans une seule portée globale
  4. Gardez votre SQL dans des variables ou des procédures de stockage, jamais en ligne
  5. Conservez vos valeurs de variable dans un magasin de configuration, de préférence une base de données SQL
Kevin D. White
la source
1
Avec le problème que j'ai eu avec SSIS, j'aurais donné une réponse plus biaisée (comme si vous ne pouviez pas le dire à partir de la tonalité de ma question :)). Bonne réponse, Kevin.
Charles
6
Comment avez-vous travaillé avec .NET pendant 10 ans s'il est sorti en 2002?
Brady Holt
7
[quote] Microsoft a commencé le développement du .NET Framework à la fin des années 1990 sous le nom de Next Generation Windows Services (NGWS). Fin 2000, les premières versions bêta de .NET 1.0 ont été publiées [/ quote] C'est ainsi qu'il travaillait probablement avec la bêta.
nitefrog
La question a été résolue en 2010, alors décollez les deux ans BI, puis les 10 autres, donne 1998, deux ans avant la version bêta que vous mentionnez. Sinon, bonne réponse! :)
finoutlook
Oui, la portée mondiale a du sens. Si vous le rendez local et que vous souhaitez y accéder ailleurs, vous avez un problème. Vous ne pouvez pas simplement changer la portée du local en global. Vous devez faire beaucoup de clics et de suppressions à la place. Si vous avez même 10 à 15 habitants, cela devient pénible.
Steam
52

J'ai essayé plusieurs fois d'utiliser SSIS et j'ai abandonné. IMO, il est beaucoup plus facile de faire tout ce dont j'ai besoin en C #. SSIS est trop complexe, il a trop de pièges et il n'en vaut tout simplement pas la peine. Il est préférable de passer plus de temps à améliorer les compétences C # que de passer le même temps à apprendre SSIS - vous obtiendrez beaucoup plus de retour sur votre formation.

La recherche et la maintenance des fonctionnalités dans une solution VS sont également beaucoup plus faciles. Les tests unitaires avec VS sont faciles. Tout ce que j'ai à faire est de vérifier la source dans Subversion et de vérifier comment elle s'est chargée. Les tests unitaires des packages SSIS sont très compliqués pour le dire légèrement.

En outre, il y avait des situations où SSIS échouait silencieusement à remplir certaines colonnes dans certaines lignes, les ignorant simplement sans lever d'exceptions. Nous avons passé beaucoup de temps à dépanner et à comprendre ce qui se passe. Le développement d'une solution alternative en C # a pris moins d'une heure et fonctionne sans aucun problème pendant deux ans.

AK
la source
Merci pour vos points Alex. Voici un exemple de ce que je pense pourrait être un piège - stackoverflow.com/questions/21616435/… .
Steam
2
Existe-t-il une liste de tous les sujets C # / programmation qu'un développeur ETL DOIT connaître? Par exemple. LINQ, SqlDataReader, DataTable, etc. Je pense moi aussi que SSIS n'est pas bon pour les tâches complexes. Si vous avez un projet / une tâche "copier-coller" facile, alors SSIS pourrait être le meilleur outil.
Steam
@blasto avez-vous essayé Rhino ETL: ayende.com/blog/3102/rhino-etl-2-0
AK
Alex, la réponse de Jérôme a également suggéré Rhino ETL. Cela me semble obscur. Du coup, j'hésiterais à l'utiliser faute de documentation, de support et de tutoriels. De plus, il semble qu'un seul développeur y travaille. Cela diminue ma confiance dans l'outil. J'essaierais cela pour le plaisir ou par curiosité, mais je ne peux pas l'utiliser pour un vrai projet. Merci.
Steam
Si quelqu'un veut un tutoriel sur Rhino ETL (avec C # pur) en voici un - codeproject.com/Articles/34556/Write-ETL-jobs-in-pure-C
Steam
14

À mon avis - SSIS est pour les opérations ETL uniquement et ne devrait contenir aucune logique en dehors de cette portée.

Christoph
la source
8
ETL = Extract Transform Load
Christoph
3
C'est à peu près ce que je ressens. Dans notre cas, nous utilisons SSIS pour faire des choses comme des courriels (ou SFTP) CSV contenant des informations sur les prix. Les branchements, les scripts intégrés, etc. sont assez horribles. Si vous déplaçiez simplement des données avec SSIS, ce ne serait probablement pas si grave.
Charles
1
Je pense que votre réponse pourrait être plus approfondie.
Steam
3
Le T dans ETL ne peut-il pas impliquer une certaine logique? Juste une pensée ...
cs0815
Si c'est uniquement lié à la mise en forme / au routage des données, bien sûr. Mais j'éviterais toute logique métier.
Christoph
11

J'ai eu la malheureuse expérience de travailler sur un projet où nous pensions que SSIS serait une solution suffisante pour agréger et combiner des données provenant de plusieurs sources. Le malheur était que cela fonctionnait très bien au début, mais les exigences ont ensuite changé et nous avons (finalement) réalisé que c'était le mauvais outil.

peut-être que nous ne l'utilisions pas correctement, mais nous avons eu beaucoup de difficultés si nous changions de schéma et nous avons finalement simplement réutilisé nos définitions ORM du front-end pour écrire un outil personnalisé en C # pour ce faire. Parce que nous avions déjà le datamodel, c'était étonnamment facile. évidemment YMMV et je ne suis en aucun cas un expert SSIS, mais dans ce cas, SSIS a causé beaucoup de travail en double et de maux de tête en retroussant simplement nos manches et en «codant à la main», c'était plus facile que prévu.

Donc, je penserais beaucoup à la flexibilité lorsque je considère SSIS.

Luke
la source
7
Je partage certains des mêmes sentiments. Il est facile de refactoriser le code ... pas tellement avec un DSL visuel.
Charles
Luke, pouvez-vous nous donner un aperçu des exigences de votre projet? Merci.
Steam
@blasto nous essayions d'intégrer les données de plusieurs bases de données et d'utiliser certains des utilitaires de correspondance de chaînes probabilistes intégrés pour fusionner les données des différents systèmes (essentiellement des bases de données CRM). C'était il y a plus de 5 ans, donc je ne me souviens pas de tous les détails.
lu le
Si vous êtes une boutique .net et que vous êtes impliqué dans le déplacement de données à des fins d'entreposage de données, SSIS ne vous aidera que si vous le connaissez suffisamment bien. J'ai vu beaucoup de gens qui sont des gourous .net mais qui ne comprennent pas complètement SSIS (et je ne les blâme pas). SSIS nécessite bien sûr une personne qui le connaît suffisamment bien, sinon vous finirez par écrire des packages inefficaces et ne pouvant pas faire la bonne chose.
rvphx
6

SSIS a sa place, et cet endroit n'est pas la programmation générale ou en remplacement des procédures stockées. Il vient de l'école ETL (Extraire, Transformer et Charger) et c'est là que se trouve sa solidité.

L'ancien nom (DTS, Data Transformation Services) et le nouveau nom (SSIS, Sql Server Integration Services) indiquent clairement qu'il s'agit d'un service (ou d'un ensemble de services) conçu pour manipuler les données afin d'intégrer la base de données SQL Server dans des processus plus volumineux.

DaveE
la source
Je ne vois pas comment cette réponse devrait obtenir autant de votes positifs. Il ne mentionne pas pourquoi SSIS ne peut pas vous donner la puissance d'un langage de programmation. Ça n'a aucun sens. Le débogage est un exemple où SSIS ne correspond pas à un langage de programmation. Apparemment, SSIS 2012 change cela. Donc, peut-être, peut-être, l'outil est en passe de devenir plus convivial pour les programmeurs.
Steam
>> Un exemple où SSIS ne correspond pas à un langage de programmation ... Je suis d'accord, ce n'est pas un langage de programmation. C'est un outil ETL décent.
DaveE
4

Si vous souhaitez déplacer vos données par programmation, vous pouvez consulter Rhino ETL.

Je travaille également sur mon propre framework, Fluent ETL , car je trouve SSIS un peu trop impliqué pour les tâches de données simples liées au développement, comme le chargement de données de test unitaire à partir d'un fichier CSV.

Jérôme
la source
Rhino ETL est obscur et n'a que 24 questions sur SO pour le moment - stackoverflow.com/questions/tagged/rhino-etl . Je pense que C # serait assez bon pour ETL, si vous avez les connaissances et l'expérience.
Steam
1
Existe-t-il des alternatives populaires à Rhino ETL?
Steam
3

SSIS n'est pas un programme. Beaucoup de choses sont plus rapides à faire dans SSIS, et vous obtenez de très belles informations détaillées sur la progression et les erreurs en tant qu'administrateur - ce qui peut être très bon dans les scénarios que SSIS est censé résoudre, car parfois les choses tournent mal et l'administrateur a besoin de beaucoup de information.

Cela étant dit, SSIS n'est pas vraiment utile si vous ne disposez pas des éléments auto-explicatifs - ils sont destinés à quelque chose, trop entrer dans la programmation générale les rend nul.

TomTom
la source
2
Pouvez-vous nous donner un exemple de la façon dont SSIS peut accélérer le développement dans un scénario et ralentir dans les autres?
Steam