Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como adivinhar o esquema no Mysqlinput em tempo real no Talend


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.