マテリアライズドビューを使用するための自動クエリ書き換え - Amazon Redshift

マテリアライズドビューを使用するための自動クエリ書き換え

Amazon Redshift でマテリアライズドビューの自動クエリ書き換えを使用すると、その Amazon Redshift がマテリアライズドビューを使用するようにクエリを修正できます。これにより、マテリアライズドビューを明示的に参照しないクエリについても、そのワークロードが高速化されます。Amazon Redshift は、クエリを書き換える際に、最新 のマテリアライズドビューのみを使用します。

使用に関する注意事項

クエリに対してクエリの自動書き換えが使用されているかどうかを確認するには、クエリプランまたは STL_EXPLAIN を調べます。次に、元のクエリプランの SELECT ステートメントと、EXPLAIN 出力を示します。

SELECT catgroup, SUM(qtysold) AS sold FROM category c, event e, sales s WHERE c.catid = e.catid AND e.eventid = s.eventid GROUP BY 1; EXPLAIN XN HashAggregate (cost=920021.24..920021.24 rows=1 width=35) -> XN Hash Join DS_BCAST_INNER (cost=440004.53..920021.22 rows=4 width=35) Hash Cond: ("outer".eventid = "inner".eventid) -> XN Seq Scan on sales s (cost=0.00..7.40 rows=740 width=6) -> XN Hash (cost=440004.52..440004.52 rows=1 width=37) -> XN Hash Join DS_BCAST_INNER (cost=0.01..440004.52 rows=1 width=37) Hash Cond: ("outer".catid = "inner".catid) -> XN Seq Scan on event e (cost=0.00..2.00 rows=200 width=6) -> XN Hash (cost=0.01..0.01 rows=1 width=35) -> XN Seq Scan on category c (cost=0.00..0.01 rows=1 width=35)

次に、自動書き換えに成功した後の EXPLAIN からの出力を示します。この出力には、既存のクエリプランの一部を置き換えるクエリプランによる、マテリアライズドビューに対するスキャンが含まれます。

* EXPLAIN XN HashAggregate (cost=11.85..12.35 rows=200 width=41) -> XN Seq Scan on mv_tbl__tickets_mv__0 derived_table1 (cost=0.00..7.90 rows=790 width=41)

自動、スケジュール済み、手動などの更新戦略に関係なく、クエリの自動書き換えには、最新の (新しい) マテリアライズドビューのみが考慮されます。したがって、元のクエリは最新の結果を返します。クエリでマテリアライズドビューが明示的に参照されている場合、Amazon Redshift はマテリアライズドビュー内に現在保存されているデータにアクセスします。このデータには、マテリアライズドビューのベーステーブルからの最新の変更が、反映されていない場合があります。

クラスターバージョン 1.0.20949 以降で作成されたマテリアライズドビューの自動クエリ書き換えを使用できます。

セッションレベルでの自動クエリ書き換えを停止する場合は、SET mv_enable_aqmv_for_session を FALSE に使用します。

制限事項

マテリアライズドビューでの、自動クエリ書き換えの使用に関する制限事項は次のとおりです。

  • 自動クエリ書き換えは、以下のいずれかを参照しない、または含まないマテリアライズドビューで動作します。

    • サブクエリ

    • 左、右、またはフル外部結合

    • セットオペレーション

    • SUM、COUNT、MIN、MAX および AVG 以外の集計関数。(これらは、自動クエリ書き換えで動作する唯一の集計関数です。)

    • DISTINCT を使用する集計関数

    • Window 関数

    • SELECT DISTINCT または HAVING 句

    • 外部テーブル

    • その他のマテリアライズドビュー

  • 自動クエリ書き換えにより、ユーザー定義の Amazon Redshift テーブルを参照する SELECT クエリが書き換えられます。Amazon Redshift では、次のクエリは書き換えられません。

    • CREATE TABLE AS ステートメント

    • SELECT INTO ステートメント

    • カタログまたはシステムテーブルに対するクエリ

    • 外部結合または SELECT DISTINCT 句を使用したクエリ

  • クエリが自動的に書き換えられない場合は、指定したマテリアライズドビューに対する SELECT 許可があり、mv_enable_aqmv_for_session オプションが TRUE に設定されているかどうかを確認します。

    STV_MV_INFO を調べることで、マテリアライズドビューがクエリの自動書き換えに適しているかどうかを確認することもできます。詳細については、「STV_MV_INFO」を参照してください。