

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Crear un tipo definido por el usuario (UDT) en Amazon Keyspaces
<a name="keyspaces-create-udt"></a>

Para crear una UDT en un espacio de claves de una sola región, puede utilizar la `CREATE TYPE` sentencia de CQL, el `create-type` comando de la consola o la AWS CLI consola.

Los nombres de UDT deben contener 48 caracteres o menos, deben empezar por un carácter alfabético y solo pueden contener caracteres alfanuméricos y guiones bajos. Amazon Keyspaces convierte automáticamente los caracteres en mayúsculas en minúsculas. 

Como alternativa, puede declarar un nombre de UDT entre comillas dobles. Al declarar un nombre de UDT entre comillas dobles, Amazon Keyspaces conserva las mayúsculas y admite caracteres especiales.

También puede usar comillas dobles como parte del nombre al crear el UDT, pero debe eliminar cada carácter de comillas dobles con un carácter adicional de comillas dobles.

En la tabla siguiente se muestran ejemplos de nombres de UDT permitidos. La primera columna muestra cómo ingresar el nombre al crear el tipo y la segunda columna muestra cómo Amazon Keyspaces formatea el nombre internamente. Amazon Keyspaces espera el nombre formateado para operaciones como `GetType`.


| Nombre ingresado | Nombre formateado | Nota | 
| --- | --- | --- | 
|  MY\$1UDT  | my\$1udt | Sin comillas dobles, Amazon Keyspaces convierte todos los caracteres en mayúsculas en minúsculas. | 
|  "MY\$1UDT"  | MY\$1UDT | Con las comillas dobles, Amazon Keyspaces respeta los caracteres en mayúscula y elimina las comillas dobles del nombre formateado. | 
|  "1234"  | 1234 | Con comillas dobles, el nombre puede empezar por un número y Amazon Keyspaces elimina las comillas dobles del nombre formateado. | 
|  "Special\$1Ch@r@cters<>\$1\$1"  | Special\$1Ch@r@cters<>\$1\$1 | Con comillas dobles, el nombre puede contener caracteres especiales y Amazon Keyspaces elimina las comillas dobles del nombre formateado. | 
|  "nested""""""quotes"  | nested"""quotes | Amazon Keyspaces elimina las comillas dobles exteriores y las comillas dobles de escape del nombre formateado. | 

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

**Cree un tipo definido por el usuario (UDT) con la consola Amazon Keyspaces**

1. [Inicia sesión en la Consola de administración de AWS consola de Amazon Keyspaces y ábrela desde casahttps://console.aws.amazon.com/keyspaces/.](https://console.aws.amazon.com/keyspaces/home)

1. En el panel de navegación, elija **Keyspaces** y, a continuación, elija un espacio clave de la lista.

1. Elija la pestaña **UDTs**.

1. **Elija Crear UDT**

1. En Detalles de **la UDT, introduzca** el nombre de la UDT. En los **campos de la UDT**, se define el esquema de la UDT.

1. Para terminar, elija **Crear** UDT.

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

**Cree un tipo definido por el usuario (UDT) con CQL**

En este ejemplo, creamos una nueva versión de la tabla de premios de libros utilizada en. [Creación de un espacio de claves en Amazon Keyspaces](getting-started.tables.md) En esta tabla, almacenamos todos los premios que recibe un autor por un libro determinado. Creamos dos UDTs que están anidados y contienen información sobre el libro que recibió un premio. 

1. Crea un espacio de claves con el nombre. `catalog` 

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

1. Cree el primer tipo. Este tipo almacena los códigos *BISAC*, que se utilizan para definir el género de los libros. Un código BISAC consiste en un código alfanumérico y hasta cuatro áreas temáticas.

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

1. Cree un segundo tipo para los premios de libros que utilice el primer UDT. La UDT anidada debe congelarse.

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

1. Cree una tabla con una columna para el nombre del autor y utilice un tipo de lista para los premios de libros. Tenga en cuenta que la UDT utilizada en la lista debe estar inmovilizada.

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

1. En este paso, insertamos una fila de datos en la nueva tabla.

   ```
   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. En el último paso, leemos los datos de la tabla.

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

   El resultado del comando debería tener este aspecto.

   ```
    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 obtener más información sobre la sintaxis CQL, consulte [CREATE TYPE](cql.ddl.type.md#cql.ddl.type.create).

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

**Cree un tipo definido por el usuario (UDT) con el AWS CLI**

1. Para crear un tipo, puede utilizar la siguiente sintaxis.

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

1. El resultado de ese comando es similar al de este ejemplo. Tenga en cuenta que `typeName` devuelve el nombre formateado de la UDT.

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

------