共用方式為


CREATE VIEW

適用於:核取記號為「是」Databricks SQL 核取記號為「是」Databricks Runtime

根據 SQL 查詢的結果set,建構沒有實體數據的虛擬 table。 ALTER VIEWDROP 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 ] } [, ...] )

Parameters

  • 或 REPLACE

    如果已有相同名稱的檢視存在,則會加以取代。 若要取代現有的檢視,您必須是其擁有者。

    取代現有的檢視並不會保留原始檢視上授與的許可權。 使用 ALTER VIEW 來保留許可權。

  • TEMPORARY

    暫時性 views 只對創建它們的工作階段可見,並且會在工作階段結束時被刪除。

  • 全域暫存

    適用於:核取記號為「是」 Databricks Runtime

    GLOBAL TEMPORARY views 會連結至系統保留的暫存 schemaglobal_temp

  • IF NOT EXISTS

    只有在檢視不存在時,才會建立檢視。 如果這個名稱的檢視已經存在, CREATE VIEW 則會忽略 語句。

    您最多可以指定 IF NOT EXISTSOR REPLACE 中的一個。

  • view_name

    新建立的檢視的名稱。 暫存檢視的名稱不得限定。 完整檢視名稱必須唯一。

    hive_metastore 中建立的 Views 只能包含字母數字 ASCII 字元和底線(INVALID_SCHEMA_OR_RELATION_NAME)。

  • schema_binding

    適用於:核取記號為「是」 Databricks Runtime 15.3 和更新版本

    選擇性地指定檢視如何因基礎物件定義變更而適應查詢 schema 的變更。

    暫時 views 或具體化 views不支持這個子句。

    • 配有 SCHEMA 裝訂

      如果查詢 column-list 變更,則檢視會變成無效,但下列條件除外:

      • column-list 包含星號條款,還有額外的 columns。 這些額外的 columns 會被忽略。
      • 一個或多個 columns 的類型發生變更,使得它們可以按照隱式轉換規則安全地轉換回原始 column 類型。

      此為預設行為。

    • 與 SCHEMA 賠償

      若查詢 columnlist 發生變更,除非符合以下條件,否則檢視將會失效:

      • column-list 包含明星條款,還有額外的 columns。 這些額外的 columns 會被忽略。
      • 一或多個 columns 的類型已變更,使得它們能夠透過明確的 ANSI 轉換規則轉換成原始 column 類型。
    • 與 SCHEMA 類型演進

      當 SQL 編譯器檢測到對檢視的引用發生變更時,檢視將採取查詢 columnlist 中類型的任何變更,作為其自身定義的一部分。

    • SCHEMA 演進

      • 此模式的行為與 WITH SCHEMA TYPE EVOLUTION相似,並且如果檢視中不包含明確的 column_list,則也會採用 column 名稱的變更,或加入和卸除 columns。
      • 只有當查詢無法再被剖析或者選用的檢視 column_listqueryselect-list 中的運算式數目不匹配時,檢視才會變成無效。
  • column_list

    選擇性地在檢視的查詢結果中標記 columns。 如果您提供了 columnlist 那麼 column 別名的數目必須符合查詢中的表達式數目。 若未指定 columnlist,則會從檢視的主體中衍生別名。

    • column_alias

      column 別名必須是唯一的。

    • column_comment

      描述 column 別名的可選的 STRING 常值。

  • view_comment

    提供檢視層級批注的選擇性 STRING 常值。

  • TBLPROPERTIES

    選擇性地設定一個或多個使用者定義的屬性。

  • AS 查詢

    從基底 tables 或其他 views建構檢視的查詢。

範例

-- 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
 ---- ------