何时在 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 子句的主要内容,如果未能解决你的问题,请参考以下文章