Verteilungsbeispiele - Amazon Redshift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verteilungsbeispiele

Die folgenden Beispiele zeigen, wie Daten gemäß den Optionen verteilt werden, die Sie in der CREATE TABLE Anweisung definieren.

DISTKEYBeispiele

Schauen Sie sich das Schema der USERS Tabelle in der TICKIT Datenbank an. USERIDist definiert als die SORTKEY Spalte und die DISTKEY Spalte:

select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 'users'; column | type | encoding | distkey | sortkey ---------------+------------------------+----------+---------+--------- userid | integer | none | t | 1 username | character(8) | none | f | 0 firstname | character varying(30) | text32k | f | 0 ...

USERIDist eine gute Wahl für die Verteilungsspalte in dieser Tabelle. Wenn Sie die DISKUSAGE Systemansicht SVV _ abfragen, können Sie feststellen, dass die Tabelle sehr gleichmäßig verteilt ist. Spaltennummern basieren auf Null, ebenso wie Spalte USERID 0.

select slice, col, num_values as rows, minvalue, maxvalue from svv_diskusage where name='users' and col=0 and rows>0 order by slice, col; slice| col | rows | minvalue | maxvalue -----+-----+-------+----------+---------- 0 | 0 | 12496 | 4 | 49987 1 | 0 | 12498 | 1 | 49988 2 | 0 | 12497 | 2 | 49989 3 | 0 | 12499 | 3 | 49990 (4 rows)

Die Tabelle enthält 49.990 Zeilen. Die Spalte für Zeilen (num_values) zeigt, dass jeder Slice ungefähr dieselbe Zahl von Zeilen enthält. Die Spalten für den Mindest- und Maximalwert (minvalue und maxvalue) zeigen den Bereich der Werte in jedem Slice. Jedes Segment umfasst fast den gesamten Wertebereich, sodass die Wahrscheinlichkeit groß ist, dass jedes Segment an der Ausführung einer Abfrage beteiligt ist, die nach einem bestimmten Benutzerbereich filtert. IDs

Dieses Beispiel zeigt eine Verteilung für ein kleines Testsystem. Die Gesamtzahl der Slices ist in der Regel sehr viel höher.

Wenn Sie häufig mithilfe der STATE Spalte einer Gruppe beitreten oder eine Gruppe bilden, können Sie sich für die Verteilung auf die STATE Spalte entscheiden. Das folgende Beispiel zeigt einen Fall, in dem Sie eine neue Tabelle mit denselben Daten wie die USERS Tabelle erstellen, diese aber DISTKEY auf die STATE Spalte setzen. In diesem Fall ist die Verteilung nicht so gleichmäßig. Slice 0 (13.587 Zeilen) enthält ungefähr 30 % mehr Zeilen als Slice 3 (10.150 Zeilen). In einer sehr viel größeren Tabelle könnte sich diese Verteilungsverzerrung nachteilig auf die Abfrageverarbeitung auswirken.

create table userskey distkey(state) as select * from users; select slice, col, num_values as rows, minvalue, maxvalue from svv_diskusage where name = 'userskey' and col=0 and rows>0 order by slice, col; slice | col | rows | minvalue | maxvalue ------+-----+-------+----------+---------- 0 | 0 | 13587 | 5 | 49989 1 | 0 | 11245 | 2 | 49990 2 | 0 | 15008 | 1 | 49976 3 | 0 | 10150 | 4 | 49986 (4 rows)

DISTSTYLEEVENBeispiel

Wenn Sie eine neue Tabelle mit denselben Daten wie die USERS Tabelle erstellen, aber den Wert DISTSTYLE auf setzenEVEN, werden die Zeilen immer gleichmäßig über die Segmente verteilt.

create table userseven diststyle even as select * from users; select slice, col, num_values as rows, minvalue, maxvalue from svv_diskusage where name = 'userseven' and col=0 and rows>0 order by slice, col; slice | col | rows | minvalue | maxvalue ------+-----+-------+----------+---------- 0 | 0 | 12497 | 4 | 49990 1 | 0 | 12498 | 8 | 49984 2 | 0 | 12498 | 2 | 49988 3 | 0 | 12497 | 1 | 49989 (4 rows)

Da die Verteilung jedoch nicht auf einer spezifischen Spalte basiert, kann die Leistung der Abfrageverarbeitung nachlassen, besonders, wenn für die Tabelle ein Join mit anderen Tabellen ausgeführt wurde. Eine fehlende Verteilung anhand einer Join-Spalte wirkt sich häufig auf den Typ der Join-Operation aus, der effizient ausgeführt werden kann. Join-, Aggregations- und Gruppierungsoperationen sind optimiert, wenn beide Tabellen anhand der jeweiligen Join-Spalten verteilt und sortiert sind.

DISTSTYLEALLBeispiel

Wenn Sie eine neue Tabelle mit denselben Daten wie die USERS Tabelle erstellen, aber den Wert DISTSTYLE auf setzenALL, werden alle Zeilen auf das erste Segment jedes Knotens verteilt.

select slice, col, num_values as rows, minvalue, maxvalue from svv_diskusage where name = 'usersall' and col=0 and rows > 0 order by slice, col; slice | col | rows | minvalue | maxvalue ------+-----+-------+----------+---------- 0 | 0 | 49990 | 4 | 49990 2 | 0 | 49990 | 2 | 49990 (4 rows)