

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

# Aggiornare dati di tabelle Iceberg
<a name="querying-iceberg-updating-iceberg-table-data"></a>

È possibile gestire i dati della tabella Iceberg direttamente su Athena utilizzando le query `INSERT`, `UPDATE` e `DELETE`. Ogni transazione di gestione dei dati produce un nuovo snapshot, che può essere interrogato utilizzando una query temporale. Le istruzioni `UPDATE` e `DELETE` seguono le specifiche di [eliminazione della posizione](https://iceberg.apache.org/spec/#position-delete-files) a livello di riga del formato Iceberg v2 e applicano l'isolamento della snapshot.

**Nota**  
Athena SQL attualmente non supporta questo approccio. copy-on-write Le `DELETE FROM` operazioni `UPDATE``MERGE INTO`, e utilizzano sempre l' merge-on-readapproccio con eliminazioni posizionali, indipendentemente dalle proprietà della tabella specificate. Nel caso in cui si disponga di proprietà della tabella di configurazione come `write.update.mode``write.merge.mode`, e/o `write.delete.mode` da utilizzare copy-on-write, le query non falliranno poiché Athena le ignorerà e continuerà a utilizzarle. merge-on-read 

Utilizzare i seguenti comandi per eseguire operazioni di gestione dei dati sulle tabelle Iceberg.

**Topics**
+ [INSERT INTO](querying-iceberg-insert-into.md)
+ [DELETE](querying-iceberg-delete.md)
+ [UPDATE](querying-iceberg-update.md)
+ [MERGE INTO](querying-iceberg-merge-into.md)

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

Inserisce i dati in una tabella Iceberg. Ad Athena Iceberg `INSERT INTO` si applica una tariffa uguale alle query `INSERT INTO` attuali per le tabelle Hive esterne in base alla quantità di dati scansionati. Per inserire dati in una tabella Iceberg, usa la seguente sintassi, dove *query* può essere o. `VALUES (val1, val2, ...)` `SELECT (col1, col2, …) FROM [db_name.]table_name WHERE predicate` Per la sintassi SQL e i dettagli semantici, consulta la pagina [INSERT INTO](insert-into.md).

```
INSERT INTO [db_name.]table_name [(col1, col2, …)] query
```

Negli esempi seguenti vengono inseriti i valori nella tabella `iceberg_table`.

```
INSERT INTO iceberg_table VALUES (1,'a','c1')
```

```
INSERT INTO iceberg_table (col1, col2, ...) VALUES (val1, val2, ...)
```

```
INSERT INTO iceberg_table SELECT * FROM another_table
```

# DELETE
<a name="querying-iceberg-delete"></a>

Athena Iceberg `DELETE` scrive i file di eliminazione della posizione Iceberg in una tabella. Questa operazione è nota come eliminazione. merge-on-read A differenza di un'copy-on-writeeliminazione, un' merge-on-readeliminazione è più efficiente perché non riscrive i dati del file. Quando Athena legge i dati Iceberg, unisce i file di eliminazione della posizione Iceberg con i file di dati per produrre la visualizzazione più recente di una tabella. Per rimuovere questi file di eliminazione della posizione, puoi eseguire [Azione di compattazione REWRITE DATA](querying-iceberg-data-optimization.md#querying-iceberg-data-optimization-rewrite-data-action). Le operazioni `DELETE` vengono addebitate dalla quantità di dati analizzati. Per la sintassi, consulta [DELETE](delete-statement.md).

L'esempio seguente elimina le righe da `iceberg_table` che hanno `c3` come valore per `category`.

```
DELETE FROM iceberg_table WHERE category='c3'
```

# UPDATE
<a name="querying-iceberg-update"></a>

Athena Iceberg `UPDATE` scrive i file di eliminazione della posizione Iceberg e le righe appena aggiornate come file di dati nella stessa transazione. `UPDATE`può essere immaginato come una combinazione di `INSERT INTO` e `DELETE`. Le operazioni `UPDATE` vengono addebitate dalla quantità di dati analizzati. Per la sintassi, consulta [UPDATE](update-statement.md).

L'esempio seguente aggiorna i valori specificati nella tabella `iceberg_table`.

```
UPDATE iceberg_table SET category='c2' WHERE category='c1'
```

# MERGE INTO
<a name="querying-iceberg-merge-into"></a>

Aggiorna, elimina o inserisce in modo condizionale righe in una tabella Iceberg. Una singola istruzione può combinare operazioni di aggiornamento, eliminazione e inserimento. Per la sintassi, consulta [MERGE INTO](merge-into-statement.md).

**Nota**  
L'istruzione `MERGE INTO` è transazionale ed è supportata solo per le tabelle Apache Iceberg nella versione 3 del motore Athena.

L'esempio seguente elimina tutti i clienti dalla tabella `t` che si trova nella tabella di origine `s`.

```
MERGE INTO accounts t USING monthly_accounts_update s
ON t.customer = s.customer
WHEN MATCHED
THEN DELETE
```

L'esempio seguente aggiorna la tabella di destinazione `t` con le informazioni sui clienti dalla tabella di origine `s`. Per le righe dei clienti nella tabella `t` che contengono righe relative ai clienti nella tabella `s`, l'esempio incrementa gli acquisti nella tabella t. Se la tabella `t` non corrisponde a una riga del cliente nella tabella `s`, l'esempio inserisce la riga del cliente dalla tabella `s` nella tabella `t`.

```
MERGE INTO accounts t USING monthly_accounts_update s
    ON (t.customer = s.customer)
    WHEN MATCHED
        THEN UPDATE SET purchases = s.purchases + t.purchases
    WHEN NOT MATCHED
        THEN INSERT (customer, purchases, address)
              VALUES(s.customer, s.purchases, s.address)
```

L'esempio seguente aggiorna in modo condizionale la tabella di destinazione `t` con le informazioni dalla tabella di origine `s`. L'esempio elimina qualsiasi riga di destinazione corrispondente il cui indirizzo di origine è Centreville. Per tutte le altre righe corrispondenti, l'esempio aggiunge gli acquisti di origine e imposta l'indirizzo di destinazione sull'indirizzo di origine. Se non c'è alcuna corrispondenza nella tabella di destinazione, l'esempio inserisce la riga dalla tabella di origine.

```
MERGE INTO accounts t USING monthly_accounts_update s
    ON (t.customer = s.customer)
    WHEN MATCHED AND s.address = 'Centreville'
        THEN DELETE
    WHEN MATCHED
        THEN UPDATE
            SET purchases = s.purchases + t.purchases, address = s.address
    WHEN NOT MATCHED
        THEN INSERT (customer, purchases, address)
              VALUES(s.customer, s.purchases, s.address)
```