SSIS 业务密钥重复(多个 LOBS)
SSIS Business Key Duplicates (more than one LOBS)
提前感谢您查看此内容。
我准备了一个数据仓库,并正在使用来自 2 个系统的客户信息填充客户 table。一个系统中的客户与另一个系统中的客户具有相同的业务密钥。
区分这两者的最佳方法是什么,这样我就不会更新不想更新的记录并保持良好的数据完整性。
我想知道系统标志,但我不确定。
所有 suggestions/questions 欢迎。
我个人推荐 IDENTITY 列作为代理键。
正如 Tab Alleman 所说,使用 identity
列作为主键。然后,当我以前遇到过这种情况时,我将两个业务密钥保存在不同的列中,并根据每种情况下相关的密钥进行更新。
通过这种方式,您还可以匹配使用多个系统的用户并查看重叠的地方。
我同意上面的评论 - 'source system' 键是来自源系统的复合键 + 另一个标识实际源系统的字符串或 int。这与前面答案中提到的代理键是分开的。你的维度中确实有两个键。一个是标准的 IDENTITY
代理键 - 没有惊喜。
另一个是复合键,由来自源系统的键和一个标识符(我实际上通常只使用一个字符串)组成,告诉你它来自哪个系统。
所以你的维度看起来像这样:
Customer_SK SRC_Key SRC_System Customer Name
1 5 SAP Jim
2 5 MYOB Joe
- 来自 MYOB 的 ETL 代码 > DW 知道只查看 MYOB 数据
- 来自 SAP > DW 的 ETL 代码知道只查看 SAP 数据
- 您的数据仓库仅使用 Customer_SK 代理键
随着 DW 的开发和新源系统的引入,您只需不断添加 SRC_Systems
你 可以 按照另一个答案中的建议将它们放在不同的列中,但你最终会得到这个:
Customer_SK SRC_Key_SAP SRC_Key_MYOB Customer Name
1 5 NULL Jim
2 NULL 5 Joe
这似乎有点浪费,每次新系统上线时都需要添加一列。
重要的问题是:两个源系统中是否存在相同的客户?这种设计实际上允许跨行合并。
还要绝对确保在 SRC_Key
、SRC_System
上设置唯一约束,因为这有助于提高性能、确保完整性并自行记录密钥。
提前感谢您查看此内容。
我准备了一个数据仓库,并正在使用来自 2 个系统的客户信息填充客户 table。一个系统中的客户与另一个系统中的客户具有相同的业务密钥。
区分这两者的最佳方法是什么,这样我就不会更新不想更新的记录并保持良好的数据完整性。
我想知道系统标志,但我不确定。
所有 suggestions/questions 欢迎。
我个人推荐 IDENTITY 列作为代理键。
正如 Tab Alleman 所说,使用 identity
列作为主键。然后,当我以前遇到过这种情况时,我将两个业务密钥保存在不同的列中,并根据每种情况下相关的密钥进行更新。
通过这种方式,您还可以匹配使用多个系统的用户并查看重叠的地方。
我同意上面的评论 - 'source system' 键是来自源系统的复合键 + 另一个标识实际源系统的字符串或 int。这与前面答案中提到的代理键是分开的。你的维度中确实有两个键。一个是标准的 IDENTITY
代理键 - 没有惊喜。
另一个是复合键,由来自源系统的键和一个标识符(我实际上通常只使用一个字符串)组成,告诉你它来自哪个系统。
所以你的维度看起来像这样:
Customer_SK SRC_Key SRC_System Customer Name
1 5 SAP Jim
2 5 MYOB Joe
- 来自 MYOB 的 ETL 代码 > DW 知道只查看 MYOB 数据
- 来自 SAP > DW 的 ETL 代码知道只查看 SAP 数据
- 您的数据仓库仅使用 Customer_SK 代理键
随着 DW 的开发和新源系统的引入,您只需不断添加 SRC_Systems
你 可以 按照另一个答案中的建议将它们放在不同的列中,但你最终会得到这个:
Customer_SK SRC_Key_SAP SRC_Key_MYOB Customer Name
1 5 NULL Jim
2 NULL 5 Joe
这似乎有点浪费,每次新系统上线时都需要添加一列。
重要的问题是:两个源系统中是否存在相同的客户?这种设计实际上允许跨行合并。
还要绝对确保在 SRC_Key
、SRC_System
上设置唯一约束,因为这有助于提高性能、确保完整性并自行记录密钥。