2016-12-02 67 views
2

在本地SQL Server数据库中,我有许多表在其中插入一系列商店的各种销售数据。我想通过Data Factory和一个本地数据管理网关,每隔15分钟将这些数据“收获”到Azure。很显然,我不想每隔15分钟复制全部表数据,但只能复制上次获取后插入的行。 据我所见,documentation建议为此使用数据“切片”。但是,据我所见,这些切片需要在从其中获取数据的表上存在时间戳(例如日期时间)列。使用Azure数据工厂进行增量数据传输

  1. 我可以在没有这样的时间戳列的情况下执行“delta”提取(即只提取自上次提取后插入的行)吗?我可以使用顺序整数列吗?甚至根本没有增量列?
  2. 假设最后一个切片从08:15到08:30有一个窗口。现在,如果数据库服务器上的时钟稍微落后于Azure时钟,那么它可能会添加一些行,其中时间戳被设置为08:29 之后已提取切片,并且在下一个切片时不会包含这些行(08:30至08:45)被提取。有没有一种聪明的方法来避免这个问题?将切片窗口移到过去几分钟可以将风险降至最低,但不能完全消除。
+0

要计算时钟差异,可以在活动的策略对象上设置“延迟”。 –

回答

0

将Azure数据工厂排除在等式之外。你如何安排将三角洲转移到目标系统?我认为你有几个选择:

  1. 添加日期创建/更改列到源表。写入参数化查询以仅提取新值或修改值。 ADF利用时间片和system variables支持这种情况。您可以使用存储过程(根据here)以及跟踪最后一次发送ID的表执行此操作。
  2. 在源系统上使用Change Data Capture(CDC)。这将允许您通过CDC功能访问增量。将它们包装在一个proc中,并与系统变量一起调用,与上例类似。
  3. 始终传输所有数据,例如传输到目标上的登台表。使用delta代码EXCEPTMERGE来确定记录有什么变化;显然对于大容量并不理想,但这对于小容量是有效的。

HTH

0

我们计划增加这个功能集成到ADF。它可能从顺序整数列开始,而不是时间戳。你能否让我知道顺序整数列是否有帮助?

+0

是的,这会有很大的帮助。 – someName