2017-08-16 1 views
1

Wie bestimmte Tabelle (Namen) in Nifis CaptureChangeMySQL-Prozessor auszuschließen, indem Sie ein Tabellenname Muster übergeben?Regex Tabellenname Muster zum Ausschließen bestimmter Tabellen in CaptureChangeMySQL


Für z.B. Ich habe 500 Tabellen und ihre entsprechenden Verlaufstabellen. Capture-Änderung sollte für Employee, Order usw. aber nicht für ihre entsprechenden Tabellen EmployeeHistory, OrderHistory usw. funktionieren. Kurz gesagt, Tabellen mit Postfix 'History' sollten vom Prozessor gefiltert werden.


Ich versuchte

1) $ .Tabellenname: equals ('DeviceHistory'): nicht() - arbeitete nicht

2) $ {table_name: equals ('* History'): (nicht)} - ​​nicht funktioniert entweder

Antwort

2

Vom NiFi CaptureChangeMySQL processor documentation, die Tabellenname Muster Feld wird als:

Ein regulärer Ausdruck (Regex) für übereinstimmende CDC-Ereignisse, die sich auf übereinstimmende Tabellen auswirken. Die Regex muss mit dem Tabellennamen übereinstimmen, wie er in der Datenbank gespeichert ist. Wenn die Eigenschaft nicht festgelegt ist, werden basierend auf dem Tabellennamen keine Ereignisse gefiltert.

Dies sollte ein Java regex string sein. Mit Blick auf die NiFi CaptureChangeMySQL processor source code, hier ist ein Code-Snippet, wie dieser Wert verwendet wird:

// Should we skip this table? Yes if we've specified a DB or table name pattern and they don't match 
skipTable = (databaseNamePattern != null && !databaseNamePattern.matcher(data.getDatabase()).matches()) 
     || (tableNamePattern != null && !tableNamePattern.matcher(data.getTable()).matches()); 

wo tableNamePattern hält Pattern.compile(YOUR_TABLE_NAME_PATTERN).

Ich schrieb ein Beispielprogramm auf dieser Basis und bekam das gewünschte Verhalten dieser Regex Zeichenfolge mit:

^(?:(?!History).)*$ 

Hier ist eine Demo: https://regex101.com/r/VWuSTy/1/tests

+0

Dank Kevdoran, ist es immer noch die Geschichte Tabellen einschließlich. Ich habe genau das versucht, was du hier gesagt hast. Denkst du, ich kann etwas anderes versuchen? – Hem

+0

@Hem Es sieht so aus, als ob das negative Lookahead nicht so funktioniert, wie wir es wollen, wenn es nach einem gierigen Operator wie '+' platziert wird. Ich habe meine Antwort mit etwas aktualisiert, das funktionieren sollte. Kannst du es versuchen? – kevdoran

+0

Danke nochmal! Kevdoran. Nicht sicher, warum der Prozessor immer noch nicht wie erwartet funktioniert, auch nachdem Sie den neuen regulären Ausdruck verwendet haben. Ich verstehe die Logik und die Vorgehensweise, die Sie gewählt haben, und es hätte funktionieren müssen. Ich schätze Ihre Bemühungen und helfe trotzdem. – Hem

Verwandte Themen