上云无忧 > 文档中心 > 腾讯云消息队列 CKafka - 正则提取
消息队列 CKafka
腾讯云消息队列 CKafka - 正则提取

文档简介:
Ckafka 连接器的数据处理功能提供了根据正则表达式提取消息内容的能力,正则提取采用的是开源的正则提取包 re2 。 Java 的标准正则表达式包 java.util.regex 以及其他被广泛使用的正则表达式包如 PCRE、Perlre和 Python(re),都使用回溯实现策略,即当一个 pattern 出现两个替代方案a|b 的时候,引擎将首先尝试匹配子模式a,如果匹配失败,它将重置输入流并尝试匹配子模式 b。
*此产品及展示信息均由腾讯云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠
Ckafka 连接器的数据处理功能提供了根据正则表达式提取消息内容的能力,正则提取采用的是开源的正则提取包 re2
Java 的标准正则表达式包 java.util.regex 以及其他被广泛使用的正则表达式包如 PCRE、Perlre和 Python(re),都使用回溯实现策略,即当一个 pattern 出现两个替代方案a|b 的时候,引擎将首先尝试匹配子模式a,如果匹配失败,它将重置输入流并尝试匹配子模式 b
如果这种匹配模式是深度嵌套的,则此策略需要对输入数据进行指数级的嵌套解析。如果输入的字符串很长,则匹配时间可以趋向无穷大。
相比之下,RE2J 算法通过使用非确定有限自动机在输入数据的单次解析中同时检查所有匹配项,从而实现在线性时间完成正则匹配。
数据处理中的正则提取适用于对长数组类型的消息进行特定字段的提取,下面展示几种常见的提取模式。

案例1:对手机号字段进行提取

输入 message:
		
{"message":
[
{"email":123456@qq.com,"phoneNumber":"13890000000","IDNumber":"130423199301067425"},
{"email":123456789@163.com,"phoneNumber":"15920000000","IDNumber":"610630199109235723"},
{"email":usr333@gmail.com,"phoneNumber":"18830000000","IDNumber":"42060219880213301X"}
]
}
目标 message:
		
{
"0": "\"phoneNumber\":\"13890000000\"",
"1": "\"phoneNumber\":\"15920000000\"",
"2": "\"phoneNumber\":\"18830000000\""
}
使用的正则表达式为:
		
"phoneNumber":"(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}"

案例2:对 Email 字段进行提取

输入 message:
		
{"message":
[
{"email":123456@qq.com,"phoneNumber":"13890000000","IDNumber":"130423199301067425"},
{"email":123456789@163.com,"phoneNumber":"15920000000","IDNumber":"610630199109235723"},
{"email":usr333@gmail.com,"phoneNumber":"18830000000","IDNumber":"42060219880213301X"}
]
}
目标 message:
		
{
"0": "\"email\":\"123456@qq.com\"",
"1": "\"email\":\"123456789@163.com\"",
"2": "\"email\":\"usr333@gmail.com\""
}
使用的正则表达式为:
		
"email":"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"

案例3:对身份证字段进行提取

输入 message:

		
{
"@timestamp": "2022-02-26T22:25:33.210Z",
"input_type": "log",
"operation": "INSERT",
"operator": "admin",

"message": "{\"email\":\"123456@qq.com\",\"phoneNumber\":\"13890000000\",\"IDNumber

\":\"130423199301067425\"},{\"email\":\"123456789@163.com\",\"phoneNumber\":\"15920000000\",

\"IDNumber\":\"610630199109235723\"},{\"email\":\"usr333@gmail.com\",\"phoneNumber\":\

"18830000000\",\"IDNumber\":\"42060219880213301X\"}"

}

目标 message,这里希望保留外部字段,并将message字段中的N个 IDNumber字段单独提取出来:
		
{
"@timestamp": "2022-02-26T22:25:33.210Z",
"input_type": "log",
"operation": "INSERT",
"operator": "admin",
"message.0": "130423199301067425",
"message.1": "610630199109235723",
"message.2": "42060219880213301X"
}
使用的正则表达式为:
		
[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]
这里通过多个处理链进行处理,处理链1的处理结果为:

此时需要对message字段进行二次处理,处理链2的处理结果如下:


处理结果:
		
{
"@timestamp": "2022-02-26T22:25:33.210Z",
"input_type": "log",
"operation": "INSERT",
"operator": "admin",
"message.0": "130423199301067425",
"message.1": "610630199109235723",
"message.2": "42060219880213301X"
}
这里将需要的 IDNumber 字段提取出来后,删除了原来的 message 字段,保留了外部需要的 operation 等字段,以及 message 中的 N 个需要的数据信息。
相似文档
  • 操作场景: JSON 目前是互联网信息传递中最通用的格式协议之一。目前数据处理也主要围绕 JSON 数据格式进行解析处理。 JSONPath 是针对 JSON 格式推出的消息查询语法规范。在数据处理中,不仅能够使用简单的 JSONPath 语法,快速获取复杂嵌套 JSON 结构体的某一成员的值;还能使用 JayWay 库的扩展函数,聚合或操作某一类型的成员字段。
  • 操作背景: 通过 CKafka 连接器连接 CVM 自建的服务时,根据腾讯云网络团队制定的标准跨 VPC 资源访问方案,需要先将自建服务挂载到 CLB(负载均衡)上,才能实现跨 VPC 的资源访问。
  • 操作背景: 用户在使用 CKafka 连接器访问 CLS、COS 等服务时,需要授权连接器访问用户账号下 CLS、COS 等服务的权限。如果使用 CKafka 的子账号具备访问管理的策略权限(QcloudCamRoleFullAccess),在创建 CKafka 任务时勾选 角色授权,连接器将自动为您完成授权。否则,需要拥有管理员权限(AdministratorAccess)的用户进行相应的授权后,再使用子账号创建 连接器 任务。
  • 背景: debezium connector 最初仅在创建连接任务时会同步表的存量数据,后续新增的表无法触发存量数据的同步。为了支持新增表的存量数据同步功能,debezium 采用了“信号”的模式通知 connector 进行触发新增表的存量数据同步。
  • 如何选择实例的规格? 可以借助控制台的 "迁移上云 - 规格计算器" 来计算所需的产品规格:
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部