Hive SQL学习整理_4

=Start=

缘由:

继续整理最近学到或是用到的Hive SQL知识,方便以后参考。

正文:

参考解答:
0、Hive SQL中的 having 子句以及它与 where 子句的区别

&

having子句与where都是过滤语句。

  • where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚合函数,使用where条件显示特定的行。
  • having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚合函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。和group by一样,having 子句中的每一个元素也必须出现在select列表中。
  • 总之,select 用where过滤,找到符合条件的元组。而having 用在group by后,配合使用,过滤结果。

1、Hive SQL中的条件判断函数(类似于编程语言中的if..else)

2、Hive SQL中的非空查找函数

3、Hive SQL中嵌套的if..else该如何表达?

&

4、Hive SQL中union all的使用

SQL中 union all 有什用?
简而言之:就是把2个具有相同列及数据类型的结果放到一起显示,并且不去重。

什情况下用union?什情况下用union all?
union与union all的区别是:
前者会把两个记录集中相同的记录合并,而后者不会,性能上前者优。当前Hive只支持UNION ALL(bag union)。不能消除重复行,每个select语句返回的列的数量和名字必须一样,否则会抛出语法错误。

5、Hive SQL中字符串切分函数split的使用示例

对于括号「)」这种特殊符号需要进行转义,而且需要多个转义符!

 

 

参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/4285.html

《Hive SQL学习整理_4》上有2条评论

  1. 纠正一下,对于split中手动指定的字符串参数而言,如果其中包含分号「;」需要进行转义,而非里面的括号「)」

    select split('Mozilla/5.0 (xxx) AppleWebKit/537.36 (xxx)', '\\)')
    /*
    ["Mozilla/5.0 (xxx"," AppleWebKit/537.36 (xxx",""]
    */

    select split('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (xxx)', '\\)')
    /*
    Statement Intel Mac OS X 10_13_6) AppleWebKit/537.36 (xxx)', '\\)') is not supported
    */
    select split('Mozilla/5.0 (Macintosh\; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (xxx)', '\\)')
    /*
    ["Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6"," AppleWebKit/537.36 (xxx",""]
    */

  2. Hive 的字符串UrlDecode 中文解码
    http://blog.dezai.cn/article.asp?id=660

    # 方法一
    select reflect("java.net.URLDecoder", "decode", trim(字段名), "UTF-8") from 库名.表名 limit 10;

    select reflect("java.net.URLDecoder", "decode", trim('https%3A%2F%2Fixyzero.com%2Fblog%2Fhi+world'), "UTF-8")
    -- https://ixyzero.com/blog/hi world

    select reflect("java.net.URLDecoder", "decode", 'https%3A%2F%2Fixyzero.com%2Fblog%2Fhi+world', "UTF-8")
    -- https://ixyzero.com/blog/hi world

    # 方法二
    自构建一个UDF函数,需要继承UDF,实现其evaluate()方法。

    HOW TO DECODE URLS IN HIVE
    http://bigdatums.net/2016/11/13/how-to-decode-urls-in-hive/

    Decode Raw URL in Hadoop Hive, prefer non-Java solutions
    https://stackoverflow.com/questions/12291580/decode-raw-url-in-hadoop-hive-prefer-non-java-solutions

发表评论

电子邮件地址不会被公开。 必填项已用*标注