美文网首页
2020-03-23:hive的left semi join 例

2020-03-23:hive的left semi join 例

作者: 烂笔头2020 | 来源:发表于2020-03-23 12:01 被阅读0次

因为今天工作比较少,在看一些代码脚本,发现了一些不得了的东西,然后就来关注了简书,自己也开始觉得简书好像还不错,可以在这里记录一下自己所学的东西,俗话说好记性不如烂笔头,要学的东西还有很多,即使工作将近一年了,但是感觉自己还是有很多东西不会,相对于人家工作两年的时间就已经会这么多不得了的东西了,自己就莫名的觉得自己太菜鸡了,所以今天开始要每天都学习一些,然后在这里做下记录。

——SQL中 where in 的用法

首先我们要知道where是什么:一个判断符。在SQL操作中,控制只选择指定的行。

in的其实归类于特殊的比较运算符 

expr1 in(expr2,expr3,expr4,…)表示expr1等于后面括号里面的任意一个表达式的值

下面在sql中做举例:查询id在(1,2,3)内的数据行,得到下面的结果:

(其中如果where的字段为字符串类型,in后面的的值需要加上引号)


——hive中left semi join相当于SQL中的where in语句

left semi join(左半连接)是 in/exsits 子查询的一种更高效的实现

示例:

select A.key,A.value from A where A.key in (select B.key from A);

可以改写成:

select A.key,A.value from A left semi join B on (A.key=B.key);

left semi join的一些特点:(根据网上参考的总结,后续看到会继续补充)

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

2、left semi join 是只传递表的 join key 给 map 阶段,因此left semi join 中最后 select 的结果只许出现左表。

3、因为 left semi join 是 in(keySet) 的关系,遇到右表重复记录,左表会跳过,而 join 则会一直遍历。这就导致右表有重复值得情况下 left semi join 只产生一条,join 会产生多条,也会导致 left semi join 的性能更高。

比如以下A表和B表进行 join 或 left semi join,然后 select 出所有字段,结果区别如下:

注:蓝色叉的那一列实际是不存在left semi join中的,因为最后 select 的结果只许出现左表。

ps:

下次在hive用到join联表的时候换成 left semi join 语句,可以对比一下两个语句的区别

相关文章

  • 2020-03-23:hive的left semi join 例

    因为今天工作比较少,在看一些代码脚本,发现了一些不得了的东西,然后就来关注了简书,自己也开始觉得简书好像还不错,可...

  • hive semi and having 例子

    hive中left semi join相当于SQL中的where in语句 having语句用于在group by...

  • Hive 的 left semi join 讲解

    介绍 LEFT SEMI JOIN (左半连接)是 IN/EXISTS 子查询的一种更高效的实现。 示例 可以改写...

  • Hive碎碎念(7):高端函数

    转载请在文章起始处注明出处,谢谢。 1、 left semi joinLEFT SEMI JOIN (左半连接)是...

  • SEMI JOIN

    left semi join 的结果只返回左表的列,右表只能放在 join condition 中用于过滤判断,可...

  • Hive-SQL优化与细节

    持续记录,主要涉及设置相关。 常规 in/exist 使用 left semi join 替代 设计合理分层数仓,...

  • Semijoin 半连接

    什么是semi-join? 所谓的semi-join是指semi-join子查询。 当一张表在另一张表找到匹配的记...

  • left join on and where 和 left jo

    left join on and 与 left join on where的区别 left join on and...

  • 查询组合

    join 和using clickhouse 还有 SEMI JOIN,ANTI JOIN,ANY JOIN重复...

  • Left Join / Right Join /inner jo

    Left Join / Right Join /inner join相关 Left Join select * f...

网友评论

      本文标题:2020-03-23:hive的left semi join 例

      本文链接:https://www.haomeiwen.com/subject/hpniyhtx.html