Compartilhar via


Usar visualizações materializadas no Databricks SQL

Este artigo descreve como criar e atualizar exibições materializadas no DATAbricks SQL para melhorar o desempenho e reduzir o custo de suas cargas de trabalho de processamento e análise de dados.

O que são exibições materializadas?

No Databricks SQL, as exibições materializadas são tabelas gerenciadas do Catálogo do Unity que armazenam fisicamente os resultados de uma consulta. Ao contrário dos modos de exibição padrão, que calculam os resultados sob demanda, as exibições materializadas armazenam os resultados em cache e os atualizam conforme as tabelas de origem subjacentes mudam, seja em um agendamento ou automaticamente.

Visões materializadas são adequadas para cargas de trabalho de processamento de dados, como extração, transformação e carga (ETL). As exibições materializadas fornecem uma maneira simples e declarativa de processar dados para conformidade, correções, agregações ou CDC (captura geral de dados de alterações). As exibições materializadas também permitem transformações fáceis de usar limpando, enriquecendo e desnormalizando tabelas base. Ao pré-calcular consultas caras ou frequentemente usadas, as exibições materializadas reduzem a latência de consulta e o consumo de recursos. Em muitos casos, eles podem calcular incrementalmente as alterações das tabelas de origem, melhorando ainda mais a eficiência e a experiência do usuário final.

Estes são casos de uso comuns para exibições materializadas:

  • Manter um painel de BI atualizado com latência mínima de consulta do usuário final.
  • Reduzindo a orquestração de ETL complexa com lógica SQL simples.
  • Criando transformações complexas em camadas.
  • Todos os casos de uso que exigem um desempenho consistente com insights atualizados.

Quando você cria uma visão materializada em um Databricks SQL warehouse, um pipeline sem servidor é criado para processar a criação e as atualizações da visão materializada. Você pode monitorar o status das operações de atualização no Gerenciador de Catálogos. Veja Exibir detalhes da exibição materializada com DESCRIBE EXTENDED.

Requisitos

As exibições materializadas criadas no DATAbricks SQL são apoiadas por um pipeline sem servidor. Seu workspace precisa dar suporte aos pipelines sem servidor para usar essa funcionalidade.

Requisitos para criar ou atualizar exibições materializadas:

  • Você deve usar um warehouse SQL Pro ou sem servidor habilitado para o Catálogo do Unity.

  • Para atualizar uma exibição materializada, você deve estar no workspace que a criou.

  • Para atualizar incrementalmente uma exibição materializada das tabelas Delta, as tabelas de origem devem ter o controle de linha habilitado.

  • O proprietário (o usuário que cria a exibição materializada) deve ter as seguintes permissões:

    • Privilégio SELECT nas tabelas base referenciadas pela exibição materializada.
    • Privilégios USE CATALOG e USE SCHEMA no catálogo e no esquema que contém as tabelas de origem para a exibição materializada.
    • Privilégios USE CATALOG e USE SCHEMA no catálogo de destino e no esquema para a exibição materializada.
    • Privilégios CREATE TABLE e CREATE MATERIALIZED VIEW no esquema que contém a exibição materializada.
  • Para atualizar uma exibição materializada, você deve ter o REFRESH privilégio na exibição materializada.

Requisitos para consultar exibições materializadas:

  • Você deve ser o proprietário da exibição materializada ou ter SELECT nela, além de USE SCHEMA e USE CATALOG nos pais.

  • Você deve usar um dos seguintes recursos de computação:

    • SQL Warehouse

    • Interfaces dos Pipelines Declarativas do Lakeflow

    • Computação no modo de acesso padrão (anteriormente modo de acesso compartilhado)

    • Modo de acesso dedicado (antigo modo de acesso de usuário único) no Databricks Runtime 15.4 e superior, desde que o workspace esteja habilitado para computação sem servidor. Consulte o controle de acesso refinado na computação dedicada.

      Se você for o proprietário da exibição materializada, poderá usar um recurso de computação de modo de acesso Dedicado que execute o Databricks Runtime entre a versão 14.3 e versões superiores.

Para saber mais sobre outras restrições ao uso de exibições materializadas, confira as Limitações.

Criar uma exibição materializada

As operações CREATE de exibição materializadas do Databricks SQL usam um warehouse do Databricks SQL para criar e carregar dados na exibição materializada. A criação de uma exibição materializada é uma operação síncrona, o que significa que o comando CREATE MATERIALIZED VIEW é bloqueado até que a exibição materializada seja criada e a carga de dados inicial termine. Um pipeline sem servidor é criado automaticamente para cada exibição materializada do Databricks SQL. Quando a exibição materializada é atualizada, o Lakeflow Declarative Pipelines a atualização.

Para criar uma exibição materializada, use a instrução CREATE MATERIALIZED VIEW. Para enviar uma instrução create, use o editor do SQL na interface do usuário do Azure Databricks, a CLI do SQL do Databricks ou a API do SQL do Databricks.

O usuário que cria uma exibição materializada é o proprietário da exibição materializada.

O exemplo a seguir cria a exibição materializada mv1 da tabela base base_table1:

-- This query defines the materialized view:
CREATE OR REPLACE MATERIALIZED VIEW mv1
AS SELECT
  date,
  sum(sales) AS sum_of_sales
FROM
  base_table1
GROUP BY
  date;

Quando você cria uma exibição materializada usando a CREATE OR REPLACE MATERIALIZED VIEW instrução, a atualização de dados inicial e a população começam imediatamente. Isso não consome a computação do SQL Warehouse. Em vez disso, os Pipelines Declarativos do Lakeflow sem servidor são usados para as criações e atualizações subsequentes.

Os comentários de coluna em uma tabela base são propagados automaticamente para a nova exibição materializada somente na criação. Para adicionar um agendamento, restrições de tabela ou outras propriedades, modifique a definição de exibição materializada (a consulta SQL).

A mesma instrução SQL atualizará uma exibição materializada se for chamada uma hora subsequente ou em um agendamento. Uma atualização feita dessa forma atua como qualquer outra atualização. Para obter detalhes, veja Atualizar uma exibição materializada.

Para saber mais sobre como configurar uma exibição materializada, consulte Configurar exibições materializadas no DATAbricks SQL. Para saber mais sobre a sintaxe completa para criar uma exibição materializada, consulte CREATE MATERIALIZED VIEW. Para saber mais sobre como carregar dados em diferentes formatos e em locais diferentes, consulte Carregar dados com Pipelines Declarativos do Lakeflow.

Carregar dados de locais externos

O Databricks recomenda o carregamento de dados externos usando a Federação lakehouse para fontes de dados com suporte. Para obter informações sobre como carregar dados de fontes sem suporte da Federação de Lakehouse, confira Opções de formato de dados. Para informações gerais sobre como carregar dados, incluindo exemplos, consulte Carregar dados com Pipelines Declarativos do Lakeflow.

Ocultar dados confidenciais

Importante

Esse recurso está em Visualização Pública.

Você pode usar exibições materializadas para ocultar dados confidenciais de usuários que acessam a tabela. Uma maneira de fazer isso é criar a consulta para que ela não inclua esses dados em primeiro lugar. Mas você também pode mascarar colunas ou filtrar linhas com base nas permissões do usuário que está consultando. Por exemplo, você pode ocultar a tax_id coluna para usuários que não estão no grupo HumanResourcesDept. Para fazer isso, use a sintaxe ROW FILTER e MASK durante a criação da visão materializada. Para obter mais informações, consulte Filtrar dados confidenciais da tabela usando filtros de linha e máscaras de coluna.

Atualizar uma exibição materializada

A atualização de uma exibição materializada atualiza a exibição para que ela reflita as últimas alterações na tabela base no momento da atualização.

Quando você define uma exibição materializada, a CREATE OR REPLACE MATERIALIZED VIEW instrução é usada tanto para criar a exibição quanto para atualizá-la para qualquer atualização agendada. Você também pode usar a REFRESH MATERIALIZED VIEW instrução para atualizar a exibição materializada sem precisar fornecer a consulta novamente. Consulte REFRESH (MATERIALIZED VIEW ou STREAMING TABLE) para obter detalhes sobre a sintaxe sql e parâmetros para este comando. Para saber mais sobre os tipos de exibições materializadas que podem ser atualizadas de forma incremental, consulte Atualização incremental para exibições materializadas.

Para enviar uma instrução de atualização, use o editor de SQL na interface do usuário do Azure Databricks, um notebook anexado a um SQL Warehouse, a CLI do SQL do Databricks ou a API do SQL do Databricks.

O proprietário e qualquer usuário que tenha recebido o privilégio REFRESH na tabela podem atualizar a exibição materializada.

O exemplo a seguir atualiza a exibição materializada mv1:

REFRESH MATERIALIZED VIEW mv1;

A operação é síncrona por padrão, o que significa que o comando é bloqueado até a operação de atualização terminar. Para atualizar de forma assíncrona, você pode adicionar a ASYNC palavra-chave:

REFRESH MATERIALIZED VIEW mv1 ASYNC;

Como as exibições materializadas do Databricks SQL são atualizadas?

As exibições materializadas criam e usam automaticamente Pipelines Declarativos do Lakeflow sem servidor para processar operações de atualização. A atualização é gerenciada pelo pipeline e a atualização é monitorada pelo warehouse do Databricks SQL usado para criar a exibição materializada. As exibições materializadas podem ser atualizadas usando um pipeline executado de acordo com uma agenda. As exibições materializadas criadas pelo Databricks SQL sempre são executadas no modo disparado. Confira Modo de pipeline disparado versus contínuo.

Visões materializadas são atualizadas usando um dos dois métodos.

  • Atualização incremental – O sistema avalia a consulta do modo de exibição para identificar as alterações que ocorreram após a última atualização e mescla apenas os dados novos ou modificados.
  • Atualização completa - Se uma atualização incremental não puder ser executada, o sistema executará toda a consulta e substituirá os dados existentes na exibição materializada pelos novos resultados.

A estrutura da consulta e o tipo de dados de origem determinam se há suporte para atualização incremental. Para dar suporte à atualização incremental, os dados de origem devem ser armazenados em tabelas Delta, com o acompanhamento de linhas e o feed de dados de alterações habilitados. Depois de criar uma exibição materializada, você pode monitorar seu comportamento de atualização para verificar se ele é atualizado incrementalmente ou por meio de uma atualização completa.

Para obter detalhes sobre tipos de atualização e como otimizar para atualizações incrementais, consulte Atualização incremental para exibições materializadas.

Atualizações assíncronas

Por padrão, as operações de atualização são executadas de forma síncrona. Você também pode definir uma operação de atualização para ocorrer de forma assíncrona. Isso pode ser definido usando o comando atualizar com a ASYNC palavra-chave. Consulte REFRESH (MATERIALIZED VIEW ou STREAMING TABLE) O comportamento associado a cada abordagem é o seguinte:

  • Síncrona: uma atualização síncrona impede que outras operações prossigam até que a atualização seja concluída. Se o resultado for necessário para a próxima etapa, como ao sequenciar operações de atualização em ferramentas de orquestração como o Lakeflow Jobs, use uma atualização síncrona. Para orquestrar exibições materializadas com um trabalho, use o tipo de tarefa SQL. Consulte Trabalhos do Lakeflow.
  • Assíncrona: uma atualização assíncrona inicia um trabalho em segundo plano na computação de Pipelines Declarativos do Lakeflow quando uma atualização de exibição materializada começa, permitindo que o comando retorne antes que o carregamento de dados termine. Esse tipo de atualização pode economizar nos custos porque a operação não necessariamente mantém a capacidade de computação no armazém em que o comando é iniciado. Se a atualização ficar ociosa e nenhuma outra tarefa estiver em execução, o warehouse poderá ser desligado enquanto a atualização usar outra computação disponível. Além disso, as atualizações assíncronas dão suporte ao início de múltiplas operações em paralelo.

Agendar as atualizações de exibição materializada

Você pode configurar uma exibição materializada do Databricks SQL para atualizar automaticamente com base em um agendamento definido. Para definir programação, siga um destes procedimentos:

Observação

Como alternativa, você pode criar uma tarefa em um trabalho que inclua a instrução CREATE OR REPLACE MATERIALIZED VIEW ou uma instrução REFRESH e orquestrá-la como faria com qualquer outro trabalho. Consulte Trabalhos do Lakeflow.

O exemplo a seguir cria a exibição mv1 materializada da tabela base_table1base e um agendamento para atualizar a exibição materializada uma vez por hora:

CREATE OR REPLACE MATERIALIZED VIEW mv1
  SCHEDULE EVERY 1 hour
  AS SELECT
    date,
    sum(sales) AS sum_of_sales
  FROM
    base_table1
  GROUP BY
    date;

Para definir ou alterar a agenda após a criação, use a ALTER MATERIALIZED VIEW instrução:

ALTER MATERIALIZED VIEW sales ALTER SCHEDULE EVERY 1 day;

Quando um agendamento é criado, um novo trabalho do Databricks é configurado automaticamente para processar a atualização.

Para ver a agenda, siga um destes procedimentos:

  • Execute a instrução DESCRIBE EXTENDED no editor SQL da interface do usuário do Azure Databricks. Consulte DESCRIBE TABLE.
  • Use o Gerenciador de catálogos para ver a exibição materializada. O agendamento está na guia Visão geral em Status de atualização. Consulte O que é o Explorador de Catálogos?.

Quando há um agendamento para atualizações, você ainda tem a opção de executar uma atualização manual a qualquer momento, se precisar de dados atualizados.

Parar uma atualização ativa

Para interromper uma atualização ativa na interface do usuário do Lakeflow Declarative Pipelines, na página de detalhes do Pipeline , clique em Parar para interromper a atualização do pipeline. Você também pode interromper a atualização com a CLI do Databricks ou a operação POST /api/2.0/pipelines/{pipeline_id}/stop na API de Pipelines.

Excluir permanentemente registros de uma exibição materializada com vetores de exclusão habilitados

Importante

O suporte para a instrução REORG em exibições materializadas está na Visualização Pública.

Observação

  • Usar uma instrução REORG com uma exibição materializada requer o Databricks Runtime 15.4 e superior.
  • Embora você possa usar a REORG instrução com qualquer exibição materializada, ela só é necessária ao excluir registros de uma exibição materializada com vetores de exclusão habilitados. O comando não tem efeito quando usado com uma exibição materializada sem vetores de exclusão habilitados.

Para excluir fisicamente registros do armazenamento subjacente para uma exibição materializada com vetores de exclusão habilitados, como para conformidade com GDPR, etapas adicionais devem ser tomadas para garantir que uma VACUUM operação seja executada nos dados da exibição materializada.

Para excluir fisicamente os registros:

  1. Execute a instrução REORG na exibição materializada, especificando o parâmetro APPLY (PURGE). Por exemplo, REORG TABLE <materialized-view-name> APPLY (PURGE);. Consulte REORG TABLE.
  2. Aguarde a passagem do período de retenção dos dados da exibição materializada. O período de retenção de dados padrão é de sete dias, mas pode ser configurado com a propriedade delta.deletedFileRetentionDuration tabela. Consulte Configurar retenção de dados para consultas de viagem no tempo.
  3. REFRESH a exibição materializada. Veja Atualizar uma exibição materializada. Dentro de 24 horas após a operação REFRESH, as tarefas de manutenção do Lakeflow Declarative Pipelines, incluindo a operação VACUUM, que é necessária para garantir que os registros sejam excluídos permanentemente, são executadas automaticamente.

Remover uma exibição materializada

Observação

Para enviar o comando para remover uma exibição materializada, você deve ser o proprietário dessa exibição materializada ou ter o privilégio MANAGE na exibição materializada.

Para remover uma exibição materializada, use a instrução DROP VIEW. Para enviar uma instrução DROP, você pode usar o editor SQL na interface do usuário do Azure Databricks, a CLI do SQL do Databricks ou a API do SQL do Databricks. O exemplo a seguir descarta a exibição materializada mv1:

DROP MATERIALIZED VIEW mv1;

Você também pode usar o Gerenciador de Catálogos para remover uma exibição materializada.

  1. Clique no ícone Dados.Catálogo na barra lateral.
  2. Na árvore do Gerenciador de Catálogos à esquerda, abra o catálogo e selecione o esquema em que a exibição materializada está localizada.
  3. Abra o item Tabelas no esquema selecionado e clique no modo de exibição materializado.
  4. No menu de kebab Ícone de menu Kebab., selecione Excluir.

Entender os custos de uma visão materializada

Como uma visualização materializada é executada em uma computação sem servidor, fora da computação que você configurou para um notebook ou tarefa, você pode se perguntar como entender os custos associados a ela. O uso da exibição materializada é acompanhado pelo consumo de DBU. Para saber mais, confira Qual é o consumo de DBU de uma exibição materializada ou tabela de streaming?

Como habilitar o acompanhamento de linhas

Para dar suporte a atualizações incrementais de tabelas Delta, o acompanhamento de linhas deve ser habilitado para essas tabelas de origem. Se você recriar uma tabela de origem, deverá habilitar novamente o acompanhamento de linhas.

O exemplo a seguir mostra como habilitar o acompanhamento de linhas em uma tabela:

ALTER TABLE source_table SET TBLPROPERTIES (delta.enableRowTracking = true);

Para obter mais detalhes, consulte Usar o acompanhamento de linhas para tabelas Delta

Limitações

  • Para requisitos de computação e workspace, confira os Requisitos.
  • Para obter requisitos de atualização incremental, consulte Atualização incremental para exibições materializadas.
  • As exibições materializadas não dão suporte a colunas de identidade ou chaves substitutas.
  • Se uma exibição materializada usar uma agregação de soma em uma coluna NULL-able e apenas os valores NULL permanecerem nessa coluna, o valor agregado resultante das exibições materializadas será zero em vez de NULL.
  • Você não pode ler um feed de dados alterados de uma visualização materializada.
  • Não há suporte para as consultas que envolvam viagem no tempo em exibições materializadas.
  • Os arquivos subjacentes que dão suporte a exibições materializadas podem incluir dados de tabelas upstream (incluindo possíveis informações de identificação pessoal) que não aparecem na definição de exibição materializada. Esses dados são adicionados automaticamente ao armazenamento subjacente para dar suporte à atualização incremental de exibições materializadas. Como os arquivos subjacentes de uma exibição materializada podem correr o risco de expor dados de upstream tabelas que não fazem parte do esquema de exibição materializado, o Databricks recomenda não compartilhar o armazenamento subjacente com consumidores downstream não confiáveis. Por exemplo, suponha que a definição de uma exibição materializada inclua uma cláusula COUNT(DISTINCT field_a). Embora a definição de exibição materializada inclua apenas a cláusula de agregação COUNT DISTINCT, os arquivos subjacentes conterão uma lista dos valores reais de field_a.
  • Você pode incorrer em alguns encargos de computação sem servidor, mesmo ao usar esses recursos na computação dedicada.
  • Se você precisar usar uma conexão do Link Privado do Azure com sua exibição materializada, entre em contato com seu representante do Databricks.