No Atlas Data Federation, vocĂȘ gerencia o esquema que a interface SQL utiliza por meio de trĂȘs comandos: sqlGenerateSchema, sqlGetSchema e sqlSetSchema. VocĂȘ executa estes comandos do mongosh em uma instĂąncia do banco de dados federado ou executa as açÔes equivalentes na UI do Atlas . Esta pĂĄgina documenta esses comandos e seus equivalentes em UI.
O Atlas Data Federation coleta amostras de documentos de suas coleçÔes para gerar o esquema inicial. Para obter informaçÔes båsicas sobre o gerenciamento de esquemas e os outros tipos de sistema suportados, consulte Gerenciamento de esquemas.
Observação
Os sqlGenerateSchema sqlGetSchema sqlSetSchema comandos, e e seus equivalentes da UI do Atlas se aplicam somente ao tipo de sistema Atlas Data Federation . Eles nĂŁo se aplicam a sistemas Enterprise Advanced (EA) autogerenciados, que usam o CLI do MongoDB SQL Schema Builder, ou a queries em um Atlas cluster padrĂŁo que nĂŁo usa o Atlas Data Federation.
sqlGenerateSchema
O comando sqlGenerateSchema gera um esquema de interface SQL para as collections ou visualizaçÔes especificadas. O Atlas Data Federation coleta amostras de documentos de cada namespace para derivar o esquema.
Sintaxe
Ao usar o parĂąmetro sampleNamespaces , vocĂȘ deve executar o comando no banco de dados admin .
use admin db.runCommand({ sqlGenerateSchema: 1, sampleNamespaces: [<namespace>], sampleSize: <int>, setSchemas: true|false })
ParĂąmetros
Parùmetro | Tipo | Descrição | necessidade |
|---|---|---|---|
| array de strings | Especifica a lista separada por vĂrgula de namespaces para os quais gerar esquemas. Um namespace inclui o nome do banco de dados , um separador de ponto () | Opcional |
| inteiro | Especifica o nĂșmero de documentos a serem usados como amostra para criar o esquema. Se omitido, o padrĂŁo Ă© | Opcional |
| booleano | Especifica se deseja armazenar o esquema gerado para a coleção ou visualização. O valor pode ser um dos seguintes:
Se omitido, o padrĂŁo Ă© | Opcional |
SaĂda
O comando retornarĂĄ a seguinte saĂda se for bem-sucedido:
{ "ok" : 1, "schemas" : [ { "databaseName" : "<database-name>", "namespaces" : [ { "name" : "<collection-name>", "schema" : { "version" : NumberLong(1), "jsonSchema" : { ... } } } ] }, ... ] }
O objeto schemas contém os seguintes campos.
Parùmetro | Tipo | Descrição |
|---|---|---|
| string | Nome do banco de dados. |
| Array de objetos | Nome e esquema gerado de cada coleção ou visualização. |
| string | Nome da coleção ou visualização. |
| documento | Esquema da coleção ou visualização. |
| inteiro | Formatar versĂŁo do esquema. O valor Ă© sempre 1. |
| documento | Esquema JSON da coleção ou visualização. O esquema JSON pode conter os seguintes campos:
Para saber mais sobre esses campos, consulte Palavras-chave do JSON schema. |
Se vocĂȘ definir o esquema da coleção ou visualização com a opção setSchemas, poderĂĄ verificar se o comando foi bem-sucedido executando o comando sqlGetSchema. O campo sqlGetSchema comando metadata.description contĂ©m o seguinte valor:
"set using sqlGenerateSchema with setSchemas = true"
Errors
O comando retorna o seguinte erro se falhar:
"failedNamespaces": [ { "namespace" : "<db.ns>", "error" : "no documents found in sample namespace" } ]
O Atlas Data Federation retorna esse erro se os namespaces especificados não existirem na configuração de armazenamento ou estiverem vazios. O Atlas Data Federation também retorna esse erro se não puder definir o esquema para um determinado namespace.
sqlGetSchema
O comando sqlGetSchema recupera o esquema armazenado para a coleção ou visualização especificada.
Sintaxe
db.getSiblingDB("<dbName>").runCommand({ sqlGetSchema: "<collection-name>|<view-name>" })
ParĂąmetros
Parùmetro | Tipo | Descrição | necessidade |
|---|---|---|---|
| string | Nome da coleção para a qual recuperar o esquema. Forneça o nome da collection ou o nome da visualização. | Condicional |
| string | Nome da visualização para a qual recuperar o esquema. Forneça o nome da visualização ou o nome da collection. | Condicional |
SaĂda
O comando retorna a seguinte saĂda se a coleção ou visualização nĂŁo tiver um esquema:
{ "ok" : 1, "metadata" : { }, "schema" : { } }
O comando retornarĂĄ uma saĂda semelhante Ă seguinte se a collection ou visualização tiver um esquema:
{ "ok": 1, "metadata": { "description": "<description>" }, "schema": { "version": NumberLong(1), "jsonSchema": { ... } } }
O campo metadata.description descreve como o esquema foi definido para a coleção. O valor pode ser um dos seguintes:
generated automatically by Atlas Data FederationIndica que o esquema foi gerado automaticamente pelo Atlas Data Federation.
set using sqlGenerateSchema with setSchemas = trueIndica que o esquema foi definido pelo comando sqlGenerateSchema porque a
setSchemaopção foi definidatruecomo.
set using sqlSetSchemaIndica que o esquema foi definido usando o comando sqlSetSchema.
O documento schema contém os seguintes campos:
Parùmetro | Tipo | Descrição |
|---|---|---|
| inteiro | Formatar versĂŁo do esquema. O valor Ă© sempre 1. |
| documento | Esquema JSON da coleção ou visualização. O esquema JSON pode conter os seguintes campos:
Para saber mais sobre esses campos, consulte Palavras-chave do JSON schema. |
sqlSetSchema
O comando sqlSetSchema define ou remove o esquema de uma coleção ou visualização. O comando aplica o esquema fornecido diretamente. O comando não valida o esquema fornecido em relação aos dados da coleção.
Sintaxe
db.getSiblingDB("<dbName>").runCommand({ sqlSetSchema: "<collection-name>|<view-name>", schema: { "version": 1, "jsonSchema": <jsonSchema> } })
db.getSiblingDB("<dbName>").runCommand({ sqlSetSchema: "<collection-name>|<view-name>", schema: {} })
ParĂąmetros
Parùmetro | Tipo | Descrição | necessidade |
|---|---|---|---|
| string | Nome da collection para a qual definir o esquema. Forneça um nome de collection ou um nome de visualização. | Condicional |
| string | Nome da visualização para a qual definir o esquema. Forneça um nome de visualização ou um nome de collection. | Condicional |
| documento | A versĂŁo do formato do esquema e:
VocĂȘ pode fornecer um Ășnico documento ou uma array de documentos no campo | ObrigatĂłrio |
SaĂda
O comando retornarĂĄ a seguinte saĂda se for bem-sucedido:
{ "ok" : 1 }
VocĂȘ pode verificar se o comando foi bem-sucedido executando o comando sqlGetSchema . O campo metadata.description na resposta contĂ©m o seguinte valor:
"set using sqlSetSchema"
Exemplos
Considere uma coleção denominada egData em um banco de dados denominada sampleDB com os seguintes documentos:
{"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}
Os exemplos seguintes utilizam os comandos de esquema do Atlas Data Federation para gerar, recuperar, configurar e remover o esquema para a coleção anterior.
Gerar um esquema
O seguinte comando gera um esquema para a coleção denominada sampleDB.egData na configuração de armazenamento. O comando utiliza dois documentos selecionados aleatoriamente da coleção para criar o esquema, pois o sampleSize é 2. O comando não define o esquema para a coleção porque a opção setSchemas não é especificada e o padrão é false.
use admin db.runCommand({ sqlGenerateSchema: 1, sampleNamespaces: ["sampleDB.egData"], sampleSize: 2 })
O comando anterior retorna a seguinte saĂda. Para saber mais sobre os campos na saĂda, consulte SaĂda.
{ "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" ] } } } } } ] } ] }
Gerar e definir um esquema
O seguinte comando gera um esquema para a coleção denominada sampleDB.egData na configuração de armazenamento. O comando utiliza até 1000 documentos na coleção para criar o esquema, pois a opção sampleSize não é especificada e padrão para 1000. O comando define o esquema gerado como o esquema a ser usado para a coleção porque setSchemas é true.
use admin db.runCommand({ sqlGenerateSchema: 1, sampleNamespaces: ["sampleDB.egData"], setSchemas: true })
Retrieve a Schema
O comando a seguir recupera o esquema armazenado para a coleção egData:
db.getSiblingDB("sampleDB").runCommand({ sqlGetSchema: "egData" })
O comando anterior retorna a seguinte saĂda. Para saber mais sobre os campos na saĂda, consulte SaĂda.
{ "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" ] } } } } }
Definir um esquema
O seguinte comando do sqlSetSchema define o esquema para a coleção 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" ] } } } } })
O comando anterior retorna a seguinte saĂda:
{ "ok" : 1 }
Remover um esquema
O comando sqlSetSchema a seguir remove o esquema da collection egData passando um documento schema vazio:
db.getSiblingDB("sampleDB").runCommand({ sqlSetSchema: "egData", schema: {} })
O comando anterior retorna a seguinte saĂda:
{ "ok" : 1 }
Gerenciar esquemas na UI do Atlas
VocĂȘ pode executar as mesmas açÔes de esquema na UI do Atlas a partir da pĂĄgina Manage SQL Schemas. Os documentos de amostras da UI para gerar esquemas, os mesmos do comando sqlGenerateSchema.
Criar um esquema
Quando vocĂȘ cria uma conexĂŁo de inĂcio rĂĄpido, o Atlas Data Federation gera o esquema automaticamente. Para criar um esquema manualmente, use o procedimento a seguir.
No Atlas, acesse sua instĂąncia de banco de dados federado para seu projeto.
Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.
Se ainda não estiver exibido, selecione seu projeto no menu Projects na barra de navegação.
Na barra lateral, clique em Data Federation sob o tĂtulo Services.
A pĂĄgina Data Federation Ă© exibida.
Regenerar um esquema
Regenere um esquema sempre que a forma dos dados subjacentes for alterada, como ao adicionar campos ou alterar os tipos de campo , para que as queries SQL reflitam os dados atuais. Para manter os esquemas atualizados automaticamente, consulte Agendar atualizaçÔes de esquema.
No Atlas, acesse sua instĂąncia de banco de dados federado para seu projeto.
Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.
Se ainda não estiver exibido, selecione seu projeto no menu Projects na barra de navegação.
Na barra lateral, clique em Data Federation sob o tĂtulo Services.
A pĂĄgina Data Federation Ă© exibida.
Visualizar um esquema
No Atlas, acesse sua instĂąncia de banco de dados federado para seu projeto.
Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.
Se ainda não estiver exibido, selecione seu projeto no menu Projects na barra de navegação.
Na barra lateral, clique em Data Federation sob o tĂtulo Services.
A pĂĄgina Data Federation Ă© exibida.
Navegue até a pågina Gerenciar esquemas SQL.
Na seção Federated Database Instances , clique em Ăcone Ă direita do esquema e selecione Manage SQL Schemas no menu suspenso.
Nesta pĂĄgina, vocĂȘ pode visualizar todos os esquemas existentes. Para visualizar um esquema especĂfico no formato JSON, clique em.
Editar um esquema
No Atlas, acesse sua instĂąncia de banco de dados federado para seu projeto.
Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.
Se ainda não estiver exibido, selecione seu projeto no menu Projects na barra de navegação.
Na barra lateral, clique em Data Federation sob o tĂtulo Services.
A pĂĄgina Data Federation Ă© exibida.
Excluir um esquema
No Atlas, acesse sua instĂąncia de banco de dados federado para seu projeto.
Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.
Se ainda não estiver exibido, selecione seu projeto no menu Projects na barra de navegação.
Na barra lateral, clique em Data Federation sob o tĂtulo Services.
A pĂĄgina Data Federation Ă© exibida.
Excluir todos os esquemas
No Atlas, acesse sua instĂąncia de banco de dados federado para seu projeto.
Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.
Se ainda não estiver exibido, selecione seu projeto no menu Projects na barra de navegação.
Na barra lateral, clique em Data Federation sob o tĂtulo Services.
A pĂĄgina Data Federation Ă© exibida.
AtualizaçÔes do esquema de agendamento
As atualizaçÔes de esquema programadas ajudam a manter a precisão do esquema ao longo do tempo. As atualizaçÔes de esquema agendadas amostram cada namespace e mesclam o novo esquema com o existente. Por exemplo, atualizaçÔes de esquema agendadas permitem que Atlas Data Federation escolha automaticamente novos campos adicionados a collections.
No Atlas, acesse sua instĂąncia de banco de dados federado para seu projeto.
Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.
Se ainda não estiver exibido, selecione seu projeto no menu Projects na barra de navegação.
Na barra lateral, clique em Data Federation sob o tĂtulo Services.
A pĂĄgina Data Federation Ă© exibida.