在clickhouse中使用正则表达式提取字段信息的方法

项目中需要从URL字段中提取音视频文件名称并进行计数,其中URL的内容类似于:https://webfs.tx.kugou.com/202203210816/146848c288decee8d51316d86a7f2d6c/part/0/960117/KGTX/CLTX001/2c7ceb6cc2340ecc8948e0ace62f0cf8.mp3,要提取出的信息是2c7ceb6cc2340ecc8948e0ace62f0cf8.mp3,使用正则表达式当然很好提取,问题是如何在clickhouse中使用呢?查阅一番资料,发现不负所望,clickhouse提供了这样的函数。

extract(haystack, pattern)

官方说明:从指定的字符串中按照pattern正则提取数据,如果无法匹配正则表达式则返回空。如果正则中不包含子模式,则返回匹配到整个表达式的内容,否则返回匹配到第一个子模式的片段。

以文章开头的需求为例,只要确定好正则表达式之后,即可直接使用:

select extract('https://webfs.tx.kugou.com/202203210816/146848c288decee8d51316d86a7f2d6c/part/0/960117/KGTX/CLTX001/2c7ceb6cc2340ecc8948e0ace62f0cf8.mp3','.*/(.*.mp3)$');

结果如图:

在这里插入图片描述

extractAll(haystack, pattern)

对于匹配到多个结果的情况,建议使用该方法,返回的是一个数组。详细的使用要求同上面的extract函数。
我随便举个例子吧,从一个指定的字符串中提取数字部分,可使用sql如下:

select extractAll('hello 123,good 456','\d+');

结果如图:
在这里插入图片描述

拓展知识

在查阅官方手册的过程中发现,其实clickhouse有很多专门的针对URL内容字段的处理函数,比如提取主机域名的方法,提取请求参数的方法等,还是十分方便的。详情可参考:https://clickhouse.com/docs/en/sql-reference/functions/url-functions/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

普普通通程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值