order by 排序HiveSQL

工作时常会有根据某个或某几个字段的值大小进行排序的需求,hive sql 同sql一样支持多个字段进行升降序排序,其中各个字段之间用逗号进行分割,当未注明desc(降序)还是asc(升序)时默认的是进行升序排序。下文以两个字段为例进行笔记记录。
1) order by column1,column2;
--未注明,则两个字段都是进行升序,即先按column1进行升序排序,当column1的值相同的时候,则继续按column2的值进行升序排序显示。

2) order by column1,column2 desc ;
-- column1未注明则表示column1为进行升序排序,然后再按后面column2注明的降序进行排序

3) order by column1 desc ,column2;
-- column1进行降序排序,当column1的值相同的时候,则继续按column2的升序排序

4) order by column1 desc ,column2 desc;
-- column1进行降序排序,当column1的值相同的时候,则继续按column2的值进行降序排序;

 

鸣谢与参考:

https://blog.youkuaiyun.com/lixiaogang_theanswer/article/details/79721485

 

 

### HiveSQL 中使用 `ORDER BY` 进行排序HiveSQL 中,`ORDER BY` 是一种用于对查询结果进行全局排序的关键字。它会强制所有数据流经单一的 Reducer 来完成排序操作,从而确保返回的结果在整个数据集中具有严格的全局顺序[^4]。 #### 基本语法 以下是 `ORDER BY` 的基本语法结构: ```sql SELECT column1, column2, ... FROM table_name ORDER BY column1 [ASC|DESC], column2 [ASC|DESC]; ``` - **`column1`, `column2`**: 表示要排序的列名。 - **`ASC` 或 `DESC`**: 明确指定了升序 (`ASC`) 或降序 (`DESC`) 排序方式。如果不指定,默认为升序 (`ASC`) 排序[^5]。 #### 核心功能 1. **全局唯一排序** `ORDER BY` 会对整个数据集执行全局排序,无论输入的数据分布在多少个分区中,最终都会被聚合到一个 Reducer 上来实现完全有序的结果。 2. **严格保证顺序** 结果中的每一行都按照指定的排序规则排列,适用于需要精确控制输出顺序的场景,例如生成财务报表或 TOP N 查询。 3. **性能开销较高** 由于所有的数据都需要通过单个 Reducer 完成排序,因此对于大规模数据集来说,可能会导致较长的处理时间和较高的资源消耗[^3]。 #### 使用案例 假设有一个名为 `employees` 的表,包含以下字段:`id`, `name`, 和 `salary`。我们可以通过以下 SQL 实现不同类型的排序: ##### 案例 1: 单列升序排序 ```sql SELECT name, salary FROM employees ORDER BY salary; ``` 此查询将基于员工薪资从低到高排序,并展示姓名和薪资信息。 ##### 案例 2: 单列降序排序 ```sql SELECT name, salary FROM employees ORDER BY salary DESC; ``` 该查询则按薪资从高到低排序并返回结果[^5]。 ##### 案例 3: 多列排序 如果希望先依据部门编号排序再根据薪资排序,可以这样写: ```sql SELECT department_id, name, salary FROM employees ORDER BY department_id ASC, salary DESC; ``` 这里表示优先按部门 ID 升序排列,在同一部门内部再按薪资降序排列。 #### 注意事项 - 如果仅需局部排序而无需关注整体一致性,可考虑使用更高效的替代方案如 `SORT BY`,它可以减少 Reduce 阶段的压力。 - 对于大数据量情况下的分布式计算需求,推荐结合其他关键字比如 `DISTRIBUTE BY` 或者 `CLUSTER BY` 提高性能[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值