Atlas Data Federation では、sqlGenerateSchema、sqlGetSchema、sqlSetSchemaの 3 つのコマンドを使用して、SQL インターフェースが使用するスキーマを管理します。これらのコマンドは、mongosh からフェデレーティッドデータベースインスタンスに対して実行するか、Atlas UI で同等のアクションを実行します。このページでは、これらのコマンドとその UI の同等について記述します。
Atlas Data Federation は、コレクションからドキュメントをサンプルして初期スキーマを生成します。スキーママネジメントとその他のサポートされている配置タイプの経歴については、スキーママネジメントを参照してください。
注意
sqlGenerateSchema、sqlGetSchema、sqlSetSchema コマンドとそれらの Atlas UI の対応するコマンドは、Atlas Data Federation 配置タイプにのみ適用されます。これらは、自己管理型 Enterprise Advanced (EA) 配置(MongoDB SQL スキーマ Builder CLI を使用)または 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 | タイプ | 説明 | 必要性 |
|---|---|---|---|
| 文字列の配列 | スキーマを生成する名前空間のカンマ区切りリストを指定します。名前空間には、データベース名、ドット( | 任意 |
| integer | スキーマを作成するためのサンプルとして使用するドキュメントの数を指定します。 省略した場合、デフォルトは | 任意 |
| ブール値 | コレクションまたはビューの生成されたスキーマを保存するかどうかを指定します。値は次のいずれかになります。
省略した場合、デフォルトは | 任意 |
出力
コマンドが成功すると、次の出力が返されます。
{ "ok" : 1, "schemas" : [ { "databaseName" : "<database-name>", "namespaces" : [ { "name" : "<collection-name>", "schema" : { "version" : NumberLong(1), "jsonSchema" : { ... } } } ] }, ... ] }
schemasオブジェクトには次のフィールドが含まれています。
Parameter | タイプ | 説明 |
|---|---|---|
| string | データベースの名前。 |
| オブジェクトの配列 | 各コレクションまたはビューの名前と生成されたスキーマ。 |
| string | コレクションまたはビューの名前。 |
| ドキュメント | コレクションまたはビューのスキーマ。 |
| integer | スキーマの形式バージョン。 値は常に 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 | タイプ | 説明 | 必要性 |
|---|---|---|---|
| string | スキーマを検索するコレクションの名前。コレクション名またはビュー名のいずれかを指定します。 | 条件付き |
| string | スキーマを検索するビューの名前。ビュー名またはコレクション名のいずれかを指定します。 | 条件付き |
出力
コレクションまたはビューにスキーマがない場合、コマンドは次の出力を返します。
{ "ok" : 1, "metadata" : { }, "schema" : { } }
コレクションまたはビューにスキーマがある場合、このコマンドは次のような出力を返します。
{ "ok": 1, "metadata": { "description": "<description>" }, "schema": { "version": NumberLong(1), "jsonSchema": { ... } } }
metadata.descriptionフィールドは、コレクションのスキーマがどのように設定されたかを示します。 値は次のいずれかになります。
set using sqlGenerateSchema with setSchemas = truesetSchemaオプションがtrueに設定されていたため、sqlGenerateSchema コマンドによってスキーマが設定されたことを示します。
set using sqlSetSchemasqlSetSchema コマンドを使用してスキーマが設定されたことを示します。
schema ドキュメントには、次のフィールドが含まれています。
Parameter | タイプ | 説明 |
|---|---|---|
| integer | スキーマの形式バージョン。 値は常に 1 です。 |
| ドキュメント | コレクションまたはビューのJSON schema。 JSON schema は、次のフィールドを含めることができます。
これらのフィールドの詳細については、「 JSON schema キーワード 」を参照してください。 |
sslSetSchema
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 | タイプ | 説明 | 必要性 |
|---|---|---|---|
| string | スキーマを設定するコレクションの名前。コレクション名またはビュー名を指定します。 | 条件付き |
| string | スキーマを設定するビューの名前。ビュー名またはコレクション名を指定します。 | 条件付き |
| ドキュメント | スキーマの形式バージョンと次のいずれか
| 必須 |
出力
コマンドが成功すると、次の出力が返されます。
{ "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という名前のコレクションのスキーマを生成します。このコマンドは、コレクションから無作為に選択された 2 つのドキュメントを使用してスキーマを作成します。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という名前のコレクションのスキーマを生成します。コマンドは、sampleSizeオプションが指定されていなく、1000がデフォルトに設定されているため、スキーマを作成するためにコレクション内の最大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 UI でスキーマを管理する
Manage SQL Schemas ページから Atlas UI で同じスキーマ アクションを実行できます。UI は、sqlGenerateSchema コマンドと同様にドキュメントをサンプルしてスキーマを生成します。
スキーマを作成する
クイック スタート接続を作成すると、Atlas Data Federation はスキーマを自動的に生成します。スキーマを手動で作成するには、次の手順を使用します。
Atlasで、プロジェクトのフェデレーティッドデータベースインスタンスにGoします。
まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの Organizations メニューで選択します。
まだ表示されていない場合は、ナビゲーション バーの Projects メニューからプロジェクトを選択します。
サイドバーで、 Services見出しの下のData Federationをクリックします。
Data Federationページが表示されます。
スキーマを再生成する
フィールドの追加やフィールドタイプの変更など、基礎のデータの形状が変更されるたびにスキーマを再生成して、SQL クエリが現在のデータを反映するようにします。その代わりに、スキーマを自動的に更新させるには、スキーマ更新の予定を参照してください。
Atlasで、プロジェクトのフェデレーティッドデータベースインスタンスにGoします。
まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの Organizations メニューで選択します。
まだ表示されていない場合は、ナビゲーション バーの Projects メニューからプロジェクトを選択します。
サイドバーで、 Services見出しの下のData Federationをクリックします。
Data Federationページが表示されます。
スキーマの表示
Atlasで、プロジェクトのフェデレーティッドデータベースインスタンスにGoします。
まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの Organizations メニューで選択します。
まだ表示されていない場合は、ナビゲーション バーの Projects メニューからプロジェクトを選択します。
サイドバーで、 Services見出しの下のData Federationをクリックします。
Data Federationページが表示されます。
スキーマの編集
Atlasで、プロジェクトのフェデレーティッドデータベースインスタンスにGoします。
まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの Organizations メニューで選択します。
まだ表示されていない場合は、ナビゲーション バーの Projects メニューからプロジェクトを選択します。
サイドバーで、 Services見出しの下のData Federationをクリックします。
Data Federationページが表示されます。
スキーマを削除する
Atlasで、プロジェクトのフェデレーティッドデータベースインスタンスにGoします。
まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの Organizations メニューで選択します。
まだ表示されていない場合は、ナビゲーション バーの Projects メニューからプロジェクトを選択します。
サイドバーで、 Services見出しの下のData Federationをクリックします。
Data Federationページが表示されます。
すべてのスキーマを削除する
Atlasで、プロジェクトのフェデレーティッドデータベースインスタンスにGoします。
まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの Organizations メニューで選択します。
まだ表示されていない場合は、ナビゲーション バーの Projects メニューからプロジェクトを選択します。
サイドバーで、 Services見出しの下のData Federationをクリックします。
Data Federationページが表示されます。
スキーマ更新のスケジュール
スケジュールされたスキーマ更新は、スキーマの正確性を長期にわたって維持するのに役立ちます。スケジュールされたスキーマ更新は、各名前空間をサンプルし、新しいスキーマを既存のスキーマとマージします。例、スケジュールされたスキーマ更新により、Atlas Data Federation はコレクションに追加された新しいフィールドを自動的に検出できます。
Atlasで、プロジェクトのフェデレーティッドデータベースインスタンスにGoします。
まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの Organizations メニューで選択します。
まだ表示されていない場合は、ナビゲーション バーの Projects メニューからプロジェクトを選択します。
サイドバーで、 Services見出しの下のData Federationをクリックします。
Data Federationページが表示されます。