从SQL复制到ADLS时,Azure数据工厂抛出“需要长度”错误

时间:2018-11-15 14:13:32

标签: sql-server azure azure-data-lake azure-data-factory-2

我正在尝试通过Azure数据工厂(ADF)将数据从本地SQL服务器复制到Azure数据湖存储(ADLS)。一切似乎都正常,除了我运行(调试或触发)管道时,我收到错误消息:

  

{       “ errorCode”:“ 2200”,       “消息”:“失败发生在'接收器'侧。ErrorCode = UserErrorAdlsFileWriteFailed,'Type = Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message =写入'AzureDataLakeStore'失败。消息:远程服务器返回错误:(411 )所需长度。响应详细信息:\ r \ n所需长度\ r \ n \ r \ n

所需长度

\ r \ n

HTTP错误411。请求必须分块或具有内容长度。

\ r \ n \ r \ n,Source = Microsoft.DataTransfer.ClientLibrary,''Type = System.Net.WebException,Message =远程服务器返回错误: (411)要求的长度。,Source = System,'“,       “ 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驻留在同一订阅/资源组中,并使用自托管/ Azure集成运行时(分别用于SQL / ADLS)。 我已经测试了源语句,就像“ SELECT 1 Col”一样简单。还测试了没有数据集架构以及架构+映射的情况。

这是一个错误,还是我缺少一些东西? 哪个“长度”是必需的?


编辑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"
                    }
                ]
            }
        ]
    }
}

table1.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-> SQL OK
  • ADLS-> ADLS确定
  • AzureSQLDB-> ADLS确定

1 个答案:

答案 0 :(得分:1)

您的自托管IR是否具有某些代理设置或经过特殊的网络设置?当ADF的ADLS连接器尝试与ADLS服务进行对话时,此类错误应由中间代理服务引起。