繁体   English   中英

如何在管道执行之间将运行时数据存储在 Azure 数据工厂中?

[英]How do I store run-time data in Azure Data Factory between pipeline executions?

我一直在关注 Microsoft 的教程,以从 SQL Server 数据库增量/增量加载数据。

它使用水印(时间戳)来跟踪自上次以来更改的行。 本教程使用管道中的“存储过程”活动将水印存储到 Azure SQL 数据库,以便下次执行时可以重复使用。

拥有一个 Azure SQL 数据库来存储那一点点元信息似乎有点过分(顺便说一下,我的源数据库是只读的)。 我宁愿将它存储在 Azure 中的其他地方 也许在 blob 存储或其他地方。

简而言之:有没有一种简单的方法来跟踪这种类型的数据,或者我们是否仅限于使用存储过程(或 Azure 函数等)?

在此处输入图片说明

我遇到了一个非常相似的场景,我发现您无法在 ADF 中存储任何水印信息 - 至少不能以您可以轻松访问的方式存储。

最后,我刚刚创建了一个基本层 Azure SQL 数据库,将我的水印/配置信息存储在我已经在管道中使用的 SQL 服务器上。

这样做的好处是,当我的解决方案扩展到多个业务部门,所有业务部门都具有不同的数据库时,我仍然可以通过简单地添加一个列来跟踪每个 BU 特定水印信息用于哪个 BU 来维护每个业务部门的水印信息。

Blob 存储确实是一个更便宜的选择,但我发现它比仅在现有数据库中使用额外的数据库/表需要更多的努力。

我同意能够在 ADF 本身中为小型配置项维护一个小型数据集真的很有用 - 这可能是向 Microsoft 提出的一个好建议!

有一种方法可以通过使用复制活动来实现这一点,但是在'LookupOldWaterMarkActivity'中获取最新水印很复杂,仅供参考。

数据集设置:

在此处输入图片说明

复制活动设置:

源数据集和汇数据集是相同的。 将附加列中的表达式更改为@{activity('LookupNewWaterMarkActivity').output.firstRow.NewWatermarkvalue}

在此处输入图片说明

通过这个,您可以将水印保存为 .txt 文件中的列。 但是很难通过Lookup 活动获得最新的水印。 因为您的 '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)]

获取最新水印的方法:

  1. 使用 GetMetadata 活动获取 columnCount 在此处输入图片说明

  2. 使用这个表达式: @activity('LookupOldWaterMarkActivity').output.value[0][concat('Prop_',string(sub(activity('Get Metadata1').output.columnCount,1)))]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM