2010-03-26 36 views
1

我正在使用Talend來填充數據倉庫。我的工作是將客戶數據寫入維度表並將事務數據寫入事實表。事實表上的代理鍵(p_key)是自動遞增的。當我插入新客戶時,我需要我的事實表來反映相關客戶的ID。ETL操作 - 返回主鍵

正如我所提到的,我的p_key是auto auto_incrementing,所以我不能只爲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作業,以便插入後返回代理鍵?

此外,如果客戶數據被刪除(如上),您將如何處理密鑰?

+0

什麼是您的倉庫使用的RDBMS? –

回答

4

我可能誤會你然而問題:

  1. 事實表可能會或可能不會有自動遞增的PK,通常在事實表中的PK是幾個FKS引用維度表的複合。

  2. 維度表應該有一個自動遞增的PK。

  3. 在交易事實達到DW(或至少事實表)之前,新客戶應該「登陸」到客戶維度表中。

  4. 維度表應該有一個BusinessKey,它可以唯一標識一個客戶 - 如電子郵件,全名+ pin或類似的。

  5. 傳入交易行也應該有客戶BusinessKey字段 - 這就是我們如何識別客戶。

  6. 在將事務插入事實表之前,使用BusinessKey查找客戶維度表中的客戶PrimaryKey。

編輯

如果你的新客戶數據與交易捆綁,找到一種方法,客戶數據和路由其提取到DW未來的交易。

UPDATE:

負載dimCustomer第一,決定的businessKey - 這樣的尺寸看起來像:

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

在尺寸加載過程中,你必須隔離傳入行詮釋兩個流,現有的和新客戶。來自「現有客戶」流的行將更新暗淡表(類型1 SCD),而插入「新客戶」流中的行。在正在插入的行的流中不應有重複;您可以通過將它們插入登臺表並在最後插入維表之前刪除重複項來完成此操作。您還可以提取重複項並將其路由回加載過程以更新客戶記錄;他們可能包含更新的數據 - 如更新的電話號碼或類似信息。

客戶一旦進入,加載事實。

事實表應該是這個樣子:

DateKey  (PK) 
CustomerKey 
OrderNumber (PK) 
Total 

我已經使用了DateKey和訂單編號的複合主鍵,允許訂單號序列從時間重置時間。

在加載過程中,修改的事實記錄看起來是這樣的:

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

在這一點上,我們需要從使用查找維度表中CustomerKey更換CustomerBusinessKey。因此,在查找後流將如下所示:

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

這現在可以插入到事實表。

我也欺騙了一下 - 沒有從dimDate中查找日期鍵,也沒有查找事實表中的現有行。加載事實表時,您可以在加載之前查找現有的(DateKey,OrderNumer)組合,也可以將其保留至主鍵以保護重複項 - 您的選擇。在任何情況下,確保嘗試將相同的數據重新加載到事實表中失敗。

+0

Damir,請參閱更新信息。 – user302254

+0

謝謝達米爾。你教了我一噸。 – user302254

+0

這裏沒有聲望,所以我不能「投票」。 – user302254