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

Posted

技术标签:

【中文标题】在没有 DQS 的 SSIS 中使用知识库进行数据清理【英文标题】:Data cleansing with a knowledge base in SSIS without DQS 【发布时间】:2018-04-05 13:23:39 【问题描述】:

对于一项学校作业,我们必须为一家虚构的航运公司设计和填充一个数据仓库。我用所有“脏”数据制作了一个 PSA 数据库,现在正在设计 ETL 过程。整个过程需要在 SSIS 中完成,除了一些基础教程之外,我对这个程序的了解非常有限。

我被困在清理表格中某些国家/地区书写不正确的列的过程中。我制作了一个参考表,其中一列是语法错误,另一列是国名的正确格式。这里可以看到知识库表的一个sn-p:

在这里您可以看到带有“脏”数据的表的 sn-p:

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

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

提前致谢!

【问题讨论】:

你可以做的是:通过简单的连接将错误数据加入另一个表中。 如果您特别想使用 SSIS,请在 Id 列上使用合并转换,使用查找来更新数据。在 SSMS 中使用合并脚本更简单 参考这个***.com/questions/44928524/… 【参考方案1】:

在我看来你想多了。使用标准查找并从知识库表中获取更正(如果存在),如果存在则使用更正,或者如果没有则使用原始国家/地区名称。没有模糊查找,没有 LIKE 运算符,只有相等检查。

【讨论】:

【参考方案2】:

首先确保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 值与 CountryVariations 表中的 Error 列连接起来,并返回更正后的标准 Country 列。当您的表中没有匹配的变体时,您必须考虑该怎么做(重定向到错误流、失败包、分配默认国家/地区等)。

【讨论】:

以上是关于在没有 DQS 的 SSIS 中使用知识库进行数据清理的主要内容,如果未能解决你的问题,请参考以下文章

sql2012 ssis有啥用途

vs2010 如何将新建的ssis包布署到SQL Server呢

ssis包建好可以运行,但是放到job中就报错,怎么回事

DDR3中DQS是啥意思?

如何在ssis表达式语言中进行格式表达

使用ssis包进行数据入库和加载数据