使用数据迁移工具迁移数据

Azure Cosmos DB 数据迁移工具是一个开源命令行应用程序,用于从 Azure Cosmos DB 导入或导出数据。 该工具基于源和接收器对象的扩展模型来迁移数据。

支持的扩展

先决条件

使用预生成的 Docker 映像

使用容器的最简单方法是从Microsoft容器注册表拉取预生成的映像。 需要 Docker Desktop

注意

还可以将数据迁移工具配置为在任何容器化环境中或作为 GitHub作的一部分运行。 有关更多详细信息,请参阅 Docker 容器中的运行

  1. 从注册表拉取最新版本的容器。

    docker pull mcr.microsoft.com/azurecosmosdb/linux/azure-cosmos-dmt:latest
    
  2. 配置迁移设置。 请参阅 “配置迁移设置”

docker run -v $(pwd)/config:/config -v $(pwd)/data:/data mcr.microsoft.com/azurecosmosdb/linux/azure-cosmos-dmt:latest run --settings /config/migrationsettings.json

从命令行使用

  1. 在浏览器中,导航到存储库的“发布”部分

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

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

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

  5. 配置迁移设置。 请参阅 “配置迁移设置”

  6. 使用终端中的 dmt 命令运行数据迁移工具。

    dmt
    

    注意

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

  7. 该工具输出迁移使用的源和汇点。

    Using JSON Source
    Using Cosmos-nosql Sink
    

配置迁移设置

数据迁移工具使用 migrationsettings.json 为要复制的数据定义源和接收器设置。 有关每个扩展迁移设置的详细信息,请参阅 支持的扩展

下面是将 示例 JSON 文件 迁移到 Cosmos DB 模拟器的示例。

{
    "Source": "JSON",
    "Sink": "Cosmos-nosql",
    "SourceSettings": {
        "FilePath": "C:\\dmt\\data\\simple_json.json"
    },
    "SinkSettings": {
        "ConnectionString": "AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDj...",
        "Database": "datamigration",
        "Container": "sample",
        "PartitionKeyPath": "/id",
        "RecreateContainer": false,
        "IncludeMetadataFields": false
    }
}

迁移多个源

为了执行多个数据传输操作,还可以将 migrationsettings.json 配置为使用 Operations 属性,该属性由一组对象组成,其中包括扩展的 SourceSettingsSinkSettings,这些扩展在 SourceSink 属性中被引用。

下面是一个示例:

{
  "Source": "json",
  "Sink": "cosmos-nosql",
  "SinkSettings": {
    "ConnectionString": "AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDj..."
  },
  "Operations": [
    {
      "SourceSettings": {
        "FilePath": "products.json"
      },
      "SinkSettings": {
        "Database": "ShoppingCartDB",
        "Container": "products",
        "PartitionKeyPath": "/categoryId"
      }
    },
    {
      "SourceSettings": {
        "FilePath": "customers.json"
      },
      "SinkSettings": {
        "Database": "ShoppingCartDB",
        "Container": "customers",
        "PartitionKeyPath": "/customerId"
      }
    },
    {
      "SourceSettings": {
        "FilePath": "orders.json"
      },
      "SinkSettings": {
        "Database": "ShoppingCartDB",
        "Container": "customers",
        "PartitionKeyPath": "/customerId"
      }
    }
  ]
}

查询支持

某些扩展还支持对源设置的查询。 有关详细信息,请参阅每个扩展的文档。

下面是一个示例:

{
  "Source": "cosmos-nosql",
  "Sink": "cosmos-nosql",
  "SourceSettings": {
    "ConnectionString": "AccountEndpoint=https://...",
    "Database": "ShoppingCartDB",
    "Container": "customers",
    "Query": "SELECT * FROM c WHERE c.type='order'"
  },
  "SinkSettings": {
    "ConnectionString": "AccountEndpoint=https://...",
    "Database": "orders",
    "PartitionKeyPath": "/customerId"
  }
}