【问题标题】:Use the CosmosDB Data Migration Tool to map a many-to-many relationship to a string array?使用 CosmosDB 数据迁移工具将多对多关系映射到字符串数组?
【发布时间】:2020-03-24 22:11:51
【问题描述】:

我正在将一些数据从 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",
}

如何使用数据迁移工具修改我的查询以实现此目的?

【问题讨论】:

    标签: sql-server azure azure-cosmosdb data-migration


    【解决方案1】:

    数据迁移工具无法处理此问题,但您可以使用 ADF 和 Databricks 执行此操作。我们最近在我们的 Cosmos DB 博客中写了一篇关于此的博文。

    Migrating Relational Data into Azure Cosmos DB using Azure Data Factory and Azure Databricks

    希望这有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 2015-07-16
      • 1970-01-01
      相关资源
      最近更新 更多