Question

J'ai une exigence à la requête d'une colonne dans la Ruche et en fonction du résultat que je veux faire des requêtes dans les bases de données MySQL.

Le débit est quelque chose comme ci-dessous:

  1. Requête de table de la Ruche, obtenir la liste des Identifiants
  2. Utilisez la liste des ID de requête MySQL table.La requête serait comme select a,b,c from x where id in (list from hive)

Comment dois-je faire?

Était-ce utile?

La solution

Vous avez juste besoin de faire votre requête à l'aide d'un tHiveInput composant pour récupérer l'Id et ensuite vous avez deux options, l'une façon ou de l' (et mieux) de manière à:

Pour la voie ensuite, vous pouvez exécuter à partir de la tHiveInput composant à un tFlowToIterate et puis itérer un tMySqlInput.Votre requête dans le tMySqlInput serait quelque chose comme:

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

row1 ici représente la ligne en cours d'exécution dans votre tFlowToIterate.Vous pouvez également obtenir de cette variable en appuyant sur ctrl+espace et en sélectionnant l' tFlowToIterate_x.id option.

Vous pouvez alors connecter un composant tBufferOutput à votre tMySqlInput de collecter toutes les itérations et puis le lire avec un tBufferInput composant pour la poursuite du traitement.

C'est évidemment une simple concaténation qui n'est donc pas le meilleur moyen pour l'efficacité et bien sûr ouvert à injection SQL.Mais c'est la hussarde.

Vos autres (plus difficile mais potentiellement meilleure option est d'utiliser une requête paramétrée à l'aide d'un composant tMySqlRow (actuellement pas pris en charge dans le tMySqlInput de Talend 5.4).

Cette réponse va dans quelques détails au sujet de paramétrer des requêtes dans Talend dans le cadre d'une solution à un autre problème (upserting efficacement).Comme mentionné dans la réponse, il n'y a plus de détails sur les requêtes paramétrées sur Gabriele Baldassarre blog.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top