

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

# INSERT INTO
<a name="insert-into"></a>

Inserisce nuove righe in una tabella di destinazione in base a un'istruzione di query `SELECT` eseguita su una tabella di origine o in base a un set di `VALUES` fornito come parte dell'istruzione. Quando la tabella di origine si basa sui dati sottostanti in un formato, ad esempio CSV o JSON, e la tabella di destinazione si basa su un altro formato, ad esempio Parquet o ORC, puoi utilizzare le query `INSERT INTO` per trasformare i dati selezionati nel formato della tabella di destinazione. 

## Considerazioni e limitazioni
<a name="insert-into-limitations"></a>

Considera le informazioni seguenti durante l'utilizzo delle query `INSERT` con Athena.
+ Quando si esegue una query `INSERT` su una tabella con i dati sottostanti crittografati in Amazon S3, i file di output scritti dalla query `INSERT` non vengono crittografati per impostazione predefinita. Ti consigliamo di crittografare i risultati delle query `INSERT` se stai inserendo nelle tabelle dati crittografati. 

  Per ulteriori informazioni sulla crittografia dei risultati delle query tramite la console, consulta [Crittografare i risultati di query Athena archiviati in Amazon S3](encrypting-query-results-stored-in-s3.md). Per abilitare la crittografia utilizzando l'API AWS CLI o Athena, utilizza `EncryptionConfiguration` le proprietà dell'[StartQueryExecution](https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html)azione per specificare le opzioni di crittografia di Amazon S3 in base ai tuoi requisiti.
+ Per le istruzioni `INSERT INTO`, l'impostazione prevista per il proprietario del bucket non si applica alla posizione della tabella di destinazione in Amazon S3. L'impostazione prevista per il proprietario del bucket si applica solo al percorso di output di Amazon S3 specificato per i risultati delle query di Athena. Per ulteriori informazioni, consulta [Specificare una posizione dei risultati delle query utilizzando la console Athena](query-results-specify-location-console.md).
+ Per le istruzioni `INSERT INTO` conformi all'ACID, consulta la sezione `INSERT INTO` della pagina [Aggiornare dati di tabelle Iceberg](querying-iceberg-updating-iceberg-table-data.md).

### Formati supportati e SerDes
<a name="insert-into-supported-formats"></a>

È possibile eseguire un'`INSERT`interrogazione su tabelle create a partire da dati con i seguenti formati e SerDes.


| Formato dei dati | SerDe | 
| --- | --- | 
| Avro | org.apache.hadoop.hive.serde2.avro. AvroSerDe | 
| Ion | com.amazon.ionhiveserde. IonHiveSerDe | 
| JSON | org.apache.hive.hcatalog.data. JsonSerDe | 
| ORC | org.apache.hadoop.hive.ql.io.orc. OrcSerde | 
| Parquet | org.apache.hadoop.hive.ql.io.parquet.serde. ParquetHiveSerDe | 
| File di testo | org.apache.hadoop.hive.serde2.lazy. LazySimpleSerDe Sono supportati file TSV e file con delimitatori personalizzati.  | 
| CSV | org.apache.hadoop.hive.serde 2.open CSVSerde Le scritture sono supportate solo per i tipi di stringa. Da Athena, non è possibile scrivere su tabelle che contengono tipi non stringhe nello schema Glue. [Per ulteriori informazioni, consulta CSV. SerDe](csv-serde.md#csv-serde-opencsvserde-considerations-non-string)  | 

### Tabelle con bucket non supportate
<a name="insert-into-bucketed-tables-not-supported"></a>

`INSERT INTO` non è supportato nelle tabelle con bucket. Per ulteriori informazioni, consulta [Utilizzare partizionamento e bucketing](ctas-partitioning-and-bucketing.md).

### Query federate non supportate
<a name="insert-into-federated-queries-not-supported"></a>

`INSERT INTO` non è supportato per le query federate. Il tentativo di eseguire questa operazione potrebbe generare il messaggio di errore This operation is currently not supported for external catalogs (Questa operazione non è attualmente supportata per i cataloghi esterni). Per informazioni sulle query federate, consultare [Utilizza Amazon Athena Federated Query](federated-queries.md).

### Partizionamento
<a name="insert-into-limitations-partitioning"></a>

Tieni in considerazione i punti esposti in questa sezione quando utilizzi il partizionamento con le query `INSERT INTO` o `CREATE TABLE AS SELECT`.

#### Limits
<a name="insert-into-partition-limits"></a>

L'istruzione `INSERT INTO` supporta la scrittura di un massimo di 100 partizioni nella tabella di destinazione. Se si esegue la clausola `SELECT` su una tabella con più di 100 partizioni, la query non riesce a meno che la query `SELECT` non sia limitata a massimo 100 partizioni.

Per informazioni su una soluzione alternativa per questa limitazione, consulta [Utilizzare CTAS e INSERT INTO per aggirare il limite di 100 partizioni](ctas-insert-into.md).

#### Ordinamento colonne
<a name="insert-into-partition-detection"></a>

Le istruzioni `INSERT INTO` o `CREATE TABLE AS SELECT` prevedono che la colonna partizionata sia l'ultima colonna dell'elenco delle colonne proiettate in un'istruzione `SELECT`. 

Se la tabella di origine non è partizionata o partizionata su colonne diverse rispetto alla tabella di destinazione, query come `INSERT INTO {{destination_table}} SELECT * FROM {{source_table}}` considerano i valori nell'ultima colonna della tabella di origine come valori per una colonna di partizione nella tabella di destinazione. Tieni presenti queste informazioni quando provi a creare una tabella partizionata da una tabella non partizionata.

#### Resources
<a name="insert-into-partition-resources"></a>

Per ulteriori informazioni sull'utilizzo di `INSERT INTO` con il partizionamento, consulta le seguenti risorse.
+ Per l'inserimento di dati partizionati in una tabella partizionata, consulta [Utilizzare CTAS e INSERT INTO per aggirare il limite di 100 partizioni](ctas-insert-into.md).
+ Per l'inserimento di dati non partizionati in una tabella partizionata, consulta [Utilizzare CTAS e INSERT INTO per ETL e analisi dei dati](ctas-insert-into-etl.md). 

### File scritti su Amazon S3
<a name="insert-into-files-written-to-s3"></a>

Athena scrive file nelle posizioni dei dati di origine in Amazon S3 come risultato del comando `INSERT`. Ogni operazione `INSERT` crea un nuovo file, anziché aggiungere i dati a un file esistente. Le posizioni dei file dipendono dalla struttura della tabella e dalla query `SELECT`, se presente. Athena genera un file manifesto di dati per ogni query `INSERT`. Il manifesto tiene traccia dei file scritti dalla query. Viene salvato nella posizione dei risultati di query Athena in Amazon S3. Per ulteriori informazioni, consulta [Identificazione dei file di output delle query](querying-finding-output-files.md#querying-identifying-output-files).

### Evita aggiornamenti altamente transazionali
<a name="insert-into-transactional-caveat"></a>

Quando aggiungi righe `INSERT INTO` a una tabella in Amazon S3, Athena non riscrive o modifica i file esistenti. Al contrario, scrive le righe come uno o più file nuovi. Poiché le tabelle con [ molti file di piccole dimensioni riducono le prestazioni delle query](performance-tuning-data-optimization-techniques.md#performance-tuning-avoid-having-too-many-files) e le operazioni di scrittura e lettura come `PutObject` e `GetObject` comportano costi più elevati da Amazon S3, considera le seguenti opzioni quando utilizzi `INSERT INTO`: 
+ Esegui le operazioni `INSERT INTO` meno frequentemente su batch di righe più grandi.
+ Per grandi volumi di importazione dei dati, prendi in considerazione l’utilizzo di un servizio come [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html).
+ Evita di utilizzare `INSERT INTO` del tutto. Invece, accumula le righe in file più grandi e caricale direttamente su Amazon S3, dove Athena potrà interrogarle.

### Individuazione di file orfani
<a name="insert-into-files-partial-data"></a>

Se un'istruzione `CTAS` o `INSERT INTO` ha esito negativo, i dati orfani possono essere lasciati nella posizione dei dati e potrebbero essere letti nelle query successive. Per individuare i file orfani per l'ispezione o l'eliminazione, è possibile utilizzare il file manifesto dati fornito da Athena per tenere traccia dell'elenco dei file da scrivere. Per ulteriori informazioni, consultare [Identificazione dei file di output delle query](querying-finding-output-files.md#querying-identifying-output-files) e [DataManifestLocation](https://docs.aws.amazon.com/athena/latest/APIReference/API_QueryExecutionStatistics.html#athena-Type-QueryExecutionStatistics-DataManifestLocation).

## INSERT INTO...SELECT
<a name="insert-into-select"></a>

Specifica la query da eseguire su una tabella, `source_table`, che determina le righe da inserire in una seconda tabella, `destination_table`. Se la query `SELECT` specifica le colonne in `source_table`, le colonne devono corrispondere esattamente a quelle in `destination_table`.

Per ulteriori informazioni sulle query `SELECT`, consulta [SELECT](select.md).

### Riepilogo
<a name="insert-into-select-synopsis"></a>

```
INSERT INTO destination_table 
SELECT select_query 
FROM source_table_or_view
```

### Esempi
<a name="insert-into-select-examples"></a>

Seleziona tutte le righe nella tabella `vancouver_pageviews` e inseriscile nella tabella `canada_pageviews`:

```
INSERT INTO canada_pageviews 
SELECT * 
FROM vancouver_pageviews;
```

Seleziona solo le righe nella tabella `vancouver_pageviews` in cui la colonna `date` ha un valore compreso tra `2019-07-01` e `2019-07-31`, quindi inseriscile in `canada_july_pageviews`:

```
INSERT INTO canada_july_pageviews
SELECT *
FROM vancouver_pageviews
WHERE date
    BETWEEN date '2019-07-01'
        AND '2019-07-31';
```

Seleziona i valori nelle colonne `state` e `city` nella tabella `cities_world` solo dalle righe con il valore `usa` nella colonna `country` e inseriscile nelle colonne `state` e `city` della tabella `cities_usa`:

```
INSERT INTO cities_usa (city,state)
SELECT city,state
FROM cities_world
    WHERE country='usa'
```

## INSERT INTO...VALUES
<a name="insert-into-values"></a>

Inserisce le righe in una tabella esistente specificando colonne e valori. Le colonne specificate e i tipi di dati associati devono corrispondere esattamente alle colonne e ai tipi di dati nella tabella di destinazione.

**Importante**  
Non è consigliabile inserire righe utilizzando `VALUES` perché Athena genera file per ogni operazione `INSERT`. Questo può causare la creazione di molti file di piccole dimensioni e il peggioramento delle prestazioni delle query della tabella. Per identificare i file creati da una query `INSERT`, esamina il file manifesto dei dati. Per ulteriori informazioni, consulta [Lavora con i risultati delle query e le query recenti](querying.md).

### Riepilogo
<a name="insert-into-values-synopsis"></a>

```
INSERT INTO destination_table [(col1,col2,...)] 
VALUES (col1value,col2value,...)[,
       (col1value,col2value,...)][,
       ...]
```

### Esempi
<a name="insert-into-values-examples"></a>

Negli esempi seguenti, la tabella delle città ha tre colonne: `id`, `city`, `state`, `state_motto`. La colonna `id` è di tipo `INT` e tutte le altre colonne sono di tipo `VARCHAR`.

Inserisci una singola riga nella tabella `cities`, con tutti i valori di colonna specificati:

```
INSERT INTO cities 
VALUES (1,'Lansing','MI','Si quaeris peninsulam amoenam circumspice')
```

Inserisci due righe nella tabella `cities`:

```
INSERT INTO cities 
VALUES (1,'Lansing','MI','Si quaeris peninsulam amoenam circumspice'),
       (3,'Boise','ID','Esto perpetua')
```