zoukankan      html  css  js  c++  java
  • Hive(五)【DQL数据查询】

    一. 基本查询

    1.1 算数运算符

    运算符 描述
    A+B A和B 相加
    A-B A减去B
    A*B A和B 相乘
    A/B A除以B
    A%B A对B取余
    A&B A和B按位取与
    A|B A和B按位取或
    A^B A和B按位取异或
    ~A A按位取反

    案例

    查询所有员工的薪水然后加1

    select sal+1 from emp
    

    1.2 常用聚合函数

    可以和分组group by 配合使用

    案例

    求总行数、最大值、最小值、总和、平均值

    select count(*),max(sal),min(sal),sum(sal),avg(sal) from emp
    

    1.3 limit

    案例

    查询emp表前五行

    select * from emp limit 5;
    

    查询emp表第5-第10行

    select * from emp limit 4,6;
    --数据从第0行开始计数,4代表第5行,6代表从第5行往后再查6行
    

    1.4 where

    注意:where字句紧随from字句、where字句不能使用字段别名

    1.5 比较运算符(between|in|is null)

    操作符 支持的数据类型 描述
    A=B 基本数据类型 如果A等于B则返回TRUE,反之返回FALSE
    A<=>B 基本数据类型 如果A和B都为NULL,则返回TRUE,如果一边为NULL,返回False
    A<>B, A!=B 基本数据类型 A或者B为NULL则返回NULL;如果A不等于B,则返回TRUE,反之返回FALSE
    A<B 基本数据类型 A或者B为NULL,则返回NULL;如果A小于B,则返回TRUE,反之返回FALSE
    A<=B 基本数据类型 A或者B为NULL,则返回NULL;如果A小于等于B,则返回TRUE,反之返回FALSE
    A>B 基本数据类型 A或者B为NULL,则返回NULL;如果A大于B,则返回TRUE,反之返回FALSE
    A>=B 基本数据类型 A或者B为NULL,则返回NULL;如果A大于等于B,则返回TRUE,反之返回FALSE
    A [NOT] BETWEEN B AND C 基本数据类型 如果A,B或者C任一为NULL,则结果为NULL。如果A的值大于等于B而且小于或等于C,则结果为TRUE,反之为FALSE。如果使用NOT关键字则可达到相反的效果。
    A IS NULL 所有数据类型 如果A等于NULL,则返回TRUE,反之返回FALSE
    A IS NOT NULL 所有数据类型 如果A不等于NULL,则返回TRUE,反之返回FALSE
    IN(数值1, 数值2) 所有数据类型 使用 IN运算显示列表中的值
    A [NOT] LIKE B STRING 类型 B是一个SQL下的简单正则表达式,也叫通配符模式,如果A与其匹配的话,则返回TRUE;反之返回FALSE。B的表达式说明如下:‘x%’表示A必须以字母‘x’开头,‘%x’表示A必须以字母’x’结尾,而‘%x%’表示A包含有字母’x’,可以位于开头,结尾或者字符串中间。如果使用NOT关键字则可达到相反的效果。
    A RLIKE B, A REGEXP B STRING 类型 B是基于java的正则表达式,如果A与其匹配,则返回TRUE;反之返回FALSE。匹配使用的是JDK中的正则表达式接口实现的,因为正则也依据其中的规则。例如,正则表达式必须和整个字符串A相匹配,而不是只需与其字符串匹配。

    1.6 LIKE和RLIKE

    • LIKE

      %代表任意个字符

      _ 代表一个字符

    • RLIKE

      RLIKE子句是Hive中这个功能的一个扩展,其可以通过Java的正则表达式这个更强大的语言来指定匹配条件。

    案例

    1.查找以A开头的员工信息

    select * from emp where ename LIKE 'A%';    --LIKE
    select * from emp where ename RLIKE '^A';   --RLIKE
    

    2.查找名字第二个字母为A的员工信息

    select * from emp where ename LIKE '_A%';
    select * from emp where ename RLIKE '^.A';
    

    3.查询名字中带A的员工信息

    select * from emp where ename LIKE '%A%';
    select * from emp where ename RLIKE '[A]';
    

    1.7 and|or|not

    操作符 含义
    AND 逻辑并
    OR 逻辑或
    NOT 逻辑否

    1.8 group by|having by

    (1)where 后面不能写分组函数,having后面可以使用分组函数。

    (2)having只能于group by分组统计语句。

    二. Join语句

    2.1 内连接

    案例

    select e.empno,e.ename,d.deptno from emp e join dept d on e.deptno = d.deptno;
    

    2.2 外连接(左|右)

    案例

    • 左外连接

      select e.empno,e.ename,d.deptno from emp e left join dept d on e.deptno = d.deptno;
      
    • 右外连接

      select e.empno,e.ename,d.deptno from emp e left join dept d on e.deptno = d.deptno;
      

    2.3 满连接

    案例

    select e.deptno,e.ename,d.deptno from emp e 
    full join deptno d on e.depno=d.depno;
    

    2.4 多表连接

    案例

    select * from emp e 
    join dept d
    on e.deptno = d.deptno
    join location l
    on d.loc = l.loc;
    

    三. 排序

    3.1 order by

    全局排序,只有一个reducer。对于大数据场景的数据效率非常低,一般不用

    别名、多个列全排序

    案例

    select ename,deptno,sal*2 two_sal from emp order bydeptno asc,two_sal desc; 
    

    3.2 sort by 和 distribute by

    sort by

    sort by为每个reducer进行内部排序(区内排序),对全局不是排序。

    distribute by

    distribute by的分区规则是根据分区字段的hash码与reduce的个数进行模除后,余数相同的分到一个区

    案例

    insert overwrite local directory '/opt/module/hive/data/export'
    select * from emp distribute by deptno sort by empno desc;
    
    总结

    一般sort by和distribute by一起使用,Hive要求distribute by语句要写sort by语句之前

    参数设置:set mapreduce.job.reduces=3,set mapreduce.job.reduces

    3.3 cluster by

    cluster by可以看做是sort by和distribute by相同字段一起使用的特例。

    cluster by具有distribute by的功能外还兼具sort by的功能,但是排序只能是升序排序

    案例

    select * from emp cluster by deptno;
    --上下两种写法等价
    select * from emp distribute by deptno sort by deptno;
    
  • 相关阅读:
    utf8编码和中文不能解码问题解决
    python环境的安装配置
    repo同一个仓的同一个changeId的提交
    Jenkins pipeline之将命令的运行结果赋值给变量
    repo和git常用的命令和场景
    docker 安装rabbitmq
    docker的一些概念
    mysql数据库sql优化原则
    数据库优化02
    MySQL数据库优化总结
  • 原文地址:https://www.cnblogs.com/wh984763176/p/13204692.html
Copyright © 2011-2022 走看看