2017-07-11 40 views
1

我正在使用數據工廠創建暫存區域,問題是無論何時源數據更改,我們都會向臨時表格添加新行。僅保留數據工廠中的最新一行數據

例如,假設我們有如下數據:

ID   Fields    created    edited 
100  ----------  '2017-07-01'   '2017-07-05' 

這將被儲存在我們的臨時表是這樣的:

ID   Fields    created    edited 
    100  ----------  '2017-07-01'   null 
    100  ----------  '2017-07-01'   '2017-07-05' 

選擇最近的一排是昂貴的,我們不」我想要那個。您如何認爲我們可以避免在分期中存儲重複的ID?

我假設在創建管道時,如果ID已經存在於分段中,應該有一種方法來更新數據。
在數據工廠的查詢格式是這樣的:

$$Text.Format('select * from <<table>> where <<column>> >= \'{0:yyyy-MM-dd HH:mm}\' AND <<column>> < \'{1:yyyy-MM-dd HH:mm}\'', WindowStart, WindowEnd) 
+1

你可以做一個MERGE類似[this]的東西(https://docs.microsoft.com/en-us/azure/data-factory/data-factory-invoke-stored-procedure-from-copy-活動)? – wBob

+0

如果存在(從表中選擇1,其中id = @ id)update statement where id = @ id else insert語句 – JayaPrakash

回答

0

我找到了解決我的問題的方法。它是這樣的:

我在我們的數據倉庫中添加了一個臨時表,在將數據插入到臨時表中之前,首先將數據放入這些臨時表中,然後刪除臨時表中已存在的那些表,然後重新插入。通過這種方式,我將始終將最新的數據保留在暫存區域中,並且在連接臨時表以創建DW時不必使用row_number()函數。

我不確定這是否是最好的方法,但它對我有用。

0

在這裏,我想最近的記錄是通過編輯柱認爲,試試這個下面的代碼

;WITH CTE (ID,Fields,created,edited) 
AS 
(
SELECT 100,'------------' ,'2017-07-01', null  UNION ALL 
SELECT 100,'------------ ','2017-07-01','2017-07-05' 
) 
SELECT ID,Fields,created,edited FROM 
(
SELECT *, ROW_NUMBER()OVER(Partition by ID ORDER BY edited DESC) RecentRecord FROM CTE 
)DT 
WHERE DT.RecentRecord=1 

結果

ID Fields   created  edited 
------------------------------------------ 
100 ------------ 2017-07-01 2017-07-05 
+0

感謝您的回答,但這不是我的問題。你有使用數據工廠嗎? – Ariox66