我正在尝试创建一个数据仓库,我们将从中创建所有业务报告。已经对此有了很多了解,我对如何构建数据仓库有了一个大致的了解。但是,当我开始想知道如何将来自两个单独的OLTP数据库的产品和销售的单个数据存储信息组合在一起时,我遇到了一个问题。
ETL过程如下所示: 1从第一个OLTP数据库表stgProducts传输产品数据 2从表到表的合并产品数据stgProducts dimProducts - 如果产品已更改,则当有新产品添加到新记录时,会更新记录。 3从另一个数据库OLTP表stgProducts传输产品数据 4从表到表的合并产品数据stgProducts dimProducts - 如果产品已更改,则在有新产品添加到新记录时会更新记录。
同样,转移是通过销售数据实现的。
如果我有一个产品表,如何连接两个不同数据库的销售数据?
说到这两个数据库,我的意思是两个不同的ERP系统。一个管理在线销售,另一个管理其他销售。产品的SKU相同,但每个系统的产品ID不同。
答案 0 :(得分:0)
假设您使用星型模式(并非总是最好的方法,BTW),您的产品维度表应该具有DW独有的密钥。因此,SKU 186可能具有特定于DW的密钥1,而SKU 294可能具有特定于DW的密钥2.您的事实表(包含“交易记录”(销售记录?))将具有由多个组成的复合密钥外键列(例如product_key,date_key,location_key等)。
在这种情况下,产品表的外键是特定于DW的产品密钥,而不是源系统SKU。
填充事实表的ETL应在将数据输入时将源系统产品密钥“转换”为特定于DW的产品密钥。
注意:这是填充事实表的一般方法。根据具体要求可能存在差异。
答案 1 :(得分:0)
扩展Bens回答了一点,因为它没有正确回答数据仓库 - 它是一个广阔的,可挖掘的IT领域,有很多思想流派。这是你可以追求的一个方向。
假设: 1)您有2个独立的源数据库,它们都有2个表:Product和Sales 2)单独的源数据库是独立的,并且可能具有冲突的主键数据。 3)您希望对产品和销售表进行版本[1]。这是一个重要的假设,因为主要是事实表没有更新,销售表听起来像是一个很好的静态事实表。你的问题不清楚你是否期望销售变化,所以我会假设你会 4)销售记录只能是1个产品(这不太可能,但是你的问题只提到了2个表格那么糟糕的工作,1-many关系将涉及更多关于桥接表的调整)
仓库设计:
您将需要3个包含以下列的表:
<强> PRODUCT_DIM 强>
SALES DIM - SALES_SK (生成代理主键数据仓库数据库) - SOURCE_SYSTEM_ID (关于记录源自哪个源OLTP数据库的DW特定指示符 - 如果您愿意,可以是字符串) - SALES_NK (来自源系统的销售记录的PK,用于SCD操作) - DATE_FROM (记录有效) - DATE_TO (将活动记录为(当前为null)) - SALE_AMOUNT (源表的产品名称) - 其他列(您可能需要的任何其他销售列)
<强> PRODUCT_SALES_BRIDGE 强> - PRODUCT_SK (复合主键) - SALES_SK (复合主键) - DATE_FROM (记录有效) - DATE_TO (将活动记录为(当前为null))
需要注意的主要事项是SALES和PRODUCT昏暗表中的标识符。
有一个自然键列,用于将每个记录主键值存储为源系统中的确切内容。
由于您声明有多个源系统,因此需要额外的SOURCE_SYSTEM_ID列,以便您可以将多个源系统中的记录与仓库中的等效记录进行匹配。否则,您的第一个源系统中可能有一个ID为13的EGGS产品,另一个系统中的产品名为MILK,ID为13。如果没有额外的SOURCE_SYSTEM_ID,您将永远切断PRODUCT_DIM自然键13的记录。这将在您的仓库中看起来像这样:
PRODUCT_SK SOURCE_SYSTEM_ID PRODUCT_NK .. PRODUCT_NAME
..
14 1 13 .. EGGS
15 2 13 .. MILK
..
桥接表的存在是为了防止每次相关记录发生变化时切换新的SALES或PRODUCT记录。考虑用Red Eggs出售10美元。接下来的数据,Red Eggs产品更名为“Super Red Eggs”。这将导致仓库中红鸡蛋的新PRODUCT记录。如果SALES表包含到PRODUCT_SK的直接链接,则只会因为我们的红鸡蛋有新产品SK而削减新的SALES记录。桥接表将参考完整性引发的新记录从DIMENSION / FACT表移动到桥接表中。这也为数据仓库的新成员提供了额外的好处,他们非常清楚他们正在以与传统RDBMS不同的思维模式运营。
2个自然键列应该可以帮助您解决原始问题,桥接表只是个人偏好并添加了完整性 - 如果您已经有适合您的DW设计,请坚持使用。
[1]生病使用版本指的是您选择的不断变化的维度方法。为了以防万一,大多数人都便宜了,只需将他们的整张桌子打成2个版本