【发布时间】: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 的创造者