数据仓库学习笔记七

1. 排序

        Hive提供了4种排序方式: ORDER BY、SORT BY、DISTRIBUTE BY及CLUSTERBY。

1.1 ORDER BY

        Hive中的ORDER BY语句与SQL中的类似,可以对结果集进行全局排序,即Hive可对所有数据进行Reducer处理以保证全局有序,但当数据规模较大时此过程比较耗时。所以在strict (hive.mapred.mode=strict,默认是nonstrict) 模式下,Hive 对ORDER BY进行了限制,要求ORDER BY子句后必须跟随“LIMIT”子句,以防止单个Reducer处理时间过长。

1.2 SORT BY

        SORTBY指出了数据在每个Reducer内如何排序,即SORTBY只在每个Reducer内对数据进行排序。语法上SORTBY与ORDERBY相似,但从作用上看,ORDER BY可以看作是SORT BY的一个特例:当SORT BY的Reducer数目设置为1时,等同于ORDER BY。所以两者真正的区别是: ORDER BY强调全局有序,SORT BY只强调Reducer内局部有序。

1.3 DISTRIBUTE BY

        DISTRIBUTE BY 控制Map的输出数据在Reducer中的划分。如果 DISTRIBUTE BY指定列的值相同,则它们会被送到同一个Reducer中进行处理。

1.4 CLUSTER BY

        CLUSTER BY相当于DISTRIBUTE BY和SORT BY的结合体。当DISTRIBUTE BY和SORTBY都在同一列上操作时,如下2个语句是等价的。另外,CLUSTER BY指定的列只能进行升序排序,无法手动指定排序方向。

2. 分组聚合

        Hive提供了多种聚合函数。所谓聚合函数是指对一组值进行计算并返回单个值的函数,其通常与SELECT语句的GROUP BY子句一起使用。
 

2.1 分组
 

        SELECT语句在未指定GROUP BY子句的情况下,会将整个表当作一个分组。例如count()函数便是对组内的所有行数进行统计,其默认统计整个表的行数而不需要指定GROUP BY。

2.2 基础聚合

常用的内置聚合函数列举如下。
max(col): 返回组内某列中的最大值。
min(col): 返回组内某列中的最小值。
count(*):返回组内总行数,包括值为NULL的行。
count(expr):返回组内expr表达式不是NULL的总行数。
count(DISTINCT expr):返回组内expr唯一且非 NULL的行的数量。
sum(col); 返回组内某列元素的总和。
avg(col); 返回组内某列元素的平均值。
collect set(col): 返回消除了重复元组的数组。
collect list(col): 返回允许存在重复元素的数组。

2.3高级聚合

        在Hive中,新增了几种增强聚合功能。
(1) GROUPING SETS
        GROUPING SETS可以实现对同一个数据集进行多重GROUPBY操作,这本质上是多个GROUP BY进行UNION ALL操作。

(2) CUBE与ROLLUP

        CUBE与ROLLUP的功能比GROUPING SETS的功能强.CUBE子句可对分组列进行所有可能的组合聚合。ROLLUP子句用于在维度结构中计算聚合。

        GROUP BY a,b,c WITH CUBE等价于GROUP BY a,b,c GROUPING SETS((a,b,c).(a,b),(a.c),(b,c),(a),(b),(c),0)

        GROUP BY a,b,c WITH ROLLUP等价于GROUP BY a,b,c GROUPING SETS((a,b,c),(a.b).(a) 0)总的来说,Hive的增强聚合功能方便了部分有规律代码的编写,或者说缩短了代码的长度,其本质仍然是GROUP BY。


 

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值