共用方式為

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

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"
  }
}