什么是 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)的区别

左连接连接中的 LIKE 语句

对于 SQL,啥时候开始需要始终使用“Inner Join”而不是隐式连接?

SQL语句(inner join,left out join,right out join三者的不同

26.MySQL中的内连接INNER JOIN

SQL中inner join,outer join和cross join的区别