Используйте инструмент переноса данных CosmosDB для сопоставления отношения «многие ко многим» с массивом строк? - PullRequest
0 голосов
/ 25 марта 2020

Я перенесу некоторые данные из Azure SQL в CosmosDB. Я использую инструмент переноса данных CosmosDB. В базе данных SQL у меня есть отношение многие ко многим между людьми и избранными. Я хочу перенести избранные имена в простой массив в документе CosmosDB. Я пока не нахожу способ сделать это. В документации рекомендуется использовать FOR JSON AUTO, который преобразует подзапрос в JSON массив объектов.

Ниже приведен запрос в его нынешнем виде. Это не то, что я хочу.

SELECT 
    p.Id AS [id],
    p.FirstName AS [name.first],
    p.LastName AS [name.last],
    o.City AS [office.City],
    o.[State] AS [office.State], 
    c.ReminderEmailEnabled AS [reminderEmail], 
    (SELECT f.[Name] FROM dbo.Favorites f JOIN dbo.PersonFavorite pf ON pf.FavoriteId = f.Id AND pf.PersonId = p.Id  FOR JSON AUTO) AS [favorites]
FROM dbo.Persons p
    LEFT JOIN dbo.Offices o ON o.Id = p.OfficeId

При использовании этого запроса результирующий документ JSON в CosmosDB выглядит следующим образом:

{
    "name": {
        "first": "Donald",
        "last": "Duck"
    },
    "office": {
        "City": "Ann Arbor",
        "State": "MI"
    },
    "reminderEmail": true,
    "favorites": "[{\"Name\":\"Red\"},{\"Name\":\"Green\"}]",
    "id": "some guid",
}

Он превращается в строку, поэтому он затем добавляет escape-символы и его массив JSON объектов.

Что я хочу:

{
    "name": {
        "first": "Donald",
        "last": "Duck"
    },
    "office": {
        "City": "Ann Arbor",
        "State": "MI"
    },
    "reminderEmail": true,
    "favorites": ["Red","Green"],
    "id": "some guid",
}

Как я могу изменить свой запрос, чтобы добиться этого с помощью инструмента переноса данных?

1 Ответ

0 голосов
/ 25 марта 2020

Средство переноса данных не может справиться с этим, но вы можете сделать это, используя ADF и Databricks. Недавно мы опубликовали сообщение в блоге об этом в нашем блоге Cosmos DB.

Перенос реляционных данных в Azure Cosmos DB с использованием Azure фабрики данных и Azure Databricks

Надеюсь, это полезно.

...