Si vous utilisez une version d'abonnement de Talend, vous pouvez utiliser le type de colonne dynamique. Vous pouvez définir une seule colonne pour votre entrée de type "Dynamique" et la mapper à une colonne du même type dans votre composant de sortie. Cela obtiendra dynamiquement les colonnes de la table a et les mappera sur les mêmes colonnes de la table b. Voici un exemple
.
Si vous utilisez Talend Open Studio, les choses deviennent un peu plus délicates car Talend attend une liste de colonnes pour les composants d'entrée et de sortie qui doivent être définis au moment de la conception.
Voici une solution que j'ai mise en place pour contourner cette limitation.
L'idée est de lister toutes les colonnes de la table a qui sont présentes dans la table b. Ensuite, convertissez-le en une liste de colonnes séparées par des virgules, dans mon exemple id,Theme,name
et stockez-le dans une variable globale COLUMN_LIST
. Une deuxième sortie du tMap construit la même liste de colonnes, mais cette fois en mettant des guillemets simples entre les colonnes (afin qu'ils puissent être utilisés comme paramètres du CONCAT
fonction plus tard), puis ajoutez des guillemets simples au début et à la fin, comme ceci :"'", id,"','",Theme,"','",name,"'"
et stockez-le dans une variable globale CONCAT_LIST
.
Au sous-job suivant, j'interroge table a
en utilisant le CONCAT
fonction, en lui donnant la liste des colonnes à concaténer CONCAT_LIST
, récupérant ainsi chaque enregistrement dans une seule colonne comme si 'value1', 'value2',..etc
Puis enfin j'exécute un INSERT
requête sur table b
, en précisant la liste des colonnes donnée par la variable globale COLUMN_LIST
, et les valeurs à insérer en une seule chaîne résultant du CONCAT
fonction (row6.values
).
Cette solution est générique, si vous remplacez vos noms de table par des variables de contexte, vous pouvez l'utiliser pour copier des données de n'importe quelle table MySQL vers une autre table.