2017-06-02 3 views
0

Ich verwende einen Zeilenfilter, um Spalten herauszufiltern, die länger sind als die angegebene Länge. Unter Filterbedingungen gibt es keine Bedingungen für die Überprüfung der Zeilenlänge.So filtern Sie Zeilen nach Länge in Kettle

So ist die Abhilfe zu verwenden:

Field1 REGEXP [^.{0,80}$] 
OR 
Field1 IS NULL 

Field2 REGEXP [^.{0,120}$] 
OR 
Field2 IS NULL 

Längenprüfung ist eine sehr häufige Anforderung. Gibt es eine Funktion/einfachere Möglichkeit, dies zu tun, die ich vermisse?

Antwort

2

Use Data Validator Schritt:

Erstellen Sie eine neue Validierung für jede Spalte, die Sie überprüfen möchten, und „Max Stringlänge“ für jede Validierung erstellt gesetzt.

Sie fehlerhafte Zeilen umleiten „Fehlerbehandlung von Schritt“ Hop mit: enter image description here

standardmäßig diesen Zeilen haben die gleiche Struktur und Werte wie die Eingabezeilen, aber Sie können auch zusätzliche Informationen, wie der Name der fehlerhaften Spalte oder Fehlerbeschreibung.

Alternativ können Sie vor dem Filtern mit dem Berechnungsschritt auch eine Zeichenfolgenlänge berechnen. Es können jedoch viele zusätzliche Spalten erstellt werden, wenn Sie mehrere Spalten überprüfen müssen.

Und natürlich können Sie solche Prüfungen immer in der benutzerdefinierten Java-Klasse oder dem modifizierten Java-Script-Wert durchführen.

+0

Der Datenvalidierer stoppt die Umwandlung. Wie kann ich diese Zeilen ignorieren? Gibt es einen Ausgabetyp, der alles verwirft? –

+0

Sie werden wahrscheinlich "Fehlerbehandlung von Schritt" Hop nach dem Validator-Schritt zusätzlich zu "Hauptausgabe von Schritt" Hop (Ich habe einen Screenshot als Beispiel hinzugefügt). – user4637357

1

Angenommen, Sie sprechen über Strings, können Sie einen Calculator-Schritt mit der etwas schwer zu findende Berechnung "Geben Sie die Länge eines Strings A zurück" verwenden. Dadurch erhalten Sie die Werte für den Schritt "Filterzeilen".

+1

Nicht so schwer zu finden, wenn Sie das Wort "Länge" als Filter verwenden. Nahm mich zu lange, um diese Funktion zu bemerken. – marabu