Talend ' consulta de dados em mysql com base em contribuições de ramo
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:
- Consulta Ramo de tabela, obter a lista de IDs
- 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?
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.