MongoDB コネクタ

このコネクタを使用すると、Presto で MongoDB コレクションをテーブルとして使用できます。

注記

MongoDB 2.6 以降がサポートされていますが、3.0 以降を使用することを強くお勧めします。

構成

MongoDB コネクタを構成するには、次の内容でカタログプロパティファイル etc/catalog/mongodb.properties を作成し、プロパティを適宜置き換えます

connector.name=mongodb
mongodb.seeds=host1,host:port

複数の MongoDB クラスター

必要な数のカタログを持つことができます。したがって、追加の MongoDB クラスターがある場合は、別のプロパティファイルを etc/catalog に異なる名前で追加します (必ず .properties で終わるようにします)。たとえば、プロパティファイルに sales.properties という名前を付けると、Presto は構成されたコネクタを使用して sales という名前のカタログを作成します。

構成プロパティ

次の構成プロパティを使用できます

プロパティ名

説明

mongodb.seeds

すべての mongod サーバーのリスト

mongodb.schema-collection

スキーマ情報を含むコレクション

mongodb.credentials

認証情報のリスト

mongodb.min-connections-per-host

ホストごとの接続プールの最小サイズ

mongodb.connections-per-host

ホストごとの接続プールの最大サイズ

mongodb.max-wait-time

最大待ち時間

mongodb.connection-timeout

ソケット接続タイムアウト

mongodb.socket-timeout

ソケットタイムアウト

mongodb.socket-keep-alive

各ソケットでキープアライブが有効になっているかどうか

mongodb.ssl.enabled

mongod/mongos への接続に TLS/SSL を使用

mongodb.read-preference

読み取り優先度

mongodb.write-concern

書き込み確認

mongodb.required-replica-set

必要なレプリカセット名

mongodb.cursor-batch-size

バッチで返す要素の数

mongodb.seeds

同じレプリカセット内のすべての mongod サーバー、または同じシャーディングクラスター内の mongos サーバーの、コンマ区切りの hostname[:port] のリスト。ポートが指定されていない場合は、ポート 27017 が使用されます。

このプロパティは必須です。デフォルト値はなく、少なくとも 1 つのシードを定義する必要があります。

mongodb.schema-collection

MongoDB はドキュメントデータベースであるため、システムに固定されたスキーマ情報はありません。したがって、各 MongoDB データベースの特別なコレクションで、すべてのテーブルのスキーマを定義する必要があります。詳細については、「テーブル定義」セクションを参照してください。

起動時に、このコネクタはフィールドの型を推測しようとしますが、コレクションに対して正しくない場合があります。その場合は、手動で変更する必要があります。CREATE TABLE および CREATE TABLE AS SELECT を使用すると、エントリが作成されます。

このプロパティはオプションです。デフォルトは _schema です。

mongodb.credentials

username:password@collection 認証情報のコンマ区切りリスト

このプロパティはオプションです。デフォルト値はありません。

mongodb.min-connections-per-host

この MongoClient インスタンスのホストごとの最小接続数。これらの接続はアイドル時にプールに保持され、プールは時間とともに、少なくともこの最小数が含まれるようにします。

このプロパティはオプションです。デフォルトは 0 です。

mongodb.connections-per-host

この MongoClient インスタンスで許可されるホストごとの最大接続数。これらの接続はアイドル時にプールに保持されます。プールが枯渇すると、接続を必要とするすべての操作は、利用可能な接続を待ってブロックされます。

このプロパティはオプションです。デフォルトは 100 です。

mongodb.max-wait-time

スレッドが接続の利用可能になるのを待機できる最大待ち時間 (ミリ秒単位)。0 の値は、待機しないことを意味します。負の値は、接続が利用可能になるのを無期限に待つことを意味します。

このプロパティはオプションです。デフォルトは 120000 です。

mongodb.connection-timeout

接続タイムアウト (ミリ秒単位)。0 の値はタイムアウトがないことを意味します。これは、新しい接続を確立するときのみ使用されます。

このプロパティはオプションです。デフォルトは 10000 です。

mongodb.socket-timeout

ソケットタイムアウト (ミリ秒単位)。これは I/O ソケットの読み取りおよび書き込み操作に使用されます。

このプロパティはオプションです。デフォルトは 0 で、タイムアウトがないことを意味します。

mongodb.socket-keep-alive

このフラグは、ファイアウォールを介して接続を維持するソケットキープアライブ機能を制御します。

このプロパティはオプションです。デフォルトは false です。

mongodb.ssl.enabled

このフラグは、MongoDB サーバーへの SSL 接続を有効にします。

このプロパティはオプションです。デフォルトは false です。

mongodb.read-preference

クエリ、マップリデュース、集計、およびカウントに使用する読み取り設定です。利用可能な値は、PRIMARYPRIMARY_PREFERREDSECONDARYSECONDARY_PREFERRED、およびNEARESTです。

このプロパティはオプションです。デフォルトはPRIMARYです。

mongodb.write-concern

使用する書き込み保証です。利用可能な値は、ACKNOWLEDGEDFSYNC_SAFEFSYNCEDJOURNAL_SAFEJOURNALEDMAJORITYNORMALREPLICA_ACKNOWLEDGEDREPLICAS_SAFE、およびUNACKNOWLEDGEDです。

このプロパティはオプションです。デフォルトはACKNOWLEDGEDです。

mongodb.required-replica-set

必須のレプリカセット名です。このオプションを設定すると、MongoClientインスタンスは

  1. レプリカセットモードで接続し、指定されたサーバーに基づいてセットのすべてのメンバーを検出します。

  2. すべてのメンバーによって報告されたセット名が必須のセット名と一致することを確認します。

  3. シードリストのメンバーが必須の名前を持つレプリカセットの一部でない場合、リクエストの処理を拒否します。

このプロパティはオプションです。デフォルト値はありません。

mongodb.cursor-batch-size

1つのバッチで返される要素の数を制限します。カーソルは通常、結果オブジェクトのバッチをフェッチしてローカルに保存します。batchSizeが0の場合、ドライバーのデフォルトが使用されます。batchSizeが正の場合、取得するオブジェクトの各バッチのサイズを表します。これは、パフォーマンスを最適化し、データ転送を制限するために調整できます。batchSizeが負の場合、最大バッチサイズ制限(通常は4MB)内に収まるオブジェクトの数を制限し、カーソルは閉じられます。たとえば、batchSizeが-10の場合、サーバーは最大10個のドキュメントと、4MBに収まるだけのドキュメントを返し、カーソルを閉じます。

注記

バッチサイズ1を使用しないでください。

このプロパティはオプションです。デフォルトは 0 です。

テーブル定義

MongoDBは、mongodb.schema-collection構成値が指定された特別なコレクションにテーブル定義を保持します。

注記

プラグインがコレクションが削除されたことを検出する方法はありません。Mongo Shellでdb.getCollection("_schema").remove( { table: deleted_table_name })を実行してエントリを削除する必要があります。または、Prestoを使用してDROP TABLE table_nameを実行してコレクションを削除します。

スキーマコレクションは、テーブルのMongoDBドキュメントで構成されます。

{
    "table": ...,
    "fields": [
          { "name" : ...,
            "type" : "varchar|bigint|boolean|double|date|array(bigint)|...",
            "hidden" : false },
            ...
        ]
    }
}

フィールド

必須

タイプ

説明

table

必須

文字列

Prestoテーブル名

fields

必須

配列

フィールド定義のリスト。各フィールド定義は、Prestoテーブルに新しい列を作成します。

各フィールド定義

{
    "name": ...,
    "type": ...,
    "hidden": ...
}

フィールド

必須

タイプ

説明

name

必須

文字列

Prestoテーブルの列の名前。

type

必須

文字列

列のPresto型。

hidden

オプション

ブール値

DESCRIBE <table name>およびSELECT *から列を非表示にします。デフォルトはfalseです。

キーまたはメッセージのフィールドの説明に制限はありません。

ObjectId

MongoDBコレクションには、特別なフィールド_idがあります。コネクタは、この特別なフィールドに対して同じルールに従おうとするため、非表示のフィールド_idが存在します。

CREATE TABLE IF NOT EXISTS orders (
    orderkey bigint,
    orderstatus varchar,
    totalprice double,
    orderdate date
);

INSERT INTO orders VALUES(1, 'bad', 50.0, current_date);
INSERT INTO orders VALUES(2, 'good', 100.0, current_date);
SELECT _id, * FROM orders;
                 _id                 | orderkey | orderstatus | totalprice | orderdate
-------------------------------------+----------+-------------+------------+------------
 55 b1 51 63 38 64 d6 43 8c 61 a9 ce |        1 | bad         |       50.0 | 2015-07-23
 55 b1 51 67 38 64 d6 43 8c 61 a9 cf |        2 | good        |      100.0 | 2015-07-23
(2 rows)
SELECT _id, * FROM orders WHERE _id = ObjectId('55b151633864d6438c61a9ce');
                 _id                 | orderkey | orderstatus | totalprice | orderdate
-------------------------------------+----------+-------------+------------+------------
 55 b1 51 63 38 64 d6 43 8c 61 a9 ce |        1 | bad         |       50.0 | 2015-07-23
(1 row)

注記

残念ながら、_idフィールドを55b151633864d6438c61a9ceのように、より高度な方法で表現する方法はありません。

SQLサポート

ALTER TABLE

コネクタは、ALTER TABLE RENAME TO操作をサポートします。ALTER TABLEのその他の使用はサポートされていません。