Hive学习

架构原理

https://blog.csdn.net/qq_44766883/article/details/109162881 Hive学习和实战
https://blog.csdn.net/xzg1109/article/details/78919667 hive表信息查询、查看表结构、表操作等

1.安装并配置HDFS为伪分布式系统:所有角色都在一个节点上 //DONE
2.安装并配置Hive //DONE
3.学习Hive
分区表:
https://dongkelun.com/2018/12/02/hivePartitionTable/ Hive分区表学习总结
https://www.cnblogs.com/qi-yuan-008/p/11878426.html hive之建立分区表和分区
https://blog.csdn.net/qq_27252133/article/details/95591072 HIVE修改列顺序中的坑

Hive CLI

Hive命令行客户端。

Hive SQL

https://zhuanlan.zhihu.com/p/254648611 HiveSQL中的表连接
https://zhuanlan.zhihu.com/p/380533751 4.14 hive里group by 和partition by(窗口函数的)的区别
https://blog.csdn.net/qq_37325859/article/details/78222712 hive开窗函数over(partition by ……)用法

https://blog.csdn.net/qq_34897849/article/details/102691128 hive中三种去重的方法
https://www.cnblogs.com/zzhangyuhang/p/8778952.html 【Hive】数据去重

https://blog.csdn.net/u013385925/article/details/77484147 HIVE group by 和count(distinct)进行对比
https://blog.csdn.net/oracle8090/article/details/80760233 hive count(distinct) 原理
https://datavalley.github.io/2016/02/15/Hive之COUNT-DISTINCT优化 Hive之COUNT DISTINCT优化

Hive中的表连接

表连接时必须重命名。

一、内连接
符号:join 或 inner join
作用:返回两个表在连接条件上的交集
先去重,再连接执行效率会高。

二、左连接
符号:left join
作用:返回连接条件上在表1而不在表2的数据

三、右连接
可以转换为左连接,很少使用。

四、全连接
符号:full join
作用:返回满足连接条件的2个表中所有数据
注意: full join只能直接作用于2个表,不能简单地对多个表执行full join操作,比如:

1
2
3
4
5
6
7
select * from a
full join b
on a.列=b.列
full join c
on a.列=c.列
full join d
on a.列=d.列

这样的写法是错误的,导致最终的统计结果不正确。
有2种解决办法:
第一:如果一定要在多个表上使用full join,但一定要使用嵌套的方式,例如上述例子中的语句应该改写为:

1
2
3
4
5
6
7
8
9
10
11
12
13
select * from
(
select * from
(
select * from a
full join b
on a.列=b.列
) t1
full join c
on t1.列=c.列
) t2
full join d
on t2.列=d.列

显然,这种在多个表上使用full join的嵌套方式非常不友好,不利用理解和调试。

第二:使用UNION ALL(需要使用GROUP BY对结果去重)和LEFT JOIN改写在多个表上使用FULL JOIN。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
select 列 from (
select 列 from (
select a.列 from
(select a.列 from a) t1
UNION ALL
(select b.列 from b) t2
UNION ALL
(select c.列 from c) t3
UNION ALL
(select d.列 from d) t4
) t
GROUP BY 列
) tt
LEFT JOIN (
select a.列 from a
) ON tt.列=a.列
LEFT JOIN (
select b.列 from b
) ON tt.列=b.列
LEFT JOIN (
select c.列 from c
) ON tt.列=c.列
LEFT JOIN (
select d.列 from d
) ON tt.列=d.列

参考:https://blog.csdn.net/BIT_666/article/details/110431193 Hive Full Join多个表与Union All多个表

五、表拼接
符号:union,union all
作用:将表上下拼接
注意:
(1)字段名称必须一致
(2)字段顺序必须一致
(3)没有连接条件
(4)对union之后的表进行重命名
union和union all的区别;
union会对结果去重并且按字段排序,union all只是简单拼接,不去重不排序。

将业务需求翻译成使用适当表连接方式的SQL语句。

【参考】
https://developer.aliyun.com/article/608336 Hive 工作原理详解
https://blog.51cto.com/u_10312890/2468492 12、Hive核心概念与原理详解
https://blog.csdn.net/ForgetThatNight/article/details/79632364 Hive原理详解
https://seawaylee.github.io/2017/07/02/大数据/Hive/Hive学习笔记(一)-%20详解Hive/ Hive学习笔记(一)- 详解Hive
https://www.cnblogs.com/jiangbei/p/8465689.html 大数据入门第十一天——hive详解(一)入门与安装
https://www.jianshu.com/p/a16ab594d225 Hive详解
https://juejin.cn/post/6844904005756272654 Hive 基础教程
https://www.yiibai.com/hive Hive教程

https://blog.csdn.net/hguisu/article/details/7256833 Hadoop Hive sql语法详解
https://wp.huangshiyang.com/hadoop-hive-sql语法详解 Hadoop Hive sql语法详解
https://segmentfault.com/a/1190000039760261 一文学完所有的Hive Sql(两万字最全详解)
https://www.jianshu.com/p/05d4894b46c0 Hive Sql教程
https://www.gairuo.com/p/hive-sql-tutorial Hive SQL 教程
https://blog.csdn.net/u010711495/article/details/114000746 Hive date_format函数入门
https://blog.csdn.net/zhang197093/article/details/120874962 Hive SQL查询left join下on条件和where条件区别
https://www.cnblogs.com/Allen-rg/p/10385189.html hive SQL 字母大小写转换
https://blog.csdn.net/zengmingen/article/details/78592708 Hivesql里的limit使用误区
https://blog.csdn.net/smile0198/article/details/38665321 hive 各种 join (left outer join、join、full outer join)
https://www.cnblogs.com/Allen-rg/p/10712833.html hive SQL COALESCE 函数

http://yulin1995.com/index.php/2020/10/10/hive-explain-执行计划详解/ Hive explain 执行计划详解