百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Hive sql和spark sql的join原理

bigegpt 2024-09-02 16:37 5 浏览

?Hive sql和spark sql语法

Hive sql和spark sql都支持相同的sql语法,基本所有支持sql的数据库或sql引擎,支持的语法都基本相同。数据库领域得join者得天下。

  • inner join
  • left join
  • right join
  • full outer join
  • left semi join

?Hive sql join原理

  • map join(内存关联,无reduce)

适用场景:大表join小表

开关参数:hive.auto.convert.join控制,hive在0.7版本以后默认为true,就是默认开启,不必sql中hint

表大小限制hive.mapjoin.smalltable.filesize,默认25M,小于等于25M,会启动mapjoin

流程:

1、小表加载DistributeCache阶段

MR local task读取小表内容—?转换成HashTable存为本地文件(key为join的字段)—?加载到DistributeCache里为hashTable

2、hash join阶段

大表启动map读取每条数据,并拿key(join的字段)去DistributeCache查询,并输出关联结果

整个过程无需reduce过程,map搞定。

  • common join(正常join,有reduce)

适用场景:大表join大表

开关参数:无(始终开启)

表大小限制:无限制

流程:

1、map阶段

读取表内容,输出key-value类型数据,key为join字段,value为关心字段(select字段+where条件字段)+tag(标识来源表);

2、shuffle阶段

按map阶段的key进行hash,分发到reduce,join两表相同的key分发到同一个reduce;

3、reduce阶段

按key相等+tag不同,条件完成join,输出结果,每个reduce输出一个文件。

?spark sql原理

  • broadcast/map join(无reduce,内存计算)

适用场景:大表join小表

开关参数:无(始终开启)

表大小限制:spark.sql.autoBroadcastJoinThreshold参数,默认10M(hive map join默认小表25M)

流程:

1、broadcast阶段

小表先发给driver,driver再发给各个executor内存中,并存储为HashTable形式

2、hash join阶段

每个exector本机执行join,拿大表每条记录的join字段为key,hash查找小表,得到结果输出

  • shuffle sort merge join

适用场景:大表join大表

开关参数:无(始终开启)

要求join的key可排序

流程:

1、map阶段

读取表内容,输出key-value类型数据,key为join字段,value为关心字段(select字段+where条件字段)+tag(标识来源表);

2、shuffle + sort阶段

shuffle输出按key排序(spark shuffle天然支持排序),并将相同排序范围的key输出到相同的分区里;

3、merge join阶段

分区内对排好序的两张表数据执行join操作。join操作很简单,分别遍历两个有序序列,碰到相同join key就merge输出。

  • shuffle hash join

适用场景:大表join中表(性能较sort merge join稍好,耗费内存资源过多,不建议使用)

开关参数:spark.sql.join.preferSortMergeJoin默认false关闭(官方不推荐,所以默认关闭)

表大小限制:

(1)中表 > spark.sql.autoBroadcastJoinThreshold(默认25M)

(2)中表 < 大表的1/3

(3)中表 < spark.sql.autoBroadcastJoinThreshold * 分区数目(即中表在每个分区内小于broadcast join小表限制)

流程:

1、map阶段

读取表内容,输出key-value类型数据,key为join字段,value为关心字段(select字段+where条件字段)+tag(标识来源表);

2、shuffle阶段

按map阶段的key进行hash,分发到reduce,join两表相同的key分发到同一个reduce;

3、hash join阶段

中表在每个分区内以HashTable形式加载到内存,key为join字段,大表每条记录拿着join字段去查HashTable,并输出join结果。

相关推荐

一条命令搞定pip国内镜像源设置(pip install 指定镜像)

玩python的同学想必没有不用pip的吧,pip是python包管理工具,和Nodejs的npm、Java的maven类似,这些依靠开源力量建立起的庞大软件库极大提高了开发的效率,不过默认pytho...

Cadence Allegro在PCB中手动或者自动添加差分对属性

设计PCB过程中,若设计中有差分对信号,则需要将是差分的2个信号设置为差分对,设置差分对有2种方式:手动添加及自动添加一、手动添加差分对:1、点击Setup-Constraints-Constrain...

合亿 Gutab 三防|车载工业平板功能介绍,车载工业平板厂家推荐

在商用车队管理迈向智能化、特种车辆作业追求高效化的今天,车载工业平板早已突破传统“车载导航”的单一功能,成为连接车辆、司机与云端管理的核心枢纽。从物流运输的实时调度中枢,到矿山开采的无人驾驶控制器,再...

「探长分享-黑匣子」本田冠道 2020款

【品牌】探长360汽车黑匣子【产品型号】2TPro【安装车型】本田冠道2020款【功能特点】360全景安全辅助,行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,震动监控,一步标...

「探长分享-黑匣子」奥迪A6L 2019款

【品牌】探长360汽车黑匣子【产品型号】2TPro【安装车型】奥迪A6L2019款【功能特点】360全景安全辅助,行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,震动监控,一步...

探长360全景案例分享:奥迪Q7 2011款360全景效果展示

【品牌】DCT360汽车黑匣子【产品型号】3TPro【安装车型】奥迪Q72011款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,24小时停...

「探长分享-黑匣子」保时捷Cayenne 2015款

【品牌】探长360汽车黑匣子【产品型号】4TPro【安装车型】保时捷Cayenne2015款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,...

苍蝇再小也是肉,变态电路的大阳巧客S2差点难死大神

这台大阳巧客S2电动四轮车是我家第二台四轮俱全的篷车!哈哈!大阳巧客S2配置4.5Kw永磁同步电机,SVPWM矢量控制正弦波系统,车辆在加速、爬坡上性能有提升,效率高,操控灵敏。这台车前段时间刚更换了...

「探长分享-黑匣子」奥迪Q5L 2020款

360汽车黑匣子【产品型号】4TPro【安装车型】奥迪Q5L2020款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,24小时停车监控,一秒一...

「探长分享-黑匣子」丰田兰德酷路泽 2016款

【品牌】探长360汽车黑匣子【产品型号】3TPro【安装车型】丰田兰德酷路泽2016款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,24小...

驾驶室盲区是酿成重卡事故主因?后视系统:这个锅我不背

小时候家中长辈常常提醒:离大货车远一点!司机根本看不到你!早期的货车可能真的存在驾驶盲区,比如车辆正下方,因驾驶座过高,恰好是司机看不到的视野盲区。而如今的重卡在环视系统上已经非常完善,是否还存在驾驶...

前后双录,360 G580行车记录仪(360行车记录仪g580s)

相信每一位车主都会为爱车安装行车记录仪,行车记录仪的作用不仅能为交通事故还原证据,还能防止碰瓷。传统的单镜头行车记录仪只能拍摄车头方向的行车画面,如果遇到后方车辆故意碰瓷的事故时,没有监控和后摄画面则...

海康威视同轴录像机怎么使用,海康XVR配置说明

海康威视同轴录像机支持模拟、同轴以及数字IP摄像机接入,因此在使用多种类型摄像机、老久监控项目改造等场景广泛使用。首先,新录像机第一次使用需要设置管理密码激活,密码需由8-16位数字、小写字母、大写...

亿道三防2代工业级车载平板电脑震撼登场,农机矿车专用

亿道三防近日推出2024年全新2代车载平板电脑V12R,引领多项技术创新和升级,为农机、矿车等车载领域带来了超越期待与想象的震撼体验。V12R是一款从里到外,性能、功能全线拉满的工业级车载平板电脑!拥...

分析神州十八号返回舱内的摄像机最有可能是什么类型的摄像头

有没有发现,神州十八号返回舱内摄像机的图像虽然清晰度不是很高,但是画面非常干净,没有一点干扰,几乎看不到噪点。图像清晰度不高不太可能是镜头原因,很可能是图像传感器的分辨率比较低的原因,图像传感器分辨率...