何时在 hive QL 中使用 sort By 子句

Posted

技术标签:

【中文标题】何时在 hive QL 中使用 sort By 子句【英文标题】:When to use sort By clause in hive QL 【发布时间】:2019-04-22 08:55:03 【问题描述】:

我检查了 hive 中 sort by 与 order by 子句之间的区别。 当需要总排序时使用排序依据,而当有多个减速器和输入到减速器需要按排序顺序时使用排序依据。因此,如果只有一个 reducer,sort by 可能会导致全序;如果有多个 reducer,则排序可能会导致偏序-

参考-https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy

我的问题是我们什么时候需要在 hiveQL 中使用 sort by 子句?

【问题讨论】:

【参考方案1】:

当对数据进行排序时,连接会更快,因为优化器知道数据是按特定顺序排序的,在该值之后它需要停止寻找所需的谓词选择(where 子句条件)。

案例 1 - 订购者

现在,如果您在给定字段中的数据具有特定顺序,或者您的选择查询需要特定顺序的数据 例如- 员工按薪水排序(即按薪水和乐队排序) 或者 根据入职日期对员工进行排序(即按入职日期排序)

然后您需要使用 order by 子句保存数据/结果(以获取总订单)& 我们需要使用 order by(工资)以便在您查询目标数据时默认获取所需的有序数据。

案例 2 - 排序方式

如果给定字段中的数据不需要按特定顺序(例如 Customer_id 等唯一生成的字母数字字段)

在这种情况下,逻辑上最终数据不需要根据 customer_id 以特定顺序出现,但因为它是唯一键并且主要用于加入 因此,虽然我们将客户交易细节的数据存储在每个分区中,但它需要以排序/有序的方式呈现,以加快连接速度。 因此,在这种情况下,我们在存储最终结果时使用 sort by (customer_id)。

【讨论】:

以上是关于何时在 hive QL 中使用 sort By 子句的主要内容,如果未能解决你的问题,请参考以下文章

hive Caused by: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata

hive order by sort by distribute by和sort by一起使用 cluster by

Hive中sort by,order by,cluster by,distribute by总结

当查询具有 GROUP BY 子句时,Hive 查询抛出“来自 org.apache.hadoop.hive.ql.exec.tez.TezTask 的代码 2”异常

使用 order by 时出现 Hive 错误

Hive中order by,sort by,distribute by,cluster by的区别