CREATE MATERIALIZED VIEW - Amazon Redshift

CREATE MATERIALIZED VIEW

1 つ以上の Amazon Redshift テーブル、または Spectrum もしくは横串検索を使用して作成できる外部テーブル に基づいてマテリアライズドビューを作成します。Spectrum の詳細については、「Amazon Redshift Spectrum を使用した外部データのクエリ」を参照してください。横串検索の詳細については、「Amazon Redshift での横串検索を使用したデータのクエリの実行」を参照してください。

Syntax

CREATE MATERIALIZED VIEW mv_name
[ BACKUP { YES | NO } ]
[ table_attributes ]   
[ AUTO REFRESH { YES | NO } ]
AS query 

Parameters

BACKUP

Amazon S3 に保存されている自動または手動クラスタースナップショットにマテリアライズドビューが含まれているか確認する句。

BACKUP のデフォルト値は YES です。

BACKUP NO を指定すると、スナップショットの作成時およびスナップショットからの復元時の処理時間を節約し、Amazon S3 に必要なストレージ量を削減できます。

注記

BACKUP NO の設定は、クラスター内の別ノードへのデータの自動複製には影響しません。そのため、BACKUP NO が指定されたテーブルはノードの障害時に回復します。

table_attributes

マテリアライズドビュー内のデータの分散方法を指定する句。これには、以下が含まれます。

  • DISTSTYLE { EVEN | ALL | KEY } の形式のマテリアライズドビュー向けの分散スタイル。この句を省略すると、分散スタイルは EVEN になります。詳細については、「分散スタイル」を参照してください。

  • DISTKEY ( distkey_identifier ) の形式のマテリアライズドビュー向けの分散キー。詳細については、「分散スタイルの指定」を参照してください。

  • SORTKEY ( column_name [, ...] ) の形式のマテリアライズドビュー向けのソートキー。詳細については、「ソートキーの使用」を参照してください。

AS query

マテリアライズドビューとその内容を定義する有効な SELECT ステートメント。クエリからの結果は、マテリアライズドビューの列および行を定義します。マテリアライズドビューの作成時の制約事項については、「Limitations」を参照してください。

また、クエリで使用する特定の SQL 言語の構造によって、マテリアライズドビューを増分更新できるかフル更新できるかが決まります。更新方法の詳細については、「REFRESH MATERIALIZED VIEW」を参照してください。増分更新の制約事項については、「増分更新の制約事項」を参照してください。

クエリに増分更新をサポートしていない SQL コマンドが含まれている場合、Amazon Redshift ではマテリアライズドビューがフル更新を使用することを示すメッセージが表示されます。このメッセージは、SQL クライアントアプリケーションによって表示される場合と表示されない場合があります。たとえば、psql ではメッセージが表示され、JDBC クライアントでは表示されません。マテリアライズドビューで使用されている更新のタイプについては、stateSTV_MV_INFO 列を確認してください。

AUTO REFRESH

マテリアライズドビューを、そのベーステーブルからの最新の変更で自動的に更新する必要があるかどうかを定義する句。デフォルト値は NO です。詳細については、「マテリアライズドビューの更新」を参照してください。

使用に関する注意事項

マテリアライズドビューを作成するには、次の権限が必要です。

  • スキーマの CREATE 権限。

  • マテリアライズドビューを作成するためのベーステーブルに対するテーブルレベルの SELECT 権限。特定の列に対する列レベルの権限がある場合でも、それらの列にのみマテリアライズドビューを作成することはできません。

マテリアライズドビューまたはベーステーブルの DDL の更新

Amazon Redshift でマテリアライズドビューを使用する場合は、マテリアライズドビューまたはベーステーブルのデータ定義言語 (DDL) の更新に関する以下の注意事項に従ってください。

  • ベーステーブルを参照するマテリアライズドビューに影響を与えることなく、ベーステーブルに列を追加できます。

  • 操作によっては、マテリアライズドビューをまったく更新できない状態になる場合があります。該当する操作として、名前の変更、列の削除、列の種類の変更、スキーマ名の変更などがあります。このようなオペレーションが行われたマテリアライズドビューは、クエリできますが更新できません。この場合、マテリアライズドビューを削除または再作成する必要があります。

  • 一般的に、マテリアライズドビューの定義 (SQL ステートメント) は変更できません。

  • マテリアライズドビューの名前は変更できません。

Limitations

次のものを参照する、または含むマテリアライズドビューは定義できません。

  • 標準ビュー、またはシステムテーブルとビュー。

  • 一時テーブル。

  • ユーザー定義関数。

  • ORDER BY 句、LIMIT 句、OFFSET 句。

  • ベーステーブルの遅延バインディングの参照。つまり、マテリアライズドビューを定義する SQL クエリで参照されるベーステーブルや関連列は存在し、有効である必要があります。

  • リーダーノードのみの関数: CURRENT_SCHEMA、CURRENT_SCHEMAS、HAS_DATABASE_PRIVILEGE、HAS_SCHEMA_PRIVILEGE、HAS_TABLE_PRIVILEGE。

  • マテリアライズドビューの定義の中に、変更可能な関数または外部スキーマが含まれている場合、AUTO REFRESH YES オプションは使用できません。

Examples

次の例では、結合および集計された 3 つのベーステーブルからマテリアライズドビューを作成します。各行は、カテゴリと販売されたチケット数を表します。tickets_mv マテリアライズドビューのクエリを実行すると、tickets_mv マテリアライズドビューの計算済みのデータに直接アクセスします。

CREATE MATERIALIZED VIEW tickets_mv AS select catgroup, sum(qtysold) as sold from category c, event e, sales s where c.catid = e.catid and e.eventid = s.eventid group by catgroup;

次の例では、前の例と同様のマテリアライズドビューを作成して、現時点では増分更新がサポートされていない集計関数 MAX() を使用します。STV_MV_INFO テーブルのクエリを実行することによって、「state」列が 0 であることを確認できます。

CREATE MATERIALIZED VIEW tickets_mv_max AS select catgroup, max(qtysold) as sold from category c, event e, sales s where c.catid = e.catid and e.eventid = s.eventid group by catgroup; SELECT name, state FROM STV_MV_INFO name | state -----------------+-------- tickets_mv | 1 tickets_mv_max | 0

次の例では、UNION ALL 句を使用して Amazon Redshift public_sales テーブルと Redshift Spectrum spectrum.sales テーブルを結合し、mv_sales_vw マテリアルビューを作成します。Amazon Redshift Spectrum の CREATE EXTERNAL TABLE コマンドの詳細については、CREATE EXTERNAL TABLE を参照してください。Redshift Spectrum 外部テーブルは、Amazon S3 のデータを参照します。

CREATE MATERIALIZED VIEW mv_sales_vw as select salesid, qtysold, pricepaid, commission, saletime from public.sales union all select salesid, qtysold, pricepaid, commission, saletime from spectrum.sales

次の例では、横串検索の外部テーブルに基づいてマテリアライズドビュー mv_fq を作成します。横串検索の詳細については、「CREATE EXTERNAL SCHEMA」を参照してください。

CREATE MATERIALIZED VIEW mv_fq as select firstname, lastname from apg.mv_fq_example; select firstname, lastname from mv_fq; firstname | lastname -----------+---------- John | Day Jane | Doe (2 rows)

次の例は、マテリアライズドビューの定義を示しています。

SELECT pg_catalog.pg_get_viewdef('mv_sales_vw'::regclass::oid, true); pg_get_viewdef --------------------------------------------------- create materialized view mv_sales_vw as select a from t;

マテリアライズドビューの概要およびマテリアライズドビューの更新や削除に使用する SQL コマンドの詳細については、以下のトピックを参照してください。