Azure Cosmos DB 数据迁移工具是一个开源命令行应用程序,用于从 Azure Cosmos DB 导入或导出数据。 该工具基于源和接收器对象的扩展模型来迁移数据。
支持的扩展
先决条件
- 一个现有的 Azure Cosmos DB for NoSQL 帐户。
- 本地计算机上的 .NET 8.0 或更高版本。
- 可选 Docker Desktop
使用预生成的 Docker 映像
使用容器的最简单方法是从Microsoft容器注册表拉取预生成的映像。 需要 Docker Desktop。
注意
还可以将数据迁移工具配置为在任何容器化环境中或作为 GitHub作的一部分运行。 有关更多详细信息,请参阅 Docker 容器中的运行 。
从注册表拉取最新版本的容器。
docker pull mcr.microsoft.com/azurecosmosdb/linux/azure-cosmos-dmt:latest配置迁移设置。 请参阅 “配置迁移设置”
docker run -v $(pwd)/config:/config -v $(pwd)/data:/data mcr.microsoft.com/azurecosmosdb/linux/azure-cosmos-dmt:latest run --settings /config/migrationsettings.json
从命令行使用
在浏览器中,导航到存储库的“发布”部分。
下载适用于你的平台的最新压缩文件夹。 有适用于 win-x64、win-arm64、mac-x64、mac-arm64、linux-x64 和 linux-arm64 平台的压缩文件夹。
将文件提取到本地计算机上的安装位置。
(可选)将数据迁移工具添加到
PATH本地计算机的环境变量。配置迁移设置。 请参阅 “配置迁移设置”
使用终端中的
dmt命令运行数据迁移工具。dmt注意
如果未将安装路径添加到
PATH环境变量,则可能需要指定可执行文件的完整路径dmt。该工具输出迁移使用的源和汇点。
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 属性,该属性由一组对象组成,其中包括扩展的 SourceSettings 和 SinkSettings,这些扩展在 Source 和 Sink 属性中被引用。
下面是一个示例:
{
"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"
}
}