Perché Amazon Redshift esegue il processo COPY ANALYZE quando STATUPDATE è disattivato?

3 minuti di lettura
0

Ho provato a usare il comando COPY per caricare i dati in una nuova tabella di Amazon Redshift. Ho anche aggiunto il parametro COMPUPDATE OFF. Perché COPY ANALYZE è ancora in esecuzione?

Breve descrizione

Prima di creare una tabella in Amazon Redshift, seleziona il suo stile di distribuzione. Se una tabella non specifica uno stile di distribuzione, per impostazione predefinita questo è la distribuzione AUTOMATICA. La funzionalità di distribuzione AUTOMATICA di Amazon Redshift utilizza quindi il processo COPY ANALYZE per determinare se la tabella deve utilizzare la distribuzione EVEN oppure ALL.

Nota: Il parametro COMPUPDATE OFF esegue ancora COPY ANALYZE sulle tabelle utilizzando uno stile di distribuzione AUTOMATICA. Il parametro STATUPDATE OFF non disabilita o reprime il comando COPY ANALYZE.

Soluzione

  1. Verifica lo stile di distribuzione corrente di una tabella eseguendo uno SHOW TABLE:
SHOW TABLE [schema_name.]table_name

Nota: Per impostazione predefinita, Amazon Redshift applica la distribuzione AUTO se non è specificato uno stile di distribuzione nell'istruzione CREATE TABLE.

  1. Se la distribuzione AUTOMATICA è attivata, crea una tabella con uno stile di distribuzione definito. La specificazione di uno stile di distribuzione impedisce l'esecuzione di COPY ANALYZE.

L'esempio seguente specifica uno stile di distribuzione EVEN:

create table rs_example_test (id int)diststyle even;

Per ulteriori informazioni sugli stili di distribuzione, consulta Utilizzo degli stili di distribuzione dei dati.

  1. Utilizza il comando COPY per caricare i dati nella tabella, quindi aggiungili con i parametri STATUPDATE OFF.

Nota: È consigliabile utilizzare il comando COPY per caricare grandi quantità di dati, anziché utilizzare singole istruzioni INSERT. Questo riduce al minimo il rischio di problemi di prestazioni.

  1. Esegui una query sulla tabella di sistema SVL_STATEMENTTEXT, quindi filtra in base all'ID del processo (PID) relativo alla tua sessione:
select userid, xid, pid, trim(label) as label, starttime, endtime, sequence, trim(type) as type, left(text,60) text from svl_statementtext where pid = 26815 order by xid, starttime, sequence;

La sintassi precedente controlla se COPY ANALYZE è stato eseguito come parte della transazione COPY.

L'output potrebbe essere simile al seguente:

userid      xid            pid    label      starttime            endtime               sequence     type      text
100       78915    26815   default      2019-03-19  14:06:19    2019-03-19 14:06:21   0             QUERY      copy rs_test3 from 's3://xxxxx-rs-log/AWSLogs/rs_test2.csv'\
100       78915    26815   default      2019-03-19  14:06:21    2019-03-19 14:06:21   0             UTILITY  COMMIT

Ciò conferma che COPY ANALYZE non viene più eseguito come parte della transazione COPY.


Informazioni correlate

Usa una tabella intermedia per eseguire un'unione (upsert)

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa