Hive中SQL通配符like与正则匹配rlike(regexp)的区别

  • Post author:
  • Post category:其他




Hive 中可以用 like 和 rlike 进行模糊匹配,like 采用的是 SQL 通配符,而 rlike (regexp)采用的是正则匹配。

1、like

% 代替 0 或多个字符

_ 代替一个字符

举个例子:

-- 返回值为 TRUE

spark-sql> select 'aaa' like '%a%';

true

Time taken: 2.04 seconds, Fetched 1 row(s)

-- 返回值为 TRUE

spark-sql> select 'aaabb' like '%a%';

true

Time taken: 0.123 seconds, Fetched 1 row(s)

2、rlike


rlike 采用正则表达式,以下总结几个常用的


\: 转义用,序列 \ 匹配


^: 匹配输入字符串开始的位置


$: 匹配输入字符串结尾的位置


*: 零次或多次匹配前面的字符或子表达式


?: 零次或一次匹配前面的字符或子表达式


x|y: 匹配 x 或 y


[xyz]: 字符集。匹配包含的任一字符


\w: 匹配任何字类字符,包括下划线


.: 匹配所有单个字符



此外,还可以用 regexp 替换 rlike,用 not regexp 替换 not rlike ,效果一样。

-- 返回值为 TRUE

select 'hello' regexp '^he'

-- 返回值为 FALSE

select 'hello' regexp '^e'

-- 返回值为 TRUE

select 'hello' regexp 'llo$'

-- 返回值为 TRUE

select 'hello' regexp 'hello|world'

-- 返回值为 TRUE

select 'hello' regexp 'h[\w]llo'

-- 返回值为 TRUE

select 'hello' rlike 'h.llo'

3、示例

spark-sql> select 'aaa' like '_a_';
true
Time taken: 1.777 seconds, Fetched 1 row(s)


spark-sql> select 'aaab' like '_a_';
false
Time taken: 1.519 seconds, Fetched 1 row(s)


spark-sql> select 'hello' regexp '^he';
true
Time taken: 1.538 seconds, Fetched 1 row(s)

spark-sql> select 'hello' regexp '^e' ;
false
Time taken: 1.474 seconds, Fetched 1 row(s)


spark-sql> select 'hello' regexp 'llo$';
true
Time taken: 1.62 seconds, Fetched 1 row(s)

spark-sql> select 'hello' regexp 'hello|world';
true
Time taken: 1.269 seconds, Fetched 1 row(s)

spark-sql> select 'hello' regexp 'h[\\w]llo' ;
true
Time taken: 1.607 seconds, Fetched 1 row(s)


spark-sql> select 'hello' rlike 'h[\\w]llo' ;
true
Time taken: 0.098 seconds, Fetched 1 row(s)


spark-sql> select 'hello' rlike 'h.llo' ;
true
Time taken: 0.086 seconds, Fetched 1 row(s)