首先我们要了解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大表相关推荐

  1. 真正让你明白Hive调优系列3:笛卡尔乘积,小表join大表,Mapjoin等问题

    0.Hive中的优化分类    真正想要掌握Hive的优化,要熟悉相关的MapReduce,Yarn,hdfs底层源码,明晰Hive的底层执行流程.真正让你明白Hive调优系列,会征对下面分类逐一分析 ...

  2. MySQL小表join大表的正确使用姿势(straight_join 关键字的使用)

    网上有种说法是:由于一般是采用小表join大表的方式(可以提高效率),所以有人说将小表放在左边,让它先执行,记住,这种说法是错误的!!!有例为证: 我们看上例: film inner join fil ...

  3. 【Spark调优】小表join大表数据倾斜解决方案

    [Spark调优]小表join大表数据倾斜解决方案 参考文章: (1)[Spark调优]小表join大表数据倾斜解决方案 (2)https://www.cnblogs.com/wwcom123/p/1 ...

  4. 【Spark调优】大表join大表,少数key导致数据倾斜解决方案

    [Spark调优]大表join大表,少数key导致数据倾斜解决方案 参考文章: (1)[Spark调优]大表join大表,少数key导致数据倾斜解决方案 (2)https://www.cnblogs. ...

  5. mysql关联表id_mysql join联表 + id自增

    join的写法 如果用left join 左边的表一定是驱动表吗?两个表的join包含多个条件的等值匹配,都要写道on还是只把一个写到on,其余写道where部分? createtablea(f1in ...

  6. excel将大表分解成小表,将小表合成一个大表

    1.将一个十几几万行的表分解成小表 请用微软的excel  不要用wps 用excel打开改文件,按alt+f11,选择你要分解的主表 界面如图: 输入下面的代码 Sub cfb() Dim r, c ...

  7. mysql truncate 大表_MySQL删除大表时潜在的问题(drop table,truncate table)

    case1,删除大表时,因为清理自适应hash索引占用的内容导致的MySQL服务挂起 case2,大表的随意Drop或者truncate导致MySQL服务的挂起 按照本文中的结论就是 MySQL5.6 ...

  8. mysql大表迁移_MySQL 大表迁移

    一.需求分析 线上100G 大表 table1 迁移,从DB1 迁移到DB2. 二.环境要求: 1.MySQL 使用InnoDB 存储引擎,且开启独立表空间: 2.两个库的MySQL版本一致(未做不同 ...

  9. mysql 大表 备份_MySQL大表备份的简单方法

    MySQL大表备份是一个我们常见的问题,下面就为您介绍一个MySQL大表备份的简单方法,希望对您学习MySQL大表备份方面能有所帮助. 这里所说的大表是超过4G以上的表,我目前见到过最大为60多G的单 ...

最新文章

  1. Linux拜拜!微软给WSL加入GPU支持,Windows终于迎来命令行包管理工具
  2. Oracle 检索数据
  3. Interview:算法岗位面试—11.05下午上海某银行信息(总行,四大行之一)技术岗笔试记录
  4. gorm物理删除:unscoped用法
  5. defparam的语法
  6. 如何使用 API 的方式给 SAP service cloud Registered product 上传图片
  7. 细粒度权限控制 linux,FGAC(细粒度访问控制)/VPD
  8. ubuntu14.04安装git
  9. ai人工智能python开发_Python才是人工智能AI的首选编程语言,你值得拥有……
  10. 国产木乃伊走进CTO编辑部
  11. 下载了一个IBM Rational RequisitePro Trial,感觉IBM的用户体验不错
  12. 防火墙之iptables
  13. php5.5 pdo mysql_PHP5中使用PDO连接数据库的方法
  14. 易筋SpringBoot 2.1 | 第十六篇:SpringBoot通过JDBC访问数据库
  15. R语言-批量转换变量类型为因子型
  16. xyplorer保存设置失败_XYplorer有哪些独特的强大之处?又可以在哪些方面替代,或者超越total commander?...
  17. 2021的科技卦象·雷·到元宇宙玩“躲猫猫”
  18. C语言实现之数字中的最大数字组合
  19. 实例化bean中有@Autowired注解的有参构造函数(二)
  20. 第十二周 任务三

热门文章

  1. 当当网读书排行榜爬虫
  2. Deeplabv3+ Pytorch训练cityscapes数据集
  3. 记一次失败的导师霸面
  4. 解决‘parent.relativePath‘ of POM xxx points at yyy instead of zzz please verify your project structure
  5. 为什么说Python是人工智能方向的主流编程语言?
  6. 人一辈子有时候要傻一次,笨一次
  7. CDISC SDTM IE domain学习笔记
  8. java imageicon大小_自动缩放ImageIcon以标注大小
  9. 走一个青瓜风——青瓜鸡尾酒
  10. 看历史涨知识!高速公路知多少?