模糊联接

概念信息

FUZZYJOIN 命令

Analytics 模糊联接使用键域值的模糊匹配将两个 Analytics 表组合为第三个新表。在大多数方面,模糊联接类似于常规 Analytics 联接(请参见联接表)。主要区别是除了基于键域值的精确匹配来联接记录以外,模糊联接还可以基于近似匹配来联接记录。

当主键和辅助键包含的数据种类相同,但形式稍有不同时,模糊联接很有用。另外,当键中的数据具有可能阻止精确匹配的轻微不规则性(如打字错误)时,它也很有用。

示例

场景

您想要识别任何身兼员工身份的供应商,作为分析可能存在的不适当支付工资的相关数据的方式。

方法

您使用每个表中的地址域作为公共键(Vendor_StreetEmp_Address),将 Vendor 主表与 Employee 表相联接。但是,键域中地址数据的形式略有不同,因此您使用模糊联接而不是常规联接。

部分数据一览

不经过繁重的数据清理和协调工作,常规 Analytics 联接功能将无法联接如下所示的主键值和辅助键值,即使它们很可能是匹配的地址。

主键值 辅助键值
605 3rd Avenue 605 Third Avenue
400 High St SE 400 High Street S.E.
2203 Rowan Street 2203 Rowen St

即使经过数据清理和协调,在拼写方面略有差异的键值(如 "Rowan" 和 "Rowen")也很可能不会被匹配。

根据模糊联接设置的不同,这些键值可能被模糊联接加以联接。

输出结果

在下面的联接表示例中,精确键域匹配被突出显示为紫色,而模糊键域匹配被突出显示为绿色。

模糊联接与模糊重复之比较

模糊联接分析两个表中的键域中的值。要测试单个 Analytics 表中的单个域是否包含几乎完全相同的值,请参见模糊重复分析

改进模糊联接的有效性

通过采用下列一个或多个技巧,您可以显著提高模糊联接的有效性:

  • 对主键和辅助键域值中的各个元素进行排序
  • 从主键和辅助键域值中移除通用元素
  • 协调主键和辅助键域值

这些技巧使您可以使用更严格的模糊设置并仍然可以获得相同的模糊匹配,同时减少误报匹配的数量。您可以单独或者结合使用这些技巧。

创建表达式或计算域

要使用任一技巧,您需要使用适当的 Analytics 函数和一个或者两个键域创建一个表达式或者计算域。

有关表达式的详细信息,请参见表达式使用

有关计算域的详细信息,请参见定义计算域

说明

模糊联接对话框不允许在辅助键域上创建表达式。但是,您可以在 Analytics 命令行或脚本中手动创建一个辅助键域表达式。另一选项是创建一个计算域以用作辅助键域。

对键域值中的各个元素进行排序

SORTWORDS( ) 函数可通过按顺序对主键和辅助键域值中的各个元素进行排序,提高模糊联接的有效性。

对元素(如地址的组成部分)进行排序,可使具有相同信息和不同格式的键域值彼此更加相似。更大的相似度可以提高键域值被选择为彼此模糊匹配的可能性。

有关详细信息,请参见SORTWORDS( ) 函数

要观看提供 SORTWORDS( ) 概览的视频,请参见使用 SORTWORDS( ) 进行模糊匹配(仅限英语)。

说明

对键域值中的元素进行排序最适合于使用编辑距离算法进行模糊联接。

在使用 Dice 系数算法执行模糊联接时对元素进行排序未必有好处。在决定是否在生产设置中将 SORTWORDS( ) 与 Dice 系数算法结合使用之前,请对一组样本数据进行测试。

注意

如果您将 SORTWORDS( ) 与模糊联接结合使用,则必须将 SORTWORDS( ) 同时应用于要比较的两个字符串或两个域。

从键域值中移除通用元素

OMIT( ) 函数可以通过从主键和辅助键域值中移除 "Corporation" 或 "Inc." 等通用元素或者逗号、句号和 & 符等字符,提高模糊联接的有效性。

移除通用元素和标点符号可使模糊匹配仅专注于可能发生有意义差异的键域值部分。

有关详细信息,请参见OMIT( ) 函数

协调键域值

REPLACE( ) 或 REGEXREPLACE( ) 函数可以通过协调主键和辅助键域值中的相同元素的变体,提高模糊联接的有效性。例如,您可以协调 "Street"、"St." 和 "St" 以使用单个值 "St"。

协调元素可使具有相同信息和不同格式的键域值彼此更加相似。更大的相似度可以提高键域值被选择为彼此模糊匹配的可能性。

有关详细信息,请参见REPLACE( ) 函数以了解简单直接的替换,参见REGEXREPLACE( ) 函数以了解更复杂的替换。

输出表大小和命令性能

输出表大小

模糊联接类似于 Analytics 多对多联接。所有主键值都可能被匹配到所有辅助键值。输出表的大小可能比主要或者辅助输入表的大小大很多倍。

命令性能

模糊匹配算法可保只有指定模糊度以内的键值或者精确匹配值会被实际联接。但是,必须测试每个可能的主要-辅助匹配,这意味着模糊联接过程可能很费时。必须执行的单个测试的数量等于主表中的记录数乘以辅助表中的记录数。

将匹配限制到首个辅助匹配

通过选择仅联接辅助键匹配的第一个实例,可以显著减少处理时间并减小输出结果的大小。启用此选项可指定将每个主键值仅联接到任何匹配辅助键值的第一个实例。

启用该选项在下列任一情况下是适当的:

  • 任一匹配? 您只想知道两个表之间是否存在匹配(精确或模糊),并且您想要避免识别所有匹配所需的处理时间
  • 最多一个匹配您确信对于每个主键值,在辅助表中最多只存在一个匹配

如果您需要输出结果包含主键值和辅助键值之间的所有可能的联接,则启用该选项不适当。

说明

如果您选择仅联接辅助键匹配的第一个实例并且匹配的首个实例恰好是精确匹配,则主键值的任何后续模糊匹配都不会被包括在联接输出表中。

最佳做法

当您准备主要和辅助输入表以及指定模糊度时,请牢记输出表大小和命令性能。

  • 调整数据 请确保只将相关记录包括在主要表和辅助表中。如果某些记录没有得到匹配的机会,请在执行模糊匹配之前过滤掉它们。
  • 测试运行 对于大型数据集,请对一小部分数据执行测试运行,以便更有效地到达模糊匹配算法的合适设置。首先从更谨慎的模糊设置开始,如果需要,则逐步放宽它们。

模糊匹配算法

当您执行模糊联接时,您可以在两个不同的模糊匹配算法之间进行选择:

  • Dice 系数
  • 编辑距离

这些算法完全相互独立工作,并且可能生成稍微不同的结果。一个方法是执行模糊联接两次,每个算法各使用一次,并且比较结果。通常,各个结果集中的一些模糊匹配可能相互重叠,但某些匹配可能是各个结果集所独有的。

模糊度

您需要为每个算法指定模糊度,这可能显著改变结果集的大小和构成。“模糊度”是指两个值匹配的紧密程度。

根据您选择的算法的不同,您可以使用下列设置来控制模糊度:

算法 设置

Dice 系数

  • N 元语法
  • 百分比

编辑距离

  • 距离

请尝试试用不同的模糊度。首先谨慎地进行设置并且生成较小的结果集,然后逐渐放宽设置,直到您开始得到过多明显不是匹配的联接值(误报)为止。

Dice 系数

Dice 系数算法通过测量主键值和辅助键值之间的相似度来工作,相似度的取值范围为 0.0000 到 1.0000。这两个值的 Dice 系数越大,它们就越相似。

编辑距离

编辑距离算法通过以从 0 开始的整数刻度尺来衡量主键值和辅助键值之间的差异度来工作。该刻度尺表示使一个值与另一个值完全相同所需的单字符编辑数量。这两个值之间的编辑距离越大,它们的差异就越大。

步骤

您可以使用键域值的模糊匹配将两个 Analytics 表组合为第三个新表。