• 实数
    2021-12-11
    对于被连接的数据子集较小的情况,Nested嵌套循环连接是个较好的选择 Hash Join散列连接是CBO 做大数据集连接时的常用方式 SortMergeJoin    通常情况下散列连接的效果都比排序合并连接要好,然而如果行源已经被排过序,在执行排序合并连接时不需要再排序了,这时排序合并连接的性能会优于散列连接。可以使用来强制使用排序合并连接

    作者回复: 满分💯~

    
    16
  • Eazow
    2021-12-01
    老师,请问join是是分布式处理吗?

    作者回复: 取决于是单机join,还是分布式join。单机的话,掌握NLJ、SMJ、HJ三种实现机制即可;分布式join的话,还需要考虑是shuffle join,还是Broadcast join~

    共 2 条评论
    3
  • LJK
    2021-11-04
    文中的Sort Merge Join的算法是否只适用于join key在基表中不重复的情况?如果join key在基表中可以重复的话应该需要设定好Mark控制基表的游标位置,不然文中的方法貌似会遗漏数据

    作者回复: SMJ同样适用于数据有重复的情况哈,本质上还是靠游标的滑动,基本上还是那3个规则,按照顺序依次往下滑~ 不过,你说的没错,在这种情况下,游标的滑动,需要保证数据的不重不漏~

    共 4 条评论
    2
  • 福
    2021-12-19
    问下老师,hive里面的join方式,也是老师说的这3种嘛?不考虑 shuffle join,Broadcast join的情况下,,,我的意思是,这3中join方式,是通用的嘛,比如mysql,oracle,hive ,spark 实现join都是这3种方式

    作者回复: 是的,Join的实现机制,是通用的哈,都是NLJ、HJ和SMJ,这三种

    
    1
  • HHB
    2021-11-26
    无缝对接DBA

    作者回复: 哈哈,是的,Spark SQL的很多优化机制,实际上都来源于RDBMS。实际上,不止Spark SQL,Impala、Presto,任何数仓都是一样的,所谓万变不离其宗~

    
    1
  • 火炎焱燚
    2021-10-23
    Python 版代码: # 在notebook上运行,先构建环境 from pyspark import SparkContext, SparkConf from pyspark.sql.session import SparkSession sc = SparkContext() spark = SparkSession(sc) seq=[(1, "Mike", 28, "Male"), (2, "Lily", 30, "Female"), (3, "Raymond", 26, "Male"), (5, "Dave", 36, "Male")] employees=spark.createDataFrame(seq,['id','name','age','gender']) seq2=[(1, 26000), (2, 30000), (4, 25000), (3, 20000)] salaries=spark.createDataFrame(seq2,['id','salary']) # inner join jointDF=salaries.join(employees,'id','inner') jointDF.show() # left join jointDF2=salaries.join(employees,'id','left') jointDF2.show() # right join jointDF3=salaries.join(employees,'id','right') jointDF3.show() # outer join jointDF4=salaries.join(employees,'id','outer') jointDF4.show() # leftsemi jointDF5=salaries.join(employees,'id','leftsemi') jointDF5.show() # leftanti jointDF6=salaries.join(employees,'id','leftanti') jointDF6.show()
    展开

    作者回复: 赞👍,666~ 辛苦老弟整理Python代码,后续我们一起收录起来~

    
    1
  • LJK
    2021-12-06
    老师好,NLJ里左表驱动表应该是体量大的表吗?如果有大小两张表,大表是N条数据,小表是M条数据,不考虑block nested loop join优化的话。复杂度是:大表驱动下:O(M*N) + O(M),小表驱动下O(M*N) + O(N),好像应该选择小表驱动?

    作者回复: 不是哈~ 这里没有O(M)、O(N)这样的“尾巴”,两种情况的复杂度都是O(M*N)

    共 3 条评论
    
  • welldo
    2021-11-15
    先mark,最近要忙项目,忙完再来追。

    作者回复: 老弟加油~

    
    
  • 李刘明
    2023-06-29 来自广东
    SMJ排序不算复杂度?
    
    
  • Daniel
    2022-09-20 来自上海
    请问join的实现方式如何指定呢?
    
    