Esecuzione di un'operazione di unione tramite specificazione di un elenco di colonne senza l'uso del comando MERGE - 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 un'operazione di unione tramite specificazione di un elenco di colonne senza l'uso del comando MERGE

Quando esegui l'operazione di unione descritta nella procedura, inserisci tutti i passaggi in un'unica transazione. Verrà eseguito il rollback della transazione se una fase restituisce un errore. L'utilizzo di una singola transazione riduce anche il numero di commit, risparmiando tempo e risorse.

Per eseguire un'operazione di unione tramite specificazione di un elenco di colonne
  1. Inserisci l'intera operazione in un unico blocco di transazioni.

    begin transaction; … end transaction;
  2. Creare una tabella di gestione temporanea e quindi popolarla con i dati da unire, come mostrato nel seguente pseudocodice.

    create temp table stage (like target); insert into stage select * from source where source.filter = 'filter_expression';
  3. Aggiornare la tabella di destinazione tramite un inner join con la tabella di gestione temporanea.

    • Nella clausola UPDATE, elencare in modo esplicito le colonne da aggiornare.

    • Eseguire un inner join con la tabella di gestione temporanea.

    • Se la chiave di distribuzione è diversa dalla chiave primaria e la chiave di distribuzione non viene aggiornata, aggiungere un predicato di join ridondante alle colonne della chiave di distribuzione per abilitare un join collocato. Per verificare che la query utilizzerà un join collocato, esegui la query con EXPLAIN e controlla DS_DIST_NONE su tutti i join. Per ulteriori informazioni, consulta Valutazione del piano di query

    • Se la tabella di destinazione è ordinata per timestamp, aggiungere un predicato per sfruttare le scansioni a intervallo limitato nella tabella di destinazione. Per ulteriori informazioni, consulta Best practice di Amazon Redshift per la progettazione di query.

    • Se non utilizzi tutte le righe nell'unione, aggiungi una clausola per filtrare le righe che desideri modificare. Ad esempio, aggiungere un filtro disuguaglianza a una o più colonne per escludere le righe che non sono state modificate.

    • Inserire le operazioni di aggiornamento, eliminazione e inserimento in un singolo blocco di transazione, in modo che in caso di problemi venga eseguito il rollback.

    Ad esempio:

    begin transaction; update target set col1 = stage.col1, col2 = stage.col2, col3 = 'expression' from stage where target.primarykey = stage.primarykey and target.distkey = stage.distkey and target.col3 > 'last_update_time' and (target.col1 != stage.col1 or target.col2 != stage.col2 or target.col3 = 'filter_expression');
  4. Eliminare le righe non necessarie dalla tabella di gestione temporanea tramite un inner join con la tabella di destinazione. Alcune righe nella tabella di destinazione corrispondono già alle righe corrispondenti nella tabella di gestione temporanea e altre sono state aggiornate nella fase precedente. In entrambi i casi, non sono necessarie per l'inserimento.

    delete from stage using target where stage.primarykey = target.primarykey;
  5. Inserire tutte le righe rimanenti dalla tabella di gestione temporanea. Utilizzare lo stesso elenco di colonne nella clausola VALUES utilizzato nell'istruzione UPDATE nella fase due.

    insert into target (select col1, col2, 'expression' from stage); end transaction;
  6. Rilasciare la tabella di gestione temporanea.

    drop table stage;