同期マテリアライズドビューによる透過的リライト
概要
Sync-Materialized Viewは、事前定義されたSELECT文に従ってデータを事前計算し、格納する特別な種類のテーブルです。その主な目的は、あらゆる次元からの生の詳細データを分析するユーザーのニーズを満たし、固定次元での迅速な分析とクエリを可能にすることです。
同期マテリアライズドビューの適用シナリオは以下の通りです:
- 分析要件が詳細データクエリと固定次元クエリの両方を含む場合。
- クエリがテーブル内の少数の列または行のみを対象とする場合。
- クエリに長時間の集約操作などの時間のかかる処理操作が含まれる場合。
- クエリが異なるプレフィックスインデックスにマッチする必要がある場合。
同じサブクエリの結果を頻繁かつ繰り返し使用するクエリに対して、同期マテリアライズドビューはパフォーマンスを大幅に改善できます。Dorisはマテリアライズドビューのデータを自動的に保守し、ベーステーブルとマテリアライズドビューテーブル間のデータ整合性を確保するため、追加の手動保守コストは不要です。クエリ実行時、システムは最適なマテリアライズドビューを自動的にマッチングし、そこから直接データを読み取ります。
- Doris 2.0および以降のバージョンでは、マテリアライズドビューには強化された機能があります。本格的な本番環境でマテリアライズドビューを使用する前に、期待するクエリが作成したいマテリアライズドビューにヒットできるかをテスト環境で確認することをユーザーに推奨します。
- 同じテーブルに類似した形式の複数のマテリアライズドビューを作成することは推奨されません。複数のマテリアライズドビュー間で競合が発生し、クエリのヒット失敗を引き起こす可能性があります。
ケース
以下では、同期マテリアライズドビューを使用してクエリを高速化するプロセスを具体的な例で説明します:
sales_recordsという名前の詳細な売上記録テーブルがあると仮定します。このテーブルは、取引ID、営業担当者ID、販売店舗ID、販売日、取引金額を含む各取引の様々な情報を詳細に記録しています。現在、異なる店舗の売上高に関する分析とクエリを頻繁に実行する必要があります。
これらのクエリのパフォーマンスを最適化するため、store_amtという名前のマテリアライズドビューを作成できます。このビューは販売店舗でグループ化し、同じ店舗の売上金額を合計します。具体的な手順は以下の通りです:
Sync-Materialized Viewの作成
まず、以下のSQL文を使用してマテリアライズドビューstore_amtを作成します:
CREATE MATERIALIZED VIEW store_amt AS
SELECT store_id, SUM(sale_amt)
FROM sales_records
GROUP BY store_id;
作成タスクを送信した後、Dorisはバックグラウンドでこの同期マテリアライズドビューを非同期で構築します。以下のコマンドを使用して、マテリアライズドビューの作成進捗を確認できます:
SHOW ALTER TABLE MATERIALIZED VIEW FROM db_name;
StateフィールドがFINISHEDになると、store_amtマテリアライズドビューが正常に作成されたことを意味します。
透過的リライト
マテリアライズドビューが作成された後、異なるストアの売上高をクエリする際、Dorisは自動的にstore_amtマテリアライズドビューをマッチし、そこから事前集約されたデータを直接読み取るため、クエリ効率が大幅に向上します。クエリ文は以下の通りです:
SELECT store_id, SUM(sale_amt) FROM sales_records GROUP BY store_id;
EXPLAINコマンドを使用して、クエリがマテリアライズドビューに正常にヒットしたかどうかを確認することもできます:
EXPLAIN SELECT store_id, SUM(sale_amt) FROM sales_records GROUP BY store_id;
実行プランの最後に、以下のようなものが表示された場合、クエリがstore_amt materialized viewに正常にヒットしたことを意味します:
TABLE: default_cluster:test.sales_records(store_amt), PREAGGREGATION: ON
上記の手順により、同期マテリアライズドビューを使用してクエリパフォーマンスを最適化し、データ分析の効率を向上させることができます。
まとめ
同期マテリアライズドビューを作成することで、関連する集計分析のクエリ速度を大幅に向上させることができます。単一テーブルのマテリアライズドビューは、統計分析を迅速に実行できるだけでなく、詳細データのクエリニーズも柔軟にサポートしており、Dorisにおいて非常に強力な機能です。