Esecuzione di una copia completa - 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à.

Esecuzione di una copia completa

Una copia completa ricrea e ripopola una tabella tramite inserimento di massa, che ordina automaticamente la tabella. Se una tabella ha una regione ampia e non ordinata, una copia completa è molto più veloce di un vacuum. Ti consigliamo di effettuare aggiornamenti simultanei durante un'operazione di copia completa solo se riesci a tenerne traccia. Una volta completato il processo, sposta gli aggiornamenti delta nella nuova tabella. Un'VACUUMoperazione supporta automaticamente gli aggiornamenti simultanei.

È possibile scegliere uno dei seguenti metodi per creare una copia della tabella originale:

  • Usa la tabella originale. DDL

    Se disponibile, questo è il metodo più veloce e preferito. CREATE TABLE DDL Se crei una nuova tabella, è possibile specificare tutti gli attributi di tabella e colonna, comprese la chiave primaria e le chiavi esterne. È possibile trovare l'originale DDL utilizzando la SHOW TABLE funzione.

  • Usa CREATE TABLELIKE.

    Se l'originale non DDL è disponibile, è possibile utilizzarlo CREATE TABLE LIKE per ricreare la tabella originale. La nuova tabella eredita la codifica, la chiave di distribuzione, la chiave di ordinamento e gli attributi non null della tabella padre. La nuova tabella non eredita la chiave primaria e gli attributi di chiave esterna della tabella padre, ma è possibile aggiungerli utilizzando ALTER TABLE.

  • Crea una tabella temporanea e tronca la tabella originale.

    Se è necessario mantenere gli attributi della chiave primaria e della chiave esterna della tabella principale. Se la tabella principale ha delle dipendenze, puoi usare... CREATE TABLE AS (CTAS) per creare una tabella temporanea. Quindi troncare la tabella originale e popolarla dalla tabella temporanea.

    L'utilizzo di una tabella temporanea migliora le prestazioni in modo significativo rispetto all'utilizzo di una tabella permanente, ma c'è il rischio di perdere dati. La tabella temporanea viene automaticamente eliminata alla fine della sessione in cui è stata creata. TRUNCATEsi impegna immediatamente, anche se si trova all'interno di un blocco di transazione. Se l'operazione TRUNCATE ha esito positivo ma la sessione si interrompe prima del INSERT completamento di quanto segue, i dati vengono persi. Se la perdita di dati non è accettabile, utilizza una tabella permanente.

Dopo aver creato una copia di una tabella, potrebbe essere necessario concedere l'accesso alla nuova tabella. È possibile utilizzare GRANT per definire i privilegi di accesso. Per visualizzare e concedere tutti i privilegi di accesso di una tabella, devi avere uno dei seguenti ruoli:

  • Un utente con privilegi avanzati.

  • Il proprietario della tabella che si desidera copiare.

  • Un utente con il ACCESS SYSTEM TABLE privilegio di visualizzare i privilegi della tabella e con il privilegio di concessione per tutte le autorizzazioni pertinenti.

Inoltre, potrebbe essere necessario concedere l'autorizzazione all'utilizzo dello schema in cui si trova la copia completa. È necessario concedere l'autorizzazione all'utilizzo se lo schema della copia completa è diverso dallo schema della tabella originale e inoltre non è lo schema public. Per visualizzare e concedere tutti i privilegi di utilizzo, devi avere uno dei seguenti ruoli:

  • Un utente con privilegi avanzati.

  • Un utente che può concedere l'USAGEautorizzazione per lo schema di Deep Copy.

Per eseguire una copia approfondita utilizzando la tabella originale DDL
  1. (Facoltativo) Ricrea la tabella DDL eseguendo uno script chiamatov_generate_tbl_ddl.

  2. Crea una copia della tabella utilizzando l'originale CREATE TABLEDDL.

  3. Utilizzate un'SELECTistruzione INSERTINTO... per compilare la copia con i dati della tabella originale.

  4. Verifica le autorizzazioni concesse nella tabella precedente. È possibile visualizzare queste autorizzazioni nella vista di PRIVILEGES sistema SVV _ RELATION _.

  5. Se necessario, concedi le autorizzazioni della tabella precedente alla nuova tabella.

  6. Concedi l'autorizzazione all'utilizzo a tutti i gruppi e utenti con privilegi nella tabella originale. Questo passaggio non è necessario se la tabella di copia completa è nello schema public o nello stesso schema della tabella originale.

  7. Rilasciare la tabella originale.

  8. Utilizzate un'ALTERTABLEistruzione per rinominare la copia con il nome della tabella originale.

L'esempio seguente esegue una copia approfondita della SAMPLE tabella utilizzando un duplicato di SAMPLE nome sample_copy.

--Create a copy of the original table in the sample_namespace namespace using the original CREATE TABLE DDL. create table sample_namespace.sample_copy ( … ); --Populate the copy with data from the original table in the public namespace. insert into sample_namespace.sample_copy (select * from public.sample); --Check SVV_RELATION_PRIVILEGES for the original table's privileges. select * from svv_relation_privileges where namespace_name = 'public' and relation_name = 'sample' order by identity_type, identity_id, privilege_type; --Grant the original table's privileges to the copy table. grant DELETE on table sample_namespace.sample_copy to group group1; grant INSERT, UPDATE on table sample_namespace.sample_copy to group group2; grant SELECT on table sample_namespace.sample_copy to user1; grant INSERT, SELECT, UPDATE on table sample_namespace.sample_copy to user2; --Grant usage permission to every group and user that has privileges in the original table. grant USAGE on schema sample_namespace to group group1, group group2, user1, user2; --Drop the original table. drop table public.sample; --Rename the copy table to match the original table's name. alter table sample_namespace.sample_copy rename to sample;
Per eseguire una copia approfondita utilizzando CREATE TABLE LIKE
  1. Crea una nuova tabella usando CREATE TABLELIKE.

  2. Usa un'SELECTistruzione INSERTINTO... per copiare le righe dalla tabella corrente alla nuova tabella.

  3. Verifica le autorizzazioni concesse nella tabella precedente. È possibile visualizzare queste autorizzazioni nella vista di PRIVILEGES sistema SVV RELATION _ _.

  4. Se necessario, concedi le autorizzazioni della tabella precedente alla nuova tabella.

  5. Concedi l'autorizzazione all'utilizzo a tutti i gruppi e utenti con privilegi nella tabella originale. Questo passaggio non è necessario se la tabella di copia completa è nello schema public o nello stesso schema della tabella originale.

  6. Rilasciare la tabella attuale.

  7. Utilizzate un'ALTERTABLEistruzione per rinominare la nuova tabella con il nome della tabella originale.

L'esempio seguente esegue una copia approfondita della SAMPLE tabella utilizzando CREATE TABLELIKE.

--Create a copy of the original table in the sample_namespace namespace using CREATE TABLE LIKE. create table sameple_namespace.sample_copy (like public.sample); --Populate the copy with data from the original table. insert into sample_namespace.sample_copy (select * from public.sample); --Check SVV_RELATION_PRIVILEGES for the original table's privileges. select * from svv_relation_privileges where namespace_name = 'public' and relation_name = 'sample' order by identity_type, identity_id, privilege_type; --Grant the original table's privileges to the copy table. grant DELETE on table sample_namespace.sample_copy to group group1; grant INSERT, UPDATE on table sample_namespace.sample_copy to group group2; grant SELECT on table sample_namespace.sample_copy to user1; grant INSERT, SELECT, UPDATE on table sample_namespace.sample_copy to user2; --Grant usage permission to every group and user that has privileges in the original table. grant USAGE on schema sample_namespace to group group1, group group2, user1, user2; --Drop the original table. drop table public.sample; --Rename the copy table to match the original table's name. alter table sample_namespace.sample_copy rename to sample;
Per eseguire una copia completa tramite la creazione di una tabella temporanea e il troncamento della tabella originale
  1. CREATETABLEUtilizzate AS per creare una tabella temporanea con le righe della tabella originale.

  2. Troncare la tabella attuale.

  3. Utilizzate un'SELECTistruzione INSERTINTO... per copiare le righe dalla tabella temporanea alla tabella originale.

  4. Rilasciare la tabella temporanea.

L'esempio seguente esegue una copia completa della SALES tabella creando una tabella temporanea e troncando la tabella originale. Poiché la tabella originale resta, non è necessario concedere autorizzazioni alla tabella di copia.

--Create a temp table copy using CREATE TABLE AS. create temp table salestemp as select * from sales; --Truncate the original table. truncate sales; --Copy the rows from the temporary table to the original table. insert into sales (select * from salestemp); --Drop the temporary table. drop table salestemp;