

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Keyspaces でのユーザー定義型 (UDT)
<a name="udts"></a>

ユーザー定義型 (UDT) は、Amazon Keyspaces で 1 つの列を定義するために使用できるフィールドとデータ型のグループです。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)。

構文の詳細については、「[ユーザー定義タイプ (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) の形式の一意の識別子はありません。代わりに、UDT で特定のアクションを実行するアクセス許可を IAM プリンシパルに付与するには、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 名の例を示しています。最初の列は型を作成するときの名前の入力方法を示し、2 番目の列は 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 マネジメントコンソール、[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 Keyspaces でテーブルを作成する](getting-started.tables.md)。この表では、作成者が特定の書籍に対して受け取るすべての報酬を保存します。ネストされた 2 つの 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 を使用する書籍報酬の 2 番目のタイプを作成します。ネストされた 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. このステップでは、新しいテーブルに 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)
   ```

   構文の詳細については、「[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 マネジメントコンソール、[https://console.aws.amazon.com/keyspaces/home](https://console.aws.amazon.com/keyspaces/home) で Amazon Keyspaces コンソールを開きます。

1. ナビゲーションペインで、**キースペース**を選択し、リストからキースペースを選択します。

1. **UDTs** タブを選択して、キースペース内のすべての UDTsのリストを確認します。

1. 1 つの UDT の詳細を確認するには、リストから **UDT** を選択します。

1. **スキーマ**タブで、スキーマを確認できます。**「Use in**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 マネジメントコンソール、[https://console.aws.amazon.com/keyspaces/home](https://console.aws.amazon.com/keyspaces/home) で Amazon Keyspaces コンソールを開きます。

1. ナビゲーションペインで、**キースペース**を選択し、リストからキースペースを選択します。

1. **UDTs**タブを選択します。

1. 削除する UDT を選択します。**「Use in**」で、削除するタイプがテーブルやその他の UDT で現在使用されていないことを確認できます。

1. **概要**の上にある**「削除**」を選択します。

1. 表示されるダイアログ`Delete`に「UDT の削除」と入力し、**「UDT の削除**」を選択します。

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

**CQL でユーザー定義タイプ (UDT) を削除する**
+ タイプを削除するには、次のステートメントを使用できます。

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

  構文の詳細については、「[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"
   }
   ```

------