我正在開發一個SSIS項目來構建一個數據倉庫。在緩慢維度更新期間更新計算派生列的最佳方式是什麼?
這是我的簡單的SSIS過程,用於加載維度表(位置)。 位置表包含基於嵌套集的父/子結構(LEFT,RIGHT,LEVEL字段)。 因此,插入過程工作以及更新過程。
然而,我需要爲了存儲父關係填補計算列(PARENT_ID)。 因此,我需要在SQL語句中使用(LEFT,RIGHT和LEVEL列)來查找PARENT_ID值。
這是源表的表結構:
那麼,什麼是在加載過程來填充我的PARENT_ID欄的最好方法? 我應該爲這個過程建立一個專門的數據流嗎?
我可以在派生列組件中使用SQL語句來查找parent_id值嗎?
編輯:這是我的SQL查詢來更新我的父/子結構(parent_id字段)。
UPDATE
L1
SET L1.[PARENT_ID] = (
SELECT TOP 1 L2.ID
FROM [DW].[DimLocation] L2
WHERE L2.[TREE_LEFT_VALUE] < L1.[TREE_LEFT_VALUE] AND L2.[TREE_RIGHT_VALUE] > L1.[TREE_RIGHT_VALUE]
ORDER BY L2.[TREE_RIGHT_VALUE]-L1.[TREE_RIGHT_VALUE] ASC)
FROM [DW].[DimLocation] L1
WHERE [TREE_LEFT_VALUE] > 1
編輯2:這裏是一個圖來表示一組嵌套的結構,以及如何表示它在數據庫中。
因此,每個節點包含分別結合他們的childs TREE_LEFT_VALUE
/TREE_RIGHT_VALUE
值TREE_LEFT_VALUE
和TREE_RIGHT_VALUE
值。
它可以在一個簡單的查詢中查找指定節點的所有子節點。例如,如果我想的「根1」節點的所有孩子,我需要查詢所有節點,其中TREE_LEFT_VALUE
比5
因爲我需要在我的數據倉庫的使用PARENT_ID結構(SSAS項目少超過2 TREE_RIGHT_VALUE
構建一個OLAP多維數據集),我需要通過添加父節點ID來更新PARENT_ID字段。所以,我需要通過使用TREE_LEFT_VALUE
和TREE_RIGHT_VALUE
字段來查詢父節點ID,然後在更新語句中使用結果。
它工作正常,但有沒有更有效的方法來做到這一點?
感謝,
我添加了我的SQL查詢來更新parent_id字段。它工作正常,但有沒有更有效的方法來做到這一點? – K4timini 2014-11-05 14:20:38
我不確定我是否足夠理解表格結構來回答這個問題。理想情況下,你不會有一個子查詢來獲取每行的值。這肯定會減慢速度。如果您提供表結構並解釋記錄如何更明確地相互關聯,那將會有所幫助。即我不知道什麼Tree_left_value意味着什麼。 – 2014-11-05 14:34:52
我希望我的第二次編輯能幫助你理解我的問題。 – K4timini 2014-11-05 15:36:03