ADF元数据驱动复制任务添加额外列的正确语法咨询
我们已在Azure Data Factory(ADF)中搭建元数据驱动的复制任务,元数据存储于数据库内。现需为部分表添加以当前UTC日期为值的额外列。
在常规复制任务中,以下语法可实现需求并得到预期结果:
"additionalColumns": [ { "name": "_IngestionDateUtc", "value": { "value": "@utcnow()", "type": "Expression" } } ],
但将该配置添加至元数据表的CopySourceSettings时,运行管道出现如下错误:
ErrorCode=UserErrorInvalidValueInPayload,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Failed to convert the value in 'value' property to 'System.String' type. Please make sure the payload structure and value are correct.,Source=Microsoft.DataTransfer.DataContracts,''Type=System.InvalidCastException,Message=Object must implement IConvertible.,Source=mscorlib,'
若修改为以下语法,结果不符合预期:
"additionalColumns": [ { "name": "_IngestionDateUtc", "value": "@utcnow()", "type": "Expression" } ],
正确语法及说明
在元数据驱动的场景中,additionalColumns的配置需要调整为直接将表达式字符串作为value的值,无需嵌套的结构,正确配置如下:
"additionalColumns": [ { "name": "_IngestionDateUtc", "value": "@utcnow()" } ]
原因说明
- 常规复制任务的UI/JSON配置支持嵌套的
value+type结构来标记表达式类型,但元数据驱动场景下,CopySourceSettings的存储内容会被ADF直接解析,嵌套结构会触发类型转换错误(即报错中提到的无法将对象转换为System.String)。 - 直接使用
"value": "@utcnow()"时,ADF会自动识别该字符串为表达式并执行计算,最终将当前UTC日期作为额外列的值写入目标表。
如果需要添加其他表达式作为额外列,遵循同样规则:直接将表达式字符串赋值给value字段即可,无需额外的类型标记。
内容的提问来源于stack exchange,提问作者csukcl

