参照表清洗
案例说明
在很多场景下,如更正地址信息等,需要访问外部的主数据或参照数据(或字典表)。基础数据类的应用一般都使用这些数据,如显示出标准的国家名和州名。但很多其他类的应用,数据并不规范。
例如,在某客服系统中,只能通过文本输入的方式输入产品信息。为了清理这些数据,就需要把文本方式输入的产品名称和主数据里的产品名称进行匹配,主数据里的产品名称是最完整和标准的。最常用的使用主数据的场景就是做地址更正。通常这些地址主数据都是使用订阅方式才能得到的,某些公司维护和销售这些地址主数据。
参照表有很多用途,一个最常见的用途就是做数据的查询和检验。提供一个输入字段,如果输入字段里的值没有匹配上,就给 对应的数据行做一个错误标志。因为只需要找出错误的数据,所以返回的数据都是有限的错误数据。为了提高成功查询的比例,在做查询之前,最好先使用其他步骤清洗数据。我们使用城市和邮政编码查询做个例子。几乎所有国家都有邮政编码体系,邮政编码连接到区域、城市或特定的街道(如荷兰)。德国的邮政编码体系是世界上最精准的,通过邮政编码和门牌号就能定位到一个唯一的地址。但人们输入邮政编码时,有时会犯错误,所以要检验邮政编码和地址是否匹配。
使用参照表清洗地址信息
本小节将介绍如何使用流查询来判断地址和邮政编码是否匹配,具体操作如下:
- 新建转换,将自定义常量数据拖至画布,使用该组件生成数据。双击组件,步骤名称填入“SourceData”,在“元数据”中先定义【ID】、【Name】、【Address】、【PostalCode】和【City】五列并选择好数据类型,如下图所示:

- 选择“数据”标签,输入如下图所示的三条数据:

- 第一个清洗步骤就 是从邮政编码里提取数字。将计算器组件拖至画布,双击组件,步骤名称填入“getPC4”,在计算里选择“Return only digits from string A”,把【PC4】作为字段 A,新增加一个字段保存这些数字,字段名使用像【PC4】这样有业务含义的字段名,具体配置如下图:

- 使用自定义常量数据来模拟一个查询的参照表,将自定义常量数据拖至画布,双击组件,步骤名称填入“PC4”,插入如下图所示字段:

- 选择“数据”标签,输入如下图所示数据:

- 根据【PC4】字段里的四位数字,使用流查询步骤从参照表中查询城市名称。将流查询拖至画布,并且把“PC4”和“getPC4”步骤都连接到流查询组件,双击组件,按下图配置:

流查询从参照表也就是PC4步骤中查询数据,流查询步骤会根据设置的关键字段在参照表中查询对应的值(【City】字段)并将结果返回到新增的字段【RefCity】中。
在实际应用场景中,可能要查询的数据在参照表中不存在。为了后面再处理这些未被查询到的数据,建议设置一个容易识别的默认值,如设置的默认值的前缀和后缀都是***。这样可以在检查数据的时候比较容易找到这些异常数据,而且查询后在模糊匹配原始输入的城市名时,这个默认值不会和原来的任何城市名有相似度
- 接下来进行的模糊匹配的目的主要是为了检查一些拼写或完整性错误,需要再使用另一个计算器步骤。将计算器组件拖至画布,双击组件,步骤名称为“Compare Cities”,把【City】和【RefCity】作为字段 A 和字段 B,使用 Jaro-Winkler 匹配算法,计算选择“JaroWinkler similitude between String A and String B”,新生成的字段命名为【cityscore】,具体配置如下:

- 将 空操作(什么也不做) 组件拖至画布,并按顺序连接,选择主输出步骤连接线类型。完整转换如下图所示:

- 运行转换,结果如下图所示:

- 选中 空操作(什么也不做) 组件, 右击并选中