Hive语言

一、Hive的DDL语言(数据库、数据表的增删改查操作)

二、Hive的DQL语言(数据库查询语言)

2.1Hive七子句

        聚合函数:count()、sum()、max()、min()、avg()可以单独使用。(缩写:cs mm a)

 

 2.1.1 分区查询与分区裁剪

        SELECT查询将扫描整个表(所谓的全表扫描)。如果使用PARTITIONED BY子句创建的分区表,则在查询时可以指定分区查询,减少全表扫描,也叫做分区裁剪。

        如果select语句没有采用分区裁剪,默认还是使用全表扫描

        所谓分区裁剪指的是:对分区表进行查询时,会检查WHERE子句JOIN中的ON子句中是否存在对分区字段的过滤,如果存在,则仅访问查询符合条件的分区,即裁剪掉没必要访问的分区

 2.1.2 group by分组(在where后,where筛选后,group by聚合)

                         (出现在group by分组的字段必须出现在select中)

             (  出现在select中的字段要么出现在group by分组中,要么出现在聚合函数中)

                (group by 具有去重功能)

                (分组操作必须和聚合函数一起使用)

 

 

在group by分组是最容易出现数据倾斜问题的?

        答:① 分区、分桶 ② 开启Map端聚合(Map把数据划分为一个一个MapTask任务,Reduce通常是进行数据合并,默认情况下,所有的分组聚合操作都是发生在Reduce这一端,如果数据量比较大的情况下,就会导致耗时较长或者任务长时间无法完成

Map端聚合 => 还可以解决未来数据倾斜的问题

        Map聚合 => 优化手段

        默认设置了set hive.map.aggr=true,会在mapper端先group by一次,最后把结果merge起来,为了减少reducer处理的数据量。

 

 2.1.3 having语句(having 子句 => 一般用于对分组后的数据进行过滤筛选)

        和where相同点: where和having都能进行数据过滤。
        和where不同点: where发生在group by之前,having发生在group by之后。

 

2.1.4limit语句 

 2.2HQL排序查询与高级查询

2.2.1ORDER BY

        Hive SQL中的ORDER BY语法类似于SQL语言中的ORDER BY语法。会对输出的结果进行全局排序,因此底层使用MapReduce引擎执行的时候,只会有一个reducetask执行。也因此,如果输出的行数太大,会导致需要很长的时间才能完成全局排序。

 2.2.2CLUSTER BY

        Hive SQL中的CLUSTER BY语法可以指定根据后面的字段将数据分区,每个区内再根据这个字段asc正序排序(不允许指定排序规则),概况起来就是:根据同一个字段,分组排序。

        cluster by 字段名称,主要做了两件事:① 按照这个字段分区 ② 针对每个区中的数据按照这个字段进行升序排序(记住,只能做到升序排序)

注意:使用了cluster by必须人为指定分组的数量 => Reduce数量

        分组的规则hash散列hash(col_name) % reduce task nums

 2.2.3DISTRIBUTE BY + SORT BY

        如果说CLUSTER BY的功能是分组排序(同一个字段),那么DISTRIBUTE BY + SORT BY就相当于把cluster by的功能一分为二:DISTRIBUTE BY负责分组,SORT BY负责分组内排序,并且可以是不同的字段。如果DISTRIBUTE BY +SORT BY的字段一样,可以得出下列结论:

        CLUSTER BY=DISTRIBUTE BY +SORT BY(字段一样)

 

2.2.3Union联合查询

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值