【问题标题】:Azure Data Factory Pipeline run based on parametersAzure 数据工厂管道基于参数运行
【发布时间】:2019-02-12 23:06:25
【问题描述】:

我正在使用 ADF 将数据从 Cosmos DB 复制到 Azure Data Lake。我已经安排它每 24 小时运行一次。由于 ADF 会将所有数据从源复制到接收器,因此我使用 windowStart 和 windowEnd 参数来过滤数据。过滤是在 Cosmos Document DB 中的时间戳上完成的。

要运行管道,我必须手动指定 windowStart 和 windowEnd UTC 时间,这是不可行的。有没有办法自动化这个?我想要的是将 windowStart 时间设置为(计划时间 - 1 天),并将 windowEnd 时间设置为计划时间。这样我可以得到前一天的所有数据。

生成的查询是:

select * from c 
where c.data.timestamp >= '@{formatDateTime(pipeline().parameters.windowStart, 'yyyy-MM-ddTHH:mm:ssZ' )}' 
AND c.data.timestamp < '@{formatDateTime(pipeline().parameters.windowEnd, 'yyyy-MM-ddTHH:mm:ssZ' )}'

如何将 windowStart 和 windowEnd 动态设置为与预定时间相等且 -1 天?

【问题讨论】:

    标签: azure azure-data-factory azure-data-factory-2


    【解决方案1】:

    如果您使用 schedule trigger,请将以下值传递到您的管道中。在您预定的时间使用adddays 功能。 您可以使用 ADF UI 来帮助您编辑/新建触发器。

    "name": "trigger1",
    "properties": {
        "runtimeState": "Stopped",
        "pipelines": [
            {
                "pipelineReference": {
                    "referenceName": "CopyPipeline_9ca",
                    "type": "PipelineReference"
                },
                "parameters": {
                    "windowStart": "@adddays(trigger().scheduledTime, -1)",
                    "windowEnd": "@trigger().scheduledTime"
                }
            }
        ],
    

    【讨论】:

    • 谢谢。我可以通过修改我的源查询来实现它 select * from c where c.data.timestamp >= '@{formatDateTime(addhours(pipeline().TriggerTime, -24), 'yyyy-MM-ddTHH:mm :ssZ' )}' AND c.data.timestamp
    • pipeline().TriggerTime 是一个系统变量。如果效果很好,您不需要像我的回答那样添加自己的参数。
    • @MAK:注意:您实际上不需要通过 formatDateTime 函数运行它,因为 addhours 有一个格式提供程序,例如:"DateToProcess": "@adddays(trigger().scheduledTime, -5, 'yyyy-MM-dd')",
    猜你喜欢
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 2023-01-17
    相关资源
    最近更新 更多