

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon Keyspaces에서 사용자 정의 유형(UDT) 생성
<a name="keyspaces-create-udt"></a>

단일 리전 키스페이스에서 UDT를 생성하려면 CQL의 `CREATE TYPE` 문, `create-type` 명령을 AWS CLI또는 콘솔과 함께 사용할 수 있습니다.

UDT 이름은 48자 이하여야 하고 영문자로 시작해야 하며 영숫자 문자와 밑줄만 포함할 수 있습니다. Amazon Keyspaces는 대문자를 소문자로 자동 변환합니다.

또는 큰따옴표로 UDT 이름을 선언할 수 있습니다. 큰따옴표 안에 UDT 이름을 선언할 때 Amazon Keyspaces는 대소문자를 유지하고 특수 문자를 허용합니다.

UDT를 생성할 때 이름의 일부로 큰따옴표를 사용할 수도 있지만 각 큰따옴표 문자를 또 다른 큰따옴표로 이스케이프 처리해야 합니다.

다음 표에는 허용되는 UDT 이름의 예가 나와 있습니다. 첫 번째 열은 유형을 생성할 때 이름을 입력하는 방법을 보여주고, 두 번째 열은 Amazon Keyspaces가 내부적으로 이름의 형식을 지정하는 방법을 보여줍니다. Amazon Keyspaces는 `GetType`과 같은 작업에 대해 형식이 지정된 이름을 필요로 합니다.


| 입력한 이름 | 형식이 지정된 이름 | 참고 | 
| --- | --- | --- | 
|  MY\$1UDT  | my\$1udt | 큰따옴표가 없는 경우 Amazon Keyspaces는 모든 대문자를 소문자로 변환합니다. | 
|  "MY\$1UDT"  | MY\$1UDT | 큰따옴표가 있는 경우 Amazon Keyspaces는 대문자를 유지하며 형식이 지정된 이름에서 큰따옴표를 제거합니다. | 
|  "1234"  | 1234 | 큰따옴표를 사용하는 경우 이름을 숫자로 시작할 수 있으며 Amazon Keyspaces는 형식이 지정된 이름에서 큰따옴표를 제거합니다. | 
|  "Special\$1Ch@r@cters<>\$1\$1"  | Special\$1Ch@r@cters<>\$1\$1 | 큰따옴표를 사용하는 경우 이름에 특수 문자를 포함할 수 있으며 Amazon Keyspaces는 형식이 지정된 이름에서 큰따옴표를 제거합니다. | 
|  "nested""""""quotes"  | nested"""quotes | Amazon Keyspaces는 형식이 지정된 이름에서 외부 큰 따옴표와 이스케이프 큰 따옴표를 제거합니다. | 

------
#### [ Console ]

**Amazon Keyspaces 콘솔을 사용하여 사용자 정의 유형(UDT) 생성**

1. 에 로그인 AWS Management Console하고 [https://console.aws.amazon.com/keyspaces/home](https://console.aws.amazon.com/keyspaces/home) Amazon Keyspaces 콘솔을 엽니다.

1. 탐색 창의 **키스페이스를** 선택한 다음 목록에서 키스페이스를 선택합니다.

1. **UDTs** 탭을 선택합니다.

1. **UDT 생성을** 선택합니다.

1. **UDT 세부 정보**에서 UDT의 이름을 입력합니다. **UDT 필드에서** UDT의 스키마를 정의합니다.

1. 완료하려면 **UDT 생성을** 선택합니다.

------
#### [ Cassandra Query Language (CQL) ]

**CQL을 사용하여 사용자 정의 유형(UDT) 생성**

이 예제에서는에 사용된 책 보상 테이블의 새 버전을 생성합니다[Amazon Keyspace에서 테이블 생성](getting-started.tables.md). 이 표에는 작성자가 주어진 책에 대해 받는 모든 보상이 저장됩니다. 중첩되고 상을 받은 책에 대한 정보가 포함된 두 개의 UDTs를 생성합니다.

1. 이름이 인 키스페이스를 생성합니다`catalog`.

   ```
   CREATE KEYSPACE catalog WITH REPLICATION = {'class': 'SingleRegionStrategy'};
   ```

1. 첫 번째 유형을 생성합니다. 이 유형은 책의 장르를 정의하는 데 사용되는 *BISAC* 코드를 저장합니다. BISAC 코드는 영숫자 코드와 최대 4개의 주제 영역으로 구성됩니다.

   ```
   CREATE TYPE catalog.bisac (
       bisac_code text,
       subject1 text,
       subject2 text,
       subject3 text,
       subject4 text
   );
   ```

1. 첫 번째 UDT를 사용하는 책 보상에 대한 두 번째 유형을 생성합니다. 중첩된 UDT를 고정해야 합니다.

   ```
   CREATE TYPE catalog.book (
       award_title text,
       book_title text,
       publication_date date,
       page_count int,
       ISBN text,
       genre FROZEN <bisac> 
   );
   ```

1. 작성자 이름에 대한 열이 있는 테이블을 생성하고 책 보상에 목록 유형을 사용합니다. 목록에 사용된 UDT는 고정되어야 합니다.

   ```
   CREATE TABLE catalog.authors (
       author_name text PRIMARY KEY,
       awards list <FROZEN <book>>
   );
   ```

1. 이 단계에서는 데이터 행 하나를 새 테이블에 삽입합니다.

   ```
   CONSISTENCY LOCAL_QUORUM;
   ```

   ```
   INSERT INTO catalog.authors (author_name, awards) VALUES (
   'John Stiles' , 
   [{
         award_title: 'Wolf',
         book_title: 'Yesterday',
         publication_date: '2020-10-10',
         page_count: 345,
         ISBN: '026204630X',
         genre: { bisac_code:'FIC014090', subject1: 'FICTION', subject2: 'Historical', subject3: '20th Century', subject4: 'Post-World War II'}
         },
         {award_title: 'Richard Roe',
         book_title: 'Who ate the cake?',
         publication_date: '2019-05-13',
         page_count: 193,
         ISBN: '9780262046305',
         genre: { bisac_code:'FIC022130', subject1: 'FICTION', subject2: 'Mystery & Detective', subject3: 'Cozy', subject4: 'Culinary'}
         }]
   );
   ```

1. 마지막 단계에서는 테이블에서 데이터를 읽습니다.

   ```
   SELECT * FROM catalog.authors;
   ```

   명령의 출력은 다음과 같아야 합니다.

   ```
    author_name | awards
   -------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    John Stiles | [{award_title: 'Wolf', book_title: 'Yesterday', publication_date: 2020-10-10, page_count: 345, isbn: '026204630X', genre: {bisac_code: 'FIC014090', subject1: 'FICTION', subject2: 'Historical', subject3: '20th Century', subject4: 'Post-World War II'}}, {award_title: 'Richard Roe', book_title: 'Who ate the cake?', publication_date: 2019-05-13, page_count: 193, isbn: '9780262046305', genre: {bisac_code: 'FIC022130', subject1: 'FICTION', subject2: 'Mystery & Detective', subject3: 'Cozy', subject4: 'Culinary'}}]
   
   (1 rows)
   ```

   CQL 구문에 대한 자세한 내용은 [CREATE TYPE](cql.ddl.type.md#cql.ddl.type.create) 섹션을 참조하세요.

------
#### [ CLI ]

**를 사용하여 사용자 정의 유형(UDT) 생성 AWS CLI**

1. 유형을 생성하려면 다음 구문을 사용할 수 있습니다.

   ```
   aws keyspaces create-type
   --keyspace-name 'my_keyspace'
   --type-name 'my_udt'
   --field-definitions
       '[
           {"name" : "field1", "type" : "int"},
           {"name" : "field2", "type" : "text"}
       ]'
   ```

1. 해당 명령의 출력은이 예제와 비슷합니다. 는 UDT의 형식이 지정된 이름을 `typeName` 반환합니다.

   ```
   {
       "keyspaceArn": "arn:aws:cassandra:us-east-1:111122223333:/keyspace/my_keyspace/",
       "typeName": "my_udt"
   }
   ```

------