我有多个数据库,我想将它们存储在一个数据仓库数据库中。我想知道如何设计导入过程来处理多个查找表。
例如,假设我有 5 个数据库都带有查找表 CustomerState。在一个数据库中,它可能看起来像这样:
在另一个数据库中,它可能看起来像这样:
我应该如何在 DW 数据库的企业层处理这个问题?我是否将 SourceSystemId 添加到查找表中,可能是这样的:
然后在我的客户表中使用 pkyCustomerStateId 而不是 CustomerStateId?
我有多个数据库,我想将它们存储在一个数据仓库数据库中。我想知道如何设计导入过程来处理多个查找表。
例如,假设我有 5 个数据库都带有查找表 CustomerState。在一个数据库中,它可能看起来像这样:
在另一个数据库中,它可能看起来像这样:
我应该如何在 DW 数据库的企业层处理这个问题?我是否将 SourceSystemId 添加到查找表中,可能是这样的:
然后在我的客户表中使用 pkyCustomerStateId 而不是 CustomerStateId?
这类事情应该由将数据带入数据仓库的 ETL 过程来处理。这个过程其实就是ETL中的T。
您首先需要做的是定义表的逻辑键列,以便可以在数据库之间等同行的业务含义。您建议的多列键会使事情复杂化,并且实际上并不能解决问题。
对于这个例子,我将定义
CustomerState
为维度中的逻辑键列,当单独的表合并在一起时,该列在结果中将是唯一的,并CustomerStateId
分配了新值。这确保维度主键尽可能窄,这将传递到事实表并使它们也尽可能窄。ETL 过程可能会做这样的事情(假设
CustomerStateId
目标表的列是一个IDENTITY
列):(我使用
MERGE
而不是的原因INSERT
是在其他维度中您可能还需要处理更新;在这种情况下不是因为没有其他列。)然后,事实表加载过程将使用查找机制(SSIS中的Lookup Transformation)从逻辑值到上述语句生成
CustomerState
的新分配的值。CustomerStateid