Compartilhar via


CREATE VIEW

Aplica-se a: marca de seleção positiva SQL do Databricks marca de seleção positiva 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:caixa de seleção marcada 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 ou OR REPLACE.

  • view_name

    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: verificação marcada como sim 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ícita column_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ção query.
  • 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.

    • column_alias

      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.

  • TBLPROPERTIES

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