我正在使用talend来填充数据仓库。我的工作是将客户数据写入维度表和事实表的事务数据。事实表上的替代密钥(P_KEY)是自动提出的。当我插入新客户时,我需要我的事实表来反映相关客户的ID。

正如我提到的,我的p_key是自动启动的,因此我不能仅仅插入p_key的任意值。

有什么想法,我如何将一排插入我的维度表中并仍在事实记录中检索引用的主要键?

更多信息:

如果传入数据未归一化怎么办?例如,我有一个具有以下数据的CSV:

order #   date        total customer# first_name last_name
111       1/2/2010    500    101      John        Smith     
222       1/3/2010    600    101      John        Smith

显然,我希望客户信息出现在维度表中,并在事实表中的交易数据:

dimension
101  john smith

fact
111       1/3/2010
222       1/3/2010

如您提到的,尺寸表的钥匙将自动增加。事实表需要引用此键。您如何设计ETL作业,以便在插入后返回替代密钥?

另外,如果删除客户数据(如上),您如何处理键?

有帮助吗?

解决方案

但是,我可能会误解您的问题:

  1. 事实表可能会或可能没有自动收入的PK,通常在事实表中的PK是几个FKS引用尺寸表的复合材料。

  2. 尺寸表应具有自动插入PK。

  3. 在交易事实到达DW(或至少是事实表)之前,新客户应“降落”到客户尺寸表中。

  4. 尺寸表应具有唯一标识客户的商业键 - 电子邮件,全名 + PIN或类似的商业。

  5. 传入的交易行也应该具有客户业务网络字段 - 这就是我们识别客户的方式。

  6. 在将交易插入事实表之前,请使用BusinessKeke从客户尺寸表查找客户主键。

编辑

如果您的新客户数据与交易捆绑在一起,请找到一种提取客户数据并在交易前将其路由到DW的方法。

更新:

首先加载DimCustomer,决定BusinessKey-因此尺寸看起来像:

CustomerKey = 12345 (auto-incremented)
CustomerBusinessKey = john_smith_101 (must uniquely identify the John Smith)
CustomerFirstName = John
CustomerLastName = Smith

在尺寸加载过程中,您必须将传入的行分离为两个流,即现有和新客户。 “现有客户”流的行更新DIM表(键入1 SCD),而“新客户”流的行被插入。在插入的行中不应有重复的重复。您可以通过将它们插入登台表中并在最终插入尺寸表之前将其插入登台表并在此处删除重复。您还可以提取重复项并将其路由回到加载过程中以更新客户记录;它们可能包含较新的数据 - 例如更新的电话号码或类似的数据。

客户进入后,加载事实。

事实表应该看起来像:

DateKey     (PK)
CustomerKey
OrderNumber (PK)
Total

我已经使用了日期关键的复合主键和订购数字,从而允许不时重置订单编号序列。

在加载过程中,修改事实记录以看起来像:

DateKey CustomerBusinessKey OrderNumber Total
20100201  john_smith_101       111       500
20100301  john_smith_101       222       600

在这一点上,我们需要使用查找来替换尺寸表中的CustomerBusinesskey。因此,在查找之后,流的看起来像:

DateKey CustomerKey OrderNumber Total
20100201 12345       111         500
20100301 12345       222         600

现在可以将其插入到事实表中。

我也做了一些作弊 - 没有从调光atate查找日期键,也没有在事实表中寻找现有行。加载事实表时,您可以在加载前查找现有的(dateKey,OrderNumer)组合,也可以将其保留到主键以再次保护重复的主要键 - 您的选择。在任何情况下,请确保尝试将相同数据重新加载到事实表中的尝试失败。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top