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 的目录。

配置属性

以下是可用的配置属性

属性名称

描述

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

查询、映射-减少、聚合和计数使用的读取首选项。可用值有 PRIMARYPRIMARY_PREFERREDSECONDARYSECONDARY_PREFERREDNEAREST

mongodb.write-concern

写入关注

mongodb.required-replica-set

所需的副本集名称

mongodb.cursor-batch-size

批处理中返回的元素数

mongodb.seeds

逗号分隔的 hostname[:port] 列表,其中包含同一副本集中的所有 mongod 服务器,或同一分片集群中的 mongos 服务器列表。如果未指定端口,则将使用端口 27017。

此属性是必需的;没有默认值,并且必须定义至少一个种子。

mongodb.schema-collection

由于 MongoDB 是一个文档数据库,因此系统中没有固定的模式信息。因此,每个 MongoDB 数据库中的一个特殊集合应定义所有表的模式。有关详细信息,请参阅表定义部分。

在启动时,此连接器会尝试猜测字段的类型,但这可能不适合您的集合。在这种情况下,您需要手动修改它。CREATE TABLECREATE 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_PREFERREDNEAREST

此属性是可选的;默认值为 PRIMARY

mongodb.write-concern

要使用的写入关注。 可用值包括 ACKNOWLEDGEDFSYNC_SAFEFSYNCEDJOURNAL_SAFEJOURNALEDMAJORITYNORMALREPLICA_ACKNOWLEDGEDREPLICAS_SAFEUNACKNOWLEDGED

此属性为可选属性;默认值为 ACKNOWLEDGED

mongodb.required-replica-set

所需的副本集名称。 设置此选项后,MongoClient 实例将

  1. 在副本集模式下连接,并根据给定的服务器发现集中的所有成员

  2. 确保所有成员报告的集名称与所需的集名称匹配。

  3. 如果种子列表中的任何成员不属于具有所需名称的副本集,则拒绝为任何请求提供服务。

此属性是可选的;没有默认值。

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 },
            ...
        ]
    }
}

字段

必需

类型

描述

table

必需

string

Presto 表名称

fields

必需

array

字段定义列表。 每个字段定义在 Presto 表中创建一个新的列。

每个字段定义

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

字段

必需

类型

描述

name

必需

string

Presto 表中列的名称。

type

必需

string

列的 Presto 类型。

hidden

可选

boolean

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 的用法不受支持。