Hive之正则表达式RLIKE详解及示例

news2025/3/4 7:13:57

目录

一、RLIKE 语法及核心特性

1. 基本语法

2. 核心特性

二、常见业务场景及示例

场景1:过滤包含特定模式的日志(如错误日志)

场景2:验证字段格式(如邮箱、手机号)

场景3:提取复杂文本中的关键词

场景4:排除无效数据(如非数字字符)

三、高级用法与技巧

1. 忽略大小写匹配

2. 匹配多行文本

3. 组合多个条件

四、性能优化建议

1.避免全表扫描

2.预编译正则模式

 3.简化正则表达式

五、常见问题与注意事项

1. 转义字符问题

2. 贪婪匹配陷阱

3. 空值处理

六、常用正则模式速查表

Hive 中的 RLIKE(或 REGEXP)是用于判断字符串 是否匹配正则表达式 的关键操作符,返回布尔值(TRUE/FALSE)。它在数据过滤、模式匹配和条件判断中非常高效

一、RLIKE 语法及核心特性

1. 基本语法

SELECT ...
FROM table
WHERE column RLIKE 'pattern';  -- 或者使用 REGEXP

2. 核心特性

  • 返回值:布尔值(TRUE/FALSE)。

  • 匹配规则:基于 Java 正则引擎,需对特殊字符双重转义(如 \\d 表示数字)。

  • 大小写敏感:默认区分大小写,可通过 (?i) 忽略大小写(如 '(?i)error' 匹配 "ERROR" 或 "error")。

  • 贪婪匹配:默认贪婪模式(匹配最长可能字符串)。

二、常见业务场景及示例

场景1:过滤包含特定模式的日志(如错误日志)

需求:筛选包含 ERROR 或 WARN 的日志行。

SELECT log_time, log_message
FROM server_logs
WHERE log_message RLIKE '\\b(ERROR|WARN)\\b';  -- 使用 \\b 匹配单词边界

-- 示例匹配:
-- "2023-10-05 [ERROR] Disk full"
-- "2023-10-06 [WARN] High CPU usage"

场景2:验证字段格式(如邮箱、手机号)

需求:校验用户表中邮箱格式是否合法。

SELECT user_id, email
FROM user_info
WHERE email RLIKE '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$'; 

-- 合法示例:alice@example.com
-- 非法示例:user@.com 或 alice@domain

场景3:提取复杂文本中的关键词

需求:检测文本中是否包含“支付成功”或“订单完成”的关键词(电商场景)。

SELECT order_id, log_text
FROM order_logs
WHERE log_text RLIKE '支付成功|订单完成';  -- 使用 | 表示逻辑“或”

场景4:排除无效数据(如非数字字符)

需求:过滤掉包含非数字字符的订单ID。

SELECT order_id
FROM orders
WHERE order_id RLIKE '^\\d+$';  -- 仅匹配纯数字

-- 有效示例:'12345' → 匹配
-- 无效示例:'A123'  → 不匹配

三、高级用法与技巧

1. 忽略大小写匹配

使用 (?i) 标志:

-- 匹配 "error"、"Error"、"ERROR"
SELECT log_message
FROM logs
WHERE log_message RLIKE '(?i)error';

2. 匹配多行文本

使用 (?s) 标志(让 . 匹配换行符):

-- 匹配跨行文本(如包含 "start...end" 的日志)
SELECT log_text
FROM multi_line_logs
WHERE log_text RLIKE '(?s)start.*end';

3. 组合多个条件

-- 匹配同时包含 "login" 和 "fail" 的日志(顺序无关)
SELECT *
FROM auth_logs
WHERE log_message RLIKE '.*login.*fail.*|.*fail.*login.*';

四、性能优化建议

1.避免全表扫描

结合分区字段或索引字段(如日期)缩小扫描范围: 

SELECT *
FROM logs
WHERE dt = '2023-10-05' 
  AND log_message RLIKE 'critical';

2.预编译正则模式

SET hivevar:ip_pattern='\\d+\\.\\d+\\.\\d+\\.\\d+';
SELECT *
FROM logs
WHERE log_message RLIKE ${hivevar:ip_pattern};

 3.简化正则表达式

优先使用具体字符范围(如 [0-9] 代替 \\d),减少回溯。

五、常见问题与注意事项

1. 转义字符问题

Hive 正则使用 Java 引擎,需双重转义:

  • 匹配数字:\\d(正确) vs \d(错误)。

  • 匹配点号(.):\\.(正确) vs .(错误,会匹配任意字符)。

2. 贪婪匹配陷阱

默认贪婪匹配可能导致意外结果,使用 ? 启用非贪婪模式:

-- 提取最短匹配
SELECT REGEXP_EXTRACT('abc123def456', '\\d+?', 1);  -- 输出 '123'(非贪婪)
SELECT REGEXP_EXTRACT('abc123def456', '\\d+', 1);   -- 输出 '123456'(贪婪)

3. 空值处理

NULL 值与 RLIKE 结合时返回 NULL,需用 COALESCE 处理:

SELECT *
FROM table
WHERE COALESCE(column, '') RLIKE 'pattern';

六、常用正则模式速查表

场景正则表达式示例
手机号(中国)^1[3-9]\\d{9}$13812345678
邮箱^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$user@domain.com
IP地址(IPv4)\\b\\d+\\.\\d+\\.\\d+\\.\\d+\\b192.168.1.1
URLhttps?://[^\\s]+http://example.com
日期(YYYY-MM-DD)\\d{4}-\\d{2}-\\d{2}2023-10-05

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2309357.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【定昌Linux系统】部署了java程序,设置开启启动

将代码上传到相应的目录,并且配置了一个.sh的启动脚本文件 文件内容: #!/bin/bash# 指定JAR文件的路径(如果JAR文件在当前目录,可以直接使用文件名) JAR_FILE"/usr/local/java/xs_luruan_client/lib/xs_luruan_…

Java零基础入门笔记:(7)异常

前言 本笔记是学习狂神的java教程,建议配合视频,学习体验更佳。 【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩_bilibili 第1-2章:Java零基础入门笔记:(1-2)入门(简介、基础知识)-CSDN博客 第3章…

【字符串】最长公共前缀 最长回文子串

文章目录 14. 最长公共前缀解题思路:模拟5. 最长回文子串解题思路一:动态规划解题思路二:中心扩散法 14. 最长公共前缀 14. 最长公共前缀 ​ 编写一个函数来查找字符串数组中的最长公共前缀。 ​ 如果不存在公共前缀,返回空字符…

react 中,使用antd layout布局中的sider 做sider的展开和收起功能

一 话不多说,先展示效果: 展开时: 收起时: 二、实现代码如下 react 文件 import React, {useState} from react; import {Layout} from antd; import styles from "./index.module.less"; // 这个是样式文件&#…

easyExcel使用案例有代码

easyExcel 入门,完成web的excel文件创建和导出 easyExcel官网 EasyExcel 的主要特点如下: 1、高性能:EasyExcel 采用了异步导入导出的方式,并且底层使用 NIO 技术实现,使得其在导入导出大数据量时的性能非常高效。 2、易于使…

苹果廉价机型 iPhone 16e 影像系统深度解析

【人像拍摄差异】 尽管iPhone 16e支持后期焦点调整功能,但用户无法像iPhone 16系列那样通过点击屏幕实时切换拍摄主体。前置摄像头同样缺失人像深度控制功能,不过TrueTone原彩闪光灯系统在前后摄均有保留。 很多人都高估了 iPhone 的安全性,查…

视觉图像坐标转换

1. 透镜成像 相机的镜头系统将三维场景中的光线聚焦到一个平面(即传感器)。这个过程可以用小孔成像模型来近似描述,尽管实际相机使用复杂的透镜系统来减少畸变和提高成像质量。 小孔成像模型: 假设有一个理想的小孔,…

脚本无法获取响应主体(原因:CORS Missing Allow Credentials)

背景: 前端的端口号8080,后端8000。需在前端向后端传一个参数,让后端访问数据库去检测此参数是否出现过。涉及跨域请求,一直有这个bug是404文件找不到。 在修改过程当中不小心删除了一段代码,出现了这个bug&#xff0…

leetcode第39题组合总和

原题出于leetcode第39题https://leetcode.cn/problems/combination-sum/description/题目如下: 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以…

SQLark 数据迁移|断点续迁已上线(Oracle-达梦)

数据迁移是 SQLark 最受企业和个人用户欢迎的功能之一,截止目前已帮助政府、金融、能源、通信等 50 家单位完成从 Oracle、MySQL 到达梦的全量迁移,自动化迁移成功率达 96% 以上。 在 Oracle 到达梦数据库迁移过程中,SQLark V3.3 新增 断点续…

Element Plus中el-tree点击的节点字体变色加粗

el-tree标签设置 <el-tree class"tree":data"treeData":default-expand-all"true":highlight-current"true"node-click"onTreeNodeClick"><!-- 自定义节点内容&#xff0c;点击的节点字体变色加粗 --><!-- 动…

vmware安装firepower ftd和fmc

在vmware虚拟机中安装cisco firepower下一代防火墙firepower threat defence&#xff08;ftd&#xff09;和管理中心firepower management center&#xff08;fmc&#xff09;。 由于没有cisco官网下载账号&#xff0c;无法下载其中镜像。使用eveng模拟器中的ftd和fmc虚拟镜像…

计算机毕业设计SpringBoot+Vue.js医院资源管理系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

[含文档+PPT+源码等]精品基于Python实现的微信小程序的乡村医疗咨询系统

基于Python实现的微信小程序的乡村医疗咨询系统背景&#xff0c;可以从以下几个方面进行阐述&#xff1a; 一、社会背景 医疗资源分布不均&#xff1a;在我国&#xff0c;城乡医疗资源分布不均是一个长期存在的问题。乡村地区由于地理位置偏远、经济条件有限&#xff0c;往往…

Python实现GO鹅优化算法优化BP神经网络回归模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 传统BP神经网络的局限性&#xff1a;BP&#xff08;Back Propagation&#xff09;神经网络作为一种…

7.1.2 计算机网络的分类

文章目录 分布范围交换方式 分布范围 计算机网络按照分布范围可分为局域网、广域网、城域网。局域网的范围在10m~1km&#xff0c;例如校园网&#xff0c;网速高&#xff0c;主要用于共享网络资源&#xff0c;拓扑结构简单&#xff0c;约束少。广域网的范围在100km&#xff0c;例…

千峰React:Hooks(上)

什么是Hooks ref引用值 普通变量的改变一般是不好触发函数组件的渲染的&#xff0c;如果想让一般的数据也可以得到状态的保存&#xff0c;可以使用ref import { useState ,useRef} from reactfunction App() {const [count, setCount] useState(0)let num useRef(0)const h…

[Windows] 免费电脑控制手机软件 极限投屏_正式版_3.0.1 (QtScrcpy作者开发)

[Windows] 极限投屏_正式版 链接&#xff1a;https://pan.xunlei.com/s/VOKJf8Z1u5z-cHcTsRpSd89tA1?pwdu5ub# 新增功能(Future)&#xff1a; 支持安卓14(Supports Android 14)提高投屏成功率(Improve the success rate of mirror)加快投屏速度(Accelerate screen mirrorin…

C++初阶—list类

第一章&#xff1a;list的介绍及使用 1.1 list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指…

【子网掩码计算器:Python + Tkinter 实现】

子网掩码计算器&#xff1a;Python Tkinter 实现 引言代码功能概述代码实现思路1. 界面设计2. 功能实现3. 事件处理 子网掩码计算器实现步骤1. 导入必要的库2. 定义主窗口类 SubnetCalculatorApp3. 创建菜单栏4. 创建界面组件5. 判断 IP 地址类别6. 计算子网信息7. 其他功能函…