带有正则表达式的 debezium 表白名单

Posted

技术标签:

【中文标题】带有正则表达式的 debezium 表白名单【英文标题】:debezium table whitelist with regular expression 【发布时间】:2018-12-23 01:05:51 【问题描述】:

我有一些带有 bg_ 和 cp_ 前缀的数据库表,例如“bg_table1”、“bg_table2”和“cp_table1”。还有一些其他没有任何前缀的表,例如 my_table1、user_action 等。

我有两个 debezium postgreSQL 连接器,并尝试按照 Debezium - http://debezium.io/docs/connectors/postgresql/#connector-properties 配置 table.whitelist 属性。我的要求如下:

在第一个连接器中,我要加载名称以 bg_cp_ 开头的表 在第二个连接器中,我想加载其余的表 - bg_cp_ 开头

我在连接器配置中使用了类似下面的东西,但不起作用:

第一个连接器配置:

"table.whitelist": "public.bg_*,public.cp_*" 

第二个连接器配置:

"table.whitelist": ""  Cannot figure out need your help

如果有人能帮我弄清楚,那就太好了。提前致谢!

【问题讨论】:

对于您的第二个连接器,您可以使用 table.blacklist 而不是指定白名单。 【参考方案1】:

为您的白名单试试这个:

"table.whitelist": "public\.(bg|cp)_.*"

Demo

并尝试将其用于您的黑名单:

"table.whitelist": "public\.(?!(bg|cp)_)[^_]+_.*"

Demo

第一个模式应该几乎适用于任何正则表达式引擎。第二种模式使用负前瞻。只有当你的正则表达式引擎支持它时它才会起作用。如果没有,那么使用您想要使用的逻辑编写模式将更加困难。

注意:在 Java 代码的上下文中,您可能需要加倍反斜杠来转义点等内容。也就是说,您可能必须使用以下版本,例如

"table.whitelist": "public\\.(bg|cp)_.*"

【讨论】:

嗨蒂姆,注册连接器时显示以下错误:javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: com.fasterxml.jackson.databind.JsonMappingException: Unrecognized character escape ' 。 (代码 46)。任何线索 是的,尝试使用两个反斜杠来转义点,例如\\.q.v.我更新的答案。

以上是关于带有正则表达式的 debezium 表白名单的主要内容,如果未能解决你的问题,请参考以下文章

正确的表白方式(正则表达式)

具有字符限制的 Javascript 正则表达式白名单

Java正则匹配域名白名单

用于输入验证的正则表达式白名单 - 不区分重音

正则表达式用于电子邮件,但具有白名单[重复]

在 Debezium Mysql 连接器中将更多表列入白名单的有效方法