在 Kettle 里使用参照表进行数据校验(流查询实现)

本文介绍在 Kettle 里使用参照表进行数据校验的方法。以城市和邮政编码查询为例,先从邮政编码提取数字,用流查询从参照表查城市名,设置查询失败默认值。再用 Jaro - Winkler 匹配算法检查,最后做相反校验判断错误所在。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        参照表一个常见的用途就是做数据的查询和检验。提供一个输入字段,如果输入字段里的值没有匹配上,就给对应的数据行做一个错误标志。下面使用城市和邮政编码查询做个例子,演示如何使用计算器步骤和查询步骤来判断地址和邮政编码是否匹配。完整的转换如下图:

        首先,需要一些输入数据,本例使用了“自定义常量数据”步骤,并添加一些测试数据作为输入,如下图:

        第一个清洗步骤就是从邮政编码里提取数字,要使用计算器步骤。在计算器步骤选择“Return only digits from string A”,新增加一个字段保存这些数字,字段名使用像 PC4_1 这样有业务含义的字段名。然后就需要一个参照表。这里也是用“自定义常量数据”步骤来模拟一个参照表,如下图:

        根据 PC4_1 字段里的四位数字,再使用“流查询”步骤从参照表中查询城市名称。为了后面再处理没有查询到的数据,建议在查询失败时,使用一个容易识别的默认值,下图显示了完整的流查询步骤,这里设置的查询失败的默认值是“***unknown***”。

        这里设置的默认值的前缀和后缀都是***,这样设置有两个目的:首先,检查数据的时候比较容易找到这些异常数据;其次,查询后在模糊匹配原始输入的城市名时,这个默认值不会和原来的任何城市名有相似度。后面模糊查询的目的主要是为了检查一些拼写或完整性错误。再使用另一个计算器步骤,把 City 和 RefCity 作为字段 A 和字段 B,使用 Jaro-Winkler 匹配算法,把新生成的字段命名为 cityscore。此时预览数据,可以看到如下图所示的结果。

        从数据里还不能判断出错误出在哪里:是邮政编码对了城市名错了?还是城市名对了邮政编码错了?为了得到结论,还要做一次相反的校验,“相反”校验是指根据城市名称再去参照表里找邮政编码,然后再和原始数据的邮政编码比较,如果邮政编码非常接近,就可以得出结论,是邮政编码拼写错误。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值