TOP

Hive中rlike,like,not like区别与使用详解
2018-11-29 09:31:30 】 浏览:529
Tags:Hive rlike like not 区别 使用 详解

版权声明:本文为博主原创文章,未经博主女朋友允许不得转载。 https://blog.csdn.net/qq_26442553/article/details/79452221

业务需求:使用hive从表中查询dataforjy字段的记录后5位包含#的有哪些?

方法一:使用模糊查询like,逐一匹配

Like表示模糊查询(是否包含),like后面的字符串不是正则表达式,而是通配符。像mysql中的"like",%代表任意数量个字符,_代表一个填充字符。但是建议使用高级函数"instr"效率更高。

Select dataforjy from fdm_dm.dmp_plsadm_tradeinfo_m_20180227_mix
where dataforjy like '%#____'
or dataforjy like '%_#___'
or dataforjy like '%__#__'
or dataforjy like '%___#_'
or dataforjy like '%____#'

方法二:(通过截取后5位,使用relike查询包含#的记录)

Rlike功能和like一致,只是后面内容是正则表达式,正则的写法与java一样。需要转义,例如'\m'需要使用'\\m'。如果like想用正则表达式,则需要替换用rlike.

Select dataforjy
from fdm_dm.dmp_plsadm_tradeinfo_m_20180227_mix

where substr(dataforjy,length(dataforjy)-4) rlike '#'

注,substr后5位的取法,是dataforjy-4,而不是dataforjy-5。其实dataforjylike ‘%#%’和dataforjyrlike ‘#’效果一样,都是对含#号的匹配。但是上面两种如果dataforjy字段中存在长度小于5的字段,则统计结果都会不准。

方法三:通过给不足字段进行长度补充,让其长度统一

select * from fdm_dm.dmp_plsadm_tradeinfo_m_20180227_mix
where substr(lpad(paystat24month,24,'9'),-5) rlike '#'

RLIKE的其他使用,比如:

    hive> select 1 from lxw_dual where 'footbar’ rlike'^f.*r$’;
        > 1
   注意:判断一个字符串是否全为数字:
        hive>  select 1 from lxw_dual where '123456' rlike'^\\d+$';
            >  1
        hive> select 1 from lxw_dual where '123456aa' rlike'^\\d+$';

Not like表示不包含的匹配,和like相反,但是用法不是Anot like B,而是not A like B .

hive> select not 'abcde' like '%c%e' from fdm_dm.dmp_plsadm_tradeinfo_m_20180227_mix
hive > false

同理NOT RLIKE 的使用,也是NOT A RLIKEB

select PAYSTAT24MONTH
from fdm_dm.dmp_plsadm_tradeinfo_m_20180227_mix
where not substr(PAYSTAT24MONTH,length(PAYSTAT24MONTH)-4) rlike '#'


Hive中rlike,like,not like区别与使用详解 https://www.cppentry.com/bencandy.php?fid=117&id=191095

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇hive中的集合操作函数 下一篇hive_CONCAT_WS合并的用法