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 (tabella esterna)
Inserisce i risultati di una query SELECT in tabelle esterne esistenti su un catalogo esterno AWS Glue, AWS Lake Formation ad esempio for o un metastore Apache Hive. Utilizza lo stesso ruolo AWS Identity and Access Management (IAM) utilizzato per il comando CREATE EXTERNAL SCHEMA per interagire con cataloghi esterni e Amazon S3.
Per le tabelle non partizionate, il comando INSERT (tabella esterna) scrive i dati nella posizione Amazon S3 definita nella tabella, in base alle proprietà della tabella e al formato di file specificati.
Per le tabelle con partizioni, INSERT (tabella esterna) scrive i dati nella posizione Amazon S3 in base alla chiave di partizione specificata nella tabella. Al termine dell'operazione INSERT, inoltre, registra automaticamente le nuove partizioni nel catalogo esterno.
Non è possibile eseguire INSERT (tabella esterna) all'interno di un blocco di transazione (BEGIN ... END). Per ulteriori informazioni sulle transazioni, consultare Isolamento serializzabile.
Sintassi
INSERT INTO external_schema.table_name { select_statement }
Parametri
- external_schema.table_name
-
Il nome di uno schema esterno e di una tabella esterna di destinazione esistenti in cui effettuare l'inserimento.
- select_statement
-
Istruzione che inserisce una o più righe nella tabella esterna definendo qualsiasi query. Tutte le righe prodotte dalla query vengono scritte in Amazon S3 in formato testo o Parquet in base alla definizione della tabella. La query deve restituire un elenco di colonne compatibile con i tipi di dati delle colonne nella tabella esterna. Tuttavia, i nomi delle colonne non devono necessariamente corrispondere.
Note per l'utilizzo
Il numero di colonne nella query SELECT deve essere uguale alla somma delle colonne di dati e delle colonne di partizione. La posizione e il tipo di dati di ogni colonna di dati devono corrispondere a quelli della tabella esterna. La posizione delle colonne di partizione deve essere alla fine della query SELECT, nello stesso ordine in cui sono state definite nel comando CREATE EXTERNAL TABLE. I nomi delle colonne non devono necessariamente corrispondere.
In alcuni casi, è possibile eseguire il comando INSERT (tabella esterna) su un catalogo dati AWS Glue o un metastore Hive. Nel caso di AWS Glue, il ruolo IAM utilizzato per creare lo schema esterno deve disporre di autorizzazioni di lettura e scrittura su Amazon AWS Glue S3 e. Se utilizzi un AWS Lake Formation catalogo, questo ruolo IAM diventa il proprietario della nuova tabella Lake Formation. Questo ruolo IAM deve disporre almeno delle seguenti autorizzazioni:
-
Autorizzazione SELECT, INSERT, UPDATE sulla tabella esterna
-
Autorizzazione per la posizione dati sul percorso Amazon S3 della tabella esterna
Per garantire che i nomi file siano univoci, Amazon Redshift utilizza il seguente formato per il nome di ogni file caricato in Amazon S3 per impostazione predefinita.
.<date>
_<time>
_<microseconds>
_<query_id>
_<slice-number>
_part_<part-number>
.<format>
Un esempio è 20200303_004509_810669_1007_0001_part_00.parquet
.
Quando si esegue il comando INSERT (tabella esterna), considerare quanto segue:
-
Le tabelle esterne con un formato diverso da PARQUET o TEXTFILE non sono supportate.
-
Questo comando supporta le proprietà esistenti della tabella come 'write.parallel', 'write.maxfilesize.mb', 'compression_type' e 'serialization.null.format'. Per aggiornare tali valori, eseguire il comando ALTER TABLE SET TABLE PROPERTIES.
-
La proprietà della tabella 'numRows' viene aggiornata automaticamente verso la fine dell'operazione INSERT. La proprietà della tabella deve essere definita o aggiunta alla tabella se già non è stata creata dall'operazione CREATE EXTERNAL TABLE AS.
-
La clausola LIMIT non è supportata nella query SELECT esterna. Usa invece una clausola LIMIT nidificata.
-
È possibile utilizzare la tabella STL_UNLOAD_LOG per tenere traccia dei file scritti su Amazon S3 da ogni operazione INSERT (tabella esterna).
-
Amazon Redshift supporta solo la crittografia standard Amazon S3 per INSERT (tabella esterna).
Esempi di INSERT (tabella esterna)
Nell'esempio seguente i risultati dell'istruzione SELECT vengono inseriti nella tabella esterna.
INSERT INTO spectrum.lineitem
SELECT * FROM local_lineitem;
Nell'esempio seguente i risultati dell'istruzione SELECT vengono inseriti in una tabella esterna partizionata mediante il partizionamento statico. Le colonne di partizione nell'istruzione SELECT sono hardcoded. Le colonne delle partizioni devono trovarsi alla fine della query.
INSERT INTO spectrum.customer
SELECT name, age, gender, 'May', 28 FROM local_customer;
Nell'esempio seguente i risultati dell'istruzione SELECT vengono inseriti in una tabella esterna partizionata utilizzando il partizionamento dinamico. Le colonne delle partizioni non sono hardcoded. I dati vengono aggiunti automaticamente alle cartelle delle partizioni esistenti o alle nuove cartelle se viene aggiunta una nuova partizione.
INSERT INTO spectrum.customer
SELECT name, age, gender, month, day FROM local_customer;