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.
ERLÄUTERN Sie die Datenumverteilung für Amazon Redshift Redshift-Abfragepläne
Während der Join-Schritte muss ein Slice möglicherweise mit Daten arbeiten, die nicht lokal gespeichert sind, und die Netzwerkübertragung (Bewegung von Daten zwischen Rechenknoten) ist der teuerste Abfragevorgang.
Die EXPLAIN Ausgabe für Joins gibt auch eine Methode an, wie Daten innerhalb eines Clusters verschoben werden, um den Zusammenschluss zu erleichtern. Diese Datenbewegung kann entweder eine Rundsendung oder eine Umverteilung sein.
-
Bei einer Rundsendung werden die Datenwerte von der einen Seite des Joins von jedem Verarbeitungsknoten an jeden anderen Verarbeitungsknoten gesendet, sodass jeder Verarbeitungsknoten am Ende der Operation eine vollständige Kopie der Daten hat.
-
Bei einer Umverteilung werden die jeweiligen Datenwerte von ihrer aktuellen Slice an eine neue Slice gesendet, die sich möglicherweise auf einem anderen Knoten befindet. Die Daten werden normalerweise entsprechend dem Verteilungsschlüssel der anderen Tabelle des Joins umverteilt, wenn eine der Spalten der Join-Operation dieser Verteilungsschlüssel ist. Wenn keine der beiden Tabellen Verteilungsschlüssel in der jeweils anderen Tabelle hat, werden entweder beide Tabellen verteilt, oder die innere Tabelle wird an alle Knoten rundgesendet.
Die EXPLAIN Ausgabe verweist auch auf innere und äußere Tabellen.
-
Die innere Tabelle wird zuerst gescannt und erscheint am Ende des Abfrageplans. Die innere Tabelle ist die Tabelle, die nach passenden Zeilen in der Build-Tabelle durchsucht wird. Normalerweise ist eine innere Tabelle im Speicher die Quelltabelle für das Hashing, und wenn möglich, ist es die kleinere Tabelle der beiden, die verknüpft wird.
-
Die äußere Tabelle ist die Quelle der Zeilen, die mit der inneren Tabelle abgeglichen werden, und wird normalerweise von der Festplatte gelesen. Der Abfrageoptimierer wählt die innere und äußere Tabelle auf der Grundlage von Datenbankstatistiken aus der letzten Ausführung des
ANALYZEBefehls aus. Die Reihenfolge der Tabellen in derFROMKlausel einer Abfrage bestimmt nicht, welche Tabelle innerlich und welche äußerlich ist.
Die folgenden Attribute in Abfrageplänen ermöglichen zu identifizieren, welche Daten bei der Ausführung einer Abfrage bewegt werden:
-
DS_BCAST_INNER — Gibt an, dass eine Kopie der gesamten inneren Join-Tabelle an alle Rechenknoten gesendet wird.
-
DS_DIST_ALL_NONE — Es ist keine Neuverteilung erforderlich, da die innere Tabelle bereits an jeden Knoten verteilt wurde, der verwendet.
DISTSTYLE ALLDie gesamte Tabelle befindet sich auf jedem Rechenknoten. -
DS_DIST_NONE — Es ist keine Umverteilung erforderlich, da die entsprechenden Bereiche auf den Rechenknoten angeordnet sind. Dies ist die effizienteste Option, da keine Netzwerkübertragung stattfindet.
-
DS_DIST_INNER — Zeigt an, dass die innere Join-Tabelle neu verteilt wurde. Wenn die innere Tabelle viel kleiner ist oder selten aktualisiert wird, sollten Sie erwägen, diese Tabelle in zu ändern.
DISTSTYLE ALL -
DS_DIST_OUTER — Zeigt an, dass die äußere Join-Tabelle neu verteilt wird. Wenn die äußere Tabelle viel kleiner ist oder selten aktualisiert wird, sollten Sie erwägen, diese Tabelle in zu ändern.
DISTSTYLE ALL -
DS_DIST_ALL_INNER — Gibt an, dass die innere Join-Tabelle an einen einzelnen Knoten gesendet wird, weil die Join-Tabelle verwendet.
DISTSTYLE ALLDieser Join wird auf einem einzelnen Knoten ausgeführt und ist wahrscheinlich langsam. -
DS_DIST_BOTH — Gibt an, dass beide Tabellen im Join an alle Knoten neu verteilt werden. Dies ist die schlechteste mögliche Option.