仅保留数据工厂中的最新一行数据
Keep only the most recent row of data in 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)
这里我认为最近的记录被编辑的列考虑,试试下面的代码
;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
我找到了解决问题的办法。它是这样的:
我在我们的数据仓库中添加了一个临时文件 table,在将数据插入 Staging 之前,首先数据进入这些临时文件 tables,我删除了临时文件 table 中已经存在的那些]s 然后做一个新的插入。这样,我将始终在暂存区中保留最新的数据,并且在加入暂存区 table 创建 DW 时,我将不必使用 row_number() 函数。
我不确定这是否是最佳方法,但它对我有用。
我正在使用数据工厂创建暂存区,问题是每当源数据发生变化时,我们都会向暂存表添加新行。
例如,假设我们有以下数据:
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)
这里我认为最近的记录被编辑的列考虑,试试下面的代码
;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
我找到了解决问题的办法。它是这样的:
我在我们的数据仓库中添加了一个临时文件 table,在将数据插入 Staging 之前,首先数据进入这些临时文件 tables,我删除了临时文件 table 中已经存在的那些]s 然后做一个新的插入。这样,我将始终在暂存区中保留最新的数据,并且在加入暂存区 table 创建 DW 时,我将不必使用 row_number() 函数。
我不确定这是否是最佳方法,但它对我有用。