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.
Abfrageleistung von Amazon Redshift Spectrum
In diesem Thema wird beschrieben, wie die Redshift Spectrum-Abfrageleistung verbessert werden kann.
Sehen Sie sich den Abfrageplan an, um zu ermitteln, welche Schritte auf die Amazon-Redshift-Spectrum-Ebene übertragen wurden.
Die folgenden Schritte beziehen sich auf die Redshift Spectrum-Abfrage:
-
S3 Seq Scan
-
S3 HashAggregate
-
S3 Query Scan
-
Seq-Scan PartitionInfo
-
Partition Loop
Das folgende Beispiel zeigt den Abfrageplan für eine Abfrage, die eine externe mit einer lokalen Tabelle verbindet. Beachten Sie die HashAggregate Schritte S3 Seq Scan und S3, die für die Daten auf Amazon S3 ausgeführt wurden.
explain select top 10 spectrum.sales.eventid, sum(spectrum.sales.pricepaid) from spectrum.sales, event where spectrum.sales.eventid = event.eventid and spectrum.sales.pricepaid > 30 group by spectrum.sales.eventid order by 2 desc;
QUERY PLAN ----------------------------------------------------------------------------- XN Limit (cost=1001055770628.63..1001055770628.65 rows=10 width=31) -> XN Merge (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Merge Key: sum(sales.derived_col2) -> XN Network (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Send to leader -> XN Sort (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Sort Key: sum(sales.derived_col2) -> XN HashAggregate (cost=1055770620.49..1055770620.99 rows=200 width=31) -> XN Hash Join DS_BCAST_INNER (cost=3119.97..1055769620.49 rows=200000 width=31) Hash Cond: ("outer".derived_col1 = "inner".eventid) -> XN S3 Query Scan sales (cost=3010.00..5010.50 rows=200000 width=31) -> S3 HashAggregate (cost=3010.00..3010.50 rows=200000 width=16) -> S3 Seq Scan spectrum.sales location:"s3://redshift-downloads/tickit/spectrum/sales" format:TEXT (cost=0.00..2150.00 rows=172000 width=16) Filter: (pricepaid > 30.00) -> XN Hash (cost=87.98..87.98 rows=8798 width=4) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=4)
Beachten Sie die folgenden Elemente in dem Abfrageplan:
-
Der Knoten
S3 Seq Scan
zeigt, dass der Filterpricepaid > 30.00
auf der Redshift Spectrum-Ebene verarbeitet wurde.Ein Filterknoten unter dem Knoten
XN S3 Query Scan
zeigt die Prädikatverarbeitung in Amazon Redshift auf den von der Redshift-Spectrum-Ebene zurückgegebenen Daten an. -
Der Knoten
S3 HashAggregate
verweist auf die Aggregierung auf der Redshift Spectrum-Ebene für die Group By-Klausel (group by spectrum.sales.eventid
).
Nachfolgend finden Sie einige Möglichkeiten zur Verbesserung der Leistung von Redshift Spectrum:
-
Verwenden Sie im Apache Parquet-Format formatierte Datendateien. Parquet speichert Daten im Spaltenformat, so dass Redshift Spectrum nicht benötigte Spalten aus dem Scan ausschließen kann. Wenn die Daten das Textfile-Format aufweisen, muss Redshift Spectrum die gesamte Datei scannen.
-
Verwenden Sie mehrere Dateien zur Optimierung für die parallele Verarbeitung. Halten Sie die Größe Ihrer Dateien größer als 64 MB. Vermeiden Sie Datenverzerrungen, indem Sie die Dateien annähernd gleich groß halten. Informationen zu Apache Parquet-Dateien und Konfigurationsempfehlungen finden Sie unter Dateiformat: Konfigurationen
in der Apache Parquet-Dokumentation. -
Verwenden Sie in Ihren Abfragen so wenige Spalten wie möglich.
-
Speichern Sie Ihre großen Faktentabellen in Amazon S3 und Ihre häufig verwendeten und kleineren Dimensionstabellen in Ihrer lokalen Amazon-Redshift-Datenbank.
-
Aktualisieren Sie die Statistiken für externe Tabellen durch Einstellung des TABLE PROPERTIES-numRows-Parameters. Verwenden Sie CREATE EXTERNAL TABLE oder ALTER TABLE, um den numRows-Parameter TABLE PROPERTIES so einzustellen, dass er die Anzahl der Zeilen in der Tabelle widerspiegelt. Amazon Redshift analysiert keine externen Tabellen, um die Tabellenstatistiken zu generieren, die der Abfrageoptimierer verwendet, um einen Abfrageplan zu erstellen. Wenn für eine externe Tabelle keine Tabellenstatistiken festgelegt sind, generiert Amazon Redshift einen Abfrageausführungsplan. Amazon Redshift generiert diesen Plan unter der Annahme, dass externe Tabellen die größeren Tabellen und lokale Tabellen die kleineren Tabellen sind.
-
Der Amazon-Redshift-Abfrageplaner pusht Prädikate und Aggregationen nach Möglichkeit auf die Redshift-Spectrum-Abfrageebene. Wenn große Mengen von Daten von Amazon S3 zurückgegeben werden, ist die Verarbeitung durch die Ressourcen Ihres Clusters begrenzt. Redshift Spectrum wird für die Verarbeitung sehr großer Anfragen automatisch skaliert. Daher steigt Ihre allgemeine Leistung, wenn Sie die Verarbeitung auf die Redshift Spectrum-Ebene verschieben können.
-
Schreiben Sie Ihre Abfragen so, dass sie Filter und Aggregierungen verwenden, die die Verschiebung auf die Redshift Spectrum-Ebene ermöglichen.
Nachfolgend finden Sie einige Beispiele für Operationen, die auf die Redshift Spectrum-Ebene verschoben werden können:
-
GROUP BY-Klauseln
-
Vergleichsbedingungen und Musterabgleichbedingungen, wie etwa LIKE.
-
Aggregierungsfunktionen, wie etwa COUNT, SUM, AVG, MIN und MAX.
-
Zeichenfolgefunktionen.
Operationen, die nicht auf die Redshift Spectrum-Ebene verschoben werden können, sind etwa DISTINCT und ORDER BY.
-
-
Verwenden Sie Partitionen, um die Menge der gescannten Daten zu begrenzen. Partitionieren Sie Ihre Daten auf der Grundlage der häufigsten Abfrageprädikate, und verkürzen Sie dann die Partitionen durch die Filterung auf Partitionierungsspalten. Weitere Informationen finden Sie unter Partitionierung externer Redshift-Spectrum-Tabellen.
Fragen Sie SVL_S3PARTITION ab, um alle Partitionen und qualifizierte Partitionen anzuzeigen.
-
Verwenden Sie AWS Glue den Statistikgenerator, um Statistiken auf Spaltenebene für AWS Glue Data Catalog Tabellen zu berechnen. Sobald Statistiken für Tabellen im Datenkatalog AWS Glue generiert wurden, verwendet Amazon Redshift Spectrum diese Statistiken automatisch, um den Abfrageplan zu optimieren. Weitere Informationen zur Berechnung von Statistiken auf Spaltenebene mithilfe von AWS Glue finden Sie unter Arbeiten mit Spaltenstatistiken im AWS Glue Entwicklerhandbuch.