

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

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

------