Use a visualização materializada no Databricks SQL
Esta página descreve como criar e refresh visualizações materializadas no Databricks SQL para melhorar o desempenho e reduzir o custo das suas cargas de trabalho de processamento e análise de dados.
O que são visões materializadas?
No Databricks SQL, as visualizações materializadas são tabelas gerenciais Unity Catalog que armazenam fisicamente os resultados de uma consulta. Diferentemente da visualização padrão, que compute resultados sob demanda, a visualização materializada armazena em cache os resultados e os atualiza conforme as tabelas de origem subjacentes mudam, seja por programa 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 carregamento (ETL). A visualização materializada fornece uma maneira simples e declarativa de processar dados para compliance, correções, agregações ou captura geral de dados de alterações (CDC) (CDC). A visualização materializada também permite transformações fáceis de usar, limpando, enriquecendo e desnormalizando tabelas base. Ao pré-computar consultas caras ou usadas com frequência, o Materialized visualiza menor latência de consulta e consumo de recursos. Em muitos casos, eles podem compute incrementalmente alterações de tabelas de origem, melhorando ainda mais a eficiência e a experiência do usuário final.
A seguir estão alguns casos de uso comuns para visualização materializada:
- Manter um painel de BI atualizado com latência mínima de consulta do usuário final.
- Reduzindo a orquestração ETL complexa com lógica SQL simples.
- Construindo transformações complexas e em camadas.
- Quaisquer casos de uso que exijam desempenho consistente com percepções atualizadas.
Ao criar uma view materializada em um warehouse Databricks SQL , um pipelineserverless é criado para processar a criação e a atualização da view materializada. Você pode monitorar o status das operações refresh no Catalog Explorer. Veja os detalhes da visualização com DESCRIBE EXTENDED.
Requisitos
As visualizações materializadas criadas no Databricks SQL são apoiadas por um pipeline serverless . Seu workspace deve oferecer suporte ao pipeline serverless para usar essa funcionalidade.
Requisitos para criar ou refresh a visualização materializada:
-
Você deve usar um SQL warehouse pro ou serverless habilitado para Unity Catalog.
-
Para refresh uma view materializada, você deve estar no workspace que a criou.
-
Para refresh incrementalmente uma view materializada de tabelas Delta , as tabelas de origem devem ter o acompanhamento de linhas habilitado.
-
O proprietário (o usuário que cria a view materializada) deve ter as seguintes permissões:
SELECTprivilégio nas tabelas base referenciadas pela view materializada.USE CATALOGe privilégiosUSE SCHEMAno catálogo e esquema contendo as tabelas de origem para a view materializada.USE CATALOGe privilégiosUSE SCHEMAno catálogo de destino e esquema para a view materializada.CREATE TABLEe privilégiosCREATE MATERIALIZED VIEWno esquema que contém a view materializada.
-
Para refresh uma view materializada, você deve ter o privilégio
REFRESHna view materializada.
Requisitos para consultar a visualização materializada:
- Você deve ser o proprietário da view materializada ou ter
SELECTna view materializada, junto comUSE SCHEMAeUSE CATALOGem seus pais. - Você deve usar um dos seguintes recursos compute :
-
Armazém SQL
-
Interfaces de pipeline declarativas LakeFlow Spark
-
compute em 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 acima, desde que o workspace esteja habilitado para compute serverless . Veja Controle de acesso refinado em computededicada.
Se você for o proprietário view materializada, poderá usar um recurso compute no modo de acesso dedicado que esteja executando Databricks Runtime entre 14.3 e acima.
-
Para saber mais sobre outras restrições ao uso da visualização materializada, consulte Limitações.
Crie uma viewmaterializada
As operações view materializada Databricks SQL usam um data warehouse Databricks SQL CREATE criar e carregar dados na view materializada. A criação de uma view materializada é uma operação síncrona, o que significa que o comando CREATE MATERIALIZED VIEW bloqueia até que a view materializada seja criada e o carregamento inicial de dados seja concluído. Um pipeline serverless é criado automaticamente para cada view materializada Databricks SQL . Quando a view materializada é atualizada, o pipeline processa a refresh.
Para criar uma view materializada, use a instrução CREATE MATERIALIZED VIEW . Para enviar uma instrução create, use o editor SQL na interface do usuário Databricks , a CLIDatabricks SQL ou a APIDatabricks SQL.
O usuário que cria uma view materializada é o proprietário view materializada.
O exemplo a seguir cria a view materializada mv1 a partir 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;
Ao criar uma view materializada usando a instrução CREATE OR REPLACE MATERIALIZED VIEW , a refresh e o preenchimento iniciais dos dados começam imediatamente. Isso não consome compute SQL warehouse . Em vez disso, utiliza-se um pipeline serverless para a criação e atualização subsequente. Veja Como as visualizações materializadas Databricks SQL são atualizadas?
Os comentários de coluna em uma tabela base são propagados automaticamente para a nova view materializada somente na criação. Para adicionar um programa, restrições de tabela ou outras propriedades, modifique a definição view materializada (a consulta SQL ).
A mesma instrução SQL atualiza uma view materializada se for chamada posteriormente ou em um programa. Uma refresh feita desta forma funciona como qualquer outra refresh. Para mais detalhes, consulte Atualizar uma viewmaterializada.
Para saber mais sobre como configurar uma view materializada, consulte Configurar visão materializada no Databricks SQL. Para aprender sobre a sintaxe completa para criar uma view materializada, consulte CREATE MATERIALIZED VIEW. Para saber mais sobre como carregar dados em diferentes formatos e de diferentes locais, consulte Carregar dados em pipeline.
Carregar dados de sistemas externos
A visualização materializada pode ser criada no uso externo de dados lakehouse Federation para fontes de dados suportadas. Para obter informações sobre como carregar dados de fontes não suportadas pelo Lakehouse Federation, consulte Opções de formato de dados. Para informações gerais sobre como carregar dados, incluindo exemplos, consulte Carregar dados no pipeline.
Ocultar dados confidenciais
Você pode usar a visualização materializada para ocultar dados confidenciais de usuários que acessam a tabela. Uma maneira de fazer isso é criar a consulta de forma 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 faz a consulta. Por exemplo, você pode ocultar a coluna tax_id 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 view materializada. Para mais informações, consulte Filtros de linha e máscaras de coluna.
atualizar uma viewmaterializada
Atualizar uma view materializada atualiza a view para refletir as últimas alterações na tabela base no momento da refresh.
Quando você define uma view materializada, a instrução CREATE OR REPLACE MATERIALIZED VIEW é usada para criar a view e para refresh la para qualquer atualização agendada. Você também pode usar a instrução REFRESH MATERIALIZED VIEW para refresh a view 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 deste comando. Para saber mais sobre os tipos de visualização materializada que podem ser atualizadas incrementalmente, consulte refresh incremental para visualização materializada.
Para enviar uma instrução de refresh , use o editor SQL na interface do usuário Databricks , um Notebook anexado a um SQL warehouse, a CLIDatabricks SQL ou a APIDatabricks SQL.
O proprietário e qualquer usuário que tenha recebido o privilégio REFRESH na tabela podem refresh a view materializada.
O exemplo a seguir atualiza a view materializada mv1 :
REFRESH MATERIALIZED VIEW mv1;
As operações são síncronas por default, o que significa que o comando bloqueia até que as operações refresh sejam concluídas. Para refresh de forma assíncrona, você pode adicionar a palavra-chave ASYNC :
REFRESH MATERIALIZED VIEW mv1 ASYNC;
Para aprender como programar uma refresh, consulte Programar atualização em Databricks SQL.
Como a visualização materializada Databricks SQL é atualizada?
A visualização materializada cria e utiliza automaticamente um pipeline serverless para processar operações refresh . A refresh é gerenciada pelo pipeline e monitorada pelo Databricks SQL Warehouse usado para criar a view materializada. A visão materializada pode ser atualizada usando um pipeline que é executado em um programador. A visualização materializada criada Databricks SQL é sempre executada no modo acionado. Consulte Modo de pipeline acionado versus modo de pipeline contínuo.
A atualização agendada pode incluir notificações de atualização, e você pode definir o modo de desempenho para a refresh.
refreshincremental
As visualizações materializadas são atualizadas usando um dos dois métodos.
- refreshincremental - O sistema avalia a consulta da view para identificar alterações que ocorreram após a última atualização e mesclar apenas os dados novos ou modificados.
- refreshcompleta - Se uma refresh incremental não puder ser realizada ou não for economicamente viável, o sistema executa a consulta completa e substitui os dados existentes na view materializada pelos novos resultados.
A estrutura da consulta e o tipo de dados de origem determinam se refresh incremental é suportada. Para suportar refresh incremental, os dados de origem devem ser armazenados em tabelas Delta , com acompanhamento de linhas e feed de dados de alterações ativados. Para verificar se uma consulta é incrementalizável, use a instrução Databricks SQL EXPLAIN CREATE MATERIALIZED VIEW . Após criar uma view materializada, você pode monitorar seu comportamento refresh para verificar se ela é atualizada incrementalmente ou por meio de uma refresh completa.
Por default, Databricks usa um modelo de custo para escolher a opção mais econômica entre atualização completa e refresh incremental. Você pode substituir esse comportamento para preferir a atualização incremental ou completa definindo um REFRESH POLICY em sua definição SQL da view materializada.
Para obter detalhes sobre os tipos de refresh e como otimizar a atualização incremental, consulte refresh incremental para visualização materializada.
Atualização assíncrona
Por default, as operações refresh são realizadas de forma síncrona. Você também pode configurar operações refresh para ocorrerem de forma assíncrona. Isso pode ser configurado usando o comando refresh com a palavra-chave ASYNC . Consulte REFRESH (MATERIALIZED VIEW ou STREAMING TABLE). O comportamento associado a cada abordagem é o seguinte:
- Síncrono : uma refresh síncrona impede que outras operações prossigam até que a refresh seja concluída. Se o resultado for necessário para o próximo passo, como ao sequenciar operações refresh em ferramentas de orquestração como LakeFlow Jobs, use uma refresh síncrona. Para orquestrar uma visualização materializada com um Job, use o tipo tarefa SQL . Veja empregosLakeFlow.
- Assíncrono : Uma refresh assíncrona inicia uma tarefa em segundo plano em compute serverless quando uma refresh view materializada é iniciada, permitindo que o comando retorne antes que o carregamento de dados seja concluído. Esse tipo refresh pode gerar economia de custos porque as operações não necessariamente ocupam capacidade compute no data warehouse onde o comando é iniciado. Se a refresh se tornar um paradoxo e nenhuma outra tarefa estiver em execução, o warehouse poderá ser desligado enquanto a refresh utiliza outros compute disponíveis. Além disso, o recurso de atualização assíncrona permite iniciar várias operações em paralelo.
Excluir permanentemente registros de uma view materializada com vetores de exclusão habilitados
Visualização
O suporte para a instrução REORG com visualização materializada está em Visualização Pública.
- Usar uma instrução
REORGcom uma view materializada requer Databricks Runtime 15.4 e acima. - Embora você possa usar a instrução
REORGcom qualquer view materializada, ela só é necessária ao excluir registros de uma view materializada com vetores de exclusão habilitados. O comando não tem efeito quando usado com uma view materializada sem vetores de exclusão habilitados.
Para excluir fisicamente registros do armazenamento subjacente para uma view materializada com vetores de exclusão habilitados, como para compliance GDPR , passos adicionais devem ser tomados para garantir que uma operação vacuum seja executada nos dados da view materializada.
Para excluir registros fisicamente:
- executa uma instrução
REORGna view materializada, especificando o parâmetroAPPLY (PURGE). Por exemploREORG TABLE <materialized-view-name> APPLY (PURGE);. Veja REORG TABLE. - Aguarde o período de retenção de dados da view materializada passar. O período default de retenção de dados é de sete dias, mas pode ser configurado com a propriedade da tabela
delta.deletedFileRetentionDuration. Consulte Configurar retenção de dados para consultas de viagem do tempo. REFRESHa view materializada. Veja Atualizar uma viewmaterializada. Dentro de 24 horas das operaçõesREFRESH, a tarefa de manutenção pipeline , incluindo as operaçõesVACUUMnecessárias para garantir que os registros sejam excluídos permanentemente, são executadas automaticamente.
Solte uma viewmaterializada
Para enviar o comando para remover uma view materializada, você deve ser o proprietário dessa view materializada ou ter o privilégio MANAGE na view materializada.
Para descartar uma view materializada, use a instrução DROP VIEW . Para enviar uma instrução DROP , você pode usar o editor SQL na interface do usuário Databricks , a CLIDatabricks SQL ou a APIDatabricks SQL. O exemplo a seguir descarta a view materializada mv1 :
DROP MATERIALIZED VIEW mv1;
Você também pode usar o Catalog Explorer para soltar uma view materializada.
- Clique
Catálogo na barra lateral.
- Na árvore do Catalog Explorer à esquerda, abra o catálogo e selecione o esquema onde sua view materializada está localizada.
- Abra o item Tabelas no esquema selecionado e clique na view materializada.
- No menu de kebab
, selecione Excluir .
Entenda os custos de uma viewmaterializada
Quando você executa CREATE MATERIALIZED VIEW ou REFRESH MATERIALIZED VIEW, Databricks cria e executa automaticamente um pipeline serverless para processar as operações. Este pipeline é independente do Databricks SQL ou do recurso compute do qual você enviou o comando. O tamanho cluster do seu data warehouse não limita a compute ou o custo utilizado pela refresh.
- A execução do pipeline refresh em compute serverless , denominada DBUs de pipeline declarativo LakeFlow Spark serverless .
- O pipeline serverless é separado do seu data warehouse. O processamento a partir do seu data warehouse é usado apenas para coordenar as operações, não para realizar o processamento de dados.
- Os custos aumentam com o volume de dados processados, não com o tamanho do seu SQL warehouse.
- Para monitorar os custos refresh view materializada, utilize as tabelas do sistema. Consulte Qual é o consumo DBU de uma view materializada ou tabela de transmissão?.
- Para view o pipeline subjacente que gerencia sua view materializada:
- Clique em "Tarefas e pipeline" na barra lateral esquerda do seu workspace Databricks .
- Clique em Tipo de pipeline . Em seguida, selecione o pipeline MV/ST para visualizar a visão materializada criada no Databricks SQL.
Você poderá incorrer em custos compute serverless mesmo quando o data warehouse de origem usar compute dedicada.
Habilitando o acompanhamento de linha
Para suportar a atualização incremental a partir de tabelas Delta , o acompanhamento de linhas deve estar ativado para essas tabelas de origem. Se você recriar uma tabela de origem, deverá reativar 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 Acompanhamento de linhas no Databricks
Limitações
- Para requisitos de compute e workspace , consulte Requisitos.
- Para requisitos refresh incremental, consulte refresh incremental para visualização materializada.
- A visualização materializada não suporta colunas de identidade ou chaves substitutas.
- Se uma view materializada usar uma agregação de soma sobre uma coluna
NULLe somente valoresNULLpermanecerem nessa coluna, o valor agregado resultante da visualização materializada será zero em vez deNULL. - Não é possível ler um feed de dados de alterações de uma view materializada.
- Consultas de viagem do tempo não são suportadas na visualização materializada.
- Os arquivos subjacentes que suportam a visão materializada podem incluir dados de tabelas upstream (incluindo possíveis informações de identificação pessoal) que não aparecem na definição view materializada. Esses dados são adicionados automaticamente ao armazenamento subjacente para suportar a atualização incremental da visualização materializada. Como os arquivos subjacentes de uma view materializada podem expor dados de tabelas upstream que não fazem parte do esquema view materializada, Databricks recomenda não compartilhar o armazenamento subjacente com consumidores downstream não confiáveis. Por exemplo, suponha que a definição de uma view materializada inclua uma cláusula
COUNT(DISTINCT field_a). Embora a definição view materializada inclua apenas a cláusula agregadaCOUNT DISTINCT, os arquivos subjacentes contêm uma lista dos valores reais defield_a. - Você poderá incorrer em algumas taxas compute serverless , mesmo ao usar esses recursos em compute dedicada.
Acesse a visualização materializada de clientes externos
Para acessar a visualização materializada de clientes externos Delta Lake ou Iceberg que não suportam APIs abertas, você pode usar Modede Compatibilidade. Mode de Compatibilidade cria uma versão somente leitura da sua view materializada que pode ser acessada por qualquer cliente Delta Lake ou Iceberg .