collectionReference Проблема с копированием данных API Rest в базу данных SQL Azure. - PullRequest
0 голосов
/ 20 мая 2019

Когда я копирую данные 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 конвейера? Как конвейер знает, какой узел имеет коллекции массивов?

Не могли бы вы посоветовать решение для решения этой проблемы?

1 Ответ

0 голосов
/ 20 мая 2019

Спасибо за сообщение об этой проблеме.Свойство collectionReference действительно потеряно после повторной публикации конвейера.Исправление для этой проблемы будет выпущено к продукту в конце этой недели.Пожалуйста, не стесняйтесь создавать конвейер из мастера копирования в качестве обходного пути.Спасибо.

Также, как вы можете видеть, ранее мы использовали "schemaMapping" для описания отношений отображения между источником и приемником.Теперь он заменен «отображениями».Они оба работают, и это не является причиной проблемы, с которой вы столкнулись.

Полезная для вас ссылка на документ: https://docs.microsoft.com/en-us/azure/data-factory/copy-activity-schema-and-type-mapping

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...