数据分析:轻松解决正则表达式性能优化问题

在使用鸿鹄进行数据分析的过程中经常会使用正则表达式来抽取字段。通常情况下,在添加了正则表达式抽取规则后,查询性能不会有非常大的性能下降。

如果原来查询需要1秒的时间,添加了正则表达式抽取规则之后同样的查询需要10秒左右的时间,那么需要检查正则表达式本身是否有性能问题。

下面以解析 Istio access log日志为例,看看如何发现问题并优化正则表达式。

案例

例如有如下 Istio 的 access log:

用如下正则表达式去抽取字段:

在鸿鹄中测试1000条 events 的解析,总共用了15秒,比没有配置正则抽取时(少于1秒)性能下降明显,这种情况下需要检查正则表达式本身是否存在问题。

用 regex101.com 去测试上述正则表达式,会得到该正则表达式包含灾难性回溯的提示:

改写正则表达式,避免回溯。(在包含.+的 capture group 中加上?使匹配规则变成懒惰匹配)

同样的1000条 events 的解析时间是0.095秒:

总结

在使用正则表达式抽取字段的时候,如果觉得性能下降明显,可以采用如下方式进一步分析排查:

  • 采用在线工具比如regex101.com 对正则表达式作初步测试

  • 结合鸿鹄内置的表函数(Table Function)generate_series对数据解析性能做进一步评估

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值