将事实数据与去重维度记录相匹配
Matching fact data with de-duplicated dimension records
我正在为一个客户开展数据仓库项目,该客户有多个物理位置,每个位置都有相同 LOB 数据库的不同实例。站点之间有很多 "common" 数据,但系统是孤立的,因此概念上指代同一事物的数据在源中具有不同的表示形式。
例如,考虑一个产品类别。每个位置的产品类别列表都是相同的,但自动生成的键会有所不同。当数据被提取、暂存和加载到仓库中相应的产品类别维度 table 时,类别实际上是重复的,因为它们具有不同的源系统,或 "natural" 键。
显然,数据需要去重,但是什么会成为持久化在去重维度记录上的代理键呢?请记住,引用产品类别的数据将使用其来源位置的代理键。因此,如果我有三个不同的位置,我将为相同的产品类别和对应于该产品类别的销售数据提供三个不同的自然键,该产品类别也引用这三个自然键,但最终指的是相同的概念类别。有几种方法可以解决这个问题:
如果我有三个位置,将三个不同的代理键写入单个维度记录。这将使 ETL 过程中的匹配变得简单明了,但它的可扩展性不是很好,因为可以并且很可能会添加额外的位置。对于每个上线的新位置,我都需要向每个维度添加一个额外的自然键字段 table,并使用此类去重复记录。
创建一个查找 table,记录对应维度 table 中每个自然键与其对应代理键之间的映射。我不确定这种方法是否非常标准,也不确定它的可维护性。
任何关于如何处理上述场景的意见都将不胜感激。
我们使用方法 2。想象一下有一天有数百个位置,您会发现方法 1 根本不可能。
方法 2 是可扩展的,并且非常容易维护,因为您的查找 table 只会垂直增长。
我正在为一个客户开展数据仓库项目,该客户有多个物理位置,每个位置都有相同 LOB 数据库的不同实例。站点之间有很多 "common" 数据,但系统是孤立的,因此概念上指代同一事物的数据在源中具有不同的表示形式。
例如,考虑一个产品类别。每个位置的产品类别列表都是相同的,但自动生成的键会有所不同。当数据被提取、暂存和加载到仓库中相应的产品类别维度 table 时,类别实际上是重复的,因为它们具有不同的源系统,或 "natural" 键。
显然,数据需要去重,但是什么会成为持久化在去重维度记录上的代理键呢?请记住,引用产品类别的数据将使用其来源位置的代理键。因此,如果我有三个不同的位置,我将为相同的产品类别和对应于该产品类别的销售数据提供三个不同的自然键,该产品类别也引用这三个自然键,但最终指的是相同的概念类别。有几种方法可以解决这个问题:
如果我有三个位置,将三个不同的代理键写入单个维度记录。这将使 ETL 过程中的匹配变得简单明了,但它的可扩展性不是很好,因为可以并且很可能会添加额外的位置。对于每个上线的新位置,我都需要向每个维度添加一个额外的自然键字段 table,并使用此类去重复记录。
创建一个查找 table,记录对应维度 table 中每个自然键与其对应代理键之间的映射。我不确定这种方法是否非常标准,也不确定它的可维护性。
任何关于如何处理上述场景的意见都将不胜感激。
我们使用方法 2。想象一下有一天有数百个位置,您会发现方法 1 根本不可能。
方法 2 是可扩展的,并且非常容易维护,因为您的查找 table 只会垂直增长。