美文网首页大数据
hive表之 order by、sort by、cluster

hive表之 order by、sort by、cluster

作者: 飞不高的老鸟 | 来源:发表于2019-11-02 15:10 被阅读0次

    order by 语法操作

    • order by 是进行全局排序,在整个作业执行过程中,只产生一个 reducer,在数据量过大的时候,执行的时间会很长 。事实上,这与分布式的思想是相背离的。

    创建测试表并加载数据。

    hive> create table recommend.test_tb(userid string, name string, age int)
                                   > row format delimited
                                   > fields terminated by ',';
    

    数据加载。

    hive> select * from recommend.test_tb;
    OK
    1   Jack    21
    3   Tom 19
    5   Will    20
    4   Lily    28
    7   zs  25
    6   lss 22
    

    使用 order by 语义进行处理, order by 语义有两个排序方式的选择--升序和降序,其中默认为升序。

    hive> select * from recommend.test_tb order by userid;
    OK
    1   Jack    21
    3   Tom 19
    4   Lily    28
    5   Will    20
    6   lss 22
    7   zs  25
    

    sort by 语法

    • sort by 会在 mapper 输出时对进入每个 reducer 的数据进行一次排序。它的数据处理是并行的,而且在每个 reducer 中是有序的,然而,在全局范围内并不是严格有序的。当然,如果将 reducer 数量限定为 1,也可保证它的全局有序性,此时起到的作用跟 order by 极为相似,但是不符合分布式的思想。
    • sort by 可以在查询时指定 reducer 的个数,例如:
    hive> set mapred.reduce.tasks=;
    hive> select * from recommend.test_tb order by userid;
    
    • sort by 是在是跟句 hash 算法将 mapper 输出数据分发到每个 reducer 中。因此,这种方式不同的 reducer 中的数据虽然有序,但是范围是有重叠的。

    distribute by 语法

    • distribute by 保证不同的 reducer 中的数据不存在重叠,但是不能保证单个 reducer 中的数据是有序的是。因此,通常情况下,想要得到有序非重叠的 reducer ,可以将 distribute by 与 sort by 结合使用。

    Cluster by 语法

    • Cluster by 的用法就行将 distribute by 与 sort by 结合使用,输出我们想要的结果,例如:
    hive> select * from recommend.test_tb distribute by userid sort by userid;
    hive> select * from recommend.test_tb cluster by userid;
    
    • 使用 Cluster by 可以得到 reducer 内有序且不同 reducer 之间不重叠的数据。
    • cluster by 只能按照降序进行排序,不能指定升序(asc)和降序(desc)。

    相关文章

      网友评论

        本文标题:hive表之 order by、sort by、cluster

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