

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Crie um tipo definido pelo usuário (UDT) no Amazon Keyspaces
<a name="keyspaces-create-udt"></a>

Para criar um UDT em um keyspace de região única, você pode usar a `CREATE TYPE` instrução na CQL, o `create-type` comando com o ou o console AWS CLI.

Os nomes de UDTs devem conter 48 caracteres ou menos, devem começar com um caractere alfabético e só podem conter caracteres alfanuméricos e sublinhados. O Amazon Keyspaces converte automaticamente caracteres maiúsculos em minúsculos. 

Também é possível declarar um nome de UDT entre aspas duplas. Quando um nome de UDT é declarado entre aspas duplas, o Amazon Keyspaces preserva maiúsculas e permite caracteres especiais.

Você também pode usar aspas duplas como parte do nome ao criar o UDT, mas deve realiza o escape de cada caractere de aspas duplas com um caractere adicional de aspas duplas.

A tabela a seguir mostra exemplos de nomes de UDT permitidos. A primeira coluna mostra como inserir o nome quando se cria o tipo, e a segunda coluna mostra como o Amazon Keyspaces formata o nome internamente. O Amazon Keyspaces espera o nome formatado para operações, como `GetType`.


| Nome inserido | Nome formatado | Observação | 
| --- | --- | --- | 
|  MY\$1UDT  | my\$1udt | Sem aspas duplas, o Amazon Keyspaces converte todos os caracteres maiúsculos em minúsculos. | 
|  "MY\$1UDT"  | MY\$1UDT | Com aspas duplas, o Amazon Keyspaces respeita os caracteres maiúsculos e remove as aspas duplas do nome formatado. | 
|  "1234"  | 1234 | Com aspas duplas, o nome pode começar com um número, e o Amazon Keyspaces remove as aspas duplas do nome formatado. | 
|  "Special\$1Ch@r@cters<>\$1\$1"  | Special\$1Ch@r@cters<>\$1\$1 | Com aspas duplas, o nome pode conter caracteres especiais, e o Amazon Keyspaces remove as aspas duplas do nome formatado. | 
|  "nested""""""quotes"  | nested"""quotes | O Amazon Keyspaces remove as aspas duplas externas e as aspas duplas de escape do nome formatado. | 

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

**Crie um tipo definido pelo usuário (UDT) com o console Amazon Keyspaces**

1. [Faça login no Console de gerenciamento da AWS e abra o console do Amazon Keyspaces em casahttps://console.aws.amazon.com/keyspaces/.](https://console.aws.amazon.com/keyspaces/home)

1. No painel de navegação, escolha **Keyspaces** e, em seguida, escolha um keyspace na lista.

1. Escolha a guia **UDTs**.

1. Escolha **Criar UDT**

1. Em **Detalhes do UDT**, insira o nome do UDT. Em **campos do UDT**, você define o esquema do UDT.

1. Para finalizar, escolha **Criar UDT.**

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

**Crie um tipo definido pelo usuário (UDT) com CQL**

Neste exemplo, criamos uma nova versão da tabela de prêmios de livros usada em[Crie uma tabela no Amazon Keyspaces.](getting-started.tables.md). Nesta tabela, armazenamos todos os prêmios que um autor recebe por um determinado livro. Criamos dois UDTs que estão aninhados e contêm informações sobre o livro que recebeu um prêmio. 

1. Crie um keyspace com o nome`catalog`. 

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

1. Crie o primeiro tipo. Esse tipo armazena códigos *BISAC*, que são usados para definir o gênero dos livros. Um código BISAC consiste em um código alfanumérico e até quatro áreas temáticas.

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

1. Crie um segundo tipo para prêmios de livros que use o primeiro UDT. O UDT aninhado deve ser congelado.

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

1. Crie uma tabela com uma coluna para o nome do autor e use um tipo de lista para os prêmios do livro. Observe que o UDT usado na lista precisa ser congelado.

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

1. Nesta etapa, inserimos uma linha de dados na nova tabela.

   ```
   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. Na última etapa, lemos os dados da tabela.

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

   A saída do comando deve ter essa aparência.

   ```
    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)
   ```

   Para obter mais informações sobre sintaxe de CQL, consulte [CREATE TYPE](cql.ddl.type.md#cql.ddl.type.create).

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

**Crie um tipo definido pelo usuário (UDT) com o AWS CLI**

1. Para criar um tipo, você pode usar a seguinte sintaxe.

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

1. A saída desse comando é semelhante a este exemplo. Observe que `typeName` retorna o nome formatado do UDT.

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

------