Azure Data Factory または Synapse Analytics (レガシ) を使用して MongoDB からデータをコピーする

適用対象: Azure Data Factory Azure Synapse Analytics

ヒント

企業向けのオールインワン分析ソリューション、Microsoft Fabric の Data Factory をお試しください。 Microsoft 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 を使用します。

UI を使用して MongoDB のリンク サービスを作成する

次の手順を使用して、Azure portal UI で MongoDB のリンク サービスを作成します。

  1. Azure Data Factory または Synapse ワークスペースの [管理] タブに移動し、[リンクされたサービス] を選択して、[新規] をクリックします。

  2. Mongo を検索し、MongoDB コネクタを選択します。

    Screenshot of the MongoDB connector.

  3. サービスの詳細を構成し、接続をテストして、新しいリンク サービスを作成します。

    Screenshot of linked service configuration for MongoDB.

コネクタの構成の詳細

次のセクションでは、MongoDB コネクタに固有の Data Factory エンティティを定義するために使用されるプロパティについて詳しく説明します。

リンクされたサービスのプロパティ

MongoDB のリンクされたサービスでは、次のプロパティがサポートされます。

プロパティ 内容 必須
type type プロパティは、次のように設定する必要があります:MongoDb はい
server MongoDB サーバーの IP アドレスまたはホスト名。 はい
port MongoDB サーバーがクライアント接続のリッスンに使用する TCP ポート。 いいえ (既定値は 27017)
databaseName アクセスする MongoDB データベースの名前。 はい
authenticationType MongoDB データベースへの接続に使用される認証の種類です。
使用できる値は、以下のとおりです。BasicAnonymous
はい
username MongoDB にアクセスするためのユーザー アカウント。 はい (基本認証が使用される場合)。
password ユーザーのパスワード。 このフィールドを SecureString とマークして安全に保存するか、Azure Key Vault に保存されているシークレットを参照します。 はい (基本認証が使用される場合)。
authSource 認証のために資格情報を確認する際に使用する MongoDB データベースの名前。 いいえ。 基本認証の場合、既定では管理者アカウントと、databaseName プロパティで指定されたデータベースが使用されます。
enableSsl サーバーへの接続が TLS を使用して暗号化されるかどうかを指定します。 既定値は false です。 いいえ
allowSelfSignedServerCert サーバーからの自己署名証明書を許可するかどうかを指定します。 既定値は false です。 いいえ
connectVia データ ストアに接続するために使用される統合ランタイム。 詳細については、「前提条件」セクションを参照してください。 指定されていない場合は、既定の Azure 統合ランタイムが使用されます。 いいえ

例:

{
    "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 コピー アクティビティのソースの type プロパティは、次のように設定する必要があります:MongoDbSource はい
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 のデータ型 中間サービス データ型
Binary Byte[]
Boolean Boolean
DateTime
NumberDouble Double
NumberInt Int32
NumberLong Int64
ObjectID String
String String
UUID Guid
Object 入れ子の区切り文字に "_" を使用してフラット化された列に再正規化されます。

Note

仮想テーブルを使用した配列に対するサポートの詳細については、仮想テーブルを使用した複合型のサポートセクションをご覧ください。

現時点では、次の MongoDB データ型はサポートされていません: DBPointer、JavaScript、Max/Min key、Regular Expression、Symbol、Timestamp、Undefined。

仮想テーブルを使用した複合型のサポート

このサービスでは、組み込みの ODBC ドライバーを使用して、MongoDB データベースに接続し、MongoDB データベースからデータをコピーします。 複数のドキュメントのさまざまな型が含まれた配列やオブジェクトなどの複合型については、ODBC ドライバーによって、対応する仮想テーブルへのデータの再正規化が行われます。 具体的には、テーブルにそのような列が含まれている場合に、ドライバーによって次の仮想テーブルが生成されます。

  • 実テーブルと同じデータ (複合型列を除く) を含む ベース テーブル。 ベース テーブルには、それが表す実テーブルと同じ名前が使用されます。
  • 複合型列ごとの仮想テーブル。入れ子になったデータが展開されます。 仮想テーブルの名前は、実テーブルの名前、区切り文字の "_"、配列またはオブジェクトの名前を使用して付けられます。

仮想テーブルが実テーブルのデータを参照することで、ドライバーは非正規化データにアクセスできるようになります。 仮想テーブルのクエリや結合によって、MongoDB の配列の内容にアクセスできます。

例としてここに挙げる "ExampleTable" は、各セルにオブジェクトの配列が 1 つ含まれた列 Invoices と、スカラー型の配列が 1 つ含まれた列 Ratings で構成された MongoDB テーブルです。

_id Customer Name Invoices サービス レベル Ratings
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 Customer Name サービス レベル
1111 ABC シルバー
2222 XYZ ゴールド

次のテーブルは、例における元の配列を表す仮想テーブルを示しています。 これらのテーブルには、以下が含まれます。

  • 元の配列の行に対応する元のプライマリ キー列への参照 (_Id 列を使用)
  • 元の配列内のデータの位置の指定
  • 配列内の各要素の展開されたデータ

テーブル "ExampleTable_Invoices":

_id ExampleTable_Invoices_dim1_idx invoice_id item 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

Copy アクティビティでソースおよびシンクとしてサポートされるデータ ストアの一覧については、サポートされるデータ ストアに関するセクションを参照してください。