Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment deviner le schéma dans Mysqlinput à la volée dans Talend

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.