hive order by sort by distribute by和sort by一起使用 cluster by

1. order by

Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的数据都会到同一个reducer进行处理(不管有多少map,也不管文件有多少的block只会启动一个reducer)。但是对于大量数据这将会消耗很长的时间去执行。

这里跟传统的sql还有一点区别:如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须指定limit来限制输出条数,原因是:所有的数据都会在同一个reducer端进行,数据量大的情况下可能不能出结果,那么在这样的严格模式下,必须指定输出的条数

2. sort by

在每个reducer端都会做排序,保证了局部有序(每个reducer出来的数据是有序的,但是不能保证所有的数据是有序的,除非只有一个reducer)

好处是:执行了局部排序之后可以为接下去的全局排序提高不少的效率(其实就是做一次归并排序就可以做到全局排序了)。

3.distribute by和sort by一起使用

ditribute by是控制map的输出在reducer是如何划分的。

select mid, money, name from store distribute by mid sort by mid asc, money asc  我们所有的mid相同的数据会被送到同一个reducer去处理,这就是因为指定了distribute by mid,这样的话就可以统计出每个商户中各个商店盈利的排序了(这个肯定是全局有序的,因为相同的商户会放到同一个reducer去处理)。这里需要注意的是distribute by必须要写在sort by之前。

4. cluster by

cluster by的功能就是distribute by和sort by相结合,如下2个语句是等价的:

  1. select mid, money, name from store cluster by mid
  2. select mid, money, name from store distribute by mid sort by mid
  3. 如果需要获得与3中语句一样的效果 
    1. select mid, money, name from store cluster by mid sort by money  注意被cluster by指定的列只能是降序,不能指定asc和desc。
    2. CLUSTERED BY子句指定要用于存储的列以及要创建的存储桶数

原文地址:https://www.cnblogs.com/huiandong/p/10237737.html

时间: 2024-10-12 04:29:55

hive order by sort by distribute by和sort by一起使用 cluster by的相关文章

hive中order by,sort by, distribute by, cluster by作用以及用法

1. order by Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的数据都会到同一个reducer进行处理(不管有多少map,也不管文件有多少的block只会启动一个reducer).但是对于大量数据这将会消耗很长的时间去执行. 这里跟传统的sql还有一点区别:如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须指定limit来

hive中order by,sort by, distribute by, cluster by的用法

1.order by hive中的order by 和传统sql中的order by 一样,对数据做全局排序,加上排序,会新启动一个job进行排序,会把所有数据放到同一个reduce中进行处理,不管数据多少,不管文件多少,都启用一个reduce进行处理.如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须指定limit来限制输出条数,原因是:所有的数据都会在同一个reducer端进行,数据量大的情况下可能不能出结果,那么在这样的严格模式下,必须指定输

hive中order by、distribute by、sort by和cluster by的区别和联系

hive中order by.distribute by.sort by和cluster by的区别和联系 order by order by 会对数据进行全局排序,和oracle和mysql等数据库中的order by 效果一样,它只在一个reduce中进行所以数据量特别大的时候效率非常低. 而且当设置 :set hive.mapred.mode=strict的时候不指定limit,执行select会报错,如下: LIMIT must also be specified. sort by sor

hive SQL优化之distribute by和sort by

最近在优化hiveSQL, 下面是一段排序,分组后取每组第一行记录的SQL INSERT OVERWRITE TABLE t_wa_funnel_distinct_temp PARTITION (pt='${SRCTIME}') SELECT bussiness_id, cookie_id, session_id, funnel_id, group_first(funnel_name) funnel_name, step_id, group_first(step_name) step_name,

hive 的分隔符、orderby sort by distribute by的优化

一.Hive 分号字符 分号是SQL语句结束标记,在HiveQL中也是,但是在HiveQL中,对分号的识别没有那么智慧,例如: select concat(cookie_id,concat(';','zoo')) fromc02_clickstat_fatdt1 limit 2; FAILED: Parse Error: line 0:-1 cannot recognize input'<EOF>' in function specification 可以推断,Hive解析语句的时候,只要遇到

Hive Order By操作

Hive中常见的高级查询包括:group by.Order by.join.distribute by.sort by.cluster by.Union all.今天我们来看看order by操作,Order by表示按照某些字段排序,语法如下: [java] view plain copy select col,col2... from tableName where condition order by col1,col2 [asc|desc] 注意: (1):order by后面可以有多列

Linux sort命令中文手册(info sort翻译)

说明: (1).本手册只挑选了有用的信息进行翻译,如要查看完完整整的内容,请自行info sort. (2).译文中,在括号中使用了"注"的,为本人所加,非原文内容,助于理解和说明. (3).本文的sort命令为CentOS 7.2上的,版本为sort (GNU coreutils) 8.22,有些选项在CentOS 6上可能不支持,如"--debug". (4).在没搞懂sort处理字段和排序机制时,强烈建议不要看man sort. 7.1 'sort': Sor

Spring Data JPA使用Sort进行排序(Using Sort)(转)

通过上一节的学习,我们知道了如何用@Query注解来实现灵活的查询.在上一节的示例中,我也尝试给出简单的排序,通过JPQL语句以及原生SQL来实现的.这样的实现,虽然在一定程度上可以应用,但是灵活度不够,因此结合@Query注解,我们可以使用Sort来对结果进行排序. 1.在CustomerRepository内添加方法 /** * 一个参数,匹配两个字段 * @param name2 * @param sort 指定排序的参数,可以根据需要进行调整 * @return * 这里Param的值和

c#: List.Sort()实现稳固排序(stable sort)

1. 源起: KV 7.0加入列表管理功能,处理排序问题时,对空列表执行按大小.日期.长度排序时,其中次序会发生改变,令人纳闷. 没天理呀,不应该啊!List.Sort()方法,它为什么? 对此问题,深入去了解,倒发现了有趣的问题:稳固排序与非稳固排序. 2.稳固排序与非稳固排序 在微软官方网站找到此段说明: Remarks If comparison is provided, the elements of the List<T> are sorted using the method re