CREATE VIEW
Platí pro: Databricks SQL 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: Databricks Runtime
GLOBÁLNÍ DOČASNÉ views jsou propojené se systémově uchovávánými dočasnými schema
global_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 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ý.
Views vytvořené v
hive_metastore
může 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 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 EVOLUTION
a 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ů vquery
select–list.
- Tento režim se chová jako
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í.
-
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í.-
Volitelně nastaví jednu nebo více uživatelem definovaných vlastností.
-
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
---- ------