Atlas Data Federation에서는 sqlGenerateSchema, sqlGetSchema, sqlSetSchema 세 개의 명령을 통해 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 Interface 스키마를 생성합니다. 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 | 유형 | 설명 |
|---|---|---|
| 문자열 | 데이터베이스의 이름입니다. |
| 객체 배열 | 각 컬렉션 또는 뷰의 이름 및 생성된 스키마입니다. |
| 문자열 | 컬렉션 또는 뷰의 이름입니다. |
| 문서 | 컬렉션 또는 뷰의 스키마입니다. |
| integer | 스키마의 형식 버전입니다. 값은 항상 1입니다. |
| 문서 | 컬렉션 또는 뷰의 JSON schema입니다. JSON schema에는 다음 필드가 포함될 수 있습니다.
이러한 필드에 대해 자세히 알아보려면 JSON Schema 키워드를 참조하세요. |
setSchemas 옵션을 사용하여 컬렉션 또는 뷰에 대한 스키마를 설정하는 경우 sqlGetSchema 명령을 실행하여 명령이 성공했는지 확인할 수 있습니다. sqlGetSchema 명령 metadata.description 필드에는 다음 값이 포함되어 있습니다.
"set using sqlGenerateSchema with setSchemas = true"
오류
명령이 실패하면 다음과 같은 오류가 반환됩니다.
"failedNamespaces": [ { "namespace" : "<db.ns>", "error" : "no documents found in sample namespace" } ]
지정된 네임스페이스가 저장 구성에 없거나 비어 있는 경우 Atlas Data Federation은 이 오류를 반환합니다. Atlas Data Federation은 주어진 네임스페이스에 대한 스키마를 설정할 수 없는 경우에도 이 오류를 반환합니다.
sqlGetSchema
sqlGetSchema 명령은 지정된 컬렉션이나 뷰에 저장된 SQL 스키마를 조회합니다.
구문
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 = truesetSchema옵션이true로 설정되었기 때문에 sqlGenerateSchema 명령으로 스키마가 설정되었음을 나타냅니다.
set using sqlSetSchemasqlSetSchema 명령을 사용하여 스키마가 설정되었음을 나타냅니다.
schema 문서에 다음과 같은 필드가 있습니다:
Parameter | 유형 | 설명 |
|---|---|---|
| integer | 스키마의 형식 버전입니다. 값은 항상 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 라는 이름의 컬렉션에 대한 스키마를 생성합니다. 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에서 프로젝트의 연합 데이터베이스 인스턴스로 이동합니다.
아직 표시되지 않은 경우 탐색 표시줄의 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 페이지가 표시됩니다.