共用方式為


CREATE VIEW

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

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

參數

  • 或 REPLACE

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

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

    CREATE OR REPLACE VIEW view_name 相當於 DROP VIEW IF EXISTS view_name,後面接著 CREATE VIEW view_name

  • TEMPORARY

    暫時性檢視只有建立它的會話可見,並會在會話結束時刪除。

  • 全域暫存

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

    全域暫時性視圖會連結至系統保留的暫存架構 global_temp

  • IF NOT EXISTS

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

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

  • view_name

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

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

  • schema_binding

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

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

    暫存檢視或具體化檢視不適用於這個子句。

    • 配有 SCHEMA 裝訂

      如果查詢資料列清單變更,但下列條件除外,檢視會變成無效:

      • 欄位清單包含星號子句,此外還有其他欄位。 會忽略這些額外的欄。
      • 一或多個數據行的類型會以允許它們使用隱含轉換規則安全地轉換成原始數據行類型的方式變更。

      此為預設行為。

    • 與 SCHEMA 賠償

      如果查詢資料列清單變更,但下列條件除外,檢視會變成無效:

      • 欄位清單包含星號子句,此外還有其他欄位。 會忽略這些額外的欄。
      • 一個或多個數據行的類型會以允許它們使用明確的 ANSI 轉換規則轉換成原始數據行類型的方式變更。
    • 與 SCHEMA 類型演進

      當 SQL 編譯程式偵測到這類變更以響應檢視的參考時,檢視會將查詢資料行清單中類型的任何變更採用到自己的定義中。

    • SCHEMA 演進

      • 這種模式的行為就像 WITH SCHEMA TYPE EVOLUTION,如果檢視不包含明確的 column_list,也會採用欄位名稱的變更,或新增和刪除的欄位。
      • 只有當查詢無法再解析,或可選檢視 column_list 不再匹配 query select-list 中的運算式數目時,檢視才會變成無效。
  • column_list

    選擇性地在檢視的查詢結果中標記數據行。 如果您提供資料行清單,數據行別名的數目必須符合查詢中的表達式數目。 如果未指定欄位清單,別名將從檢視的主體中衍生。

    • column_alias

      欄位別名必須是唯一的。

    • column_comment

      描述欄位別名的可選擇的 STRING 常值。

  • view_comment

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

  • TBLPROPERTIES

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

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