CREATE VIEW
Platí pro: Databricks SQL
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í. K zachování oprávnění použijte ALTER VIEW.
CREATE OR REPLACE VIEW view_name
je ekvivalentní kDROP VIEW IF EXISTS view_name
následovánoCREATE VIEW view_name
.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:
Databricks Runtime
Globální dočasná zobrazení jsou svázaná se zachováním dočasného schématu
global_temp
systé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
.-
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
můžou obsahovat pouze alfanumerické znaky a podtržítka (INVALID_SCHEMA_OR_RELATION_NAME). schema_binding
Platí pro:
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 SCHEMA BINDING
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 SCHEMA kompenzací
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 tak, že umožňuje přetypování na původní typy sloupců pomocí explicitních pravidel přetypování ANSI.
S SCHEMA TYPE EVOLUTION
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 SCHEMA EVOLUTION
- Tento režim se chová jako
WITH SCHEMA TYPE EVOLUTION
a 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 už nelze dotaz analyzovat, nebo pokud nepovinné zobrazení
column_list
již neodpovídá počtu výrazů v seznamu výběruquery
.
- Tento režim se chová jako
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í.
-
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í.-
Volitelně nastaví jednu nebo více uživatelem definovaných vlastností.
-
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
---- ------