写点什么

hive 学习笔记之六:HiveQL 基础,redis 和 mongodb 区别面试

  • 2022 年 4 月 22 日
  • 本文字数:2340 字

    阅读完需:约 8 分钟

  • 开始体验 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 和 shan Java 开源项目【ali1024.coding.net/public/P7/Java/git】 xi,如果再加个条件:只显示城市数量大于 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 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 , 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)

最后

为什么我不完全主张自学?①平台上的大牛基本上都有很多年的工作经验了,你有没有想过之前行业的门槛是什么样的,现在行业门槛是什么样的?以前企业对于程序员能力要求没有这么高,甚至十多年前你只要会写个“Hello World”,你都可以入门这个行业,所以以前要入门是完全可以入门的。②现在也有一些优秀的年轻大牛,他们或许也是自学成才,但是他们一定是具备优秀的学习能力,优秀的自我管理能力(时间管理,静心坚持等方面)以及善于发现问题并总结问题。如果说你认为你的目标十分明确,能做到第②点所说的几个点,以目前的市场来看,你才真正的适合去自学。


除此之外,对于绝大部分人来说,报班一定是最好的一种快速成长的方式。但是有个问题,现在市场上的培训机构质量参差不齐,如果你没有找准一个好的培训班,完全是浪费精力,时间以及金钱,这个需要自己去甄别选择。


我个人建议线上比线下的性价比更高,线下培训价格基本上没 2W 是下不来的,线上教育现在比较成熟了,此次疫情期间,学生基本上都感受过线上的学习模式。相比线下而言,线上的优势以我的了解主要是以下几个方面:①价格:线上的价格基本上是线下的一半;②老师:相对而言线上教育的师资力量比线下更强大也更加丰富,资源更好协调;③时间:学习时间相对而言更自由,不用裸辞学习,适合边学边工作,降低生活压力;④课程:从课程内容来说,确实要比线下讲的更加深入。


应该学哪些技术才能达到企业的要求?(下图总结)




用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
hive学习笔记之六:HiveQL基础,redis和mongodb区别面试_Java_爱好编程进阶_InfoQ写作社区