我一直在跟踪微软的教程,以增量/增量方式从Server数据库加载数据。
它使用水印(时间戳)来跟踪自上次以来更改的行。本教程使用管道中的“存储过程”活动将水印存储到Azure SQL数据库中,以便在下一次执行中重用水印。
仅仅为了存储少量的元信息(我的源数据库是只读的),拥有Azure SQL数据库似乎太过分了。我宁愿把它放在Azure的其他地方。也许是在blob储藏室之类的。
简而言之:是否有一种简单的方法来跟踪这类数据,还是仅限于为此使用存储的过程(或Azure函数等)?

发布于 2020-11-24 02:46:02
我遇到了一个非常类似的场景,从我发现你无法在ADF中存储任何水印信息--至少不能以一种您可以轻松访问的方式。
最后,我刚刚创建了一个基本层Azure SQL数据库,将我的水印/配置信息存储在我已经在管道中使用的SQL服务器上。
这方面的好处是,当我的解决方案扩展到多个业务单元,所有业务单元都有不同的数据库时,我仍然可以维护每个业务单元的水印信息,只需添加一列跟踪特定水印信息的BU。
Blob存储确实是一种更便宜的选择,但我发现它需要付出更多的努力,而不仅仅是在现有数据库中使用额外的数据库/表。
我同意能够在ADF中为小配置项维护一个小数据集是非常有用的--这可能是向Microsoft提出的一个很好的建议!
发布于 2020-11-24 09:01:41
有一种方法可以通过使用复制活动来实现这一点,但是在“LookupOldWaterMarkActivity”中获取最新的水印是很复杂的,仅供参考。
数据集设置:

复制活动设置:
源数据集和接收器数据集是相同的。将附加列中的表达式更改为@{activity('LookupNewWaterMarkActivity').output.firstRow.NewWatermarkvalue}

通过这种方式,您可以将水印保存为.txt文件中的列。但是很难通过查找活动获得最新的水印。因为'LookupOldWaterMarkActivity‘的输出将如下所示:
{
"count": 1,
"value": [
{
"Prop_0": "11/24/2020 02:39:14",
"Prop_1": "11/24/2020 08:31:42"
}
]
}密钥的名称由ADF生成。如果您想获得"11/24/2020 08:31:42",则需要获取列计数,然后使用如下表达式:@activity('LookupOldWaterMarkActivity').output.value[0][Prop_(column count - 1)]
如何获取最新水印:

@activity('LookupOldWaterMarkActivity').output.value[0][concat('Prop_',string(sub(activity('Get Metadata1').output.columnCount,1)))]https://stackoverflow.com/questions/64971514
复制相似问题