Compartilhar via

使用 Azure 数据工厂 或 Synapse Analytics 向/从 Azure Cosmos DB for MongoDB 复制数据

适用于: Azure 数据工厂 Azure Synapse Analytics

本文概述了如何使用 Azure 数据工厂 和 Synapse Analytics 管道中的复制活动,在 Azure Cosmos DB for MongoDB 与 MongoDB 之间进行数据复制。 本文是基于概括性介绍复制活动的复制活动一文编写的。

注意

此连接器仅支持将数据复制到Azure Cosmos DB for MongoDB中或从其复制数据。 有关 Azure Cosmos DB for NoSQL, 请参阅 Azure Cosmos DB for NoSQL 连接器。 目前不支持其他 API 类型。

支持的功能

Azure Cosmos DB 用于 MongoDB 的连接器支持以下功能:

支持的功能 IR 托管私有终结点
复制活动 (源/接收器) (1) (2)

(1) Azure集成运行时 (2) 自承载集成运行时

可以将数据从用于 MongoDB 的 Azure Cosmos DB 复制到任何支持的目标数据存储,或者将数据从任何受支持的源数据存储复制到用于 MongoDB 的 Azure Cosmos DB。 有关复制活动支持作为源和接收器的数据存储的列表,请参阅支持的数据存储和格式

您可以使用适用于 MongoDB 的 Azure Cosmos DB 连接器来:

  • 从 MongoDB 复制数据并将其复制到 Azure Cosmos DB
  • insertupsert 写入Azure Cosmos DB。
  • 按原样导入和导出 JSON 文档,或在表格数据集中复制或粘贴数据。 示例包括 SQL 数据库和 CSV 文件。 若要将文档原样复制到或从 JSON 文件,或者从或复制到另一个 Azure Cosmos DB 集合,请参阅导入或导出 JSON 文档。

开始

若要使用管道执行复制活动,可以使用以下工具或 SDK 之一:

使用 UI 创建用于 MongoDB 的 Azure Cosmos DB 的链接服务

使用以下步骤在 Azure 门户 UI 中创建用于 MongoDB Azure Cosmos DB的链接服务。

  1. 浏览到Azure 数据工厂或 Synapse 工作区中的“管理”选项卡并选择“链接服务”,然后单击“新建”:

  2. 搜索 Azure Cosmos DB for MongoDB并选择该连接器。

    选择 Azure Cosmos DB 的 MongoDB 连接器。

  3. 配置服务详细信息、测试连接并创建新的链接服务。

    配置用于 MongoDB 的链接服务到 Azure Cosmos DB。

连接器配置详细信息

以下部分提供有关可用于定义特定于 mongoDB Azure Cosmos DB的数据工厂实体的属性的详细信息。

连接的服务属性

MongoDB 链接服务的 Azure Cosmos DB支持以下属性:

属性 描述 必需
类型 type 属性必须设置为 CosmosDbMongoDbApi
connectionString 为 MongoDB 的 Azure Cosmos DB 指定连接字符串。 可以在 Azure 门户中找到它 -> Azure Cosmos DB 功能页 -> 主要或辅助连接字符串。
对于 3.2 服务器版本,字符串模式为 mongodb://<cosmosdb-name>:<password>@<cosmosdb-name>.documents.azure.cn:10255/?ssl=true&replicaSet=globaldb
对于 3.6+ 服务器版本,字符串模式为 mongodb://<cosmosdb-name>:<password>@<cosmosdb-name>.mongo.cosmos.azure.cn:10255/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000&appName=@<cosmosdb-name>@

还可以将密码放在Azure 密钥保管库中,并将 password 配置从连接字符串拉取出来。 有关更多详细信息,请参阅《Azure 密钥保管库 中存储凭据》。
数据库 要访问的数据库的名称。
isServerVersionAbove32 指定服务器版本是否高于 3.2。 允许的值为“true”和“false”(默认值)。 这将确定要在服务中使用的驱动程序。
connectVia 用于连接到数据存储的 Integration Runtime。 可以使用 Azure 集成运行时或自托管集成运行时(如果数据存储位于专用网络中)。 如果未指定此属性,则使用默认Azure Integration Runtime。

示例

{
    "name": "CosmosDbMongoDBAPILinkedService",
    "properties": {
        "type": "CosmosDbMongoDbApi",
        "typeProperties": {
            "connectionString": "mongodb://<cosmosdb-name>:<password>@<cosmosdb-name>.documents.azure.cn:10255/?ssl=true&replicaSet=globaldb",
            "database": "myDatabase",
            "isServerVersionAbove32": "false"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

数据集属性

有关可用于定义数据集的各部分和属性的完整列表,请参阅数据集和链接服务。 Azure Cosmos DB 用于 MongoDB 数据集时支持以下属性:

属性 描述 必需
类型 数据集的 type 属性必须设置为 CosmosDbMongoDbApiCollection
collectionName Azure Cosmos DB集合的名称。

示例

{
    "name": "CosmosDbMongoDBAPIDataset",
    "properties": {
        "type": "CosmosDbMongoDbApiCollection",
        "typeProperties": {
            "collectionName": "<collection name>"
        },
        "schema": [],
        "linkedServiceName":{
            "referenceName": "<Azure Cosmos DB for MongoDB linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

复制活动属性

本部分提供用于 MongoDB 源和接收器支持Azure Cosmos DB的属性列表。

有关可用于定义活动的各个部分和属性的完整列表,请参阅管道

作为 MongoDB 源的 Azure Cosmos DB

复制活动 source 部分支持以下属性:

属性 描述 必需
类型 复制活动源的 type 属性必须设置为 CosmosDbMongoDbApiSource
筛选器 使用查询运算符指定选择筛选器。 若要返回集合中的所有文档,请省略此参数或传递空文档 ({})。
cursorMethods.project 指定要在文档中返回用于投影的字段。 若要返回匹配文档中的所有字段,请省略此参数。
cursorMethods.sort 指定查询返回匹配文档的顺序。 请参阅 cursor.sort()
cursorMethods.limit 指定服务器返回的文档的最大数量。 请参阅 cursor.limit()
cursorMethods.skip(跳过方法) 指定要跳过的文档数量以及 MongoDB 开始返回结果的位置。 请参阅 cursor.skip()
批量大小 指定从 MongoDB 实例的每批响应中返回的文档数量。 大多数情况下,修改批大小不会影响用户或应用程序。 Azure Cosmos DB限制每个批处理的总大小不能超过 40MB,这个限制是由批处理中所有文档的大小总和决定的,因此,如果其中某个文档的大小较大,请减小此值。
(默认值为 100

提示

ADF 支持在严格模式下使用 BSON 文档。 请确保筛选器查询处于严格模式,而不是 Shell 模式。 有关详细说明,请参阅 MongoDB 手册

示例

"activities":[
    {
        "name": "CopyFromCosmosDBMongoDBAPI",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Azure Cosmos DB for MongoDB input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "CosmosDbMongoDbApiSource",
                "filter": "{datetimeData: {$gte: ISODate(\"2018-12-11T00:00:00.000Z\"),$lt: ISODate(\"2018-12-12T00:00:00.000Z\")}, _id: ObjectId(\"5acd7c3d0000000000000000\") }",
                "cursorMethods": {
                    "project": "{ _id : 1, name : 1, age: 1, datetimeData: 1 }",
                    "sort": "{ age : 1 }",
                    "skip": 3,
                    "limit": 3
                }
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

用作 MongoDB 数据库接收端的 Azure Cosmos DB

在复制活动的 sink 节中支持以下属性:

属性 描述 必需
类型 复制活动接收器的 type 属性必须设置为 CosmosDbMongoDbApiSink
writeBehavior 介绍如何将数据写入Azure Cosmos DB。 允许的值为 insertupsert

upsert 的行为是,如果已存在具有相同 _id 的文档,则替换该文档;否则将插入该文档。

注意:如果在原始文档中未指定 _id,或未通过列映射指定 _id,则服务会自动为文档生成 _id。 这表示必须先确保文档有 ID,才能让 upsert 按预期工作。

(默认值为 insert
writeBatchSize writeBatchSize 属性控制每个批中可写入的文档大小。 可尝试增大 writeBatchSize 的值以提高性能,并在文档大小较大时减小该值。
(默认值为 10,000
writeBatchTimeout 在超时发生前,等待批量插入操作完成的时间。允许的值为时间跨度。
(默认值为 00:30:00 - 30 分钟)

提示

若要按原样导入 JSON 文档,请参阅导入或导出 JSON 文档部分;若要从表格形数据复制,请参阅架构映射

示例

"activities":[
    {
        "name": "CopyToCosmosDBMongoDBAPI",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Document DB output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "CosmosDbMongoDbApiSink",
                "writeBehavior": "upsert"
            }
        }
    }
]

导入和导出 JSON 文档

您可以使用此 Azure Cosmos DB 连接器轻松:

  • 在两个Azure Cosmos DB集合之间原样复制文档。
  • 将 JSON 文档从各种源导入到Azure Cosmos DB,包括从 MongoDB、Azure Blob 存储以及服务支持的其他基于文件的存储。
  • 将 JSON 文档从Azure Cosmos DB集合导出到各种基于文件的存储。

若要实现架构无关的复制,请执行以下操作:

  • 在使用“复制数据”工具时,选择如实导出到 JSON 文件或 Azure Cosmos DB 集合选项。
  • 在使用活动编写时,请为源或汇选择 JSON 格式和相应的文件存储。

模式映射

若要将数据从 Azure Cosmos DB for MongoDB 复制到表格接收器或反向复制,请参阅 模式映射

具体而言,为了将数据写入 Azure Cosmos DB,并确保使用源数据中的正确对象 ID 填充 Azure Cosmos DB,例如,在 SQL 数据库表中有一个“id”列,并且希望将其值用作 MongoDB 中的文档 ID 进行插入或更新插入,需要根据 MongoDB 严格模式定义设置适当的架构映射(_id.$oid),如下所示:

MongoDB 数据接收器中的映射 ID

完成复制活动的执行后,接收器中将生成以下 BSON ObjectId:

{
    "_id": ObjectId("592e07800000000000000000")
}

Azure Cosmos DB 的 MongoDB 数据类型映射

从 Azure Cosmos DB for MongoDB 复制数据时,以下映射用于将 MongoDB 数据类型转换为服务内部使用的临时数据类型。 若要了解复制活动如何将源架构和数据类型映射到接收器,请参阅架构和数据类型映射

用于 MongoDB 数据类型的Azure Cosmos DB 临时服务数据类型
日期 Int64
对象标识符 (ObjectId) String
Decimal128 String
时间戳 最重要的 32 位 -> Int64
最小有效 32 位 -> Int64
String String
Double Double
Int32 Int64
Int64 Int64
布尔 布尔
Null Null
JavaScript String
正则表达式 String
最小键 Int64
最大键 Int64
Binary String

有关复制活动支持作为源和接收器的数据存储的列表,请参阅支持的数据存储