在没有DQS的SSIS中使用知识库进行数据清理

时间:2018-04-05 13:23:40

标签: sql-server ssis etl

对于学校作业,我们必须为虚构的运输公司设计和填写数据仓库。我创建了一个包含所有“脏”数据的PSA数据库,现在我正在设计ETL过程。整个过程需要在SSIS中完成,除了一些基本的教程,我对这个程序知之甚少。

我一直在清理某个国家/地区编写错误的表格中的列。我在一列中创建了一个参考表语法错误,在另一列中创建了国家名称的正确格式。在这里,您可以看到知识库表的片段:

enter image description here

在这里你可以看到带有“脏”数据的表格片段:

enter image description here

如何使用SSIS数据流中知识库表中的正确数据搜索和替换“Country”列中的错误数据?我不认为我可以使用模糊查找,因为错误的数据包含国家名称的缩写。

我们不能使用Microsoft DQS,因为这会让我们觉得太容易了......我猜...

提前致谢!

2 个答案:

答案 0 :(得分:2)

听起来像你在思考这个问题。使用标准查找并从知识库表中获取更正(如果存在),如果存在,则使用更正,如果没有,则使用原始国家/地区名称。没有模糊查找,没有LIKE运算符,只是一个等式检查。

答案 1 :(得分:0)

首先确保Error列是唯一的。您可能希望删除区分大小写的变体,并使用不区分大小写的整理声明列,因此您不必为每个可能的错误添加大写字母的所有变体。

-- "CI" means case insensitive, "AI" means ascent insensitive
ALTER TABLE CountryVariations ALTER COLUMN Error VARCHAR(100) COLLATE Modern_Spanish_CI_AI 

删除已插入的重复项:

;WITH Duplicates AS
(
    SELECT
        C.Error,
        C.Country,
        RepeatRanking = ROW_NUMBER() OVER (PARTITION BY Error ORDER BY Error)
    FROM
        CountryVariations AS C
)
DELETE D FROM
    Duplicates AS D
WHERE
    D.RepeatRanking > 1

然后在SSIS包中使用经典的LookUp组件,将源Country值与Error表中的CountryVariations列结合使用,并返回更正后的标准{ {1}}列。如果您的表中没有匹配的变体(重定向到错误流,失败包,指定默认国家/地区等),您将不得不考虑该怎么做。