3.Hive基础命令练习

news/2024/12/2 18:43:08/

创建表格如下:

部门表:

create table if not exists dept(deptno int,    -- 部门编号dname string,  -- 部门名称loc int        -- 部门位置
)
row format delimited fields terminated by '\t';

员工表:

create table if not exists emp(empno int,      -- 员工编号ename string,   -- 员工姓名job string,     -- 员工岗位(大数据工程师、前端工程师、java工程师)sal double,     -- 员工薪资deptno int      -- 部门编号
)
row format delimited fields terminated by '\t';

 将本地数据导入表格:

-- 导入数据
load data local inpath '/opt/module/hive/datas/dept.txt' into table dept;
load data local inpath '/opt/module/hive/datas/emp.txt' into table emp;

1.基本查询

起别名(as可省略):

select ename as name, sal salary from emp;

运算符:比如将查询的工资提升10元

select ename, sal + 10 from emp;

 常用函数:

select count(1) cnt,               -- 数据库表的行数,等于count(*)sum(sal) sum_sal,           -- 求和avg(sal) avg_sal,           -- 求平均min(sal) min_sal,           -- 最小值max(sal) max_sal            -- 最大值
from emp;

 ps.count(*)返回的是数据表的行数,而count(sal)返回的是行数-null的个数

ps.当sum/avg/min/max()的数据中存在null,会自动把null忽略

查询工资在800-1000的人:

select ename from emp where sal between 800 and 1000; //[800,1000]左闭右闭
select enmae from emp where sal>=800 and sal<=1000;

工资不在800-1000的人: 

select ename from emp where sal not between 800 and 1000;
select enmae from emp where not sal>=800 and sal<=1000;

limit:

-- 显示前5
select ename from emp limit 5;
-- 显示2-5名
select ename from emp limit 1,4;

模糊查询:

查询以张开头的人

-- 通配符
select * from emp where ename like "张%";

2.分组与过滤(group by & having)

ps.where只能筛选原始数据,而having可以筛选group by后的数据

查询各个部门的平均工资:

select deptno ,avg(sal) avg_sal from emp 
group by deptno;

查询平均工资大于2000的部门和其平均工资

select deptno, avg(sal) avg_sal from emp 
group by deptno 
having avg_sal>2000;

3.连接        

两表连接(默认就是内连接)

select emp.ename, dept.dname 
from emp inner join dept on emp.deptno = dept.deptno

ps.连接相当于把两张表左右拼接到了一起,拼接的条件就在on后面       

 多表连接:

select e.ename,d.dname,l.loc_name
from emp eright join dept d on e.deptno = d.deptnoleft join location l on d.loc = l.loc;

4.全局排序

按照工资从高到低排序

select * from emp order by sal desc;

先按照部门编号升序排序,相同部门按照工资降序排序 

select * from emp order by deptno asc, sal desc;

按照部门平均工资降序给部门排序 

select deptno , avg(sal) avg_sal from dept group by deptno order by avg_sal desc;

为避免排序返回的结果太多,一般结合limit使用

 例:求薪资最高的5组数据

select * from emp order by sal desc limit 5;

内部逻辑:每个mapTask求出各自前五,然后reduceTask汇总mapTask,求出全局前五 

5.分区排序(用的少)

首先设置reduce的个数为3:

复习如何分三个区:除以三余数分别为0,1,2.

set mapreduce.job.reduces=3;

 将empno按照hash值分为3个区,区内按照工资的降序排序

select * from emp distribute by empno sort by sal desc;

cluster by:当distribute by和sort by字段相同且为升序时,可以用cluster by代替

select * from emp distribute by empno sort by empno;
等价于
select * from emp cluster by empno;

6.练习题

       编写一个SQL查询来报告 Person表中每个人的姓、名、城市和州。如果personId 的地址不在Address表中,则报告为空null

select firstname,lastname,city,state
from  person P 
left join address a on p.personId = a.personId;

解释:表格中的managerID对应的就是这个员工的经理的ID

查询收入比经理高的员工:

 select e.name   // 查询条件都是放到最后写(这与sql的执行顺序有关)from emplyee ejoin emplyee m on e.managerId = m.idwhere e.salary >= m.salary

 编写一个SQL查询,查找Person表中所有重复的电子邮箱

select  email
from Person group by email 
having count(1)>1;

编写一个SQL查询,找出所有从不订购任何东西的客户

select c.name
from Customers c 
left join Orders o  on c.id = o.customerId   //要保证所有customer留下来
where o.id is null; 

http://www.ppmy.cn/news/63556.html

相关文章

实验四 文件系统原理与模拟实现

实验四 文件系统原理与模拟实现 代码资源地址 Java实现的混合索引和成组链接法算法资源-CSDN文库 实验目的&#xff1a; 了解操作系统中文件系统的结构和管理过程&#xff0c;掌握经典的算法&#xff1a;混合索引与成组链接法等方法。 实验内容&#xff1a; 编程模拟实现混合…

基于MATLAB的无人机遥感数据预处理与农林植被性状估算

目录 第一章 认识主被动无人机遥感数据 第二章 预处理无人机遥感数据 第三章 定量估算农林植被关键性状 第四章 期刊论文插图精细制作与Appdesigner应用开发 更多模型 在新一轮互联网信息技术大发展的现今&#xff0c;无人机、大数据、人工智能、物联网等新兴技术在各行各…

metaRTC6.0 whip/whep编程指南

概述 WHIP/WHEP都是基于 HTTP 的协议并且是IETF国际标准&#xff0c;国内外一些主流的开源webRTC SFU都开始支持WHIP/WhEP协议。 WHIP: WebRTC-HTTP ingestion protocol (WHIP) WHEP: WebRTC-HTTP egress protocol (WHEP) 下载源码 GitHub - metartc/metaRTC: A cross-pla…

SSM整合详细教学(下)

SSM整合详细教学&#xff08;下&#xff09; 五、SSM整合页面开发1 准备工作2 列表查询功能3 添加功能4 修改功能5 删除功能 六、拦截器1 拦截器简介问题导入1.1 拦截器概念和作用1.2 拦截器和过滤器的区别 2 入门案例问题导入2.1 拦截器代码实现【第一步】定义拦截器【第二步】…

MySQL 索引、事务与存储引擎

----------------------MySQL 索引-------------------------------- 1&#xff0e;索引的概念 ●索引是一个排序的列表&#xff0c;在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址&#xff08;类似于C语言的链表通过指针指向数据记录的内存地址&#xff09;。…

第8章 虚拟主机

第8章 虚拟主机 虚拟主机&#xff0c;就是把一台物理服务器划分成多个“虚拟”的服务器&#xff0c;这样我们的一台物理服务器就可以当做多个服务器来使用&#xff0c;从而可以配置多个网站。 Nginx提供虚拟主机的功能&#xff0c;就是为了让我们不需要安装多个Nginx&#xf…

在CentOS上安装Jenkins并配置Docker

文章目录 步骤1 - 安装Java 11步骤2 - 安装Jenkins步骤3 - 安装Docker步骤4 - 配置Docker Cloud步骤 5 - 验证步骤 6 - 可能会遇到的问题 在本教程中&#xff0c;我们将展示如何在CentOS上安装Jenkins和Docker&#xff0c;并将它们配置在同一台机器上&#xff0c;使Jenkins能够…

cmd@快捷键方式@静默执行命令@修复桌面空白快捷方式图标

文章目录 ref前言快捷方式执行命令行或打开文件eg:直接打开某个文件 创建快捷方式eg:快捷方式运行命令 修复快捷方式图标空白问题逐个修复批量修复一次性操作:逐步操作 执行效果第三方工具修复 ref How can I execute a Windows command line in background? - Super Userstb…