doris数据库使用正则表达式过滤
时间: 2025-06-29 07:23:30 浏览: 15
### 如何在 Doris 数据库中使用正则表达式进行数据过滤
Apache Doris 支持通过内置函数 `REGEXP` 或者 `RLIKE` 来实现基于正则表达式的模式匹配,这使得复杂的数据筛选变得简单高效[^4]。
#### 使用 REGEXP/RLIKE 进行基本字符串匹配
假设存在一张名为 `web_logs` 的表,其中有一列 `url_path` 存储访问路径。为了找出所有包含特定关键词 "product" 的记录:
```sql
SELECT * FROM web_logs WHERE url_path REGEXP '.*product.*';
```
此语句会返回 URL 路径中含有单词 "product" 的所有日志条目。
#### 结合其他条件进行更复杂的查询
当需要进一步限定查询范围时,比如只查看某一天内的产品页面访问情况,则可以在原有基础上增加时间戳字段作为额外约束条件:
```sql
SELECT *
FROM web_logs
WHERE access_time >= '2023-10-01' AND access_time < '2023-10-02'
AND url_path RLIKE '^/products/[a-zA-Z]+$';
```
这段代码不仅限定了日期区间,还利用了更为精确的正则表达式来确保仅匹配 `/products/` 下面的具体商品 ID 页面。
#### 利用 CTE 提升可读性和性能优化
对于涉及多步逻辑处理的情况,可以采用公用表表达式 (CTE),使整个查询结构更加清晰易懂,并可能带来一定的执行效率提升[^2]:
```sql
WITH filtered_urls AS (
SELECT id, url_path
FROM web_logs
WHERE url_path REGEXP '/category/[0-9]+'
),
final_results AS (
SELECT w.*
FROM web_logs w JOIN filtered_urls fu ON w.id = fu.id
WHERE w.access_time BETWEEN '2023-09-01' AND '2023-09-30'
)
SELECT * FROM final_results;
```
上述脚本首先提取符合条件的日志项到临时结果集 `filtered_urls` 中;接着再从中挑选指定时间段内发生的事件形成最终输出集合 `final_results`。
阅读全文
相关推荐



















