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

目录

一、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.mzph.cn/pingmian/71270.shtml

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

相关文章

在Docker中部署DataKit最佳实践

本文主要介绍如何在 Docker 中安装 DataKit。 配置和启动 DataKit 容器 登陆观测云平台,点击「集成」 -「DataKit」 - 「Docker」,然后拷贝第二步的启动命令,启动参数按实际情况配置。 拷贝启动命令: sudo docker run \--hostn…

Mac OS Homebrew更换国内镜像源(中科大;阿里;清华)

omebrew官方的源一般下载包之类的会很慢,所以通常我们都是用国内的镜像源来代替,这样会提高我们的效率。Homebrew主要有四个部分组成: brew、homebrew-core 、homebrew-bottles、homebrew-cask。 代码语言:javascript 代码运行次数&#xf…

React Native 原理

React Native 是一个跨平台移动应用开发框架,它允许开发者使用 JavaScript 和 React 来开发 iOS 和 Android 原生应用。React Native 的核心原理是通过 桥接(Bridge) 技术,使用 JavaScript 来控制原生组件,并将应用逻辑…

实验:k8s+keepalived+nginx+iptables

1、创建两个nginx的pod,app都是nginx nginx1 nginx2 2、创建两个的pod的service 3、配置两台keepalived的调度器和nginx七层反向代理,VIP设置192.168.254.110 keepalived调度器master keepalived调度器backup 两台调度器都配置nginx七层反向代理&#…

火山引擎 DeepSeek R1 API 使用小白教程

一、火山引擎 DeepSeek R1 API 申请 首先需要三个要素: 1)API Key 2)API 地址 3)模型ID 1、首先打开火山引擎的 DeepSeek R1 模型页面 地址:账号登录-火山引擎 2、在页面右下角,找到【推理】按钮&#…

Pytorch使用手册--将 PyTorch 模型导出为 ONNX(专题二十六)

注意 截至 PyTorch 2.1,ONNX 导出器有两个版本。 torch.onnx.dynamo_export 是最新的(仍处于测试阶段)导出器,基于 PyTorch 2.0 发布的 TorchDynamo 技术。 torch.onnx.export 基于 TorchScript 后端,自 PyTorch 1.2.0 起可用。 一、torch.onnx.dynamo_export使用 在 60 …

yolov8_pose模型,使用rknn在安卓RK3568上使用

最近在使用rknn的一些功能,看了看文档以及自己做的一些jni,使用上yolov8_pose的模型. 1.我们先下载一下rknn的模型功能代码,rk有自己做的一套demo 地址:GitHub - airockchip/rknn_model_zooContribute to airockchip/rknn_model_zoo development by creating an account on G…

算法:判断链表是否有环

/*** brief 判断链表是否有环* * 该函数使用快慢指针法来判断链表中是否存在环。* 快指针每次移动两步,慢指针每次移动一步。* 如果链表中存在环,那么快指针最终会追上慢指针;* 如果链表中不存在环,快指针会先到达链表末尾。* * p…

什么是 jQuery

一、jQuery 基础入门 (一)什么是 jQuery jQuery 本质上是一个快速、小巧且功能丰富的 JavaScript 库。它将 JavaScript 中常用的功能代码进行了封装,为开发者提供了一套简洁、高效的 API,涵盖了 HTML 文档遍历与操作、事件处理、…

mysql怎样优化where like ‘%字符串%‘这种模糊匹配的慢sql

一 问题描述 工作中经常遇到这种模糊匹配的慢sql: select * from 表名 where 字段 like %字符串%; 由于前面有%,导致无法走该字段上的索引。 二 解决办法 ① 给该字段创建一个全文索引 CREATE FULLTEXT INDEX 索引名 ON 表名 (字段名); ② 改写sq…

计算机毕业设计Python+DeepSeek-R1大模型游戏推荐系统 Steam游戏推荐系统 游戏可视化 游戏数据分析(源码+文档+PPT+讲解)

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

飞书考勤Excel导入到自己系统

此篇主要用于记录Excel一行中,单条数据的日期拿取,并判断上下班打卡情况。代码可能满足不了大部分需求,目前只够本公司用,如果需要,可以参考。 需要把飞书月度汇总的考勤表导入系统中可以参考下。 下图为需要获取的年…

【AIGC系列】5:视频生成模型数据处理和预训练流程介绍(Sora、MovieGen、HunyuanVideo)

AIGC系列博文: 【AIGC系列】1:自编码器(AutoEncoder, AE) 【AIGC系列】2:DALLE 2模型介绍(内含扩散模型介绍) 【AIGC系列】3:Stable Diffusion模型原理介绍 【AIGC系列】4&#xff1…

鸿蒙启动页开发

鸿蒙启动页开发 1.1 更改应用名称和图标 1.更改应用图标 找到moudle.json5文件,找到应用启动的EntryAbility下面的icon,将原来的图标改成自己设置的即可 2.更改应用名称 3.效果展示 2.1 广告页面开发 3.1 详细介绍 3.1.1 启动页面 import { PrivacyDialog } fr…

傅里叶分析

傅里叶分析之掐死教程(完整版)更新于2014.06.06 要让读者在不看任何数学公式的情况下理解傅里叶分析。 傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复…

长时间目标跟踪算法(2)-LCT目标跟踪算法

LCT算法的原始论文和源码已开源,原始论文和源码打包下载。 目录 算法简介核心思路与基本原理 2.1 任务分解:平移与尺度估计2.2 时间上下文相关滤波模型2.3 目标外观相关滤波模型2.4 在线随机蕨分类器 实现方案 3.1 关键公式与频域加速3.2 伪代码与流程…

【深度学习】Hopfield网络:模拟联想记忆

Hopfield网络是一种经典的循环神经网络,由物理学家John Hopfield在1982年提出。它的核心功能是模拟联想记忆,类似于人类大脑通过部分信息回忆完整记忆的能力。以下是通俗易懂的解释: 1. 核心思想 想象你看到一张模糊的老照片,虽然…

【算法】【并查集】acwing算法基础837. 连通块中点的数量

题目 给定一个包含 n 个点(编号为 1∼n)的无向图,初始时图中没有边。 现在要进行 m 个操作,操作共有三种: C a b,在点 a 和点 b 之间连一条边,a和 b 可能相等;Q1 a b,询问…

uniapp-原生android插件开发摘要

uni-app在App侧的原生扩展插件,支持使用java、object-c等原生语言编写,从HBuilderX 3.6起,新增支持了使用uts来开发原生插件。 基础项目 UniPlugin-Hello-AS工程请在App离线SDK中查找 基础项目(App离线SDK)已经配置好了自定义插件所需要的…

Idea 中 Project Structure简介

在 IntelliJ IDEA 中,Project Structure(项目结构)对话框是一个非常重要的配置界面,它允许你对项目的各个方面进行详细的设置和管理。下面将详细介绍 Project Structure 中各个主要部分的功能和用途。 1. Project(项…