INSERT INTO - Amazon Athena

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

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

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 Crittografia dei risultati di query Athena archiviati in Amazon S3. Per abilitare la crittografia utilizzando l'API AWS CLI o Athena, utilizza EncryptionConfiguration le proprietà dell'StartQueryExecutionazione 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.

  • Per le istruzioni INSERT INTO conformi all'ACID, consulta la sezione INSERT INTO della pagina Aggiornamento dati di tabelle Iceberg.

Formati supportati e SerDes

È possibile eseguire un'INSERTinterrogazione 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

Nota

Sono supportati CSV, TSV e file con delimitatori personalizzati.

Tabelle con bucket non supportate

INSERT INTO non è supportato nelle tabelle con bucket. Per ulteriori informazioni, consulta Partizionamento e arrotolamento in Athena.

Query federate non supportate

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 Utilizzo di Amazon Athena Federated Query.

Partizionamento

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

Limiti

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 Utilizzo di CTAS e INSERT INTO per aggirare il limite di 100 partizioni.

Ordinamento colonne

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.

Risorse

Per ulteriori informazioni sull'utilizzo di INSERT INTO con il partizionamento, consulta le seguenti risorse.

File scritti su Amazon S3

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 manifest di dati per ogni query INSERT. Il manifest 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.

Evita aggiornamenti altamente transazionali

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 e le operazioni di scrittura PutObject e lettura come Amazon S3 GetObject comportano costi più elevati, considera le seguenti opzioni quando utilizzi: INSERT INTO

  • Esegui INSERT INTO le operazioni meno frequentemente su batch di righe più grandi.

  • Per grandi volumi di ingestione di dati, prendi in considerazione l'utilizzo di un servizio come Amazon Data Firehose.

  • Evita di utilizzarlo del tutto. INSERT INTO Invece, accumula le righe in file più grandi e caricale direttamente su Amazon S3, dove Athena potrà interrogarle.

Individuazione di file orfani

Se un'INSERT INTOistruzione CTAS or fallisce, 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, consulta Identificazione dei file di output delle query e DataManifestLocation.

INSERT INTO...SELECT

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.

Riepilogo

INSERT INTO destination_table SELECT select_query FROM source_table_or_view

Esempi

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

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 manifest dei dati. Per ulteriori informazioni, consulta Utilizzo dei risultati delle query, delle query recenti e dei file di output.

Riepilogo

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

Esempi

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