CREATE VIEW
説明
ビューは、SQL クエリの結果セットに基づいています。CREATE VIEW は、物理データを持たない仮想テーブルを構築するため、ALTER VIEW や DROP VIEW のような操作はメタデータのみを変更します。
構文
CREATE [ OR REPLACE ] [ [ GLOBAL ] TEMPORARY ] VIEW [ IF NOT EXISTS ] view_identifier
create_view_clauses AS query
パラメータ
-
OR REPLACE
同じ名前のビューが既に存在する場合、それは置き換えられます。
-
[ GLOBAL ] TEMPORARY
TEMPORARY ビューはセッションスコープであり、セッションが終了すると破棄されます。これは、基盤となるメタストア(存在する場合)に定義を永続化しないためです。GLOBAL TEMPORARY ビューは、システムで予約された一時データベース
global_tempに関連付けられます。 -
IF NOT EXISTS
ビューが存在しない場合に作成します。
-
view_identifier
ビュー名を指定します。データベース名で修飾することもできます。
構文:
[ database_name. ] view_name -
create_view_clauses
これらの句はオプションであり、順序は関係ありません。以下の形式をとることができます。
[ ( column_name [ COMMENT column_comment ], ... ) ]列レベルのコメントを指定します。[ COMMENT view_comment ]ビューレベルのコメントを指定します。[ TBLPROPERTIES ( property_name = property_value [ , ... ] ) ]メタデータのキーと値のペアを追加します。-
[ WITH SCHEMA { BINDING | COMPENSATION | [ TYPE ] EVOLUTION } ]ビューがスキーマの変更にどのように反応するかを指定します。この句は
TEMPORARYビューではサポートされていません。- BINDING - ビューは、安全なアップキャストを必要とする基盤となるスキーマの型変更のみを許容できます。
- COMPENSATION - ビューは、キャストを必要とする基盤となるスキーマの型変更を許容できます。実行時にキャストエラーが発生する可能性があります。
- TYPE EVOLUTION - ビューは、基盤となるスキーマのあらゆる型変更に適応します。
- EVOLUTION - 列リストなしで定義されたビューの場合、
SELECT *クエリでの列の追加または削除を含む、あらゆるスキーマ変更がビューによって適応されます。ビューが列リストとともに定義されている場合、この句はTYPE EVOLUTIONとして解釈されます。
デフォルトは
WITH SCHEMA COMPENSATIONです。
-
query - 基本テーブルまたは他のビューからビューを構築する SELECT ステートメント。
例
-- Create or replace view for `experienced_employee` with comments.
CREATE OR REPLACE VIEW experienced_employee
(ID COMMENT 'Unique identification number', Name)
COMMENT 'View for experienced employees'
AS SELECT id, name FROM all_employee
WHERE working_years > 5;
-- Create a global temporary view `subscribed_movies` if it does not exist.
CREATE GLOBAL TEMPORARY VIEW IF NOT EXISTS subscribed_movies
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo INNER JOIN members AS mb
ON mo.member_id = mb.id;
-- Create a view filtering the `orders` table which will adjust to schema changes in `orders`.
CREATE OR REPLACE VIEW open_orders WITH SCHEMA EVOLUTION
AS SELECT * FROM orders WHERE status = 'open';