zoukankan      html  css  js  c++  java
  • 09-HQL:Group、Order

    写在前面的话:

    该系列博文是我学习《 Hive源码解析与开发实战》视频课程的一个笔记,或者说总结,暂时没有对视频中的操作去做验证,只是纯粹的学习记录。

    有兴趣看该视频的博友可以留言,我会共享出来,相互交流学习 ^.^。

    *********************************************************************************************************

    一、Hive的高级查询:

      1.1、查询操作:

        

        1、Order by : 

        按照某些字段排序。

        样例:

        select col1,other....

        from table

        where  condition

        order by col1,col2 [asc|desc];

        这里order by 后面接几个列,每个列后面都可以接一个[asc|desc]表明是按照升序还是降序排列。

          

        order by 由于是全局排序的,所以只能在一个reduce进行操作,因此如果当数据量太大的时候,不要轻易使用order by,这样的话会使大量的数据都跑到一个reduce中运行,如果reduce内存比较小,可能会报内存溢出,即便内存很大,也会花费很长时间,并且不管配置了有多少个reduce,都只会使用一个reduce。sort by 则是每一个reduce中排序,可能对应有多个reduce。    

        实验:

            

      1.2、mapreduce底层实现:

        1、order by实现原理:

        

        上图过程解释:

        首先左边是一个表,表目录下面可能有多个文件,这些文件通过一些map来进行读取。即:map从表中读取数据,并执行where条件,也就是说,where是在map中执行的,在map中执行where的好处是可以过滤掉一部分数据,从而传递给reduce的数据会少一些,减少了reduce的计算量并且减少了网络io。然后如果order by是按照col1和col2进行排序的话,那么map会将col1和col2的值组合为一个key,其他的值组合成一个value,然后传到一个reduce中去。

    二、几个简单的聚合操作:

      所谓的聚合操作,就是通过一个集合来算一个值。

      

      2.1、count 计数:

      count(*) : 所有字段的值都不是null的时候,计数才会算上该条记录;

      count(1) : 只要有记录,不管是否字段值为空,那么计数就会算上该条记录;

      count(col) :类似count(*),只不过count(col)是固定在某一列进行判断,也就是如果某一条记录的col字段值为NULL的话,那么计数是不算该条记录的;

      2.2、sum求和:

      sum(可转化为数字的值)返回bigint;如果传入的某个字段是String类型的话,它会将其转化为bigint再求和;如果用sum求和再加1的话,这个时候会报异常,因为sum返回的是bigint,我们需要把1转化为bigint,比如:sum(col)+1是不行的,必须这样sum(col)+cast(1 as bigint)

      2.3、avg求平均值:

      avg(可转化成数字的值)返回double;

      2.4、distinct 不同值个数:

      比如说统计某个字段值去重之后的个数:count(distinct col); 也就是该字段相同的几个值作为一个值来计数。当然distinct也可以单独使用。  

      

  • 相关阅读:
    Spring Boot 2 快速教程:WebFlux Restful CRUD 实践(三)
    Spring Boot 2 快速教程:WebFlux 快速入门(二)
    ES 集群上,业务单点如何优化升级?
    Spring Boot 2.x 系列教程:WebFlux 系列教程大纲(一)
    泥瓦匠想做一个与众不同的技术"匠"
    java编程行业微信群,无论新手老手欢迎加入,会一直更新
    Spring Boot 2.x 系列教程:WebFlux REST API 全局异常处理 Error Handling
    解决方案:如何防止数据重复插入?
    阿里 Java 手册系列教程:为啥强制子类、父类变量名不同?
    品阿里 Java 开发手册有感
  • 原文地址:https://www.cnblogs.com/lordcheng/p/7491947.html
Copyright © 2011-2022 走看看