博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hive学习:Hive连接JOIN用例详解
阅读量:5238 次
发布时间:2019-06-14

本文共 1559 字,大约阅读时间需要 5 分钟。

1 准备数据:

1.1 t_1

01  张三02  李四03  王五04  马六05  小七06  二狗

1.2 t_2

01  1103  3304  4406  6607  7708  88

1.3 t_3

01  男02  男03  女04  男05  女06  女07  男08  X

2 创建表:t_1,t_2,t_3

create table if not exists t_1(id string,name string)row format delimited fields terminated by '\t';create table if not exists t_2(id string,score string)row format delimited fields terminated by '\t';create table if not exists t_3(id string,sex string)row format delimited fields terminated by '\t';

3 加载数据

load data local inpath '/root/tmp/t_1' into table t_1;load data local inpath '/root/tmp/t_2' into table t_2;load data local inpath '/root/tmp/t_3' into table t_3;

4 笛卡尔积:Join

select * from t_1 join t_2;等价于:select * from t_1,t_2;

1518378-20190104223248702-1687446924.png

5 等值连接:Join ... on(查交集)

select * from t_1 t1 join t_2 t2 on t1.id=t2.id;

1518378-20190104223306364-1905902447.png

图解原理:

1518378-20190104223323040-711609811.png

5 左连接: left join ... on ...

左连接是显示左边的表的所有数据,如果有右边表的数据与之对应,则显示;否则显示null

select * from t_1 t1 left join t_2 t2 on t1.id=t2.id;

1518378-20190104223333494-599403611.png

图解原理:

1518378-20190104223341870-1547850379.png

6 右连接: right join ... on ...

与左连接类似,右连接是显示右边的表的所有数据,如果有左边表的数据与之对应,则显示;否则显示null

select * from t_1 t1 right join t_2 t2 on t1.id=t2.id;

1518378-20190104223350149-2022917881.png

图解原理:

1518378-20190104223400316-306073091.png

7 全连接:full outer join ... on

相当于t_1和t_2的数据都显示,如果没有对应的数据,则显示Null.

select * from t_1 t1 full outer join t_2 t2 on t1.id=t2.id;

1518378-20190104223409224-465743177.png

图解原理:

1518378-20190104223418346-217552613.png

8 左半连接:semi join

semi join仅会显示t_1的数据,即左边表的数据。效率比左连接快,因为它会先拿到t_1的数据,然后在t_2中查找,只要查找到结果立马就返回t_1的数据。

select * from t_1 t1 left semi join t_2 t2 on t1.id=t2.id;

1518378-20190104223427940-1316432692.png

图解原理:

1518378-20190104223440126-1690697038.png

9 用单次MapReduce实现连接:

如果在连接中使用了公共键,Hive还支持通过一次MapReduce来连接多个表。

select t1.*,t3.sex,t2.score from t_1 t1 join t_3 t3 on t1.id=t3.id join t_2 t2 on t2.id=t1.id;

1518378-20190104223449121-1495137448.png

转载于:https://www.cnblogs.com/lingchen-liang/p/10222889.html

你可能感兴趣的文章
数据结构 排序和查找
查看>>
Vue(一)
查看>>
Flex 弹性盒基本语法
查看>>
SQL-语句实现九九乘法表
查看>>
微信小程序设置域名、不校验域名
查看>>
nodeJs实现文件上传,下载,删除
查看>>
S.O.L.I.D.类设计原则
查看>>
分享android开发过程中用到的一些开源框架
查看>>
批处理文件语法
查看>>
HTML5 Canvas Text实例1
查看>>
iOS - UITableViewCell Custom Selection Style Color
查看>>
javascript中的数组操作
查看>>
透析CCNP路由知识五大技术4
查看>>
UCenter创始人密码正确但是登录不了
查看>>
洛谷P1091 合唱队形
查看>>
List-ArrayList 使用
查看>>
Linux Tomcat 简介
查看>>
$m$ 整除 $10^k$ 的一个充分条件
查看>>
[物理学与PDEs]第3章第2节 磁流体力学方程组 2.4 不可压情形的磁流体力学方程组...
查看>>
[物理学与PDEs]第4章习题3 一维理想反应流体力学方程组的数学结构
查看>>