基于规则表执行比较运算,实现数据集数据质量校验
数据质量校验实现方案
需求回顾
现有两张表:
- 主数据表:包含
ID、Name1、Name2、Zip1、Zip2字段 - 规则表:定义两条相等校验规则
- R001:校验
Name1与Name2是否相等 - R002:校验
Zip1与Zip2是否相等
- R001:校验
需要输出所有违反规则的记录,每条规则违规单独占一行(同一记录违反多条规则时生成多行),输出字段包含Rule、ID、FieldLeft、FieldRight。
实现代码(SQL)
可以通过UNION ALL分别处理两条规则的校验逻辑,筛选出不符合条件的记录:
-- 处理R001规则:Name1≠Name2的违规记录 SELECT 'R001' AS Rule, ID, 'Name1' AS FieldLeft, 'Name2' AS FieldRight FROM 主数据表 WHERE Name1 != Name2 UNION ALL -- 处理R002规则:Zip1≠Zip2的违规记录 SELECT 'R002' AS Rule, ID, 'Zip1' AS FieldLeft, 'Zip2' AS FieldRight FROM 主数据表 WHERE Zip1 != Zip2;
示例演示
主数据表示例数据
| ID | Name1 | Name2 | Zip1 | Zip2 |
|---|---|---|---|---|
| 001 | 张三 | 张三 | 100000 | 100000 |
| 002 | 李四 | 李五 | 200000 | 200000 |
| 003 | 王六 | 王七 | 300000 | 300001 |
输出结果
| Rule | ID | FieldLeft | FieldRight |
|---|---|---|---|
| R001 | 002 | Name1 | Name2 |
| R001 | 003 | Name1 | Name2 |
| R002 | 003 | Zip1 | Zip2 |
逻辑说明
- 针对每条规则单独编写查询,筛选出字段不相等的记录
- 用
UNION ALL合并两个查询结果,确保每条违规记录单独成行 - 固定填充
Rule、FieldLeft、FieldRight字段的值,与规则表定义保持一致
内容的提问来源于stack exchange,提问作者hbit
相关产品推荐
相关产品推荐

