Amazon Redshift でのマテリアライズドビュー
このセクションでは、Amazon Redshift でマテリアライズドビューを作成して使用する方法について説明します。マテリアライズドビューとは、クエリの結果を保存するデータベースオブジェクトであり、パフォーマンスと効率を向上させるために使用できます。
データウェアハウスの環境でのアプリケーションでは、多く場合、大規模なテーブルに対し複雑なクエリを実行する必要が生じます。例えば SELECT ステートメントでは、数百万の行を含むテーブルにおいて、複数の テーブルの結合や集計が行われます。このようなクエリの処理は、システムリソース、そして結果を返すためにかかる時間の点から、コストが高くなる可能性があります。
Amazon Redshift のマテリアライズドビューを使用することで、こうした課題に対処できます。マテリアライズドビューには、1 つ以上のベーステーブルで実行された SQL クエリに基づいて事前計算された結果が含まれています。SELECT ステートメントを使用すれば、データベースで他のテーブルやビューをクエリするのと同じ方法でマテリアライズドビューをクエリすることができます。Amazon Redshift は、ベーステーブルに一切アクセスすることなく、マテリアライズドビューから事前計算された結果を返します。ユーザーの観点から見て、クエリの結果は、ベーステーブルから同じデータを取得するのにかかる時間に比べてはるかに短時間で返ってきます。
マテリアライズドビューは、予期可能で繰り返し実行されるクエリの速度を上げるために特に役立ちます。アプリケーションは、集計や複数の結合など、大きなテーブルに対してリソースを大量に消費するクエリを実行する代わりに、マテリアライズドビューをクエリし、事前計算された結果を取得することができます。例えば、Amazon QuickSight などのダッシュボードにデータを入力するために一連のクエリを使用するシナリオについて考えてみます。このユースケースは、クエリが定期的で何度も繰り返されることから、マテリアライズドビューに適しています。
マテリアライズドビューは、他のマテリアライズドビューに関連させて定義できます。マテリアライズドビュー上のマテリアライズドビューを使用して、マテリアライズドビューの機能を拡張できます。この手法では、既存のマテリアライズドビューは、クエリがデータを取得するためのベーステーブルと同じ役割を果たします。
この手法はさまざまな集計オプションや GROUP BY オプションのために事前計算されている結合を再利用する場合に特に便利です。例えば、顧客情報 (数百万行を含む) と品目オーダー詳細情報 (数十億行を含む) を結合するための、マテリアライズドビューを考えてみます。これは、オンデマンドで繰り返し計算を行うために、高価なクエリとなります。既存のマテリアライズドビューの上に作成されたマテリアライズドビューに対して、異なるGROUP BYオプションを使用することで、異なるテーブルを結合することができます。これにより、コストの高い結合を、基盤レベルで毎回実行するために消費される計算時間を節約できます。1 つのマテリアライズドビューの、他のマテリアライズドビューに対する依存関係は、STV_MV_DEPSテーブルに記述されます。
マテリアライズドビューを作成すると、Amazon Redshift は、ユーザーが指定した SQL ステートメントを実行します。そして、ベーステーブルまたはテーブルからデータを収集し、結果を保存します。次の図に、SQL クエリが 2 つのベーステーブル (events
および sales
) を使用して定義する、マテリアライズドビュー tickets_mv
の概要を示します。
その後、これらのマテリアライズドビューをクエリで使用して、高速化できます。さらに、Amazon Redshift は、クエリが明示的にマテリアライズドビューを参照していない場合でも、これらのクエリを自動的に書き換えてマテリアライズドビューを使用できます。クエリの自動書き換えは、マテリアライズドビューを使用するためにクエリを変更できない場合に、パフォーマンスを向上させる上で特に強力です。
マテリアライズドビューのデータを更新するには、REFRESH MATERIALIZED VIEW ステートメントを使用して、マテリアライズドビューを手動で更新できます。Amazon Redshift は、ベーステーブルまたはテーブルで行われた変更を特定し、特定した変更をマテリアライズドビューに適用します。クエリの自動書き換えでは、マテリアライズドビューは 最新状態 に保たれる必要があるため、マテリアライズドビューの所有者は、ベーステーブルが変更されるたびに対象のビューを更新する必要があります。
Amazon Redshift には、自動書き換えのためにマテリアライズドビューを 最新の状態 に保つための方法がいくつか用意されています。マテリアライズドビューのベーステーブルが更新されたときにマテリアライズドビューが更新されるよう自動更新オプションを使用して、マテリアライズドビューを構成できます。自動更新オペレーションは、クラスターリソースが使用可能なときに実行され、他のワークロードの中断を最小限に抑えます。自動更新のスケジュールはワークロードに依存するため、Amazon Redshift がマテリアライズドビューを更新するタイミングをより詳細に制御できます。Amazon Redshift スケジューラ API とコンソール統合を使用して、マテリアライズドビューの更新ジョブをスケジュールできます。クエリのスケジューリングの詳細については、Amazon Redshift コンソールでのクエリのスケジューリングを参照してください。
このスケジューリングは、マテリアライズドビューからの最新データに関し、サービスレベルアグリーメント (SLA) 要件がある場合に特に便利です。また、自動更新できるマテリアライズドビューを手動で更新することもできます。マテリアライズドビューの作成方法については、「CREATE MATERIALIZED VIEW」を参照してください。
SELECT ステートメントを発行して、マテリアライズドビューを照会することができます。マテリアライズドビューの照会方法については、「マテリアライズドビューのクエリ」を参照してください。こうして保存された結果は、ベーステーブルやテーブルでデータが挿入、更新、削除されるうちに古くなります。マテリアライズドビューは、いつでもリフレッシュして、ベーステーブルからの最新の変更で更新できます。マテリアライズドビューをリフレッシュする方法については、「REFRESH MATERIALIZED VIEW」を参照してください。
マテリアライズドビューを作成および管理するための SQL コマンドの詳細については、以下のコマンドトピックを参照してください。
マテリアライズドビューを監視するシステムテーブルとビューに関しては、次のトピックを参照してください。