什么是 Inner Like 连接?
Posted
技术标签:
【中文标题】什么是 Inner Like 连接?【英文标题】:What is Inner Like join? 【发布时间】:2019-03-21 13:53:48 【问题描述】:在连接策略的 Spark 源代码中,代码 cmets 提到了广播哈希连接 (BHJ):
完全外连接不支持 BHJ。对于右外连接,我们 只能播放左侧。对于左外,左半,左反 和内部连接类型 ExistenceJoin,我们只能广播 右边。对于inner like join,我们可以广播双方。 通常,BHJ 在以下情况下可以比其他连接算法执行得更快 广播侧很小。但是,广播表是 网络密集型操作。它可能会导致 OOM 或性能比 其他连接算法,特别是当构建/广播端是 大。
你能解释一下代码 cmets 是什么意思吗
“类内连接”
code link
【问题讨论】:
@TravisHegner:谢谢,看起来它包括内部和交叉连接 【参考方案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"
【讨论】:
以上是关于什么是 Inner Like 连接?的主要内容,如果未能解决你的问题,请参考以下文章
外连接(left join、full join、right join)与内连接(inner join)的区别
对于 SQL,啥时候开始需要始终使用“Inner Join”而不是隐式连接?