Sdílet prostřednictvím


CREATE VIEW

Platí pro:zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime

Vytvoří virtuální table, která nemá žádná fyzická data na základě výsledkuset dotazu SQL. ALTER VIEW a DROP VIEW měnit pouze metadata.

Syntaxe

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

  • NEBO NAHRADIT

    Pokud zobrazení stejného názvu již existuje, nahradí se. Pokud chcete nahradit existující zobrazení, musíte být jeho vlastníkem.

    Nahrazení existujícího zobrazení nezachová oprávnění udělená v původním zobrazení. K zachování oprávnění použijte ALTER VIEW.

  • DOČASNÝ

    DOČASNÉ views jsou viditelné pouze pro relaci, která je vytvořila, a po skončení relace se zahodí.

  • GLOBAL TEMPORARY

    Platí pro:zaškrtnutí označeného ano Databricks Runtime

    GLOBÁLNÍ DOČASNÉ views jsou propojené se systémově uchovávánými dočasnými schemaglobal_temp.

  • POKUD NEEXISTUJE

    Vytvoří zobrazení pouze v případě, že neexistuje. Pokud zobrazení podle tohoto názvu již existuje, CREATE VIEW příkaz je ignorován.

    Můžete zadat nejvýše jednu z nebo IF NOT EXISTSOR REPLACE.

  • view_name

    Název nově vytvořeného zobrazení Název dočasného zobrazení nesmí být kvalifikovaný. Plně kvalifikovaný název zobrazení musí být jedinečný.

    Views vytvořené v hive_metastore může obsahovat pouze alfanumerické znaky a podtržítka (INVALID_SCHEMA_OR_RELATION_NAME).

  • schema_binding

    Platí pro:zaškrtnutí označeného ano Databricks Runtime 15.3 a vyšší

    Volitelně určuje, jak se zobrazení přizpůsobí změnám schema dotazu kvůli změnám v definicích podkladového objektu.

    Tato klauzule není podporována pro dočasné views ani pro materializované views.

    • S SCHEMA BINDING

      Zobrazení bude neplatné, pokud se dotaz column–list změní s výjimkou následujících podmínek:

      • column–list obsahuje hvězdicovou klauzuli a existují další columns. Tyto další columns se ignorují.
      • Typ jednoho nebo více columns se změnil způsobem, který umožňuje bezpečné přetypování na původní typy column pomocí implicitních pravidel přetypování.

      Toto je výchozí chování.

    • s SCHEMA kompenzací

      Zobrazení bude neplatné, pokud se dotaz columnlist změní s výjimkou následujících podmínek:

      • column–list obsahuje hvězdicovou klauzuli a existují další columns. Tyto další columns se ignorují.
      • Typ jednoho nebo více columns se změnil způsobem, který umožňuje přetypování na původní typy column pomocí explicitních pravidel přetypování ANSI.
    • S SCHEMA TYPE EVOLUTION

      Zobrazení přijme všechny změny typů v dotazu columnlist do vlastní definice, když kompilátor SQL zjistí takovou změnu v reakci na odkaz na zobrazení.

    • S SCHEMA EVOLUTION

      • Tento režim se chová jako WITH SCHEMA TYPE EVOLUTIONa také přijímá změny v názvech column, nebo přidané a vyřazené columns, pokud zobrazení neobsahuje explicitní column_list.
      • Zobrazení bude neplatné jenom v případě, že se dotaz už nedá analyzovat, nebo nepovinné zobrazení column_list už neodpovídá počtu výrazů v queryselect–list.
  • column_list

    Volitelně označí columns ve výsledku dotazu zobrazení. Pokud zadáte columnlist počet aliasů column musí odpovídat počtu výrazů v dotazu. V případě, že nejsou zadány žádné columnlist aliasy jsou odvozeny z textu zobrazení.

    • column_alias

      Aliasy column musí být jedinečné.

    • column_comment

      Volitelný STRING literál popisující alias column.

  • view_comment

    Volitelný STRING literál poskytující komentáře na úrovni zobrazení.

  • TBLPROPERTIES

    Volitelně nastaví jednu nebo více uživatelem definovaných vlastností.

  • Dotaz AS

    Dotaz, který sestaví zobrazení ze základního tables nebo jiného views.

Příklady

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