Domanda

Ho un requisito per interrogare una colonna in alveare e in base all'uscita che voglio interrogarlo in mysql db.

Il flusso è qualcosa come sotto:

    .
  1. Query Hive Table, ottieni l'elenco degli IDS
  2. Utilizzare l'elenco degli ID per interrogare la tabella MySQL.La query sarebbe come select a,b,c from x where id in (list from hive)
  3. Come faccio a farlo?

È stato utile?

Soluzione

Hai solo bisogno di creare la tua query usando un componente Thiveinput per recuperare gli ID e quindi hai due opzioni, il modo semplice o il modo duro (e migliore):

Per il modo semplice è possibile quindi eseguire dal componente THIVINPUT a un TFLOWTORYTERATE e quindi iterare a un componente TMYSQLinput. La tua query nel componente TMYSQLinput sarà quindi un aspetto simile a:

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

Row1 qui rappresenta la riga in esecuzione nel tuo Tflowtoterate. Puoi anche ottenere questa variabile colpendo Ctrl + lo spazio e selezionando l'opzione tFlowToIterate_x.id.

È possibile collegare un componente TBUFFUFFUTUTUT al componente TMYSQLinput per raccogliere tutte le iterazioni e quindi leggerlo con un componente TBUFFUFFURINPUT per un'ulteriore elaborazione.

Questa è ovviamente una semplice concatenazione che non è il modo migliore per l'efficienza e ovviamente aperto all'iniezione SQL. Ma è un modo ruvido e pronto.

L'opzione Altro (più difficile ma potenzialmente migliore) è quella di utilizzare una query parametrizzata utilizzando un componente TMYSQLrow (non attualmente supportato nel componente TMYSQLinput a partire da Talend 5.4).

Questa risposta entra in qualche dettaglio sulle query parametrizzate in Talend come parte di una soluzione a un altro problema (sopravvalutando in modo efficiente) . Come accennato in quella risposta, ci sono maggiori dettagli sulle query parametrizzate su Blog di Gabriele Baldassarre .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top