CREATE VIEW
適用対象: Databricks SQL Databricks Runtime
SQL クエリの結果セットに基づいて物理データを持たない仮想テーブルを構築します。
ALTER VIEW
および DROP VIEW
は、メタデータのみを変更します。
構文
CREATE [ OR REPLACE ] [ TEMPORARY ] VIEW [ IF NOT EXISTS ] view_name
[ column_list ]
[ schema_binding ]
[ COMMENT view_comment ]
[ TBLPROPERTIES clause ]
AS query
schema_binding
WITH SCHEMA { BINDING | COMPENSATION | [ TYPE ] EVOLUTION }
column_list
( { column_alias [ COMMENT column_comment ] } [, ...] )
パラメーター
OR REPLACE
同じ名前のビューが既に存在する場合は、そのビューが置き換えられます。 既存のビューを置き換えるには、その所有者である必要があります。
既存のビューを置き換えると、元のビューで付与された権限は保持されません。 権限を保持するには、ALTER VIEW を使用します。
TEMPORARY
TEMPORARY ビューは、それを作成したセッションに対してのみ表示され、セッションが終了すると削除されます。
GLOBAL TEMPORARY
適用対象: Databricks Runtime
GLOBAL TEMPORARY ビューは、システムに保存された一時スキーマ
global_temp
に関連付けられます。IF NOT EXISTS
存在しない場合にのみビューを作成します。 この名前のビューが既に存在する場合、
CREATE VIEW
ステートメントは無視されます。IF NOT EXISTS
かOR REPLACE
のいずれか 1 つだけを指定できます。-
新しく作成されたビューの名前。 一時ビューの名前を修正しないでください。 完全修飾のビュー名は一意にする必要があります。
hive_metastore
で作成されたビューには、英数字の ASCII 文字とアンダースコア (INVALID_SCHEMA_OR_RELATION_NAME) のみを含めることができます。 schema_binding
適用対象: Databricks Runtime 15.3 以上
必要に応じて、基になるオブジェクト定義の変更によるクエリのスキーマの変更に、ビューがどのように適応するかを指定します。
この句は、一時ビューまたは具体化されたビューではサポートされていません。
WITH SCHEMA BINDING
次の条件を除き、クエリの列リストが変更された場合、ビューは無効になります。
- 列リストには star 句が含まれており、追加の列があります。 これらの追加の列は無視されます。
- 1 つ以上の列の型が、暗黙的なキャストの規則を使用して元の列型に安全にキャストできるように変更されました。
これが既定の動作です。
WITH SCHEMA COMPENSATION
次の条件を除き、クエリの列リストが変更された場合、ビューは無効になります。
- 列リストには star 句が含まれており、追加の列があります。 これらの追加の列は無視されます。
- 1 つ以上の列の型が、明示的な ANSI のキャストの規則を使用して元の列型にキャストできるように変更されました。
WITH SCHEMA TYPE EVOLUTION
SQL コンパイラがビューへの参照への応答でこのような変更を検出すると、ビューはクエリの列リスト内の型の変更を独自の定義に採用します。
WITH SCHEMA EVOLUTION
- このモードは
WITH SCHEMA TYPE EVOLUTION
のように動作し、ビューに明示的なcolumn_list
が含まれていない場合は、列名の変更や追加および削除された列も採用します。 - クエリを解析できなくなったとき、または省略可能なビュー
column_list
がquery
選択リスト内の式の数と一致しなくなった場合のみ、ビューは無効になります。
- このモードは
column_list
必要に応じて、ビューのクエリ結果内の列にラベルを付けます。 列の一覧を指定する場合は、列の別名の数がクエリ内の式の数と一致している必要があります。 列リストが指定されていない場合、別名はビューの本体から引き出されます。
-
列の別名は一意にする必要があります。
column_comment
列の別名について説明する、省略可能な
STRING
リテラル。
-
view_comment
ビューレベルのコメントを提供する省略可能な
STRING
リテラルです。-
必要に応じて、1 つ以上のユーザー定義プロパティを設定します。
AS クエリ
ベース テーブルまたはその他のビューからビューを構築するクエリです。
例
-- 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 temporary view `subscribed_movies`.
> CREATE TEMPORARY VIEW 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 with schema binding (default)
> CREATE TABLE emp(name STRING, income INT);
> CREATE VIEW emp_v WITH SCHEMA BINDING AS SELECT * FROM emp;
– The view ignores adding a column to the base table
> ALTER TABLE emp ADD COLUMN bonus SMALLINT;
> SELECT * FROM emp_v;
name income
---- ------
-- The view tolerates narrowing the underlying type
> CREATE OR REPLACE TABLE emp(name STRING, income SMALLINT, bonus SMALLINT);
> SELECT typeof(income) FROM emp_v;
INTEGER
– The view does not tolerate widening the underlying type
CREATE OR REPLACE TABLE emp(name STRING, income BIGINT, bonus SMALLINT);
> SELECT typeof(income) FROM emp_v;
Error
– Create a view with SCHEMA COMPENSATION
> CREATE TABLE emp(name STRING, income SMALLINT, bonus SMALLINT);
> CREATE VIEW emp_v WITH SCHEMA COMPENSATION AS SELECT * FROM emp;
-- The view tolerates widening the underlying type but keeps its own signature fixed
CREATE OR REPLACE TABLE emp(name STRING, income INTEGER, bonus INTEGER);
> SELECT typeof(income) FROM emp_v;
INTEGER
-- The view does not tolerate dropping a needed column
ALTER TABLE emp DROP COLUMN bonus;
> SELECT * FROM emp_v;
Error
– Create a view with SCHEMA EVOLUTION
> CREATE TABLE emp(name STRING, income SMALLINT);
> CREATE VIEW emp_v WITH SCHEMA EVOLUTION AS SELECT * FROM emp;
-- The view picks up additional columns
> ALTER TABLE emp ADD COLUMN bonus SMALLINT
> SELECT * FROM emp_v;
name income bonus
---- ------ -----
-- The view picks up renamed columns as well
> ALTER TABLE emp RENAME COLUMN income TO salary SMALLINT;
> SELECT * FROM emp_v;
name salary bonus
---- ------ -----
-- The view picks up changes to column types and dropped columns
> CREATE OR REPLACE TABLE emp(name STRING, salary BIGINT);
> SELECT *, typeof(salary)AS salary_type FROM emp_v;
name salary
---- ------