Existe-t-il un langage / une interface standard pour l'ETL programmatique dans SQL Server?


10

Je suis actuellement en train de créer des ETL pour notre entrepôt de données. Nous utilisons SSIS 2008, mais nous rencontrons des problèmes, dont le plus important est la difficulté de réutiliser les composants. Nous avons des packages séparés pour chaque table et chaque package prend en entrée un certain nombre de variables d'un package parent. Au fur et à mesure que nous apportons des modifications à ces variables d'entrée, nous devons entrer dans chaque package (nous en avons environ 15 maintenant, mais ce nombre va augmenter considérablement) et modifier le package pour faire face à ces changements. Il existe également d'autres problèmes, notamment l'impossibilité d'exécuter du SQL arbitraire pour notre extraction, des capacités de journalisation médiocres, etc.

L'ensemble de ce processus serait beaucoup plus robuste s'il existait un moyen de développer nos ETL dans le code, permettant la réutilisation du code, des bibliothèques communes, de meilleurs tests unitaires, etc. Existe-t-il un langage / API ETL standard de facto pour SQL Server? Je cherche à éviter les outils GUI autant que possible.

Edit: je devrais mentionner mes antécédents. Je ne suis pas un DBA et je n'ai pas de formation DBA formelle (ou informelle), j'ai essentiellement compris ces choses au fur et à mesure, donc il y a toutes les chances que j'essaie de faire des choses inappropriées avec SSIS ou que j'approche de cet ETL projeter sous le mauvais angle. De plus, je suis actuellement employé au sein du gouvernement de l'État, donc toutes les solutions qui nécessitent l'achat d'un nouveau progiciel ne sont pas dans le domaine des possibilités.


Voici l'une de nos tâches. Nous utilisons un seul package SSIS pour charger chaque table dans notre entrepôt. Chaque package Fact et Dimension sont généralement les mêmes, ils ne diffèrent que par

  • Extractions de la base de données source
  • Manipulations dans un flux de données
  • Fusionne dans la table de destination

Ce que j'aimerais pouvoir faire (que je trouve difficile à faire dans SSIS)

  • Chargez la requête d'extraction à partir d'un fichier texte. Lorsque les développeurs écrivent et testent leurs requêtes d'extraction, je ne devrais pas avoir à manipuler leur requête de quelque manière que ce soit avant que SSIS l'exécute et je ne devrais pas avoir à couper et coller la requête dans un objet DB Source.
  • Testez chaque composant individuellement. Je devrais pouvoir tester le processus ETL complet pour une table individuelle de manière isolée, indépendamment des autres charges de table.
  • Apportez des modifications à la logique partagée en un seul endroit, sans avoir à modifier chaque package individuel. Chaque package charge les données dans les tables d'audit de la même manière, si je veux modifier les données chargées auditées, je ne veux pas avoir à modifier les 15 packages (ce nombre va devenir beaucoup plus important au fil du temps).

L'ensemble du processus semble être beaucoup plus facile à mettre en œuvre et plus robuste s'il est effectué par programme avec une utilisation appropriée du code partagé.


4
Je ne suis PAS un très gros utilisateur de SSIS mais je peux comprendre la perception d'une courbe d'apprentissage abrupte ici. Je vous encourage à regarder quelques vidéos / blogs d'Andy Leonard, Jamie Thompson, Brian Knight qui sont des experts dans le domaine et obtenir une certaine direction. Regardez le site sqlpass.org pour des vidéos gratuites de pass Summit & sqlblog.com, pragmaticworks.com
Sankar Reddy

Je ne crois pas que la courbe d'apprentissage soit un problème. Je sais comment effectuer les tâches que je souhaite effectuer dans SSIS. J'examine un nouveau processus car les solutions que j'ai trouvées sont répétitives, fragiles et inutilement complexes.
kubi

Kubi, Si vous pouvez ajouter des détails sur les composants auxquels vous faites référence, j'apporterai quelqu'un capable de répondre à cela pour vous. Comme c'est le cas actuellement, votre question est trop large pour y répondre.
Sankar Reddy

4
@kubi - vous avez abordé l'un des sales petits secrets de l'industrie de la BI. Les outils ETL sont très, très pauvres en abstraction et en logique réutilisable. En conséquence, ils évoluent très mal avec la complexité croissante du domaine.
ConcernedOfTunbridgeWells

1
J'ai la bonne autorité sur le fait qu'environ la moitié des clients d'un certain produit vertical de l'industrie pour la banque et l'assurance (fabriqué par une entreprise dont vous avez entendu parler et généralement désignée par une couleur spécifique) prennent une décision technique explicite pour construire leur Le traitement ETL dans la procédure stockée est précis, précisément pour cette raison.
ConcernedOfTunbridgeWells

Réponses:



6

En lisant ceci, j'ai immédiatement pensé à recommander les outils de Varigence. Cependant, je vois qu'un des architectes en chef de Varigence, John Welch, est arrivé avant moi.

Les outils de Varigence sont une couche d'abstraction au-dessus de SSIS. L'avantage que cela offre est la possibilité de définir des "trucs" réutilisables, assurant ainsi la cohérence entre plusieurs packages. Vous définissez comment les packages doivent être structurés et comment ils diffèrent sur une base individuelle - les sorties "compilées" des outils de Varigence sont des packages SSIS.

Considérez-le comme Dynamic SQL pour les packages SSIS. Avec une interface graphique. Vraiment vraiment cool.


3

J'ai essayé d'utiliser SSIS plusieurs fois et j'ai abandonné. OMI, 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 cela n'en vaut pas la peine. Il est préférable de consacrer plus de temps à l'amélioration des compétences C # que de consacrer le même temps à l'apprentissage de SSIS - vous obtiendrez un retour sur votre formation beaucoup plus important. Je n'ai pas besoin d'entrer dans les détails ici - Ayende a écrit un excellent résumé auquel je n'ai rien à ajouter .

Il est également beaucoup plus facile de trouver et de maintenir des fonctionnalités dans une solution VS. Les tests unitaires avec VS sont faciles. Tout ce que je dois 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 impliqués pour le moins.

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

Aussi Rhino ETL semble être vraiment cool.

Il y a eu quelques discussions similaires sur stackoverflow .


2

Personnellement, je gère autant de processus ETL que possible en SQL. J'utilise SSIS pour importer à partir de sources de données étranges comme des sites FTP ou Excel, mais c'est juste pour obtenir des données brutes dans la base de données où SQL fait le reste.

Ma situation actuelle est relativement simple dans la mesure où la plupart des données se trouvent dans d'autres bases de données MS SQL, avec lesquelles je peux configurer des serveurs liés. Si vous devez vous connecter à d'autres plateformes, je vous recommande d'utiliser OPENQUERYet BULK INSERT. Ils peuvent être construits par programme si nécessaire, et entre les deux, ils peuvent se connecter à la plupart des types de données.

J'utilise SQL parce que c'est ce que je connais le mieux, mais il présente des avantages objectifs. Plus particulièrement, il est déjà utilisé: il n'est pas nécessaire d'apprendre ou de payer pour un nouvel outil. C'est une compétence largement disponible, qui devrait être importante pour votre patron, sinon pour vous. Puisqu'il fonctionne dans la base de données, la journalisation est facile. Il est basé sur du code en texte brut, il est donc facile à rechercher et fonctionne bien avec le contrôle de source. Il est très stable, avec très peu de chances que le fournisseur change les choses et brise la compatibilité descendante. C'est probablement au moins aussi rapide que n'importe quel langage RBAR.

Si vous avez besoin de plus, je recommande .NET, ne serait-ce que parce qu'il est utilisé dans SSIS et SQLCLR. J'utilise des applications C # pour gérer le processus ETL global - démarrer des sous-étapes, surveiller leur sortie, envoyer des e-mails. Mais presque tout cela pourrait être fait avec SQL Agent, dbmail, etc.

Y a-t-il une raison pour laquelle vous ne pouvez pas utiliser SQL pour votre ETL? Qu'est-ce qu'il n'a pas pu faire pour vous?


En effet, nous utilisons SSIS pour vider les données brutes dans des bases de données temporaires, puis nous utilisons TSQL pour définir comment nous voulons le T et le L.
Paul
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.