Azure Data Factory复制数据活动报错:Value cannot be null. Parameter name: input
运行从API向Azure SQL数据库复制数据的Copy Data Activity时,出现如下错误:
ErrorCode=InvalidParameter, 'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException, Message=The value of the property 'input' is invalid: 'Value cannot be null.
Parameter name: input'., Source=,''Type=System.ArgumentNullException,Message=Value cannot be null.
Parameter name: input,Source=Microsoft.DataTransfer.ClientLibrary,
但管道活动、数据集及链接服务中均未定义名为input的参数,相关配置代码如下:
管道代码
{ "name": "pipeline8", "properties": { "activities": [ { "name": "Copy data1", "type": "Copy", "dependsOn": [], "policy": { "timeout": "0.12:00:00", "retry": 0, "retryIntervalInSeconds": 30, "secureOutput": false, "secureInput": false }, "userProperties": [], "typeProperties": { "source": { "type": "JsonSource", "storeSettings": { "type": "HttpReadSettings", "requestMethod": "POST", "requestTimeout": "" }, "formatSettings": { "type": "JsonReadSettings" } }, "sink": { "type": "AzureSqlSink", "writeBehavior": "insert", "sqlWriterUseTableLock": false, "disableMetricsCollection": false }, "enableStaging": false }, "inputs": [ { "referenceName": "SkyPrepDataset", "type": "DatasetReference", "parameters": { "relativeurl": "get_users?" } } ], "outputs": [ { "referenceName": "AzureSQLDataset", "type": "DatasetReference", "parameters": { "schemaname": "dbo", "tablename": "webuser", "sqlserver": "myserver", "sqldb": "mydb" } } ] } ], "folder": { "name": "SkyPrep" }, "annotations": [] }}
源数据集(SkyPrepDataset)代码
{ "name": "SkyPrepDataset", "properties": { "linkedServiceName": { "referenceName": "SkyPrepHTTPAPI", "type": "LinkedServiceReference" }, "parameters": { "relativeurl": { "type": "string" } }, "annotations": [], "type": "Json", "typeProperties": { "location": { "type": "HttpServerLocation", "relativeUrl": { "value": "@dataset().relativeurl", "type": "Expression" } } }, "schema": {} }}
目标数据集(AzureSQLDataset)代码
{ "name": "AzureSQLDataset", "properties": { "linkedServiceName": { "referenceName": "AzureSqlDatabase", "type": "LinkedServiceReference", "parameters": { "sqlserver": { "value": "@dataset().sqlserver", "type": "Expression" }, "sqldb": { "value": "@dataset().sqldb", "type": "Expression" } } }, "parameters": { "schemaname": { "type": "string" }, "tablename": { "type": "string" }, "sqlserver": { "type": "string" }, "sqldb": { "type": "string" } }, "annotations": [], "type": "AzureSqlTable", "schema": [], "typeProperties": { "schema": { "value": "@dataset().schemaname", "type": "Expression" }, "table": { "value": "@dataset().tablename", "type": "Expression" } } }}
源链接服务(AzureSqlDatabase)代码
{ "name": "AzureSqlDatabase", "properties": { "parameters": { "sqlserver": { "type": "string" }, "sqldb": { "type": "string" } }, "annotations": [], "type": "AzureSqlDatabase", "typeProperties": { "server": "@{linkedService().sqlserver}", "database": "@{linkedService().sqldb}", "encrypt": "mandatory", "trustServerCertificate": false, "authenticationType": "SystemAssignedManagedIdentity" } }}
目标链接服务(SkyPrepHTTPAPI)代码
{ "name": "SkyPrepHTTPAPI", "type": "Microsoft.DataFactory/factories/linkedservices", "properties": { "annotations": [], "type": "HttpServer", "typeProperties": { "url": "https://api.skyprep.io/admin/api/", "enableServerCertificateValidation": true, "authenticationType": "Anonymous", "authHeaders": { "api_key": { "type": "SecureString", "value": "**********" }, "acct_key": { "type": "SecureString", "value": "**********" } } } }}
排查与解决方法
1. 补全POST请求的请求体
当前配置使用POST请求方法,但未设置请求体(requestBody),ADF会因缺少输入内容触发input为空的错误。修改HttpReadSettings,添加请求体配置:
"storeSettings": { "type": "HttpReadSettings", "requestMethod": "POST", "requestTimeout": "00:05:00", "requestBody": "" // 根据API要求填写对应内容,空请求体可设为"" }
2. 修正相对URL格式
relativeurl参数值末尾的问号可能导致请求URL无效,API返回空响应。将get_users?改为get_users,确保URL格式正确。
3. 验证API响应有效性
用Postman等工具测试API请求,确认返回的是有效JSON数据。若API返回空内容或非JSON格式,ADF无法解析输入数据,也会触发该错误。
4. 配置源数据集Schema
源数据集schema为空可能导致ADF无法识别输入结构,建议手动定义Schema,或在Copy Activity的源设置中启用autoDetectSchema。
内容的提问来源于stack exchange,提问作者FRY-9C

