Mysql
 sql >> Database >  >> RDS >> Mysql

Come indovinare lo schema in Mysqlinput al volo in Talend

Se stai utilizzando una versione in abbonamento di Talend, puoi utilizzare il tipo di colonna dinamica. Puoi definire una singola colonna per il tuo input di tipo "Dinamico" e associarla a una colonna dello stesso tipo nel tuo componente di output. Questo otterrà dinamicamente le colonne dalla tabella a e le mapperà alle stesse colonne nella tabella b. Ecco un esempio .
Se si utilizza Talend Open Studio, le cose si complicano un po' perché Talend prevede un elenco di colonne per i componenti di input e output che devono essere definiti in fase di progettazione.

Ecco una soluzione che ho messo insieme per aggirare questa limitazione.

L'idea è di elencare tutte le colonne della tabella a presenti nella tabella b. Quindi convertilo in un elenco di colonne separate da virgole, nel mio esempio id,Theme,name e salvalo in una variabile globale COLUMN_LIST . Un secondo output di tMap costruisce lo stesso elenco di colonne, ma questa volta inserendo virgolette singole tra le colonne (in modo che possano essere utilizzate come parametri per CONCAT funzione in seguito), quindi aggiungi virgolette singole all'inizio e alla fine, in questo modo:"'", id,"','",Theme,"','",name,"'" e salvalo in una variabile globale CONCAT_LIST .

Nel prossimo lavoro secondario, interrogo table a utilizzando il CONCAT funzione, dandogli l'elenco delle colonne da concatenare CONCAT_LIST , recuperando così ogni record in una singola colonna in questo modo 'value1', 'value2',..etc

Quindi alla fine eseguo un INSERT interrogare su table b , specificando l'elenco di colonne fornito dalla variabile globale COLUMN_LIST , e i valori da inserire come una singola stringa risultante dal CONCAT funzione (row6.values ).

Questa soluzione è generica, se sostituisci i nomi delle tabelle con variabili di contesto, puoi utilizzarla per copiare i dati da qualsiasi tabella MySQL a un'altra tabella.