Azure 数据工厂在从 SQL 复制到 ADLS 时引发"需要长度"错误



我正试图通过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\n

HTTP错误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服务对话时,这种错误应该是由中间代理服务引起的。

最新更新