

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# CREATE VIEW
<a name="r_CREATE_VIEW"></a>

データベースにビューを作成します。このビューは物理的にマテリアライズされません。ビューを定義するクエリは、ビューがクエリで参照されるたびに実行されます。外部テーブルでビューを作成するには、WITH NO SCHEMA BINDING 句を含めます。

標準ビューを作成するには、基礎となるテーブルまたは基礎となるビューへのアクセスが必要です。標準ビューにクエリを実行するには、ビュー自体に対する選択のアクセス許可が必要ですが、基礎となるテーブルに対する選択のアクセス許可は必要ありません。別のスキーマのテーブルまたはビューを参照するビューを作成する場合や、マテリアライズドビューを参照するビューを作成する場合は、使用許可が必要です。遅延バインドビューにクエリを実行するには、遅延バインドビュー自体に対する選択のアクセス許可が必要です。また、遅延バインドビューの所有者が、参照先のオブジェクト (テーブル、ビュー、またはユーザー定義関数) に対する選択のアクセス許可を持っていることも確認します。遅延バインドビューの詳細については、「[使用に関する注意事項](#r_CREATE_VIEW_usage_notes)」を参照してください。

## 必要なアクセス許可
<a name="r_CREATE_VIEW-privileges"></a>

CREATE VIEW を使用するには、次のいずれかのアクセス許可が必要です。
+ CREATE [ OR REPLACE ] VIEW を使用してビューを作成するには
  + スーパーユーザー
  + CREATE [ REPLACE ] VIEW アクセス許可のあるユーザー
+ CREATE OR REPLACE VIEW を使用して既存のビューを置き換えるには
  + スーパーユーザー
  + CREATE [ OR REPLACE ] VIEW アクセス許可のあるユーザー
  + ビューの所有者

ユーザーがユーザー定義関数を組み込んだビューにアクセスしたい場合は、その関数に対する EXECUTE アクセス許可が必要です。

## 構文
<a name="r_CREATE_VIEW-synopsis"></a>

```
CREATE [ OR REPLACE ] VIEW name [ ( column_name [, ...] ) ] AS query
[ WITH NO SCHEMA BINDING ]
```

## パラメータ
<a name="r_CREATE_VIEW-parameters"></a>

OR REPLACE   
同じ名前のビューが既に存在する場合、ビューは置換されます。同じ列名をデータタイプを使用して同一の列セットを生成する新しいクエリでは、ビューの置換のみが可能です。CREATE OR REPLACE VIEW は、操作が完了するまで、読み書きのためにビューをロックします。  
ビューが置き換えられると、所有権や付与された権限などの他のプロパティが保持されます。

 *.name*   
ビューの名前。スキーマ名を指定すると (`myschema.myview` など)、指定したスキーマを使用してビューが作成されます。指定しない場合、現在のスキーマにビューが作成されます。ビュー名は、同じスキーマ内の他のビューやテーブルと異なる名前にする必要があります。  
「\#」で始まるビュー名を指定したビューは、現在のセッションでのみ表示される一時ビューとして作成されます。  
有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。システムデータベース template0、template1、padb\_harvest、または sys:internal にテーブルまたはビューを作成することはできません。

 *column\_name*   
ビューの列に使用されるオプションの名前リスト。列名を指定しない場合、列名はクエリから取得されます。1 つの画面で定義できる列の最大数は 1,600 です。

 *query*()   
テーブルに評価されるクエリ (SELECT ステートメントのフォーム)。このテーブルでは、ビューの列と行を定義します。

 WITH NO SCHEMA BINDING   
テーブルやユーザー定義関数など、基盤となるデータベースオブジェクトにバインドされていないことを示す句。その結果、ビューと参照先のオブジェクト間には依存関係がありません。参照先のオブジェクトが存在しない場合でも、ビューを作成できます。依存関係がないため、ビューに影響を与えることなく参照先のオブジェクトを削除または変更できます。Amazon Redshift は、ビューがクエリされるまで依存関係をチェックしません。再帰的なテーブル共通式 (rCTE) は、遅延バインドビューではサポートされていません。遅延バインドビューの詳細を表示するには、[PG\_GET\_LATE\_BINDING\_VIEW\_COLS](PG_GET_LATE_BINDING_VIEW_COLS.md) 関数を実行します。  
WITH NO SCHEMA BINDING 句を含める場合、SELECT ステートメントで参照されるテーブルとビューは、スキーマ名で修飾する必要があります。スキーマは、参照されるテーブルが存在しない場合でも、ビューを作成するときに存在している必要があります。例えば、次のステートメントはエラーを返します。  

```
create view myevent as select eventname from event
with no schema binding;
```
次のステートメントは正常に実行されます。  

```
create view myevent as select eventname from public.event
with no schema binding;
```

**注記**  
ビューの更新、ビューへの挿入、ビューからの削除を行うことはできません。

## 使用に関する注意事項
<a name="r_CREATE_VIEW_usage_notes"></a>



### 遅延バインドビュー
<a name="r_CREATE_VIEW_late-binding-views"></a>

遅延バインドビューは、ビューのクエリが行われるまで、基礎となるデータベースオブジェクト (テーブルや他のビュー) などをチェックしません。その結果、ビューを削除して再作成することなく、基礎となるオブジェクトを変更または削除できます。基礎となるオブジェクトを削除した場合、遅延バインドビューへのクエリは失敗します。遅延バインドビューへのクエリで、存在しない基盤となるオブジェクトの列を参照している場合、クエリは失敗します。

 遅延バインドビューの基礎となるテーブルまたはビューを削除し、再作成した場合、デフォルトのアクセス権限を持つ新しいオブジェクトが作成されます。ビューにクエリを実行するユーザー用に、基盤オブジェクトへのアクセス許可の付与が必要になる場合があります。

遅延バインドビューを作成するには、WITH NO SCHEMA BINDING 句を含めます。次の例では、スキーマバインドなしでビューを作成します。

```
create view event_vw as select * from public.event
with no schema binding;
```

```
select * from event_vw limit 1;
            
eventid | venueid | catid | dateid | eventname     | starttime
--------+---------+-------+--------+---------------+--------------------
      2 |     306 |     8 |   2114 | Boris Godunov | 2008-10-15 20:00:00
```

次の例は、ビューを再作成せずに基礎となるテーブルを変更できることを示しています。

```
alter table event rename column eventname to title;
```

```
select * from event_vw limit 1;
            
eventid | venueid | catid | dateid | title         | starttime
--------+---------+-------+--------+---------------+--------------------
      2 |     306 |     8 |   2114 | Boris Godunov | 2008-10-15 20:00:00
```

遅延バインドビューでのみ Amazon Redshift Spectrum の外部テーブルを参照できます。遅延バインドビューの 1 つのアプリケーションは、Amazon Redshift と Redshift Spectrum テーブルの両方をクエリできます。例えば、[UNLOAD](r_UNLOAD.md) コマンドを使用して古いデータを Amazon S3 にアーカイブすることができます。次に、Amazon S3 のデータを参照する Redshift Spectrum 外部テーブルを作成し、両方のテーブルをクエリするビューを作成します。次の例では、UNION ALL 句を使用して、Amazon Redshift `SALES` テーブルと Redshift Spectrum `SPECTRUM.SALES` テーブルを結合します。

```
create view sales_vw as
select * from public.sales
union all
select * from spectrum.sales
with no schema binding;
```

`SPECTRUM.SALES` など、Redshift Spectrum 外部テーブルの作成の詳細については、[Amazon Redshift Spectrum の開始方法](c-getting-started-using-spectrum.md)参照してください。

**重要**  
遅延バインディングビューから標準ビューを作成すると、その標準ビューの定義には、作成時点における遅延バインディングビューの定義 (遅延バインディングビューの所有者など) が含まれます。基になる遅延バインディングビューに変更を加えても、標準ビューを再作成しない限り、その変更は標準ビューには反映されません。そのため、標準ビューに対してクエリを実行すると、常に、その標準ビューの作成時点の遅延バインディングビューの定義と所有者がアクセス許可の確認に使用されます。

遅延バインドビューの最新の定義を参照するように標準ビューを更新するには、標準ビューの作成に使用した最初のビュー定義で CREATE OR REPLACE VIEW を実行します。

次の例では、遅延バインドビューから標準ビューを作成します。

```
create view sales_vw_lbv as 
select * from public.sales 
with no schema binding;

show view sales_vw_lbv;
                            Show View DDL statement
--------------------------------------------------------------------------------
 create view sales_vw_lbv as select * from public.sales with no schema binding;
(1 row)

create view sales_vw as 
select * from sales_vw_lbv;

show view sales_vw;
                                               Show View DDL statement
---------------------------------------------------------------------------------------------------------------------
 SELECT sales_vw_lbv.price, sales_vw_lbv."region" FROM (SELECT sales.price, sales."region" FROM sales) sales_vw_lbv;
(1 row)
```

標準ビューの DDL ステートメントに示されている遅延バインドビューは、標準ビューの作成時に定義され、後で遅延バインドビューに変更を加えても更新されないことに注意してください。

## 例
<a name="r_CREATE_VIEW-examples"></a>

サンプルコマンドでは、*TICKIT* データベースと呼ばれるオブジェクトとデータのサンプルセットを使用しています。詳細については、「[サンプルデータベース](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html)」を参照してください。

次のコマンドでは、EVENT というテーブルから *myevent* というビューを作成します。

```
create view myevent as select eventname from event
where eventname = 'LeAnn Rimes';
```

次のコマンドでは、USERS というテーブルから *myuser* というビューを作成します。

```
create view myuser as select lastname from users;
```

次のコマンドでは、USERS というテーブルから *myuser* というビューを作成または置換します。

```
create or replace view myuser as select lastname from users;
```

次の例では、スキーマバインドなしでビューを作成します。

```
create view myevent as select eventname from public.event
with no schema binding;
```