大数据从入门到实战 - Hive基本查询操作(一)


叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧!
在这里插入图片描述

一、关于此次实践

1、实战简介

本实训主要介绍了hive的一些简单基本操作,比如where、group by、join等。

2、全部任务

在这里插入图片描述

二、实践详解

1、第1关:where操作

任务描述

本关任务:使用where和like求出编程要求中所给需求。

相关知识

where
将不满足条件的行过滤,在SQL语句中执行顺序优先于group by。

having
对where的一个补充,过滤成组后的数据,执行顺序后于group by。

like
like 操作符用于在WHERE子句中搜索列中的指定模式。%代表任意多个字符。

假设存在student表:

nameage
bob22
cindy27
herry26
可以使用where过滤查询出成绩大于25岁的学生名字。
select name from student where age>25;

输出:

cindy
herry

在这里插入图片描述
在这里插入图片描述
本地部分文件内容:

本科,北京联通支付有限公司,大数据开发工程师,10000,530,熟练使用hive等,1-3年
专科,北京联科数创科技有限公司,大数据分析师,8000,530,熟练使用MySQL等数据库,1-3年`
本科,湖南智湘赢播网络技术有限公司,大数据开发工程师,16000,749,熟练使用spark等,3-5

在这里插入图片描述

----------禁止修改----------
create database if not exists db1;
use db1;

create table if not exists table1(
eduLevel_name string comment '学历',
company_name string comment '公司名',
jobName string comment '职位名称',
salary int comment '薪资',
city_code int comment '城市编码',
responsibility string comment '岗位职责',
workingExp string comment '工作经验'
)
row format delimited fields terminated by ','
lines terminated by '\n'
stored as textfile;
truncate table table1;
load data local inpath '/root/aaa.txt' into table table1;
----------禁止修改----------

----------Begin----------
select workingExp,company_name from table1 where responsibility like '%hive%' and salary > '8000';
----------End----------

在这里插入图片描述

2、第2关:group by操作

任务描述

本关任务:实现不同工作年限的平均工资需求。

相关知识

group by
group by表示按照某些字段的值进行分组,有相同的值放到一起,需要注意的是select后面的非聚合列必须出现在group by中;

假设存在st表:

citysalaryjob
长沙7000大数据开发
北京10000大数据开发
广州11000大数据开发
长沙7000大数据开发

可以使用group by求出不同省份的平均工资:

select city,avg(salary)from st group by city;

输出:

长沙 7000
北京 10000
广州 11000

在这里插入图片描述
在这里插入图片描述
本地部分文件内容:

本科,北京联通支付有限公司,大数据开发工程师,10000,530,熟练使用hive等,1-3年
专科,北京联科数创科技有限公司,大数据分析师,8000,530,熟练使用MySQL等数据库,1-3年
本科,湖南智湘赢播网络技术有限公司,大数据开发工程师,16000,749,熟练使用spark等,3-5

在这里插入图片描述

----------禁止修改----------
create database if not exists db1;
use db1;

create table if not exists table1(
eduLevel_name string comment '学历',
company_name string comment '公司名',
jobName string comment '职位名称',
salary int comment '薪资',
city_code int comment '城市编码',
responsibility string comment '岗位职责',
workingExp string comment '工作经验'
)
row format delimited fields terminated by ','
lines terminated by '\n'
stored as textfile;
truncate table table1;
load data local inpath '/root/t1.txt' into table table1;
----------禁止修改----------

----------Begin----------
select avg(salary) as avgsalary,workingExp from table1 group by workingExp having avgsalary > 10000;
----------End----------

评测
在这里插入图片描述

3、第3关:join操作

任务描述

本关任务:通过关联求出每个城市名的平均工资。

相关知识

Hive只支持等值连接,即ON子句中只能使用等号连接

假设存在表a:

idname
1bob
2lily
3herry
表b:
cidscore
180
290
560
  • 内连接(JOIN)
    内连接指的是把符合两边连接条件的数据查询出来:
select a.name,b.score from a join b on a.id=b.cid;

输出结果:

bob 80
lily 90
  • 左外连接(LEFT OUTER JOIN)
    左表全部查询出来,右表不符合连接条件的显示为空:
select a.name,b.score from a left outer join b on a.id=b.cid;

输出结果:

bob   80
lily   90
herry  null
  • 右外连接(RIGHT OUTER JOIN)
    右表全部查询出来,左表不符合连接条件的显示为空:
select a.name,b.score from a right outer join b on a.id=b.cid;

输出结果:

bob   80
lily 90
null  60
  • 全外连接(FULL OUTER JOIN)
    左右表符合连接条件和不符合连接条件的都查出来,不符合的显示空:
select a.name,b.score from a full outer join b on  a.id=b.cid;

输出结果:

bob     80
lily    90
herry   null
null    60
  • 左半开连接(LEFT SEMI JOIN)
    查询出满足连接条件的左边表记录,需要注意的是select和where语句中都不能使用右表的字段。

Hive不支持右半开连接:

select a.name from a LEFT SEMI JOIN  b on a.id=b.cid;

输出结果:

bob
lily

在这里插入图片描述
table1本地部分文件内容:

本科,北京联通支付有限公司,大数据开发工程师,10000,530,熟练使用hive等,1-3年
专科,北京联科数创科技有限公司,大数据分析师,8000,530,熟练使用MySQL等数据库,1-3年
本科,湖南智湘赢播网络技术有限公司,大数据开发工程师,16000,749,熟练使用spark等,3-5

在这里插入图片描述

----------禁止修改----------
create database if not exists db1;
use db1;

create table if not exists table1(
eduLevel_name string comment '学历',
company_name string comment '公司名',
jobName string comment '职位名称',
salary int comment '薪资',
city_code int comment '城市编码',
responsibility string comment '岗位职责',
workingExp string comment '工作经验'
)
row format delimited fields terminated by ','
lines terminated by '\n'
stored as textfile;
truncate table table1;
load data local inpath '/root/t2.txt' into table table1;

create table if not exists table2(
city_code int comment '城市编码',
city_name string comment '城市名'
)
row format delimited fields terminated by ','
lines terminated by '\n'
stored as textfile;
truncate table table2;
load data local inpath '/root/t22.txt' into table table2;
----------禁止修改----------

----------Begin----------
select avg(table1.salary),table2.city_name from table1 right outer join table2 on table1.city_code=table2.city_code group by table2.city_name ;
----------End----------

评测
在这里插入图片描述

Ending!
更多课程知识学习记录随后再来吧!

就酱,嘎啦!

在这里插入图片描述

注:
人生在勤,不索何获。

  • 26
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
接着上一篇文章,我们来继续学习Hive基本查询操作。 1. 分组查询 分组查询是指将表中的数据按照某个字段进行分组,然后对每个组进行计算,例如求和、计数、平均值等。语法如下: ``` SELECT column_name, aggregate_function(column_name) FROM table_name GROUP BY column_name; ``` 其中,aggregate_function可以是COUNT、SUM、AVG等聚合函数。 例如,我们有一个学生表student,包含学生姓名和年龄两个字段,需要按照年龄进行分组,并统计每个年龄段的人数,可以使用如下语句: ``` SELECT age, COUNT(*) as count FROM student GROUP BY age; ``` 2. 排序查询 排序查询是指将表中的数据按照某个字段进行排序,可以是升序或降序。语法如下: ``` SELECT column1, column2, ... FROM table_name ORDER BY column_name ASC|DESC; ``` 其中,ASC表示升序,DESC表示降序。 例如,我们需要按照学生的年龄进行降序排列,可以使用如下语句: ``` SELECT name, age FROM student ORDER BY age DESC; ``` 3. 连接查询 连接查询是指将两个或多个表中的数据按照某个字段进行连接,形成一个新的表。语法如下: ``` SELECT column_name(s) FROM table1 JOIN table2 ON table1.column_name=table2.column_name; ``` 其中,JOIN表示连接操作,ON后面是连接的条件。 例如,我们有两个表student和score,需要按照学生姓名将这两个表连接起来,查询每个学生的成绩,可以使用如下语句: ``` SELECT name, score FROM student JOIN score ON student.id=score.id; ``` 以上就是Hive基本查询操作的介绍,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

发芽ing的小啊呜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值