【问题标题】:What is Inner Like join?什么是 Inner Like 连接?
【发布时间】:2019-03-21 13:53:48
【问题描述】:

在连接策略的 Spark 源代码中,代码 cmets 提到了广播哈希连接 (BHJ):

完全外连接不支持 BHJ。对于右外连接,我们 只能播放左侧。对于左外,左半,左反 和内部连接类型 ExistenceJoin,我们只能广播 右边。对于inner like join,我们可以广播双方。 通常,BHJ 在以下情况下可以比其他连接算法执行得更快 广播侧很小。但是,广播表是 网络密集型操作。它可能会导致 OOM 或性能比 其他连接算法,特别是当构建/广播端是 大。

你能解释一下代码 cmets 是什么意思吗

“类内连接”

code link

【问题讨论】:

  • @TravisHegner:谢谢,看起来它包括内部和交叉连接

标签: sql apache-spark apache-spark-sql


【解决方案1】:

根据a doc for the dataset join operatorsinnerlike 用于INNER 和CROSS 连接。

您还可以发现 Spark SQL 使用了以下两个家族 加入:

  • InnerLike 与 Inner 和 Cross
  • LeftExistence 与 LeftSemi、LeftAnti 和 ExistenceJoin

【讨论】:

    【解决方案2】:

    终于在代码中找到:joinTypes.scala

    InnerLike 包括:Inner 和 Cross 连接。

    sealed abstract class InnerLike extends JoinType {
      def explicitCartesian: Boolean
    }
    
    case object Inner extends InnerLike {
      override def explicitCartesian: Boolean = false
      override def sql: String = "INNER"
    }
    
    case object Cross extends InnerLike {
      override def explicitCartesian: Boolean = true
      override def sql: String = "CROSS"
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-06
      • 2012-05-28
      • 2012-06-01
      • 1970-01-01
      • 2023-03-27
      • 2011-05-25
      • 1970-01-01
      • 2010-11-18
      相关资源
      最近更新 更多