这项工作是人员人口统计匹配/合并。
我收到了人员人口统计信息,需要确定它是否与数据集中现有的人员匹配。我得到了以下数据;
NAME_LAST VARCHAR2(40),
NAME_FIRST VARCHAR2(40),
NAME_MIDDLE VARCHAR2(40),
NAME_MAIDEN VARCHAR2(40),
RESIDENCE_ADDRESS VARCHAR2(60),
RESIDENCE_CITY VARCHAR2(50),
RESIDENCE_STATE VARCHAR2(2),
RESIDENCE_ZIP VARCHAR2(9),
RACE VARCHAR2(2),
DATE_OF_BIRTH DATE,
GENDER VARCHAR2(1),
TELEPHONE VARCHAR2(10),
SSN VARCHAR2(9)
传入和现有数据可能存在任何/所有字段的排版错误。我编写了一个概率算法,该算法将获取现有记录、传入记录并相当好地对它们的相似性进行评分(99.99%+)。
问题在于性能。两条记录的匹配相当快,但我需要匹配的数据集目前有超过 390 万行。所以显然我不能尝试匹配数据集中的所有记录。
解决此问题的常用方法是使用确定性匹配对有限的数据子集进行限制搜索(分块)。姓名字段使用 Soundex 和双变音位“散列”,DOB 分为年份和 MMDD 段,这种分块产生了良好的结果,但除非我撒下大网,否则我会错过一些匹配。如果我撒下大网,性能就会下降。
所以问题是;
- 除了双重变音位和 soundex 之外,我还可以对适合精确或范围匹配的数据元素进行哪些类型的“散列”,从而产生可能包含“最佳”匹配的小数据子集?
- 是否有更好的方法来创建适合匹配的数据结构?
数据包含在 Oracle DB 19c 中,我所使用的主要语言是 PL/SQL。