Partilhar via


Usar exibições materializadas no Databricks SQL

Importante

Esta funcionalidade está em Pré-visualização Pública.

Este artigo descreve como criar e usar 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 visualizações materializadas são tabelas gerenciadas pelo Unity Catalog que permitem aos usuários pré-calcular resultados com base na versão mais recente dos dados nas tabelas de origem. As exibições materializadas no Azure Databricks diferem de outras implementações, pois os resultados retornados refletem o estado dos dados quando a exibição materializada foi atualizada pela última vez, em vez de sempre atualizar os resultados quando a exibição materializada é consultada. Você pode atualizar manualmente exibições materializadas ou agendar atualizações.

As visualizações materializadas são poderosas 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 reduzem os custos e melhoram a latência das consultas pré-computando consultas lentas e cálculos usados com frequência. As visualizações materializadas também permitem transformações fáceis de usar, limpando, enriquecendo e desnormalizando tabelas base. As visualizações materializadas podem reduzir custos e, ao mesmo tempo, fornecer uma experiência simplificada ao usuário final porque, em alguns casos, elas podem calcular incrementalmente as alterações das tabelas base.

As visualizações materializadas foram suportadas pela primeira vez na plataforma Databricks Data Intelligence com o lançamento do Delta Live Tables. Quando você cria uma exibição materializada em um armazém SQL Databricks, um pipeline Delta Live Tables é criado para processar atualizações para a exibição materializada. Você pode monitorar o status das operações de atualização na interface do usuário do Delta Live Tables, na API do Delta Live Tables ou na CLI do Delta Live Tables. Consulte Ver o estado de uma atualização de vista materializada.

Requerimentos

  • Você deve usar um armazém SQL Databricks habilitado para Unity Catalog para criar e atualizar exibições materializadas.

  • Seu espaço de trabalho deve estar em uma região habilitada para servidor.

Para saber mais sobre restrições ao usar exibições materializadas com o Databricks SQL, consulte Limitações.

Criar uma vista materializada

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

Nota

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

  • SELECT privilégio nas tabelas base referenciadas pela vista materializada.
  • USE CATALOG e USE SCHEMA privilégios no catálogo e esquema contendo as tabelas de origem para a exibição 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.

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

CREATE MATERIALIZED VIEW mv1
AS SELECT
  date, sum(sales) AS sum_of_sales
FROM
  table1
GROUP BY
  date;

Como são criadas as vistas materializadas?

As operações de exibição CREATE materializada do Databricks SQL usam um armazém SQL do Databricks para criar e carregar dados na exibição materializada. Como a criação de uma exibição materializada é uma operação síncrona no armazém SQL do Databricks, o CREATE MATERIALIZED VIEW comando bloqueia até que a exibição materializada seja criada e a carga inicial de dados seja concluída. Um pipeline Delta Live Tables é criado automaticamente para cada exibição materializada do Databricks SQL. Quando a exibição materializada é atualizada, uma atualização para o pipeline Delta Live Tables é iniciada para processar a atualização.

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.

Atualizar uma vista materializada

A REFRESH operação atualiza a exibição materializada para refletir as alterações mais recentes na tabela base. Para atualizar uma exibição materializada, use a REFRESH MATERIALIZED VIEW instrução. Consulte REFRESH (MATERIALIZED VIEW e STREAMING TABLE) na referência do Databricks SQL. Para enviar uma instrução de atualização, use o editor SQL na interface do usuário do Azure Databricks, a CLI SQL do Databricks ou a API SQL do Databricks.

Só o proprietário pode REFRESH a visão materializada.

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

REFRESH MATERIALIZED VIEW mv1;

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

As visualizações materializadas criam e usam automaticamente pipelines Delta Live Tables para processar operações de atualização. Como a atualização é gerenciada por um pipeline Delta Live Tables, o armazém SQL Databricks usado para criar a exibição materializada não é usado e não precisa estar em execução durante a operação de atualização.

Os pipelines Delta Live Tables usam um modo de execução contínuo ou acionado. As visualizações materializadas podem ser atualizadas em qualquer modo de execução. Para evitar processamento desnecessário ao operar no modo de execução contínua, os pipelines monitoram automaticamente as tabelas Delta dependentes e executam uma atualização somente quando o conteúdo dessas tabelas dependentes for alterado. Consulte O que é um pipeline Delta Live Tables?.

Nota

O tempo de execução do Delta Live Tables não pode detetar alterações em fontes de dados não Delta. A tabela ainda é atualizada regularmente, mas com um intervalo de gatilho padrão mais alto para evitar que o recálculo excessivo retarde qualquer processamento incremental acontecendo na computação.

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. O comportamento associado a cada abordagem é o seguinte:

  • Síncrono: uma atualização síncrona bloqueia outras operações até que a operação de atualização seja concluída. Isso permite sequenciar operações de atualização em uma ferramenta de orquestração, como fluxos de trabalho. Para orquestrar exibições materializadas com fluxos de trabalho, use o tipo de tarefa SQL . Consulte Introdução aos fluxos de trabalho do Azure Databricks.
  • Assíncrona: uma atualização assíncrona inicia um trabalho em segundo plano no cálculo do Delta Live Tables quando uma atualização de exibição materializada começa e o comando retorna antes que o carregamento de dados seja concluído. Como um pipeline Delta Live Tables gerencia a atualização, o armazém SQL Databricks usado para criar a exibição materializada não é usado. Ele não precisa estar em execução durante a operação de atualização.

Algumas consultas podem ser atualizadas incrementalmente. Consulte Operações de atualização para ver vistas materializadas. Se uma atualização incremental não puder ser executada, uma atualização completa será executada.

Agendar atualizações de exibição materializadas

Você pode configurar uma exibição materializada do Databricks SQL para atualizar automaticamente com base em uma agenda definida. Configure essa agenda com a SCHEDULE cláusula quando você criar a exibição materializada ou adicionar uma agenda com a instrução ALTER VIEW . Quando uma agenda é criada, um novo trabalho do Databricks é configurado automaticamente para processar a atualização. Você pode visualizar o cronograma a qualquer momento com a DESCRIBE EXTENDED declaração.

Atualizar a definição de uma visão materializada

Para atualizar a definição de uma vista materializada, deve primeiro largar e, em seguida, recriar a vista materializada.

Solte uma visão materializada

Nota

Para enviar o comando para soltar uma visão materializada, você deve ser o proprietário dessa visão materializada.

Para soltar uma exibição materializada, use a instrução DROP VIEW . Para enviar uma DROP instrução, você pode usar o editor SQL na interface do usuário 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;

Descrever uma visão materializada

Para recuperar as colunas e os tipos de dados para uma exibição materializada, use a DESCRIBE instrução. Para recuperar as colunas, os tipos de dados e os metadados, como proprietário, local, hora de criação e status de atualização de uma exibição materializada, use DESCRIBE EXTENDED. Para enviar uma DESCRIBE instrução, use o editor SQL na interface do usuário do Azure Databricks, a CLI SQL do Databricks ou a API SQL do Databricks.

Exibir o status de uma atualização de exibição materializada

Nota

Como um pipeline Delta Live Tables gerencia atualizações de exibição materializadas, há latência incorrida pelo tempo de inicialização do pipeline. Esse tempo pode ser de segundos a minutos, além do tempo necessário para executar a atualização.

Você pode exibir o status de uma atualização de exibição materializada exibindo o pipeline que gerencia a exibição materializada na interface do usuário Delta Live Tables ou exibindo as Informações de Atualização retornadas DESCRIBE EXTENDED pelo comando para a exibição materializada.

Você também pode exibir o histórico de atualização de uma exibição materializada consultando o log de eventos Delta Live Tables. Consulte Ver o histórico de atualizações para obter uma vista materializada.

Exibir o status de atualização na interface do usuário do Delta Live Tables

Por padrão, o pipeline Delta Live Tables que gerencia uma exibição materializada não é visível na interface do usuário Delta Live Tables. Para exibir o pipeline na interface do usuário do Delta Live Tables, você deve acessar diretamente o link para a página de detalhes do pipeline do pipeline. Para acessar o link:

Parar uma atualização ativa

Para interromper uma atualização ativa na interface do usuário do Delta Live Tables, 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.

Alterar o proprietário de uma vista materializada

Você pode alterar o proprietário de uma exibição materializada se for um administrador de metastore e um administrador de espaço de trabalho. As visualizações materializadas criam e usam automaticamente pipelines do Delta Live Tables para processar alterações. Use as seguintes etapas para alterar um proprietário de modos de exibição materializados:

  • Clique em Ícone EmpregosFluxos de trabalho e, em seguida, clique na guia Delta Live Tables.
  • Clique no nome do pipeline cujo proprietário você deseja alterar.
  • Clique no Menu de kebab menu kebab à direita do nome do pipeline e clique em Permissões. Isso abre a caixa de diálogo de permissões.
  • Clique em x à direita do nome do proprietário atual para remover o proprietário atual.
  • Comece a digitar para filtrar a lista de usuários disponíveis. Clique no usuário que deve ser o novo proprietário do pipeline.
  • Clique em Salvar para salvar as alterações e fechar a caixa de diálogo.

Todos os ativos do pipeline, incluindo as visualizações materializadas definidas no pipeline, são de propriedade do novo proprietário do pipeline. Todas as atualizações futuras são executadas usando a identidade do novo proprietário.

Controlar o acesso a vistas materializadas

As visualizações materializadas suportam controles de acesso avançados para dar suporte ao compartilhamento de dados, evitando a exposição de dados potencialmente privados. Um proprietário de exibição materializado pode conceder SELECT privilégios a outros usuários. Os utilizadores com SELECT acesso à vista materializada não necessitam de SELECT aceder às tabelas referenciadas pela vista materializada. Esse controle de acesso permite o compartilhamento de dados enquanto controla o acesso aos dados subjacentes.

Conceder privilégios a uma visão materializada

Para conceder acesso a uma visão materializada, use a GRANT instrução:

GRANT
  privilege_type [, privilege_type ] ...
  ON <mv_name> TO principal;

O privilege_type pode ser:

  • SELECT - o usuário pode SELECT a visão materializada.
  • REFRESH - o usuário pode REFRESH a visão materializada. As atualizações são executadas usando as permissões do proprietário.

O exemplo a seguir cria uma exibição materializada e concede privilégios de seleção e atualização a um usuário:

CREATE MATERIALIZED VIEW <mv_name> AS SELECT * FROM <base_table>;
GRANT SELECT ON <mv_name> TO user;
GRANT REFRESH ON <mv_name> TO user;

Revogar privilégios de uma visão materializada

Para revogar o acesso a partir de uma visão materializada, use a REVOKE instrução:

REVOKE
  privilege_type [, privilege_type ]
  ON <name> FROM principal;

Quando SELECT os privilégios em uma tabela base são revogados do proprietário da exibição materializada ou de qualquer outro usuário que tenha recebido SELECT privilégios para a exibição materializada, ou a tabela base é descartada, o proprietário da exibição materializada ou o usuário com acesso concedido ainda pode consultar a exibição materializada. No entanto, ocorre o seguinte comportamento:

  • O dono da visão materializada ou outros que perderam o acesso a uma visão materializada não podem mais REFRESH essa visão materializada, e a visão materializada se tornará obsoleta.
  • Se automatizado com uma agenda, a próxima agendada REFRESH falha ou não é executada.

O exemplo a seguir revoga o SELECT privilégio de mv1:

REVOKE SELECT ON mv1 FROM user1;

Ativar feed de dados de alteração

É necessário alterar o feed de dados nas tabelas base de visualizações materializadas, exceto para certos casos de uso avançados. Para habilitar o feed de dados de alteração em uma tabela base, defina a delta.enableChangeDataFeed propriedade table usando a seguinte sintaxe:

ALTER TABLE table1 SET TBLPROPERTIES (delta.enableChangeDataFeed = true);

Ver o histórico de atualizações para uma vista materializada

Para exibir o status das operações em uma exibição materializada, incluindo atualizações atuais e passadas, consulte o log de REFRESH eventos do Delta Live Tables:

SELECT
  *
FROM
  event_log(TABLE(<fully-qualified-table-name>))
WHERE
  event_type = "update_progress"
ORDER BY
  timestamp desc;

Substitua <fully-qualified-table-name> pelo nome totalmente qualificado da exibição materializada, incluindo o catálogo e o esquema.

Consulte O que é o log de eventos do Delta Live Tables?.

Determinar se uma atualização incremental ou completa é usada

Para otimizar o desempenho de atualizações de exibição materializadas, o Azure Databricks usa um modelo de custo para selecionar a técnica usada para a atualização. A tabela a seguir descreve essas técnicas:

Técnica Atualização incremental? Description
FULL_RECOMPUTE Não A visão materializada foi totalmente recalculada
NO_OP Não aplicável A vista materializada não foi atualizada porque não foram detetadas alterações à tabela base.
ROW_BASED ou PARTITION_OVERWRITE Sim A visão materializada foi incrementalmente atualizada usando a técnica especificada.

Para determinar a técnica usada, consulte o log de eventos Delta Live Tables onde o event_type é planning_information:

SELECT
  timestamp,
  message
FROM
  event_log(TABLE(<fully-qualified-table-name>))
WHERE
  event_type = 'planning_information'
ORDER BY
  timestamp desc;

Substitua <fully-qualified-table-name> pelo nome totalmente qualificado da exibição materializada, incluindo o catálogo e o esquema.

Consulte O que é o log de eventos do Delta Live Tables?.

Limitações

  • Há restrições sobre como as MVs podem ser gerenciadas e onde podem ser consultadas:

    • As exibições materializadas do Databricks SQL só podem ser criadas e atualizadas em armazéns SQL pro e armazéns SQL sem servidor.
    • Uma exibição materializada do Databricks SQL só pode ser atualizada a partir do espaço de trabalho que a criou.
    • As exibições materializadas do Databricks SQL só podem ser consultadas a partir de armazéns SQL do Databricks, Delta Live Tables e clusters compartilhados que executam o Databricks Runtime 11.3 ou superior. Não é possível consultar exibições materializadas de clusters de modo de acesso de usuário único.
  • As visualizações materializadas não suportam colunas de identidade ou chaves substitutas.

  • Se uma exibição materializada usa uma soma agregada em uma NULLcoluna -able e apenas NULL os valores permanecem nessa coluna, o valor agregado resultante das exibições materializadas é zero em vez de NULL.

  • 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 agregada COUNT DISTINCT , os arquivos subjacentes conterão uma lista dos valores reais de field_a.

  • As visualizações materializadas do Databricks SQL não são suportadas nas regiões Centro-Sul dos EUA e Oeste dos EUA 2.