使用 Azure Data Factory 或 Synapse Analytics (舊版) 從 MongoDB 複製資料
適用於:Azure Data Factory Azure Synapse Analytics
提示
試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的全方位分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告的所有項目。 了解如何免費開始新的試用!
此文章概述如何使用 Azure Data Factory 或 Synapse Analytics 管線中的複製活動,從 MongoDB 資料庫複製資料。 本文是根據複製活動概觀一文,該文提供複製活動的一般概觀。
重要
該服務已推出一個新的 MongoDB 連接器,與這個 ODBC 型實作相比,其提供了更好的原生 MongoDB 支援,如需詳細資料,請參閱 MongoDB 連接器一文。
支援的功能
您可以將資料從 MongoDB 資料庫複製到任何支援的接收資料存放區。 如需複製活動所支援作為來源/接收器的資料存放區清單,請參閱支援的資料存放區表格。
具體而言,這個 MongoDB 連接器支援:
- MongoDB 2.4、2.6、3.0、3.2、3.4、3.6 版。
- 使用 Basic (基本) 或 Anonymous (匿名) 驗證來複製資料。
必要條件
如果您的資料存放區位於內部部署網路、Azure 虛擬網路或 Amazon 虛擬私人雲端中,則必須設定自我裝載整合執行階段以與其連線。
如果您的資料存放區是受控雲端資料服務,則可使用 Azure Integration Runtime。 如果只能存取防火牆規則中核准的 IP,您可以將 Azure Integration Runtime IP 新增至允許清單。
您也可以使用 Azure Data Factory 中的受控虛擬網路整合執行階段功能來存取內部部署網路,而不需要安裝和設定自我裝載整合執行階段。
如需 Data Factory 支援的網路安全性機制和選項的詳細資訊,請參閱資料存取策略。
Integration Runtime 提供內建的 MongoDB 驅動程式,因此從 MongoDB 複製資料時,您不需要手動安裝任何驅動程式。
開始使用
若要透過管線執行複製活動,您可以使用下列其中一個工具或 SDK:
使用 UI 建立 MongoDB 的連結服務
使用下列步驟,在 Azure 入口網站 UI 中建立至 MongoDB 的連結服務。
前往 Azure Data Factory 或 Synapse 工作區的 [管理] 索引標籤,選取 [連結服務],然後按一下 [新增]:
搜尋 Mongo,然後選取 MongoDB 連接器。
設定服務詳細資料,測試連線,然後建立新的連結服務。
連接器設定詳細資料
下列各節提供屬性的相關詳細資料,這些屬性是用來定義 MongoDB 連接器專屬的 Data Factory 實體。
連結服務屬性
以下是針對 MongoDB 已連結服務支援的屬性:
屬性 | 描述 | 必要 |
---|---|---|
type | 類型屬性必須設定為:MongoDb | Yes |
伺服器 | MongoDB 伺服器的 IP 位址或主機名稱。 | Yes |
port | MongoDB 伺服器用來接聽用戶端連線的 TCP 連接埠。 | 否 (預設值為 27017) |
databaseName | 您想要存取之 MongoDB 資料庫的名稱。 | Yes |
authenticationType | 用來連線到 MongoDB 資料庫的驗證類型。 允許的值為:Basic (基本) 和 Anonymous (匿名)。 |
Yes |
username | 用來存取 MongoDB 的使用者帳戶。 | 是 (如果使用基本驗證)。 |
password | 使用者的密碼。 將此欄位標記為 SecureString 以便安全儲存,或參考 Azure Key Vault 中儲存的祕密。 | 是 (如果使用基本驗證)。 |
authSource | 您想要用來檢查驗證所用之認證的 MongoDB 資料庫名稱。 | 否。 就基本驗證而言,預設會使用以 databaseName 屬性指定的系統管理員帳戶和資料庫。 |
enableSsl | 指定是否使用 TLS 加密與伺服器的連線。 預設值為 false。 | No |
allowSelfSignedServerCert | 指定是否允許來自伺服器的自我簽署憑證。 預設值為 false。 | No |
connectVia | 用於連線到資料存放區的 Integration Runtime。 深入了解必要條件一節。 如果未指定,就會使用預設的 Azure Integration Runtime。 | No |
範例:
{
"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 | 資料集的類型屬性必須設定為:MongoDbCollection | Yes |
collectionName | MongoDB 資料庫中集合的名稱。 | Yes |
範例:
{
"name": "MongoDbDataset",
"properties": {
"type": "MongoDbCollection",
"linkedServiceName": {
"referenceName": "<MongoDB linked service name>",
"type": "LinkedServiceReference"
},
"typeProperties": {
"collectionName": "<Collection name>"
}
}
}
複製活動屬性
如需可用來定義活動的區段和屬性完整清單,請參閱管線一文。 本節提供 MongoDB 來源所支援的屬性清單。
MongoDB 作為來源
複製活動的 source 區段支援下列屬性:
屬性 | 描述 | 必要 |
---|---|---|
type | 複製活動來源的類型屬性必須設定為:MongoDbSource | Yes |
query | 使用自訂的 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')}'
Data factory 的結構描述
Azure Data Factory 服務會使用 MongoDB 集合中最新的 100 份文件,從該集合推斷結構描述。 如果這 100 份文件未包含完整結構描述,則在複製作業期間可能會忽略某些資料行。
MongoDB 的資料類型對應
從 MongoDB 複製資料時,從 MongoDB 資料類型到服務在內部使用的過渡期資料類型皆會使用下列對應。 請參閱結構描述和資料類型對應,以了解複製活動如何將來源結構描述和資料類型對應至接收器。
MongoDB 資料類型 | 過渡期服務資料類型 |
---|---|
二進位 | Byte[] |
Boolean | Boolean |
Date | Datetime |
NumberDouble | Double |
NumberInt | Int32 |
NumberLong | Int64 |
ObjectID | String |
String | String |
UUID | GUID |
Object | 以 "_" 作為巢狀分隔符號來重新標準化為壓平合併資料行 |
注意
若要了解對使用虛擬資料表之陣列的支援,請參閱對使用虛擬資料表之複雜類型的支援一節。
目前不支援下列 MongoDB 資料類型︰DBPointer、JavaScript、Max/Min 索引鍵、規則運算式、符號、時間戳記、未定義。
使用虛擬資料表之複雜類型的支援
服務會使用內建的 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"}] | 銀色 | [5,6] |
2222 | XYZ | [{invoice_id:"135", item:"fridge", price: "12543", discount: "0.0"}] | 金卡 | [1,2] |
驅動程式會產生多個代表這個單一資料表的虛擬資料表。 第一個虛擬資料表是名為 "ExampleTable" 的基底資料表,如範例所示。 基底資料表包含原始資料表的所有資料,但來自陣列的資料已省略,並且會在虛擬資料表中展開。
_id | 客戶名稱 | 服務等級 |
---|---|---|
1111 | ABC | 銀色 |
2222 | XYZ | 金卡 |
下表顯示代表範例中原始陣列的虛擬資料表。 這些資料表包含下列項目:
- 對應到原始陣列資料列 (透過 _id 資料行) 之原始主要索引鍵資料行的往回參考
- 資料在原始陣列之位置的指示
- 陣列內每個元素的展開資料
"ExampleTable_Invoices" 資料表:
_id | ExampleTable_Invoices_dim1_idx | invoice_id | 項目 | price | Discount |
---|---|---|---|---|---|
1111 | 0 | 123 | toaster | 456 | 0.2 |
1111 | 1 | 124 | oven | 1235 | 0.2 |
2222 | 0 | 135 | fridge | 12543 | 0.0 |
"ExampleTable_Ratings" 資料表:
_id | ExampleTable_Ratings_dim1_idx | ExampleTable_Ratings |
---|---|---|
1111 | 0 | 5 |
1111 | 1 | 6 |
2222 | 0 | 1 |
2222 | 1 | 2 |
相關內容
如需複製活動支援作為來源和接收器的資料存放區清單,請參閱支援的資料存放區。