同期マテリアライズドビューによる透過的リライティング
概要
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マテリアライズドビューに正常にヒットしたことを意味します:
TABLE: default_cluster:test.sales_records(store_amt), PREAGGREGATION: ON
上記の手順により、synchronous materialized viewsを使用してクエリパフォーマンスを最適化し、データ分析の効率を向上させることができます。
まとめ
synchronous materialized viewsを作成することで、関連する集約分析のクエリ速度を大幅に向上させることができます。単一テーブルのmaterialized viewsは、迅速な統計分析を可能にするだけでなく、詳細データのクエリニーズを柔軟にサポートし、Dorisにおいて非常に強力な機能です。