

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

# User-defined types (UDTs) in Amazon Keyspaces
<a name="udts"></a>

사용자 정의 유형(UDT)은 Amazon Keyspaces에서 단일 열을 정의하는 데 사용할 수 있는 필드 및 데이터 유형의 그룹입니다. UDTs에 유효한 데이터 형식은 모두 동일한 키스페이스에서 이미 생성한 컬렉션 및 기타 UDTs를 포함하여 지원되는 Cassandra 데이터 형식입니다. 지원되는 Cassandra 데이터 형식에 대한 자세한 내용은 섹션을 참조하세요[Cassandra 데이터 유형 지원](cassandra-apis.md#cassandra-data-type).

Amazon Keyspaces에서 사용자 정의 유형(UDTs)을 사용하여 보다 효율적인 방식으로 데이터를 구성할 수 있습니다. 예를 들어 중첩된 컬렉션으로 UDTs를 생성하여 애플리케이션에서 더 복잡한 데이터 모델링을 구현할 수 있습니다. 고정 키워드를 사용하여 UDTs.

UDTs는 키스페이스에 바인딩되며 동일한 키스페이스의 모든 테이블 및 UDTs에 사용할 수 있습니다. 단일 리전 및 다중 리전 키스페이스에서 UDTs를 생성할 수 있습니다.

새 테이블을 생성하거나 기존 테이블을 변경하고 UDT를 사용하는 새 열을 추가할 수 있습니다. 중첩된 UDT를 사용하여 UDT를 생성하려면 중첩된 UDT를 고정해야 합니다.

키스페이스당 지원되는 UDTs 수, 지원되는 중첩 수준, UDTs와 관련된 기타 기본값 및 할당량을 검토하려면 섹션을 참조하세요[Amazon Keyspaces의 사용자 정의 유형(UDTs)에 대한 할당량 및 기본값](quotas.md#quotas-udts).

인코딩된 UDTs[데이터 유형에 따라 인코딩된 데이터 값 크기 추정](calculating-row-size.md#calculating-row-size-data-types).

CQL 구문에 대한 자세한 내용은 [사용자 정의 유형(UDTs)](cql.ddl.type.md) 섹션을 참조하세요.

UDTs[사용자 정의 유형(UDTs 있는 테이블의 PITR 복원](PointInTimeRecovery_HowItWorks.md#howitworks_backup_udt).

**Topics**
+ [권한 구성](configure-udt-permissions.md)
+ [UDT 생성](keyspaces-create-udt.md)
+ [UDTs 보기](keyspaces-view-udt.md)
+ [UDT 삭제](keyspaces-delete-udt.md)

# Amazon Keyspaces에서 사용자 정의 유형(UDTs)으로 작업하도록 권한 구성
<a name="configure-udt-permissions"></a>

테이블과 마찬가지로 UDTs 특정 키스페이스에 바인딩됩니다. 그러나 테이블과 달리 UDTs에 대한 권한을 직접 정의할 수는 없습니다. UDTs는의 리소스로 간주되지 AWS 않으며 Amazon 리소스 이름(ARN) 형식의 고유 식별자가 없습니다. 대신 IAM 보안 주체에게 UDT에서 특정 작업을 수행할 수 있는 권한을 부여하려면 UDT가 바인딩되는 키스페이스에 대한 권한을 정의해야 합니다. 다중 리전 키스페이스에서 UDTs를 사용하려면 추가 권한이 필요합니다.

UDTs를 생성, 보기 또는 삭제하려면 IAM 사용자 또는 역할과 같은 보안 주체가 UDT가 바인딩된 키스페이스에서 동일한 작업을 수행하는 데 필요한 것과 동일한 권한이 필요합니다.

에 대한 자세한 내용은 단원을 AWS Identity and Access Management참조하십시오[AWS Identity and Access Management Amazon Keyspaces용](security-iam.md).

## UDT를 생성할 수 있는 권한
<a name="udt-permissions-create"></a>

단일 리전 키스페이스에서 UDT를 생성하려면 보안 주체에게 키스페이스에 대한 `Create` 권한이 필요합니다.

다음 IAM 정책은 이에 대한 예입니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "cassandra:Create",
            "Resource": [
                "arn:aws:cassandra:us-east-1:111122223333:/keyspace/my_keyspace/"
            ]
        }
    ]
}
```

다중 리전 키스페이스에서 UDT를 생성하려면 보안 주체에게 `Create` 권한 외에도 지정된 키스페이스에 대한 작업에 `CreateMultiRegionResource` 대한 권한도 필요합니다.

다음 IAM 정책은 이에 대한 예입니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action":  [ "cassandra:Create", "cassandra:CreateMultiRegionResource" ],
            "Resource": [
                "arn:aws:cassandra:us-east-1:111122223333:/keyspace/my_keyspace/"
            ]
        }
    ]
}
```

## UDT를 볼 수 있는 권한
<a name="udt-permissions-view"></a>

단일 리전 키스페이스에서 UDTs를 보거나 나열하려면 보안 주체가 시스템 키스페이스에 대한 읽기 권한이 필요합니다. 자세한 내용은 [`system_schema_mcs`](working-with-keyspaces.md#keyspace_system_schema_mcs) 단원을 참조하십시오.

다음 IAM 정책은 이에 대한 예입니다.

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":"cassandra:Select",
         "Resource":[
             "arn:aws:cassandra:us-east-1:111122223333:/keyspace/system*"
         ]
      }
   ]
}
```

다중 리전 키스페이스의 UDTs를 보거나 나열하려면 보안 주체에게 작업 `SELECT` 및 시스템 키스페이스`SelectMultiRegionResource`에 대한 권한이 필요합니다. 자세한 내용은 [`system_multiregion_info`](working-with-keyspaces.md#keyspace_system_multiregion_info) 단원을 참조하십시오.

다음 IAM 정책은 이에 대한 예입니다.

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action": ["cassandra:Select", "cassandra:SelectMultiRegionResource"],
         "Resource":[
             "arn:aws:cassandra:us-east-1:111122223333:/keyspace/system*"
         ]
      }
   ]
}
```

## UDT를 삭제할 수 있는 권한
<a name="udt-permissions-drop"></a>

단일 리전 키스페이스에서 UDT를 삭제하려면 보안 주체에게 지정된 키스페이스에 대한 `Drop` 작업에 대한 권한이 필요합니다.

다음 IAM 정책은 이에 대한 예입니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "cassandra:Drop",
            "Resource": [
                "arn:aws:cassandra:us-east-1:111122223333:/keyspace/my_keyspace/"
            ]
        }
    ]
}
```

다중 리전 키스페이스에서 UDT를 삭제하려면 보안 주체에게 `Drop` 작업에 대한 권한과 지정된 키스페이스에 대한 `DropMultiRegionResource` 작업에 대한 권한이 필요합니다.

다음 IAM 정책은 이에 대한 예입니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action":  [ "cassandra:Drop", "cassandra:DropMultiRegionResource" ],
            "Resource": [
                "arn:aws:cassandra:us-east-1:111122223333:/keyspace/my_keyspace/"
            ]
        }
    ]
}
```

# 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"
   }
   ```

------

# Amazon Keyspaces에서 사용자 정의 유형(UDTs) 보기
<a name="keyspaces-view-udt"></a>

단일 리전 키스페이스의 모든 UDTs를 보거나 나열하려면 CQL`system_schema_mcs.types`의 문을 사용하여 시스템 키스페이스의 테이블을 쿼리하거나 AWS CLI또는 콘솔에서 `get-type` 및 `list-type` 명령을 사용할 수 있습니다.

어느 옵션이든 IAM 보안 주체는 시스템 키스페이스에 대한 읽기 권한이 필요합니다. 자세한 내용은 [Amazon Keyspaces에서 사용자 정의 유형(UDTs)으로 작업하도록 권한 구성](configure-udt-permissions.md) 단원을 참조하십시오.

------
#### [ 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** 탭을 선택하여 키스페이스의 모든 UDTs 목록을 검토합니다.

1. UDT 하나를 자세히 검토하려면 목록에서 **UDT**를 선택합니다.

1. **스키마** 탭에서 스키마를 검토할 수 있습니다. **에서 사용**됨 탭에서이 UDT가 테이블 또는 기타 UDTs. 테이블 또는 다른 UDTs에서 사용하지 않는 UDTs.

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

**CQL을 사용하여 단일 리전 키스페이스의 사용자 정의 유형(UDTs) 보기**

1. 지정된 키스페이스에서 사용할 수 있는 유형을 보려면 다음 문을 사용할 수 있습니다.

   ```
   SELECT type_name
   FROM system_schema_mcs.types
   WHERE keyspace_name = 'my_keyspace';
   ```

1. 특정 유형에 대한 세부 정보를 보려면 다음 문을 사용할 수 있습니다.

   ```
   SELECT 
       keyspace_name,
       type_name,
       field_names,
       field_types,
       max_nesting_depth,
       last_modified_timestamp,
       status,
       direct_referring_tables,
       direct_parent_types
   FROM system_schema_mcs.types
   WHERE keyspace_name = 'my_keyspace' AND type_name = 'my_udt';
   ```

1. 를 사용하여 계정에 있는 모든 UDTs를 나열할 수 있습니다`DESC TYPE`.

   ```
   DESC TYPES;
                               
    Keyspace my_keyspace
    ---------------------------
    my_udt1  my_udt2
                               
    Keyspace my_keyspace2
    ---------------------------
    my_udt1
   ```

1. 를 사용하여 현재 선택한 키스페이스의 모든 UDTs를 나열할 수 있습니다`DESC TYPE`.

   ```
   USE my_keyspace;
   my_keyspace DESC TYPES;
                               
   my_udt1  my_udt2
   ```

1. 다중 리전 키스페이스의 모든 UDTs를 나열하려면 `system_multiregion_info` 키스페이스`types`의 시스템 테이블을 쿼리하면 됩니다. 다음 쿼리는 이에 대한 예입니다.

   ```
   SELECT keyspace_name, type_name, region, status FROM system_multiregion_info.types WHERE keyspace_name = 'mykeyspace' AND table_name = 'mytable';
   ```

   이 명령의 출력은 이와 비슷합니다.

   ```
   keyspace_name     | table_name         | region                 | status
   mykeyspace        | mytable            | us-east-1              | ACTIVE
   mykeyspace        | mytable            | ap-southeast-1         | ACTIVE
   mykeyspace        | mytable            | eu-west-1              | ACTIVE
   ```

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

**를 사용하여 사용자 정의 유형(UDTs) 보기 AWS CLI**

1. 키스페이스에서 사용 가능한 유형을 나열하려면 `list-types` 명령을 사용할 수 있습니다.

   ```
   aws keyspaces list-types
   --keyspace-name 'my_keyspace'
   ```

   해당 명령의 출력은이 예제와 비슷합니다.

   ```
   {
       "types": [
           "my_udt",
           "parent_udt"
       ]
   }
   ```

1. 지정된 유형에 대한 세부 정보를 보려면 `get-type` 명령을 사용할 수 있습니다.

   ```
   aws keyspaces get-type
   --type-name 'my_udt'
   --keyspace-name 'my_keyspace'
   ```

   이 명령의 출력은이 예제와 비슷합니다.

   ```
   {
       "keyspaceName": "my_keyspace",
       "typeName": "my_udt",
       "fieldDefinitions": [
           {
               "name": "a",
               "type": "int"
           },
           {
               "name": "b",
               "type": "text"
           }
       ],
       "lastModifiedTimestamp": 1721328225776,
       "maxNestingDepth": 3
       "status": "ACTIVE",
       "directReferringTables": [],
       "directParentTypes": [
           "parent_udt"
       ],
       "keyspaceArn": "arn:aws:cassandra:us-east-1:111122223333:/keyspace/my_keyspace/"
   }
   ```

------

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

키스페이스에서 UDT를 삭제하려면 CQL의 `DROP TYPE` 문, `delete-type` 명령을 AWS CLI또는 콘솔과 함께 사용할 수 있습니다.

------
#### [ 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를 선택합니다. **에서 사용**됨에서 삭제하려는 유형이 현재 테이블 또는 기타 UDT에서 사용되지 않는지 확인할 수 있습니다.

1. **요약** 위에서 **삭제**를 선택합니다.

1. 표시되는 대화 `Delete` 상자에를 입력하고 **UDT 삭제**를 선택합니다.

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

**CQL을 사용하여 사용자 정의 유형(UDT) 삭제**
+ 유형을 삭제하려면 다음 문을 사용할 수 있습니다.

  ```
  DROP TYPE my_keyspace.my_udt;
  ```

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

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

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

1. 유형을 삭제하려면 다음 명령을 사용할 수 있습니다.

   ```
   aws keyspaces delete-type
   --keyspace-name 'my_keyspace'
   --type-name 'my_udt'
   ```

1. 명령의 출력은이 예제와 비슷합니다.

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

------