点击上方'伦少的博客'关注与您一起成长

前言
学习总结Oracle、Spark、Hive SQL 正则匹配
函数
| - | 函数 |
|---|---|
| Oralce | REGEXP_LIKE |
| Spark | RLIKE、REGEXP |
| Hive | RLIKE、REGEXP |
建表
Oracle
1CREATE TABLE TEST_REGEXP (
2 ID VARCHAR2(100),
3 NAME VARCHAR2(100)
4) ;
5INSERT INTO TEST_REGEXP (ID, NAME) VALUES('001', '张三');
6INSERT INTO TEST_REGEXP (ID, NAME) VALUES('002', '张三1');
7INSERT INTO TEST_REGEXP (ID, NAME) VALUES('003', '2张三');
Hive
1CREATE TABLE TEST_REGEXP (
2 ID string,
3 NAME string
4) ;
5
6INSERT INTO TEST_REGEXP VALUES('001', '张三');
7INSERT INTO TEST_REGEXP VALUES('002', '张三1');
8INSERT INTO TEST_REGEXP VALUES('003', '2张三');
示例
查询NAME含有数字的记录
Oracle
1SELECT * FROM TEST_REGEXP WHERE REGEXP_LIKE(NAME,'\d+');
2SELECT * FROM TEST_REGEXP WHERE REGEXP_LIKE(NAME,'[0-9]+');
3select * from TEST_REGEXP where name regexp '\\d+';
4select * from TEST_REGEXP where name regexp '[0-9]+';
Hive
1select * from TEST_REGEXP where name rlike '\\d+'
2select * from TEST_REGEXP where name rlike '[0-9]+';
Spark
Spark 和 Hive一样
1select * from TEST_REGEXP where name rlike '\\d+'
2select * from TEST_REGEXP where name rlike '[0-9]+';
3select * from TEST_REGEXP where name regexp '\\d+';
4select * from TEST_REGEXP where name regexp '[0-9]+';
不过在代码里 \ 需要转义
1package com.dkl.blog.spark.sql
2
3import org.apache.spark.sql.SparkSession
4
5/**
6 * Created by dongkelun on 2019/12/2 19:27
7 */
8object Test_RegExp {
9 def main(args: Array[String]): Unit = {
10 val spark = SparkSession.builder().appName("NewUVDemo").master("local").getOrCreate()
11
12 import spark.implicits._
13 import spark.sql
14
15 val df = spark.sparkContext.parallelize(
16 Array(
17 ("001", "张三"), ("002", "张三1"), ("003", "2张三")
18 )).toDF("ID","NAME")
19 df.createOrReplaceTempView("TEST_REGEXP")
20
21 sql("select * from TEST_REGEXP where name rlike '\\\\d+'").show()
22 sql("select * from TEST_REGEXP where name rlike '[0-9]+'").show()
23 sql("select * from TEST_REGEXP where name regexp '\\\\d+'").show()
24 sql("select * from TEST_REGEXP where name regexp '[0-9]+'").show()
25
26 spark.close()
27 }
28}
小结
Oralce和Hive、Spark除了函数不同外,正则也多少有不同,比如上例中Oraqlce只有一个 \ 而Hive和Spark有两个\,具体的正则匹配规则可参考网上的资料,其中下面参考的资料中也有一些规则可以参考
参考
https://blog.csdn.net/lvdan1/article/details/78340231
文章转载自伦少的博客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




