在使用鸿鹄进行数据分析的过程中经常会使用正则表达式来抽取字段。通常情况下,在添加了正则表达式抽取规则后,查询性能不会有非常大的性能下降。
如果原来查询需要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对数据解析性能做进一步评估
在鸿鹄数据分析中,正则表达式的性能问题可能导致查询速度显著下降。文章通过一个Istioaccesslog日志解析案例,展示了正则表达式中的灾难性回溯如何影响效率。使用regex101.com检测并改写正则表达式,从灾难性回溯优化到懒惰匹配,显著提升了解析速度。建议在遇到性能问题时,利用在线工具和鸿鹄的TableFunction进行测试和评估。
3212

被折叠的 条评论
为什么被折叠?



