Pergunta

Eu tenho um requisito para consulta uma coluna no Ramo e com base na saída eu quero para consulta no banco de dados do MySQL.

O fluxo é algo como abaixo:

  1. Consulta Ramo de tabela, obter a lista de IDs
  2. Use a lista de id's para consulta da tabela MySQL.A consulta seria como select a,b,c from x where id in (list from hive)

Como eu faço isso?

Foi útil?

Solução

Você só precisa fazer a sua consulta usando um tHiveInput componente para obter o Id e, em seguida, você tem duas opções, o caminho fácil ou o difícil (e melhor) forma:

Para o caminho mais fácil em seguida, você pode executar a partir do tHiveInput componente para um tFlowToIterate e, em seguida, iterar para um tMySqlInput componente.A sua consulta no tMySqlInput componente, em seguida, ficaria algo como:

"SELECT a, b, c
FROM x
WHERE id = '" + ((Integer)globalMap.get("row1.id")) + "'"

row1 aqui representa a linha running em seu tFlowToIterate.Você também pode obter esta variável pressionando ctrl+espaço e selecionando o tFlowToIterate_x.id opção.

Em seguida, você pode conectar um tBufferOutput componente para o seu tMySqlInput componente para coletar todas as iterações e, em seguida, leia-o de volta com um tBufferInput componente para processamento posterior.

Esta é, obviamente, uma simples concatenação que não é o melhor caminho para eficiência e, claro, aberto a injeção de SQL.Mas é um áspero e pronto forma.

Outros (mais difícil, mas, potencialmente, a melhor opção é utilizar uma consulta parametrizada usando um tMySqlRow componente (não há suporte atualmente no tMySqlInput componente do Talend ' 5.4).

Esta resposta vai para algum detalhe sobre parametrizado consultas no Talend ' como parte de uma solução para outro problema (upserting de forma eficiente).Como mencionado na resposta, não há mais detalhes sobre parametrizado consultas no Gabriele Baldassarre do blog.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top