FUZZYJOIN 命令
概念信息
使用模糊匹配将来自两个 Analytics 表的域合并为单个新的 Analytics 表。
语法
FUZZYJOIN {DICE PERCENT 百分比 NGRAM n 元语法长度|LEVDISTANCE DISTANCE 值} PKEY 主键域 SKEY 辅助键域 {FIELDS 主域|FIELDS ALL <EXCLUDE 主域 <...n>>} <WITH 辅助键域|WITH ALL <EXCLUDE 辅助键域 <...n>>> <IF 测试> <OPEN> TO 表名称 <FIRSTMATCH> <WHILE 测试> <FIRST 范围|NEXT 范围> <APPEND>
说明
您不能在本地针对服务器表运行 FUZZYJOIN命令。
您必须完整指定 FUZZYJOIN 命令名称。您不能缩略它。
参数
名称 | 描述 |
---|---|
DICE PERCENT 百分比 NGRAM n 元语法长度 | LEVDISTANCE DISTANCE 值 |
要使用的模糊匹配算法。 DICE 使用 Dice 系数算法
LEVDISTANCE 使用编辑距离算法
|
PKEY 主键域 |
主表中的字符键域或表达式。 您只能指定一个主键域。 |
SKEY 辅助键域 |
辅助表中的字符键域或表达式。 您只能指定一个辅助键域。 |
FIELDS 主域 | FIELDS ALL |
要在联接输出表中包括的来自主表的域或表达式。
说明 如果您想要将主键域包括在联接表中,则必须明确指定它。指定 FIELDS ALL 也会包括它。 |
EXCLUDE 主域 可选 |
仅在使用 FIELDS ALL 执行模糊联接时有效。 要从该命令中排除的一个或多个域。EXCLUDE 使您可以通过排除指定的域优化 FIELDS ALL。 EXCLUDE 必须紧跟在 FIELDS ALL 后面。例如: FIELDS ALL EXCLUDE 域 1 域 2 |
WITH 辅助域 | WITH ALL 可选 |
要在联接输出表中包括的来自辅助表的域或表达式。
说明 如果您想要将辅助键域包括在联接表中,则必须明确指定它。指定 WITH ALL 也会包括它。 |
EXCLUDE 辅助域 可选 |
仅在使用 WITH ALL 执行模糊联接时有效。 要从该命令中排除的一个或多个域。EXCLUDE 使您可以通过排除指定的域优化 WITH ALL。 EXCLUDE 必须紧跟在 WITH ALL 后面。例如: WITH ALL EXCLUDE 域 1 域 2 |
IF 测试 可选 |
一个条件表达式,它必须为真以便处理每个记录。仅对满足条件的那些记录执行该命令。 说明 在应用任何范围参数(WHILE、FIRST、NEXT)之后,仅针对表中的剩余记录评估 IF 条件。 说明 IF 条件可以引用主表、辅助表或者两者。 |
OPEN 可选 |
在命令执行后打开该命令创建的表。仅当该命令创建输出表时有效。 |
TO 表名 |
要将命令结果发送到的位置:
|
FIRSTMATCH 可选 |
请指定每个主键值仅被联接到任何辅助键匹配的第一个实例。 如果第一个实例恰好是精确匹配,则主键值的任何后续模糊匹配都不会被包括在联接输出表中。 如果您省略 FIRSTMATCH,则 FUZZYJOIN 的默认行为是将每个主键值联接到任何辅助键匹配的所有实例。 如果您只想知道两个表之间是否存在匹配(精确或模糊),并且您想要避免识别所有匹配所需的处理时间,则 FIRSTMATCH 是有用的。 如果您确信对于每个主键值,在辅助表中最多只存在一个匹配,您还可以使用 FIRSTMATCH。 |
WHILE 测试 可选 |
一个条件表达式,它必须为真以便处理每个记录。该命令被一直执行到条件的计算结果为假或者到达表的末尾为止。 说明 如果您将 WHILE 与 FIRST 或 NEXT 结合使用,请在达到一个限制时立即记下处理步骤。 |
FIRST 范围 | NEXT 范围 可选 |
要处理的记录数:
请使用范围指定要处理的记录数。 如果您省略 FIRST 和 NEXT,则会默认处理所有记录。 |
APPEND 可选 |
将命令输出附加到现有文件的末尾,而不是覆盖现有文件。 说明 您必须确保命令输出的结构和现有文件完全相同:
Analytics 将输出附加到现有文件,而无论其结构如何。如果输出的结构和现有文件不匹配,则可能生成混乱的、不完整的或不准确的数据。 |
ISOLOCALE 区域设置代码 可选 |
说明 仅在 Unicode 版 Analytics 中可用。 采用语言_国家/地区格式的系统区域设置。例如,要使用加拿大法语,请输入 fr-ca。 使用以下代码:
如果您不使用 ISOLOCALE,则会使用默认系统区域设置。 |
示例
使用模糊匹配联接两个表,以便发现可能还是供应商的员工
下面的示例使用地址作为公共键域(Address 域和 Vendor_Street 域)联接 Empmast 表和 Vendor 表。
FUZZYJOIN 命令创建一个包含精确匹配或者模糊匹配主记录和辅助记录的新表。结果是任何具有相同地址或者类似地址的员工和供应商的列表。
使用 Dice 系数算法执行 FUZZYJOIN
OPEN Empmast PRIMARY
OPEN Vendor SECONDARY
FUZZYJOIN DICE PERCENT 0.8000 NGRAM 2 PKEY Address SKEY Vendor_Street FIELDS Employee_Number First_Name Last_Name Address WITH Vendor_Number Vendor_Name Vendor_Street OPEN TO "Employee_Vendor_Match"
使用编辑距离算法执行 FUZZYJOIN
OPEN Empmast PRIMARY
OPEN Vendor SECONDARY
FUZZYJOIN LEVDISTANCE DISTANCE 5 PKEY Address SKEY Vendor_Street FIELDS Employee_Number First_Name Last_Name Address WITH Vendor_Number Vendor_Name Vendor_Street OPEN TO "Employee_Vendor_Match"
包括所有域
此版本的 FUZZYJOIN 命令在联接输出表中包括主表和辅助表中的所有域。
OPEN Empmast PRIMARY
OPEN Vendor SECONDARY
FUZZYJOIN LEVDISTANCE DISTANCE 5 PKEY Address SKEY Vendor_Street FIELDS ALL WITH ALL OPEN TO "Employee_Vendor_Match"
改进模糊匹配的有效性
下面的示例使用 SORTWORDS( ) 函数改进 Address 域和 Vendor_Street 域之间的模糊匹配的有效性。使用 UPPER( ) 函数可确保大小写不会影响键域值中元素的排序。
OPEN Empmast PRIMARY
OPEN Vendor SECONDARY
FUZZYJOIN LEVDISTANCE DISTANCE 5 PKEY SORTWORDS(UPPER(Address)) SKEY SORTWORDS(UPPER(Vendor_Street)) FIELDS Employee_Number First_Name Last_Name Address WITH Vendor_Number Vendor_Name Vendor_Street OPEN TO "Employee_Vendor_Match"
备注
有关此命令工作方式的详细信息,请参见模糊联接。
区分大小写
FUZZYJOIN 命令不区分大小写,而无论您使用哪种模糊匹配算法。因此,"SMITH" 等效于 "smith".
前导和后继空白
FUZZYJOIN 命令自动除去域中的前导和后继空白,而无论您使用哪种模糊匹配算法。指定主键域和辅助键域后,无须使用 TRIM( ) 或 ALLTRIM( ) 函数。
改进 FUZZYJOIN 的有效性
有三个技巧可以显著提高 FUZZYJOIN 命令的有效性:
- 对主键和辅助键域值中的各个元素进行排序
- 从主键和辅助键域值中移除通用元素
- 协调主键和辅助键域值
这些技巧使您可以使用更严格的模糊设置并仍然可以获得相同的模糊匹配,同时减少误报匹配的数量。您可以单独或者结合使用这些技巧。
对键域值中的各个元素进行排序
SORTWORDS( ) 函数可通过按顺序对主键和辅助键域值中的各个元素进行排序,提高 FUZZYJOIN 命令的有效性。
对元素(如地址的组成部分)进行排序,可使具有相同信息和不同格式的键域值彼此更加相似。更大的相似度可以提高键域值被选择为彼此模糊匹配的可能性。
有关详细信息,请参见SORTWORDS( ) 函数。
要观看提供 SORTWORDS( ) 概览的视频,请参见使用 SORTWORDS( ) 进行模糊匹配(仅限英语)。
说明
对键域值中的元素进行排序最适合于使用编辑距离算法进行模糊联接。
在使用 Dice 系数算法执行模糊联接时对元素进行排序未必有好处。在决定是否要在生产环境中将 SORTWORDS( ) 与 Dice 系数算法结合使用之前测试一组样本数据。
注意
如果您将 SORTWORDS( ) 与 FUZZYJOIN 命令结合使用,则必须将 SORTWORDS( ) 同时应用于要比较的两个字符串或两个域。
从键域值中移除通用元素
OMIT( ) 函数可以通过从主键和辅助键域值中移除 "Corporation" 或 "Inc." 等通用元素或者逗号、句号和 & 符等字符,提高 FUZZYJOIN 命令的有效性。
移除通用元素和标点符号可使模糊匹配仅专注于可能发生有意义差异的键域值部分。
有关详细信息,请参见OMIT( ) 函数。
协调键域值
REPLACE( ) 或 REGEXREPLACE( ) 函数可以通过协调主键和辅助键域值中的相同元素的变体,提高 FUZZYJOIN 命令的有效性。例如,您可以协调 "Street"、"St." 和 "St" 以使用单个值 "St"。
协调元素可使具有相同信息和不同格式的键域值彼此更加相似。更大的相似度可以提高键域值被选择为彼此模糊匹配的可能性。
有关详细信息,请参见REPLACE( ) 函数以了解简单直接的替换,参见REGEXREPLACE( ) 函数以了解更复杂的替换。