Compartilhar via


CRIAR A EXIBIÇÃO MATERIALIZADA

Aplica-se a:marca de seleção positiva SQL do Databricks

Uma exibição materializada é uma exibição em que os resultados pré-compilados estão disponíveis para consulta e podem ser atualizados para refletir as alterações na entrada. Sempre que uma exibição materializada é atualizada, os resultados da consulta são recalculados para refletir alterações em conjuntos de dados upstream. Todas as exibições materializadas são apoiadas por um pipeline DLT. Você pode atualizar as exibições materializadas manualmente ou como parte de uma programação.

Para saber mais sobre como executar uma atualização manual, confira REFRESH (MATERIALIZED VIEW or STREAMING TABLE).

Para saber mais sobre como agendar uma atualização, confira Exemplos ou ALTER MATERIALIZED VIEW.

Observação

As operações de criação e atualização em exibições materializadas e tabelas de streaming são alimentadas por um pipeline de Tabelas Dinâmicas Delta sem servidor. Você pode usar o Gerenciador de Catálogos para exibir detalhes sobre os pipelines de backup na interface do usuário. Confira O que é o Explorador de Catálogos?.

Sintaxe

{ CREATE OR REPLACE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] }
  view_name
  [ column_list ]
  [ view_clauses ]
  [schedule_clause]
  AS query

column_list
   ( { column_name column_type column_properties } [, ...]
      [ , table_constraint ] [...])

   column_properties
      { NOT NULL | COMMENT column_comment | column_constraint | MASK clause } [ ... ]

view_clauses
  { PARTITIONED BY (col [, ...]) |
    COMMENT view_comment |
    TBLPROPERTIES clause |
    SCHEDULE [ REFRESH ] schedule_clause |
    WITH { ROW FILTER clause } } [...]

schedule_clause
  { EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS } |
    CRON cron_string [ AT TIME ZONE timezone_id ] }

Parâmetros

  • REPLACE

    Se for especificado, substitui a exibição e seu conteúdo, caso já exista.

  • IF NOT EXISTS

    Cria a exibição se ela não existir. Se já houver uma exibição com esse nome, a instrução CREATE MATERIALIZED 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 exibição totalmente qualificado deve ser exclusivo.

  • 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. Se nenhuma lista de colunas for especificada, os aliases serão derivados do corpo da exibição.

    • column_name

      Os nomes de coluna devem ser exclusivos e mapear para as colunas de saída da consulta.

    • column_type

      Especifica o tipo de dados da coluna. Nem todos os tipos de dados com suporte do Azure Databricks são compatíveis com exibições materializadas.

    • column_comment

      Um literal de STRING opcional que descreve o nome da coluna. Essa opção deve ser especificada junto com o column_type. Se o tipo de coluna não for especificado, o comentário da coluna será ignorado.

    • column_constraint

      Adiciona uma chave primária informativa ou uma restrição de chave estrangeira informativa à coluna em uma exibição materializada. Se o tipo de coluna não for especificado, a restrição da coluna será ignorada.

    • Cláusula MASK

      Importante

      Esse recurso está em uma versão prévia.

      Adiciona uma função de máscara de coluna para anonimizar dados confidenciais. Todas as consultas subsequentes dessa coluna recebem o resultado da avaliação dessa função sobre a coluna no lugar do valor original. Isso pode ser útil para fins de um controle de acesso detalhado, em que a função pode inspecionar a identidade e/ou as filiações a grupos do usuário que a invocou para determinar se quer ocultar o valor. Se o tipo de coluna não for especificado, a máscara da coluna será ignorada.

  • table_constraint

    Adiciona uma chave primária informativa ou uma restrição de chave estrangeira informativa à tabela em uma exibição materializada. Se o tipo de coluna não for especificado, a restrição da tabela será ignorada.

  • view_clauses

    Opcionalmente, especifique particionamento, comentários, propriedades definidas pelo usuário e um agendamento de atualização para a nova exibição materializada. Cada subcláusula só pode ser especificada uma vez.

    • PARTITIONED BY

      Uma lista opcional de colunas da tabela para particionar a tabela por.

    • COMMENT view_comment

      Um STRING literal para descrever a tabela.

    • TBLPROPERTIES

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

      Use essa configuração para especificar o canal de tempo de execução do Delta Live Tables usado para executar essa instrução. Defina o valor da pipelines.channel propriedade como "PREVIEW" ou "CURRENT". O valor padrão é "CURRENT". Para obter mais informações sobre os canais do Delta Live Tables, consulte Canais de tempo de execução do Delta Live Tables.

    • AGENDAR [ ATUALIZAR ] schedule_clause

      • EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS }

        Importante

        Esse recurso está em uma versão prévia.

        Para agendar uma atualização que ocorre periodicamente, use EVERY a sintaxe. Se EVERY a sintaxe for especificada, a tabela de streaming ou a exibição materializada será atualizada periodicamente no intervalo especificado com base no valor fornecido, como HOUR, HOURS, DAY, DAYS, , WEEKou WEEKS. A tabela a seguir lista os valores inteiros aceitos para number.

        Time unit Valor inteiro
        HOUR or HOURS <1 = H <= 72
        DAY or DAYS <1 = D <= 31
        WEEK or WEEKS <1 = W <= 8

        Observação

        As formas singular e plural da unidade de tempo incluída são semanticamente equivalentes.

      • CRON cron_string [ AT TIME ZONE timezone_id ]

        Para agendar uma atualização usando um valor cron de quartzo. São aceites time_zone_values válidas. Não há suporte para AT TIME ZONE LOCAL.

        Se AT TIME ZONE estiver ausente, o fuso horário da sessão será usado. Se AT TIME ZONE estiver ausente e o fuso horário da sessão não estiver definido, um erro será lançado. SCHEDULE é semanticamente equivalente a SCHEDULE REFRESH.

    • Cláusula WITH ROW FILTER

      Importante

      Esse recurso está em uma versão prévia.

      Adiciona uma função de filtro de linha à tabela. Todas as consultas subequentes dessa tabela recebem um subconjunto de linhas para as quais a função avalia como o valor booliano TRUE. Isso pode ser útil para fins de controle de acesso refinado, em que a função pode inspecionar a identidade ou as associações de grupo do usuário que a invocou para determinar se deseja filtrar algumas linhas.

  • AS query

    Uma consulta que constrói a exibição com base em tabelas base ou em outras exibições.

Permissões necessárias

O usuário que cria uma exibição materializada (MV) é o proprietário do MV e precisa ter as seguintes permissões:

  • SELECT privilégio sobre as tabelas base referenciadas pelo MV.
  • USE CATALOG privilégio no catálogo pai e o privilégio USE SCHEMA no esquema pai.
  • CREATE MATERIALIZED VIEW privilégio no esquema para o MV.

Para que um usuário possa atualizar o MV, é preciso:

  • USE CATALOG privilégio no catálogo pai e o privilégio USE SCHEMA no esquema pai.
  • Propriedade do MV ou privilégio REFRESH no MV.
  • O proprietário do MV deve ter o privilégio SELECT sobre as tabelas base referenciadas pelo MV.

Para que um usuário possa consultar o MV, ele requer:

  • USE CATALOG privilégio no catálogo pai e o privilégio USE SCHEMA no esquema pai.
  • SELECT privilégio sobre a exibição materializada.

Filtros de linha e máscaras de coluna

Importante

Esse recurso está em uma versão prévia.

Os filtros de linha permitem especificar uma função que se aplica como um filtro sempre que uma verificação de tabela busca linhas. Esses filtros garantem que as consultas subsequentes retornem apenas linhas para as quais o predicado de filtro é avaliado como true.

As máscaras de coluna permitem mascarar os valores de uma coluna sempre que uma verificação de tabela busca linhas. Todas as consultas futuras envolvendo essa coluna receberão o resultado da avaliação da função sobre a coluna, substituindo o valor original da coluna.

Para obter mais informações sobre como usar filtros de linha e máscaras de coluna, consulte Filtrar dados confidenciais da tabela com filtros de linha e máscaras de coluna.

Gerenciar filtros de linha e máscaras de coluna

Filtros de linha e máscaras de coluna em exibições materializadas devem ser adicionados por meio da instrução CREATE.

Comportamento

  • Atualizar como Definidor: quando a instrução REFRESH MATERIALIZED VIEW atualiza uma exibição materializada, as funções de filtro de linha são executadas com os direitos do definidor (como o proprietário da tabela). Isso significa que a atualização da tabela usa o contexto de segurança do usuário que criou a exibição materializada.
  • Consulta: embora a maioria dos filtros seja executada com os direitos do definidor, as funções que verificam o contexto do usuário (como CURRENT_USER e IS_MEMBER) são exceções. Essas funções são executadas como o invocador. Essa abordagem impõe controles de acesso e segurança de dados específicos do usuário com base no contexto atual do usuário.
  • Ao criar exibições materializadas sobre tabelas de origem que contêm filtros de linha e máscaras de coluna, a atualização da exibição materializada é sempre uma atualização completa. Uma atualização completa reprocessa todos os dados disponíveis na origem com as definições mais recentes. Isso garante que as políticas de segurança nas tabelas de origem sejam avaliadas e aplicadas com os dados e definições mais atualizados.

Observabilidade

Use DESCRIBE EXTENDED, INFORMATION_SCHEMAou o Catalog Explorer para examinar os filtros de linha e máscaras de coluna existentes que se aplicam a uma determinada exibição materializada. Essa funcionalidade permite que os usuários auditem e examinem as medidas de acesso e proteção de dados em exibições materializadas.

Limitações

  • Quando uma exibição materializada com uma sum agregação sobre uma coluna nulo tem o último valor não NULL removido dessa coluna - e, portanto, apenas NULL os valores permanecem nessa coluna - o valor de agregação resultante da exibição materializada retorna zero em vez de NULL.
  • A referência de coluna não requer um alias. Expressões de referência não coluna exigem um alias, como no exemplo a seguir:
    • Permitido: SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1
    • Não permitido: SELECT col1, SUM(col2) FROM t GROUP BY col1
  • NOT NULL precisa ser especificado manualmente junto com a PRIMARY KEY para que seja uma instrução válida.
  • As exibições materializadas não dão suporte a colunas de identidade ou chaves substitutas.
  • As exibições materializadas não são compatíveis com os comandos OPTIMIZE e VACUUM. A manutenção ocorre automaticamente.
  • Exibições materializadas não dão suporte a expectativas para definir restrições de qualidade de dados.

Exemplos

-- Create a materialized view if it doesn't exist
> CREATE MATERIALIZED VIEW IF NOT EXISTS 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 and schedule a materialized view to be refreshed daily at midnight.
-- Note: All columns in a GROUP BY need to be explicitly aliased
> CREATE MATERIALIZED VIEW daily_sales
  COMMENT 'Daily sales numbers'
  SCHEDULE CRON '0 0 0 * * ? *'
  AS SELECT date AS date, sum(sales) AS sumOfSales
       FROM table1
       GROUP BY date;

-- Sets the runtime channel to "PREVIEW"
> CREATE MATERIALIZED VIEW mv_preview
  TBLPROPERTIES(pipelines.channel = "PREVIEW")
  AS SELECT * FROM RANGE(10)

-- Create a materialized view with a table constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    member_id int NOT NULL,
    full_name string,
    movie_title string,
    CONSTRAINT movie_pk PRIMARY KEY(member_id)
  )
  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 or replace the materialized view to remove the table constraint and add a partition
> CREATE OR REPLACE MATERIALIZED VIEW subscribed_movies
  PARTITIONED BY (member_id)
  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 materialized view with a row filter and a column mask
> CREATE MATERIALIZED VIEW masked_view (
    id int,
    name string,
    region string,
    ssn string MASK catalog.schema.ssn_mask_fn
  )
  WITH ROW FILTER catalog.schema.us_filter_fn ON (region)
  AS SELECT id, name, region, ssn
       FROM employees;