hive学习笔记之六:HiveQL基础

  1. 至此,本次操作所需数据已准备完毕,如下所示:

hive> select * from address;

OK

1 guangdong guangzhou

2 guangdong shenzhen

3 shanxi xian

4 shanxi hanzhong

6 jiangshu nanjing

Time taken: 0.043 seconds, Fetched: 5 row(s)

hive> select * from student;

OK

tom 11 1

jerry 12 2

mike 13 3

john 14 4

mary 15 5

Time taken: 0.068 seconds, Fetched: 5 row(s)

  • 开始体验HiveQL

select和where

最普通的带条件查询:

hive> select * from address where city like ‘%a%’;

OK

1 guangdong guangzhou

3 shanxi xian

4 shanxi hanzhong

6 jiangshu nanjing

Time taken: 0.128 seconds, Fetched: 4 row(s)

group by

  1. 按province字段分组:

select province, count(*) from address group by province;

该查询会触发MR计算,结果如下:

Total MapReduce CPU Time Spent: 1 seconds 910 msec

OK

guangdong 2

jiangshu 1

shanxi 2

Time taken: 17.847 seconds, Fetched: 3 row(s)

  1. 试试嵌套查询,内部是查出city字段带有a字母的记录,然后将这些记录按照province字段分组:

select t.province, count(*) from (

select * from address where city like ‘%a%’

) t

group by t.province;

结果如下:

Total MapReduce CPU Time Spent: 1 seconds 760 msec

OK

guangdong 1

jiangshu 1

shanxi 2

Time taken: 18.036 seconds, Fetched: 3 row(s)

having

  • 前面的嵌套查询,结果有两个省:guangdong和shanxi,如果再加个条件:只显示城市数量大于1的省,首先想到的是再加一层嵌套:

select t1.* from (

select t.province, count(*) as cnt from (

select * from address where city like ‘%a%’

) t

group by t.province) t1

where t1.cnt>1;

结果如下,可见只有shanxi被显示了:

Total MapReduce CPU Time Spent: 2 seconds 250 msec

OK

shanxi 2

Time taken: 20.067 seconds, Fetched: 1 row(s)

  • 对于上述SQL,可以用having语法进行分组筛选,得到同样数据:

select t.province, count(*) as cnt from (

select * from address where city like ‘%a%’

) t

group by t.province having cnt>1;

order by

  • 对分组结果做排序:

select t.province, count(*) as cnt from (

select * from address where city like ‘%a%’

) t

group by t.province order by cnt;

会触发MR,结果如下:

Total MapReduce CPU Time Spent: 3 seconds 50 msec

OK

jiangshu 1

guangdong 1

shanxi 2

Time taken: 40.315 seconds, Fetched: 3 row(s)

  • order by对于的实现,是在最后通过一个reducer进行全部排序,该过程可能耗时较长,针对这种情况,hive提供了sort by,功能与order by一样,但是会在每个reducer中进行排序,这样最终做排序的时候效率就会提升;

  • 要注意的是:sort by解决的问题是最终结果排序的效率,因此数据量不大时,排序不是瓶颈,此时使用sort by也不会加快整体速度;

内连接(inner join)

  • 内连接用join简写,与连接标准匹配的数据在两张表中都存在,才会保留:

select

s.name, s.age,

a.province, a.city

from

student s

inner join

address a

on

s.addressid=a.addressid;

结果如下:

Total MapReduce CPU Time Spent: 1 seconds 20 msec

OK

tom 11 guangdong guangzhou

jerry 12 guangdong shenzhen

mike 13 shanxi xian

john 14 shanxi hanzhong

Time taken: 17.294 seconds, Fetched: 4 row(s)

自然连接(natural join)

  • 自然连接是在两张表中寻找数据类型和列明都相同的字段,并自动连接起来:

select name, age, province, city from student natural join address;

结果如下,可见不会根据student表的addressid字段值去address查找记录,而是将addrerss的记录全部连接一次:

Total MapReduce CPU Time Spent: 940 msec

OK

tom 11 guangdong guangzhou

jerry 12 guangdong guangzhou

mike 13 guangdong guangzhou

john 14 guangdong guangzhou

mary 15 guangdong guangzhou

tom 11 guangdong shenzhen

jerry 12 guangdong shenzhen

mike 13 guangdong shenzhen

john 14 guangdong shenzhen

mary 15 guangdong shenzhen

tom 11 shanxi xian

jerry 12 shanxi xian

mike 13 shanxi xian

john 14 shanxi xian

mary 15 shanxi xian

tom 11 shanxi hanzhong

jerry 12 shanxi hanzhong

mike 13 shanxi hanzhong

john 14 shanxi hanzhong

mary 15 shanxi hanzhong

tom 11 jiangshu nanjing

jerry 12 jiangshu nanjing

mike 13 jiangshu nanjing

john 14 jiangshu nanjing

mary 15 jiangshu nanjing

Time taken: 18.525 seconds, Fetched: 25 row(s)

左外连接(left outer join)

  • 以连接中的左表为主:

select

s.name, s.age, s.addressid,

a.province, a.city

from

student s

left outer join

address a

on

s.addressid=a.addressid;

结果如下,可见name=mary的记录,addressid等于5,在address中不存在addressid等于5的记录,因此province和city字段都展示了NULL,而在前面使用inner join时,结果中没有这条记录:

Total MapReduce CPU Time Spent: 950 msec

OK

tom 11 1 guangdong guangzhou

jerry 12 2 guangdong shenzhen

mike 13 3 shanxi xian

john 14 4 shanxi hanzhong

mary 15 5 NULL NULL

Time taken: 18.442 seconds, Fetched: 5 row(s)

右外连接(right outer join)

和左连接类似,只不过是以右表为主,语法是right outer join:

select

s.name, s.age, s.addressid,

a.province, a.city

from

student s

right outer join

address a

on

s.addressid=a.addressid;

结果如下,可见city=nanjing的记录,在student表中没有一条记录与之关联,因此结果中展示了address的字段,而student的字段为NULL:

Total MapReduce CPU Time Spent: 970 msec

OK

tom 11 1 guangdong guangzhou

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)

总结

虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。

上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料

有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
你有帮助,可以扫码获取!!(备注:Java)**

[外链图片转存中…(img-NaLWmVjz-1713855499019)]

总结

虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。

[外链图片转存中…(img-IW6m8uja-1713855499019)]

[外链图片转存中…(img-koNQdfAy-1713855499019)]

上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料

有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 26
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值