2017-07-11 34 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