マテリアライズドビューは、JOIN や AGGREGATE などの時間のかかるクエリの事前計算結果を格納するデータベースオブジェクトです。同じクエリを実行する場合、事前計算結果を直接再利用できます。これにより、クエリが高速化されます。このトピックでは、MATERIALIZED VIEW ステートメントの構文と制限について説明します。また、MATERIALIZED VIEW ステートメントを使用してマテリアライズドビューを管理する方法についても説明します。
制限
Hologres V1.3 以降でのみ、マテリアライズドビューがサポートされています。インスタンスのバージョンが V1.3 より前の場合、Hologres コンソールで Hologres インスタンスを手動でアップグレードするか、DingTalk グループに参加してインスタンスのアップグレードを申請してください。 Hologres インスタンスを手動でアップグレードする方法の詳細については、「インスタンスのアップグレード」をご参照ください。Hologres DingTalk グループへの参加方法の詳細については、「Hologres のオンラインサポートを受ける」をご参照ください。
制限と操作の詳細については、「リアルタイムマテリアライズドビュー」をご参照ください。
マテリアライズドビューの作成
構文
次のステートメントを実行して、マテリアライズドビューを作成できます。
CREATE MATERIALIZED VIEW <mv_name> AS <QUERY BODY>;
mv_name パラメーターはカスタムマテリアライズドビューの名前を指定し、QUERY BODY パラメーターはクエリステートメントを指定します。クエリステートメントの詳細については、「SELECT」をご参照ください。
例
パーティション化されていないテーブルのマテリアライズドビューを作成します。
BEGIN; CREATE TABLE base_sales( day text not null, hour int , ts timestamptz, amount float, pk text not null primary key ); CALL SET_TABLE_PROPERTY('base_sales', 'mutate_type', 'appendonly'); -- マテリアライズドビューが削除された場合は、次のステートメントを実行して、テーブルの appendonly プロパティをキャンセルできます。 --CALL SET_TABLE_PROPERTY('base_sales', 'mutate_type', 'none'); CREATE MATERIALIZED VIEW mv_sales AS SELECT day, hour, avg(amount) AS amount_avg FROM base_sales GROUP BY day, hour; COMMIT; insert into base_sales values(to_char(now(),'YYYYMMDD'),'12',now(),100,'pk1'); insert into base_sales values(to_char(now(),'YYYYMMDD'),'12',now(),200,'pk2'); insert into base_sales values(to_char(now(),'YYYYMMDD'),'12',now(),300,'pk3');
パーティション化されたテーブルのマテリアライズドビューを作成します。
BEGIN; CREATE TABLE base_sales_p( day text not null, hour int, ts timestamptz, amount float, pk text not null, primary key (day, pk) ) partition by list(day); CALL SET_TABLE_PROPERTY('base_sales_p', 'mutate_type', 'appendonly'); -- day はパーティションキー列です。マテリアライズドビューの GROUP BY 句の条件に含める必要があります。 CREATE MATERIALIZED VIEW mv_sales_p AS SELECT day, hour, avg(amount) AS amount_avg FROM base_sales_p GROUP BY day, hour; COMMIT; create table base_sales_20220101 partition of base_sales_p for values in('20220101');
マテリアライズドビューのクエリ
次の SQL ステートメントを実行して、作成されたマテリアライズドビューを表示できます。
SELECT * FROM mv_sales WHERE day = to_char(now(),'YYYYMMDD') AND hour = 12;
マテリアライズドビューの削除
構文
次の SQL ステートメントを実行して、マテリアライズドビューを削除できます。
DROP MATERIALIZED VIEW <mv_name>;
mv_name パラメーターは、マテリアライズドビューの名前を指定します。
例
DROP MATERIALIZED VIEW mv_sales;