Hive中rlike,like,not like,regexp区别与使用详解

待我称王封你为后i 2022-05-30 05:22 312阅读 0赞

1.like的使用详解

1.语法规则:

  1. 格式是A like B,其中A是字符串,B是表达式,**表示能否用B去完全匹配A的内容,换句话说能否用B这个表达式去表示A的全部内容,注意这个和rlike是有区别的**。返回的结果是True/False.
  2. B只能使用简单匹配符号 _和%,”_”表示任意单个字符,字符”%”表示任意数量的字符
  3. like的匹配是按字符逐一匹配的,使用B从A的第一个字符开始匹配,所以即使有一个字符不同都不行。

2.操作类型: strings
3.使用描述:如果字符串A或者字符串B为NULL,则返回NULL;如果字符串A符合表达式B 的正则语法,则为TRUE;否则为FALSE。尤其注意NULL值的匹配,返回的结果不是FALSE和TRUE,而是null,其实除了is null ,is not null,其他的关系运算符只要碰到null值出现,结果都是返回NULL,而不是TRUE/FALSE。

  1. hive (default)> select 'abcde' like 'abc';
  2. OK
  3. false
  4. hive (default)> select null like '%';
  5. OK
  6. NULL
  7. hive (default)> select 'abc' like null ;
  8. OK
  9. NULL

4.案例演示

‘foobar’ LIKE ‘foo’的值为FALSE,而’foobar’ LIKE ‘foo___‘的值为TRUE, ‘foobar’ LIKE ‘foo%’的值为TRUE。要转义%,请使用\(%匹配一个%字符)。如果数据包含分号,你想匹配它,则需要转义,像’a\;b’

  1. hive (default)> select 'abcde' like 'abc';
  2. OK
  3. false
  4. hive (default)> select 'abcde' like 'abc__';
  5. OK
  6. true
  7. hive (default)> select 'abcde' like 'abc%';
  8. OK
  9. true
  10. hive (default)> select 'abcde' like '%abc%';
  11. OK
  12. true
  13. hive (default)> select 'abcde' like 'bc%';
  14. OK
  15. false
  16. hive (default)> select 'abcde' like '_bc%';
  17. OK
  18. true
  19. hive (default)> select 'abcde' like '_b%';
  20. OK
  21. true

5.注意事项**:否定比较时候用NOT A LIKE B(使用A NOT LIIKE B也可以),结果与like的结果时相对的。**当然前提要排除出现null问题,null值这个奇葩除外。

  1. hive (default)> select 'abcde' like 'abc';
  2. OK
  3. false
  4. hive (default)> select not 'abcde' like 'abc';
  5. OK
  6. true
  7. hive (default)> select 'abcde' not like 'abc';
  8. OK
  9. true
  10. hive (default)> select null like '%';
  11. OK
  12. NULL
  13. hive (default)> select not null like '%';
  14. OK
  15. NULL
  16. hive (default)> select null not like '%';
  17. OK
  18. NULL

2. RLIKE比较符使用详解

1.语法规则:

  1. A RLIKE B ,表示B是否在A里面即可。而A LIKE B,则表示B是否是A.
  2. B中的表达式可以使用JAVA中全部正则表达式,具体正则规则参考java,或者其他标准正则语法。

2.操作类型: strings
3.使用描述: 如果字符串A或者字符串B为NULL,则返回NULL;如果字符串A符合JAVA正则表达式B的正则语法,则为TRUE;否则为FALSE。

  1. hive (default)> select 'footbar' rlike '^f..]+r$';
  2. OK
  3. false
  4. hive (default)> select 'footbar' rlike '^f.*r$';
  5. OK
  6. true
  7. hive (default)> select 'foobar' rlike 'foo'; --注意同样表达式,用正则匹配成功
  8. OK
  9. true
  10. hive (default)> select 'foobar' like 'foo';--注意同样表达式,用like匹配失败
  11. OK
  12. false
  13. hive (default)> select '123456' rlike '^\\d+$';
  14. OK
  15. true
  16. hive (default)> select null rlike '.*';
  17. OK
  18. NULL

3.NOT A LIKE B 与 A not like B

1. not..like是like的否定用法,如果like匹配结果时true,则not..like的匹配结果时false,反之也是结果也是相对。**当然前提要排除出现null问题,null值这个奇葩除外,null的结果都是null值。**

  1. hive> select 1 from t_fin_demo where NOT 'football' like 'fff%';
  2. 1
  3. hive>select 1 from t_fin_demo where 'football' not like 'fff%';
  4. 1
  5. hive> select 1 from t_fin_demo where 'football' like 'fff%';

4.关于like与rlike,not like,like not的使用对比总结

1.Rlike**功能和like功能大致一样,like是后面只支持简单表达式匹配(_%),而rlike则支持标准正则表达式语法。所以如果正则表达式使用熟练的话,建议使用rlike,功能更加强大。所有的like匹配都可以被替换成rlike。反之,则不行。**但是注意:like是从头逐一字符匹配的,是全部匹配,但是rlike则不是,可以从任意部位匹配,而且不是全部匹配。

  1. hive (default)> select 'foobar' like 'foo';
  2. OK
  3. false
  4. hive (default)> select 'foobar' like 'foo';
  5. OK
  6. false
  7. hive (default)> select 'foobar' like 'oo%';
  8. OK
  9. false
  10. hive (default)> select 'foobar' rlike 'foo';
  11. OK
  12. true
  13. hive (default)> select 'foobar' rlike '.oo.*';
  14. OK
  15. true

2.** NOT A LIKE B是LIKE的结果否定,如果like匹配结果时true,则not..like的匹配结果时false,反之也是结果也是相对。实际中也可以使用 A NOT LIKE B,也是LIKE的否定,与 NOT A LIKE B一样。当然前提要排除出现null问题,null值这个奇葩除外,null的结果都是null值。**

3.同理NOT RLIKE 的使用,也是NOT A RLIKE B是对RLIKE的否定。**当然前提要排除出现null问题,null值这个奇葩除外,null的结果都是null值。**

5.regexp的用法和rlike一样

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI2NDQyNTUz_size_16_color_FFFFFF_t_70

发表评论

表情:
评论列表 (有 0 条评论,312人围观)

还没有评论,来说两句吧...

相关阅读

    相关 hive 函数使用详解

    一、前言 在任何一种编程语言中,函数可以说是必不可少的,像mysql、oracle中,提供了很多内置函数,或者通过自定义函数的方式进行定制化使用,而hive作为一门数据分

    相关 HiveHbase的区别

    Hive与Hbase的区别 (转载整理) 觉得在问区别之前,我应该显示说相同点,这么一想,又糊涂了,hive和hbase哪里像了,好像哪里都不像,既然哪里都不像,又何