Amazon Redshift は、いつ AQUA を使用してクエリを実行しますか? - Amazon Redshift

Amazon Redshift は、いつ AQUA を使用してクエリを実行しますか?

Amazon Redshift は、テーブルをスキャンするクエリごとに、スキャンオペレーションを AQUA に送信するか、Amazon Redshift クラスター上でローカルで実行するかを決定します。スキャンおよび集計操作は、AQUA がサポートする LIKE または SIMILAR TO 式を含む述語が少なくとも 1 つ含まれている場合、AQUA に送信されます。スキャンオペレーションが AQUA に送信されると、(LIKE または SILAR TO 処理だけでなく) オペレーション全体が AQUA で実行されます。

たとえば、次のクエリには、AQUA に送信される述語 str1 LIKE 'a%'num1 > 10 が含まれています。

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

この場合、AQUA はテーブル tbl をスキャンし、述語でフィルタリングし、結果を num2 でグループ化し、結果を Amazon Redshift に返します。

次の例では、Amazon Redshift は、クエリのどの部分が AQUA で実行され、どの部分が Amazon Redshift クラスター上でローカルで実行されるかを決定します。この場合、返される行をフィルタリングするために使用される customer_name 列に LIKE 述部があります。スキャン操作は AQUA に送信され、クエリのその部分が実行されます。Amazon Redshift はスキャンの結果のみを受信し、Amazon Redshift がローカルで結合を実行し、クエリを完了するために使用されます。

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);

LIKE および SIMILAR TO の詳細については、Amazon Redshift データベースデベロッパーガイドLIKE および SIMILAR TO を参照してください。

に関する考慮事項

次の呼び出しタイプは現在サポートされていません。それらを含むクエリは、Amazon Redshift クラスターでローカルで実行されます。

  • INSERT、UPDATE、DELETE、CREATE TABLE AS、COPY、UNLOAD などの書き込みを実行するクエリです。詳細については、Amazon Redshift データベースデベロッパーガイドSQL コマンド を参照してください。

  • 述語なしの SELECT クエリ。たとえば、次のようになります。

    select * from tbl1
  • Python UDF によって定義された複雑なビューのスキャンを含む、スキャン内の Python ユーザー定義関数 (UDF)。

  • LIKE 述語および SIMILAR TO 述語で、次のメタ文字を使用するクエリ。

    • LIKE 式の非定数正規表現リテラル。

    • 2 つの選択肢のどちらかです。たとえば、次のようになります。

      SIMILAR TO '%(cat|dog)%'
    • VARCHAR カラム内の 1 文字ワイルドカードの複数のインスタンス。たとえば、次のようになります。

      SIMILAR TO 'ab.cd.ef'
    • 一致文字列内の Unicode エスケープシーケンス、16 進文字、および 8 進文字。たとえば、次のようになります。

      SIMILAR TO '%ab\uc382'
      SIMILAR TO '%ab\U0000c382'
      SIMILAR TO '%ab\x88'
      SIMILAR TO '%ab\127'
    • 「*」、「+」、「?」などの繰り返しメタ文字 、{m, n} は () 内のパターンに適用され、マルチバイト文字に適用されます。たとえば、次のようになります。

      SIMILAR TO 'abc(def)*'
      SIMILAR TO 'abcʥ+'
    • 角かっこ式 [...] 内のマルチバイト文字。たとえば、次のようになります。

      SIMILAR TO 'abc[ʥde]'.
  • LOWER、UPPER、LEFT、RIGHT などの文字列関数が LIKE または SIMILAR TO スキャンの出力に適用されるクエリ。たとえば、次の抜粋は LOWER 関数を示しています。

    LOWER(a) LIKE "%cat%"

    代わりに、LOWER なしで大文字と小文字を区別しない ILIKE を使用するようにクエリを書き直してみてください。

    ILIKE "%cat%"

AQUAが使用されたかどうかを確認する方法

次の SQL は、AQUA で実行された SVL_QUERY_SUMMARY からのクエリ実行セグメントを示しています。

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

スーパーユーザーアクセス権がある場合は、STL_QUERY ビューと STL_QUERYTEXT ビューを結合して、AQUA によって実行されるクエリに対応する SQL ステートメントを確認することもできます。EXPLAIN ステートメントによって生成された説明プランは、クエリが AQUA を使用した場合は表示されません。