首页 > 解决方案 > 如何使用嵌套分隔符拆分为子文档?

问题描述

我正在通过 Azure cosmos DB 数据迁移工具将数据从 SQL 迁移到 COSMOS DB

有人可以帮忙迁移子文档中的数据,如何在嵌套分隔符中指定

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'

结果: 在此处输入图像描述

Cosmos DB 中的预期文档:

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

标签: azure-cosmosdbazure-cosmosdb-sqlapi

解决方案


根据您的描述,您的需要并不是简单地将嵌套的 JSON 数据生成到 cosmos db 中。您想要生成 JSON 包含由某些列组成的 Json 数组组。类似于UpdatedByFullName通过相同ProjectDocumentId和合并的东西ProjectId

根据我的测试和对迁移工具文档的一些研究,似乎Import data from SQL SERVER feature无法处理某些列生成 json 数组组。

因此,我想出了一个由这种情况导致的解决方法:SQL to JSON - Grouping Results into JSON Array and this doc。我的示例数据如下:

在此处输入图像描述

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;

输出如下:

在此处输入图像描述

然后你就有了这样的 json 输出,这样你就可以简单地将它导入 cosmos db。


推荐阅读