在Atlas Data Federation中,您可以通过三个命令管理SQL接口使用的模式:sqlGenerateSchema、sqlGetSchema 和 sqlSetSchema。您可以从 mongosh 对联合数据库实例运行这些命令,或者在Atlas用户界面中执行等效操作。本页介绍了这些命令及其等效的用户界面界面。
Atlas Data Federation对集合中的文档进行采样以生成初始模式。有关模式管理和其他支持的部署类型的背景,请参阅模式管理。
注意
、 和sqlGenerateSchemasqlGetSchema sqlSetSchema命令及其Atlas用户界面等效命令仅应用于Atlas Data Federation部署类型。它们不适应用使用MongoDB SQL Schema Builder CLI的自管理Enterprise Advanced (EA) 部署,也不适用于针对不使用Atlas Data Federation 的标准Atlas 集群的查询。
sqlGenerateSchema
sqlGenerateSchema 命令为指定的集合或视图生成SQL接口模式。 Atlas Data Federation对每个命名空间中的文档进行采样以得出模式。
语法
使用 sampleNamespaces 参数时,必须对 admin数据库运行该命令。
use admin db.runCommand({ sqlGenerateSchema: 1, sampleNamespaces: [<namespace>], sampleSize: <int>, setSchemas: true|false })
参数
Parameter | 类型 | 说明 | 必要性 |
|---|---|---|---|
| 字符串数组 | Optional | |
| 整型 | 指定创建模式时用作样本的文档数量。 如果省略,则默认值为 | Optional |
| 布尔 | 指定是否存储集合或视图的生成模式。值可以是以下之一:
如果省略,则默认值为 | Optional |
输出
如果成功,该命令将返回以下输出:
{ "ok" : 1, "schemas" : [ { "databaseName" : "<database-name>", "namespaces" : [ { "name" : "<collection-name>", "schema" : { "version" : NumberLong(1), "jsonSchema" : { ... } } } ] }, ... ] }
schemas 对象包含以下字段。
Parameter | 类型 | 说明 |
|---|---|---|
| 字符串 | 数据库名称。 |
| 对象数组 | 每个集合或视图的名称和生成模式。 |
| 字符串 | 集合或视图的名称。 |
| 文档 | 集合或视图的模式。 |
| 整型 | 模式的格式版本。值始终为 1。 |
| 文档 | 集合或视图的JSON schema。 JSON schema可以包含以下字段:
要了解有关这些字段的更多信息,请参阅 JSON schema 关键字。 |
如果使用 setSchemas 选项设立集合或视图的模式,则可以通过运行sqlGetSchema 命令来验证命令是否成功。 sqlGetSchema 命令 metadata.description字段包含以下值:
"set using sqlGenerateSchema with setSchemas = true"
Errors
如果失败,该命令将返回以下错误:
"failedNamespaces": [ { "namespace" : "<db.ns>", "error" : "no documents found in sample namespace" } ]
如果指定的命名空间在存储配置中不存在或为空, Atlas Data Federation将返回此错误。如果Atlas Data Federation无法为给定命名空间设立模式,它也会返回此错误。
sqlGetSchema
sqlGetSchema 命令可检索为指定集合或视图存储的模式。
语法
db.getSiblingDB("<dbName>").runCommand({ sqlGetSchema: "<collection-name>|<view-name>" })
参数
Parameter | 类型 | 说明 | 必要性 |
|---|---|---|---|
| 字符串 | 要检索其模式的集合的名称。提供集合名称或视图名称。 | 可选的 |
| 字符串 | 要检索其模式的视图的名称。提供视图名称或集合名称。 | 可选的 |
输出
如果集合或视图没有模式,该命令将返回以下输出:
{ "ok" : 1, "metadata" : { }, "schema" : { } }
如果集合或视图具有模式,该命令将返回类似于以下的输出:
{ "ok": 1, "metadata": { "description": "<description>" }, "schema": { "version": NumberLong(1), "jsonSchema": { ... } } }
metadata.description 字段描述了如何为集合设置模式。值可以是以下任意选项:
set using sqlGenerateSchema with setSchemas = true表示该模式由 sqlGenerateSchema 命令设立,因为
setSchema选项设立为true。
set using sqlSetSchema表示模式是使用 sqlSetSchema 命令设立的。
schema 文档包含以下字段:
Parameter | 类型 | 说明 |
|---|---|---|
| 整型 | 模式的格式版本。值始终为 1。 |
| 文档 | 集合或视图的JSON schema。 JSON schema可以包含以下字段:
要了解有关这些字段的更多信息,请参阅 JSON schema 关键字。 |
sqlSetSchema
sqlSetSchema 命令设置或删除集合或视图的模式。该命令会直接应用您提供的模式。该命令不会根据集合中的数据验证所提供的模式。
语法
db.getSiblingDB("<dbName>").runCommand({ sqlSetSchema: "<collection-name>|<view-name>", schema: { "version": 1, "jsonSchema": <jsonSchema> } })
db.getSiblingDB("<dbName>").runCommand({ sqlSetSchema: "<collection-name>|<view-name>", schema: {} })
参数
Parameter | 类型 | 说明 | 必要性 |
|---|---|---|---|
| 字符串 | 要为其设立模式的集合的名称。提供集合名称或视图名称。 | 可选的 |
| 字符串 | 要设立模式的视图的名称。提供视图名称或集合名称。 | 可选的 |
| 文档 | 模式的格式版本以及以下任一项:
您可以在 | 必需 |
输出
如果成功,该命令将返回以下输出:
{ "ok" : 1 }
您可以通过运行sqlGetSchema命令来验证该命令是否成功。 响应中的metadata.description字段包含以下值:
"set using sqlSetSchema"
示例
考虑名为 sampleDB 的数据库中名为 egData 的集合,其中包含以下文档:
{"a": {"b": {"c": [1, 2, 3]}}, "s": 1} {"a": {"b": {"c": [4, 5, 6]}}, "s": 2} {"a": {"b": [7, 8, 9]}, "s": 3} {"a": {"b": {"c": []}}, "s": 4} {"a": {"b": {"c": "hello"}}, "s": 5} {"a": {"b": {"c": {"d": 1}}}, "s": 6} {"a": {"b": {"c": null}}} {"s": 7}
以下示例使用Atlas Data Federation模式命令来生成、检索、设立和删除上述集合的模式。
生成模式
以下命令为存储配置中名为 sampleDB.egData 的集合生成模式。该命令使用从集合中随机选择的两个文档来创建模式,因为 sampleSize 是 2。该命令不会为集合设立模式,因为未指定 setSchemas 选项且默认为 false。
use admin db.runCommand({ sqlGenerateSchema: 1, sampleNamespaces: ["sampleDB.egData"], sampleSize: 2 })
上一个命令会返回以下输出。 要了解有关输出中字段的更多信息,请参阅输出。
{ "ok" : 1, "schemas" : [ { "databaseName" : "sampleDB", "namespaces" : [ { "name" : "egData", "schema" : { "version" : NumberLong(1), "jsonSchema" : { "bsonType" : [ "object" ], "properties" : { "a" : { "bsonType" : [ "object" ], "properties" : { "b" : { "bsonType" : [ "object" ], "properties" : { "c" : { "bsonType" : [ "array" ], "items" : { "bsonType" : [ "int" ] } } } } } }, "s" : { "bsonType" : [ "int" ] } } } } } ] } ] }
生成并设置模式
以下命令为存储配置中名为 sampleDB.egData 的集合生成模式。该命令最多使用集合中的 1000 个文档来创建模式,因为未指定 sampleSize 选项且默认为 1000。该命令将生成的模式设置为用于集合的模式,因为 setSchemas 为 true。
use admin db.runCommand({ sqlGenerateSchema: 1, sampleNamespaces: ["sampleDB.egData"], setSchemas: true })
Retrieve a Schema
以下命令可检索为 egData 集合存储的模式:
db.getSiblingDB("sampleDB").runCommand({ sqlGetSchema: "egData" })
上一个命令会返回以下输出。 要了解有关输出中字段的更多信息,请参阅输出。
{ "ok" : 1, "metadata" : { "description" : "set using sqlGenerateSchema with setSchemas = true" }, "schema" : { "version" : NumberLong(1), "jsonSchema" : { "bsonType" : [ "object" ], "properties" : { "a" : { "bsonType" : [ "object" ], "properties" : { "b" : { "bsonType" : [ "object", "array" ], "properties" : { "c" : { "bsonType" : [ "array", "string", "object", "null" ], "properties" : { "d" : { "bsonType" : [ "int" ] } }, "items" : { "bsonType" : [ "int" ] } } }, "items" : { "bsonType" : [ "int" ] } } } }, "s" : { "bsonType" : [ "int", "object" ] } } } } }
设置模式
以下 sqlSetSchema 命令为 egData集合设置模式:
db.getSiblingDB("sampleDB").runCommand({ sqlSetSchema : "egData", "schema" : { "version" : NumberLong(1), "jsonSchema" : { "bsonType" : [ "object" ], "properties" : { "a" : { "bsonType" : [ "object" ], "properties" : { "b" : { "bsonType" : [ "object", "array" ], "properties" : { "c" : { "bsonType" : [ "array", "string", "object", "null" ], "properties" : { "d" : { "bsonType" : [ "int" ] } }, "items" : { "bsonType" : [ "int" ] } } }, "items" : { "bsonType" : [ "int" ] } } } }, "s" : { "bsonType" : [ "int", "object" ] } } } } })
上一命令会返回以下输出:
{ "ok" : 1 }
删除模式
以下 sqlSetSchema 命令通过传递空的 schema文档来删除 egData集合的模式:
db.getSiblingDB("sampleDB").runCommand({ sqlSetSchema: "egData", schema: {} })
上一命令会返回以下输出:
{ "ok" : 1 }
在Atlas用户界面中管理模式
您可以在Atlas用户界面的 Manage SQL Schemas 页面执行相同的模式操作。用户界面界面对文档进行采样以生成模式,与 sqlGenerateSchema 命令相同。
创建模式
创建快速启动连接时, Atlas Data Federation会自动生成模式。要手动创建模式,请使用以下过程。
在 Atlas 中,转到项目的联合数据库实例。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。
如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。
在侧边栏中,单击 Services 标题下的 Data Federation。
显示Data Federation 页面。
重新生成模式
每当根本的数据的形状发生变化时(例如当您添加字段或更改字段类型时),请重新生成模式,以便您的SQL查询反映当前数据。要自动使模式保持最新状态,请参阅计划模式更新。
在 Atlas 中,转到项目的联合数据库实例。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。
如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。
在侧边栏中,单击 Services 标题下的 Data Federation。
显示Data Federation 页面。
查看模式
在 Atlas 中,转到项目的联合数据库实例。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。
如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。
在侧边栏中,单击 Services 标题下的 Data Federation。
显示Data Federation 页面。
编辑模式
在 Atlas 中,转到项目的联合数据库实例。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。
如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。
在侧边栏中,单击 Services 标题下的 Data Federation。
显示Data Federation 页面。
删除模式
在 Atlas 中,转到项目的联合数据库实例。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。
如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。
在侧边栏中,单击 Services 标题下的 Data Federation。
显示Data Federation 页面。
删除所有模式
在 Atlas 中,转到项目的联合数据库实例。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。
如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。
在侧边栏中,单击 Services 标题下的 Data Federation。
显示Data Federation 页面。
安排模式更新
计划的模式更新可帮助您长期保持模式的准确性。计划的模式更新对每个命名空间示例,并将新模式与现有模式合并。示例,计划的模式更新允许Atlas Data Federation自动选取添加到集合中的新字段。
在 Atlas 中,转到项目的联合数据库实例。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。
如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。
在侧边栏中,单击 Services 标题下的 Data Federation。
显示Data Federation 页面。