0

Je suis encore assez nouveau sur Pentaho Soon. J'aimerais savoir si cela serait possible.Personnalisez les composants Pentaho Spoon en utilisant Java

Dans le passé, j'ai eu de nombreuses mauvaises expériences avec SSIS, alors j'ai décidé à l'époque de développer mon propre ETL en utilisant C#. En pratique, .Net ne fait que l'étape d'extraction. Les données sont insérées dans DB et le reste de ETL est effectué par MSSQL Query Engine à partir de SQL normal dans les fichiers txt, que .Net lit et exécute dans MSSQL.

Mon idée est de passer de .Net à Java, et d'utiliser les fonctionnalités de Spoon. L'avantage est que j'aurais des composants Spoon disponibles. Sortie de table dans l'exemple.

Un problème que j'ai, c'est que certains fichiers plats sont livrés currupted. Dans un exemple, les lettres avec accent sont remplacées par un caractère séparateur, donc je ne peux pas simplement dire à l'outil ETL de diviser les colonnes en utilisant le séparateur, je dois d'abord vérifier combien de séparateurs sont présents et les gérer s'il y en a plus.

Je dois également vérifier si un fichier a déjà été traité ou non, s'il a été copié sur le réseau, etc. Je ne veux pas non plus que le code SQL soit stocké sur les composants du script SQL, je les veux sur les fichiers txt normaux afin que Subversion puisse suivre les changements sur eux, et l'outil ETL devrait lire ces fichiers et les envoyer à MSSQL pour être exécuté. Donc, mon idée serait d'utiliser l'interface graphique de Spoon pour construire normalement l'ETL. Et puis utilisez Eclipse pour développer sur son SDK pour personnaliser l'exécution. Par exemple, j'utiliserais un composant d'entrée de fichier texte standard dans l'interface graphique, mais mon jar aurait sa propre classe étendant la norme, qui personnalise la méthode chargée de recevoir une chaîne de caractères et de la diviser en champs, et gérer tout problème.

Mon jar instancierait ma classe au lieu de Spoon et fournirait son objet au moteur.

Est-il viable ou trop complexe de déranger?

Répondre

1

Cela me semble la bonne approche.

Dans le cas où les accents sont remplacés par des séparateurs, regardez d'abord s'il ne s'agit pas d'un problème de jeu de caractères. Si oui et cela varie d'un fichier à l'autre, placez le jeu de caractères dans une variable ou dans une logique par nom de fichier ou répertoire.

S'il ne s'agit pas d'un problème de jeu de caractères, lisez le fichier sous la forme d'une ligne et déposez-le dans une étape javascript pour utiliser l'expression rationnelle et la division. Le javascript est plus facile à manipuler que les étapes java ou regex qui sont de bons choix mais moins souples pour commencer. Pour voir si le fichier a été traité ou non, réinventez la roue selon le schéma suivant: placez le fichier traité dans un répertoire donné, puis utilisez l'étape File exists pour les traiter ou non (adapter librement à votre cas) .

Pour exécuter le script SQL contenu dans un fichier, lisez leur contenu dans un champ et attribuez-le à l'étape Dynamic SQL Row.

Vous pouvez mettre tout cela dans un plugin personnalisé, de sorte que chaque fois que vous ouvrez cuillère, vous aurez votre propre étape. C'est vraiment facile à faire, mais à vrai dire, il y a longtemps que je ne le fais plus. Il est beaucoup plus facile d'utiliser l'étape Transformation Executor dans une autre transformation ou dans un travail. Permettez-moi de mentionner le chapitre 22 du livre Pentaho Kettle Solution qui explique (par exemple) comment appeler kettle de Java. C'est très amusant.

- Si vous avez besoin d'aide, acceptez cette réponse et postez une nouvelle question. -

+0

Merci beaucoup pour les conseils! En effet, il vaudrait mieux développer de nouveaux composants dans Eclipse et les attacher à Spoon plutôt que d'avoir un pot en train d'exécuter Spoon et de faire le travail! Est-ce fait avec Transformation Executor? Pourriez-vous me montrer un tutoriel pour ça? – Hikari

+0

Bien sûr, Java serait la dernière solution. D'abord j'essaierais de le manipuler en utilisant la valeur JS modifiée. Est-il possible de conserver le code js dans un fichier txt, comme je veux le faire avec le code sql? J'ai essayé Dynamic SQL Row, il semble exiger que le fichier sql soit dans un champ. N'y a-t-il pas un endroit pour ajouter des paramètres de travail, ou un bouton de navigation pour pointer vers le fichier sql? Oui, je suis noob pour le moment. – Hikari

+0

Vous avez un exemple pour 'l'exécuteur de transformation 'entre autres dans le répertoire exemple qui se trouve juste à côté de votre spoon.bat (spoon.sh). Remarque: La différence entre le travail et la transformation est que dans un trans, toutes les étapes s'exécutent en même temps alors que dans un travail, elles sont exécutées en séquence. Cela vous permet de contrôler le parallélisme mais peut provoquer des surprises (blocage des verrous d'écriture, troncature involontaire, variable affectée trop tard, ...) – AlainD