哈希完全外连接如何工作?

Posted

技术标签:

【中文标题】哈希完全外连接如何工作?【英文标题】:How does a hash full outer join work? 【发布时间】:2012-11-06 08:06:51 【问题描述】:

我知道哈希左外连接的算法是在右表上构建一个哈希表,然后遍历左表并在哈希表中搜索是否有匹配项,但是完全外连接如何工作?扫描完左侧表中的值后,您仍然需要一种方法来获取右侧表中左侧没有匹配项的元组。

【问题讨论】:

【参考方案1】:

在遍历探测记录时,您会记录哪些正确的元组在构建表中找到了匹配项。您只需将每个匹配的布尔值设置为 true。作为算法的最后一步,您扫描构建表并输出之前不匹配的所有元组。

据我所知,RDBMS 中没有使用另一种策略:构建左右元组的组合哈希表。将该表视为从哈希键到左元组列表和右元组列表的映射。通过遍历两个输入表将所有元组添加到哈希表来构建该表。在使用完所有元组后,遍历哈希表一次并相应地输出相等组(所有左元组或所有右元组或相等组中所有左元组和所有右元组的叉积)。

后一种算法非常适合内存中的工作负载(例如在客户端应用程序中)。前者适用于极大(或不可预测)的大探针输入,因此 RDBMS 使用那个。

【讨论】:

以上是关于哈希完全外连接如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中进行完全外连接? [复制]

oracle中的全外连接

组合哈希键输出(哈希外连接)

如何使用 PySpark 对两个 RDD 进行完全外连接?

两个字符串数组的完全外连接

Sql 完全外连接查询在 SQLAlchemy 中不起作用