对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

MongoDB SQL 模式构建器 CLI

MongoDB SQL Schema Builder CLI 是用于 Enterprise Advanced (EA) 自管理部署的 SQL 接口的模式管理工具。您下载并针对集群运行 CLI 以生成 JSON schema。SQL 接口使用该模式将 SQL 查询转换为 MongoDB 操作。

此页面说明了该工具的功能、运行该工具所需的条件、调用该工具的方法以及该工具接受的标志。有关模式管理概览和其他支持的部署类型,请参阅 模式管理。

在 EA 自管理部署中运行 SQL 接口并需要为集合生成或更新模式时,请使用 MongoDB SQL 模式构建者 CLI。CLI 是此部署类型支持的模式管理路径。

CLI 不会对数据进行采样。相反,它会分析它处理的每个集合中的每个文档,因此生成的模式可以精确反映集合中的准确数据。即使只在少量文档中出现的字段也包含在模式中。

模式重新生成始终由用户启动。CLI 不会自动或按照安排刷新模式。每当根本的数据的形状发生变化时,都应重新生成模式,以便 SQL 接口对所提供的模式信息进行操作。

在运行 MongoDB SQL 模式构建器 CLI 之前,请确保满足以下要求:

  • 您的部署是 MongoDB Enterprise 集群。CLI 不支持 MongoDB Community 集群。

  • 您可以从运行 CLI 的计算机连接到集群,可以使用连接字符串 (--uri) 或配置文件 (--file)。

  • CLI 身份验证的数据库用户至少具有:

    • 对于要处理的每个数据库,具有 read 权限。此权限允许 CLI 列举和分析集合。

    • 在您处理的每个数据库中的 __sql_schemas 集合上的 findinsertupdate 权限,或数据库上的 readWrite 角色。CLI 会以更新或插入(upsert)的方式写入每个模式,因此即使是第一次运行,也需要 update 权限。

您可以使用 --username--password 标志提供凭证,也可以将其包含在连接字符串中。如果您未提供凭证,CLI 将尝试在没有身份验证的情况下连接并记录日志警告。

您可以从命令行对集群运行 MongoDB SQL 模式构建器 CLI,以生成或更新模式。二进制文件命名为 mongodb-schema-manager

以下示例分析 sales 数据库中的每个集合,并将追踪日志写入 logs 目录:

mongodb-schema-manager \
--uri "mongodb://<host>:<port>" \
--ns-include "sales.*" \
--logpath ./logs \
--verbosity info

运行完成后, CLI会打印为其创建或修改模式的数据库和命名空间。如果任何命名空间的多态性级别过高而无法进行有意义的使用,则该命名空间被视为不稳定。 CLI列出了这些命名空间。有关更多信息,请参阅不稳定模式。

MongoDB SQL 模式构建者 CLI 不提供 TLS 的命令行标志。要连接到启用 TLS 的集群,请在传递给 --uri 的连接字符串中指定 TLS 选项。

对包含保留字符的任何选项值进行百分比编码,包括文件路径中的 / 字符。例如,路径 /etc/certs/ca.pem 变为 %2Fetc%2Fcerts%2Fca.pem

以下示例启用 TLS 并指定证书授权机构文件:

mongodb-schema-manager \
--uri "mongodb://<host>:<port>/?tls=true&tlsCAFile=%2Fetc%2Fcerts%2Fca.pem" \
--ns-include "sales.*"

如果您的部署需要客户端证书,还请设立tlsCertificateKeyFile ,并在密钥文件已加密的情况下设置tlsCertificateKeyFilePassword 。有关 TLS连接字符串选项的完整列表,请参阅 TLS 选项。

CLI会将每个命名空间的一个模式文档写入其处理的每个数据库中的 __sql_schemas集合。

重要

__sql_schemas 集合视为 SQL 接口的保留命名空间。请勿手动修改。使用 CLI 来创建和更新其中包含的模式。

要查看CLI生成的模式,请针对要检查的数据库中的 __sql_schemas集合运行聚合管道。每个文档报告以下元数据:

  • lastUpdated: 最近一次模式写入的日期和时间。

  • unstable:模式是否不稳定。有关更多信息,请参阅不稳定模式。

要列出数据库中每个模式的状态而不打印完整的模式主体,请在 mongosh 中运行以下管道:

db.__sql_schemas.aggregate([
{ $project: { _id: 0, namespace: "$_id", type: 1, lastUpdated: 1, unstable: 1 } },
{ $sort: { namespace: 1 } }
])

要查看特定集合的完整模式,请匹配其名称:

db.__sql_schemas.aggregate([
{ $match: { _id: "<collection-name>" } },
{ $project: { _id: 0, namespace: "$_id", type: 1, lastUpdated: 1, unstable: 1, schema: 1 } }
])

默认情况下,CLI 会隐式排除名称以两个下划线 (__) 开头的任何数据库或集合,包括 __sql_schemas 集合本身。要包含这些命名空间,必须使用 --ns-include 显式指定它们。示例,--ns-include "*.__*" 包含名称以 __ 开头的集合,但不包含名称以 __ 开头的数据库。

CLI 从视图管道和管道引用的源集合的模式中获取视图的模式。在正常情况下,CLI 不会对视图进行采样。为确保视图的衍生模式准确,请先为源集合生成最新的模式。

如果源集合不存在模式,或 CLI 无法从可用的源集合模式中获取模式,CLI 将回退到执行视图并对其输出文档进行采样。

MongoDB SQL 模式构建者 CLI 接受以下标志。您必须提供 --uri--file,以便 CLI 连接到您的集群。

-f, --file <CONFIG_FILE>
配置文件的路径。命令行参数优先于配置文件中的值。
--uri <URI>
集群的连接字符串。
-u, --username <USERNAME>
用于身份验证的用户名。您还可以在连接字符串中指定用户名。
-p, --password <PASSWORD>
用于身份验证的密码。您还可以在连接字符串中指定密码。
--ns-include <NS_INCLUDE>
要包含的数据库和集合,格式为 <database_pattern>.<collection_pattern>。支持 Glob 语法,例如 mydb.*。重复此标志以指定多个模式。如果忽略此标志,CLI 将包含所有数据库和集合。除非明确指定,否则以 __ 开头的命名空间将被隐式排除。
--ns-exclude <NS_EXCLUDE>
要排除的数据库和集合,其格式与 --ns-include 相同。重复标志以指定多个模式。此标志优先于 --ns-include
--quiet
启用静音模式以减少输出。默认:false
-o, --logpath <LOGPATH>
CLI 写入日志文件的目录。日志文件命名为 mongodb-schema-manager.log.{date}。如果您忽略此标志,CLI 将不写入日志文件。
-v, --verbosity <VERBOSITY>
要在日志文件中捕获的日志级别。需要 --logpath。接受 tracedebuginfowarnerror。默认:warn
-a, --action <SCHEMA_ACTION>

对模式执行的操作。默认:merge。接受以下值:

  • merge: 将新模式与现有模式合并。如果不存在模式,此操作将创建一个。此操作不会更新不稳定的模式。

  • overwrite: 忽略并覆盖现有模式。如果不存在模式,此操作将创建一个。使用此操作更新不稳定模式。

  • clear: 从现有模式文档中删除 schema 字段。如果不存在模式,此操作只捕获元数据。

--dry-run
执行演练运行,不分析模式或向数据库写入数据。使用此标志来测试 --ns-include--ns-exclude 模式。默认值:false
--resolver <RESOLVER>
如果 DNS 解析失败或者较慢,则使用 DNS 解析器。接受 cloudflaregooglequad9
-j, --jobs <JOBS>
并发模式处理作业的最大数量。必须是大于 0 的整数。默认:物理内核数的两倍。

当集合的文档形状差异很大时(例如,使用字段名称作为映射键的集合),CLI 会将衍生模式标记为不稳定。不稳定模式在模式文档中将 unstable 设置为 true,并将捕获字段的数量限制为 additionalProperties 并设置为 true。不稳定模式可能无法完全表示命名空间中的数据。

当运行产生一个或多个不稳定模式时, CLI会打印受影响的命名空间:

The following namespaces have unstable schemas. They may not
fully represent the data in the namespace.
Unstable schemas are not updated by the schema-manager by
default. To update them, use the 'overwrite' action.

默认 merge 操作不会更新不稳定模式。要更新不稳定模式,请使用 --action overwrite 运行 CLI。

当根本的数据的形状发生变化时(例如添加字段、删除字段或更改现有字段的数据类型),请重新生成模式。CLI 不会自行检测数据形状变更,因此重新生成始终由用户发起。过时的模式可能会导致 SQL 接口将集合映射到错误的表和列。