You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Cosmos DB数据迁移工具将SQL Server嵌套集合导入DocumentDB并避免拆分文档

解决Cosmos DB数据迁移工具生成单独文档而非嵌套集合的问题

你遇到的核心问题是迁移工具默认将SQL查询的每一行结果映射为独立的Cosmos文档,而你需要把多行Product数据聚合为单个文档里的嵌套集合。下面是具体的解决思路和步骤:

1. 调整SQL查询,生成嵌套JSON结构

要得到包含嵌套Product集合的文档,得在SQL Server端用FOR JSON PATH语法直接生成符合目标格式的JSON,而不是依赖迁移工具的字段命名前缀来自动嵌套。

假设你期望的目标JSON结构是:

{
  "CategoryID": 1,
  "Products": [
    {"ProductID": 101, "ProductName": "Laptop"},
    {"ProductID": 102, "ProductName": "Desktop"}
  ]
}

对应的SQL查询可以写成:

SELECT 
  dp.CategoryID,
  -- 子查询生成Product嵌套数组
  (
    SELECT ProductID, ProductName 
    FROM DimProduct p 
    WHERE p.CategoryID = dp.CategoryID 
    FOR JSON PATH
  ) AS Products
FROM DimProduct dp
GROUP BY dp.CategoryID -- 按Category分组,每个组生成一个文档
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER -- 去掉外层数组,每个分组对应一个独立JSON对象

这个查询会把同一类别的所有Product聚合到Products数组中,每个Category对应一个完整的JSON文档结构。

2. 配置迁移工具的源查询

在Cosmos DB数据迁移工具中:

  • 选择SQL Server作为数据源,在"查询"选项中输入上面调整后的SQL语句。
  • 先在SQL Server Management Studio中测试这个查询的输出,确保生成的JSON完全符合你期望的目标文档格式,再放到迁移工具里执行迁移。

关键原理说明

你之前用Product.前缀命名字段,只是给字段添加了层级命名,但迁移工具并不会自动把多行数据合并成一个文档里的嵌套集合——它依然会把SQL返回的每一行作为独立文档。只有通过SQL的聚合和FOR JSON语法,才能把多行数据打包成单个文档的嵌套结构,让迁移工具直接导入符合要求的文档。

内容的提问来源于stack exchange,提问作者Eric Russell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:37:26