我正试图通过Azure数据工厂(ADF(将数据从prem SQL server复制到Azure data Lake Storage(ADLS(。一切似乎都正常,除了当我运行(调试或触发(管道时,我得到了错误:
{"errorCode":"2200","message":"失败发生在'Sink'端。ErrorCode=UserErrorAdlsFileWriteFailed,'Type=Microsoft.DataTransfer。Common.Shared.HybridDeliveryException,message=写入'AzureDataLakeStore'失败。消息:远程服务器返回错误:(411(所需长度。。响应详细信息:\r\n所需长度\r\n\r\n
所需长度
\\r\nHTTP错误411。请求必须分块或具有内容长度。
\\r\n\r\n,源=Microsoft。数据传输。ClientLibrary,'Type=系统。网WebException,Message=远程服务器返回错误:(411(需要长度。,Source=系统,'","failureType":"UserError","target":"CopyData1"}
真正奇怪的是,以下管道确实有效:
- SQL tbl1->SQL tbl2
- ADLS source.txt->ADLS sink.txt
即读/写访问按预期工作。后一个管道还可以创建/覆盖sink.txt文件。
但当我运行管道时
- SQL tbl1->sink.txt
我得到所需长度错误。如果sink.txt存在,管道甚至会删除它!
我正在使用ADFv2,ADLS Gen1,ADF&ADLS驻留在同一订阅/资源组中,使用自托管/AAzure集成运行时(分别用于SQL/ALS(。我已经用简单到"SELECT 1 Col"的源语句进行了测试。也在没有数据集模式和模式+映射的情况下进行了测试。
这是一个bug,还是我遗漏了什么?需要哪个"长度"?
编辑1:最小JSON脚本
pipeline1.json
{
"name": "pipeline1",
"properties": {
"activities": [
{
"name": "CopyData1",
"type": "Copy",
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"typeProperties": {
"source": {
"type": "SqlSource",
"sqlReaderQuery": "SELECT TOP 1 'x' AS col1 FROM sys.tables"
},
"sink": {
"type": "AzureDataLakeStoreSink"
},
"enableStaging": false,
"dataIntegrationUnits": 0
},
"inputs": [
{
"referenceName": "table1",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "sink1",
"type": "DatasetReference"
}
]
}
]
}
}
表1.json
{
"name": "table1",
"properties": {
"linkedServiceName": {
"referenceName": "SqlServer1",
"type": "LinkedServiceReference"
},
"type": "SqlServerTable",
"typeProperties": {
"tableName": "sys.tables"
}
}
}
sink1.json
{
"name": "sink1",
"properties": {
"linkedServiceName": {
"referenceName": "AzureDataLakeStore1",
"type": "LinkedServiceReference"
},
"type": "AzureDataLakeStoreFile",
"structure": [
{
"name": "col1",
"type": "String"
}
],
"typeProperties": {
"format": {
"type": "TextFormat",
"columnDelimiter": ",",
"rowDelimiter": "",
"nullValue": "\N",
"treatEmptyAsNull": true,
"skipLineCount": 0,
"firstRowAsHeader": true
},
"fileName": "sink1.txt",
"folderPath": "myDir"
}
}
}
第2版:已进行测试的总结
- SQL->ADLS错误
- Oracle->ADLS错误
- SQL->Blob OK
- Oracle->Blob OK
- SQL->sqlok
- ADLS->ADLS OK
- AzureSQLDB->ADLS OK
您的自托管IR是否有一些代理设置或经过特殊的网络设置?当ADF的ADLS连接器试图与ADLS服务对话时,这种错误应该是由中间代理服务引起的。