本文旨在为已经对Azure Cosmos DB有一定了解的开发者和架构师提供数据迁移的基础知识。接下来的几篇文章将围绕在Azure Cosmos DB上对文档/集合进行CRUD操作。为了执行这些操作,需要数据。因此,开始探索一些开源工具,并开始使用微软提供的Azure Cosmos DB数据迁移工具。
本文将指导如何使用Azure Cosmos DB数据迁移工具,该工具可以从各种数据源导入数据到Azure Cosmos DB。本文的主要焦点是将数据从SQL Server迁移到Azure Cosmos DB。
Azure Cosmos DB 模拟器:推荐使用这个模拟器,因为它是免费的,并且具有与Azure门户中的Azure Cosmos DB相同的功能。Azure Cosmos DB模拟器提供了一个本地环境,用于模拟Azure Cosmos DB服务,以便开发和测试。使用Azure Cosmos DB模拟器,可以在本地开发和测试应用程序,而无需创建Azure订阅或产生任何费用。当对在Azure Cosmos DB模拟器中工作的应用程序感到满意时,可以切换到使用云中的Azure Cosmos DB帐户。可以在找到Azure Cosmos DB模拟器。
Azure Cosmos DB 数据迁移工具:使用此工具,可以从JSON文件、CSV文件、SQL、MongoDB、Azure Table存储、Amazon DynamoDB等导入数据,这些数据可以与Azure Cosmos DB一起使用。可以在找到Azure Cosmos DB迁移工具。
SQL Server:在例子中,使用的是SQL Server2017,并且在本文中使用了服务器的连接。
这是一个多步骤的过程,让一步一步来。
确定需要导入的实际数据。对于本文,考虑了AdventureWorks2017数据库。想要所有员工及其部门的数据。为此,创建了以下查询:
SELECT
e.[BusinessEntityID]
,p.[Title]
,p.[FirstName]
,p.[MiddleName]
,p.[LastName]
,p.[Suffix]
,e.[JobTitle]
,d.[Name] AS [Department]
,d.[GroupName]
,edh.[StartDate]
FROM [HumanResources].[Employee] e
INNER JOIN [Person].[Person] p
ON p.[BusinessEntityID] = e.[BusinessEntityID]
INNER JOIN [HumanResources].[EmployeeDepartmentHistory] edh
ON e.[BusinessEntityID] = edh.[BusinessEntityID]
INNER JOIN [HumanResources].[Department] d
ON edh.[DepartmentID] = d.[DepartmentID]
WHERE edh.EndDate IS NULL
上述查询将返回290行数据(这是数据库中的数据,数据库中的数据可能会有所不同)。
安装并运行Azure Cosmos DB模拟器。将看到如下所示的图像:
安装Azure Cosmos DB数据迁移工具并打开dtui.exe。将看到如下所示的图像:
在dtui.exe中,点击“源信息”并从“导入自:”下拉列表中选择“SQL”。在连接字符串中,提供SQL Server的连接字符串。提供连接字符串后,可以选择SQL查询或选择SQL脚本文件。选择提供查询。
屏幕应该如下所示:
Id是可选的。当将数据迁移到Azure Cosmos DB时,文档会自动创建一个GUID的Id。可以通过自己添加来控制它,但需要确保它们是唯一的。在SQL中提到了这一点,因为知道BusinessEntity是唯一的,所以在查询中添加了它。
请记住,在Azure Cosmos DB中,Id属性始终是一个字符串值。
请注意,上图中的查询与步骤1中的查询不同。由于Azure Cosmos DB中的文档以json表示,需要将SQL查询结构化为json。
使用点(.)作为嵌套分隔符。这将使SQL查询结构化为有效的json结构。
只是想有员工以及除了加入日期之外的所有详细信息,只是为了展示在迁移时如何结构化自己的数据。
在提供步骤4中的每个项目后点击下一步。将到达“目标信息”屏幕。
在“导出到:”下拉列表中保留默认值(DocumentDB - 顺序记录导入(分区集合))。
在连接字符串中,从Azure模拟器复制“主连接字符串”。如果想使用Azure门户,则可以复制相同的主连接字符串。完成后,附加Database=
在集合中,提供EmployeesWithDepartment。
在分区键中,提供/employee/department/name。
保留集合吞吐量不变。
Id字段留空。
展开“高级选项”。保留所有内容不变,并在索引策略中,右键单击并选择“范围”。
屏幕应该如下所示:
分区集合是一个单独的主题,将在下一篇关于在Azure Cosmos DB上对文档/集合进行CRUD操作的文章中介绍。
Azure Cosmos DB中的集合是一组文档。每个文档是一组在创建文档时定义的json结构。
如果选择了与id不同的标识符名称,则提供Id字段。
索引策略将在下一篇关于在Azure Cosmos DB上对文档/集合进行CRUD操作的文章中处理。
如果想生成错误日志文件,可以提及它或跳过此步骤。
将获得步骤4到步骤6的摘要。一旦确信细节,点击“导入”。如果成功导入,将看到以下屏幕截图。否则,所有错误都会显示在错误标签中。如步骤1中所述,已将290行导入到Azure Cosmos DB。
转到Azure Cosmos DB模拟器,然后单击左侧窗格中的资源管理器。将找到数据库和文档,如下所示:
要查询Azure Cosmos DB中的文档,可以有SQL类型的查询。
SELECT * FROM c
Where
c
是集合。
SELECT * FROM c WHERE c.id =
"
1"
SELECT * FROM c WHERE c.employee.department.name =
"
Tool Design"
或者:
SELECT EmployeeWithDepartment e WHERE e.employee.department.name =
"
Tool Design"
Azure Cosmos DB资源模型:
Azure帐户、数据库、集合、文档/资源/数据、附件(可选)
索引策略有3种类型:哈希索引、范围索引和空间索引。