Sdílet prostřednictvím


VYTVOŘENÍ ZOBRAZENÍ

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

Vytvoří virtuální tabulku, která nemá žádná fyzická data na základě sady výsledků 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 ] } [, ...] )

Parametry

  • 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í. Pomocí příkazu ALTER VIEW zachováte oprávnění.

  • DOČASNÝ

    DOČASNÁ zobrazení 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Á zobrazení jsou svázaná se zachováním dočasného schématu global_tempsystému .

  • 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 EXISTS OR 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ý.

    Zobrazení vytvořená v hive_metastore sadě můžou 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 schématu dotazu kvůli změnám v definicích podkladových objektů.

    Tato klauzule není podporována pro dočasná zobrazení nebo materializovaná zobrazení.

    • S VAZBOU SCHÉMATU

      Zobrazení bude neplatné, pokud se seznam sloupců dotazu změní s výjimkou následujících podmínek:

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

      Toto je výchozí chování.

    • S KOMPENZACÍ SCHÉMATU

      Zobrazení bude neplatné, pokud se seznam sloupců dotazu změní s výjimkou následujících podmínek:

      • Seznam sloupců obsahuje hvězdicovou klauzuli a další sloupce. Tyto další sloupce se ignorují.
      • Typ jednoho nebo více sloupců se změnil způsobem, který umožňuje přetypovat na původní typy sloupců pomocí explicitních pravidel přetypování ANSI.
    • S VÝVOJEM TYPU SCHÉMATU

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

    • S VÝVOJEM SCHÉMATU

      • Tento režim se chová podobně jako WITH SCHEMA TYPE EVOLUTIONa také přijímá změny v názvech sloupců nebo přidané a vyřazené sloupce, pokud zobrazení neobsahuje explicitní column_list.
      • Zobrazení bude neplatné pouze v případě, že se dotaz už nedá analyzovat nebo volitelné zobrazení column_list neodpovídá počtu výrazů v query seznamu select-list.
  • column_list

    Volitelně označí sloupce ve výsledku dotazu zobrazení. Pokud zadáte seznam sloupců, musí se počet aliasů sloupců shodovat s počtem výrazů v dotazu. V případě, že není zadaný žádný seznam sloupců, se odvozují z textu zobrazení.

    • column_alias

      Aliasy sloupců musí být jedinečné.

    • column_comment

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

  • 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ích tabulek nebo jiných zobrazení.

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