非同期マテリアライズドビュー
このトピックでは、非同期マテリアライズドビューの理解、作成、使用、管理方法について説明します。非同期マテリアライズドビューは、StarRocks v2.4以降でサポートされています。
同期マテリアライズドビューと比較して、非同期マテリアライズドビューはマルチテーブルジョインやより多くの集計関数をサポートしています。非同期マテリアライズドビューのリフレッシュは、手動で、事前に指定された間隔で定期的に、またはベーステーブルのデータ変更時に自動的にトリガーされることがあります。また、マテリアライズドビュー全体ではなく、一部のパーティションのみをリフレッシュすることもでき、リフレッシュのコストを大幅に削減できます。さ らに、非同期マテリアライズドビューはさまざまなクエリの書き換えシナリオをサポートしており、自動的で透明なクエリアクセラレーションを可能にします。
同期マテリアライズドビュー(Rollup)のシナリオと使用法については、Synchronous materialized view (Rollup)を参照してください。
概要
データベースのアプリケーションでは、大規模なテーブルに対して複雑なクエリを実行することがよくあります。これらのクエリは、数十億行を含むテーブルに対するマルチテーブルジョインや集計を含みます。これらのクエリを処理することは、システムリソースや結果を計算するのにかかる時間の観点から高コストです。
StarRocksの非同期マテリアライズドビューは、これらの問題に対処するために設計されています。非同期マテリアライズドビューは、1つまたは複数のベーステーブルから事前に計算されたクエリ結果を保持する特別な物理テーブルです。ベーステーブルに対して複雑なクエリを実行すると、StarRocksはこれらのクエリを処理するために関連するマテリアライズドビューから事前に計算された結果を返します。この方法により、繰り返しの複雑な計算を避けることでクエリパフォーマンスが向上します。このパフォーマンスの違いは、クエリが頻繁に実行される場合や十分に複雑な場合に顕著です。
さらに、非同期マテリアライズドビューは、データウェアハウス上に数学モデルを構築するのに 特に役立ちます。これにより、上位層のアプリケーションに統一されたデータ仕様を提供し、基盤の実装を隠したり、ベーステーブルの生データのセキュリティを保護したりできます。
StarRocksにおけるマテリアライズドビューの理解
StarRocks v2.3以前のバージョンでは、単一のテーブルにのみ構築できる同期マテリアライズドビューが提供されていました。同期マテリアライズドビュー、またはRollupは、データの新鮮さが高く、リフレッシュコストが低いです。しかし、v2.4以降でサポートされている非同期マテリアライズドビューと比較すると、同期マテリアライズドビューには多くの制限があります。クエリを加速または書き換えるために同期マテリアライズドビューを構築したい場合、集計演算子の選択肢が限られています。
以下の表は、StarRocksにおける非同期マテリアライズドビュー(ASYNC MV)と同期マテリアライズドビュー(SYNC MV)のサポートする機能の観点からの比較を示しています。
単一テーブル集計 | マルチテーブルジョイン | クエリの書き換え | リフレッシュ戦略 | ベーステーブル | |
---|---|---|---|---|---|
ASYNC MV | はい | はい | はい |
| 複数のテーブルから:
|
SYNC MV (Rollup) | 集計関数の選択肢が限られている | いいえ | はい | データロード中の同期リフレッシュ | Default Catalogの単一テーブル |
基本概念
-
ベーステーブル
ベーステーブルは、マテリアライズドビューの駆動テーブルです。
StarRocksの非同期マテリアライズドビューの場合、ベーステーブルはDefault CatalogのStarRocks内部テーブル、外部カタログのテーブル(v2.5からサポート)、または既存の非同期マテリアライズドビュー(v2.5からサポート)やビュー(v3.1からサポート)であることができます。StarRocksは、すべてのStarRocksテーブルタイプに対して非同期マテリアライズドビューの作成をサポートしています。
-
リフレッシュ
非同期マテリアライズドビューを作成すると、そのデータはその時点でのベーステーブルの状態を反映します。ベーステーブルのデータが変更された場合、マテリアライズドビューをリフレッシュして変更を同期させる必要があります。
現在、StarRocksは2つの一般的なリフレッシュ戦略をサポートしています。
- ASYNC: 非同期リフレッシュモード。ベーステーブルのデータが変更されたとき、または指定された間隔に基づいて定期的に、マテリアライズドビューを自動的にリフレッシュできます。
- MANUAL: 手動リフレッシュモード。マテリアライズドビューは自動的にリフレッシュされません。リフレッシュタスクはユーザーによって手動でトリガーされる必要があります。
-
クエリの書き換え
クエリの書き換えとは、マテリアライズドビューが構築されたベーステーブルに対してクエリを実行する際に、システムがマテリアライズドビューの事前計算された結果をクエリに再利用できるかどうかを自動的に判断することを意味します。再利用できる場合、システムは関連するマテリアライズドビューから直接データをロードし、時間とリソースを消費する計算やジョインを避けます。
v2.5以降、StarRocksはSPJGタイプの非同期マテリアライズドビューに基づく自動的で透明なクエリの書き換えをサポートしています。SPJGタイプのマテリアライズドビューは、プランにScan、Filter、Project、Aggregateタイプのオペレーターのみを含むマテリアライズドビューを指します。
注意
JDBCカタログまたはHudiカタログのベーステーブルに作成された非同期マテリアライズドビューは、クエリの書き換えをサポートしていません。
マテリアライズドビューを作成するタイミングを決定する
データウェアハウス環境で以下の要求がある場合、非同期マテリアライズドビューを作成できます。
-
繰り返しの集計関数を持つクエリの加速
データウェアハウスのほとんどのクエリが、集計関数を持つ同じサブクエリを含んでおり、これらのクエリが計算リソースの大部分を消費しているとします。このサブクエリに基づいて、非同期マテリアライズドビューを作成し、サブクエリのすべての結果を計算して保存できます。マテリアライズドビューが構築された後、StarRocksはサブクエリを含むすべてのクエリを書き換え、マテリアライズドビューに保存された中間結果をロードし、これらのクエリを加速します。
-
複数テーブルの定期的なジョイン
データウェアハウスで複数のテーブルを定期的にジョインして新しいワイドテーブルを作成する必要があるとします。これらのテーブルに対して非同期マテリアライズドビューを構築し、固定時間間隔でリフレッシュタスクをトリガーするASYNCリフレッシュ戦略を設定できます。マテリアライズドビューが構築された後、クエリ結果はマテリアライズドビューから直接返され、ジョイン操作による遅延が回避されます。
-
データウェアハウスのレイヤリング
データウェアハウスに大量の生データが含まれており、クエリが複雑なETL操作を必要とする場合、データウェアハウス内のデータを階層化するために複数の非同期マテリアライズドビューを構築し、クエリを一連の単純なサブクエリに分解できます。これにより、繰り返しの計算を大幅に削減し、さらに重要なことに、DBAが問題を簡単かつ効率的に特定するのに役立ちます。それに加えて、データウェアハウスのレイヤリングは、生データと統計データを分離し、機密性の高い生データのセキュリティを保護します。
-
データレイクでのクエリの加速
データレイクのクエリは、ネットワーク遅延やオブジェクトストレージのスループットのために遅くなることがあります。データレイクの上に非同期マテリアライズドビューを構築することで、クエリパフォーマンスを向上させることができます。さらに、StarRocksは既存のマテリアライズドビューを使用するようにクエリを書き換えることができ、クエリを手動で変更する手間を省くことができます。
非同期マテリアライズドビューの具体的な使用例については、以下のコンテンツを参照してください。