关于sortby vs order by in hive的澄清

关于sortby vs order by in hive的澄清,hive,bigdata,hiveql,Hive,Bigdata,Hiveql,我正在阅读下面的Hive手册,对文档中的详细说明感到困惑 首先它说 配置单元使用SORT BY中的列对行进行排序,然后再向 行到减速机 然后它说 配置单元支持排序,按每个缩减器对数据进行排序。区别 在“排序依据”和“排序依据”之间,前者保证总的 输出中的顺序,而后者仅保证输出的顺序 减速机中的行。如果有多个减速器,“按排序” 可能给出部分有序的最终结果 如果它在发送到reducer之前已经对记录进行了排序,那么如何保证最终输出不会被排序?它运行双重排序吗 大多数排序依据和排序依据的逻辑非常相似

我正在阅读下面的Hive手册,对文档中的详细说明感到困惑

首先它说

配置单元使用SORT BY中的列对行进行排序,然后再向 行到减速机

然后它说

配置单元支持排序,按每个缩减器对数据进行排序。区别 在“排序依据”和“排序依据”之间,前者保证总的 输出中的顺序,而后者仅保证输出的顺序 减速机中的行。如果有多个减速器,“按排序” 可能给出部分有序的最终结果


如果它在发送到reducer之前已经对记录进行了排序,那么如何保证最终输出不会被排序?它运行双重排序吗

大多数
排序依据
排序依据
的逻辑非常相似。您可以将
orderby
视为
排序依据
的一种更受限制的情况。假设下面的执行引擎是MapReduce

这两种情况都依赖MR的洗牌阶段对项目进行排序。洗牌操作可以分为两部分,分别由MR作业的map侧和reduce侧处理。前者用于局部排序,后者用于合并来自不同映射器的部分结果

当医生说:

配置单元使用“排序依据”中的列对行进行排序,然后再将行馈送到缩减器

这意味着行是按随机洗牌阶段的映射端操作排序的。实际上,
排序依据
排序依据
都是如此

那两者有什么不同呢?这是减速器的并行性。 对于排序依据,为了获得全局排序的结果集,配置单元强制还原数为1,从而将所有数据发送到单个还原数。在这个简化程序中,shuffle的合并部分保证了所有数据都是全局排序的

而对于排序方式,则没有这样的强制执行。所以减速机的数量可以是任何东西。这导致数据只能在每个reducer中进行排序。但不能保证全局排序。当reducer的num显式或隐式设置为1时,
排序依据
排序依据
具有相同的行为