すべてのプロダクト
Search
ドキュメントセンター

Hologres:マテリアライズドビュー

最終更新日:Jan 06, 2026

マテリアライズドビューは、クエリ結果を格納する事前計算されたオブジェクトです。JOINAGGREGATE のような時間のかかる操作の繰り返しを回避することで、クエリのパフォーマンスを向上させます。このトピックでは、マテリアライズドビューの作成、クエリ、ドロップに関するコマンドについて説明します。

制限事項

マテリアライズドビューは Hologres V1.3 以降で利用できます。ご利用のインスタンスのバージョンが V1.3 より前の場合は、スペックアップしてください。

説明

制限事項と操作の詳細については、「SQL を使用したマテリアライズドビューの管理」をご参照ください。

マテリアライズドビューの作成

  • 構文

    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');

マテリアライズドビューのクエリ

例:

SELECT * FROM mv_sales WHERE day = to_char(now(),'YYYYMMDD') AND hour = 12;

マテリアライズドビューのドロップ

  • 構文

    DROP MATERIALIZED VIEW <mv_name>;

    mv_name:マテリアライズドビューの名前です。

  • DROP MATERIALIZED VIEW mv_sales;