Verbesserung der Amazon-Redshift-Spectrum-Abfrageleistung - Amazon Redshift

Verbesserung der Amazon-Redshift-Spectrum-Abfrageleistung

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, dass die Schritte S3 Seq Scan und S3 HashAggregate 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://awssampledbuswest2/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 Filter pricepaid > 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 in Ihren Abfragen so wenige Spalten wie möglich.

  • 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.

  • 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.