Azure Cosmos DB 数据迁移指南

本文旨在为已经对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=。提供了Database=EmployeesDB。

在集合中,提供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种类型:哈希索引、范围索引和空间索引。

  • id:用户定义的唯一标识符。它应该是字符串。
  • _rid:自动生成的资源id。
  • _ts:自动生成的时间戳(最后更新)纪元值。
  • _etag:自动生成的GUID。用于乐观并发。
  • _self:自动生成的资源URI路径。当使用SQL API for Azure Cosmos DB时非常有用。
  • _attachments:资源附件的URI路径后缀。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485