기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
JDBC자동 스키마 생성
Amazon DocumentDB는 문서 데이터베이스이므로 테이블과 스키마라는 개념이 없습니다. 하지만 Tableau와 같은 BI 도구에서는 연결하는 데이터베이스가 스키마를 제공할 것으로 예상합니다. 특히, JDBC 드라이버 연결에서 데이터베이스의 컬렉션에 대한 스키마를 가져와야 하는 경우 데이터베이스의 모든 컬렉션에 대해 폴링합니다. 드라이버는 해당 컬렉션에 대한 스키마의 캐시된 버전이 이미 존재하는지 확인합니다. 캐시된 버전이 없는 경우 문서 컬렉션을 샘플링하고 다음 동작에 따라 스키마를 만듭니다.
스키마 생성 제한
JDBCDocumentDB 드라이버는 식별자 길이를 128자로 제한합니다. 스키마 생성기는 생성된 식별자 (테이블 이름 및 열 이름) 의 길이를 줄여 해당 한도에 맞는지 확인할 수 있습니다.
스캔 방법 옵션
연결 문자열 또는 데이터 소스 옵션을 사용하여 샘플링 동작을 수정할 수 있습니다.
-
scanMethod= <option>
-
random - (기본값) - 샘플 문서가 무작위 순서로 반환됩니다.
-
idForward- 샘플 문서가 ID 순으로 반환됩니다.
-
idReverse- 샘플 문서는 id의 역순으로 반환됩니다.
-
모두 - 컬렉션의 모든 문서를 샘플링합니다.
-
-
scanLimit= <n>- 샘플링할 문서 수 값은 양의 정수여야 합니다. 기본값은 1000입니다. all로 설정된 경우 scanMethod이 옵션은 무시됩니다.
Amazon DocumentDB 데이터 형식
아마존 DocumentDB 서버는 다양한 MongoDB 데이터 유형을 지원합니다. 지원되는 데이터 유형 및 관련 JDBC 데이터 유형이 아래에 나열되어 있습니다.
MongoDB 데이터 형식 | DocumentDB에서 지원 | JDBC데이터 유형 |
---|---|---|
이진 데이터 | 예 | VARBINARY |
불 | 예 | BOOLEAN |
Double | 예 | DOUBLE |
32비트 정수 | 예 | INTEGER |
64비트 정수 | 예 | BIGINT |
String | 예 | VARCHAR |
ObjectId | 예 | VARCHAR |
날짜 | 예 | TIMESTAMP |
Null | 예 | VARCHAR |
정규식 | 예 | VARCHAR |
Timestamp | 예 | VARCHAR |
MinKey | 예 | VARCHAR |
MaxKey | 예 | VARCHAR |
객체 | 예 | 가상 테이블 |
배열 | 예 | 가상 테이블 |
Decimal128 | 아니요 | DECIMAL |
JavaScript | 아니요 | VARCHAR |
JavaScript (범위 포함) | 아니요 | VARCHAR |
정의되지 않음 | 아니요 | VARCHAR |
Symbol | 아니요 | VARCHAR |
DBPointer(4.0+) | 아니요 | VARCHAR |
스칼라 문서 필드 매핑
컬렉션에서 문서 샘플을 스캔할 때 JDBC 드라이버는 컬렉션의 샘플을 나타내는 스키마를 하나 이상 만듭니다. 일반적으로 문서의 스칼라 필드는 테이블 스키마의 열에 매핑됩니다. 예를 들어 team이라는 컬렉션과 단일 { "_id" : "112233", "name" :
"Alastair", "age": 25 }
문서에서는 다음과 같이 스키마에 매핑됩니다.
테이블 이름 | 열 이름 | 데이터 형식 | 키 |
---|---|---|---|
팀 | team id | VARCHAR | PK |
팀 | name | VARCHAR | |
team | 나이 | INTEGER |
데이터 유형 충돌 촉진
샘플링된 문서를 스캔할 때 필드의 데이터 유형이 문서마다 일치하지 않을 수 있습니다. 이 경우 JDBC 드라이버는 JDBC 데이터 유형을 샘플 문서의 모든 데이터 유형에 적합한 공통 데이터 유형으로 승격시킵니다.
예:
{ "_id" : "112233", "name" : "Alastair", "age" : 25 } { "_id" : "112244", "name" : "Benjamin", "age" : "32" }
첫 번째 문서에서는 age 필드의 유형이 32비트 정수이고 두 번째 문서에서는 문자열입니다. 여기서 JDBC 드라이버는 데이터 유형이 발견되면 두 JDBC 데이터 유형 중 하나를 VARCHAR 처리하도록 데이터 유형을 승격시킵니다.
테이블 이름 | 열 이름 | 데이터 형식 | 키 |
---|---|---|---|
팀 | team id | VARCHAR | PK |
팀 | name | VARCHAR | |
team | 나이 | VARCHAR |
스칼라-스칼라 충돌 프로모션
다음 다이어그램은 스칼라-스칼라 데이터 유형 충돌을 해결하는 방법을 보여줍니다.
스칼라-복소수 형식 충돌 승격
스칼라-스칼라 형식 충돌과 마찬가지로, 서로 다른 문서에 있는 동일한 필드에서도 복소수 (배열 및 객체) 와 스칼라 (정수, 부울 등) 간에 데이터 유형이 충돌할 수 있습니다. 이러한 모든 충돌은 해당 필드에 VARCHAR 대해 해결 (승격) 됩니다. 이 경우 배열과 객체 데이터가 JSON 표현으로 반환됩니다.
임베디드 어레이 - 문자열 필드 충돌 예제:
{ "_id":"112233", "name":"George Jackson", "subscriptions":[ "Vogue", "People", "USA Today" ] } { "_id":"112244", "name":"Joan Starr", "subscriptions":1 }
위 예제는 customer2 테이블의 스키마에 매핑됩니다.
테이블 이름 | 열 이름 | 데이터 형식 | 키 |
---|---|---|---|
고객 2 | customer2 id | VARCHAR | PK |
고객 2 | name | VARCHAR | |
고객 2 | 구독 | VARCHAR |
and the customer1_subscriptions 가상 테이블:
테이블 이름 | 열 이름 | 데이터 형식 | 키 |
---|---|---|---|
customer1_subscriptions | customer1 id | VARCHAR | PK/FK |
customer1_subscriptions | subscriptions_index_lvl0 | BIGINT | PK |
customer1_subscriptions | 값 | VARCHAR | |
customer_address | 구/군/시 | VARCHAR | |
customer_address | region | VARCHAR | |
customer_address | country | VARCHAR | |
customer_address | code | VARCHAR |
객체 및 배열 데이터 유형 처리
지금까지는 스칼라 데이터형이 매핑되는 방식만 설명했습니다. 객체 및 배열 데이터 유형은 (현재) 가상 테이블에 매핑되어 있습니다. JDBC드라이버는 문서의 개체 또는 배열 필드를 나타내는 가상 테이블을 만듭니다. 매핑된 가상 테이블의 이름은 원본 컬렉션의 이름 뒤에 밑줄 문자 (“_”) 로 구분된 필드 이름을 연결합니다.
기본 테이블의 기본 키 (“_id”) 는 새 가상 테이블에서 새 이름을 사용하며 연결된 기본 테이블에 외래 키로 제공됩니다.
내장된 배열 유형 필드의 경우 배열의 각 수준에서 배열에 대한 인덱스를 나타내는 인덱스 열이 생성됩니다.
내장된 객체 필드 예제
문서 내 개체 필드의 경우 JDBC 드라이버가 가상 테이블에 매핑을 만듭니다.
{ "Collection: customer", "_id":"112233", "name":"George Jackson", "address":{ "address1":"123 Avenue Way", "address2":"Apt. 5", "city":"Hollywood", "region":"California", "country":"USA", "code":"90210" } }
위의 예는 고객 테이블의 스키마에 매핑됩니다.
테이블 이름 | 열 이름 | 데이터 형식 | 키 |
---|---|---|---|
customer | customer id | VARCHAR | PK |
customer | name | VARCHAR |
및 the customer_address 가상 테이블:
테이블 이름 | 열 이름 | 데이터 형식 | 키 |
---|---|---|---|
customer_address | customer id | VARCHAR | PK/FK |
customer_address | address1 | VARCHAR | |
customer_address | address2 | VARCHAR | |
customer_address | 구/군/시 | VARCHAR | |
customer_address | region | VARCHAR | |
customer_address | country | VARCHAR | |
customer_address | code | VARCHAR |
임베디드 어레이 필드 예제
문서 내 배열 필드의 경우 JDBC 드라이버가 가상 테이블에 매핑도 생성합니다.
{ "Collection: customer1", "_id":"112233", "name":"George Jackson", "subscriptions":[ "Vogue", "People", "USA Today" ] }
위 예제는 customer1 테이블의 스키마에 매핑됩니다.
테이블 이름 | 열 이름 | 데이터 형식 | 키 |
---|---|---|---|
customer1 | customer1 id | VARCHAR | PK |
customer1 | name | VARCHAR |
and the customer1_subscriptions 가상 테이블:
테이블 이름 | 열 이름 | 데이터 형식 | 키 |
---|---|---|---|
customer1_subscriptions | customer1 id | VARCHAR | PK/FK |
customer1_subscriptions | subscriptions_index_lvl0 | BIGINT | PK |
customer1_subscriptions | 값 | VARCHAR | |
customer_address | 구/군/시 | VARCHAR | |
customer_address | region | VARCHAR | |
customer_address | country | VARCHAR | |
customer_address | code | VARCHAR |