在管道执行之间,如何在Azure data Factory中存储运行时数据?

在管道执行之间,如何在Azure data Factory中存储运行时数据?,azure,azure-data-factory,azure-data-factory-2,azure-data-factory-pipeline,Azure,Azure Data Factory,Azure Data Factory 2,Azure Data Factory Pipeline,我一直遵循Microsoft的增量/增量加载SQL Server数据库中的数据 它使用水印(时间戳)来跟踪自上次以来更改的行。本教程使用管道中的“存储过程”活动将水印存储到Azure SQL数据库中,以便在下次执行中重用 拥有一个Azure SQL数据库只是为了存储一点点元信息(顺便说一句,我的源数据库是只读的),这似乎有些过分了。我宁愿把它储存在Azure的其他地方。也许是在blob仓库里或者别的什么地方 简言之:有没有一种简单的方法来跟踪这类数据,或者我们是否仅限于使用存储过程(或Azure

我一直遵循Microsoft的增量/增量加载SQL Server数据库中的数据

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

拥有一个Azure SQL数据库只是为了存储一点点元信息(顺便说一句,我的源数据库是只读的),这似乎有些过分了。我宁愿把它储存在Azure的其他地方。也许是在blob仓库里或者别的什么地方

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


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

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

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

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


我同意,能够在ADF中为小配置项维护一个小数据集是非常有用的——这可能是向Microsoft提出的一个好建议

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

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

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

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


我同意,能够在ADF中为小配置项维护一个小数据集是非常有用的——这可能是向Microsoft提出的一个好建议

有一种方法可以通过使用复制活动来实现这一点,但在“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(列计数-1)]

如何获取最新水印:

  • 使用GetMetadata活动获取columnCount

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


  • 有一种方法可以通过使用复制活动来实现这一点,但在“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(列计数-1)]

    如何获取最新水印:

  • 使用GetMetadata活动获取columnCount

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