Я пытаюсь скопировать данные с локального сервера SQL в хранилище озера данных Azure (ADLS) через фабрику данных Azure (ADF).Кажется, что все работает, кроме того, что когда я запускаю (отлаживаю или запускаю) конвейер, я получаю сообщение об ошибке:
{"errorCode": "2200", "message": "Сбой произошел при 'Sink"'side. 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, '"," faultType ": "UserError", "target": "CopyData1"}
Что действительно странно, так это то, что работают следующие конвейеры:
- SQL tbl1 -> SQL tbl2
- ADLS source.txt -> ADLS sink.txt
Т.е. работает доступ для чтения / записи как и ожидалось.Последний конвейер также может создавать / перезаписывать файл sink.txt.
Но когда я запускаю конвейер
Я получаю ошибку Required .А если существует файл sink.txt, конвейер даже удаляет его!
Я использую ADFv2, ADLS Gen1, ADF и ADLS, которые находятся в одной и той же группе подписок / ресурсов, с использованием selfhostted / Azure Integration Runtime (для SQL /ADLS соответственно).Я проверил с заявлением источника так же просто, как «SELECT 1 Col».Также протестировано без схемы набора данных и со схемами + сопоставлениями.
Это ошибка или я что-то упустил?Какая «длина» требуется?
РЕДАКТИРОВАТЬ 1: минимальные JSON-скрипты
pipe1.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 OK
- AzureSQLDB-> ADLS OK