Frage

Ich muss eine Spalte in Hive abfragen und möchte sie basierend auf der Ausgabe in der MySQL-Datenbank abfragen.

Der Ablauf sieht etwa wie folgt aus:

  1. Fragen Sie die Hive-Tabelle ab und rufen Sie die Liste der IDs ab
  2. Verwenden Sie die Liste der IDs, um die MySQL-Tabelle abzufragen.Die Abfrage wäre wie select a,b,c from x where id in (list from hive)

Wie mache ich das?

War es hilfreich?

Lösung

Sie müssen Ihre Abfrage nur mit einer tHiveInput-Komponente durchführen, um die IDs abzurufen, und dann haben Sie zwei Möglichkeiten, den einfachen Weg oder den schwierigen (und besseren) Weg:

Auf einfache Weise können Sie dann von der tHiveInput-Komponente zu einem tFlowToIterate laufen und dann zu einer tMySqlInput-Komponente iterieren.Ihre Abfrage in der tMySqlInput-Komponente würde dann etwa so aussehen:

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

row1 stellt hier die Zeile dar, die in Ihr tFlowToIterate mündet.Sie können diese Variable auch abrufen, indem Sie Strg+Leertaste drücken und auswählen tFlowToIterate_x.id Möglichkeit.

Sie könnten dann eine tBufferOutput-Komponente mit Ihrer tMySqlInput-Komponente verbinden, um alle Iterationen zu sammeln, und sie dann mit einer tBufferInput-Komponente zur weiteren Verarbeitung wieder einlesen.

Dies ist offensichtlich eine einfache Verkettung, die dann nicht die beste Möglichkeit für Effizienz darstellt und natürlich offen für SQL-Injection ist.Aber es ist ein harter Weg.

Ihre andere (schwierigere, aber möglicherweise bessere) Option besteht darin, eine parametrisierte Abfrage mithilfe einer tMySqlRow-Komponente zu verwenden (derzeit in der tMySqlInput-Komponente ab Talend 5.4 nicht unterstützt).

Diese Antwort geht detailliert auf parametrisierte Abfragen in Talend als Teil einer Lösung für ein anderes Problem (effizientes Upserting) ein.Wie in dieser Antwort erwähnt, gibt es weitere Einzelheiten zu parametrisierten Abfragen Gabriele Baldassarres Blog.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top