Hive学习(八) 排序:order by、sort by、distribute by、cluster by

hive中有四种排序:

1、全局排序:order by

2、内部排序:sort by

3、分区排序:distribute by

4、组合排序:cluster by

全局排序:order by

说明:全局排序是在一个MapReduce中进行排序的。

参数:

ASC:是升序的意思和mysql一样,同时也是默认的参数。

DESC:降序的意思和MySQL中一样。

举例:查询学生的信息并且按成绩高低排序

  select * from student_score_info order by score

注意:以上这种操作,在实际工作中要慎用,应为使用的如果不是数据库,而是数据仓库软件例如现在的hive ,操作的是数据仓库执行的数据量是非常庞大的,如果使用了全局排序则可能资源的严重消耗

内部排序:sort by

说明:每个mapreduce的内部排序,对全局结果集来说并不是排序。

关键字:sort by

步骤:

设置reduce的个数:  set mapreduce.job.reduce=3;

语句:

  select * from student_score_info sort by score  

注意:排序后的结果直接看不出来,得要将数据导出到本地才能看出效果

分区排序:distribute by

说明:类似MR中的partition ,进行分区的时候使用的,一般结合sort by关键字使用。

关键字:distribute by

例子:先按照部门编号分区,在按照员工编号排序。

必须要设置reduce的数量不为1 (为多个)  set mapreduce.job.reduce=2

语句:

  nsert overwrite local directory ‘/data/sort/emp2‘
  select * from emp distribute by deptno sort by empno desc; 

注意:distribute by 语句必须写在 sort by 之前;对于distribute by 的测试的时候必须给定多个reduce 不然是没有办法分区的。

组合排序:cluster by

说明:当distribute by与sort by 字段相同的时候,可以使用cluster by 关键字。

关键字:cluster by

例子:

  insert overwrite local directory ‘/data/sort/emp4‘
  select * from emp cluster by deptno;

注意:能分区也可以排序,但缺点就是只能对一个字段使用;不能指定 asc 或者desc 默认降序排序。

原文地址:https://www.cnblogs.com/wwbz/p/11119122.html

时间: 2024-11-07 10:44:50

Hive学习(八) 排序:order by、sort by、distribute by、cluster by的相关文章

hive 排序 order by sort by distribute by cluster by

order by: order by是全局排序,受hive.mapred.mode的影响. 使用orderby有一些限制: 1.在严格模式下(hive.mapred.mode=strict),orderby必须跟limit一起使用(?). 原因:在执行orderby时,hive使用一个reducer,如果查询结果量很大,这个reducer执行起来会很费劲,所以必须要限制查询输出结果的数量. limit n 之后,reducer处理的数据有n * count(map)条数据. 2.在非严格模式下(

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, Sort by ,Dristribute by,Cluster By 的作用和用法

order by order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)只有一个reducer,会导致当输入规模较大时,需要较长的计算时间. set hive.mapred.mode=nonstrict; (default value / 默认值) set hive.mapred.mode=strict; order by 和数据库中的Order by 功能一致,按照某一项 & 几项 排序输出. 与数据库中 order by 的区别在于在hive.

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来

hive 学习笔记精简

创建表: drop table t create table if not exists t (t string) partitioned by (log_date string) row format delimited fields terminated by '\t' lines terminated by '\n' create table t1 like t create table t2 as select * from t //如果加多余的字段或者加group by等关键字会报错

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学习笔记【转载】

本文转载自:http://blog.csdn.net/haojun186/article/details/7977565 1.  HIVE结构 Hive 是建立在 Hadoop 上的数据仓库基础构架.它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储.查询和分析存储在 Hadoop 中的大规模数据的机制.Hive 定义了简单的类 SQL 查询语言,称为 QL,它允许熟悉 SQL 的用户查询数据.同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 map

Hive学习(九)Hive体系结构

1.Hive架构与基本组成 下面是Hive的架构图. 图1.1 Hive体系结构 Hive的体系结构可以分为以下几部分: (1)用户接口主要有三个:CLI,Client 和 WUI.其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本.Client是Hive的客户端,用户连接至Hive Server.在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server. WUI是通过浏览器访问Hive. (2)Hive将元数据存储在数据库中

Python学习——数据排序方法

Python对数据排序又两种方法: 1. 原地排序:采用sort()方法,按照指定的顺序排列数据后用排序后的数据替换原来的数据(原来的顺序丢失),如: >>> data1=[4,2,6,432,78,43,22,896,42,677,12] >>> data1.sort() >>> data1 #原来的顺序被替换 [2, 4, 6, 12, 22, 42, 43, 78, 432, 677, 896] 2. 复制排序:采用sorted()内置函数,按照