如何通过传递表名模式在Nifi的CaptureChangeMySQL处理器中排除某些表(名称)?
例如我有500个表及其相应的历史表。 捕获更改应该适用于Employee,Order等,但不适用于其对应的表EmployeeHistory,OrderHistory等。 简而言之,处理器应该过滤带有后缀“历史记录”的表格。
我试过
1)$ .table_name:equals('DeviceHistory'):not() - not working
2)$ {table_name:equals('* History'):not()} - 不起作用
答案 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).)*$