何时在 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”异常