sql-server - 使用 CosmosDB 数据迁移工具将多对多关系映射到字符串数组?
问题描述
我正在将一些数据从 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
使用此查询,CosmosDB 中生成的 JSON 文档如下所示:
{
"name": {
"first": "Donald",
"last": "Duck"
},
"office": {
"City": "Ann Arbor",
"State": "MI"
},
"reminderEmail": true,
"favorites": "[{\"Name\":\"Red\"},{\"Name\":\"Green\"}]",
"id": "some guid",
}
它将它变成一个字符串,这就是为什么它然后添加转义字符,以及它的 JSON 对象数组。
我想要的是:
{
"name": {
"first": "Donald",
"last": "Duck"
},
"office": {
"City": "Ann Arbor",
"State": "MI"
},
"reminderEmail": true,
"favorites": ["Red","Green"],
"id": "some guid",
}
如何使用数据迁移工具修改我的查询以实现此目的?
解决方案
数据迁移工具无法处理此问题,但您可以使用 ADF 和 Databricks 执行此操作。我们最近在我们的 Cosmos DB 博客中写了一篇关于此的博文。
使用 Azure 数据工厂和 Azure Databricks 将关系数据迁移到 Azure Cosmos DB
希望这会有所帮助。