【问题标题】:Saving trigger parameters in Azure Data Factory to upsert recently modified rows在 Azure 数据工厂中保存触发器参数以更新插入最近修改的行
【发布时间】:2020-10-31 06:30:03
【问题描述】:

我目前正在尝试将翻转窗口触发器的 windowStartTime 和 windowEndTime 传递到数据流管道的参数中。根据 [this forum][1] 我无法将触发器参数直接传递到管道中,因此使用 [this guide][2] 我需要将以下参数代码块添加到触发器中在 ADF>Manage>Triggers>Trigger code 中将这两个变量传递给参数 myWindowStart 和 myWindowEnd:

{
"name": "trigger5",
"properties": {
    "annotations": [],
    "runtimeState": "Stopped",
    "pipeline": {
        "pipelineReference": {
            "referenceName": "pipeline1",
            "type": "PipelineReference"
        },
        "parameters": {
            "MyWindowStart": {
                "type": "Expression",
                "value": "@{concat('output',formatDateTime(trigger().outputs.windowStartTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
            },
            "MyWindowEnd": {
                "type": "Expression",
                "value": "@{concat('output',formatDateTime(trigger().outputs.windowEndTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
            }
        }
    },
    //redacted
}

但是,当按下“确定”时,代码编辑不保存。当我重新打开代码时,我所做的任何编辑都不显示。

有什么想法吗?


完整上下文:我正在尝试将翻转窗口值传递到查询中,以便根据该行上次修改的时间从数据库中提取行,并将这些行插入到另一个数据库中。

【问题讨论】:

    标签: azure azure-data-factory-2


    【解决方案1】:

    想通了!在下面为任何坚持这一点的人发布。这涉及到passing a system variable to the trigger's parameterpassings parameters from triggers to a dataset

    翻转触发器开始和结束时间必须传递给触发器参数、管道参数、数据流参数、数据源的 SQL 查询,以便仅提取在翻转窗口之间更新的行执行时间框架。这会将最近的事务从一个 SQL 表插入到另一个 SQL 表中。

    管道设置:

    创建 2 个字符串类型的参数。我命名了我的 MyWindowStart 和 MyWindowEnd 并将值分别设置为 '@trigger().outputs.MyWindowStart' 和 '@trigger().outputs.MyWindowEnd'。这需要一些猜测才能正确。

    创建一个数据流活动,该活动最终将具有 2 个参数(“开始”和“结束”,稍后在数据流活动中创建)。

    将'start'和'end'的值分别设置为'@pipeline().parameters.MyWindowStart'和'@pipeline().parameters.MyWindowEnd'的Pipeline Expression。

    Tumbling trigger 设置:

    Pipeline>Trigger>New/Edit>New trigger>select Tumbling Window and other details>OK>Trigger Run Parameters MyWindowStart as '@trigger().outputs.windowStartTime' and MyWindowEnd as '@trigger().outputs.windowEndTime '

    upsert data flow活动中的源数据集设置:

    我在数据流活动中创建了两个“字符串”类型的参数(“开始”和“结束”),并将默认值设置为随机日期值。如果管道将它们的值设置为其他值,则这些默认值将不会传递到查询中。

    查询使用引用数据流参数,用双引号括起来,参数名用'{$ -parameter name-}'

    我花了几天时间才把它弄好,但希望人们觉得这很有用!

    【讨论】:

    • 非常感谢这个带有清晰图片的惊人彻底答案。我现在正试图让这个工作自己工作,我已经尝试了好几个星期(场景略有不同,但概念相同)。希望这次它会起作用,至少我的“语法解析错误”消失了:D
    【解决方案2】:

    有什么想法吗?

    为什么你的编辑没有被保存是因为你的编辑有一些错误。

    直接修改trigger的代码不会显示任何错误,保存失败是ADF的反馈,告诉你编辑错误。

    尝试按照文档查看错误输出:

    https://docs.microsoft.com/en-us/azure/data-factory/parameters-data-flow

    【讨论】:

    • 感谢您的提醒。过去一天我一直在查看您的链接和表达式/系统变量/触发器,但仍然没有 beuno。会继续挖掘。如果您找到一些可能有帮助的资源,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 2022-08-02
    • 2022-08-18
    • 2021-05-24
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    相关资源
    最近更新 更多