插入时的 SSIS 错误 - 维度表中的新主键时出错

Posted

技术标签:

【中文标题】插入时的 SSIS 错误 - 维度表中的新主键时出错【英文标题】:SSIS Error on insertion - Error when new primary keys in Dimension table 【发布时间】:2019-08-16 18:03:09 【问题描述】:

我每个月使用 SSIS 将一堆大文件引入一个表中,然后我将记录插入到 SQL Server 表中。我的事实表是当月发生的实际金融交易。它看起来像:

事实交易

'Acct Number'    'Product Number'  'Total Value'
000001             1A                 1000            
000002             1A                 2000            
000001             3B                 3000             

我想根据帐户表中的一些手动生成的信息来跟踪此信息,其中“Acct Number”是 Dim Table 中的主键

DimAcct

 'Acct Number'    'Acct Name'  'Acct Type'
   000001             Sales         Revenue               
   000002             Returns       Revenue (Contra)

我的流程是: 1)清除事务表 2)重新加载所有交易,包括任何新的或更正的东西 3)通过Join等进行分析

当我在新的一个月去运行表时,我在 SSIS 中收到以下错误:

"The INSERT statement conflicted with the FOREIGN KEY constraint
"FK_GLTransaction_List_Master_DimAccount". The conflict occurred in 
database "GLTransactions", table "dbo.DimAccount", column 'Acct_Number'.".

我猜这是因为在 Transactions 中创建并使用了新帐户,但我没有手动更新我的 Dim 文件,也没有关于它们的警告。这种情况每个月都会发生,因为当他们在自己的账户中找到要单独跟踪的新会计项目时,会添加新的交易账户。我还手动更新表以添加几个帐户。有没有办法避免这种情况,或者更好的是,在 SSIS 运行之前/期间我应该做什么来处理这些新帐户并避免错误?

【问题讨论】:

嗯,你看过FK_GLTransaction_List_Master_DimAccount吗?错误消息告诉您发生了什么。还有什么要知道的?在填充事实表之前,您必须填充 DimAcct 表。 【参考方案1】:

您收到的消息告诉您,在您尝试加载到事实表中的数据中,至少有一条记录引用了维度表中不存在的记录。 你如何加载维度表?您是否仅在运行事实加载之前加载它?如果是这种情况,您应该考虑管理所谓的“推断维度”,即在加载事实表之前您不知道的维度。这种情况也被称为“早期到达的事实”。

因此,您应该扫描您尝试加载的事实,查找不在您的维度表中的维度记录。然后,您将在维度表中插入这些记录并将其标记为推断。在这个阶段,您将加载事实。

请注意,将这些记录标记为“推断”将使您能够在以后细化维度记录。 假设您将插入一个推断帐户,您只知道帐号(业务密钥)但不知道其他信息,例如帐户描述等......您可以稍后更新这些信息。

请注意,在 SSIS SCD 组件中,您可以定义适当的推断维度管理。

希望这会有所帮助。

【讨论】:

正是我正在寻找的东西,但作为一名新的兼职 DBA 甚至无法用我的语言查找我需要的内容 - 搜索让我无处可去。我将详细了解如何执行此操作,然后将其应用于我的模型以捕捉这些新帐户的滚动。【参考方案2】:

您提到您只是手动插入维度表,需要更改。 作为 SSIS 流程的第一步,您应该在帐户维度中将所有新帐户作为“新/未知”插入。 然后,您将获得一份打印这些新帐户的报告,并且您将手动或以其他方式更新这些帐户以包含正确的数据。 你可以阅读更多关于可能的解决方案:https://www.matillion.com/blog/late-arriving-dimension/

【讨论】:

这个链接对理解这个主题非常有帮助。正如我所说,我不知道问题的名称。

以上是关于插入时的 SSIS 错误 - 维度表中的新主键时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何为特定的新主键记录插入默认值记录?

使用ssis导入文本文件时如何插入主键

SSIS:特定查找的奇怪问题

如何使用 SSIS 将多个表中的数据插入到多个表中?

SSIS 2012 - 插入新行,忽略现有行

SSIS包瓶颈插入记录