MongoDB 连接器¶
此连接器允许将 MongoDB 集合用作 Presto 中的表。
注意
虽然支持 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
¶
逗号分隔的 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
¶
套接字超时(以毫秒为单位)。它用于 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
¶
限制一次批次中返回的元素数量。 游标通常会获取一批结果对象并将其存储在本地。 如果 batchSize 为 0,则使用驱动程序的默认值。 如果 batchSize 为正数,则表示检索到的每个对象批次的尺寸。 可以对其进行调整以优化性能并限制数据传输。 如果 batchSize 为负数,则将限制返回的对象数量,这些对象适合最大批次尺寸限制(通常为 4MB),并且游标将被关闭。 例如,如果 batchSize 为 -10,则服务器将最多返回 10 个文档,以及尽可能多的适合 4MB 的文档,然后关闭游标。
注意
不要使用 1
的批次尺寸。
此属性是可选的;默认值为 0
。
表定义¶
MongoDB 在特殊集合上维护表定义,其中 mongodb.schema-collection
配置值指定该集合。
注意
插件无法检测到集合被删除。 您需要通过 db.getCollection("_schema").remove( { table: deleted_table_name })
在 Mongo Shell 中删除条目。 或者通过运行 DROP TABLE table_name
使用 Presto 删除集合。
架构集合包含表的 MongoDB 文档。
{
"table": ...,
"fields": [
{ "name" : ...,
"type" : "varchar|bigint|boolean|double|date|array(bigint)|...",
"hidden" : false },
...
]
}
}
字段 |
必需 |
类型 |
描述 |
---|---|---|---|
|
必需 |
string |
Presto 表名称 |
|
必需 |
array |
字段定义列表。 每个字段定义在 Presto 表中创建一个新的列。 |
每个字段定义
{
"name": ...,
"type": ...,
"hidden": ...
}
字段 |
必需 |
类型 |
描述 |
---|---|---|---|
|
必需 |
string |
Presto 表中列的名称。 |
|
必需 |
string |
列的 Presto 类型。 |
|
可选 |
boolean |
从 |
键或消息的字段描述没有限制。
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
的用法不受支持。