项目中需要从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/

m开头,或包含 “ai” 或包含“am” 或包含2个a select province from user_log where multiMatchAny(province, ['^m', 'ai|am','a{2}']) limit 1000 3、正则表达 clickhouse sql 语法参考1. select1.1 将结果的某些列与 re2 正则表达式匹配,可以使用 COLUMNS 表1.2 ARRAY JOIN - 数组数据平铺1.3 LEFT ARRAY JOIN常用sql 汇总1. 查询数据库表大小 1. select 1.1 将结果的某些列与 re2 正则表达式匹配,可以使用 COLUMNS 表 COLUMNS(‘regexp’) CREATE TABLE default.col_names (aa Int8, ab Int8 ClickHouse是一个用于OLAP的数据分析引擎,由俄罗斯搜索巨头Yandex公司开源。1、可支持PB级超大容量的数据库管理系统。2、基于SQL语句, 使用成本低。 3、超亿级数据量分析的秒级响应,计算性能横向扩展。4、海量数据即查即用。5、提供数据的预聚合能力,进一步提升数据查询的效率。6、列式存储, 数据压缩,降低磁盘IO和网络IO,提升计算性能,节约70%物理存储。7、支持副本, 实现跨机房的数据容灾。课程基于ClickHouse的**的20.x版本,从理论到实践,由浅入深详解ClickHouse的原理和使用。1. 本课程从零开始,有Linux操作系统和SQL使用经验即可。2. 课程以案例驱动,包含大量的实践案例。3. 将ClickHouse与MySQL、Kafka、HDFS等第三方系统集成,增强ClickHouse的功能。4. 课程覆盖面广,既有基础功能的详细讲解, 也包含了集群部署、查询优化、运维管理等高级内容。 局域网网段的专有地址 10/8 地址范围:10.0.0.0到10.255.255.255 共有2的24次方个地址 172.16/12 地址范围:172.16.0.0至172.31.255.255 共有2的20次方个地址 192.168/16 地址范围:192.168.0.0至192.168.255.255 共有2的16次方个地址。 clickhouse 正则表达式 match(Address, '10[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}|172[.]((1[6-9])|(2\d)| 一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!