Azure数据工厂参数

时间:2019-09-25 08:24:16

标签: azure azure-data-factory

我正在尝试将本地SQL服务器上的数据加载到VM上的Sql Server。我每天都要做。同样,我创建了一个触发器。触发器正在正确插入数据。但是现在,我需要为目标列中的每次运行在目标列中插入triggerID。

我不知道我在做什么错误。我发现很多博客都在同一博客上,但是当我们从blob而非sql server中提取数据时,所有博客都具有信息。

我试图像这样插入相同的值,但是它给出了错误。 “活动复制数据1失败:请仅选择三个属性“名称”,“路径”和“普通”之一,以引用“映射”属性下“源”和“接收器”的列。“ 管道详细信息。请建议

{
    "name": "pipeline1",
    "properties": {
        "activities": [
            {
                "name": "Copy Data1",
                "type": "Copy",
                "dependsOn": [],
                "policy": {
                    "timeout": "7.00:00:00",
                    "retry": 0,
                    "retryIntervalInSeconds": 30,
                    "secureOutput": false,
                    "secureInput": false
                },
                "userProperties": [],
                "typeProperties": {
                    "source": {
                        "type": "AzureSqlSource"
                    },
                    "sink": {
                        "type": "SqlServerSink"
                    },
                    "enableStaging": false,
                    "translator": {
                        "type": "TabularTranslator",
                        "mappings": [
                            {
                                "source": {
                                    "name": "Name",
                                    "type": "String"
                                },
                                "sink": {
                                    "name": "Name",
                                    "type": "String"
                                }
                            },
                            {
                                "source": {
                                    "type": "String",
                                    "name": "@pipeline().parameters.triggerIDVal"
                                },
                                "sink": {
                                    "name": "TriggerID",
                                    "type": "String"
                                }
                            }
                        ]
                    }
                },
                "inputs": [
                    {
                        "referenceName": "AzureSqlTable1",
                        "type": "DatasetReference"
                    }
                ],
                "outputs": [
                    {
                        "referenceName": "SqlServerSQLDEV02",
                        "type": "DatasetReference"
                    }
                ]
            }
        ],
        "parameters": {
            "triggerIDVal": {
                "type": "string"
            }
        },
        "annotations": []
    }
}

我希望每次执行触发器时,都应将TriggerID填充到目标列TriggerID中。

1 个答案:

答案 0 :(得分:0)

首先,请参见copy activity column mapping中的限制:

  • 源数据存储区查询结果的列名称为 在输入数据集“结构”部分中指定。
  • 接收器数据存储(如果具有预定义的架构)没有列 在输出数据集“结构”部分中指定的名称。
  • 接收器的“结构”中的更少列或更多列 数据集比映射中指定的数据量大。
  • 重复的映射。

所以,我不认为您可以进行数据传输以及触发器,但触发器ID不在源列中。我的想法是:

1。首先使用Set Variable活动获取触发器ID值。

enter image description here

2。然后连接复制活动并将值作为参数传递。

3。在复制活动的接收器中,可以在将行插入表之前调用存储过程以将触发器ID与其他列组合。更多详细信息,请参见此document