ALTER TABLE APPEND - Amazon Redshift

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

ALTER TABLE APPEND

Aggiunge le righe a una tabella di destinazione spostando i dati da una tabella di origine esistente. I dati nella tabella di origine vengono spostati nelle colonne corrispondenti della tabella di destinazione. L'ordine delle colonne non ha importanza. Dopo che i dati sono stati aggiunti alla tabella di destinazione, la tabella di origine è vuota. ALTERTABLEAPPENDè in genere molto più veloce di un'INSERTINTOoperazione CREATETABLEAS o di un'operazione simile perché i dati vengono spostati, non duplicati.

Nota

ALTERTABLEAPPENDsposta i blocchi di dati tra la tabella di origine e la tabella di destinazione. Per migliorare le prestazioni, ALTER TABLE APPEND non compatta lo storage come parte dell'operazione di aggiunta. Di conseguenza, l'utilizzo della memoria aumenta temporaneamente. Per recuperare lo spazio, esegui un'operazione VACUUM.

Le colonne con lo stesso nome devono avere anche attributi di colonna identici. Se la tabella di origine o la tabella di destinazione contiene colonne che non esistono nell'altra tabella, utilizzate i FILLTARGET parametri IGNOREEXTRA o per specificare come devono essere gestite le colonne aggiuntive.

Non puoi aggiungere una colonna di identità. Se entrambe le tabelle includono una colonna di identità, il comando non riesce. Se solo una tabella ha una colonna di identità, includi il IGNOREEXTRA parametro FILLTARGET o. Per ulteriori informazioni, consulta ALTERTABLEAPPENDnote di utilizzo.

È possibile aggiungere una IDENTITY colonna GENERATED BY DEFAULT AS. È possibile aggiornare le colonne definite come GENERATED BY DEFAULT AS IDENTITY con i valori forniti dall'utente. Per ulteriori informazioni, consulta ALTERTABLEAPPENDnote di utilizzo.

La tabella di destinazione deve essere una tabella permanente. Tuttavia, l'origine può essere una tabella permanente o una vista materializzata configurata per l'importazione di dati in streaming. Entrambe le tabelle devono utilizzare lo stesso stile di distribuzione e la stessa chiave di distribuzione, se ne è stata definita una. Se gli oggetti sono ordinati, entrambi gli oggetti devono utilizzare lo stesso stile di ordinamento e definire le stesse colonne come chiavi di ordinamento.

Un ALTER TABLE APPEND comando esegue automaticamente il commit immediatamente dopo il completamento dell'operazione. Non è possibile eseguire il rollback. Non puoi essere eseguito ALTER TABLE APPEND all'interno di un blocco di transazione (BEGIN... END). Per ulteriori informazioni sulle transazioni, consultare Isolamento serializzabile.

Privilegi richiesti

A seconda del ALTER TABLE APPEND comando, è richiesto uno dei seguenti privilegi:

  • Superuser

  • Utenti con il privilegio di ALTER TABLE sistema

  • Utenti con SELECT privilegi DELETE e privilegi sulla tabella di origine e INSERT privilegi sulla tabella di destinazione

Sintassi

ALTER TABLE target_table_name APPEND FROM [ source_table_name | source_materialized_view_name ] [ IGNOREEXTRA | FILLTARGET ]

L'aggiunta da una vista materializzata funziona solo nel caso in cui la vista materializzata sia configurata per Inserimento in streaming su una vista materializzata.

Parametri

target_table_name

Il nome della tabella a cui vengono aggiunte le righe. Specifica solo il nome della tabella o utilizzare il formato schema_name.table_name per utilizzare uno schema specifico. La tabella di destinazione deve essere una tabella permanente esistente.

FROMnome_tabella_origine

Il nome della tabella che fornisce le righe da aggiungere. Specifica solo il nome della tabella o utilizzare il formato schema_name.table_name per utilizzare uno schema specifico. La tabella di origine deve essere una tabella permanente esistente.

FROMnome_vista_materializzata di origine

Il nome di una vista materializzata che fornisce le righe da aggiungere. L'aggiunta da una vista materializzata funziona solo nel caso in cui la vista materializzata sia configurata per Inserimento in streaming su una vista materializzata. La vista materializzata di origine deve esistere già.

IGNOREEXTRA

Parola chiave che specifica che se la tabella di origine include colonne che non sono presenti nella tabella di destinazione, i dati nelle colonne aggiuntive devono essere eliminati. Non puoi usare con. IGNOREEXTRA FILLTARGET

FILLTARGET

Una parola chiave che specifica che se la tabella di destinazione include colonne che non sono presenti nella tabella di origine, le colonne devono essere riempite con il valore della DEFAULT colonna, se ne è stato definito uno, oppureNULL. Non puoi usare IGNOREEXTRA conFILLTARGET.

ALTERTABLEAPPENDnote di utilizzo

ALTERTABLEAPPENDsposta solo colonne identiche dalla tabella di origine alla tabella di destinazione. L'ordine delle colonne non ha importanza.

Se la tabella di origine o la tabella di destinazione contiene colonne aggiuntive, usa una delle due FILLTARGET o IGNOREEXTRA secondo le seguenti regole:

  • Se la tabella di origine contiene colonne che non esistono nella tabella di destinazione, includiIGNOREEXTRA. Il comando ignora le colonne aggiuntive nella tabella di origine.

  • Se la tabella di destinazione contiene colonne che non esistono nella tabella di origine, includiFILLTARGET. Il comando riempie le colonne aggiuntive nella tabella di destinazione con il valore o IDENTITY il valore di colonna predefinito, se ne è stato definito uno, oppureNULL.

  • Se sia la tabella di origine che la tabella di destinazione contengono colonne aggiuntive, il comando non riesce. Non puoi usare entrambi FILLTARGET eIGNOREEXTRA.

Se una colonna con lo stesso nome ma attributi diversi esiste in entrambe le tabelle, il comando non riesce. Le colonne con nome simile devono avere i seguenti attributi in comune:

  • Tipo di dati

  • Dimensione colonna

  • Codifica di compressione

  • Non null

  • Stile di ordinamento

  • Colonne con chiave di ordinamento

  • Stile di distribuzione

  • Colonne con chiave di distribuzione

Non puoi aggiungere una colonna di identità. Se sia la tabella di origine che la tabella di destinazione hanno colonne di identità, il comando non riesce. Se solo la tabella di origine ha una colonna di identità, includi il IGNOREEXTRA parametro in modo che la colonna di identità venga ignorata. Se solo la tabella di destinazione ha una colonna di identità, includi il FILLTARGET parametro in modo che la colonna di identità venga popolata in base alla IDENTITY clausola definita per la tabella. Per ulteriori informazioni, consulta DEFAULT.

È possibile aggiungere una colonna di identità predefinita all'istruzione. ALTER TABLE APPEND Per ulteriori informazioni, consulta CREATE TABLE.

ALTERTABLEAPPENDesempi

Supponiamo che l'organizzazione mantenga una tabella, SALES _MONTHLY, per registrare le transazioni di vendita correnti. Desideri spostare i dati dalla tabella delle transazioni alla SALES tabella, ogni mese.

È possibile utilizzare INSERT INTO i seguenti TRUNCATE comandi per eseguire l'operazione.

insert into sales (select * from sales_monthly); truncate sales_monthly;

Tuttavia, è possibile eseguire la stessa operazione in modo molto più efficiente utilizzando un ALTER TABLE APPEND comando.

Innanzitutto, eseguire una query sulla tabella del catalogo di sistema PG_ _ TABLE DEF per verificare che entrambe le tabelle abbiano le stesse colonne con attributi di colonna identici.

select trim(tablename) as table, "column", trim(type) as type, encoding, distkey, sortkey, "notnull" from pg_table_def where tablename like 'sales%'; table | column | type | encoding | distkey | sortkey | notnull -----------+------------+-----------------------------+----------+---------+---------+-------- sales | salesid | integer | lzo | false | 0 | true sales | listid | integer | none | true | 1 | true sales | sellerid | integer | none | false | 2 | true sales | buyerid | integer | lzo | false | 0 | true sales | eventid | integer | mostly16 | false | 0 | true sales | dateid | smallint | lzo | false | 0 | true sales | qtysold | smallint | mostly8 | false | 0 | true sales | pricepaid | numeric(8,2) | delta32k | false | 0 | false sales | commission | numeric(8,2) | delta32k | false | 0 | false sales | saletime | timestamp without time zone | lzo | false | 0 | false salesmonth | salesid | integer | lzo | false | 0 | true salesmonth | listid | integer | none | true | 1 | true salesmonth | sellerid | integer | none | false | 2 | true salesmonth | buyerid | integer | lzo | false | 0 | true salesmonth | eventid | integer | mostly16 | false | 0 | true salesmonth | dateid | smallint | lzo | false | 0 | true salesmonth | qtysold | smallint | mostly8 | false | 0 | true salesmonth | pricepaid | numeric(8,2) | delta32k | false | 0 | false salesmonth | commission | numeric(8,2) | delta32k | false | 0 | false salesmonth | saletime | timestamp without time zone | lzo | false | 0 | false

Quindi, guarda le dimensioni di ogni tabella.

select count(*) from sales_monthly; count ------- 2000 (1 row) select count(*) from sales; count ------- 412,214 (1 row)

Ora esegui il ALTER TABLE APPEND comando seguente.

alter table sales append from sales_monthly;

Guarda di nuovo le dimensioni di ogni tabella. La MONTHLY tabella SALES _ ora ha 0 righe e la SALES tabella è cresciuta di 2000 righe.

select count(*) from sales_monthly; count ------- 0 (1 row) select count(*) from sales; count ------- 414214 (1 row)

Se la tabella di origine ha più colonne rispetto alla tabella di destinazione, specificate il IGNOREEXTRA parametro. L'esempio seguente utilizza il IGNOREEXTRA parametro per ignorare le colonne aggiuntive nella LISTING tabella SALES _ durante l'aggiunta alla SALES tabella.

alter table sales append from sales_listing ignoreextra;

Se la tabella di destinazione ha più colonne rispetto alla tabella di origine, specificate il FILLTARGET parametro. L'esempio seguente utilizza il FILLTARGET parametro per popolare le colonne della REPORT tabella SALES _ che non esistono nella MONTH tabella SALES _.

alter table sales_report append from sales_month filltarget;

L'esempio seguente mostra un esempio di come utilizzare una ALTER TABLE APPEND vista materializzata come origine.

ALTER TABLE target_tbl APPEND FROM my_streaming_materialized_view;

I nomi delle tabelle e delle viste materializzate in questo esempio sono esempi. L'aggiunta da una vista materializzata funziona solo nel caso in cui la vista materializzata sia configurata per Inserimento in streaming su una vista materializzata. Sposta tutti i record della vista materializzata di origine in una tabella di destinazione con lo stesso schema della vista materializzata e lascia intatta la vista materializzata. Si tratta dello stesso comportamento di quando l'origine dei dati è una tabella.