メインコンテンツまでスキップ
メインコンテンツまでスキップ

リフレッシュ可能なMaterialized View

Refreshable materialized views は、従来の OLTP データベースにおけるマテリアライズドビューと概念的に似ており、特定のクエリの結果を保存して迅速な取得を可能にし、リソースを集中的に使用するクエリを繰り返し実行する必要を減少させます。ClickHouse の incremental materialized views とは異なり、これはフルデータセットに対して定期的にクエリを実行する必要があり、その結果がクエリ用のターゲットテーブルに保存されます。この結果セットは理論的にはオリジナルのデータセットよりも小さくなり、その後のクエリがより迅速に実行されることが期待されます。

この図は、Refreshable Materialized Views の動作を説明しています:

以下の動画もご覧いただけます:

Refreshable Materialized Views はいつ使用すべきか?

ClickHouse のインクリメンタルマテリアライズドビューは非常に強力で、特に単一テーブルに対して集約が必要な場合には、リフレッシュ可能なマテリアライズドビューのアプローチよりも一般にスケールが良好です。データが挿入される際に各データブロックに対してのみ集約を計算し、最終テーブルでインクリメンタル状態をマージすることで、クエリは常にデータのサブセット上でのみ実行されます。この方法は潜在的にペタバイトのデータにスケールし、通常は好まれる方法です。

ただし、このインクリメンタルプロセスが必要ない、または適用できないユースケースも存在します。いくつかの問題はインクリメンタルアプローチとは互換性がないか、リアルタイムでの更新を必要とせず、定期的な再構築がより適切です。たとえば、複雑な結合を使用するため、全データセットにわたるビューの完全な再計算を定期的に実行したい場合があります。

Refreshable Materialized Views は、非正規化などのタスクを実行するバッチ処理を実行できます。リフレッシュ可能なマテリアライズドビュー間に依存関係を設定することができ、一方のビューは他方の結果に依存し、完了するとのみ実行されます。これは、スケジュールされたワークフローや、dbt ジョブのような単純な DAG の代替となります。リフレッシュ可能なマテリアライズドビュー間の依存関係の設定方法については、CREATE VIEWDependencies セクションを参照してください。

Refreshable Materialized View をどうリフレッシュしますか?

リフレッシュ可能なマテリアライズドビューは、作成時に定義された間隔で自動的にリフレッシュされます。 たとえば、以下のマテリアライズドビューは毎分リフレッシュされます: