CREATE VIEW
Aplica-se a: SQL do Databricks Databricks Runtime
Constrói uma tabela virtual sem dados físicos com base no conjunto de resultados de uma consulta SQL.
ALTER VIEW
e DROP VIEW
alteram apenas metadados.
Sintaxe
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 ] } [, ...] )
Parâmetros
OR REPLACE
Se já houver uma exibição com o mesmo nome, ela será substituída. Para substituir uma exibição, você deve ser seu proprietário.
Substituir um modo de exibição existente não preserva os privilégios concedidos na exibição original. Use ALTER VIEW para preservar privilégios.
TEMPORARY
As exibições TEMPORARY são visíveis somente para a sessão que as criou e são descartadas quando a sessão termina.
GLOBAL TEMPORARY
Aplica-se a: Databricks Runtime
As exibições GLOBAL TEMPORARY estão vinculadas a um esquema
global_temp
temporário preservado pelo sistema.IF NOT EXISTS
Cria a exibição somente se ela não existir. Se já houver uma exibição com esse nome, a instrução
CREATE VIEW
será ignorada.Você pode especificar no máximo uma opção:
IF NOT EXISTS
ouOR REPLACE
.-
O nome da exibição recém-criada. O nome de uma exibição temporária não deve ser qualificado. O nome de exibição totalmente qualificado deve ser exclusivo.
As exibições criadas em
hive_metastore
podem conter apenas caracteres ASCII alfanuméricos e sublinhados (INVALID_SCHEMA_OR_RELATION_NAME). schema_binding
Aplica-se a: Databricks Runtime 15.3 e versões posteriores
Opcionalmente, especifica como a exibição se adapta às alterações no esquema da consulta devido a alterações nas definições de objeto subjacentes.
Esta cláusula não tem suporte para exibições temporárias ou materializadas.
COM VINCULAÇÃO DE ESQUEMA
A exibição se tornará inválida se a lista de colunas da consulta for alterada, exceto nas seguintes condições:
- A lista de colunas inclui uma cláusula de estrela e há colunas adicionais. Essas colunas adicionais são ignoradas.
- O tipo de uma ou mais colunas foi alterado de uma forma que permite que elas sejam convertidas com segurança nos tipos de coluna originais usando regras de conversão implícitas.
Esse é o comportamento padrão.
COM COMPENSAÇÃO DE ESQUEMA
A exibição se tornará inválida se a lista de colunas da consulta for alterada, exceto nas seguintes condições:
- A lista de colunas inclui uma cláusula de estrela e há colunas adicionais. Essas colunas adicionais são ignoradas.
- O tipo de uma ou mais colunas foi alterado de uma forma que permite que elas sejam convertidas nos tipos de coluna originais usando regras de conversão ANSI explícitas.
COM EVOLUÇÃO DE TIPO DE ESQUEMA
A exibição adotará as alterações feitas nos tipos da lista de colunas da consulta na própria definição quando o compilador SQL detectar essas alterações em resposta a uma referência à exibição.
COM EVOLUÇÃO DE ESQUEMA
- Este modo se comporta como
WITH SCHEMA TYPE EVOLUTION
e também adota as alterações nos nomes das colunas ou as colunas adicionadas e descartadas quando a exibição não inclui uma mensagem explícitacolumn_list
. - A exibição só se tornará inválida se não for mais possível analisar a consulta ou se a exibição opcional
column_list
não corresponder mais ao número de expressões na lista de seleçãoquery
.
- Este modo se comporta como
column_list
Opcionalmente, rotula as colunas no resultado da consulta da exibição. Se você fornecer uma lista de colunas, o número de aliases de coluna deverá corresponder ao de expressões na consulta. Caso não haja lista de colunas especificada, os aliases derivam do corpo da exibição.
-
Os aliases de coluna devem ser exclusivos.
column_comment
Um literal
STRING
opcional que descreve o alias da coluna.
-
view_comment
Um literal de
STRING
opcional que fornece comentários no nível de exibição.-
Opcionalmente, define uma ou mais propriedades definidas pelo usuário.
AS query
Uma consulta que constrói a exibição com base em tabelas base ou em outras exibições.
Exemplos
-- 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
---- ------