对于学校作业,我们必须为虚构的运输公司设计和填写数据仓库。我创建了一个包含所有“脏”数据的PSA数据库,现在我正在设计ETL过程。整个过程需要在SSIS中完成,除了一些基本的教程,我对这个程序知之甚少。
我一直在清理某个国家/地区编写错误的表格中的列。我在一列中创建了一个参考表语法错误,在另一列中创建了国家名称的正确格式。在这里,您可以看到知识库表的片段:
在这里你可以看到带有“脏”数据的表格片段:
如何使用SSIS数据流中知识库表中的正确数据搜索和替换“Country”列中的错误数据?我不认为我可以使用模糊查找,因为错误的数据包含国家名称的缩写。
我们不能使用Microsoft DQS,因为这会让我们觉得太容易了......我猜...
提前致谢!
答案 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}}列。如果您的表中没有匹配的变体(重定向到错误流,失败包,指定默认国家/地区等),您将不得不考虑该怎么做。