mongodrdl
说明
注意
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...>]
默认最低 TLS 版本
版本 2.6 中的新增内容。
从mongodrdl
到MongoDB的传出连接的默认最低 TLS 版本为1.1 。
您可以使用--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
选项和download
、delete
命令可以引用已命名的模式。使用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
选项和download
、delete
命令可以引用已命名的模式。使用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
)。
--host <hostname><:port>, -h <hostname><:port>
默认:localhost:27017
指定要连接的
mongod
的可解析主机名。 默认,mongodrdl
会尝试连接到在本地主机端口号27017
上运行的MongoDB实例。要连接到副本集,请指定
replSetName
和副本集成员的种子列表,如下所示:<replSetName>/<hostname1><:port>,<hostname2><:port>,<...> 您始终可以直接指定主机和端口号,以便直接连接到单个 MongoDB 实例。
--customFilterField <name>, -f <name>
指定要为自定义的 MongoDB 过滤器添加的字段名称。有关更多详细信息,请参阅自定义过滤器。
--out <path>, -o <path>
默认:标准输出。
指定
mongodrdl
将写入模式文件的路径。 要将模式发送到标准输出,请指定“-
”而不是路径。
--uuidSubtype3Encoding <old|csharp|java>, -b <old|csharp|java>
指定用于生成 UUID 二进制子类型 3 的编码。选择下列值之一:
old
:旧的 BSON 二进制子类型表示形式csharp
: C#/.NET 传统 UUID 表示形式java
:Java 传统 UUID 表示形式
--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
命令不使用此选项。
TLS/SSL 选项
--ssl
默认值:False
指示
mongodrdl
在连接 MongoDB 实例时使用 TLS/SSL。
--sslPEMKeyFile <filename>
指定同时包含 TLS/SSL 证书和密钥的
.pem
文件,以供mongosqld
在连接 MongoDB 时使用。可使用相对或绝对路径来指定.pem
文件的文件名。使用
--ssl
选项连接到已启用CAFile
且未启用net.ssl.allowConnectionsWithoutCertificates
的mongod
或mongos
时,需要使用此选项。
--sslAllowInvalidCertificates
允许 MongoDB 实例提供无效的服务器 SSL/TLS 证书。使用
allowInvalidCertificates
设置时,MongoDB 会将使用无效的证书这一行为记录为警告。
--sslAllowInvalidHostnames
禁用 TLS/SSL 证书中的主机名验证。 如果证书的主机名与指定的主机名不匹配,则允许
mongodrdl
连接到MongoDB实例。
--sslFIPSMode
指示
mongodrdl
使用已安装 OpenSSL 库的 FIPS模式。 系统必须有符合 FIPS 标准的 OpenSSL 库才能使用--sslFIPSMode
选项。
身份验证选项
--username <username>, -u <username>
指定用户名,用于对使用身份验证的 MongoDB 数据库进行身份验证。与
--password
和--authenticationDatabase
选项结合使用。
--password <password>, -p <password>
指定密码,用于对使用身份验证的 MongoDB 数据库进行身份验证。与
--username
和--authenticationDatabase
选项结合使用。
--authenticationDatabase <dbname>
指定在其中创建用户的数据库。 请参阅身份验证数据库。
自定义筛选器
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
命令的选项。
mongodrdl --host myhost.example.net:27017 \ --username dbUser \ --password myPassword \ --db reports \ --collection FY2017 \ --authenticationDatabase admin \ --out schema.drdl
MongoDB Atlas 示例
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