SparkSql MAPJOIN优化之小表left join大表
首先我们要了解MAPJOIN优化原理,这里简要说明下
Spark Broadcast hash join(Hive map join同理)
1,把小表广播到所有大表分布的节点上,在每个节点上分别进行单机hash join
2,left join时只能广播右表
执行基本条件:小表必须小于参数spark.sql.autoBroadcastJoinThreshold, 默认为10M
sql 场景小表需要left join大表 小表150M左右 大表1T左右
原始sql(广播左表,未成功,因为left join只支持广播右表)
create table tmp.iapp_mkt_per_imei_pkg_repair_t2_not_default_20200812_1 as
select /*+MAPJOIN(a) */ a.imei,b.package,1 status,1 install_type,b.imei imei_b
from
(select imei from tmp.iapp_mkt_per_imei_only_repair_20200812 where install_type = 0 and tail != 'default') a
left join join
(select imei,package from edw.sys_app_list_fact where data_date = 20200812 and tail != 'default' and imei is not null and status in (1,2))b
on a.imei = b.imei
优化思路:使用with将小表提前处理,多次复用,将left join转化为可以进行广播变量的join,然后再加进行小表与小表right join进行数据补偿,此方法只适合小表left join 大表
优化后sql
create table tmp.lanfz_222 as
with iapp_mkt as (select imei from tmp.iapp_mkt_per_imei_only_repair_20200812 where install_type = 0 and tail != 'default')
select /*+BROADCAST(a) */
c.imei,b.package,1 status,1 install_type,b.imei imei_b
from
iapp_mkt a
join
(select imei,package from edw.sys_app_list_fact where data_date = 20200812 and tail != 'default' and imei is not null and status in (1,2))b
on a.imei = b.imei
right join
iapp_mkt c
on c.imei = b.imei;
结果数据量对比,完全一致
sql耗时对比:
原始sql:Time taken: 1369.239 seconds
优化后sql:Time taken: 680.239 seconds
SparkSql MAPJOIN优化之小表left join大表相关推荐
- 真正让你明白Hive调优系列3:笛卡尔乘积,小表join大表,Mapjoin等问题
0.Hive中的优化分类 真正想要掌握Hive的优化,要熟悉相关的MapReduce,Yarn,hdfs底层源码,明晰Hive的底层执行流程.真正让你明白Hive调优系列,会征对下面分类逐一分析 ...
- MySQL小表join大表的正确使用姿势(straight_join 关键字的使用)
网上有种说法是:由于一般是采用小表join大表的方式(可以提高效率),所以有人说将小表放在左边,让它先执行,记住,这种说法是错误的!!!有例为证: 我们看上例: film inner join fil ...
- 【Spark调优】小表join大表数据倾斜解决方案
[Spark调优]小表join大表数据倾斜解决方案 参考文章: (1)[Spark调优]小表join大表数据倾斜解决方案 (2)https://www.cnblogs.com/wwcom123/p/1 ...
- 【Spark调优】大表join大表,少数key导致数据倾斜解决方案
[Spark调优]大表join大表,少数key导致数据倾斜解决方案 参考文章: (1)[Spark调优]大表join大表,少数key导致数据倾斜解决方案 (2)https://www.cnblogs. ...
- mysql关联表id_mysql join联表 + id自增
join的写法 如果用left join 左边的表一定是驱动表吗?两个表的join包含多个条件的等值匹配,都要写道on还是只把一个写到on,其余写道where部分? createtablea(f1in ...
- excel将大表分解成小表,将小表合成一个大表
1.将一个十几几万行的表分解成小表 请用微软的excel 不要用wps 用excel打开改文件,按alt+f11,选择你要分解的主表 界面如图: 输入下面的代码 Sub cfb() Dim r, c ...
- mysql truncate 大表_MySQL删除大表时潜在的问题(drop table,truncate table)
case1,删除大表时,因为清理自适应hash索引占用的内容导致的MySQL服务挂起 case2,大表的随意Drop或者truncate导致MySQL服务的挂起 按照本文中的结论就是 MySQL5.6 ...
- mysql大表迁移_MySQL 大表迁移
一.需求分析 线上100G 大表 table1 迁移,从DB1 迁移到DB2. 二.环境要求: 1.MySQL 使用InnoDB 存储引擎,且开启独立表空间: 2.两个库的MySQL版本一致(未做不同 ...
- mysql 大表 备份_MySQL大表备份的简单方法
MySQL大表备份是一个我们常见的问题,下面就为您介绍一个MySQL大表备份的简单方法,希望对您学习MySQL大表备份方面能有所帮助. 这里所说的大表是超过4G以上的表,我目前见到过最大为60多G的单 ...
最新文章
- Linux拜拜!微软给WSL加入GPU支持,Windows终于迎来命令行包管理工具
- Oracle 检索数据
- Interview:算法岗位面试—11.05下午上海某银行信息(总行,四大行之一)技术岗笔试记录
- gorm物理删除:unscoped用法
- defparam的语法
- 如何使用 API 的方式给 SAP service cloud Registered product 上传图片
- 细粒度权限控制 linux,FGAC(细粒度访问控制)/VPD
- ubuntu14.04安装git
- ai人工智能python开发_Python才是人工智能AI的首选编程语言,你值得拥有……
- 国产木乃伊走进CTO编辑部
- 下载了一个IBM Rational RequisitePro Trial,感觉IBM的用户体验不错
- 防火墙之iptables
- php5.5 pdo mysql_PHP5中使用PDO连接数据库的方法
- 易筋SpringBoot 2.1 | 第十六篇:SpringBoot通过JDBC访问数据库
- R语言-批量转换变量类型为因子型
- xyplorer保存设置失败_XYplorer有哪些独特的强大之处?又可以在哪些方面替代,或者超越total commander?...
- 2021的科技卦象·雷·到元宇宙玩“躲猫猫”
- C语言实现之数字中的最大数字组合
- 实例化bean中有@Autowired注解的有参构造函数(二)
- 第十二周 任务三
热门文章
- 当当网读书排行榜爬虫
- Deeplabv3+ Pytorch训练cityscapes数据集
- 记一次失败的导师霸面
- 解决‘parent.relativePath‘ of POM xxx points at yyy instead of zzz please verify your project structure
- 为什么说Python是人工智能方向的主流编程语言?
- 人一辈子有时候要傻一次,笨一次
- CDISC SDTM IE domain学习笔记
- java imageicon大小_自动缩放ImageIcon以标注大小
- 走一个青瓜风——青瓜鸡尾酒
- 看历史涨知识!高速公路知多少?