大数据框架Hive——使用hive—sql心得体会,查看sql执行计划,聚和函数使用注意事项

最近在使用hive进行数据处理

因为hive使用的语句sql语句与mysql中基本类似

但是还有很多不同的小点,也就是坑,需要注意

sql语句的执行顺序

在mysql中,sql语句的执行顺序是这样的

from where group by hiving order by select limit

这个顺序有什么意义呢?

要知道,在mysql的早期版本时,hiving中是无法使用select中的别名的

但是在mysql的新版本中,hiving中是可以使用select中的别名的

这就会对很多人产生误导

说好的hiving中不能使用别名,你却偷偷翻了墙,把别名偷过来使用了

注意,此时hiving中使用别名,是因为mysql中的一个属性的设置

这个属性具体是什么有兴趣的可以去查一下

当这个属性设置为false时,hiving中就无法使用别名

那么,hive中的sql语句中的hiving就无法使用select中的别名吧

错了!

在hive中,sql语句的执行顺序是完全不通的,这一特点,可以通过hive的执行计划

看到sql语句的执行顺序,当然,可能有些不明显

hive (db_practise)> explain
                  > select deptno
                  > from tb_emp
                  > group by deptno;
OK
Explain
STAGE DEPENDENCIES:
  Stage-1 is a root stage
  Stage-0 depends on stages: Stage-1

STAGE PLANS:
  Stage: Stage-1
    Map Reduce
      Map Operator Tree:
          TableScan
            alias: tb_emp
            Statistics: Num rows: 164 Data size: 656 Basic stats: COMPLETE Column stats: NONE
            Select Operator
              expressions: deptno (type: int)
              outputColumnNames: deptno
              Statistics: Num rows: 164 Data size: 656 Basic stats: COMPLETE Column stats: NONE
              Group By Operator
                keys: deptno (type: int)
                mode: hash
                outputColumnNames: _col0
                Statistics: Num rows: 164 Data size: 656 Basic stats: COMPLETE Column stats: NONE
                Reduce Output Operator
                  key expressions: _col0 (type: int)
                  sort order: +
                  Map-reduce partition columns: _col0 (type: int)
                  Statistics: Num rows: 164 Data size: 656 Basic stats: COMPLETE Column stats: NONE
      Reduce Operator Tree:
        Group By Operator
          keys: KEY._col0 (type: int)
          mode: mergepartial
          outputColumnNames: _col0
          Statistics: Num rows: 82 Data size: 328 Basic stats: COMPLETE Column stats: NONE
          File Output Operator
            compressed: false
            Statistics: Num rows: 82 Data size: 328 Basic stats: COMPLETE Column stats: NONE
            table:
                input format: org.apache.hadoop.mapred.TextInputFormat
                output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

  Stage: Stage-0
    Fetch Operator
      limit: -1
      Processor Tree:
        ListSink

其实,在hive中,sql的执行顺序是如下的

from... where.... select...group by... having ... order by...limit

所以:在hive中的hiving中,是可以使用别名的,这点要注意

聚合函数使用注意事项

我在使用聚合函数时,遇到了如下的问题,经查找后,发现有位前辈总结的非常好,所以来借鉴一下

1.聚合条件--HAVING,从Hive0.7.0开始HAVING被添加到Hive作为GROUP BY结果集的条件过滤。HAVING可以作为子句的替代。

hive> SELECT sex_age.age FROM employee GROUP BY sex_age.age HAVING count(*) >=1;

2.聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用。换句话说使用聚合函数时,一个列字段要不在group by里,要不必须在聚合函数里面,不能单独出现,否则报错。

1.只有聚合函数,没有group by ,没问题
hive (default)> select sum(a),count(distinct b)  from fdm_sor.tmp_aaaaa;
   OK
   2    1
2.有聚合函数,又有别的列c,但是没有用group by,报错
hive (default)> select sum(a),count(distinct b) ,c   from fdm_sor.tmp_aaaaa;
FAILED: SemanticException [Error 10025]: Line 1:33 Expression not in GROUP BY key 'c'
 
3.聚合函数配合group by 一起使用
select sum(a),count(distinct b) , c from fdm_sor.tmp_aaaaa  group by c;
OK
2    1    2019-05-22 21:23:34

原文:https://blog.csdn.net/qq_26442553/article/details/79465266 
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无名一小卒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值