octobre
2011
Talend Open Studio est un ETL Open Source puissant et facile d’accès. Il repose sur une communauté très active et se base sur le concept de composants. La richesse de sa panoplie de composants, tant Open Source que propriétaire en est l’un de ses points forts.
Métadonnées
Talend propose la notion de métadonnée pour éditer des schémas qui reviennent souvent. Les données à ajouter à ce niveau sont tous les schémas des données que vous utilisez : tables de base de données, fichiers, services web, …
Contextes
Les éléments de contexte sont les éléments qui vont paramétrer vos jobs. Tout ce qui est variable doit donc être ajouté comme élément de contexte. On y retrouve en général les informations de connexion à une base de données, des noms de fichiers, des adresses de services web, …
Ces paramètres pourront être fixés avant l’export des jobs (autonomes, services web, …) ou passés en paramètres lors de leur appel.
Performances
Un gros piège quand on débute avec Talend, c’est son côté user friendly. Tout se fait intuitivement et on ne sait pas toujours ce qui se passe. Cela se traduit par des problèmes de performances ou des comportements inattendus.
- Réutilisez vos connexions
Avant d’utiliser des éléments d’I/O sur des SGBD (tMySQLInput, tOracleOutput, …), ajoutez un composant tXXXConnection et cochez la case « Utiliser une connexion existante » dans les paramètres de vos composants d’I/O, sans quoi Talend rouvrira une connexion pour chaque élément. - Paramétrez vos tMap
Le composant tMap, puissant et simple d’utilisation est un piège courant dans l’utilisation de Talend. Son fonctionnement par défaut consiste à charger toutes les lignes du mapping en mémoire. Si vous manipulez des volumes importants, songez à utiliser un fichier de stockage temporaire. Les paramètres du tMap vous permettent d’utiliser un tel fichier à partir d’un nombre limite de lignes chargées. - Privilégiez le SQL
Les composants de Talend (tMap, tJoin, …) chargent tout en mémoire. Les filtres sur les composants en entrée, les jointures sont réalisées sur les données déjà chargées en mémoire. Par ailleurs, le comportement par défaut des tXXXInput consiste à faire un « select * from … ». Vous chargez donc l’ensemble des tables en mémoire, puis filtrez/joignez sur ces données. Pour améliorer les performances : ne sélectionnez que les éléments donc vous avez besoin dans les tXXXInput, filtrez directement en SQL (ajoutez une clause WHERE dans les tXXXInput) plutôt que dans les tMap et en règle générale, limitez le nombre d’éléments que vous remontez en mémoire.
Pièges
Une petite liste de pièges :
- Vous utilisez un composant tXXXConnection pour chaque I/O avec une source de données pourtant, les insertions ne se font pas. Pensez à ajouter un tXXXCommit sur réussite du sous job qui contient l’insertion.
- Vous utilisez un composant tXXXConnection pour chaque I/O avec une source de données. Tout se déroule bien quand vous exécutez le job depuis Talend, mais dès que vous l’exportez vous obtenez un NullPointerException. Pensez à lier votre composant tXXXConnection à votre job avec un lien « OnComponentOK » ou « OnSubjobOK » (dans le cadre d’un composant isolé comme une connexion, l’effet est le même).
- Votre job plante et finit par corrompre votre base de données. Ajoutez un composant tXXXRollback sur erreur du sous job. Attention, cela ne fonctionnera que pour les données qui n’ont pas été committées pour la connexion que vous choisissez. C’est à dire qu’il faut absolument que tous les composants d’I/O sur la source de données utilisent cette connexion.
- Pour être sûr de faire le bon mapping dans un tMap, vous exécutez d’abord une requête dans un client SQL quelconque. Une fois que ca fonctionne, vous la transposez au monde Talend en testant au fur et à mesure et surprise, ca ne fonctionne plus. Certains SGBD ne sont pas sensibles aux accents ou à la casse tandis que Talend l’est. Une requête de comparaison entre deux chaînes peut fonctionner dans votre client et échouer dans Talend. Vous pouvez transformer un peu les chaînes chargées à l’aide des routines Talend (TalendString et sa méthode removeAccents par exemple…)
- Vous obtenez des messages indiquant des erreurs sur le type. Lorsqu’il récupère des schémas à partir de sources de données, Talend a tendance à modifier les types des données. C’est ainsi que, sur MySQL, les int deviennent des long par exemple. De même, il se peut que vous vouliez utiliser un wrapper java pour un type primitif (Integer au lieu de int…). Dans ce cas pensez à cocher l’option « Nullable » lors de la définition du schéma.