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.
Verstehen Sie die Ergebnisse der EXPLAIN Athena-Erklärung
Dieses Thema bietet eine kurze Anleitung zu den operativen Begriffen, die in den Athena-EXPLAIN
-Anweisungsergebnissen verwendet werden.
EXPLAINAusgabetypen für Anweisungen
EXPLAIN
-Ausgabetypen können zwei Typen haben:
-
Logischer Plan — Zeigt den logischen Plan an, den die SQL Engine zur Ausführung einer Anweisung verwendet. Die Syntax für diese Option lautet
EXPLAIN
oderEXPLAIN (TYPE LOGICAL)
. -
Verteilter Plan – Zeigt einen Ausführungsplan in einer verteilten Umgebung an. Die Ausgabe zeigt Fragmente, die Verarbeitungsschritte sind. Jedes Planfragment wird von einem oder mehreren Knoten verarbeitet. Daten können zwischen den Knoten ausgetauscht werden, die die Fragmente verarbeiten. Die Syntax für diese Option lautet
EXPLAIN (TYPE DISTRIBUTED)
In der Ausgabe für einen verteilten Plan werden Fragmente (Verarbeitungsphasen) wie folgt gekennzeichnet
Fragment
number
[fragment_type
], wonumber
ist eine auf Null basierende Ganzzahl undfragment_type
gibt an, wie das Fragment von den Knoten ausgeführt wird. Die Fragmenttypen, die Einblicke in das Layout des Datenaustauschs geben, werden in der folgenden Tabelle beschrieben.Fragment-Typen für verteilte PläneFragment-Typ Beschreibung SINGLE
Das Fragment wird auf einem einzelnen Knoten ausgeführt. HASH
Das Fragment wird auf einer festen Anzahl von Knoten ausgeführt. Die Eingabedaten werden mit einer Hash-Funktion verteilt. ROUND_ROBIN
Das Fragment wird auf einer festen Anzahl von Knoten ausgeführt. Die Eingabedaten werden auf Round-Robin-Weise verteilt. BROADCAST
Das Fragment wird auf einer festen Anzahl von Knoten ausgeführt. Die Eingabedaten werden an alle Knoten übertragen. SOURCE
Das Fragment wird auf Knoten ausgeführt, auf denen Eingabesplits zugegriffen wird.
Exchange
Die austauschbezogenen Begriffe beschreiben, wie Daten zwischen Worker-Knoten ausgetauscht werden. Übertragungen können entweder lokal oder remote erfolgen.
- LocalExchange [
exchange_type
] -
Überträgt Daten lokal innerhalb von Worker-Knoten für verschiedene Phasen einer Abfrage. Der Wert für
exchange_type
kann einer der logischen oder verteilten Austauschtypen sein, wie weiter unten in diesem Abschnitt beschrieben. - RemoteExchange [
exchange_type
] -
Überträgt Daten zwischen Worker-Knoten für verschiedene Phasen einer Abfrage. Der Wert für
exchange_type
kann einer der logischen oder verteilten Austauschtypen sein, wie weiter unten in diesem Abschnitt beschrieben.
Logische Austausch-Typen
Die folgenden Austausch-Typen beschreiben Aktionen, die während der Austauschphase eines logischen Plans durchgeführt wurden.
-
GATHER
– Ein einzelner Worker-Knoten sammelt die Ausgabe von allen anderen Worker-Knoten. Beispielsweise sammelt die letzte Stufe einer Auswahlabfrage Ergebnisse von allen Knoten und schreibt die Ergebnisse in Amazon S3. -
REPARTITION
– Sendet die Zeilendaten an einen bestimmten Worker basierend auf dem Partitionierungsschema, das für den nächsten Operator erforderlich ist. -
REPLICATE
– Kopiert die Zeilendaten in alle Worker.
Verteilte Austausch-Typen
Die folgenden Austauschtypen geben das Layout der Daten an, wenn sie zwischen Knoten in einem verteilten Plan ausgetauscht werden.
-
HASH
– Der Austausch verteilt Daten an mehrere Ziele mithilfe einer Hash-Funktion. -
SINGLE
– Der Austausch verteilt Daten an ein einzelnes Ziel.
Scanning
Die folgenden Bedingungen beschreiben, wie Daten während einer Abfrage gescannt werden.
- TableScan
-
Scannt die Quelldaten einer Tabelle von Amazon S3 oder einem Apache-Hive-Connector und wendet die aus dem Filterprädikat generierte Partitionsbereinigung an.
- ScanFilter
-
Scannt die Quelldaten einer Tabelle von Amazon S3 oder einem Hive-Connector und wendet die Partitionsbereinigung an, die aus dem Filterprädikat und aus zusätzlichen Filterprädikaten generiert wurde, die nicht durch die Partitionsbereinigung angewendet wurden.
- ScanFilterProject
-
Scannt zunächst die Quelldaten einer Tabelle von Amazon S3 oder einem Hive-Connector und wendet die Partitionsbereinigung an, die aus dem Filterprädikat und aus zusätzlichen Filterprädikaten generiert wurde, die nicht durch die Partitionsbereinigung angewendet wurden. Ändert dann das Speicherlayout der Ausgabedaten in eine neue Projektion, um die Leistung späterer Phasen zu verbessern.
Join
Verknüpft Daten zwischen zwei Tabellen. Verknüpfungen können nach Verknüpfungstyp und nach Verteilungstyp kategorisiert werden.
JOIN-Typen
Verknüpfungstypen definieren die Art und Weise, in der der Join-Vorgang ausgeführt wird.
CrossJoin— Erzeugt das kartesische Produkt der beiden verbundenen Tabellen.
InnerJoin— Wählt Datensätze aus, deren Werte in beiden Tabellen übereinstimmen.
LeftJoin— Wählt alle Datensätze aus der linken Tabelle und die passenden Datensätze aus der rechten Tabelle aus. Wenn keine Übereinstimmung gefunden wird, ist das Ergebnis auf der rechten SeiteNULL.
RightJoin— Wählt alle Datensätze aus der rechten Tabelle und die passenden Datensätze aus der linken Tabelle aus. Wenn keine Übereinstimmung gefunden wird, ist das Ergebnis auf der linken SeiteNULL.
FullJoin— Wählt alle Datensätze aus, bei denen es eine Übereinstimmung in den linken oder rechten Tabellendatensätzen gibt. Die verknüpfte Tabelle enthält alle Datensätze aus beiden Tabellen und füllt fehlende Treffer auf beiden Seiten aus. NULLs
Anmerkung
Aus Leistungsgründen kann das Abfragemodul eine Join-Abfrage in einen anderen Join-Typ umschreiben, um dieselben Ergebnisse zu erzielen. Beispielsweise kann eine Inner-Join-Abfrage mit einem Prädikat für eine Tabelle in ein CrossJoin
umgeschrieben werden. Dadurch wird das Prädikat in die Scanphase der Tabelle verschoben, sodass weniger Daten gescannt werden.
Join-Verteilungs-Typen
Verteilungstypen definieren, wie Daten zwischen Worker-Knoten ausgetauscht werden, wenn der Join-Vorgang ausgeführt wird.
Partitioniert – Sowohl die linke als auch die rechte Tabelle sind über alle Worker-Knoten hinweg hashpartitioniert. Partitionierte Verteilung verbraucht weniger Speicher in jedem Knoten. Partitionierte Verteilung kann viel langsamer sein als replizierte Joins. Partitionierte Joins eignen sich, wenn Sie zwei große Tabellen verbinden.
Repliziert – Eine Tabelle wird über alle Worker-Knoten hinweg hashpartitioniert, und die andere Tabelle wird auf alle Worker-Knoten repliziert, um den Join-Vorgang auszuführen. Die replizierte Verteilung kann viel schneller sein als partitionierte Joins, verbraucht jedoch mehr Speicher in jedem Worker-Knoten. Wenn die replizierte Tabelle zu groß ist, kann es im Worker-Knoten zu einem out-of-memory Fehler kommen. Replizierte Joins sind geeignet, wenn eine der verknüpften Tabellen klein ist.