使用 Azure 数据工厂或 Synapse Analytics(旧版)从 MongoDB 复制数据
适用于:Azure 数据工厂 Azure Synapse Analytics
本文概述如何使用 Azure 数据工厂或 Synapse Analytics 管道中的复制活动从 MongoDB 数据库复制数据。 它是基于概述复制活动总体的复制活动概述一文。
重要
服务发布了一款新的 MongoDB 连接器,与这个基于 ODBC 的实现相比,该连接器提供更好的原生 MongoDB 支持,详情请参阅 MongoDB 连接器一文。
支持的功能
可以将数据从 MongoDB 数据库复制到任何支持的接收器数据存储。 有关复制活动支持作为源/接收器的数据存储列表,请参阅支持的数据存储表。
具体而言,此 MongoDB 连接器支持:
- MongoDB 版本 2.4、2.6、3.0、3.2、3.4 和 3.6。
- 使用基本 或匿名 身份验证复制数据。
先决条件
如果数据存储位于本地网络、Azure 虚拟网络或 Amazon Virtual Private Cloud 内部,则需要配置自承载集成运行时才能连接到该数据存储。
如果数据存储是托管的云数据服务,则可以使用 Azure Integration Runtime。 如果访问范围限制为防火墙规则中允许的 IP,你可以选择将 Azure Integration Runtime IP 添加到允许列表。
此外,还可以使用 Azure 数据工厂中的托管虚拟网络集成运行时功能访问本地网络,而无需安装和配置自承载集成运行时。
要详细了解网络安全机制和数据工厂支持的选项,请参阅数据访问策略。
集成运行时提供内置 MongoDB 驱动程序,因此从 MongoDB 复制数据时,无需手动安装任何驱动程序。
入门
若要使用管道执行复制活动,可以使用以下工具或 SDK 之一:
使用 UI 创建一个到 MongoDB 的链接服务
使用以下步骤在 Azure 门户 UI 中创建一个到 MongoDB 的链接服务。
浏览到 Azure 数据工厂或 Synapse 工作区中的“管理”选项卡并选择“链接服务”,然后单击“新建”:
搜索 Mongo 并选择 MongoDB 连接器。
配置服务详细信息、测试连接并创建新的链接服务。
连接器配置详细信息
对于特定于 MongoDB 连接器的数据工厂实体,以下部分提供有关用于定义这些实体的属性的详细信息。
链接服务属性
MongoDB 链接的服务支持以下属性:
属性 | 描述 | 必需 |
---|---|---|
type | type 属性必须设置为:MongoDb | 是 |
server | MongoDB 服务器的 IP 地址或主机名。 | 是 |
port | MongoDB 服务器用于侦听客户端连接的 TCP 端口。 | 否(默认值为 27017) |
databaseName | 要访问的 MongoDB 数据库名称。 | 是 |
authenticationType | 用于连接 MongoDB 数据库的身份验证类型。 允许值包括:基本和匿名 。 |
是 |
username | 用于访问 MongoDB 的用户帐户。 | 是(如果使用基本身份验证)。 |
password | 用户密码。 将此字段标记为 SecureString 以安全地存储它,或引用存储在 Azure Key Vault 中的机密。 | 是(如果使用基本身份验证)。 |
authSource | 要用于检查身份验证凭据的 MongoDB 数据库名称。 | 否。 对于基本身份验证,默认使用管理员帐户和使用 databaseName 属性指定的数据库。 |
enableSsl | 指定是否使用 TLS 加密到服务器的连接。 默认值为 false。 | 否 |
allowSelfSignedServerCert | 指定是否允许来自服务器的自签名证书。 默认值是 false。 | 否 |
connectVia | 用于连接到数据存储的集成运行时。 在先决条件部分了解更多信息。 如果未指定,则使用默认 Azure Integration Runtime。 | 否 |
示例:
{
"name": "MongoDBLinkedService",
"properties": {
"type": "MongoDb",
"typeProperties": {
"server": "<server name>",
"databaseName": "<database name>",
"authenticationType": "Basic",
"username": "<username>",
"password": {
"type": "SecureString",
"value": "<password>"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
数据集属性
有关可用于定义数据集的各部分和属性的完整列表,请参阅数据集和链接服务。 MongoDB 数据集支持以下属性:
属性 | 描述 | 必需 |
---|---|---|
type | 数据集的 type 属性必须设置为:MongoDbCollection | 是 |
collectionName | MongoDB 数据库中集合的名称。 | 是 |
示例:
{
"name": "MongoDbDataset",
"properties": {
"type": "MongoDbCollection",
"linkedServiceName": {
"referenceName": "<MongoDB linked service name>",
"type": "LinkedServiceReference"
},
"typeProperties": {
"collectionName": "<Collection name>"
}
}
}
复制活动属性
有关可用于定义活动的各部分和属性的完整列表,请参阅管道一文。 本部分提供 MongoDB 源支持的属性列表。
以 MongoDB 作为源
复制活动source部分支持以下属性:
属性 | 描述 | 必需 |
---|---|---|
type | 复制活动 source 的 type 属性必须设置为:MongoDbSource | 是 |
查询 | 使用自定义 SQL-92 查询读取数据。 例如:select * from MyTable。 | 否(如果指定了数据集中的“collectionName”) |
示例:
"activities":[
{
"name": "CopyFromMongoDB",
"type": "Copy",
"inputs": [
{
"referenceName": "<MongoDB input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "MongoDbSource",
"query": "SELECT * FROM MyTable"
},
"sink": {
"type": "<sink type>"
}
}
}
]
提示
指定 SQL 查询时,请注意 DateTime 的格式。 例如:SELECT * FROM Account WHERE LastModifiedDate >= '2018-06-01' AND LastModifiedDate < '2018-06-02'
,或使用参数 SELECT * FROM Account WHERE LastModifiedDate >= '@{formatDateTime(pipeline().parameters.StartTime,'yyyy-MM-dd HH:mm:ss')}' AND LastModifiedDate < '@{formatDateTime(pipeline().parameters.EndTime,'yyyy-MM-dd HH:mm:ss')}'
数据工厂的构架
Azure 数据工厂服务通过使用 MongoDB 集合中最新的 100 个文档来推断该集合的架构。 如果这 100 个文档不包含完整架构,则在复制操作期间可能忽略某些列。
MongoDB 的数据类型映射
从 MongoDB 复制数据时,以下映射用于从 MongoDB 数据类型映射到在服务内部使用的临时数据类型。 若要了解复制活动如何将源架构和数据类型映射到接收器,请参阅架构和数据类型映射。
MongoDB 数据类型 | 临时服务数据类型 |
---|---|
二进制 | Byte[] |
布尔 | 布尔 |
Date | DateTime |
NumberDouble | Double |
NumberInt | Int32 |
NumberLong | Int64 |
ObjectID | String |
字符串 | String |
UUID | Guid |
Object | 重新标准化为平展列,以“_”作为嵌套分隔符 |
注意
要了解对使用虚拟表的数组的支持,请参阅支持使用虚拟表的复杂类型一节。
目前不支持以下 MongoDB 数据类型:DBPointer、JavaScript、最大/最小键、正则表达式、符号、时间戳、未定义。
支持使用虚拟表的复杂类型
服务使用内置的 ODBC 驱动程序连接到 MongoDB 数据库,并从中复制数据。 对于数组或文档间不同类型的对象等复杂类型,该驱动程序会将数据重新标准化到相应虚拟表中。 具体而言,如果表中包含此类列,该驱动程序会生成以下虚拟表:
- 基表,其中包含与实际表相同的数据(复杂类型列除外)。 基表使用与其所表示的实际表相同的名称。
- 对于每个复杂类型列生成一个虚拟表,这会扩展嵌套数据。 使用实际表名称、分隔符“_”和数组或对象的名称,对虚拟表命名。
虚拟表引用实际表中的数据,以使驱动程序能访问非规范化的数据。 通过查询和联接虚拟表,可访问 MongoDB 数组的内容。
示例
例如,此处的 ExampleTable 为 MongoDB 表,其中“发票”列的每个单元格包含对象数组,“评级”列则包含标量类型数组。
_id | 客户名称 | 发票 | 服务级别 | 评级 |
---|---|---|---|---|
1111 | ABC | [{invoice_id:"123", item:"toaster", price:"456", discount:"0.2"}, {invoice_id:"124", item:"oven", price:"1235", discount:"0.2"}] | Silver | [5,6] |
2222 | XYZ | [{invoice_id:"135", item:"fridge", price:"12543", discount:"0.0"}] | Gold | [1,2] |
该驱动程序会生成多个虚拟表来表示此单个表。 第一个虚拟表是名为“ExampleTable”的基表,如下例所示。 基表包含原始表中的所有数据,但已省略数组中的数据,这些数据会在虚拟表中展开。
_id | 客户名称 | 服务级别 |
---|---|---|
1111 | ABC | Silver |
2222 | XYZ | Gold |
下表显示在示例中表示原始数组的虚拟表。 这些表包含以下项:
- 通过 _id 列返回到原始主键列的引用,该列与原始数组的行对应
- 原始数组中数据位置的指示
- 该数组中每个元素展开的数据
“ExampleTable_Invoices”表:
_id | ExampleTable_Invoices_dim1_idx | invoice_id | item | price | 折扣 |
---|---|---|---|---|---|
1111 | 0 | 123 | 吐司炉 | 456 | 0.2 |
1111 | 1 | 124 | 烤箱 | 1235 | 0.2 |
2222 | 0 | 135 | 冰箱 | 12543 | 0.0 |
“ExampleTable_Ratings”表:
_id | ExampleTable_Ratings_dim1_idx | ExampleTable_Ratings |
---|---|---|
1111 | 0 | 5 |
1111 | 1 | 6 |
2222 | 0 | 1 |
2222 | 1 | 2 |
相关内容
有关复制活动支持作为源和接收器的数据存储的列表,请参阅支持的数据存储。