Hive SQL学习整理_3

=Start=

缘由:

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

正文:

参考解答:
1、Hive SQL中如何判断某一列中是否包含某个关键字?

思路大概有2种(字符串查找、模糊匹配/正则匹配),具体的实现方法就多一些,以下是我整理的几种:

&

2、条件判断Case When Else End的用法

3、用正则进行字符串提取、替换

4、Hive SQL中的子查询

5、杂项

 

官方 LanguageManual UDF


内置的操作符
内置的函数
内置的聚合函数(UDAF)
内置的Table-Generating函数(UDTF)
针对f(column)的分组和排序
UDF内部
创建自定义的UDF

 

参考链接:

=END=

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

《Hive SQL学习整理_3》上有8条评论

  1. Hive collect_set函数
    https://my.oschina.net/jackieyeah/blog/679476

    Hive 的collect_set使用详解
    https://blog.csdn.net/liyantianmin/article/details/48262109

    Hive不允许直接访问非group by字段;
    对于非group by字段,可以用Hive的collect_set函数收集这些字段,返回一个数组;
    使用数字下标,可以直接访问数组中的元素;

    COLLECT_SET() in Hive, keep duplicates?
    https://stackoverflow.com/questions/6445339/collect-set-in-hive-keep-duplicates

    SELECT
    hash_id, COLLECT_LIST(num_of_cats) AS aggr_set
    FROM
    tablename
    WHERE
    blablabla
    GROUP BY
    hash_id
    ;

  2. SQL中WHERE与HAVING用法
    http://whlminds.com/2015/04/05/where-and-having-in-sql/

    在查询数据库表时,需要对表中的记录进行筛选,SQL提供了两个约束子句,即WHERE与HAVING,二者效果有雷同,但用法有区别。

    #当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序
    SELECT column_name, aggregate_function(column_name)
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name
    HAVING aggregate_function(column_name) operator value
    ORDER BY column_name

    # 使用区别
    WHERE作用对象为数据库表、视图,HAVING作用对象为于组(Group);
    WHERE在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算),而HAVING在分组和聚集之后选取分组的行。因此,WHERE子句不能包含聚集函数;因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。相反,HAVING子句总是包含聚集函数。(严格说来,你可以写不使用聚集的HAVING子句, 但这样做只是白费劲。同样的条件可以更有效地用于WHERE阶段。)

    # 总结
    1. WHERE子句用来筛选FROM子句中指定的操作所产生的行。
    2. GROUP BY子句用来分组WHERE子句的输出。
    3. HAVING子句用来从分组的结果中筛选行。

  3. hive union all 使用
    https://blog.csdn.net/buster2014/article/details/50143247
    http://www.bkjia.com/yjs/892967.html

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

    select a,b,c from table1
    union all
    select ca,cb,cc from table2

    什情况下用union?什情况下用union all?
    union与union all的区别是:
    前者会把两个记录集中相同的记录合并,而后者不会,性能上前者优。

    如此一说,你知道什么时候用Union什么时候用Union All了吧。
    当确认多个记录集不会存在相同记录,或者有可能有相同记录但明确要合并的,用Union;即使有相同记录也不合并的,用Union All。

    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Union

  4. Hive 的collect_set使用详解
    https://blog.csdn.net/liyantianmin/article/details/48262109

    Hive不允许直接访问非group by字段;
    对于非group by字段,可以用Hive的 collect_set 函数收集这些字段,返回一个数组;
    然后结合 concat_ws 对集合中元素使用指定分隔符连接成字符串返回。

    hive中的concat,concat_ws,collect_set用法
    https://blog.csdn.net/waiwai3/article/details/79071544
    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-Built-inAggregateFunctions(UDAF)

发表评论

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