HIVE 中内连接(JOIN ON) 与 LEFT SEMI JOIN 分析

【Hive】left semi join(exists、in)和 left join 区别 left semi join 和 left join 区别对比执行计划小结 对比 a表和b表通过user_id关联 a表数据 select * from wedw_dw.t_user; b表数据 select * from wedw_dw.t_order; left join select * from wedw_dw.t_user as t1 left join wedw_dw.t_order as t2 on t1.user_id = t2.user_id; 如图所示:a表和b表匹 阅读详情

由于HIVE中都是等值连接,在JOIN使用的时候,有两种写法在理论上是可以达到相同的效果的。

由于HIVE中都是等值连接,在JOIN使用的时候,有两种写法在理论上是可以达到相同的效果的,但是由于实际情况的不一样,子表中数据的差异导致结果也不太一样。 
  
写法一: 

  1. select  
  2.            a.bucket_id,  
  3.         a.search_type,  
  4.             a.level1,  
  5.         a.name1,  
  6.         a.level2,  
  7.         a.name2,  
  8.         cast((a.alipay_fee) as double) as zhuliu_alipay,  
  9.         cast(0 as double) as total_alipay  
  10.         from tmall_data_fdi_search_zhuliu_alipay_cocerage_bucket_1 a  
  11.      left semi join  
  12.      tmall_data_fdi_dim_main_auc b  
  13.      on (a.level2 = b.cat_id2  
  14.          and a.brand_id = b.brand_id  
  15.        and b.cat_id2 > 0  
  16.          and b.brand_id > 0  
  17.          and b.max_price = 0  
  18.      )  

3121 条 
写法二: 
  1. select  
  2.            a.bucket_id,  
  3.         a.search_type,  
  4.             a.level1,  
  5.         a.name1,  
  6.         a.level2,  
  7.         a.name2,  
  8.         cast((a.alipay_fee) as double) as zhuliu_alipay,  
  9.         cast(0 as double) as total_alipay  
  10.         from tmall_data_fdi_search_zhuliu_alipay_cocerage_bucket_1 a  
  11.      join   tmall_data_fdi_dim_main_auc b  
  12.      on (a.level2 = b.cat_id2  
  13.          and a.brand_id = b.brand_id)  
  14.   where  b.cat_id2 > 0  
  15.          and b.brand_id > 0  
  16.          and b.max_price = 0  


结果是:3142 


这两种写法带来的值居然不是相等的,我一直以为理解这两种方式的写法是一样的, 
但是统计的结果却是不一样的。 
目前还没有搞清楚是什么原因,谁能那个搞清楚呢。 


经过一层一层的查找,发现是由于子表(tmall_data_fdi_dim_main_auc)中存在重复的数据,当使用JOIN ON的时候,A,B表会关联出两条记录,应为ON上的条件符合; 
而是用LEFT SEMI JOIN 当A表中的记录,在B表上产生符合条件之后就返回,不会再继续查找B表记录了,所以如果B表有重复,也不会产生重复的多条记录。 

大多数情况下JOIN ON 和left semi on是对等的,但是在上述情况下会出现重复记录。大家以后可要小心。

HybridCLR热更新全流程实操:用Addressables实现资源+代码双热更(Unity 2021版) 本文详细介绍了在Unity 2021 LTS版本中,如何结合HybridCLR代码热更新与Addressables资源管理系统,实现资源与代码的双热更解决方案。通过环境配置、技术架构设计、实战案例和性能优化,帮助开发者解决中大型项目中的依赖管理和版本协同问题,提升游戏迭代效率。 阅读详情

相关推荐

从原理图到PCB:基于Allegro的8槽PXIe背板高速设计实战

本文详细介绍了基于Allegro软件进行8槽PXIe背板高速设计的完整实战流程。从理解规范、原理图设计、PCB布局规划,到高速PCIe差分对与精密时钟的布线艺术,再到电源与地处理以及最终的设计验证与生产文件输出,系统性地阐述了确保背板信号完整性、电源完整性和系统稳定性的关键技术与工程实践。

weixin_28312391的博客 205

mySQL内连接和外链接(SQL的四种连接)以及Join ON 和Where区别

说道四种连接,就不得不提关于他们在指令操作上的区别 这四种连接都是为了把两个表合成一个表,这两个表呢,其中至少应该有一列的数据属性是相同的,在下面的两个表中,列属性包含id,size,name。那么这两个表共有属性的列是size,那么久针对这一列的属性把两个表合并的操作就是连接 表1:tab1 id size 1 10 2 20 3 30 表2:tab...

qq_40086556的博客 1万+

Zemax实战:20×超高清变焦镜头设计全流程解析(从架构到制造)

本文详细解析了使用Zemax软件设计一款20倍变焦比、恒定F2.8光圈8K超高清镜头的全流程。从应对恒定光圈、宽光谱与8K解析力三大挑战的初始架构规划,到构建多重组态模型、分七阶段进行像差优化与公差分析,最终跨越制造鸿沟,为广播级影视与高精度工业检测应用提供了实战指南。

sun99的博客 552

mysql语法 join on 表示什么

mysql语法 join on 表示什么 今天在写sql语句的时候遇到了join on 这个东西表示的是外连接还是内连接呢?想要验证其实并不难 查询出来的数据量 –129 SELECT count(1) FROM t_budget a left JOIN t_budget_item b on a.budget_id =b.budget_id –117 SELECT count(1) FROM t_budget a JOIN t_budget_item b on a.budget_id =b.budget_

qq_42514371的博客 4644

气象数据收集

国家气象信息中心-中国气象数据网 (cma.cn)国家气象信息中心-中国气象数据网 (cma.cn)预报数据:需要定制,收费10万+路面数据同化系统,实时。

weixin_42209537的博客 3487

湿敏电阻HR202的两种驱动方案实测:IO充放电法 vs. 交流方波ADC法,哪个更适合你?

本文深入评测湿敏电阻HR202的两种驱动方案:IO充放电法和交流方波ADC法。通过原理图分析、精度实测和资源占用对比,揭示交流方波ADC法在精度和稳定性上的优势,特别适合长期监测场景。同时提供IO充放电法在资源受限情况下的应用建议,帮助工程师根据项目需求做出最优选择。

weixin_30421809的博客 466

join on 和 left join on的区别,他们和直接两张表关联查询(使用,连接)的区别

其实,内连接,逗号连接(隐式内连接),对于被连接表要展示的列如果都没有值,并非NULL,是不会作为结果展示出来的。如果关联表要显示的列空值较多,还需要展示出来这种情况就需要注意了。JOIN ON(内连接):适用于需要精确匹配的场景,仅返回两个表中都存在的记录。LEFT JOIN ON(左连接):适用于需要保留左表完整性的场景,即使右表中没有匹配项,左表的记录也会被保留。逗号连接(隐式内连接):功能上等同于内连接,但语法较为隐晦,建议使用 JOIN ON 替代以提高可读性和性能。

日常工作记录,解决实际问题,不成体系。 3176

复习单片机:动态数码管(1 数码管介绍+2 74HC245 和 74HC138 芯片介绍+3 硬件设计+4 软件设计+5 实验现象)

复习单片机:动态数码管(1 数码管介绍+2 74HC245 和 74HC138 芯片介绍+3 硬件设计+4 软件设计+5 实验现象)

wo12369874的博客 1701

HIVE 中内连接(JOIN ON)与LEFT SEMI JOIN查询结果不一致的分析

由于HIVE中都是等值连接,在JOIN使用的时候,有两种写法在理论上是可以达到相同的效果的,但是由于实际情况的不一样,子表中数据的差异导致结果也不太一样。   写法一: Java代码   select             a.bucket_id,          a.search_type,              a.level1,          a.n

zyy160alex5的专栏 1212

突破边缘AI算力瓶颈:YOLOv12模型剪枝与知识蒸馏联合优化全攻略

这套剪枝-蒸馏联合方案的优势在于其系统性和可靠性。它不是单一的技巧,而是一套完整的工程流程,确保了从研发到部署的无缝衔接。

m0_71589036的博客 219

用 SemanticObject 把字段变成可点击链接:Fiori Elements Navigation Using a Link 的工程化实践

SAP Fiori elements 通过 Common.SemanticObject 注解可将字段转为可点击链接,实现应用间跳转。当源字段名与目标属性名不一致时,需使用 Common.SemanticObjectMapping 进行映射。该功能依赖 Fiori Launchpad 的目标映射配置,确保正确解析 semantic object + action 并传递参数。常见误区包括未配置目标映射或字段映射错误,需逐一检查语义标注、intent 解析和参数传递链路。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 272

hive3的join数据错误

我们生产使用的hive3.1.2版本,hadoop也是3版本,用户通过使用hive发现join数据错误。分析SQL发现,当3表(含3表)以上,hive join出来的数据是错误。后来我通过测试发现,不管是left join、inner join还是right join,数据都会出现错误,通过后来的其他测试发现,两个表使用in和exists作为条件查询,出来的数据也是错误的。这是hive3的一个重大bug,使用hive3的小心了。 这个bug纠缠了我好久,后来定位出来hive...

亮仔的专栏 3189

Yocto开发讲解系列 - 总目录

Yocto开发讲解系列总纲Yocto开发专栏前言

fulinux的博客 3万+

HIVE 中内连接(join on )与left semi join 查询结果不一致的分析(两者区别)

一、第一种讲解 LEFT SEMI JOIN (左半连接)是 IN/EXISTS 子查询的一种更高效的实现。 Hive 当前没有实现 IN/EXISTS 子查询,所以可以用LEFT SEMI JOIN 重写你的子查询语句。 示例 可以改写为 特点 1、left semi join 的限制是, JOIN 子句中右边的表只能在 ON 子句中设置过滤条件,在 WHERE 子句、SE...

u011500419的专栏 1248

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

HIVE 中内连接(JOIN ON) 与 LEFT SEMI JOIN 分析

由于Hive中都是等值连接,在JOIN使用的时候,有两种写法在理论上是可以达到相同的效果的。 由于HIVE中都是等值连接,在JOIN使用的时候,有两种写法在理论上是可以达到相同的效果的,但是由于实际情况的不一样,子表中数据的差异导致结果也不太一样。     写法一:  select              a.bucket_id,           a.sear

bbbeoy的专栏 752

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

hive之left semi join(左半连接)使用方法

目录 一、建表数据准备 二、语法 三、left semi join例子 四、left semi join、join、left join的区别 1、left semi join 2、left join 3、join 结语 一、建表数据准备 参考hive之full outer join(全连接)使用方法_IMezZ的博客-优快云博客目录介绍语法例子创建顾客表:customers创建订单表:ordersfull outer join语句 left join + union + right

ImezZ 2万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Hive中HSQL中left semi join和INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN区别

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 sql中的连接查询有inner join(内连接)、left join(左连接)、right join(右连接)、full join(全连接)left semi join(左半连接)五种方式,它们之间其实并没有太大区别,仅仅是...

helloxiaozhe的博客 2万+

​left join 和 left semi join区别 ​

左连接与+号, 就是左边的表数据都要。 select * from a,b where a.id=b.id(+); (+)写在where后面,不能与or/in连用,ui select * from a left join b on a.id=b.id; a里面的数据在b里面没有也要的 ​left join 和 left semi join区别 ​ : left join A表记录全部有,如果B表多行的话,A数据就被重复了一次。 left semi join不重复,...

jnrjian的博客 7802

Hive中LEFT JOIN与LEFT SEMI JOIN的区别与原理详解

Hive中LEFT JOIN和LEFT SEMI JOIN的主要区别在于:LEFT JOIN返回左表所有记录及右表匹配记录(右表无匹配则填充NULL),结果可能包含重复行;LEFT SEMI JOIN仅返回左表中匹配右表的记录(不返回右表列),且自动去重。性能方面,LEFT SEMI JOIN通常更高效,尤其在仅需判断存在性时,它能在Map阶段完成过滤,避免数据膨胀和Reduce阶段开销。建议根据需求选择:需要右表数据时用LEFT JOIN,仅需判断存在性时优先使用LEFT SEMI JOIN。

只分享真·实战干货——那些让我从“还能这样”变成“原来如此”的坑。 1302

left semi join 和 left join 区别

left semi join 和 left join 联系和区别 1、都是左表连接,但是semi join右表关联不左表也不会出来,left join不一样 2、semi join只能查询左表信息,left join可以查询所有 3、semi join是left join的一种优化 4、semi join一般使用查询存在的情况 例子: 数据准备: 1,a 2,b 3,c 4,d 7,y 8,u ...

C_CXY2333的博客 2505

hive关于left join 和join时候on条件总结

hive中使用join时候on条件 1、如果 select * from a left join b on(a.字段=b.字段) 正常 2、如果 select * from a left join b on(a.字段=b.字段,b.字段=某值,b.……) 正常 3、如果 select * from a left join b on(a.字段=b.字段,a.字段=某值,a.……) 工作正常该查询中a...

沧海一粟的博客 8548

hive 的 left semi join 讲解

介绍 LEFT SEMI JOIN (左半连接)是 IN/EXISTS 子查询的一种更高效的实现。 示例 可以改写为 特点 1、left semi join 的限制是, JOIN 子句中右边的表只能在 ON 子句中设置过滤条件,在 WHERE 子句、SELECT 子句或其他地方过滤都不行。 2、left semi join 是只传递表的 join key...

HappyRocking的专栏 9万+

Hive.LEFT SEMI JOIN子句

公司的数据仓库和离线数据分析是建立在Hadoop + Hive基础上的,现在的工作主要是数据分析,自然也就跟HQL查询经常打交道了。刚来公司几乎完全不懂数据库知识,神马结构化查询语言也只是听说而已,不过,这没关系,实际工作一来,学习起来还是很快~~         年前有一个同事叫帮忙查某个产品的月度留存UV这个数据,当时业务不熟,还去参照了一下别人是怎么定义留存用户这个指标的。。。然后根据自己

辰采星 1万+

Hive的left join、left outer join和left semi join三者的区别

Hive的Join的文档说明地址: https://cwiki.apache.org/confluence/display/Hive/LanguageManual%2BJoins 以下为两个测试数据表建表语句: use test; DROP TABLE IF EXISTS table1; create table table1( student_nobigint...

qq_43193797的博客 5385
上一篇: Scala 访问修饰符
下一篇: 训练神经网络的五大算法
Shadow_mi
博客等级 码龄10年 12粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值