適用対象:
Azure Data Factory
Azure Synapse Analytics
ヒント
Data Factory in Microsoft Fabric は、よりシンプルなアーキテクチャ、組み込みの AI、および新機能を備えた次世代のAzure Data Factoryです。 データ統合を初めて使用する場合は、Fabric Data Factory から始めます。 既存の ADF ワークロードをFabricにアップグレードして、データ サイエンス、リアルタイム分析、レポートの新機能にアクセスできます。
この記事では、Azure Data Factoryまたは Synapse Analytics パイプラインでコピー アクティビティを使用して MongoDB データベースからデータをコピーする方法について説明します。 この記事は、コピー アクティビティの概要を示しているコピー アクティビティの概要に関する記事に基づいています。
重要
サービスでは、この ODBC ベースの実装と比較して、MongoDB をより適切にネイティブでサポートする新しい 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 Data Factoryの 管理された仮想ネットワーク統合ランタイム機能を使用して、セルフホステッド統合ランタイムをインストールして構成することなく、オンプレミス ネットワークにアクセスすることもできます。
Data Factory によってサポートされるネットワーク セキュリティ メカニズムやオプションの詳細については、「データ アクセス戦略」を参照してください。
Integration Runtimeには組み込みの MongoDB ドライバーが用意されているため、MongoDB からデータをコピーするときにドライバーを手動でインストールする必要はありません。
作業の開始
パイプラインでコピー アクティビティを実行するには、次のいずれかのツールまたは SDK を使用できます。
- データのコピー ツール
- Azure Portal
- .NET SDK
- Python SDK
- Azure PowerShell
- REST API
- Azure Resource Manager テンプレート
UI を使用して MongoDB のリンク サービスを作成する
Azure ポータル UI で MongoDB へのリンクされたサービスを作成するには、次の手順に従います。
Azure Data Factoryまたは Synapse ワークスペースの [管理] タブを参照し、[リンクされたサービス] を選択し、[新規] をクリックします。
- Azureデータファクトリー
- Azure Synapse
Azure Data Factory UI を使用した新しいリンク サービスの作成のスクリーンショット Mongo を検索し、MongoDB コネクタを選択します。
サービスの詳細を構成し、接続をテストして、新しいリンク サービスを作成します。
コネクタの構成の詳細
次のセクションでは、MongoDB コネクタに固有の Data Factory エンティティを定義するために使用されるプロパティについて詳しく説明します。
リンクされたサービスのプロパティ
MongoDB のリンクされたサービスでは、次のプロパティがサポートされます。
| プロパティ | 内容 | 必須 |
|---|---|---|
| 型 | type プロパティは、次のように設定する必要があります:MongoDb | はい |
| サーバー | MongoDB サーバーの IP アドレスまたはホスト名。 | はい |
| ポート | MongoDB サーバーがクライアント接続のリッスンに使用する TCP ポート。 | いいえ (既定値は 27017) |
| databaseName | アクセスする MongoDB データベースの名前。 | はい |
| 認証タイプ | MongoDB データベースへの接続に使用される認証の種類です。 使用できる値は、以下のとおりです。Basic、Anonymous。 |
はい |
| ユーザー名 | MongoDB にアクセスするためのユーザー アカウント。 | はい (基本認証が使用される場合)。 |
| パスワード | ユーザーのパスワード。 このフィールドを SecureString としてマークして安全に格納するか、 |
はい (基本認証が使用される場合)。 |
| 認証ソース | 認証のために資格情報を確認する際に使用する MongoDB データベースの名前。 | いいえ。 基本認証の場合、既定では管理者アカウントと、databaseName プロパティで指定されたデータベースが使用されます。 |
| enableSsl | サーバーへの接続が TLS を使用して暗号化されるかどうかを指定します。 既定値は false です。 | いいえ |
| allowSelfSignedServerCert(自己署名サーバー証明書を許可する) | サーバーからの自己署名証明書を許可するかどうかを指定します。 既定値は false です。 | いいえ |
| connectVia | データ ストアへの接続に使用するIntegration Runtime。 詳細については、「前提条件」セクションを参照してください。 指定しない場合は、既定の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 プロパティは、次のように設定する必要があります:MongoDbCollection | はい |
| コレクション名 | MongoDB データベースのコレクション名前。 | はい |
例:
{
"name": "MongoDbDataset",
"properties": {
"type": "MongoDbCollection",
"linkedServiceName": {
"referenceName": "<MongoDB linked service name>",
"type": "LinkedServiceReference"
},
"typeProperties": {
"collectionName": "<Collection name>"
}
}
}
Copy activity のプロパティ
アクティビティの定義に利用できるセクションとプロパティの完全な一覧については、パイプラインに関する記事を参照してください。 このセクションでは、MongoDB ソースでサポートされるプロパティの一覧を示します。
ソースとしての MongoDB
コピー アクティビティの 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')}' を使用するために
Data Factory によるスキーマ
Azure Data Factory サービスは、コレクション内で最も 100 個のドキュメントを使用して、MongoDB コレクションからスキーマを推論します。 この 100 個のドキュメントにスキーマが完全には含まれていない場合は、コピー操作中に無視される列が生じる可能性があります。
MongoDB のデータ型マッピング
MongoDB からデータをコピーするとき、MongoDB のデータ型からサービス内で内部的に使用される中間データ型への、以下のマッピングが使用されます。 コピー アクティビティでソースのスキーマとデータ型がシンクにマッピングされるしくみについては、スキーマとデータ型のマッピングに関する記事を参照してください。
| MongoDB のデータ型 | 暫定サービス データ型 |
|---|---|
| 日付 | Int64 |
| オブジェクト識別子 | String |
| Decimal128 | String |
| タイムスタンプ | 最も重要な 32 ビット -> Int64 最下位の 32 ビット -> Int64 |
| String | String |
| ダブル | ダブル |
| Int32 | Int64 |
| Int64 | Int64 |
| ブール値 | ブール値 |
| Null | Null |
| JavaScript | String |
| 正規表現 | String |
| 最小キー | Int64 |
| 最大キー | Int64 |
| バイナリ | String |
注意
仮想テーブルを使用した配列に対するサポートの詳細については、仮想テーブルを使用した複合型のサポートセクションをご覧ください。
現時点では、次の MongoDB データ型はサポートされていません:DBPointer、Symbol、Undefined。
仮想テーブルを使用した複合型のサポート
このサービスでは、組み込みの ODBC ドライバーを使用して、MongoDB データベースに接続し、MongoDB データベースからデータをコピーします。 複数のドキュメントのさまざまな型が含まれた配列やオブジェクトなどの複合型については、ODBC ドライバーによって、対応する仮想テーブルへのデータの再正規化が行われます。 具体的には、テーブルにそのような列が含まれている場合に、ドライバーによって次の仮想テーブルが生成されます。
- 実テーブルと同じデータ (複合型列を除く) を含む ベース テーブル。 ベース テーブルには、それが表す実テーブルと同じ名前が使用されます。
- 複合型列ごとの仮想テーブル。入れ子になったデータが展開されます。 仮想テーブルの名前は、実テーブルの名前、区切り文字の "_"、配列またはオブジェクトの名前を使用して付けられます。
仮想テーブルが実テーブルのデータを参照することで、ドライバーは非正規化データにアクセスできるようになります。 仮想テーブルのクエリや結合によって、MongoDB の配列の内容にアクセスできます。
例
例としてここに挙げる "ExampleTable" は、各セルにオブジェクトの配列が 1 つ含まれた列 Invoices と、スカラー型の配列が 1 つ含まれた列 Ratings で構成された MongoDB テーブルです。
| _id | 顧客名 | 請求書 | サービス レベル | 評価 |
|---|---|---|---|---|
| 1111 | ABC | [{invoice_id:"123", 商品:"トースター", 価格:"456", 割引:"0.2"}, {invoice_id:"124", 商品:"オーブン", 価格:"1235", 割引:"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 | 項目 | 価格 | 割引 |
|---|---|---|---|---|---|
| 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 |
関連するコンテンツ
Copy アクティビティでソースおよびシンクとしてサポートされるデータ ストアの一覧については、サポートされるデータ ストアに関するセクションを参照してください。