Wann verwendet Amazon Redshift AQUA zum Ausführen von Abfragen? - Amazon Redshift

Wann verwendet Amazon Redshift AQUA zum Ausführen von Abfragen?

Für jede Abfrage, die eine Tabelle durchsucht, bestimmt Amazon Redshift, ob der Scanvorgang an AQUA gesendet oder lokal auf dem Amazon-Redshift-Cluster ausgeführt wird. Scan- und Aggregationsvorgänge werden an AQUA gesendet, wenn sie mindestens ein Prädikat enthalten, das einen von AQUA unterstützten LIKE- oder SIMILAR-TO-Ausdruck enthält. Wenn ein Scanvorgang an AQUA gesendet wird, wird der gesamte Vorgang auf AQUA ausgeführt (nicht nur die Verarbeitung von LIKE oder SIMILAR TO).

Die folgende Abfrage enthält beispielsweise die Prädikate str1 LIKE 'a%' und num1 > 10, die an AQUA gesendet werden.

select num2 from tbl where str1 LIKE 'a%' and num1 > 10 GROUP BY num2;

In diesem Fall scannt AQUA Tabelle tbl, filtert nach den Prädikaten, gruppiert die Ergebnisse nach num2 und gibt die Ergebnisse an Amazon Redshift zurück.

Im folgenden Beispiel bestimmt Amazon Redshift, welche Teile der Abfrage in AQUA und welche lokal auf dem Amazon-Redshift-Cluster ausgeführt werden sollen. In diesem Fall gibt es ein LIKE-Prädikat für Spalte customer_name, das zum Filtern der zurückgegebenen Zeilen verwendet wird. Der Scanvorgang wird an AQUA gesendet, um diesen Teil der Abfrage auszuführen. Amazon Redshift erhält nur die Ergebnisse des Scans, die Amazon Redshift dann verwendet, um einen lokalen Join durchzuführen und die Abfrage abzuschließen.

select c.customer_name, p.prod_name, sum(revenue) from orders o join customers c ON c.id = o.customer_id join products p ON p.id = o.product_id where c.customer_name LIKE ‘%Amazon%Web%’ order by sum(revenue);

Weitere Informationen zu LIKE und SIMILAR TO finden Sie unter LIKE und SIMILAR TO im Datenbankentwicklerhandbuch zu Amazon Redshift.

Hinweise zu AQUA

Die folgenden SQL-Abfragetypen werden derzeit von AQUA nicht unterstützt. Abfragen, die lokal auf Ihrem Amazon-Redshift-Cluster ausgeführt werden.

  • Abfragen, die Schreibvorgänge ausführen, z. B. INSERT, UPDATE, DELETE, CREATE TABLE AS, COPY und UNLOAD. Weitere Informationen finden Sie unter SQL-Befehle im Datenbankentwicklerhandbuch zu Amazon Redshift.

  • SELECT-Abfragen ohne Prädikat, z. B.

    select * from tbl1
  • Benutzerdefinierte Python-Funktionen (UDFs) in Scans, einschließlich Scans komplexer Ansichten, die von Python-UDFs definiert sind.

  • Abfragen, die die folgenden Metazeichen in LIKE- und SIMILAR-TO-Prädikaten verwenden:

    • Ein nicht konstantes Literal für reguläre Ausdrücke in einem LIKE-Ausdruck.

    • Eine von zwei Alternativen, zum Beispiel die Folgende.

      SIMILAR TO '%(cat|dog)%'
    • Mehrere Instanzen von Platzhaltern aus Einzelzeichen in VARCHAR-Spalten, z. B.

      SIMILAR TO 'ab.cd.ef'
    • Unicode-Escape-Sequenz, Hexzeichen und Oktalzeichen in der Übereinstimmungszeichenfolge, z. B.

      SIMILAR TO '%ab\uc382'
      SIMILAR TO '%ab\U0000c382'
      SIMILAR TO '%ab\x88'
      SIMILAR TO '%ab\127'
    • Wiederholungs-Metazeichen wie „*“, „+“, „?“, {m, n} auf ein Muster innerhalb () und auf Multibyte-Zeichen angewendet, z. B.

      SIMILAR TO 'abc(def)*'
      SIMILAR TO 'abcʥ+'
    • Multibyte-Zeichen innerhalb eines Klammerausdrucks [...], z. B.

      SIMILAR TO 'abc[ʥde]'.
  • Abfragen, bei denen Funktionen für Zeichenfolgen wie LOWER, UPPER, LEFT, RIGHT auf die Ausgabe eines LIKE- oder SIMILAR-TO-Scans angewendet werden. Der folgende Auszug zeigt eine LOWER-Funktion.

    LOWER(a) LIKE "%cat%"

    Versuchen Sie stattdessen, die Abfrage neu zu schreiben, um LIKE ohne LOWER zu verwenden.

    ILIKE "%cat%"

Erkennen, ob AQUA verwendet wurde

Die folgende SQL-Anweisung zeigt Segmente der Abfrageausführung von SVL_QUERY_SUMMARY, die auf AQUA ausgeführt wurde.

select * from svl_query_summary where label ~ 'Aqua' limit 100;

Wenn Sie Superuser-Zugriff haben, können Sie die Ansichten STL_QUERY und STL_QUERYTEXT auch verbinden, um die SQL-Anweisungen anzuzeigen, die von AQUA ausgeführten Abfragen entsprechen. Der von der EXPLAIN-Anweisung generierte Explain-Plan zeigt nicht an, ob eine Abfrage AQUA verwendet.