你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用桌面数据迁移工具将数据迁移到 Azure Cosmos DB

适用对象: NoSQL MongoDB

Azure Cosmos DB 桌面数据迁移工具是一个开源命令行应用程序,用于向 Azure Cosmos DB 导入数据或从中导出数据。 该工具可以向/从多个源和接收器迁移数据,包括但不限于:

  • Azure Cosmos DB for NoSQL
  • Azure Cosmos DB for MongoDB
  • Azure Cosmos DB for Table
  • Azure 表存储
  • JSON
  • MongoDB
  • SQL Server

重要

本指南中,将执行从 JSON 到 Azure Cosmos DB for NoSQL 的数据迁移。

先决条件

安装桌面数据迁移工具

首先,从 GitHub 存储库安装最新版本的桌面数据迁移工具。

注意

桌面数据迁移工具需要本地计算机上安装 .NET 6.0 或更高版本。

  1. 在浏览器中,导航到存储库的“发布”部分:azurecosmosdb/data-migration-desktop-tool/releases

  2. 下载适用于你的平台的最新压缩文件夹。 有适用于 win-x64、mac-x64 和 linux-x64 平台的压缩文件夹。

  3. 将文件提取到本地计算机上的安装位置。

  4. (可选)将桌面数据迁移工具添加到本地计算机的 PATH 环境变量。

准备迁移目标

接下来,在 Azure Cosmos DB for NoSQL 帐户上创建目标数据库和容器。

  1. 打开新的终端。 如果尚未登录到 Azure CLI,现在请登录。

  2. 为 Azure Cosmos DB 帐户的名称和资源组创建新的 shell 变量。

    # Variable for Azure Cosmos DB account name
    accountName="<name-of-existing-account>"
    
    # Variable for resource group name
    resourceGroupName="<name-of-existing-resource-group>"
    
  3. 使用 az cosmosdb sql database create 创建新的数据库。 将新数据库命名为 cosmicworks,并为数据库配置 400 RU/s 的共享吞吐量。

    az cosmosdb sql database create \
        --resource-group $resourceGroupName \
        --account-name $accountName \
        --name cosmicworks \
        --throughput 400
    
  4. 使用 az cosmosdb sql container createcosmicworks 数据库中创建名为 products 的新容器。 将新容器的分区键路径设置为 /category

    az cosmosdb sql container create \
        --resource-group $resourceGroupName \
        --account-name $accountName \
        --database-name cosmicworks \
        --name products \
        --partition-key-path "/category"
    
  5. 使用 az cosmosdb keys list 从帐户的密钥列表中查找主连接字符串。

    az cosmosdb keys list \
        --resource-group $resourceGroupName \
        --name $accountName \
        --type connection-strings
    
  6. 记录“主连接字符串”值。 稍后在使用工具迁移数据时会使用此凭据。

执行迁移操作

现在,将数据从 JSON 数组迁移到新创建的 Azure Cosmos DB for NoSQL 容器。

  1. 导航到本地计算机上的空目录。 在该目录中,创建名为 migrationsettings.json 的新文件。

  2. 在 JSON 文件中,创建新的空 JSON 对象:

    {}
    
  3. 创建名为 Source 的新属性,值为 json。 创建另一个名为 SourceSettings 的新属性,值为空对象。

    {
      "Source": "json",
      "SourceSettings": {}
    }
    
  4. SourceSettings 对象中,创建名为 FilePath 的新属性,并将值设置为此 URI:https://raw.githubusercontent.com/azure-samples/cosmos-db-migration-sample-data/main/nosql-data.json

    {
      "Source": "json",
      "SourceSettings": {
        "FilePath": "https://raw.githubusercontent.com/azure-samples/cosmos-db-migration-sample-data/main/nosql-data.json"
      }
    }
    
  5. 创建另一个名为 Sink 的新属性,值为 cosmos-nosql。 此外,创建名为 SinkSettings 的属性,值为空对象。

    {
      "Source": "json",
      "SourceSettings": {
        "FilePath": "https://raw.githubusercontent.com/azure-samples/cosmos-db-migration-sample-data/main/nosql-data.json"
      },
      "Sink": "cosmos-nosql",
      "SinkSettings": {
      }
    }
    
  6. SinkSettings 中,创建一个名为 ConnectionString 的属性,该属性使用本指南前文中记录的主连接字符串作为其值。

    {
      "Source": "json",
      "SourceSettings": {
        "FilePath": "https://raw.githubusercontent.com/azure-samples/cosmos-db-migration-sample-data/main/nosql-data.json"
      },
      "Sink": "cosmos-nosql",
      "SinkSettings": {
        "ConnectionString": "<connection-string-for-existing-account>"
      }
    }
    
  7. 添加 DatabaseContainerPartitionKeyPath 属性,值分别为 cosmicworksproducts/category

    {
      "Source": "json",
      "SourceSettings": {
        "FilePath": "https://raw.githubusercontent.com/azure-samples/cosmos-db-migration-sample-data/main/nosql-data.json"
      },
      "Sink": "cosmos-nosql",
      "SinkSettings": {
        "ConnectionString": "<connection-string-for-existing-account>",
        "Database": "cosmicworks",
        "Container": "products",
        "PartitionKeyPath": "/category"
      }
    }
    
  8. 保存migrationsettings.json 文件。

  9. 打开新终端并导航到包含 migrationsettings.json 文件的目录。

  10. 使用 dmt 命令运行桌面数据迁移工具。

    dmt
    

    注意

    如果未将安装路径添加到 PATH 环境变量,则可能需要指定 dmt 可执行文件的完整路径。

  11. 该工具现在输出迁移使用的源和接收器。

    Using JSON Source
    Using Cosmos-nosql Sink