Warum führt Amazon Redshift den COPY ANALYZE-Prozess aus, wenn STATUPDATE deaktiviert ist?

Lesedauer: 2 Minute
0

Ich habe versucht, den Befehl COPY zu verwenden, um Daten in eine neue Tabelle in Amazon Redshift zu laden. Ich habe sogar den COMPUPDATE OFF-Parameter hinzugefügt. Warum läuft COPY ANALYZE immer noch?

Kurzbeschreibung

Bevor Sie eine Tabelle in Amazon Redshift erstellen, wählen Sie den Verteilungsstil Ihrer Tabelle aus. Wenn eine Tabelle keinen Verteilungsstil angibt, wird standardmäßig die AUTO-Verteilung verwendet. Die AUTO-Verteilungsfunktion von Amazon Redshift verwendet dann den COPY ANALYZE -Prozess, um zu ermitteln, ob die Tabelle die EVEN- oder ALL-Verteilung verwenden soll.

Hinweis: Der Parameter COMPUPDATE OFF führt COPY ANALYZE weiterhin für Tabellen aus, die einen AUTO-Verteilungsstil verwenden. Der Parameter STATUPDATE OFF deaktiviert oder unterdrückt den Befehl COPY ANALYZE nicht.

Lösung

1.    Überprüfen Sie den aktuellen Verteilungsstil einer Tabelle, indem Sie SHOW TABLE ausführen:

SHOW TABLE [schema_name.]table_name

Hinweis: Standardmäßig wendet Amazon Redshift die AUTO-Verteilung an, wenn in der CREATE TABLE-Anweisung kein Verteilungsstil angegeben ist.

2.    Wenn die AUTO-Verteilung aktiviert ist, erstellen Sie eine Tabelle mit einem definierten Verteilungsstil. Die Angabe eines Verteilungsstils verhindert, dass COPY ANALYZE ausgeführt wird.

Das folgende Beispiel spezifiziert einen EVEN-Verteilungsstil:

create table rs_example_test (id int)diststyle even;

Weitere Informationen zu Verteilungsstilen finden Sie unter Arbeiten mit Datenverteilungsstilen.

3.    Verwenden Sie den Befehl COPY, um die Daten in Ihre Tabelle zu laden, und hängen Sie sie dann mit den STATUPDATE OFF -Parametern an.

Hinweis: Es hat sich bewährt, den Befehl COPY zu verwenden, um große Datenmengen zu laden, anstatt einzelne INSERT-Anweisungen zu verwenden. Dadurch wird das Risiko von Leistungsproblemen minimiert.

4.    Führen Sie eine Abfrage in der SVL\ _STATEMENTTEXT-Systemtabelle aus und filtern Sie dann nach der Prozess-ID (PID), die sich auf Ihre Sitzung bezieht:

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;

Die obige Syntax überprüft, ob COPY ANALYZE als Teil der COPY -Transaktion ausgeführt wurde.

Die Ausgabe könnte wie folgt aussehen:

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

Dies bestätigt, dass COPY ANALYZE nicht mehr als Teil der COPY -Transaktion ausgeführt wird.


Verwandte Informationen

Verwenden einer Staging-Tabelle, um eine Zusammenführung durchzuführen (Upsert)

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren