2017-08-16 77 views
1

如何通過傳遞表名模式來排除Nifi的CaptureChangeMySQL處理器中的某些表(名稱)?Regex表名模式以排除CaptureChangeMySQL中的某些表


例如,我有500個表格和他們對應的歷史表格。 捕獲更改應適用於員工,訂單等,但不適用於其對應表EmployeeHistory,OrderHistory等。 簡而言之,帶有'歷史'後綴的表應該由處理器過濾。


我試圖

1)$ .table_name:等於( 'DeviceHistory'):不是() - 沒有工作

2)$ {表名:等於( '*史'):不()} - 沒有工作或者

回答

2

NiFi CaptureChangeMySQL processor documentation,該表名稱模式字段設置爲:

用於匹配影響匹配表的CDC事件的正則表達式(正則表達式)。正則表達式必須與存儲在數據庫中的表名匹配。如果該屬性未設置,則不會根據表名稱篩選事件。

這應該是Java regex string。縱觀NiFi CaptureChangeMySQL processor source code,這裏是這個值是如何使用的代碼片段:

// 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()); 

其中tableNamePattern持有Pattern.compile(YOUR_TABLE_NAME_PATTERN)

我寫了在此基礎上的一個示例程序,並得到使用此正則表達式的字符串所需的行爲:

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

這裏是一個演示:https://regex101.com/r/VWuSTy/1/tests

+0

感謝Kevdoran,它仍包括歷史記錄表。我已經嘗試過你在這裏說的話。你認爲我可以嘗試別的嗎? – Hem

+0

@Hem它看起來像負向預測並不像我們希望的那樣,當它放置在一個貪婪的操作符(如「+」)後面時,它的工作方式不太合適。我用一些應該起作用的東西更新了我的答案。你可以試試嗎? – kevdoran

+0

再次感謝! Kevdoran。不知道爲什麼即使在使用您共享的新正則表達式之後,處理器仍然無法按預期工作。我確實瞭解你採取的邏輯和方法,它應該起作用。無論如何,我感謝你的努力和幫助。 – Hem

相關問題