此连接器允许将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使用配置的连接器命名的目录。
配置属性
以下是可配置的属性:
属性
|
描述
|
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
|
每个socket是否开启keep-alive
|
mongodb.ssl.enabled
|
使用TLS/SSL连接到mongod/mongos
|
mongodb.read-preference
|
阅读偏好
|
mongodb.write-concern
|
写关注
|
mongodb.required-replica-set
|
所需的副本集名称
|
mongodb.cursor-batch-size
|
批量返回的元素数
|
hostname[:port]相同副本集中所有mongod服务器的逗号分隔列表或同一分片集群中的mongos服务器列表。如果未指定端口,将使用端口27017。
此属性是必需的;没有默认值,必须至少定义一个种子。
- mongodb.schema-collection
由于MongoDB是一个文档数据库,系统中没有固定的模式信息。所以每个MongoDB数据库中的一个特殊集合应该定义所有表的模式。有关详细信息,请参阅表定义部分。
在启动时,此连接器会尝试猜测字段的类型,但它可能不适合您的集合。在这种情况下,您需要手动修改它。并将为您创建一个条目。CREATETABLECREATETABLEASSELECT
此属性是可选的;默认为_schema。
逗号分隔的username:password@collection凭据列表
此属性是可选的;没有默认值。
- mongodb.min-connections-per-host
此MongoClient实例的每个主机的最小连接数。这些连接在空闲时将保留在一个池中,并且该池将随着时间的推移确保它至少包含这个最小数量。
此属性是可选的;默认为0。
- mongodb.connections-per-host
此MongoClient实例的每个主机允许的最大连接数。这些连接在空闲时将保留在池中。一旦池耗尽,任何需要连接的操作都会阻塞等待可用连接。
此属性是可选的;默认为100。
线程可以等待连接变为可用的最大等待时间(以毫秒为单位)。值0表示它不会等待。负值意味着无限期地等待连接变为可用。
此属性是可选的;默认为120000。
- mongodb.connection-timeout
以毫秒为单位的连接超时。值0表示没有超时。它仅在建立新连接时使用。
此属性是可选的;默认为10000。
以毫秒为单位的套接字超时。它用于I/O套接字读写操作。
此属性是可选的;默认是0并且意味着没有超时。
- mongodb.socket-keep-alive
此标志控制套接字保持活动功能,通过防火墙保持连接活动。
此属性是可选的;默认为false。
此标志启用到MongoDB服务器的SSL连接。
此属性是可选的;默认为false。
用于查询、map-reduce、聚合和计数的读取首选项。可用的值是PRIMARY,PRIMARY_PREFERRED,SECONDARY,SECONDARY_PREFERRED和NEAREST。
此属性是可选的;默认为PRIMARY。
要使用的写关注。可用的值有ACKNOWLEDGED,FSYNC_SAFE,FSYNCED,JOURNAL_SAFEY,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配置值指定的特殊集合上维护表定义。
注意:插件无法检测集合是否已删除。您需要删除MongoShell中的条目。或者通过使用Presto运行来删除集合。db.getCollection(“_schema”).remove({table:deleted_table_name})DROPTABLEtable_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<tablename>SELECT*false
|
键或消息的字段描述没有限制。
对象ID
MongoDB集合有特殊的领域_id。连接器尝试对这个特殊字段遵循相同的规则,因此会有隐藏字段_id。
CREATETABLEIFNOTEXISTSorders(
orderkeybigint,
orderstatusvarchar,
totalpricedouble,
orderdatedate
);
INSERTINTOordersVALUES(1,'bad',50.0,current_date);
INSERTINTOordersVALUES(2,'good',100.0,current_date);
SELECT_id,*FROMorders;
_id|orderkey|orderstatus|totalprice|orderdate
-------------------------------------+----------+-------------+------------+------------
55b151633864d6438c61a9ce|1|bad|50.0|2015-07-23
55b151673864d6438c61a9cf|2|good|100.0|2015-07-23
(2rows)
SELECT_id,*FROMordersWHERE_id=ObjectId('55b151633864d6438c61a9ce')
_id|orderkey|orderstatus|totalprice|orderdate
-------------------------------------+----------+-------------+------------+------------
55b151633864d6438c61a9ce|1|bad|50.0|2015-07-23
(1row)