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 EXISTSOR REPLACE のいずれか 1 つだけを指定できます。

  • view_name

    新しく作成されたビューの名前。 一時ビューの名前を修正しないでください。 完全修飾のビュー名は一意にする必要があります。

    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_listquery 選択リスト内の式の数と一致しなくなった場合のみ、ビューは無効になります。
  • column_list

    必要に応じて、ビューのクエリ結果内の列にラベルを付けます。 列の一覧を指定する場合は、列の別名の数がクエリ内の式の数と一致している必要があります。 列リストが指定されていない場合、別名はビューの本体から引き出されます。

    • column_alias

      列の別名は一意にする必要があります。

    • column_comment

      列の別名について説明する、省略可能な STRING リテラル。

  • view_comment

    ビューレベルのコメントを提供する省略可能な STRING リテラルです。

  • TBLPROPERTIES

    必要に応じて、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
 ---- ------