Когда я копирую данные API Rest в Azure SQL, возникает странная проблема. Если я использую ADF V2 Copy Wizard для генерации конвейера, он может вставить 3 следующие записи в мою таблицу базы данных SQL Azure.
taskId errorName error_description
1 успех успеха
2 cde успех успех
3 успеха успеха
Если я сделаю какую-либо крошечную модификацию, такую как изменение описания конвейера в этом конвейере, после этого, если я выполню обновленный конвейер, он сможет скопировать только одну запись в таблицу Azure SQL.
taskId errorName error_description
NULL NULL Успех
примечание:
Формат возвращаемого API данных Rest выглядит следующим образом:
{
"data": [
{
"taskId": 1,
"taskName": "abc"
},
{
"taskId": 2,
"taskName": "efg"
},
{
"taskId": 3,
"taskName": "ggg"
}
],
"error": "success",
"error_Description": "successful"
}
Код JSON конвейера выглядит следующим образом:
{
"name": "pipeline3",
"properties": {
"activities": [
{
"name": "Copy_v9u",
"type": "Copy",
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"userProperties": [
{
"name": "Source",
"value": "api/getTask"
},
{
"name": "Destination",
"value": "[abc].[table1]"
}
],
"typeProperties": {
"source": {
"type": "RestSource",
"httpRequestTimeout": "00:01:40",
"requestInterval": "00.00:00:00.010"
},
"sink": {
"type": "AzureSqlSink",
"preCopyScript": "truncate table abc.table1"
},
"enableStaging": false,
"translator": {
"type": "TabularTranslator",
"mappings": [
{
"source": {
"path": "taskId"
},
"sink": {
"name": "taskId",
"type": "Int32"
}
},
{
"source": {
"path": "taskName"
},
"sink": {
"name": "taskName",
"type": "String"
}
},
{
"source": {
"path": "$.error"
},
"sink": {
"name": "error",
"type": "String"
}
},
{
"source": {
"path": "$.error_Description"
},
"sink": {
"name": "error_Description",
"type": "String"
}
}
]
}
},
"inputs": [
{
"referenceName": "SourceDataset_v9u",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "DestinationDataset_v9u",
"type": "DatasetReference"
}
]
}
]
},
"type": "Microsoft.DataFactory/factories/pipelines"
}
При отображении операции копирования я проверил «Ссылку на коллекцию», поскольку «данные» в результате json содержат данные массива.
Я думаю, что это вызвано тем, что текущий ADF не сохраняет collectionReference в файле json, и после его повторной публикации информация collectionReference каким-то образом теряется. Мой предыдущий проект - рабочий файл, я сравнил файл json конвейера, я обнаружил, что предыдущий использует «schemaMapping» вместо «mappings», а предыдущий содержит «collectionReference», однако текущий не содержит «collectionReference». Пожалуйста, смотрите следующий код для конвейера 3 месяца назад, копирующего Rest API в sql db:
"translator": {
"type": "TabularTranslator",
"schemaMapping": {
"$.count": "count",
"$.next": "next",
"$.previous": "previous",
"product_id": "product_id",
"product_name": "product_name",
"city": "city",
"country": "country"
},
"collectionReference": "$.results"
}
После того, как я сделал эти крошечные изменения, конвейер все еще должен скопировать 3 записи в таблицу. Кроме того, есть ли причина, по которой «collectionReference» больше не появляется в файле json конвейера? Как конвейер знает, какой узел имеет коллекции массивов?
Не могли бы вы посоветовать решение для решения этой проблемы?