Partilhar via


Usar exibiçõ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 visões materializadas?

No Databricks SQL, as exibições materializadas são tabelas gerenciadas pelo Unity Catalog que armazenam fisicamente os resultados de uma consulta. Ao contrário das visualizações padrão, que computam os resultados sob demanda, as exibições materializadas armazenam os resultados em cache e os atualizam à medida que as tabelas de origem subjacentes mudam, seja em um cronograma ou automaticamente.

As visualizações materializadas são adequadas para cargas de trabalho de processamento de dados, como processamento de extração, transformação e carga (ETL). As visualizações materializadas fornecem uma maneira simples e declarativa de processar dados para conformidade, correções, agregações ou captura geral de dados de alteração (CDC). As visualizações materializadas também permitem transformações fáceis de usar, limpando, enriquecendo e desnormalizando tabelas base. Ao pré-calcular consultas caras ou usadas com frequência, as visualizações materializadas reduzem a latência da 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.

Os seguintes são casos de uso comuns para visões materializadas:

  • Manter um painel de BI atualizado com latência mínima de consulta do usuário final.
  • Reduzindo a orquestração complexa de ETL com lógica SQL simples.
  • Construção de transformações complexas e estratificadas.
  • Quaisquer casos de uso que exijam performance consistente com insights atualizados up-to.

Quando cria uma vista materializada num armazém de SQL Databricks, é criado um pipeline sem servidor para processar a criação e as atualizações da vista materializada. Você pode monitorar o status das operações de atualização no Gerenciador de Catálogos. Consulte Ver detalhes da vista materializada com DESCRIBE EXTENDED.

Requisitos

As exibições materializadas criadas no Databricks SQL são apoiadas por um pipeline sem servidor. Seu espaço de trabalho deve oferecer suporte a pipelines sem servidor para usar essa funcionalidade.

Requisitos para criar ou atualizar exibições materializadas:

  • Você deve usar um SQL warehouse profissional com Catálogo Unity ativado ou um SQL warehouse sem servidor.

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

  • Para atualizar incrementalmente uma exibição materializada a partir de tabelas Delta, as tabelas de origem devem ter o rastreamento de linhas habilitado.

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

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

  • Seu espaço de trabalho deve estar em uma região que ofereça suporte a armazéns SQL sem servidor.

Requisitos para consultar visualizações materializadas:

  • Você deve ser o dono da visão materializada, ou ter SELECT sobre a visão materializada, junto com USE SCHEMA e USE CATALOG sobre seus pais.

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

    • Armazém SQL

    • Interfaces de Pipelines Declarativos do Lakeflow

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

    • Modo de acesso dedicado (anteriormente modo de acesso de usuário único) no Databricks Runtime 15.4 e superior, desde que o espaço de trabalho esteja habilitado para computação sem servidor. Consulte Controle de acesso refinado em computação dedicada.

      Se for o proprietário da vista materializada, pode usar um recurso de computação em modo de acesso dedicado que esteja executando o Databricks Runtime da versão 14.3 ou superior.

Para saber mais sobre outras restrições ao uso de visões materializadas, consulte Limitações.

Criar uma vista materializada

As operações de vista CREATE materializada do Databricks SQL utilizam um armazém de dados SQL do Databricks para criar e carregar dados na vista materializada. Criar uma visualização materializada é uma operação síncrona, o que significa que o CREATE MATERIALIZED VIEW comando bloqueia até que a visualização materializada seja criada e a carga inicial de dados termine. Um pipeline sem servidor é automaticamente criado para cada vista materializada do Databricks SQL. Quando a visualização materializada é atualizada, o Lakeflow Declarative Pipelines processa a atualização.

Para criar uma visão materializada, use a instrução CREATE MATERIALIZED VIEW. Para enviar uma instrução CREATE, use o editor SQL na interface do utilizador do Azure Databricks, a CLI SQL do Databricks ou a API SQL do Databricks.

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

O exemplo a seguir cria a exibição mv1 materializada a partir da tabela base_table1base:

-- 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 inicial de dados e a população começam imediatamente. Isso não consome a computação do SQL warehouse. Em vez disso, o Lakeflow Declarative Pipelines sem servidor é usado para criação e atualizações subsequentes.

Os comentários das colunas numa tabela base são propagados automaticamente para a nova vista materializada apenas aquando da sua criação. Para adicionar uma agenda, 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 vista materializada se chamada novamente ou de acordo com um cronograma. Uma atualização feita desta forma funciona como qualquer outra atualização. Para obter detalhes, consulte 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 formatos diferentes e de locais diferentes, consulte Carregar dados com pipelines declarativos Lakeflow.

Carregar dados de sistemas externos

O Databricks recomenda o carregamento de dados externos usando a Lakehouse Federation para fontes de dados suportadas. Para obter informações sobre como carregar dados de fontes não suportadas pela Lakehouse Federation, consulte Opções de formato de dados. Para obter informações gerais sobre como carregar dados, incluindo exemplos, consulte Carregar dados com Lakeflow Declarative Pipelines.

Ocultar dados confidenciais

Importante

Este recurso está no Public Preview.

Você pode usar exibições materializadas para ocultar dados confidenciais dos 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 isto, use a sintaxe ROW FILTER e MASK durante a criação da vista materializada. Para obter mais informações, consulte Filtros de linha e máscaras de coluna.

Atualizar uma vista materializada

A atualização de um modo de exibição materializado atualiza o modo de exibição para refletir as alterações mais recentes na tabela base no momento da atualização.

Quando você define um modo de exibição materializado, a CREATE OR REPLACE MATERIALIZED VIEW instrução é usada para criar o modo de exibição e para atualizá-lo para quaisquer atualizações agendadas. 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 os parâmetros para este comando. Para saber mais sobre os tipos de modos de exibição materializados que podem ser atualizados incrementalmente, consulte Atualização incremental para modos de exibição materializados.

Para enviar uma instrução de atualização, use o editor SQL na interface do utilizador do Azure Databricks, um caderno anexado a um armazém SQL, a CLI SQL do Databricks ou a API SQL do Databricks.

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

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

REFRESH MATERIALIZED VIEW mv1;

A operação é síncrona por padrão, o que significa que o comando bloqueia até que a operação de atualização seja concluída. 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 visualizações materializadas criam e utilizam automaticamente pipelines declarativos Lakeflow sem servidor para processar operações de atualização. A atualização é gerenciada pelo pipeline e a atualização é monitorada pelo armazém SQL Databricks usado para criar a exibição materializada. As visualizações materializadas podem ser atualizadas usando um pipeline que é executado em um cronograma. Databricks SQL cria sempre visualizações materializadas que são executadas no modo acionado. Consulte Modo de fluxo de trabalho acionado versus contínuo.

As visualizações materializadas são atualizadas usando um dos dois métodos.

  • Atualização incremental - O sistema avalia a consulta da exibição para identificar alterações que aconteceram 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 visualização materializada pelos novos resultados.

A estrutura da consulta e o tipo de dados de origem determinam se a atualização incremental é suportada. Para oferecer suporte à atualização incremental, os dados de origem devem ser armazenados em tabelas Delta, com o rastreamento de linhas e o feed de dados de alteração habilitados. Depois de criar uma exibição materializada, você pode monitorar seu comportamento de atualização para verificar se ela é atualizada 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 refresh com a ASYNC palavra-chave. Ver REFRESH (MATERIALIZED VIEW ou STREAMING TABLE) O comportamento associado a cada abordagem é o seguinte:

  • Síncrono: 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 Lakeflow Jobs, use uma atualização síncrona. Para orquestrar visões materializadas com uma tarefa, use o tipo de tarefa SQL. Veja Lakeflow Jobs.
  • Assíncrona: uma atualização assíncrona inicia um trabalho em segundo plano no cálculo do Lakeflow Declarative Pipelines quando uma atualização de exibição materializada começa, permitindo que o comando retorne antes que a carga de dados seja concluída. Esse tipo de atualização pode economizar custos porque a operação não necessariamente mantém a capacidade de computação no depósito onde o comando é iniciado. Se a tarefa de atualização ficar ociosa e nenhuma outra tarefa estiver em execução, o depósito poderá ser desligado enquanto utiliza outro recurso de computação disponível. Além disso, as atualizações assíncronas suportam a inicialização de várias operações em paralelo.

Agendar atualizações de visões materializadas

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

  • Configure o horário com a cláusula ao criar a visão materializada
  • Adicione uma agenda com a instrução ALTER MATERIALIZED VIEW.

Observação

Como alternativa, pode-se criar uma tarefa num trabalho que inclua a CREATE OR REPLACE MATERIALIZED VIEW instrução ou a REFRESH e orquestrá-la como faria com qualquer outro trabalho. Veja Lakeflow Jobs.

O exemplo a seguir cria o modo de exibição mv1 materializado a partir da tabela base_table1base e um agendamento para atualizar o modo de exibição materializado 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 o cronograma após a criação, use a ALTER MATERIALIZED VIEW instrução:

ALTER MATERIALIZED VIEW sales ALTER SCHEDULE EVERY 1 day;

Quando uma agenda é criada, um novo trabalho do Databricks é configurado automaticamente para processar a atualização.

Para exibir a agenda, siga um destes procedimentos:

  • Execute a DESCRIBE EXTENDED instrução do editor SQL na interface do usuário do Azure Databricks. Consulte DESCRIBE TABLE.
  • Utilize o Catalog Explorer para exibir a vista materializada. A agenda está listada na guia Visão geral , em Status de atualização. Consulte O que é o Catalog Explorer?.

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 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 declaração REORG com vistas materializadas está em Pré-visualização Pública.

Observação

  • Usar uma instrução REORG com uma vista materializada requer o Databricks Runtime 15.4 ou 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 visualizaçã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 o GDPR, etapas adicionais devem ser tomadas para garantir que uma VACUUM operação seja executada nos dados da exibição materializada.

Para excluir registros fisicamente:

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

Elimine a visão materializada

Observação

Para enviar o comando para eliminar uma visão materializada, deve ser o proprietário dessa visão materializada ou ter o privilégio MANAGE na visão materializada.

Para eliminar uma visão materializada, use a instrução DROP VIEW. Para enviar uma DROP instrução, pode usar o editor SQL na interface do utilizador do Azure Databricks, a CLI SQL do Databricks ou a API SQL do Databricks. O exemplo a seguir descarta a mv1 visão materializada:

DROP MATERIALIZED VIEW mv1;

Você também pode usar o Catalog Explorer para eliminar uma exibição materializada.

  1. Clique no ícone Dados.Catálogo na barra lateral.
  2. Na árvore do Catalog Explorer à esquerda, abra o catálogo e selecione o esquema onde sua exibição materializada está localizada.
  3. Abra o item Tabelas sob o esquema selecionado e clique na vista materializada.
  4. No ícone do menu kebab., selecione Eliminar.

Compreender os custos de uma visão materializada

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

Ativando o rastreamento de linhas

Para oferecer suporte a atualizações incrementais de tabelas Delta, o rastreamento de linhas deve ser habilitado para essas tabelas de origem. Se você recriar uma tabela de origem, deverá reativar o rastreamento de linha.

O exemplo a seguir mostra como ativar o rastreio de linhas numa tabela:

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

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

Limitações

  • Para requisitos de computação e espaço de trabalho, consulte Requisitos.
  • Para requisitos de atualização incremental, consulte Atualização incremental para exibições materializadas.
  • As visualizações materializadas não suportam colunas de identidade ou chaves substitutas.
  • Se uma vista materializada usa uma soma agregada sobre uma coluna NULL-able e apenas NULL valores permanecem nessa coluna, o valor agregado resultante da vista materializada é zero em vez de NULL.
  • Não é possível ler um feed de dados de alterações a partir de uma exibição materializada.
  • As consultas de deslocação no tempo não são suportadas em visões materializadas.
  • Os arquivos subjacentes que suportam visualizações materializadas podem incluir dados de tabelas upstream (incluindo possíveis informações pessoalmente identificáveis) que não aparecem na definição de exibição materializada. Esses dados são adicionados automaticamente ao armazenamento subjacente para oferecer 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 tabelas upstream 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 visão materializada inclua uma COUNT(DISTINCT field_a) cláusula. Embora a definição de exibição materializada inclua apenas a cláusula COUNT DISTINCT agregada, os arquivos subjacentes conterão uma lista dos valores reais de field_a.
  • Você pode incorrer em algumas cobranças de computação sem servidor, mesmo ao usar esses recursos em computação dedicada.
  • Se precisar usar uma ligação Azure Private Link com a sua vista materializada, contacte o seu representante da Databricks.