Sync-Materialized Viewによる透過的な書き換え
概要
Sync-Materialized Viewは、事前定義されたSELECT文に従ってデータを事前計算し、格納する特別な種類のTableです。その主な目的は、あらゆる次元からの生の詳細データを分析したいユーザーのニーズを満たし、固定次元での迅速な分析とクエリも可能にすることです。
同期マテリアライズドビューの適用シナリオは以下の通りです:
- 分析要件が詳細データクエリと固定次元クエリの両方をカバーしている。
- クエリがTable内の少数の列または行のみを含んでいる。
- クエリが長時間の集計操作などの時間のかかる処理操作を含んでいる。
- クエリが異なるプレフィックスインデックスにマッチする必要がある。
同じサブクエリの結果を頻繁かつ繰り返し使用するクエリに対して、同期マテリアライズドビューはパフォーマンスを大幅に向上させることができます。Dorisはマテリアライズドビューのデータを自動的に維持し、ベースTableとマテリアライズドビューTable間のデータ整合性を保証し、追加の手動メンテナンスコストは不要です。クエリ実行時、システムは自動的に最適なマテリアライズドビューをマッチングし、そこから直接データを読み込みます。
- Doris 2.0以降のバージョンでは、マテリアライズドビューにいくつかの拡張機能があります。正式な本番環境でマテリアライズドビューを使用する前に、期待するクエリが作成予定のマテリアライズドビューにヒットできるかをテスト環境で確認することを推奨します。
- 同一Table上に類似した形式の複数のマテリアライズドビューを作成することは推奨されません。複数のマテリアライズドビュー間で競合が発生し、クエリヒットの失敗を引き起こす可能性があります。
ケース
以下では、具体例を使用して同期マテリアライズドビューを使ってクエリを高速化するプロセスを説明します:
sales_recordsという名前の詳細な売上記録Tableがあると仮定します。このTableは各取引の様々な情報を詳細に記録しており、取引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マテリアライズドビューが正常に作成されたことを意味します。
Transparent Rewriting
マテリアライズドビューが作成された後、異なるストアの売上高をクエリする際、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
上記の手順により、同期マテリアライズドビューを使用してクエリパフォーマンスを最適化し、データ分析の効率を向上させることができます。
まとめ
同期マテリアライズドビューを作成することで、関連する集約分析のクエリ速度を大幅に改善できます。単一Tableのマテリアライズドビューは、統計分析を迅速に実行できるだけでなく、詳細データのクエリニーズを柔軟にサポートし、これはDorisにおいて非常に強力な機能です。