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 queryINSERT
non vengono crittografati per impostazione predefinita. Ti consigliamo di crittografare i risultati delle queryINSERT
se stai inserendo nelle tabelle dati crittografati.Per ulteriori informazioni sulla crittografia dei risultati delle query tramite la console, consulta Crittografa i risultati delle 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 la posizione dei risultati della query utilizzando la console Athena. -
Per le istruzioni
INSERT INTO
conformi all'ACID, consulta la sezioneINSERT INTO
della pagina Aggiorna i dati della tabella Iceberg.
Formati supportati e SerDes
È 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 NotaSono 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 Usa il partizionamento e il bucketing.
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 Usa 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 Utilizzare CTAS e INSERT INTO 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
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.destination_table
SELECT * FROM
source_table
Risorse
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 aggirare il limite di 100 partizioni.
-
Per l'inserimento di dati non partizionati in una tabella partizionata, consulta Utilizzo CTAS e INSERT INTO scopo ETL e analisi dei dati.
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 Identifica i 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 INTO
istruzione 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 Identifica i 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 Utilizzare i risultati delle query e le query recenti.
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')