【Hive】请说明hive中 Sort By,Order By,Cluster By,Distrbute By各代表什么意思?

简介: 【4月更文挑战第17天】【Hive】请说明hive中 Sort By,Order By,Cluster By,Distrbute By各代表什么意思?

image.png

在 Hive 中,Sort By、Order By、Cluster By 和 Distribute By 是用于对数据进行排序、分区和分桶的关键字,它们在数据处理和查询优化中起着重要作用。虽然它们都涉及对数据进行排序或分组操作,但它们之间有着不同的含义和用途。接下来,我将详细解释每个关键字的含义、用法以及它们之间的区别,并提供相应的示例代码片段来帮助读者更好地理解。

1. Sort By

Sort By 是用于对查询结果进行排序的关键字。它会在 MapReduce 作业中添加一个排序阶段,将查询结果按照指定的列进行排序,但不会改变数据的分区或分桶。排序是在 Reduce 阶段完成的,因此需要将数据洗牌到 Reduce 端,性能开销较大,适用于小数据量的排序操作。

示例代码片段:

-- 创建表
CREATE TABLE sales (
    product STRING,
    amount INT
);

-- 插入数据
INSERT INTO sales VALUES ('A', 100), ('B', 200), ('C', 150);

-- 查询数据并按照 amount 字段排序
SELECT * FROM sales SORT BY amount;

在上述示例中,我们对 sales 表的 amount 字段进行排序,使用了 SORT BY 关键字。这会在查询结果中对 amount 字段进行排序,但不会改变数据的分区或分桶。

2. Order By

Order By 也是用于对查询结果进行排序的关键字,与 Sort By 类似,但它会对整个数据集进行排序,而不仅仅是在 Reduce 阶段进行排序。因此,Order By 的性能开销更大,适用于需要全局排序的场景。

示例代码片段:

-- 创建表
CREATE TABLE sales (
    product STRING,
    amount INT
);

-- 插入数据
INSERT INTO sales VALUES ('A', 100), ('B', 200), ('C', 150);

-- 查询数据并按照 amount 字段排序
SELECT * FROM sales ORDER BY amount;

在上述示例中,我们同样对 sales 表的 amount 字段进行排序,但这次使用了 ORDER BY 关键字。与 Sort By 不同,ORDER BY 会对整个数据集进行排序,而不仅仅是在 Reduce 阶段进行排序。

3. Cluster By

Cluster By 是用于将数据分桶的关键字,它会将数据按照指定的列进行分桶,并根据分桶键进行数据的分区。Cluster By 可以提高查询性能,特别是在经常按照某个列进行查询或连接操作时,可以减少数据的扫描量。

示例代码片段:

-- 创建表并使用 Cluster By 分桶
CREATE TABLE sales (
    product STRING,
    amount INT
)
CLUSTERED BY (product) INTO 3 BUCKETS;

-- 插入数据
INSERT INTO sales VALUES ('A', 100), ('B', 200), ('C', 150);

-- 查询数据
SELECT * FROM sales WHERE product = 'A';

在上述示例中,我们创建了一个名为 sales 的表,并使用 CLUSTERED BY (product) INTO 3 BUCKETS 将数据按照 product 列进行分桶。这样,当我们执行 SELECT * FROM sales WHERE product = 'A' 查询时,Hive 将只扫描包含 product = 'A' 的分桶,提高了查询性能。

4. Distribute By

Distribute By 用于在 Map 阶段将数据发送到不同的 Reducer。它类似于 Cluster By,但不会进行数据分桶,而是将数据发送到不同的 Reducer 进行局部排序。

示例代码片段:

-- 创建表并使用 Distribute By 分发数据
CREATE TABLE sales (
    product STRING,
    amount INT
)
DISTRIBUTE BY product;

-- 插入数据
INSERT INTO sales VALUES ('A', 100), ('B', 200), ('C', 150);

-- 查询数据
SELECT * FROM sales;

在上述示例中,我们创建了一个名为 sales 的表,并使用 DISTRIBUTE BY product 将数据按照 product 列进行分发。这样,在 Map 阶段,相同 product 的数据将发送到相同的 Reducer 进行局部排序。

总结

在 Hive 中,Sort ByOrder ByCluster ByDistribute By 是用于对数据进行排序、分区和分桶的关键字。它们各自有着不同的作用和适用场景,合理使用可以提高查询性能和效率。通过示例代码片段的解释,读者可以更好地理解每个关键字的用法和作用,从而更加灵活地应用于实际数据处理任务中。

相关文章
|
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】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 桶表
|
SQL 算法 关系型数据库
Hive中order by,sort by,distribute by和cluster by详解
Hive中order by,sort by,distribute by和cluster by详解
732 0
|
7月前
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
209 1
|
7月前
|
SQL 存储 大数据
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
270 0
|
7月前
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
302 0
|
2月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
66 0
|
5月前
|
SQL 分布式计算 大数据
大数据处理平台Hive详解
【7月更文挑战第15天】Hive作为基于Hadoop的数据仓库工具,在大数据处理和分析领域发挥着重要作用。通过提供类SQL的查询语言,Hive降低了数据处理的门槛,使得具有SQL背景的开发者可以轻松地处理大规模数据。然而,Hive也存在查询延迟高、表达能力有限等缺点,需要在实际应用中根据具体场景和需求进行选择和优化。