Docs 菜单
Docs 主页
/
BI Connector
/

mongodrdl

在此页面上

  • 说明
  • 语法
  • 默认最低 TLS 版本
  • 命令
  • 选项
  • 使用示例
  • MongoDB Atlas 示例

注意

MongoDB Connector for BI 及相关实用程序与当前支持的所有 MongoDB 服务器版本兼容。

mongodrdl 是 MongoDB Connector for BI 的关系模式管理工具。mongodrdl 二进制文件可以:

  • Produce a schema基于一个或多个 MongoDB集合的内容,并将其写出到 mongosqld使用的.drdl文件中。

  • Upload.drdl文件的模式添加到 BI Connector 正在读取的 MongoDB 部署。

  • Download 在 MongoDB 部署中存储模式。

  • Delete 在 MongoDB 部署中存储模式。

  • Name 在 MongoDB 部署中存储模式,以方便管理。

您可以手动编辑 .drdl 文件,自定义 BI Connector 的模式。如需了解有关 .drdl 格式和手动编辑 .drdl 文件的更多信息,请参阅“从 DRDL 文件加载模式”。

如需了解有关所有 BI Connector 模式管理选项的更多信息,请参阅“将关系模式映射到 MongoDB”。

重要

要应用您对 DRDL 文件进行的任何更改,必须重启 mongosqld

mongodrdl 使用如下语法:

mongodrdl [<command>] [<options...>]

版本 2.6 中的新增内容

默认的最低 TLS 版本为1 。 1用于从mongodrdl到 MongoDB 的传出连接。

您可以使用--minimumTLSVersion选项调整此设置。

2.11 版新增功能

mongodrdl 的行为由以下命令之一决定。如果未指定任何命令,mongodrdl 将对指定的命名空间进行采样。

sample

采样由 --db、可选的 --collection 和其他命令行选项指定的命名空间,输出 .drdl 文件。sample 命令封装 2.11 版本之前的所有 mongodrdl 行为。

mongodrdl sample --db <db-name> --collection <collection-name> --out <filename>.drdl
list-schema-ids

列出每个已存储的模式的 ObjectId 的字符串表示形式及其创建日期。

list-schema-ids 需要如下选项:

名称
说明
必需。指定存储模式信息的数据库。

例如,如下命令将列出 schemas 数据库中的模式 ID:

mongodrdl list-schema-ids --schemaSource schemas

输出类似于以下内容:

5d72ad695c23a9e3e26e3c85 2019-09-06T15:03:05.556Z
5d72adea5c23a9e44882a1ad 2019-09-06T15:05:14.349Z
list-schema-names

列出每个已存储并具有名称的模式的 ObjectId 的名称和字符串表示形式。

存储模式默认未命名。使用 --name 选项和 downloaddelete 命令可以引用已命名的模式。使用 name-schema 命令命名或重命名模式。

list-schema-names 需要如下选项:

名称
说明
必需。指定存储模式信息的数据库。

例如,以下命令会返回 schemas 数据库中每个已命名模式的名称和 ObjectId:

mongodrdl list-schema-names --schemaSource schemas

输出类似于以下内容:

movies 5d72ad695c23a9e3e26e3c85
theaters 5d72adea5c23a9e44882a1ad
upload

将模式从指定的.drdl文件上传到--schemaSource选项指定的数据库。模式将上传到schemas集合。

upload 需要以下选项:

名称
说明
必需。指定存储模式信息的数据库。
--drdl
必需。要上传的 .drdl 文件的路径。

例如,以下命令会将 movies.drdl 文件中的模式上传到 schemas 数据库:

mongodrdl upload --schemaSource schemas --drdl ./movies.drdl

返回已上传模式的 ObjectId 的字符串表示形式:

5d793f3f6a26a3ce66c304ea

下一步是使用name-schema命令以您提供的名称存储模式:

mongodrdl name-schema --name movies --schemaSource schemas --schema 5d793f3f6a26a3ce66c304ea

如需使用新上传的接收到指定名称的模式,请使用 --schemaSource 选项指定的模式数据库重启 mongosqld,并使用 --schemaName 指定模式名称:

mongosqld --schemaSource <schema-db> --schemaName movies

重要

如果您上传自定义架构,则必须使用 name-schema 存储该架构,对其命名,然后使用 --schemaName 将此名称指定给 mongosqld。如果在上传架构时不存储架构名称,则架构名称默认为 defaultSchema。如果架构的名称不存在,则会导致 mongosqld 中的错误,类似于以下内容:MongoDB 架构尚不可用。初始化架构时出错:找不到此名称的架构。

download

下载由 ObjectId 的名称或字符串表示形式指定的模式,并将其打印到控制台。

download 接受以下选项:

名称
说明
必需。指定存储模式信息的数据库。
--name

模式的名称。要了解有关命名模式的更多信息,请参阅name-schema命令。

如果未指定 --schema,则为必需的

--schema

模式的ObjectId的字符串表示。

如果未指定 --name,则为必需的

例如,以下命令会将 movies 模式打印到控制台:

mongodrdl download --schemaSource schemas --name movies

要将架构存储在 .drdl 文件中,请将输出定向到所需的 .drdl 文件:

mongodrdl download --schemaSource schemas --name movies > ./movies.drdl
delete

删除由其名称或 ObjectId 的字符串表示指定的模式。

delete 接受以下选项:

名称
说明
必需。指定存储模式信息的数据库。
--name

模式的名称。要了解有关命名模式的更多信息,请参阅name-schema命令。

如果未指定 --schema,则为必需的

--schema

模式的ObjectId的字符串表示。

如果未指定 --name,则为必需的

例如,以下命令会删除 schemas 数据库中 id 为 5d7941dc6a26a3d0fc397284 的模式:

mongodrdl delete --schemaSource schemas --schema 5d7941dc6a26a3d0fc397284
name-schema

为模式创建新名称,或更新模式的现有名称。

存储模式默认未命名。使用 --name 选项和 downloaddelete 命令可以引用已命名的模式。使用 name-schema 命令命名或重命名模式。

name-schema 需要以下选项:

名称
说明
必需。指定存储模式信息的数据库。
必填。模式的新名称。
必需的 模式ObjectId的字符串表示。

例如,以下命令将 schemas 数据库中的 5d72adea5c23a9e44882a1ad 模式命名为 movies

mongodrdl name-schema --name movies --schemaSource schemas --schema 5d72adea5c23a9e44882a1ad
--help

返回 mongodrdl 的选项和使用的信息。

--version

返回 mongodrdl 版本号。

--verbose <level>, -v <level>

指定 mongodrdl 应提供更详细的日志输出。包含多次以输出更详细的信息(例如 -vvvvv),或指定一个数值(例如 --verbose=5)。

--quiet

隐藏所有日志输出。

--uri <mongodb-uri>

版本 2.12 新增内容

MongoDB URI 连接字符串。

重要

以下命令行选项不能与--uri选项一起使用:

相反,请将这些选项指定为--uri连接字符串的一部分。

--host <hostname><:port>, -h <hostname><:port>

默认:localhost:27017

指定要连接的mongod的可解析主机名。默认情况下, mongodrdl会尝试连接到在端口号27017上的本地主机上运行的 MongoDB 实例。

要连接到副本集,请指定 replSetName 和副本集成员的种子列表,如下所示:

<replSetName>/<hostname1><:port>,<hostname2><:port>,<...>

您始终可以直接指定主机和端口号,以便直接连接到单个 MongoDB 实例。

--port <port>

默认值:27017

指定 MongoDB 实例侦听客户端连接的 TCP 端口。

--db <database>, -d <database>

指定要生成 .drdl 模式文件的数据库。

--collection <collection>, -c <collection>

指定要生成 .drdl 模式文件的集合。如果不指定集合,该选项会使用指定数据库或实例中的所有集合。

--customFilterField <name>, -f <name>

指定要为自定义的 MongoDB 过滤器添加的字段名称。有关更多详细信息,请参阅自定义过滤器

--out <path>, -o <path>

默认:标准输出。

指定mongodrdl将写入模式文件的路径。要将模式发送到标准输出,请指定“ - ”而不是路径。

--sampleSize <size>, -s <size>

默认值:1000

指定要在生成集合的模式时采样的文档数量。

--uuidSubtype3Encoding <old|csharp|java>, -b <old|csharp|java>

指定用于生成 UUID 二进制子类型 3 的编码。选择下列值之一:

  • old:旧的 BSON 二进制子类型表示形式

  • csharp: C#/.NET 传统 UUID 表示形式

  • java:Java 传统 UUID 表示形式

--preJoined

生成包括父列在内的未绑定表,形成“预连接”表。

--schema <db-id>

2.11 版新增功能

必需。 指定模式的string 的ObjectId 表示形式。

--name <db-name>

2.11 版新增功能

指定模式名称。

重要

如果您上传自定义架构,则必须使用 name-schema 存储该架构,对其命名,然后使用 --schemaName 将此名称指定给 mongosqld。如果在上传架构时不存储架构名称,则架构名称默认为 defaultSchema。如果架构的名称不存在,则会导致 mongosqld 中的错误,类似于以下内容:MongoDB 架构尚不可用。初始化架构时出错:找不到此名称的架构。

--schemaSource <db-name>

2.11 版新增功能

指定存储模式信息的数据库。 sample命令不使用此选项。

--ssl

默认值:False

指示 mongodrdl 在连接 MongoDB 实例时使用 TLS/SSL。

--sslCAFile <filename>

指定 MongoDB 实例的 .pem 文件,其中包含来自证书颁发机构的根证书链。使用相对或绝对路径指定 .pem 文件的文件名称。

警告

对于与mongodmongos的 SSL 连接 ( --ssl ),如果mongodrdl在没有--sslCAFile的情况下运行, mongodrdl将不会尝试验证服务器证书。 这会对过期的mongodmongos证书以及冒充有效mongodmongos实例的外部进程造成漏洞。 确保始终指定 CA 文件来验证服务器证书,以防可能发生入侵。

--sslPEMKeyFile <filename>

指定同时包含 TLS/SSL 证书和密钥的 .pem 文件,以供 mongosqld 在连接 MongoDB 时使用。可使用相对或绝对路径来指定 .pem 文件的文件名。

使用--ssl选项连接到已启用CAFile且未启用net.ssl.allowConnectionsWithoutCertificatesmongodmongos时,需要使用此选项。

--sslPEMKeyPassword <password>

指定包含用于连接 MongoDB 的证书和私钥的文件的路径。

--sslCRLFile <filename>

指定包含证书吊销列表的 .pem 文件。使用相对或绝对路径指定 .pem 文件的文件名。

--sslAllowInvalidCertificates

允许 MongoDB 实例提供无效的服务器 SSL/TLS 证书。使用 allowInvalidCertificates 设置时,MongoDB 会将使用无效的证书这一行为记录为警告。

--sslAllowInvalidHostnames

禁用 TLS/SSL 证书中的主机名验证。如果证书的主机名与指定的主机名不匹配,则允许mongodrdl连接到 MongoDB 实例。

--sslFIPSMode

指示mongodrdl使用已安装 OpenSSL 库的 FIPS 模式。系统必须有符合 FIPS 标准的 OpenSSL 库才能使用--sslFIPSMode选项。

--minimumTLSVersion <TLS1_0|TLS1_1|TLS1_2>

默认:TLS1_1

指定 mongodrdl 连接到 mongodmongos 实例所需的最低 TLS 版本。默认值 TLS1_1 对应于 TLS 版本 1.1。

--username <username>, -u <username>

指定用户名,用于对使用身份验证的 MongoDB 数据库进行身份验证。与 --password--authenticationDatabase 选项结合使用。

--password <password>, -p <password>

指定密码,用于对使用身份验证的 MongoDB 数据库进行身份验证。与 --username--authenticationDatabase 选项结合使用。

--authenticationDatabase <dbname>

指定在其中创建用户的数据库。 请参阅身份验证数据库。

--authenticationMechanism <name>

默认值:SCRAM-SHA-1

指定 mongodrdl 实例用于向 mongodmongos 进行身份验证的身份验证机制。

说明
版本 2.6 中的新增内容: RFC 7677 标准 Salted 挑战响应身份验证机制(使用 SHA2 哈希函数)
普通版 (LDAP SASL)
使用 LDAP 进行外部身份验证。您也可使用 PLAIN 对数据库内用户进行身份验证。PLAIN 以纯文本形式传输密码。此机制仅在 MongoDB Enterprise 中可用。
GSSAPI (Kerberos)
使用 Kerberos 的外部身份验证。此机制仅在MongoDB Enterprise中可用。
--gssapiServiceName <service-name>

默认值:mongodb

要在使用 GSSAPI/Kerberos 进行身份验证时使用的服务名称。

--gssapiHostName <hostname>

默认:远程服务器地址

要在使用 GSSAPI/Kerberos 进行身份验证时使用的主机名。

BI Connector 使用 MongoDB 聚合管道对 MongoDB 数据库执行查询。您可以为模式添加一个特殊字段,以便将自定义 MongoDB $match 查询字符串传递给您的 MongoDB 实例。

使用--customFilterField选项和mongodrdl来命名自定义筛选器字段。 此字段传递原生 MongoDB $match阶段以用作聚合管道的第一阶段,该阶段会筛选从 MongoDB 返回的任何结果。 BI Connector 在从 SQL 向下推送的任何其他阶段之前应用此阶段。

查询可以引用集合中的任意字段,即使这些字段未在关系模式中公开。

有关自定义过滤器的使用示例,请参阅自定义过滤器示例。

数据库 test 中的集合 abc 中以下形状的文档:

{
"_id": ObjectId(),
"close": 7.45,
"detail": { "a": 2, "b": 3 }
}

运行mongodrdl以根据此集合生成模式:

mongodrdl -d test -c abc -o schema.drdl

生成的模式文件 (schema.drdl) 如下所示:

schema:
- db: test
tables:
- table: abc
collection: abc
pipeline: []
columns:
- Name: _id
MongoType: bson.ObjectId
SqlName: _id
SqlType: varchar
- Name: close
MongoType: float64
SqlName: close
SqlType: numeric
- Name: detail.a
MongoType: float64
SqlName: detail.a
SqlType: numeric
- Name: detail.b
MongoType: float64
SqlName: detail.b
SqlType: numeric

要使用此字段,请指定 --customFilterField 标记以及您希望此字段具有的名称:

mongodrdl [ other options ] --customFilterField _MONGOFILTER -o schema.drdl

在生成的每个表中,您的 DRDL 文件 schema.drdl 将包含如下字段:

- Name: _MONGOFILTER
MongoType: mongo.Filter
SqlName: _MONGOFILTER
SqlType: varchar

如需在标准 SQL 中添加特殊的 MongoDB 查询阶段,请使用以下 SQL 语法:

SELECT <normal>
FROM <tablename>
WHERE <normal conditions> AND
_MONGOFILTER='{ <json string that represents query to use> }'
SELECT name,age
FROM users
WHERE active='t' AND
_MONGOFILTER='{"addr":{"$elemMatch":{"city":"Springfield","state":"CA"}}}'

BI Connector 会将上述 SQL 转换为以下 MongoDB聚合表达式:

db.users.aggregate([
{$match:{"addr":{"$elemMatch":{"city":"Springfield","state":"CA"}}},
{$match:{"active":true}},
{$project:{"name":1, "age":1}}
]);

您可以在任何商业智能工具中使用此自定义过滤器,方法是过滤您的特殊字段,并以表示有效 JSON 的单引号字符串形式提供要匹配的值。JSON 内的所有引号必须都是双引号。

如果 MongoDB 服务器在启用身份验证的情况下运行,则必须指定用户名、密码和身份验证数据库作为mongodrdl命令的选项。

要从启用了身份验证的 mongod 实例创建 .drdl 文件,请使用以下命令格式:

mongodrdl --host myhost.example.net:27017 \
--username dbUser \
--password myPassword \
--db reports \
--collection FY2017 \
--authenticationDatabase admin \
--out schema.drdl

MongoDB Atlas 是一项云服务,可用来运行、监控和维护 MongoDB 部署,包括为 MongoDB 实例预配专用服务器。

注意

MongoDB Atlas 提供托管 BI Connector。您无法在 Atlas 托管的 BI Connector 中使用mongodrdl命令的.drdl文件输出。 Atlas BI Connector 要求采样具有可调整的样本刷新间隔和样本大小。

有关 Atlas 托管的 BI Connector 的更多信息,请参阅通过 BI Connector for Atlas 连接。

如果您在本地运行 BI Connector,并希望从 Atlas 数据库中 创建 .drdl 文件时,请使用以下命令格式:

mongodrdl --host <domain0>.mongodb.net:27017,<domain1>.mongodb.net:27017,... \
--username <username> \
--password <password> \
--ssl \
--authenticationDatabase admin \
--db <database> \
--out schema.drdl

后退

mongosqld