hive join on 条件 与 where 条件区别

hive-join中on 和where条件,笛卡尔积join 在多年取数中,第一次遇到需要用笛卡尔积join的场景,记录一下 场景一: 描述:取10月每日近三十天的购物情况,比如,取10月1日的用户在过去30天(含10月1日)的购物情况,源数据tmp1如下 用户id (user_id) 日期 (date) 购物件数(buys) a 2021-09-01 1 a 2021-10-01 3 a 2021-09-... 阅读详情

背景

最近项目组上,来了几个实习生,对 Hive sql 的 join 的使用不是很熟悉,几个人写出来的sql 看上去感觉都是一样的,但结果可能会出现,扫描全表,耗时过久,造成数据有所有差异

业务场景

根据常见的场景,写了几条sql ,看 on 和 where 的作用域 ,查询 事实表 a 中的在 20200602 这天的数据,维度表 b
对于上述的这种需求 ,有可能会出现下列这几种sql

sql1

select 
	*
from a 
left join b 
  on a.id = b.id 
  and a.date=20200602;

sql2

select 
	*
from a 
left join b 
  on a.id = b.id 
  and b.date=20200602;

sql3

select 
	*
from a 
join b 
  on a.id = b.id 
  and a.date=20200602;

sql4

select 
	*
from a 
join b 
  on a.id = b.id and b.date=20200602
where a.date=20200602;

结论

sql1: 如果是left join 在on上写主表a的条件不会生效,全表扫描。

sql2: 如果是left join 在on上写副表b的条件会生效,但是语义与写到where 条件不同,写到on后,先过滤后关联,写到where后,先关联后过滤

sql3: 如果是inner join 在on上写主表a、副表b的条件都会生效

sql4: 结合 前三条 sql 的结果,建议这么写,先过滤a表数据和b表数据,后关联join

执行顺序
1.where a.date=20200602 (过滤a)
2. b.date=20200602(过滤b)
3.a.id = b.id (关联)
Hive中join条件过滤on和where的区别 1、inner join inner join首先可以通过分区进行过滤,防止全表扫描。 inner join会自动为join的键(on d.id=u.department_id)添加is not null的过滤条件 inner join 下on和where后面的条件进行过滤,在inner join中where和on是同时进行过滤,没有顺序的区别 2、left/right join left/right join使用分区条件过滤,可以防止全表扫描,最优先过滤 left/right join在主表下进 阅读详情

相关推荐

SQL面试题

确定给定的值是否与子查询或列表中的值相匹配。in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。所以相对内表比较小的时候,in的速度较快:指定一个子查询,检测行的存在。遍历循环外表,然后看外表中的记录有没有和内表的数据一样的。匹配上就将结果放入结果集中使用exists关键字进行查询的时候,先查询的不是子查询的内容,而是查主查询的表。

weixin_54707168的博客 242

Hive中四种 join on筛选条件与where筛选条件的区别

tableA的结构及数据: id name grade dept 1 lijie1 100.0 10 2 lijie2 90.0 20 3 lijie3 60.0 10 4 lijie4 80.0 10 5 lijie5 70.0 20 tableB的结构及数据: id name 1...

风 1万+

Transformer模型详解(图解最完整版)

Transformer由论文提出,现在是谷歌云TPU推荐的参考模型。论文相关的Tensorflow的代码可以从GitHub获取,其作为Tensor2Tensor包的一部分。哈佛的NLP团队也实现了一个基于PyTorch的版本,并注释该论文。在本文中,我们将试图把模型简化一点,并逐一介绍里面的核心概念,希望让普通读者也能轻易理解。Transformer 与 RNN 不同,可以比较好地并行训练。

2501_91695094的博客 2701

join on 和 where的区别

join中,on 和 where 的区别: 两个表在join时,首先做一个笛卡尔积,on后面的条件是对这个笛卡尔积做一个过滤形成一张临时表,如果没有where就直接返回结果,如果有where就对上一步的临时表再进行过滤。 再使用left join 时,on 和 where条件的区别如下: on条件是在生成临时表时使用的条件,他不管on的条件是否为真,都会返回左边表所有的记录 where条件...

mlh532354163的博客 6165

Linux下搭建J-Link调试环境:OpenOCD+GDB实战指南

嵌入式开发中,调试器是连接开发主机与目标硬件的关键桥梁,其核心原理是通过标准协议(如JTAG/SWD)访问芯片内部的调试模块。GDB作为通用的调试客户端,通过远程协议与调试服务器通信,而OpenOCD则扮演了协议转换与硬件驱动的角色,实现了调试命令的翻译与执行。这种开源工具链的组合,为开发者提供了高度的定制化与自动化能力,尤其适合需要与持续集成流程深度结合的复杂项目。在实际应用中,针对特定芯片(如ARM7TDMI)进行正确的内存控制器与时钟初始化是成功调试的前提,这常常涉及对板级支持包的深入理解。本文以S3

weixin_29889665的博客 333

reCAPTCHA v3隐形验证码实战:5分钟教你用Capsolver获取0.9高分令牌

本文提供了一份reCAPTCHA v3隐形验证码的实战指南,详细解析其浏览器评分机制,并手把手教你使用Capsolver自动化获取0.9高分令牌。内容涵盖从环境侦察、关键参数(sitekey与pageAction)提取,到API调用、结果轮询及令牌使用的完整流程,旨在帮助开发者高效绕过自动化交互障碍。

weixin_29314405的博客 347

sql执行顺序

1. join中相比where优先推荐on  WHERE子句中使用的连接语句,在数据库语言中,被称为隐性连接。INNER JOIN……ON子句产生的连接称为显性连接。(其他JOIN参数也是显性连接)WHERE和INNER JOIN产生的连接关系,没有本质区别,结果也一样。但是!隐性连接随着数据库语言的规范和发展,已经逐渐被淘汰,比较新的数据库语言基本上已经抛弃了隐性连接,全部采用显性连接了。

灵魂自由的忙人 1804

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

AI人人懂 373

把条件写在 join on 后面和写到where后面的区别

转载:https://www.cnblogs.com/zsq23837880/p/7040923.html 前两天面试,遇到了一道题。说的是LEFT JOIN关联表中ON,WHERE后面跟条件的区别。 当时确实有点懵逼~经常做这种left join,inner join连接,却发现居然只是模糊的认识。 回到家后,马上开启了“实践是检验真理的唯一标准”模式。 三下五除二,建了两张表尝试起来。 首先是...

jesseXu的博客 9165

【代码版本管理】SVN(Subversion)

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对SVN(Subversion)代码版本管理做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 668

Android 13.0 framework默认沉浸式导航栏功能实现

​ 在13.0的系统rom定制化开发中,在实现导航栏的某些定制化开发中,在某些产品需要实现沉浸式导航栏,就是需要app 能全屏显示同样也能显示导航栏,接下来就来分析下相关的功能实现 ​

安卓兼职framework和app工程师的博客 467

Hive SQL查询left join下on条件和where条件区别

我们通常的认知是联表查询时ON是作用于联表前(时)的过滤条件,WHERE是对联表后的数据的过滤条件,但hive sql查询有个特殊点需要关注,那就是对于left join中的左表ON过滤条件有可能会被忽略,比如 SELECT DISTINCT a.dt FROM wlxdw.dws_tuid_cheat_di a LEFT JOIN wlxdw.apps_tuid_device_map_ds b ON a.tuid = b.tuid AND a.dt='2021-10-18' AND b.dt='202

zhang197093的博客 5107

PX4从放弃到精通(二十二):日志

文章目录前言一、下载日志二、ulog转CSV三、利用flightplot软件分析PX4的ulog日志1 windos安装2 ubuntu18.04安装四、使用PlotJuggler分析PX4日志五、设置日志记录条件六、添加自定义日志消息 前言 PX4 1.10以上固件 QGC 一、下载日志 将飞控链接地面站,在下图页面点击“刷新”,即可看到保存的日志(前提是要有TF卡) 选择需要下载的日志,点击右侧的“下载”,然后选择目录即可进行下载,如果想擦除所有的日志,可以点击右侧的“擦除全部” 二、ulog转CS

超维空间科技的博客 6796

Hive中 join on筛选条件 与 where筛选条件的区别

测试两张表结构: create table px_data_test_temp.test_score( id int comment '学生id', grade int comment '学生成绩' ) comment '学生成绩表'; create table px_data_test_temp.test_stu( id int comment '学生id', name string comment '学生姓名' ) comment '学生信息表'; 插入测试数据: insert into

雾岛与鲸的博客 2359

在 SAP BTP 中为 SAP AI Core 创建 Service Instance 和 Service Key 的完整实战指南

摘要:本文详细介绍了在SAP BTP上创建AI Core服务实例和密钥的关键步骤,这是实现ABAP系统与Gen AI大语言模型集成的核心技术环节。文章通过一个制造业财务问答场景的案例,系统梳理了从前提条件准备、架构理解到具体操作的全过程,重点解析了service instance创建、X.509证书配置等关键节点。特别强调了Extended计划选择、证书格式等易错点,为ABAP开发人员实现Gen AI场景提供了实用指南。

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【数据库】HIVE SQL -left join (on 和 where条件放置的区别)

在使用left join的过程中,总是遇到一个问题,就是将条件放在on中还是where条件中。 在查过一些资料和实际操作后,总结了一下: 在多张表连接时,都会生成一张中间表,然后再将这张临时表返回给用户。 在用left join中,on和where条件的区别如下: (1)on条件是在生成中间表时使用的条件,它不管on中的条件是否为真,都会返回左表中的记录。...

J小白的博客 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

hive join on和where条件之间的区别

hive> select ljn001.*,ljn002.*> from ljn001 left outer join ljn002 > on (ljn001.a = ljn002.a and ljn001.b = ljn002.b and ljn001.b = 2); OK aba b 12...

211

计算机控制技术及应用

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

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【数据开发】Hive 多表join中的条件过滤与指定分区

b.连接类型是inner join、right outer join(小表不能是右表)、left outer join(小表不能是左表)、left semi join。2、on 后面条件用where ,在left join 生成的表上在做筛选,这时会把 where中不成立的筛选掉。写法1 是最慢的,因为join两边的表都没有提前过滤分区,所以执行时大概率导致全表扫描。写法4,5是Hive的标准写法,但是一般场景下没有子查询的必要,效果上与写法2,3相同。a. 参与连接的小表的行数,以不超过2万条为宜。

小哈里的博客 3064

(08)Hive——Join连接、谓词下推_hive join是内连接吗

explain查看执行计划,在对t2表进行scan后,优先进行filter,过滤t2.user_id is not null,即。explain查看执行计划,在对t2表进行scan后,优先对t1表进行filter,过滤t1.user_id >2,即。explain查看执行计划,在对t2表进行scan后,优先对t1表进行filter,过滤t1.user_id >2,即。explain查看执行计划,在对t2表进行scan后,优先对t1表进行filter,过滤t1.user_id >2,即。

2401_87112471的博客 1340

hive查询where join_Hive连接查询join用法详解

先来个总的概括,Hive的join用法基本与SQL一致建表语句不说了,直接看看两个表中的数据表一:cl_studenthive (test)> select * from cl_student;OK1chenli212xuzeng223xiaodan234hua24表2:cl_stu_subhive (test)> select * from cl_stu_sub;OK1chinese...

weixin_31746149的博客 613

SQL学习(八):join关联后使用where和and条件筛选的区别

左外连接右表条件 → 必须放在ON子句内连接条件 → 优先放WHERE自动下推全外连接条件 → 必须放ON子句。

weixin_66348343的博客 1057

锁屏面试题百日百刷-Hive篇(六)

Hive join查询的时候on和where有什么区别Hive里面的left join是怎么执行的Hive内部表,外部表,分区表

demo软件园的博客 223

Hive学习笔记(一)

经过几次争取,和公司数据部门要到了数据仓库的权限。 jin

wuxiangchun的专栏 441

面试录音复盘:SQL 去重被追问到卡壳,distinct / group by / row_number 到底差在哪?

这是最容易露馅的点:有人以为写了数据就“自动去重”,其实它只是把数据编号(1,2,3…),不会删除任何一行。每个用户保留最新一条订单selectt.user_id,t.amountfrom (selectuser_id,amount,where dt = '2023-10-24' -- 必须带分区过滤(非常关键)) t-- 这一步才是真正的“去重动作”我按user_id分组,按时间倒序用row_number给每组打排名取rn=1才是保留最新记录加分点:如果order_time。

fuladulu的博客 432
上一篇: Hive 删除操作
下一篇: Spark读取数据及保存数据
yjgithub
博客等级 码龄11年 53粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值