转载自 https://blog.csdn.net/weixin_40104766/article/details/123725494
项目中需要从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)$');
1
结果如图:
extractAll(haystack, pattern)
对于匹配到多个结果的情况,建议使用该方法,返回的是一个数组。详细的使用要求同上面的extract函数。
我随便举个例子吧,从一个指定的字符串中提取数字部分,可使用sql如下:
select extractAll('hello 123,good 456','\d+');
1
结果如图:
拓展知识
在查阅官方手册的过程中发现,其实clickhouse有很多专门的针对URL内容字段的处理函数,比如提取主机域名的方法,提取请求参数的方法等,还是十分方便的。详情可参考:https://clickhouse.com/docs/en/sql-reference/functions/url-functions/
————————————————
原文链接:https://blog.csdn.net/weixin_40104766/article/details/123725494