博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
左半开连接(left semi join)
阅读量:4159 次
发布时间:2019-05-26

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

1.left semi join 子句中右边的表只能在 ON 子句中设置过滤条件,在 WHERE 子句、SELECT 子句或其他地方过滤都不行。

例子:

 select * from person g left semi join exptest t on g.name = t.name where g.name='wang'; --语句可以查询,因为where g.name='wang'; 用到时左表。

select * from person g left semi join exptest t on g.name = t.name where t.name='wang';--语句报错,因为 t.name='wang';是右边表

FAILED: Execution Error, return code 130 from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask

2.对待右表中重复key的处理方式差异:因为 left semi join 是 in(keySet) 的关系,遇到右表重复记录,左表会跳过,而 join on 则会一直遍历。最后的结果是这会造成性能,以及 join 结果上的差异。

例子:

person 表的数据:

1 wang ["lol","data2"]

2 tom ["跳槽"]

3 Jack ["得分","阿斯蒂芬","大师傅"]

4 jim ["登陆","饿啊分"]

exptest表的数据

hive (hive)> select * from exptest;

OK

exptest.id exptest.name exptest.likes

1 wang ["lol","data2"]

1 wang ["lol","data2"]

select * from person g  join exptest t on g.name = t.name;

查询结果:

 

select * from person g left semi join exptest t on g.name = t.name;

查询结果:

 

(4)left semi join 中最后 select 的结果只许出现左表,因为右表只有 join key 参与关联计算了,而 join on 默认是整个关系模型都参与计算了。​​​​​​​

select * from person g left semi join exptest t on g.name = t.name;

查询结果:

 

转载地址:http://bgjxi.baihongyu.com/

你可能感兴趣的文章
facebook库runtime.js
查看>>
js报错显示subString/subStr is not a function
查看>>
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>
初始化VUE项目报错
查看>>
vue项目使用安装sass
查看>>
在osg场景中使用GLSL语言——一个例子
查看>>
laravel 修改api返回默认的异常处理
查看>>
laravel事务
查看>>
【JavaScript 教程】浏览器—History 对象
查看>>
这才是学习Vite2的正确姿势!
查看>>
7 个适用于所有前端开发人员的很棒API,你需要了解一下
查看>>
隐藏搜索框:CSS 动画正反向序列
查看>>
【视频教程】Javascript ES6 教程27—ES6 构建一个Promise
查看>>
【5分钟代码练习】01—导航栏鼠标悬停效果的实现
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(中)
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(下)
查看>>
Flex 布局教程:语法篇
查看>>
年薪50万+的90后程序员都经历了什么?
查看>>
2019年哪些外快收入可达到2万以上?
查看>>
【JavaScript 教程】标准库—Date 对象
查看>>