Hive中order by,sort by,distribute by和cluster by详解

简介: Hive中order by,sort by,distribute by和cluster by详解

前言

作为数据开发工程师,在平时工作中,肯定接到过产品小姐姐提的排序需求,例如在mysql数据库中,就是使用order by函数。在hive中也是有order by函数的,那么除了order by之外是否还有其他排序函数呢?今天就跟小伙伴们聊聊hive中有哪些排序函数以及使用场景!

1. order by

全局排序,默认升序。Hive在运行MR程序时会指定Reducer个数为1,因为多个reducer无法保证全局有序。这样就会导致当输入规模较大时,需要较长的计算时间。

注意:

  • 与数据库中 order by 的区别:在hive.mapred.mode = strict 模式下,必须指定 limit,否则执行会报错。 原因:如果在数据量大的情况下,一个reducer无法处理;如果指定limit n ,就只有 n * map number 条记录而已,一个reducer就可以正常处理。
  • 其他情况下,与数据库中的Order by 功能一致,即按照某一个或几个字段排序输出。

2. sort by

局部排序。其在数据进入reducer前完成排序。

若需要全局排序结果, 只需再进行一次归并排序即可。

注意:需要根据实际情况设置Reducer个数,设置set mapreduce.job.reduces=n,(n>1)

3. distribute by

分区排序。顾名思义,是起分散数据作用的,类似 MR 中 partition,进行分区。比如:distribute by c1,则是拿c1列作为key分散到不同的reducer里去,默认采取的是hash算法。

大家有没有觉得它跟group by很像呢?其实它两唯一的区别,distribute by只是分发数据到reducer,而group by将数据分发完以后,必须只能跟count,sum,avg等聚合操作。

注意:

  • 这里 Hive 所使用的 key 并不是表中的 key, 而是 Hive 指定的多列结合的特殊 key: 所使用的变量 mapreduce.map.ouput.key.class 为 org.apache.hadoop.hive.ql.io.HiveKey
  • 如果想要排序, 需要结合 sort by 使用,并且distribute by 语句要写在 sort by 语句之前

4. cluster by

簇排序。cluster by 具有 distribute by 和 sort by 的组合功能,即当 distribute by 和 sort by 字段相同时,可使用 cluster by 方式替代。但是cluster by排序只能是升序排序,不能指定排序规则为ASC或者DESC。

注意:cluster by 和 distribute by 是很相似的,也采用HashPartition算法,区别在于:cluster by 里含有一个分桶的方法

总结

只有了解了各个排序函数的功能和使用场景,才能在开发过程中达到事半功倍的效果,提升HQL性能,节省计算资源,提质增效。

相关文章
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
57 4
|
2月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
43 2
|
7月前
|
SQL 分布式计算 数据处理
【Hive】请说明hive中 Sort By,Order By,Cluster By,Distrbute By各代表什么意思?
【4月更文挑战第17天】【Hive】请说明hive中 Sort By,Order By,Cluster By,Distrbute By各代表什么意思?
|
7月前
|
SQL 分布式计算 数据处理
【Hive】sort by 和 order by 的区别
【4月更文挑战第15天】【Hive】sort by 和 order by 的区别
|
SQL 运维 分布式计算
一篇文章彻底掌握 hive 中的 ORDER/SORT/CLUSTER/DISTRIBUTE BY 和 BUCKET 桶表
一篇文章彻底掌握 hive 中的 ORDER/SORT/CLUSTER/DISTRIBUTE BY 和 BUCKET 桶表
|
7月前
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
211 1
|
7月前
|
SQL 存储 大数据
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
271 0
|
7月前
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
304 0
|
2月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
67 0
|
5月前
|
SQL 分布式计算 大数据
大数据处理平台Hive详解
【7月更文挑战第15天】Hive作为基于Hadoop的数据仓库工具,在大数据处理和分析领域发挥着重要作用。通过提供类SQL的查询语言,Hive降低了数据处理的门槛,使得具有SQL背景的开发者可以轻松地处理大规模数据。然而,Hive也存在查询延迟高、表达能力有限等缺点,需要在实际应用中根据具体场景和需求进行选择和优化。