2016-12-05 5 views
0

Unsere Anforderung besteht darin, die Durchflussdaten basierend auf dem Zustand zu teilen. Wir dachten, "ExecuteStreamCommand" -Prozessor dafür zu verwenden (intern wird es Java-Klasse verwenden), aber es gibt nur Single-Flow-Datendatei. Wir hätten gerne zwei Flussdatendateien, eine für übereinstimmende und eine andere für unerreichte Kriterien.Apache NiFi zum Aufteilen von Daten basierend auf der Bedingung

Ich schaute auf "RouteText" -Prozessor, aber es hat keine Funktion, Java-Klasse als Teil davon zu verwenden.

Lassen Sie mich wissen, wenn jemand einen Vorschlag hat.

+3

Was ist die Bedingung und warum brauchen Sie eine Java-Klasse? – JDP10101

+0

Hallo, Wenn eine bestimmte Zeichenfolge an der angegebenen Position "ABC" ist, dann muss ich diese Nachricht zu einem anderen Kafka-Thema verschieben. Soi möchte die Zeichenkette "ABC" dynamisch aus der DB holen und prüfen, ob wir in Zukunft weitere verschiedene Befehlstypen hinzufügen können. –

+0

So anders gesagt, Sie haben eine eingehende FlowFile. Sie möchten das Ergebnis einer DB-Query verwenden, um zu prüfen, ob das Ergebnis im Inhalt der FlowFile an einer bestimmten Position enthalten ist. Dann route basierend darauf, ob es ist oder nicht. Ist das richtig? Auch welche "DB" benutzt du? Zuletzt, ist der Inhalt der eingehenden FlowFile in einem bestimmten Format? – JDP10101

Antwort

0

Ich glaube, Sie GetMongo verwenden könnten, um diese Definition Werte und speichert sie in einer Karte von DistributedMapCacheClientService zugegriffen zu lesen, dann RouteOnContent zu routen verwenden, um die eingehenden flowfiles basierend auf das Fehlen/Vorhandensein der abgerufenen Werte.

Wenn das nicht funktioniert, könnten Sie stattdessen Route das Abfrageergebnis von GetMongo zu PutFile und dann ScanContent verwenden, die auf dem Dateisystem aus einem Wörterbuch-Datei liest und Routen flowfiles basierend auf das Fehlen/Vorhandensein dieser Schlüsselwörter in der Inhalt.

Schließlich, wenn alles andere fehlschlägt, können Sie ExecuteScript verwenden, um diese Schritte in einem einzigen Prozessor zu kombinieren und zu matched/unmatched Beziehungen zu routen. Es verarbeitet Groovy-Code problemlos, sodass Sie Ihre vorhandene Java-Klasse bei Bedarf direkt aufrufen können.

+0

1. funktioniert nicht. Wie können wir also in "Directory File" auf Mongo-Daten zugreifen? Muss ich FYI, Input zu ScanContent ist Mongo und ListeningPort. –

+0

Sie müssen die Ergebnisse der Mongo-Abfrage in eine Flatfile schreiben, die Sie auf der Festplatte speichern. Abhängig vom Ausgabeformat der Abfrage können Sie 'ReplaceText' verwenden, um es korrekt zu formatieren. Verwenden Sie dann den Ausgabepfad von 'PutFile' als den Wörterbuchdateipfad von' RouteOnContent', so dass er diese Definitionen liest. – Andy