Hive SQL 中 BY 系列关键字全解析:从排序、分发到分组的核心用法

一、排序与分发相关 BY 关键字

1. ORDER BY:全局统一排序

作用 :对查询结果进行全局排序,确保最终结果集完全有序(仅允许单个 Reducer 处理数据)。

语法

复制代码
SELECT * FROM table_name ORDER BY column1 [ASC|DESC]; -- ASC 为默认升序

特点

大数据量时性能较差(单节点压力大),适用于需要绝对有序的场景(如总分排名、全量数据排序)。

2. SORT BY:分区内局部排序

作用 :在每个 Reducer 内部对数据排序,不同 Reducer 间结果可能无序

语法

复制代码
SELECT * FROM table_name SORT BY column1 [ASC|DESC];

特点 :数据先按分发规则(如 DISTRIBUTE BY)分配到多个 Reducer,再独立排序,性能优于 ORDER BY

3. DISTRIBUTE BY:数据分发规则指定

作用 :定义数据分发到 Reducer 的规则,相同值的记录会被分配到同一个 Reducer

典型搭配 :与 SORT BY 联用,实现 "先分发后排序"(分区内排序)。

语法

复制代码
SELECT * FROM table_name DISTRIBUTE BY column1 SORT BY column2 [ASC|DESC];

示例 :按 user_id 分发数据到同一 Reducer,再按 log_time 排序:

复制代码
SELECT * FROM logs DISTRIBUTE BY user_id SORT BY log_time ASC;

4. CLUSTER BY:分发与排序的语法糖

作用 :等价于 DISTRIBUTE BY column AND SORT BY column对同一字段同时进行分发和排序

语法

复制代码
SELECT * FROM table_name CLUSTER BY column;

限制:仅能对单一字段操作,无法对不同字段分别设置分发和排序规则。

二、分组与聚合相关 BY 关键字

5. GROUP BY:数据分组与聚合

作用 :按指定字段对数据分组,配合聚合函数(如 SUM、COUNT、AVG) 进行统计计算。

语法

复制代码
SELECT group_col, aggregate_func(column) 
FROM table_name 
GROUP BY group_col;

示例:统计各部门员工人数及平均工资:

复制代码
SELECT dept_id, COUNT(*) AS emp_count, AVG(salary) AS avg_salary 
FROM employees 
GROUP BY dept_id;

注意 :未在聚合函数中的字段需出现在 GROUP BY 子句中(Hive 3.0+ 支持优化)。

6. PARTITION BY:分区与窗口分组

场景一:Hive 表分区(物理存储)

作用 :将数据按字段存储在不同目录(如按日期、地域分区),提升查询效率

语法

复制代码
CREATE TABLE sales_data (order_id INT, amount DECIMAL) 
PARTITIONED BY (year STRING, month STRING);

过滤分区字段时可直接定位文件,如 SELECT * FROM sales_data WHERE year='2023'

场景二:窗口函数(逻辑分组)

作用 :在查询结果中按字段分组,不改变行数,用于计算分组内排名、累计值等。

语法

复制代码
SELECT *, ROW_NUMBER() OVER (PARTITION BY dept_id ORDER BY salary DESC) AS rank 
FROM employees;

说明 :按 dept_id 分组,计算每个员工在部门内的工资排名。

三、关键特性对比表

关键字 核心功能 是否改变数据行数 典型场景
ORDER BY 全局排序 全量数据排名、总决赛计分
SORT BY 分区内排序 日志分区内时间排序
DISTRIBUTE BY 数据分发到 Reducer 的规则 配合 SORT BY 实现分区内排序
CLUSTER BY 分发 + 排序(同字段) 简单场景下的快速排序分发
GROUP BY 分组聚合 是(聚合后行数减少) 部门统计、类别汇总
PARTITION BY 表分区 / 窗口分组 物理存储优化、窗口函数排名
相关推荐
Harvy_没救了几秒前
【云计算】华为公有云构建高可用Redis集群
数据库·redis·云计算
念何架构之路几秒前
存储层技术:其他NoSQL数据库和RPC
数据库·oracle
枫叶林FYL7 分钟前
项目十一:Saga模式分布式旅行预订系统 核心服务实现与Saga编排器
数据库·python·docker
逍遥德7 分钟前
PostgreSQL --- 二进制数使用详解
数据库·sql·postgresql
Ze3G90nYt8 分钟前
Redis 分布式锁进阶第一百三十一篇
数据库·redis·分布式
倔强的石头10613 分钟前
《Kingbase护城河》——数据库卡顿急救手册:会话状态深度解析与“僵尸进程”排查实战
数据库
峥无14 分钟前
MySQL 数据库 & 数据表基础操作总结
数据库·mysql
程序边界15 分钟前
KES Plus深度体验:当数据库开始“越界“做开发平台
数据库
Amnesia0_015 分钟前
MYSQL索引
数据库·mysql
一只fish18 分钟前
DB-Engines Ranking 2026年6月数据库排行
数据库