

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Crea un tipo definito dall'utente (UDT) in Amazon Keyspaces
<a name="keyspaces-create-udt"></a>

Per creare un UDT in uno spazio chiave a regione singola, è possibile utilizzare l'`CREATE TYPE`istruzione in CQL, il `create-type` comando con o la console. AWS CLI

I nomi UDT devono contenere al massimo 48 caratteri, devono iniziare con un carattere alfabetico e possono contenere solo caratteri alfanumerici e trattini bassi. Amazon Keyspaces converte automaticamente i caratteri maiuscoli in caratteri minuscoli. 

In alternativa, puoi dichiarare un nome UDT tra virgolette. Quando si dichiara un nome UDT tra virgolette, Amazon Keyspaces mantiene le lettere maiuscole e consente l'uso di caratteri speciali.

Puoi anche utilizzare le virgolette come parte del nome quando crei l'UDT, ma devi evitare ogni carattere di virgolette doppie con un carattere di virgolette doppie aggiuntivo.

La tabella seguente mostra esempi di nomi UDT consentiti. La prima colonna mostra come inserire il nome quando si crea il tipo, la seconda colonna mostra come Amazon Keyspaces formatta il nome internamente. Amazon Keyspaces si aspetta il nome formattato per operazioni come `GetType`.


| Nome inserito | Nome formattato | Nota | 
| --- | --- | --- | 
|  MY\$1UDT  | my\$1udt | Senza virgolette, Amazon Keyspaces converte tutti i caratteri maiuscoli in minuscoli. | 
|  "MY\$1UDT"  | MY\$1UDT | Con le virgolette, Amazon Keyspaces rispetta i caratteri maiuscoli e rimuove le virgolette dal nome formattato. | 
|  "1234"  | 1234 | Con le virgolette, il nome può iniziare con un numero e Amazon Keyspaces rimuove le virgolette dal nome formattato. | 
|  "Special\$1Ch@r@cters<>\$1\$1"  | Special\$1Ch@r@cters<>\$1\$1 | Con le virgolette, il nome può contenere caratteri speciali e Amazon Keyspaces rimuove le virgolette dal nome formattato. | 
|  "nested""""""quotes"  | nested"""quotes | Amazon Keyspaces rimuove le virgolette esterne e le virgolette di escape dal nome formattato. | 

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

**Crea un tipo definito dall'utente (UDT) con la console Amazon Keyspaces**

1. [Accedi a e apri Console di gestione AWS la console Amazon Keyspaces a casahttps://console.aws.amazon.com/keyspaces/.](https://console.aws.amazon.com/keyspaces/home)

1. Nel riquadro di navigazione, scegli **Keyspaces**, quindi scegli uno spazio chiave dall'elenco.

1. Scegliere la scheda **UDTs**.

1. **Scegli Crea UDT**

1. In **Dettagli UDT**, inserisci il nome dell'UDT. Nei **campi UDT** si definisce lo schema dell'UDT.

1. Per finire, scegli **Crea** UDT.

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

**Crea un tipo definito dall'utente (UDT) con CQL**

In questo esempio creiamo una nuova versione della tabella dei premi dei libri utilizzata in. [Crea una tabella in Amazon Keyspaces](getting-started.tables.md) In questa tabella, memorizziamo tutti i premi che un autore riceve per un determinato libro. Ne creiamo due UDTs che sono annidati e contengono informazioni sul libro che ha ricevuto un premio. 

1. Crea uno spazio chiave con il nome. `catalog` 

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

1. Crea il primo tipo. Questo tipo memorizza i codici *BISAC*, che vengono utilizzati per definire il genere dei libri. Un codice BISAC è composto da un codice alfanumerico e da un massimo di quattro aree tematiche.

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

1. Crea un secondo tipo per i premi letterari che utilizzi il primo UDT. L'UDT annidato deve essere congelato.

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

1. Crea una tabella con una colonna per il nome dell'autore e utilizza un tipo di elenco per i premi del libro. Nota che l'UDT utilizzato nell'elenco deve essere congelato.

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

1. In questo passaggio inseriamo una riga di dati nella nuova tabella.

   ```
   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. Nell'ultimo passaggio leggiamo i dati della tabella.

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

   L'output del comando dovrebbe essere simile a questo.

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

   Per ulteriori informazioni sulla sintassi CQL, vedere. [CREATE TYPE](cql.ddl.type.md#cql.ddl.type.create)

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

**Creare un tipo definito dall'utente (UDT) con AWS CLI**

1. Per creare un tipo è possibile utilizzare la seguente sintassi.

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

1. L'output di quel comando è simile a quello di questo esempio. Nota che `typeName` restituisce il nome formattato dell'UDT.

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

------