MongoDB ソース¶
このセクションでは、MongoDB データソースを作成し、つづいてそのデータソースに対して基本ビューを作成する方法について説明します。該当のデータソースからデータを取得するには、これらの基本ビューにクエリを実行します。ここで取り上げるトピックは次のとおりです。
MongoDB データソースの作成¶
MongoDB データソースを作成するには、 [File] メニュー > [New] > [Data source] をクリックして、[MongoDB] をクリックします。

MongoDB データソース: [Connection] タブ¶
以下の情報を入力します。
[Connection] タブ
Name: 新しいデータソースの名前。
Connected by: コネクション情報を指定する方法として、ホストとポート ([Connection parameters]) または完全な URI ([MongoDB URI]) のいずれかを選択します。
MongoDB Atlas クラスタに接続するには、[MongoDB URI] オプションを使用する必要があります。このドキュメントでは、完全な URI: MongoDB Atlas 接続文字列を見つける を取得する方法を示しています。以下に例を示します。
MongoDB Atlas クラスタへの接続:
mongodb+srv://username:password@cluster0.example.mongodb.net/?retryWrites=true&w=majority&appName=cluster0
セルフホスト型の MongoDB スタンドアロンデプロイへの接続:
mongodb://username:password@denodo.com:27017/defaultauthdb
どちらの例でも、資格情報
username:password
は URI で省略することができ、以下で説明する [Authentication] セクションで構成できます。Use TLS: データベースとの接続で使用する TLS のタイプを選択します。[
Mutual (two-way TLS)
] の詳細については、以下の「 相互認証 」のセクションを参照してください。Authentication: 認証方法を選択し、ユーザー資格情報に関連付けられたデータベースの名前を [Database] フィールドに入力します (これは MongoDB のコネクションオプション authSource に相当します)。
以下の認証オプションがあります。
No authentication:
Login and password:
Kerberos with login and password: データソースは、ユーザーが入力したログインとパスワードで Kerberos 認証を使用してデータベースに接続します。
Kerberos with keytab: データソースは、ユーザーが入力したログインと keytab ファイルで Kerberos を使用してデータベースに接続します。
Use Pass-through session credentials: 選択すると、このデータソースを使用するビューにクライアントアプリケーションがクエリを実行するとき、データソースではユーザーの資格情報を使用してこのデータベースに接続します。この動作は、クライアントアプリケーションが Virtual DataPort に接続する場合に使用する認証方法によって異なります。
クライアントが Kerberos 認証を使用して接続する場合、サーバーでは、このユーザーの代わりにデータベースに接続するために Kerberos チケットを要求します。このオプションが機能するには、データベースでも Kerberos 認証をサポートしている必要があります。
クライアントがログインとパスワードを使用して接続する場合、サーバーはこのログインとパスワードを使用してデータベースに接続します。
データベースが Kerberos 認証のみをサポートしている場合、[Requires Kerberos] を選択すると、サーバーはクライアントのログインとパスワードを使用して、データベースに接続するための Kerberos チケットを取得します。
パススルーセッション資格情報の機能はクエリにのみ適用されます。イントロスペクションプロセス (データソースの「Create base view」ウィザードでデータベースのコレクションを表示するプロセス) でサーバーがデータベースに接続する際に使用する資格情報を提供する必要があります。そのため、この認証方法を選択すると、[Use other type of authentication to create base view] パネルが表示されます。このパネルでは、イントロスペクションプロセス (データソースの「Create base view」ウィザードでデータベースのテーブルやビューを表示するプロセス) でデータベースに接続するために別の認証方法を選択する必要があります。
このオプションでデータソースを作成する場合、サーバーは、このデータソースを伴うクエリを実行する新規ユーザーごとにコネクションプールを作成します。初期状態では、これらのプールには、コネクションが多く作成されないように 1 つのコネクションしかありません。各プールのコネクションの最大数は、コネクションプールの [Maximum number of active connections] フィールドの値です。詳細については、「 コネクションプールの構成 」のセクションを参照してください。
警告
パススルー資格情報が有効なデータソースを含むビューでキャッシュを有効にする場合は注意してください。付録「 データソースをパススルー資格情報を使用して構成する場合の検討事項 」で、発生する可能性のある問題について説明しています。
Credentials vault: データソースは、Virtual DataPort の管理者がサーバー構成で選択した 資格情報ボールト からデータベースに接続するための資格情報を取得します。選択した認証方法 (ログイン/パスワードまたは Kerberos) を使用します。これらの認証には 2 つのタイプの構成があります。
Single secret: 組織の 資格情報ボールト でログインとパスワードをシングルシークレットに保存する場合に選択します (CyberArk または AWS Secrets Manager)。選択した場合は、資格情報を保持する アカウント名 を入力します。
One secret per field: 使用する資格情報ボールトで各資格情報を異なるシークレットに保存する場合 (Azure Key Vault)。選択した場合は、その値が資格情報ボールトから得られるかどうかを示す各フィールドを構成し、状況に応じてそのシークレットの名前または値を入力します。
From vault: フィールドが資格情報ボールトから取得されるかどうかを示します。選択した場合、資格情報ボールトでの該当フィールドのシークレット名を入力します。
サーバーレベルで設定された構成を上書きするには、[Data Source credentials vault] をクリックします。ポップアップで [Default configuration] チェックボックスをオフにして、このデータソースの設定を入力します。
相互認証¶
セキュリティのレベルを上げるには、MongoDB とのコネクションで相互認証を有効にすることを検討します。このタイプの認証 (「双方向 SSL/TLS」とも呼ばれる) では、MongoDB に接続するクライアントアプリケーション (この場合は Virtual DataPort) は、その身元を確認する証明書を提示する必要があります。
これを有効にするには、[Mutual (two-way TLS)] を選択して、以下を入力します。
Certificate password: データソースで使用する秘密キーを保持するファイルのパスワード。
[Load certificate] をクリックして、秘密キーを保持するファイルを選択します。サポートされている形式は PKCS#12 と JKS です。
コネクションプロパティ¶
コネクションオプションを指定するには、[Connection properties] をクリックします。MongoDB のドキュメント - コネクション文字列のオプション <https://www.mongodb.com/docs/manual/reference/connection-string/> に、ここで追加できるオプションの一覧があります。
あるいは、コネクション URL にオプションを追加できますが、ここで追加する方が便利です。
データソースの URL と コネクションプロパティ の両方でプロパティを指定した場合、コネクションに適用される値は [Connection properties] ダイアログの値になります (URL の値は無視されます)。これは認証方法にも適用されます。データソースは、URL 内の認証方法ではなく、[Authentication] で選択された認証方法を使用します。
コネクションプールの構成¶
データベースへの接続を最適化するために、データソースではデータベースへのコネクションプールを作成します (MongoDB データソースごとに 1 つのプール)。このプールを作成するメリットは、MongoDB でクエリを実行するたびに新しいコネクションを開くのではなく、すでにコネクションが開いている点です。そのため、クエリの応答時間が短縮されます。
このプールの設定を構成するには、[Connections Pool Configuration] をクリックします。
Maximum number of active connections: プールが開くデータベースへのアクティブなコネクションの最大数 (デフォルト値: 100)。
Minimum number of active connections: プールが開くデータベースへのアクティブなコネクションの最小数 (デフォルト値: 0)。
Connection timeout (milliseconds): コネクションのタイムアウト (ミリ秒) (デフォルト値: 10,000)。
Socket timeout (milliseconds): タイムアウトするまでにソケットで送受信を試行する時間 (ミリ秒) (デフォルト値: 0)。
Wait queue timeout (milliseconds): コネクションが可能になるまでスレッドが待機する最大時間 (ミリ秒) (デフォルト値: 120000)。
[Metadata] タブ¶
[Metadata] タブで以下の操作を実行できます。
データソースの格納先 フォルダ を設定します。
説明 を入力します。
データソースがデプロイされる インフラストラクチャ 情報を設定します。インフラストラクチャの
プロバイダー名 (オンプレミス、Amazon Web Services、Microsoft Azure、Google Cloud Platform など) を設定できます。
リージョン名: プロバイダー名やリージョンがリストにない場合は、カスタム名を入力できます。
このダイアログですべてのパラメータを入力した後、[Test connection] をクリックして、構成されたソースにデータソースがアクセスできることを確認します。
MongoDB データソースからの基本ビューの作成¶
データソースを作成したら、MongoDB データベースのコレクションを表す基本ビューを作成します。

データベースと MongoDB ソースのコレクション¶
MongoDB の基本ビューを作成するには、以下の手順に従います。
MongoDB データソースを開いて、[Create base view] をクリックします。
ウィザードに、ソースのデータベースのツリーが表示されます。データベースを展開して、そのコレクションを確認します。
ウィザードでは、データベースの展開時に要求に応じてコレクションの名前を読み込みます。これは、全データベースのすべてのコレクションの名前を一度に検索すると、非常に時間がかかる可能性があるためです。そのため、検索ボックスにコレクション名を入力すると、すでに展開したデータベースのみが検索されます。
基本ビューの作成元にするコレクションを選択します。MongoDB は動的なストレージシステムであり、コレクション内のドキュメントのスキーマは異なる可能性があるため、VDP はこれらのドキュメントを分析し、分析されたドキュメントのすべてのフィールドを含む共通のスキーマを作成します。
[Limit documents to analyze] で、スキーマを抽出するためにコレクションの分析対象のドキュメントの最大数を指定します。この制限があることで、コレクション内のすべてのドキュメントが分析されるわけではないため、時間がかからずに済みます。
この制限を無効にするには、 0 を入力します。
選択したコレクション内のドキュメントに適用される JSON パイプラインを入力するには、[Initial aggregation pipeline] を選択します。
このパイプラインから生じるフィールドで基本ビューのスキーマが構成されます。詳細については、以下の「 MongoDB Aggregation Pipelines 」のセクションを参照してください。
[Browse] をクリックして、基本ビューの作成先とするフォルダを選択します。このダイアログでは、新しいフォルダの作成、または既存のフォルダの名前変更ができます (このダイアログを右クリックすると、この 2 つのオプションが表示されます)。
[Create selected] をクリックします。基本ビューの新しいタブが開き、そこで以下のアクションを実行できます。
新しい基本ビューの名前を変更する。
新しい基本ビューの属性の名前とタイプを変更する。
ボタンをクリックして、フィールドの「ソース型プロパティ」を編集する。このダイアログでは、フィールドの正確な型を定義できるほか、その型によっては長さと小数点以下桁数も定義できます。
これらのプロパティの詳細については、「 基本ビューのスキーマの表示 」を参照してください。
ビューから属性を削除する。複数のフィールドを選択し、[Remove] ボタンをクリックしてビューのスキーマからフィールドを削除できます。補間変数 (パイプラインに含まれている場合) は、ビューを正しく実行するために必要になるため、削除できません。[Restore fields] ボタンは、削除を取り消して元のフィールドを復元します。
注釈
[Remove] アクションと [Restore fields] アクションを実行できるのは、ビューを 保存する前 のみです。ビューから削除されたフィールドは、(そのフィールドをプロジェクト化するパイプラインを使用する場合でも) ソース更新を実行したときに取得されません 。削除されたフィールドを復元するには、ビューを再作成する必要があります。
ビューのプライマリキーの定義を変更する。
ビューのプライマリキーの詳細については「 ビューのプライマリキー 」を参照してください。
[Metadata] タブで、基本ビューの格納先フォルダを設定して、説明を入力します。
データソースを編集する際、
をクリックすると、その所有者も変更できます。

MongoDB 基本ビューのスキーマ¶
MongoDB 集約パイプライン¶
MongoDB コレクションに対する基本ビューを作成する場合、そのコレクションのドキュメントをフィルタする集約パイプラインを指定できます。パイプラインの結果が基本ビューのスキーマになります。
集約パイプラインを使用するには、[Initial aggregation pipeline] を選択し、表示されるテキスト領域に入力します。

集約パイプラインの入力¶
集約パイプラインは、ドキュメントを処理する 1 つ以上の状態で構成されます (構文の詳細については、「 集約パイプライン 」を参照してください)。パイプラインは JSON 配列であり、配列の各エレメントは、結果を生成する状態です。いくつかの例を以下に示します。
投影
SQL
SELECT iinc_id, summary, taxid FROM internet_inc
集約パイプライン
[{ "$project": { "iinc_id": 1, "summary": 1, "taxid": 1, } }]
選択
SQL
SELECT iinc_id, summary, taxid FROM internet_inc WHERE iinc_id = 1
集約パイプライン
[ { "$project": { "iinc_id": 1, "summary": 1, "taxid": 1, }, }, { "$match": { "iinc_id": 1 } } ]
補間変数¶
パイプラインには、 補間変数 を使用できます (「 補間変数によるパスなどの値 」を参照してください)。これにより、指定のクエリ条件に従って、データベースに送信する集約パイプラインをパラメータ化できます。
パイプラインに補間変数がある場合、[Create Selected] をクリックした後、パイプラインで使用される変数の値を入力します。Virtual DataPort はこれらの値でパイプラインを実行し、基本ビューの作成に必要なメタデータを取得します。
各補間変数は、生成された基本ビューに属する属性と関連付ける必要があります。これにより、変数が実行時にその値を取得できます。データソースへのアクセスに使用される集約パイプラインが、変数と同じ名前のフィールドを返す場合、変数は対応する基本ビューの属性に関連付けられます。集約パイプラインが変数と同じ名前のフィールドを返さない場合、Virtual DataPort では基本ビューに同じ名前の新しい属性を追加します。この属性をビューから削除することはできません。
パイプラインで @
と ^
を検索し、 \
でエスケープします。つまり、それらを \@
と \^
で置き換えます。これらの文字は、補間式の一部であると見なされないよう、エスケープする必要があります。
委任の機能と制限事項¶
Virtual DataPort では ORDER BY
、 GROUP BY
、数値関数、ウィンドウ関数などの操作をソースに委任できます。MongoDB は NoSQL および非リレーショナルストレージシステムであるため、一部の関数の動作が JDBC と異なります。そのため、得られる結果も異なる場合があります。このセクションでは、MongoDB の関数で考慮すべき動作について説明します。
MongoDB でフィールドを基準にソートする場合、
null
値は JDBC が最後に返す場合とは異なり最初に返されます。関数
sum
はnull
値を 0 に変換します。たとえば、JDBC ではnull
値の行全体を合計すると結果はnull
になりますが、MongoDB では「0」になります。ウィンドウ関数:
RANGE ウィンドウでは、
ORDER BY
の値はすべて数値でなければならず、他のデータ型やnull
値があると、エラーを返します。RANGE ウィンドウは 1 つのフィールドでのみソートでき、ソートは昇順にする必要があります。
関数
RANK
とDENSE_RANK
は 1 つのフィールドでのみソートできます。関数
STDEV
は、サンプルが単一の数値で構成される場合、null
を返します。前述のように、MongoDB では
null
値が最初に返されます。タプルの順序に依存して結果を作成するウィンドウ関数 (LEAD
やLAG
など) の結果は、JDBC とは異なる場合があります。
委任機能の一覧を以下に示します。
句 |
SELECT、DISTINCT、WHERE、ORDER BY、GROUP BY、HAVING、FETCH LIMIT、OFFSET |
演算子 |
=、!=、<、<=、>、>=、IN、EXISTS、LIKE、ISNULL、ISNOTNULL |
集約関数 |
AVG、COUNT、FIRST、LAST、MAX、MIN、STDEV、STDEVP、SUM |
分析関数 |
AVG、COUNT、DENSE_RANK、FIRST_VALUE、LAG、LAST_VALUE、LEAD、MAX、MIN、RANK、ROW_NUMBER、SUM、STDEV |
日時関数 |
GETDAY、GETHOUR、GETMILLISECOND、GETMINUTE、GETMONTH、GETSECOND、GETWEEK、GETYEAR |
数値関数 |
ABS、ACOS、ASIN、ATAN、ATAN2、CEIL、COS、DEGREES、DIV、EXP、FLOOR、LN、LOG、MAX、MIN、MOD、MULT、POWER、RADIANS RAND、ROUND、SIN、SQRT、SUBTRACT、 SUM、TAN、TRUNC |
テキスト関数 |
CONCAT、INSTR、LEN、MAX、MIN |
その他の関数 |
COALESCE |