REFRESH MATERIALIZED VIEW
マテリアライズドビューの更新
マテリアライズドビューを作成する際、そのコンテンツには、その時点での基となるデータベーステーブルまたはテーブルの状態が反映されます。アプリケーションが基となるテーブルにあるデータを変更しても、マテリアライズドビューのデータは変更されません。マテリアライズドビューのデータは、REFRESH MATERIALIZED VIEW
ステートメントを使用して随時更新できます。このステートメントを使用する際は、Amazon Redshift は、ベーステーブルまたはテーブルで行われた変更を特定し、特定した変更をマテリアライズドビューに適用します。
マテリアライズドビューの詳細については、「Amazon Redshift でのマテリアライズドビュー」を参照してください。
構文
REFRESH MATERIALIZED VIEW mv_name
パラメータ
- mv_name
-
更新するマテリアライズドビューの名前。
使用に関する注意事項
マテリアライズドビューの所有者のみが、そのマテリアライズドビューに対して REFRESH MATERIALIZED
VIEW
のオペレーションを実行できます。さらに、REFRESH
MATERIALIZED VIEW
を正常に実行するには、所有者が基となるベーステーブルに対する SELECT 権限を持っている必要があります。
REFRESH MATERIALIZED VIEW
コマンドは、独自のトランザクションとして実行されます。Amazon Redshift トランザクションのセマンティクスに従って、ベーステーブルの、どのデータが REFRESH
コマンドに表示されるか、または REFRESH
コマンドによって加えられた変更が Amazon Redshift で実行中の他のトランザクションにいつ表示されるかを判断します。
-
増分マテリアライズドビューの場合、
REFRESH MATERIALIZED VIEW
はコミット済みのベーステーブル行のみを使用します。したがって、同じトランザクション内のデータ操作言語 (DML) ステートメントの後に更新操作が実行された場合、その DML ステートメントの変更は更新のために表示されません。 -
マテリアライズドビューの完全更新の場合、
REFRESH MATERIALIZED VIEW
は、通常の Amazon Redshift トランザクションセマンティクスに従って、更新トランザクションに表示されるすべてのベーステーブル行を表示します。 -
入力引数型よっては、マテリアライズドビューの増分リフレッシュが Amazon Redshift でサポートされています。特定の入力引数型を持つ次の関数です。DATE (タイムスタンプ)、DATE_PART (日付、時刻、間隔、time-tz)、DATE_TRUNC (タイムスタンプ、間隔)。
-
増分更新は、ベーステーブルがデータ共有内にあるマテリアライズドビューでサポートされます。
Amazon Redshift の一部のオペレーションは、マテリアライズドビューに影響します。こうしたオペレーションの中には、マテリアライズドビューを定義するクエリで増分更新のための SQL 機能のみが使用されている場合でも、REFRESH MATERIALIZED VIEW
オペレーションによってマテリアライズドビューが完全に再計算されるものがあります。次に例を示します。
-
マテリアライズドビューが更新されない場合、バックグラウンドでのバキューム操作がブロックされることがあります。内部でしきい値の期間を定義したら、バキュームの実行が許可されます。バキュームを操作すると、依存するマテリアライズドビューは、次の更新時に (増分更新であっても) 再計算する対象としてマークされます。VACUUM の詳細については、「VACUUM」を参照してください。イベントとステータス変更の詳細については、「STL_MV_STATE」を参照してください。
-
ベーステーブルで実行されるユーザー操作には、次に REFRESH が実行された際に、マテリアライズドビューが完全に再計算されるように強制するものがあります。このような操作の例としては、手動で呼び出された VACUUM、従来のサイズ変更、ALTER DISTKEY 操作、ALTER SORTKEY 操作、および切り捨て操作があります。自動オペレーションでは、次に REFRESH オペレーションが実行されたときにマテリアライズドビューが完全に再計算されることもあります。例えば、auto-vacuum delete オペレーションでは、完全な再計算が発生する可能性があります。イベントとステータス変更の詳細については、「STL_MV_STATE」を参照してください。
データ共有内のマテリアライズドビューの増分更新
Amazon Redshift は、ベーステーブルを共有している場合、コンシューマーデータ共有でのマテリアライズドビューの自動更新と増分更新をサポートしています。増分更新は、Amazon Redshift が前回の更新後に発生したベーステーブルの変更を特定し、マテリアライズドビューの対応するレコードのみを更新する操作です。この動作の詳細については、「CREATE MATERIALIZED VIEW」を参照してください。
増分更新の制約事項
Amazon Redshift では、現在のところ、次の SQL 要素のいずれかを使用してクエリで定義されたマテリアライズドビューの増分更新はサポートされていません。
-
OUTER JOIN (右、左、またはフル)。
-
集合演算: UNION、INTERSECT、EXCEPT、MINUS。
-
UNION ALL はサブクエリで発生し、集計関数または GROUP BY 句がクエリに存在する場合に使用します。
-
集計関数は、MEDIAN、PERCENTILE_CONT、LISTAGG、STDDEV_SAMP、STDDEV_POP、APPROXIMATE COUNT、APPROXIMATE PERCENTILE、およびビット単位の集計関数です。
注記
COUNT、SUM、MIN、MAX、および AVG 集計関数がサポートされています。
-
DISTINCT COUNT、DISTINCT SUM などの DISTINCT 集計関数。
-
ウィンドウ関数。
-
共通部分式の最適化など、クエリの最適化に一時テーブルを使用するクエリ。
-
サブクエリ
-
マテリアライズドビューを定義するクエリで以下の形式を参照する外部テーブル。
-
Delta Lake
-
Hudi
増分更新は、プレビュートラック上の他の形式を参照する外部テーブルを使用して定義されたマテリアライズドビューでサポートされています。プレビュークラスターのセットアップの詳細については、「Amazon Redshift 管理ガイド」の「プレビュークラスターの作成」を参照してください。プレビューワークグループの設定の詳細については、「Amazon Redshift 管理ガイド」の「プレビューワークグループの作成」を参照してください。
-
日時関数、RANDOM、STABLE 以外のユーザー定義関数など、可変関数。
ゼロ ETL 統合の増分更新に関する制限については、「Amazon Redshift とのゼロ ETL 統合を使用する場合の考慮事項」を参照してください。
VACUUM などのバックグラウンド操作がマテリアライズドビューの更新オペレーションに与える影響など、マテリアライズドビューの制限の詳細については、使用に関する注意事項 を参照してください。
例
次の例では、マテリアライズドビュー tickets_mv
を更新します。
REFRESH MATERIALIZED VIEW tickets_mv;