

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à.

# CREATE TABLE
<a name="create-table"></a>

Crea una tabella con il nome e i parametri specificati dall'utente. 

**Nota**  
Questa pagina contiene informazioni di riferimento riepilogative. Per ulteriori informazioni sulla creazione delle tabelle in Athena e un esempio di istruzione `CREATE TABLE`, consulta la sezione [Crea tabelle in Athena](creating-tables.md). Per vedere esempio di creazione di un database o di una tabella e di esecuzione di una query `SELECT` sulla tabella di Athena, consulta [Nozioni di base](getting-started.md).

## Riepilogo
<a name="synopsis"></a>

```
CREATE EXTERNAL TABLE [IF NOT EXISTS]
 [db_name.]table_name [(col_name data_type [COMMENT col_comment] [, ...] )]
 [COMMENT table_comment]
 [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
 [CLUSTERED BY (col_name, col_name, ...) INTO num_buckets BUCKETS]
 [ROW FORMAT row_format]
 [STORED AS file_format] 
 [WITH SERDEPROPERTIES (...)]
 [LOCATION 's3://amzn-s3-demo-bucket/[folder]/']
 [TBLPROPERTIES ( ['has_encrypted_data'='true | false',] ['encryption_option'='SSE_S3 | SSE_KMS | CSE_KMS',] ['kms_key'='aws_kms_key_arn',] ['classification'='aws_glue_classification',] property_name=property_value [, ...] ) ]
```

## Parameters
<a name="parameters"></a>

**EXTERNAL**  
Specifica che la tabella si basa su un file di dati sottostante esistente in Amazon S3 nella posizione specificata dall'utente in `LOCATION`. Tranne che durante la creazione di tabelle [Iceberg](querying-iceberg-creating-tables.md), utilizza sempre la parola chiave `EXTERNAL`. Se utilizzi `CREATE TABLE` senza la parola chiave `EXTERNAL` per le tabelle non Iceberg, Athena genera un errore. Quando crei una tabella esterna, i dati a cui fai riferimento devono rispettare il formato predefinito o il formato specificato con le clausole `ROW FORMAT`, `STORED AS` e `WITH SERDEPROPERTIES`.

**[IF NOT EXISTS]**  
Questo parametro verifica se esiste già una tabella con lo stesso nome. In caso affermativo, il parametro restituisce `TRUE` e Amazon Athena annulla l'azione `CREATE TABLE`. Poiché l'annullamento avviene prima che Athena richiami il catalogo dati, non emette alcun evento. AWS CloudTrail 

**[db\$1name.]table\$1name**  
Specifica un nome per la tabella da creare. Il parametro facoltativo `db_name` specifica il database in cui è presente la tabella. Se omesso, sarà utilizzato il database corrente. Se il nome della tabella include numeri, racchiudi `table_name` tra virgolette, ad esempio `"table123"`. Se `table_name` inizia con un trattino basso, utilizza l'apice inverso, ad esempio ``_mytable``. I caratteri speciali (a eccezione del trattino basso) non sono supportati.  
I nomi di tabella di Athena fanno distinzione tra maiuscole e minuscole; se però utilizzi Apache Spark, dovrai specificare nomi di tabella in minuscolo. Per le restrizioni sui nomi delle tabelle in Athena, vedere. [Nomi di tabelle, database e colonne](tables-databases-columns-names.md)

**[ ( col\$1name data\$1type [COMMENT col\$1comment] [, ...] ) ]**  
Specifica il nome di ogni colonna da creare, insieme al tipo di dati della colonna. Nei nomi di colonna non sono ammessi caratteri speciali diversi dal trattino basso `(_)`. Se `col_name` inizia con un trattino basso, racchiudi il nome della colonna tra apici inversi, ad esempio ``_mycolumn``. Per le restrizioni sui nomi delle colonne in Athena, vedere. [Nomi di tabelle, database e colonne](tables-databases-columns-names.md)  
Il valore `data_type` può essere qualunque tra i seguenti:  
+ `boolean`: i valori validi sono `true` e `false`.
+ `tinyint`: un numero intero firmato a 8 bit in formato a due complementi, con un valore minimo pari a -2^7 e un valore massimo pari a 2^7-1.
+ `smallint`: un numero intero firmato a 16 bit in formato a due complementi, con un valore minimo pari a -2^15 e un valore massimo pari a 2^15-1.
+ `int`: nelle query DDL (Data Definition Language) come`CREATE TABLE`, utilizzare la parola chiave `int` per rappresentare un numero intero. In tutte le altre query, utilizzare la parola chiave `integer`, dove `integer` è rappresentato come valore firmato a 32 bit in formato a due complementi, con un valore minimo pari a -2^31 e un valore massimo pari a 2^31-1. Nel driver JDBC viene restituito `integer` per garantire la compatibilità con le applicazioni di analisi aziendale.
+ `bigint`: un numero intero firmato a 64 bit in formato a due complementi, con un valore minimo pari a -2^63 e un valore massimo pari a 2^63-1.
+ `double`: un numero a virgola mobile a precisione doppia firmato a 64 bit. L'intervallo va da 4.94065645841246544e-324d a 1.79769313486231570e\$1308d, positivo o negativo. `double` segue IEEE Standard for Floating-Point Arithmetic (IEEE 754).
+ `float`: un numero a virgola mobile a precisione singola a 32 bit. L'intervallo va da 1.40129846432481707e-45 a 3.40282346638528860e\$138, positivo o negativo. `float` segue IEEE Standard for Floating-Point Arithmetic (IEEE 754). Equivalente a `real` in Presto. In Athena, usa `float` nelle istruzioni DDL come `CREATE TABLE` e `real` nelle funzioni SQL come`SELECT CAST`. Il AWS Glue crawler restituisce i valori in `float` e Athena traduce `real` e `float` digita internamente (vedi le note di rilascio). [5 giugno 2018](release-notes.md#release-note-2018-06-05)
+ `decimal [ (precision, scale) ]`, dove `precision` è il numero totale di cifre e `scale` (facoltativo) è il numero di cifre nella parte frazionaria, il valore di default è 0. Ad esempio, è possibile usare il tipo di queste definizioni: `decimal(11,5)`, `decimal(15)`. Il valore massimo per *precision* è 38 e il valore massimo per è 38. *scale*

  Per specificare valori decimali come letterali, ad esempio durante la selezione delle righe con un determinato valore decimale nell'espressione di una query DDL, specifica la definizione di tipo `decimal` e indica il valore decimale come letterale (tra virgolette singole) nella query, come in questo esempio: `decimal_value = decimal '0.12'`.
+ `char`: lunghezza fissa dei dati dei caratteri specificata tra 1 e 255, ad esempio `char(10)`. Per ulteriori informazioni, consulta la sezione relativa a [tipo di dati Hive CHAR](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-char).
+ `varchar`: lunghezza variabile dei dati dei caratteri specificata tra 1 e 65535, ad esempio `varchar(10)`. Per ulteriori informazioni, consulta la sezione relativa a [tipo di dati Hive VARCHAR](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-varchar). 
+ `string`: una stringa letterale racchiusa tra virgolette singole o doppie.
**Nota**  
I tipi di dati non stringa non possono essere diffusi in `string` in Athena, ma possono essere diffusi in `varchar`.
+ `binary`: (per i dati in Parquet)
+ `date`: un dato in formato ISO, ad esempio `YYYY-MM-DD`. Ad esempio, `date '2008-09-15'`. Un'eccezione è l'Open CSVSer De, che utilizza il numero di giorni trascorsi dal 1° gennaio 1970. Per ulteriori informazioni, consulta [Apri CSV SerDe per l'elaborazione di CSV](csv-serde.md).
+ `timestamp`: data e ora istantanea in un formato compatibile con [https://docs.oracle.com/javase/8/docs/api/java/sql/Timestamp.html](https://docs.oracle.com/javase/8/docs/api/java/sql/Timestamp.html) fino a una risoluzione massima in millisecondi, come `yyyy-MM-dd HH:mm:ss[.f...]`. Ad esempio, `timestamp '2008-09-15 03:04:05.324'`. Un'eccezione è l'Open CSVSer De, che utilizza `TIMESTAMP` dati in formato numerico UNIX (ad esempio,). `1579059880000` Per ulteriori informazioni, consulta [Apri CSV SerDe per l'elaborazione di CSV](csv-serde.md).
+ `array` < data\$1type >
+ `map` < primitive\$1type, data\$1type >
+ `struct` < col\$1name : data\$1type [COMMENT col\$1comment] [, ...] >

**[COMMENT table\$1comment]**  
Crea la proprietà della tabella `comment` e la popola con il parametro `table_comment` specificato.

**[PARTITIONED BY (col\$1name data\$1type [ COMMENT col\$1comment ], ... ) ]**  
Crea una tabella partizionata con una o più colonne di partizione in cui sono specificati `col_name`, `data_type` e `col_comment`. Una tabella può avere una o più partizioni, che consistono in una combinazione distinta di nome e valore per la colonna. Viene creata una directory di dati separata per ciascuna combinazione specificata; in alcune circostanze ciò può migliorare le prestazioni delle query. Le colonne partizionate non esistono all'interno dei dati della tabella stessa. Se per `col_name` usi un valore uguale a una colonna della tabella, viene restituito un errore. Per ulteriori informazioni, consulta la pagina relativa al [partizionamento di dati](partitions.md).  
Dopo aver creato una tabella con partizioni, esegui una successiva query che comprenda la clausola [MSCK REPAIR TABLE](msck-repair-table.md) per aggiornare i metadati della partizione, ad esempio `MSCK REPAIR TABLE cloudfront_logs;`. Per le partizioni che non sono compatibili con Hive, utilizzare [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) per caricare le partizioni in modo da poter eseguire una query sui dati.

**[CLUSTERED BY (col\$1name, col\$1name, ...) INTO num\$1buckets BUCKETS]**  
Divide, con o senza partizionamento, i dati nelle colonne `col_name` specificate in sottoinsiemi di dati chiamati *bucket*. Il parametro `num_buckets` specifica il numero di bucket da creare. Il bucketing può migliorare le prestazioni di alcune query su set di dati di grandi dimensioni.

**[ROW FORMAT row\$1format]**  
Specifica il formato di riga della tabella e i relativi dati di origine sottostanti, se applicabile. In `row_format`, è possibile specificare uno o più delimitatori con la clausola `DELIMITED` o, in alternativa, utilizzare la clausola `SERDE` come descritto di seguito. Se `ROW FORMAT` viene omesso o specificato, `ROW FORMAT DELIMITED` viene utilizzato un file nativo SerDe.  
+ [DELIMITED FIELDS TERMINATED BY char [ESCAPED BY char]]
+ [DELIMITED COLLECTION ITEMS TERMINATED BY char]
+ [MAP KEYS TERMINATED BY char]
+ [LINES TERMINATED BY char]
+ [NULL DEFINED AS char]

  Disponibile solo con Hive 0.13 e quando il formato del file STORED AS è `TEXTFILE`.
 **--OPPURE--**   
+ SERDE 'serde\$1name' [WITH SERDEPROPERTIES ("property\$1name" = "property\$1value", "property\$1name" = "property\$1value" [, ...] )]

  `serde_name`Indica la modalità SerDe di utilizzo. La `WITH SERDEPROPERTIES` clausola consente di fornire una o più proprietà personalizzate consentite da. SerDe

**[STORED AS file\$1format]**  
Specifica il formato di file per i dati della tabella. Se omesso, il valore predefinito è `TEXTFILE`. Le opzioni per `file_format` sono:  
+ SEQUENCEFILE
+ TEXTFILE
+ RCFILE
+ ORC
+ PARQUET
+ AVRO
+ ION
+ INPUTFORMAT input\$1format\$1classname OUTPUTFORMAT output\$1format\$1classname

**[POSIZIONE 's3://amzn-s3-demo-bucket/[folder]/']**  
Specifica la posizione dei dati sottostanti in Amazon S3 da cui viene creata la tabella. Il percorso della posizione deve essere un nome bucket o un nome bucket e una o più cartelle. Se si utilizzano le partizioni, specificare la radice dei dati partizionati. Per ulteriori informazioni sulla posizione della tabella, consulta [Specificare la posizione di una tabella in Amazon S3](tables-location-format.md). Per informazioni sul formato dei dati e le autorizzazioni, consulta la sezione [Considerazioni su Amazon S3](creating-tables.md#s3-considerations).   
Utilizza una barra finale per la cartella o il bucket. Non utilizzare nomi di file o caratteri glob.  
 **Utilizza**:  
`s3://amzn-s3-demo-bucket/`  
`s3://amzn-s3-demo-bucket/folder/`  
`s3://amzn-s3-demo-bucket/folder/anotherfolder/`  
 **Non utilizzare:**  
`s3://amzn-s3-demo-bucket`  
`s3://amzn-s3-demo-bucket/*`  
`s3://amzn-s3-demo-bucket/mydatafile.dat`

**[TBLPROPERTIES (['has\$1encrypted\$1data'='vero \$1 falso',] ['encryption\$1option'='SSE\$1S3 \$1 SSE\$1KMS \$1 CSE\$1KMS',] ['kms\$1key'='aws\$1kms\$1key\$1arn',] ['classification'='valore\$1classificazione',] property\$1name\$1arn =valore\$1proprietà [,...])]**  
Specifica coppie personalizzate di metadati chiave-valore per la definizione della tabella, oltre a proprietà predefinite per la tabella, ad esempio `"comment"`.  
**has\$1encrypted\$1data**: Athena ha una proprietà integrata, `has_encrypted_data`. Imposta questa proprietà su `true` per indicare che il set di dati sottostante specificato da `LOCATION` è crittografato con CSE-KMS. Se omesso e se le impostazioni del gruppo di lavoro non sostituiscono le impostazioni lato client, viene utilizzato `false`. Se omesso o impostato su `false` con dati sottostanti crittografati, la query restituisce un errore. Per ulteriori informazioni, consulta [Crittografia dei dati a riposo](encryption.md).  
**encryption\$1option** — Imposta questa proprietà su `SSE_S3``SSE_KMS`, o per indicare il livello massimo di crittografia `CSE_KMS` utilizzato nel set di dati sottostante specificato da. `LOCATION` Per ulteriori informazioni, consulta [Crittografia dei dati a riposo](encryption.md).  
**kms\$1key** — Imposta questa proprietà sull'ARN della chiave AWS KMS utilizzata per crittografare e decrittografare i file di dati delle tabelle. Athena utilizza questa chiave per crittografare i file di dati delle tabelle durante la scrittura `SSE_KMS` o la `CSE_KMS` crittografia e per decrittografare i file di dati delle tabelle crittografati CSE-KMS. Questa proprietà è richiesta solo quando è impostata su o. `encryption_option` `SSE_KMS` `CSE_KMS` Per ulteriori informazioni, consulta [Crittografia dei dati a riposo](encryption.md).  
**classificazione**: le tabelle create per Athena nella CloudTrail console vengono aggiunte `cloudtrail` come valore per la `classification` proprietà. Per eseguire processi ETL, è AWS Glue necessario creare una tabella con la `classification` proprietà per indicare il tipo di dati per AWS Glue as`csv`,, `parquet` `orc``avro`, o. `json` Ad esempio, `'classification'='csv'`. Se questa proprietà non viene specificata, i processi ETL non saranno completati con successo. È possibile specificarla in un secondo momento tramite la console AWS Glue , l'API o la CLI. Per ulteriori informazioni, consulta la sezione [Authoring Jobs in [Creare tabelle per processi ETL](schema-classifier.md)AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/author-job.html) nella *AWS Glue Developer Guide*.  
**compression\$1level**: la proprietà `compression_level` specifica il livello di compressione da utilizzare. Questa proprietà si applica solo alla compressione ZSTD. I valori possibili sono compresi tra 1 e 22. Il valore predefinito è 3. Per ulteriori informazioni, consulta [Usa i livelli di compressione ZSTD](compression-support-zstd-levels.md).  
Per ulteriori informazioni su altre proprietà della tabella, consulta [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md).

## Esempi
<a name="create-table-examples"></a>

L’`CREATE TABLE`istruzione di esempio seguente crea una tabella basata su dati planetari separati da tabulazioni archiviati in Amazon S3. 

```
CREATE EXTERNAL TABLE planet_data (
  planet_name string,
  order_from_sun int,
  au_to_sun float,
  mass float,
  gravity_earth float,
  orbit_years float,
  day_length float
  )
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION 's3://amzn-s3-demo-bucket/tsv/'
```

Notare i seguenti punti:
+ La `ROW FORMAT DELIMITED` clausola indica che i dati sono delimitati da un carattere specifico.
+ La `FIELDS TERMINATED BY '\t'` clausola specifica che i campi nei dati TSV sono separati dal carattere di tabulazione ('\$1 t').
+ La `STORED AS TEXTFILE` clausola indica che i dati vengono archiviati come file di testo semplice in Amazon S3.

Per interrogare i dati, puoi usare una semplice `SELECT` dichiarazione come la seguente:

```
SELECT * FROM planet_data
```

Per utilizzare l’esempio per creare la tua tabella TSV in Athena, sostituisci i nomi di tabelle e colonne con i nomi e i tipi di dati della tua tabella e delle tue colonne e aggiorna `LOCATION` la clausola in modo che punti al percorso Amazon S3 in cui sono archiviati i tuoi file TSV.

Per ulteriori informazioni sulla creazione delle tabelle, consulta [Crea tabelle in Athena](creating-tables.md).