【问题标题】:Migrate hierarchical SQL Server data to Azure CosmosDB将分层 SQL Server 数据迁移到 Azure CosmosDB
【发布时间】:2018-04-17 23:50:40
【问题描述】:

我正在探索使用 SQL API 将数据从 SQL Server 2016 迁移到 CosmosDB 的选项。源数据是相关的。我需要加入它们并迁移到 CosmosDB db,这样每一行都作为文档迁移。这是一个例子。

我想迁移这些单独的 Product 表行,结合它的相关 ProductSubCatalog 表行,类似于下面的文档。

{              
          "ProductID": 970,                         
          "Name": "Touring-2000 Blue, 46",                         
          "ProductNumber": "BK-T44U-46",                         
          "MakeFlag": true,                         
          "FinishedGoodsFlag": true,                       
          "Color": "Blue",                                                       
          "ModifiedDate": "2014-02-08T10:01:36.827",                   
          "ProductSubCatalog": {                
                       "ProductSubcategoryID": 3,                      
                       "Name": "Touring Bikes"                                                                                 
          }                          
}                          

我尝试DocumentDB Data Migration Tool 使用 Source 作为“SQL”,并使用以下查询。

SELECT 
    [ProductID],P.[Name], [ProductNumber], [MakeFlag],  
    [FinishedGoodsFlag], [Color], [SafetyStockLevel], [ReorderPoint], 
    [StandardCost], [ListPrice],
    Ps.ProductSubcategoryID AS 'ProductSubCatalog.ProductSubcategoryID', 
    Ps.Name AS 'ProductSubCatalog.Name'   
FROM
    [Production].[Product] P 
LEFT JOIN
    Production.ProductSubcategory PS ON P.ProductSubcategoryID = ps.ProductSubcategoryID
FOR JSON PATH, ROOT('Product')

由于上述查询为 Product 表中的所有行生成单个 JSON 数据,DocumentDB 数据迁移工具将其作为单个文档导入。是否有人知道其他选项可以在不编写自定义应用程序来查询 SQL Server 数据、形成 JSON 文档并导入它的情况下实现这一目标?任何建议和指示将不胜感激。

【问题讨论】:

  • 如果这对你不起作用,还有一个不同的选择,这就是我实际所做的。您可以创建一个简单的 .net 核心应用程序,该应用程序遵循 EF Core、DB 优先方法。然后只需使用 DTO 批量检索所有内容并将它们添加到 CosmosDB 中。您可以使用Cosmonaut 来执行此操作,它将拾取您的对象并将它们添加到 cosmosdb 中。免责声明:我是 Cosmonaut 的创造者

标签: sql-server azure-cosmosdb


【解决方案1】:

根据您的描述,我刚刚关注了Import from SQL Server,并根据您的表格检查了这个问题。

注意:您无需在查询中添加FOR JSON PATH, ROOT('Product')

结果:

【讨论】:

  • 感谢您的详细回复。它适用于具有一对一关系的数据,不适用于具有一对多关系的数据。我继续从git hub 修改了该数据迁移工具的源代码,以将JSON 字符串数据(由我上面的SQL 查询检索到的)转换为C# JObject,而不是原来的键值对对象。它符合我的要求。
  • 您最好将自己的答案与可能遇到类似问题的其他人一起发布。
猜你喜欢
  • 2010-12-28
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 2012-09-04
  • 2013-02-08
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多