• Hive基本查询语句


    hive查询时显示字段名

    • 运行下面代码,查询即可看到字段名
    set hive.cli.print.header=true;
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    • 还可以去掉表名
    set hive.resultset.use.unique.column.names=false;
    
    • 1

    在这里插入图片描述

    全表和特定列查询

    • 查询语句语法:
    SELECT [ALL | DISTINCT] select_expr, select_expr, ...
    FROM table_reference
    [WHERE where_condition]
    [GROUP BY col_list]
    [ORDER BY col_list]
    [CLUSTER BY col_list
    | [DISTRIBUTE BY col_list] [SORT BY col_list]
    ]
    [LIMIT number]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    基本查询

    全表和特定列查询

    • 数据准备

    /root/hivedata 下面创建两个文件

    在这里插入图片描述

    • dept:
    10      ACCOUNTING      1700
    20      RESEARCH        1800
    30      SALES   1900
    40      OPERATIONS      1700
    
    • 1
    • 2
    • 3
    • 4
    • emp:
    7369    SMITH   CLERK   7902    1980-12-17      800.00          20
    7499    ALLEN   SALESMAN        7698    1981-2-20       1600.00 300.00  30
    7521    WARD    SALESMAN        7698    1981-2-22       1250.00 500.00  30
    7566    JONES   MANAGER 7839    1981-4-2        2975.00         20
    7654    MARTIN  SALESMAN        7698    1981-9-28       1250.00 1400.00 30
    7698    BLAKE   MANAGER 7839    1981-5-1        2850.00         30
    7782    CLARK   MANAGER 7839    1981-6-9        2450.00         10
    7788    SCOTT   ANALYST 7566    1987-4-19       3000.00         20
    7839    KING    PRESIDENT               1981-11-17      5000.00         10
    7844    TURNER  SALESMAN        7698    1981-9-8        1500.00 0.00    30
    7876    ADAMS   CLERK   7788    1987-5-23       1100.00         20
    7900    JAMES   CLERK   7698    1981-12-3       950.00          30
    7902    FORD    ANALYST 7566    1981-12-3       3000.00         20
    7934    MILLER  CLERK   7782    1982-1-23       1300.00         10	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    1. 创建部门表
    create table if not exists dept(depton int,dname string,loc int)
    row format delimited fields terminated by '\t';
    
    • 1
    • 2

    在这里插入图片描述

    1. 创建员工表
    create table if not exists emp(empno int,ename string,job string,mgr int,hiredate string,sal double,comm double,deptno int)
    row format delimited fields terminated by '\t';
    
    • 1
    • 2

    在这里插入图片描述

    1. 导入数据
    load data local inpath '/root/hivedata/dept.txt' into table dept;
    load data local inpath '/root/hivedata/emp.txt' into table emp;
    
    • 1
    • 2

    在这里插入图片描述

    全表查询

    select * from emp;
    
    • 1

    在这里插入图片描述

    选择特定列查询

    select empno,ename from emp;
    
    • 1

    在这里插入图片描述

    注意:

    • (1)SQL 语言大小写不敏感。
    • (2)SQL 可以写在一行或者多行
    • (3)关键字不能被缩写也不能分行
    • (4)各子句一般要分行写。
    • (5)使用缩进提高语句的可读性。

    列别名

    • 1)重命名一个列
    • 2)便于计算
    • 3)紧跟列名,也可以在列名和别名之间加入关键字‘AS’

    案例实操

    1. 查询名称和部门
    select ename as name,deptno dn from emp;
    
    • 1

    在这里插入图片描述

    算术运算符(常用)

    运算符描述
    A+BA 和 B 相加
    A-BA 减去 B
    A/BA 除以 B
    A*BA 和 B 相乘
    • 案例实操:查询出所有员工的薪水后加 1 显示。
    select sal +1 from emp;
    
    • 1

    在这里插入图片描述

    常用函数

    求总行数(count)

    select count(*) cnt from emp;
    
    • 1

    在这里插入图片描述

    求工资的最大值(max)

    select max(sal) max_sal from emp;
    
    • 1

    在这里插入图片描述

    求工资的最小值(min)

    select min(sal) min_sal from emp;
    
    • 1

    在这里插入图片描述

    求工资的总和(sum)

    select sum(sal) sum_sal from emp;
    
    • 1

    在这里插入图片描述

    求工资的平均值(avg)

    select avg(sal) avg_sal from emp;
    
    • 1

    在这里插入图片描述

    Limit 语句

    • 典型的查询会返回多行数据。LIMIT 子句用于限制返回的行数。
    select * from emp limit 5;
    
    • 1

    在这里插入图片描述

    Where 语句

    1. 使用 WHERE 子句,将不满足条件的行过滤掉
    2. WHERE 子句紧随 FROM 子句

    案例实操

    • 查询出薪水大于 1000 的所有员工
    select ename,sal from emp where sal > 1000;
    
    • 1

    在这里插入图片描述

    • 注意:where 子句中不能使用字段别名。

    比较运算符(Between/In/ Is Null)

    在这里插入图片描述

    案例实操

    • 查询出薪水等于 5000 的所有员工
    select ename,sal from emp where sal=5000;
    
    • 1

    在这里插入图片描述

    • 查询工资在 500 到 1000 的员工信息
    select ename,sal from emp where between 500 and 1000;
    
    • 1

    在这里插入图片描述

    • 查询 comm 为空的所有员工信息
    select ename,comm from emp where comm is null;
    
    • 1

    在这里插入图片描述

    • 查询工资是 1500 或 5000 的员工信息
    select ename,sal from emp where sal in (1500,5000);
    
    • 1

    在这里插入图片描述

    逻辑运算符(And/Or/Not)

    在这里插入图片描述

    • 查询薪水大于 1000,部门是 30
    select * from emp where sal>1000 and deptno=30;
    
    • 1

    在这里插入图片描述

    • 查询薪水大于 1000,或者部门是 30
    select * from emp where sal>1000 or deptno=30;
    
    • 1

    在这里插入图片描述

    • 查询除了 20 部门和 30 部门以外的员工信息
    select * from emp where deptno not in(20,30);
    
    • 1

    在这里插入图片描述

    分组

    Group By 语句

    GROUP BY 语句通常会和聚合函数一起使用,按照一个或者多个列队结果进行分组,然后对每个组执行聚合操作。

    案例实操

    • 计算 emp 表每个部门的平均工资
    select deptno,avg(sal) avg_sal from emp group by deptno;
    
    • 1

    在这里插入图片描述

    • 计算 emp 每个部门中每个岗位的最高薪水
    select deptno,job,max(sal) max_sal from emp group by deptno,job;
    
    • 1

    在这里插入图片描述

    Having 语句

    (1)where 后面不能写分组函数,而 having 后面可以使用分组函数。
    (2)having 只用于 group by 分组统计语句。

    • 求每个部门的平均薪水大于 2000 的部门
    select deptno,avg(sal) avg_sal from emp group by deptno having avg_sal>2000;
    
    • 1

    在这里插入图片描述

    Join 语句

    • 根据员工表和部门表中的部门编号相等,查询员工编号、员工名称和部门名称;
    select e.empno,e.ename,d.dname from emp e join dept d on e.deptno = d.depton;
    
    • 1

    在这里插入图片描述

    表的别名

    (1)使用别名可以简化查询。
    (2)使用表名前缀可以提高执行效率

    排序

    全局排序(Order By)

    • Order By:全局排序,只有一个 Reducer
    • 使用 order by 子句排序
    • asc(ascend): 升序(默认)
    • desc(descend): 降序
    • order by 子句在 select 语句的结尾

    案例实操

    1. 查询员工信息按工资升序排列
    select * from emp order by sal;
    
    • 1

    在这里插入图片描述

    1. 查询员工信息按工资降序排列
    select * from emp order by sal desc;
    
    • 1

    在这里插入图片描述

    按照别名排序

    • 按照员工薪水的 2 倍排序
    select ename,sal*2 twosal from emp order by twosal;
    
    • 1

    在这里插入图片描述

    多个列排序

    • 按照部门和工资升序排序
    select ename,deptno,sal from emp order by deptno,sal;
    
    • 1

    在这里插入图片描述

    每个 Reduce 内部排序(Sort By)

    • Sort By:对于大规模的数据集 order by 的效率非常低。在很多情况下,并不需要全局排 序,此时可以使用 sort by。
    • Sort by 为每个 reducer 产生一个排序文件。每个 Reducer 内部进行排序,对全局结果集 来说不是排序。
    • 设置 reduce 个数
    set mapreduce.job.reduces=3;
    
    • 1

    在这里插入图片描述

    • 查看设置 reduce 个数
    set mapreduce.job.reduces;
    
    • 1

    在这里插入图片描述

    • 根据部门编号降序查看员工信息
    select * from emp sort by deptno desc;
    
    • 1

    在这里插入图片描述

    • 将查询结果导入到文件中(按照部门编号降序排序)
    insert overwrite local directory '/root/hivedata'
    select * from emp sort by deptno desc;
    
    • 1
    • 2

    在这里插入图片描述

  • 相关阅读:
    谣言检测(PSIN)——《Divide-and-Conquer: Post-User Interaction Network for Fake News Detection on Social Media》
    【ARM-Linux篇】智能家居语音模块配置
    Golang gin Cookie的使用
    【探索C语言中VS调试技巧】:提高效率和准确性
    java面试题:java中的单例设计模式及两种实现方法的代码举例
    C# 压缩图片
    PX4飞行测试
    720云手机电动云台全新上市,让手机能自动拍摄亿万像素VR全景
    【MindSpore】用coco2017训练Model_zoo上的 yolov4,迭代了两千多batch_size之后报错,大佬们帮忙看看。
    C++中的单例模式
  • 原文地址:https://blog.csdn.net/weixin_51309151/article/details/126897742