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)