Partilhar via


CRIAR VISTA

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.

  • 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 GLOBAIS TEMPORARY estão vinculadas a um esquema global_temptemporário preservado pelo sistema.

  • 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 vistas criadas em hive_metastore só podem conter carateres 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 VINCULAÇÃO DE ESQUEMA

      O modo de exibição se tornará inválido se a lista de colunas de consulta for alterada, exceto para as 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 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 COMPENSAÇÃO DE ESQUEMA

      O modo de exibição se tornará inválido se a lista de colunas de consulta for alterada, exceto para as 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 forma a permitir que elas sejam convertidas para os tipos de coluna originais usando regras de conversão ANSI explícitas.
    • COM EVOLUÇÃO DO TIPO DE ESQUEMA

      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 EVOLUÇÃO DO ESQUEMA

      • Esse modo se comporta como WITH SCHEMA TYPE EVOLUTION, e também adota alterações nos nomes das colunas ou colunas adicionadas e soltas se a exibição não incluir um arquivo column_list.
      • O modo de exibição só se tornará inválido se a consulta não puder mais ser analisada ou se o modo de exibição column_list opcional não corresponder mais ao número de expressões na query lista de seleção.
  • column_list

    Opcionalmente, rotula as colunas no resultado da consulta do modo de exibição. 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 literal opcional STRING 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 o modo de exibição a partir de tabelas base ou outros modos de exibição.

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