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 という名前のカタログを作成します。
構成プロパティ¶
次の構成プロパティを使用できます
| プロパティ名 | 説明 | 
|---|---|
| 
 | すべての mongod サーバーのリスト | 
| 
 | スキーマ情報を含むコレクション | 
| 
 | 認証情報のリスト | 
| 
 | ホストごとの接続プールの最小サイズ | 
| 
 | ホストごとの接続プールの最大サイズ | 
| 
 | 最大待ち時間 | 
| 
 | ソケット接続タイムアウト | 
| 
 | ソケットタイムアウト | 
| 
 | 各ソケットでキープアライブが有効になっているかどうか | 
| 
 | mongod/mongos への接続に TLS/SSL を使用 | 
| 
 | 読み取り優先度 | 
| 
 | 書き込み確認 | 
| 
 | 必要なレプリカセット名 | 
| 
 | バッチで返す要素の数 | 
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¶
クエリ、マップリデュース、集計、およびカウントに使用する読み取り設定です。利用可能な値は、PRIMARY、PRIMARY_PREFERRED、SECONDARY、SECONDARY_PREFERRED、およびNEARESTです。
このプロパティはオプションです。デフォルトはPRIMARYです。
mongodb.write-concern¶
使用する書き込み保証です。利用可能な値は、ACKNOWLEDGED、FSYNC_SAFE、FSYNCED、JOURNAL_SAFE、JOURNALED、MAJORITY、NORMAL、REPLICA_ACKNOWLEDGED、REPLICAS_SAFE、およびUNACKNOWLEDGEDです。
このプロパティはオプションです。デフォルトはACKNOWLEDGEDです。
mongodb.required-replica-set¶
必須のレプリカセット名です。このオプションを設定すると、MongoClientインスタンスは
- レプリカセットモードで接続し、指定されたサーバーに基づいてセットのすべてのメンバーを検出します。 
- すべてのメンバーによって報告されたセット名が必須のセット名と一致することを確認します。 
- シードリストのメンバーが必須の名前を持つレプリカセットの一部でない場合、リクエストの処理を拒否します。 
このプロパティはオプションです。デフォルト値はありません。
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 },
            ...
        ]
    }
}
| フィールド | 必須 | タイプ | 説明 | 
|---|---|---|---|
| 
 | 必須 | 文字列 | Prestoテーブル名 | 
| 
 | 必須 | 配列 | フィールド定義のリスト。各フィールド定義は、Prestoテーブルに新しい列を作成します。 | 
各フィールド定義
{
    "name": ...,
    "type": ...,
    "hidden": ...
}
| フィールド | 必須 | タイプ | 説明 | 
|---|---|---|---|
| 
 | 必須 | 文字列 | Prestoテーブルの列の名前。 | 
| 
 | 必須 | 文字列 | 列のPresto型。 | 
| 
 | オプション | ブール値 | 
 | 
キーまたはメッセージのフィールドの説明に制限はありません。
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のその他の使用はサポートされていません。