CREATE MATERIALIZED VIEW

Cria uma nova exibição materializada no esquema atual/especificado, com base em uma consulta de uma tabela existente, e preenche a exibição com dados.

Para obter mais detalhes, consulte Como trabalhar com exibições materializadas.

Consulte também:

ALTER MATERIALIZED VIEW , DROP MATERIALIZED VIEW , SHOW MATERIALIZED VIEWS , DESCRIBE MATERIALIZED VIEW

Sintaxe

CREATE [ OR REPLACE ] [ SECURE ] MATERIALIZED VIEW [ IF NOT EXISTS ] <name>
  [ COPY GRANTS ]
  ( <column_list> )
  [ <col1> [ WITH ] MASKING POLICY <policy_name> [ USING ( <col1> , <cond_col1> , ... ) ]
           [ WITH ] PROJECTION POLICY <policy_name>
           [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ , <col2> [ ... ] ]
  [ COMMENT = '<string_literal>' ]
  [ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
  [ [ WITH ] AGGREGATION POLICY <policy_name> ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ CLUSTER BY ( <expr1> [, <expr2> ... ] ) ]
  AS <select_statement>
Copy

Parâmetros obrigatórios

name

Especifica o identificador da visualização; deve ser único para o esquema no qual a visualização é criada.

Além disso, o identificador deve começar com um caractere alfabético e não pode conter espaços ou caracteres especiais, a menos que toda a cadeia de caracteres do identificador esteja entre aspas duplas (por exemplo, "My object"). Os identificadores delimitados por aspas duplas também diferenciam letras maiúsculas de minúsculas.

Para obter mais detalhes, consulte Requisitos para identificadores.

select_statement

Especifica a consulta utilizada para criar a visualização. Esta consulta serve como texto/definição da visualização. Esta consulta é exibida na saída de SHOW VIEWS e SHOW MATERIALIZED VIEWS.

Há limitações em select_statement. Para obter mais detalhes, consulte:

Parâmetros opcionais

column_list:

Se você não quiser que os nomes das colunas na visualização sejam os mesmos nomes das colunas da tabela subjacente, você pode incluir uma lista de colunas na qual você especifica os nomes das colunas. (Você não precisa especificar os tipos de dados das colunas).

Se você incluir uma cláusula CLUSTER BY para a exibição materializada, então você deve incluir a lista de nomes das colunas.

MASKING POLICY = policy_name

Especifica a política de mascaramento a ser definida em uma coluna.

USING ( col_name , cond_col_1 ... )

Especifica os argumentos para passar para a expressão SQL da política de mascaramento condicional.

A primeira coluna da lista especifica a coluna das condições da política para mascarar ou tokenizar os dados e deve corresponder à coluna para a qual a política de mascaramento é definida.

As colunas adicionais especificam as colunas a serem avaliadas para determinar se os dados em cada linha do resultado da consulta devem ser mascarados ou tokenizados quando uma consulta é feita na primeira coluna.

Se a cláusula USING for omitida, o Snowflake tratará a política de mascaramento condicional como uma política de mascaramento normal.

PROJECTION POLICY policy_name

Especifica a política de projeção a ser definida em uma coluna.

string_literal

Especifica um comentário para a visualização. O literal de cadeia de caracteres deve estar entre aspas simples. (O literal de cadeia de caracteres não deve conter aspas simples, a menos que elas sejam de escape).

Padrão: sem valor.

expr#

Especifica uma expressão na qual deve ser feito o clustering da exibição materializada. Tipicamente, cada expressão é o nome de uma coluna na exibição materializada.

Para obter mais informações sobre clustering de exibições materializadas, consulte Exibições materializadas e clustering. Para obter mais informações sobre clustering em geral, consulte O que é clustering de dados?.

SECURE

Especifica que a visualização é segura. Para obter mais informações sobre exibições seguras, consulte Como trabalhar com exibições seguras.

Padrão: sem valor (a visualização não é segura)

COPY GRANTS

Se você estiver substituindo uma visualização existente usando a cláusula OR REPLACE, então a visualização de substituição mantém as permissões de acesso da visualização original. Este parâmetro copia todos os privilégios, exceto OWNERSHIP, da visualização existente para a nova visualização. A nova visualização não herda as concessões futuras definidas para o tipo de objeto no esquema. Por padrão, a função que executa a instrução CREATE MATERIALIZEDVIEW é a proprietária da nova visualização.

Se o parâmetro não estiver incluído na instrução CREATE VIEW, então a nova exibição não herda qualquer privilégio de acesso explícito concedido na exibição original, mas herda qualquer concessão futura definida para o tipo de objeto no esquema.

Observe que a operação de cópia de concessões ocorre atomicamente com a instrução CREATE VIEW (isto é, dentro da mesma transação).

Padrão: sem valor (as concessões não são copiadas).

ROW ACCESS POLICY policy_name ON ( col_name [ , col_name ... ] )

Especifica a política de acesso a linhas a ser definida na exibição materializada.

AGGREGATION POLICY policy_name

Especifica a política de agregação a ser definida na exibição materializada.

TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )

Especifica o nome da tag e o valor da cadeia de caracteres dela.

O valor de tag é sempre uma cadeia de caracteres, e o número máximo de caracteres do valor da tag é 256.

Para obter informações sobre como especificar tags em uma instrução, consulte Cotas de tags para objetos e colunas.

Notas de uso

  • Criar uma exibição materializada exige o privilégio CREATE MATERIALIZED VIEW no esquema e o privilégio SELECT na tabela base. Para obter mais informações sobre privilégios e exibições materializadas, consulte Privilégios em relação ao esquema de uma exibição materializada.

  • Quando você escolhe um nome para a exibição materializada, observe que um esquema não pode conter uma tabela e uma visualização com o mesmo nome. CREATE [ MATERIALIZED ] VIEW é emitido um erro se já existir uma tabela com o mesmo nome no esquema.

  • Ao especificar o select_statement, observe o seguinte:

    • Você não pode especificar uma cláusula HAVING ou uma cláusula ORDER BY.

    • Se você incluir uma cláusula CLUSTER BY para a exibição materializada, você deve incluir a cláusula column_list.

    • Se você se referir à tabela base mais de uma vez no select_statement, use o mesmo qualificador para todas as referências da tabela base.

      Por exemplo, não use uma mistura de base_table, schema.base_table e database.schema.base_table no mesmo select_statement. Em vez disso, escolha uma destas formas (por exemplo, database.schema.base_table), e use-a consistentemente em todo o select_statement.

    • Não consulte os objetos do fluxo na instrução SELECT. Os fluxos não são projetados para servir como objetos de origem para visualizações ou exibições materializadas.

  • Alguns nomes de colunas não são permitidos em exibições materializadas. Se um nome de coluna não for permitido, você poderá definir um alias para a coluna. Para obter mais detalhes, consulte Tratamento de nomes de colunas que não são permitidos em exibições materializadas.

  • Se a exibição materializada consultar tabelas externas, você deverá atualizar os metadados no nível de arquivo para que as tabelas externas reflitam as mudanças no local de armazenamento em nuvem referenciado, incluindo arquivos novos, atualizados e removidos.

    Você pode atualizar os metadados de uma tabela externa automaticamente usando o serviço de notificação de eventos para seu serviço de armazenamento em nuvem ou manualmente usando instruções ALTER EXTERNAL TABLE … REFRESH.

  • As exibições materializadas têm uma série de outras restrições. Para obter mais detalhes, consulte Limitações na criação de exibições materializadas e Limitações ao trabalho com exibições materializadas.

  • As definições de visualização não são atualizadas se o esquema da tabela de origem subjacente for alterado de forma que a definição de visualização se torne inválida. Por exemplo:

    • Uma exibição é criada a partir de uma tabela de base e uma coluna é subsequentemente eliminada dessa tabela de base.

    • A tabela de base da exibição materializada é descartada.

    Nestes cenários, consultar a exibição retorna um erro que inclui o motivo pelo qual a exibição foi invalidada. Por exemplo:

    Failure during expansion of view 'MV1':
      SQL compilation error: Materialized View MV1 is invalid.
      Invalidation reason: DDL Statement was executed on the base table 'MY_INVENTORY'.
      Marked Materialized View as invalid.
    

    Quando isso ocorrer, você pode fazer o seguinte:

  • Em relação aos metadados:

    Atenção

    Os clientes devem garantir que nenhum dado pessoal (exceto para um objeto do usuário), dados sensíveis, dados controlados por exportação ou outros dados regulamentados sejam inseridos como metadados ao usar o serviço Snowflake. Para obter mais informações, consulte Campos de metadados no Snowflake.

  • Usar OR REPLACE é o equivalente a usar DROP MATERIALIZED VIEW na exibição materializada existente e depois criar uma nova visualização com o mesmo nome.

    Instruções CREATE OR REPLACE <object> são atômicas. Ou seja, quando um objeto é substituído, o objeto antigo é excluído e o novo objeto é criado em uma única transação.

    Isso significa que qualquer consulta concorrente com a operação CREATE OR REPLACE MATERIALIZED VIEW utiliza a versão da exibição materializada antiga ou nova.

  • Ao criar uma exibição materializada com uma política de mascaramento em uma ou mais colunas da exibição materializada, ou uma política de acesso a linhas adicionada à visualização materializada, use a função POLICY_CONTEXT para simular uma consulta na(s) coluna(s) protegida(s) por uma política de mascaramento e a exibição materializada protegida por uma política de acesso a linhas.

Exemplos

Criar uma exibição materializada no esquema atual, com um comentário, que selecione todas as linhas de uma tabela:

CREATE MATERIALIZED VIEW mymv
    COMMENT='Test view'
    AS
    SELECT col1, col2 FROM mytable;
Copy

Para obter mais exemplos, consulte os exemplos em Como trabalhar com exibições materializadas.