仅保留数据工厂中最新的数据行

时间:2017-07-11 10:40:39

标签: sql-server duplicates etl azure-data-factory

我正在使用数据工厂来创建我们的临时区域,问题是每当源数据发生变化时,我们都会向登台表添加一个新行。

例如,假设我们有以下数据:

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)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我找到了解决问题的方法。它是这样的:

我在我们的数据仓库中添加了一个临时表,在将数据插入Staging之前,第一个数据进入这些临时表,我删除了已经存在于临时表中的那些,然后进行全新的插入。通过这种方式,我将始终将最新的数据保存在暂存区域中,并且在连接临时表以创建DW时,我不必使用row_number()函数。

我不确定它是否是最佳方法,但它适合我。