2017-03-20 4 views
1

Ich untersuche ETL-Tools (wie Talend) und untersuche, ob Apache Nifi verwendet werden kann. Könnte Nifi verwendet werden, die folgende auszuführen:Wie man zwei CSVs mit Apache Nifi verbindet

  1. Pick-up zwei CSV-Dateien, die auf der lokalen Festplatte
  2. die CSVs auf einer gemeinsamen Spalte
  3. die verbundene CSV auf die Festplatte schreiben Join platziert sind

Ich habe versucht, einen Job in Nifi einzurichten, konnte aber nicht sehen, wie die Verknüpfung von zwei separaten CSV-Dateien durchgeführt wird. Ist diese Aufgabe in Apache Nifi möglich?

Es sieht so aus, als könnte die QueryDNS processor verwendet werden, um die Anreicherung einer CSV-Datei mit der anderen durchzuführen, aber das scheint für diesen Anwendungsfall zu kompliziert zu sein.

Hier ist ein Beispiel der Eingangs CSVs, die auf state_id verbunden werden müssen:

Eingabedateien

customers.csv

id | name | address  | state_id 
---|------|--------------|--------- 
1 | John | 10 Blue Lane | 100 
2 | Bob | 15 Green St. | 200 

states.csv

state_id | state 
---------|--------- 
100  | Alabama 
200  | New York 

Ausgabedatei

output.csv

id | name | address  | state 
---|------|--------------|--------- 
1 | John | 10 Blue Lane | Alabama 
2 | Bob | 15 Green St. | New York 

Antwort

5

Apache NiFi ist mehr ein Datenfluss-Tool und nicht wirklich gemacht, um beliebige Joins von Streaming-Daten durchzuführen. Typischerweise sind diese Arten von Operationen besser geeignet, um Verarbeitungssysteme wie Storm, Flink, Apex usw. oder ETL-Tools zu streamen.

Die Arten von Joins, die NiFi gut kann, sind Anreicherungs-Lookups, bei denen ein Datensatz mit fester Größe vorhanden ist. In Ihrem Fall könnte es beispielsweise einen Prozessor namens LookUpState geben, der eine Eigenschaft "State Data" hat, die auf eine Datei zeigt, die alle Zustände enthält, und dann könnte die customers.csv die Eingabe für diesen Prozessor sein.

Ein Mitglied der Community begonnen, ein Projekt einen generischen Lookup-Service für Nifi zu machen: https://github.com/jfrazee/nifi-lookup-service

2

Das typische Muster folgt man hierfür die Referenz eingestellt in einen Karten-Cache-Controller-Dienst in Nifi zu laden ist. In diesem Fall sind das die states.csv Daten. Dann kommt der Live-Feed der Kundendaten und wird mit diesen Referenzdaten angereichert, etwa mit ReplaceText oder Sie schreiben sogar einen eigenen Prozessor in Groovy. Es gibt viele Möglichkeiten, dies zu unterteilen. Es gibt auch eine JIRA/PR, um dies noch einfacher zu machen. Es gibt Elemente von Live-Stream-Joins, die am besten in Verarbeitungssystemen wie Apache Storm, Spark und Flink ausgeführt werden, aber für den Fall, dass Sie es erwähnen, kann es in NiFi gut gemacht werden.