Partilhar via


CREATE VIEW

Aplica-se a:Marque Sim Databricks SQL Marque Sim 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 a DROP VIEW IF EXISTS view_name seguido de CREATE 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:Marque Sim 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 ou OR REPLACE.

  • view_name

    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:Marque Sim 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 EVOLUTIONe também adota alterações nos nomes das colunas ou colunas adicionadas e removidas se a visualização não incluir um column_listexplí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 de query.
  • 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.

    • column_alias

      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.

  • TBLPROPERTIES

    Opcionalmente, define uma ou mais propriedades definidas pelo usuário.

  • Consulta AS

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