Se você estiver usando uma versão de assinatura do Talend, poderá usar o tipo de coluna dinâmica. Você pode definir uma única coluna para sua entrada do tipo "Dinâmico" e mapeá-la para uma coluna do mesmo tipo em seu componente de saída. Isso obterá dinamicamente as colunas da tabela a e as mapeará para as mesmas colunas na tabela b. Aqui está um exemplo .
Se você estiver usando o Talend Open Studio, as coisas ficam um pouco mais complicadas, pois o Talend espera uma lista de colunas para os componentes de entrada e saída que precisam ser definidos em tempo de design.
Aqui está uma solução que montei para contornar essa limitação.
A ideia é listar todas as colunas da tabela a que estão presentes na tabela b. Em seguida, converta-o em uma lista de colunas separadas por vírgulas, no meu exemplo
id,Theme,name
e armazená-lo em uma variável global COLUMN_LIST
. Uma segunda saída do tMap constrói a mesma lista de colunas, mas desta vez colocando aspas simples entre as colunas (para que possam ser usadas como parâmetros para o CONCAT
depois), adicione aspas simples no início e no fim, assim:"'", id,"','",Theme,"','",name,"'"
e armazená-lo em uma variável global CONCAT_LIST
. No próximo subjob, eu consulto
table a
usando o CONCAT
função, dando-lhe a lista de colunas a serem concatenadas CONCAT_LIST
, recuperando assim cada registro em uma única coluna assim 'value1', 'value2',..etc
Então, finalmente, executo um
INSERT
consulta na table b
, especificando a lista de colunas fornecida pela variável global COLUMN_LIST
, e os valores a serem inseridos como uma única string resultante do CONCAT
função (row6.values
). Esta solução é genérica, se você substituir os nomes das suas tabelas por variáveis de contexto, poderá usá-la para copiar dados de qualquer tabela MySQL para outra tabela.