美文网首页
hive排序:order by、distribute by 、s

hive排序:order by、distribute by 、s

作者: emm_simon | 来源:发表于2020-01-16 20:06 被阅读0次

    [参考link]

    order by
    order by 只有一个reduce负责对所有的数据进行排序,若大数据量,则需要较长的时间。
    建议在小的数据集中使用order by 进行排序。

    order by 可以通过设置hive.mapred.mode参数控制执行方式,若选择strict,则order by 则需要指定limit(若有分区还有指定哪个分区) ;若为nostrict,则与关系型数据库差不多。

    sort by
    sort by 基本上不受hive.mapred.mode影响,可以通过mapred.reduce.task 指定reduce个数,查询后的数据被分发到相关的reduce中。

    sort by 的数据在进入reduce前就完成排序,如果要使用sort by 是行排序,并且设置map.reduce.tasks>1,则sort by 才能保证每个reducer输出有序,不能保证全局数据有序。

    distribute by
    distribute by 采集hash算法,在map端将查询的结果中hash值相同的结果分发到对应的reduce文件中。

    distribute by 可以使用length方法会根据string类型的长度划分到不同的reduce中,最终输出到不同的文件中。 length 是内建函数,也可以指定其他的函数或这使用自定义函数。

    cluster by
    cluster by 除了distribute by 的功能外,还会对该字段进行排序,所以cluster by = distribute by +sort by 。

    相关文章

      网友评论

          本文标题:hive排序:order by、distribute by 、s

          本文链接:https://www.haomeiwen.com/subject/kqlqzctx.html