Как разбить на вложенные документы с разделителем вложенности? - PullRequest
1 голос
/ 11 февраля 2020

Я переношу данные из SQL в COSMOS DB через Azure cosmos DB Data Migration Tool

Может кто-нибудь помочь помочь перенести данные в Поддокументы, как указать в качестве разделителя вложений

SELECT TOP  5 P.ProjectDocumentId, P.ProjectId, PU.UpdatedByFullName
FROM [Docs].[ProjectDocuments] P
INNER JOIN [Docs].[ProjectDocumentUpdate] PU ON P.ProjectDocumentID = PU.ProjectDocumentID
WHERE P.ProjectDocumentId = '7DA0011B-7105-4B6C-AF13-12B5AC50B608'

Результат: enter image description here

Ожидаемый документ в базе данных Cosmos:

{
  "ProjectDocumentId": "7da0011b-7105-4b6c-af13-12b5ac50b608",
  "ProjectId": "ed1e0e47-ff1c-47be-b5e9-c235aef76161",
  "ProjectDocumentUpdate": { 
    "UpdatedByFullName" : "Unnati" 
  }, { 
    "UpdatedByFullName" : "Eugene" 
  },
  { 
    "UpdatedByFullName" : "Meghana" 
  }             
} 

1 Ответ

1 голос
/ 12 февраля 2020

Согласно вашему описанию, вам не нужно просто создавать вложенные JSON данные в db космоса. Вы хотите создать JSON содержит Json группу массивов по нескольким столбцам. Что-то вроде слияния UpdatedByFullName по тем же ProjectDocumentId и ProjectId.

Исходя из моего теста и некоторых исследований документа Migration Tool , кажется, что Import data from SQL SERVER feature не может справиться с созданием группы массивов json по некоторым столбцам ,

Итак, я придумываю обходной путь, который приводит этот случай: SQL к JSON - Группировка результатов в JSON Массив и этот do c .Мой образец данных, как показано ниже:

enter image description here

SQL:

select s1.name,
'ageArr' = (
            SELECT
                age AS 'age' 
            FROM
                dbo.student as s2
            where s2.name = s1.name
            FOR JSON PATH)
from dbo.student as s1
group by s1.name
FOR JSON Path;

Вывод, как показано ниже:

enter image description here

Тогда у вас есть такой json вывод, чтобы вы могли просто импортировать его в космос db.

...