CREATE VIEW
Aplica-se a: Databricks SQL
Databricks Runtime
Constrói uma tabela virtual que não tem dados físicos com base no conjunto de resultados de uma consulta SQL.
ALTER VIEW
e DROP VIEW
alterar 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
OU SUBSTITUIR
Se já existir uma vista com o mesmo nome, esta é substituída. Para substituir um modo de exibição existente, você deve ser seu proprietário.
A substituição de um modo de exibição existente não preserva os privilégios concedidos no modo de exibição original. Use ALTER VIEW para preservar privilégios.
CREATE OR REPLACE VIEW view_name
equivale aDROP VIEW IF EXISTS view_name
seguido deCREATE VIEW view_name
.TEMPORÁRIO
As vistas TEMPORÁRIAS são visíveis apenas para a sessão que as criou e são eliminadas quando a sessão termina.
GLOBAL TEMPORÁRIO
Aplica-se a:
Databricks Runtime
As visualizações TEMPORÁRIA GLOBAL estão vinculadas a um esquema preservado temporário do sistema
global_temp
.SE NÃO EXISTIR
Cria o modo de exibição somente se ele não existir. Se já existir uma vista com este nome, a
CREATE VIEW
instrução é ignorada.Você pode especificar no máximo um dos
IF NOT EXISTS
ouOR REPLACE
.-
O nome do modo de exibição recém-criado. O nome de um modo de exibição temporário não deve ser qualificado. O nome do modo de exibição totalmente qualificado deve ser exclusivo.
As visualizações criadas no
hive_metastore
só podem conter caracteres ASCII alfanuméricos e sublinhados (INVALID_SCHEMA_OR_RELATION_NAME). schema_binding
Aplica-se a:
Databricks Runtime 15.3 e superior
Opcionalmente, especifica como o modo de exibição se adapta a alterações no esquema da consulta devido a alterações nas definições de objeto subjacentes.
Esta cláusula não é suportada para vistas temporárias ou vistas materializadas.
COM SCHEMA VINCULATIVO
A vista tornar-se-á inválida se a lista de colunas de consulta for alterada, exceto nas seguintes condições:
- A lista de colunas inclui uma cláusula estrela e há colunas adicionais. Essas colunas adicionais são ignoradas.
- O tipo de uma ou mais colunas foi alterado de forma a permitir que elas sejam convertidas com segurança para os tipos de coluna originais usando regras de transmissão implícitas.
Este é o comportamento predefinido.
COM SCHEMA COMPENSAÇÃO
A vista tornar-se-á inválida se a lista de colunas de consulta for alterada, exceto nas seguintes condições:
- A lista de colunas inclui uma cláusula estrela e há colunas adicionais. Essas colunas adicionais são ignoradas.
- O tipo de uma ou mais colunas foi alterado de forma a permitir que elas sejam convertidas para os tipos de coluna originais usando regras de conversão ANSI explícitas.
COM EVOLUÇÃO TIPO SCHEMA
O modo de exibição adotará quaisquer alterações nos tipos na lista de colunas de consulta em sua própria definição quando o compilador SQL detetar tal alteração em resposta a uma referência ao modo de exibição.
COM SCHEMA EVOLUÇÃO
- Este modo funciona como
WITH SCHEMA TYPE EVOLUTION
e também adota alterações nos nomes das colunas ou colunas adicionadas e removidas se a visualização não incluir umcolumn_list
explícito. - A vista apenas se tornará inválida se a consulta não puder mais ser analisada ou se a vista opcional
column_list
já não corresponder ao número de expressões na lista de seleção dequery
.
- Este modo funciona como
column_list
Opcionalmente rotula as colunas no resultado da consulta da vista. Se você fornecer uma lista de colunas, o número de aliases de coluna deverá corresponder ao número de expressões na consulta. Caso nenhuma lista de colunas seja especificada, os aliases são derivados do corpo da exibição.
-
Os aliases de coluna devem ser exclusivos.
column_comment
Um
STRING
literal opcional que descreve o alias da coluna.
-
view_comment
Um literal opcional
STRING
que fornece comentários no nível de exibição.-
Opcionalmente, define uma ou mais propriedades definidas pelo usuário.
-
Uma consulta que constrói a vista a partir de tabelas base ou outras vistas.
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
---- ------