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 伺服器的清單 |
|
包含綱要資訊的集合 |
|
認證清單 |
|
每個主機的連線集區的最小大小 |
|
每個主機的連線集區的最大大小 |
|
最大等待時間 |
|
Socket 連線逾時 |
|
Socket 逾時 |
|
是否在每個 Socket 上啟用保持連線 |
|
對 mongod/mongos 的連線使用 TLS/SSL |
|
讀取偏好 |
|
寫入關注 |
|
必要的複本集名稱 |
|
批次中要傳回的元素數 |
mongodb.seeds
¶
以逗號分隔的 hostname[:port]
清單,其中包含同一個複本集中的所有 mongod 伺服器,或同一個分片叢集中的 mongos 伺服器清單。如果未指定連接埠,將使用連接埠 27017。
此屬性是必要的;沒有預設值,並且必須定義至少一個種子。
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
¶
Socket 逾時時間 (以毫秒為單位)。它用於 I/O Socket 讀取和寫入作業。
此屬性是選用的;預設值為 0
,表示沒有逾時。
mongodb.socket-keep-alive
¶
此旗標控制 Socket 保持連線功能,該功能可透過防火牆保持連線。
此屬性是選用的;預設值為 false
。
mongodb.ssl.enabled
¶
此旗標啟用與 MongoDB 伺服器的 SSL 連線。
此屬性是選用的;預設值為 false
。
mongodb.read-preference
¶
用於查詢、Map-Reduce、彙總和計數的讀取偏好。可用的值為 PRIMARY
、PRIMARY_PREFERRED
、SECONDARY
、SECONDARY_PREFERRED
和 NEAREST
。
此屬性是選用的;預設值為 PRIMARY
。
mongodb.write-concern
¶
要使用的寫入關注 (write concern)。可用的值為 ACKNOWLEDGED
、FSYNC_SAFE
、FSYNCED
、JOURNAL_SAFE
、JOURNALED
、MAJORITY
、NORMAL
、REPLICA_ACKNOWLEDGED
、REPLICAS_SAFE
和 UNACKNOWLEDGED
。
這個屬性是選填的;預設值為 ACKNOWLEDGED
。
mongodb.required-replica-set
¶
所需的副本集名稱。設定此選項後,MongoClient 實例將
以副本集模式連線,並根據給定的伺服器探索集合的所有成員
確保所有成員回報的集合名稱與所需的集合名稱相符。
如果 seed list 中的任何成員不屬於具有所需名稱的副本集,則拒絕服務任何請求。
此屬性是選用的;沒有預設值。
mongodb.cursor-batch-size
¶
限制在一個批次中返回的元素數量。游標通常會提取一批結果物件並將其儲存在本機。如果 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
的其他用法。