Hive部分函数简析

2021-04-13 14:29:27 浏览数 (1)

1、order by

  对查询结果做一次全局排序,即所有Mapper产生的结果都会交给一个reducer处理,无论数据量大小,job任务只会启动一个reducer,所以如果数据量巨大,会耗费大量时间计算。(在严格模式下,oeder by 需要指定limit数据条数,从而避免因为数据量过大造成集群崩坏。)

2、sort by

  对每一块Partion进行局部排序,即每一个reducer处理的数据都是有序的,但不能保证全局有序。

3、distribute by

  一般和sort by 组合使用,即将某一块数据给一个reducer处理,然后在指定的reducer中进行sort by排序(distribute by必须写在sort by前面)。

4、cluster by

  相当于sort by distribute by,不同点在于cluster by 默认为降序排列且不能更改。

5、列转行

代码语言:javascript复制
        User表                       t1
    name    sex  age             name    age          message   names
    张三     1   22              张三   1,22           1,22    张三|王五 
    李四     2   24     -->      李四   2,24    -->    2,24     李四
    王五     1   22              王五   1,22

HQL:

代码语言:javascript复制
    select t1.message,concat_ws("|",collect_set(t1.name)) names         【注】 collect_set去重  collect——list不去重
    from(
        select name,concat(sex,",",age) message from User
        ) t1
     group by t1.message;

6、行转列

代码语言:javascript复制
        Movie_Info表
     movie          category             movie   category
    《战狼2》        战争,动作   --->   《战狼2》    战争 
  《lie to me》     悬疑,心理           《战狼2》    动作
                                      《lie to me》 悬疑
                                       《lie to me》 心理

HQL:

代码语言:javascript复制
    select movie,category_name from Movie_Info lateral view explode(split(category,",")) tmp as category_name;

7、fields terminated by 设置字段与字段之间的分隔符

collection items terminated by 设置字段中各个子元素的分隔符

0 人点赞