Regex表名模式,用于排除CaptureChangeMySQL中的某些表

时间:2017-08-16 21:59:59

标签: regex-negation apache-nifi

如何通过传递表名模式在Nifi的CaptureChangeMySQL处理器中排除某些表(名称)?

例如我有500个表及其相应的历史表。 捕获更改应该适用于Employee,Order等,但不适用于其对应的表EmployeeHistory,OrderHistory等。 简而言之,处理器应该过滤带有后缀“历史记录”的表格。

我试过

1)$ .table_name:equals('DeviceHistory'):not() - not working

2)$ {table_name:equals('* History'):not()} - 不起作用

1 个答案:

答案 0 :(得分:2)

NiFi CaptureChangeMySQL processor documentation表名称模式字段设置为:

  

用于匹配影响匹配表的CDC事件的正则表达式(regex)。正则表达式必须与存储在数据库中的表名匹配。如果未设置该属性,则不会根据表名过滤任何事件。

这应该是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