从 SSIS 中加载的数据集中过滤掉重复项
Posted
技术标签:
【中文标题】从 SSIS 中加载的数据集中过滤掉重复项【英文标题】:Filter out duplicates from a loaded dataset in SSIS 【发布时间】:2011-11-23 14:21:05 【问题描述】:我在 SSIS 中做一些 ETL 来构建一些维度数据集。其中之一是约会。在为维度生成一组日期时,我可以对日期维度中已有的内容进行查找并重定向任何失败的日期,这些日期被假定为新日期,然后被添加到表中。
问题是我拥有的数据集本身可能包含重复的日期。这将在插入维度表时导致唯一日期键出错。所以我正在寻找一种在 SSIS 管道中加载的数据集中进行过滤的方法。
我可以在初始加载日期时使用 DISTINCT,但在这种情况下,日期是 DATETIME。稍后我需要使用数据转换转换将其转换为 DATE,只需获取日期组件即可。我正在寻找独特的日子,而 DATETIME 的独特日子不会给我。
我不能像以前那样使用 SSIS 查找,因为它需要一个指向数据库的连接管理器。
我可以告诉 OLE DB 目标不要使用批量插入忽略任何错误。然而,这假设唯一的错误是重复的日期。
我对 SSIS 还很陌生,还没有找到可以让我与集合中的其他行进行比较的转换工具。
【问题讨论】:
您是否有权访问强制执行密钥的索引?如果是这样,您可以启用选项IGNORE_DUP_KEY
,它只会丢弃重复的插入而不是生成错误。
当您存储日期时间时,时间分量是归零还是强制为一个公共值?给定 2011-10-10 00:00:00.000
和 2011-10-10 12:12:12.012
进程应该只发送一个 2011-10-10 行。选择哪一个有关系吗?我们可以去掉时间组件吗?
【参考方案1】:
您可以使用排序转换并选择删除重复项,也可以使用聚合转换并仅使用分组依据(这或多或少类似于 DISTINCT)。请注意,这些操作是异步的,这意味着所有行都必须在继续之前进入此任务,而不是同步任务只会在行进来时吃掉并吐出缓冲区。
【讨论】:
以上是关于从 SSIS 中加载的数据集中过滤掉重复项的主要内容,如果未能解决你的问题,请参考以下文章