Usar visualizações materializadas no Databricks SQL
Observação
Se você precisar usar uma conexão de Link Privado do Azure com sua exibição materializada, entre em contato com seu representante do Databricks.
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.
Importante
As exibições materializadas criadas no Databricks SQL são apoiadas por um pipeline Delta Live Tables sem servidor. Seu workspace deve dar suporte a pipelines sem servidor para usar essa funcionalidade.
O que são exibições materializadas?
No Databricks SQL, as exibições materializadas são tabelas gerenciadas do Catálogo do Unity que permitem que os usuários pré-computem 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 exibições materializadas são poderosas para cargas de trabalho de processamento de dados, como processamento etl (extração, transformação e carregamento). 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 reduzem o custo e melhoram a latência da consulta ao pré-computar consultas lentas e computações usadas com frequência. As exibições materializadas também permitem transformações fáceis de usar limpando, enriquecendo e desnormalizando tabelas base. As exibições materializadas podem reduzir os custos, fornecendo uma experiência simplificada do usuário final porque, em alguns casos, elas podem calcular incrementalmente as alterações das tabelas base.
As exibições materializadas tiveram suporte pela primeira vez no Databricks Lakehouse com o lançamento do Delta Live Tables. Quando você cria uma exibição materializada em um SQL warehouse do Databricks, um pipeline sem servidor é 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 ou na API de pipelines. Consulte Exibir a status de uma atualização de exibição materializada.
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.
Seu workspace deve estar em uma região que dê suporte a SQL warehouses sem servidor.
Para consultar exibições materializadas:
- Você deve ser o proprietário da exibição materializada ou ter
SELECT
nela, além deUSE SCHEMA
eUSE CATALOG
nos pais. - Você deve usar um dos seguintes recursos de computação:
- SQL warehouse
- Interfaces do Delta Live Tables
- Computação em modo de acesso compartilhado
- 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 Controle de acesso refinado na computação de usuário único.
- Somente se você for o proprietário da exibição materializada: um recurso de computação de modo de acesso de usuário único que está executando o Databricks Runtime entre 14.3 e 15.3.
Para saber mais sobre outras restrições ao uso de exibições materializadas, confira Limitações.
Criar uma exibição materializada
As operações de exibição CREATE
materializadas do Databricks SQL usam um SQL warehouse do Databricks para criar e carregar dados na exibição materializada. Criar 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 seja concluída. Um pipeline sem servidor do Delta Live Tables é criado automaticamente para cada exibição materializada do Databricks SQL. Quando a exibição materializada é atualizada, o pipeline do Delta Live Tables processa 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, o CLI do SQL do Databricks ou a API do SQL do Databricks.
Observação
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 exibição materializada.USE CATALOG
eUSE SCHEMA
privilégios no catálogo e no esquema que contém as tabelas de origem para a exibição materializada.USE CATALOG
eUSE SCHEMA
privilégios no catálogo de destino e no esquema para a exibição materializada.CREATE TABLE
eCREATE MATERIALIZED VIEW
privilégios no esquema que contém a exibição materializada.
O exemplo a seguir cria a exibição materializada mv1
da tabela base base_table1
:
CREATE MATERIALIZED VIEW mv1
AS SELECT
date, sum(sales) AS sum_of_sales
FROM
base_table1
GROUP BY
date;
Definir o canal de tempo de execução
As exibições materializadas criadas usando SQL warehouses são atualizadas automaticamente usando um pipeline Delta Live Tables. Os pipelines do Delta Live Tables usam o runtime no current
canal por padrão. Consulte as notas de versão do Delta Live Tables e o processo de atualização de versão para saber mais sobre o processo de lançamento.
O Databricks recomenda usar o current
canal para cargas de trabalho de produção. Novos recursos são lançados primeiro no preview
canal. Você pode definir um pipeline para o canal de visualização do Delta Live Tables para testar novos recursos especificando preview
como uma propriedade de tabela. Você pode especificar essa propriedade ao criar a tabela ou depois que a tabela for criada usando uma instrução ALTER.
O exemplo de código a seguir mostra como definir o canal para visualização em uma instrução CREATE:
CREATE OR REPLACE MATERIALIZED VIEW foo.default.bar
TBLPROPERTIES ('pipelines.channel' = 'preview') as
SELECT
*
FROM
range(5)
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.
Atualizar uma exibição materializada
A operação REFRESH
atualiza a exibição materializada para refletir as alterações mais recentes na tabela base. A operação é síncrona por padrão, o que significa que o comando é bloqueado até que a operação de atualização seja concluída. Para atualizar uma exibição materializada, use a instrução REFRESH MATERIALIZED VIEW
. Consulte ATUALIZAR (EXIBIÇÃO MATERIALIZADA ou TABELA DE STREAMING) para obter detalhes sobre a sintaxe SQL e os parâmetros para esse comando. Para saber mais sobre os tipos de exibições materializadas que podem ser atualizadas incrementalmente, 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 depósito SQL, a CLI do SQL do Databricks ou a API do SQL do Databricks.
Somente o proprietário pode REFRESH
a exibição materializada.
O exemplo a seguir atualiza a exibição materializada mv1
:
REFRESH MATERIALIZED VIEW mv1;
Como as exibições materializadas do Databricks SQL são atualizadas?
As exibições materializadas criam e usam automaticamente pipelines de Tabelas Dinâmicas Delta sem servidor para processar operações de atualização. A atualização é gerenciada pelo pipeline do Delta Live Tables e a atualização é monitorada pelo depósito SQL do Databricks usado para criar a exibição materializada. As exibições materializadas podem ser atualizadas usando um pipeline do Delta Live Tables que é executado em um agendamento. Consulte Modo de pipeline disparado vs. contínuo.
Observação
O runtime de Tabelas Dinâmicas Delta não pode detectar 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 a recomputação excessiva diminua 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. Isso pode ser definido usando o comando refresh. Consulte REFRESH (EXIBIÇÃO MATERIALIZADA 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 Trabalhos do Databricks, use uma atualização síncrona. Para orquestrar exibições materializadas com um trabalho, use o tipo de tarefa SQL . Confira Programar e orquestrar fluxos de trabalho.
- Assíncrono: uma atualização assíncrona inicia um trabalho em segundo plano na computação do Delta Live Tables quando uma atualização de exibição materializada começa, permitindo que o comando retorne antes que o carregamento de dados seja concluído. Esse tipo de atualização pode economizar custos porque a operação não necessariamente mantém a capacidade de computação no warehouse 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 usa outra computação disponível. Além disso, as atualizações assíncronas dão suporte ao início de várias operações em paralelo.
Algumas consultas podem ser atualizadas incrementalmente. Consulte Atualização incremental para exibições materializadas. Se uma atualização incremental não puder ser executada, uma atualização completa será executada.
Agendar atualizações de modo de exibição materializado
Você pode configurar uma exibição materializada do Databricks SQL para atualizar automaticamente com base em um agendamento definido. Para definir uma programação, siga um destes procedimentos:
- Configure o agendamento com a cláusula
SCHEDULE
ao criar a exibição materializada - Adicione uma agenda com a instrução ALTERAR EXIBIÇÃO MATERIALIZADA .
Quando um agendamento é criado, um novo trabalho do Databricks é configurado automaticamente para processar a atualização.
Para exibir a agenda, siga um destes procedimentos:
- Execute a instrução
DESCRIBE EXTENDED
no editor SQL na interface do usuário do Azure Databricks. - Use o Explorador de Catálogos para exibir a exibição materializada. O agendamento é listado na guia Visão geral, em Status de atualização. Confira O que é o Explorador de Catálogos?.
Exibir o status da atualização de uma exibição materializada
Observação
Como um pipeline do 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 a status de uma atualização de exibição materializada exibindo o pipeline que gerencia a exibição materializada na interface do usuário do Delta Live Tables ou exibindo as Informações de Atualização retornadas pelo DESCRIBE EXTENDED
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 do Delta Live Tables. Veja Exibir o histórico de atualização de uma exibição materializada.
Monitorar execuções usando o histórico de consultas
Você pode usar a página de histórico de consultas para acessar detalhes e perfis de consulta que podem ajudá-lo a identificar consultas de baixo desempenho e gargalos no pipeline do Delta Live Tables usado para executar suas atualizações de tabela de streaming. Para obter uma visão geral do tipo de informação disponível para históricos de consulta e perfis de consulta, consulte Histórico de consultas e Perfil de consulta.
Importante
Esse recurso está em uma versão prévia. Os administradores do workspace podem habilitar esse recurso na página Visualizações. Consulte Gerenciar Versões Prévias do Azure Databricks.
Todas as instruções relacionadas a exibições materializadas aparecem no histórico de consultas. Você pode usar o filtro suspenso Instrução para selecionar qualquer comando e inspecionar as consultas relacionadas. Todas as CREATE
instruções são seguidas por uma REFRESH
instrução que é executada de forma assíncrona em um pipeline do Delta Live Tables. As REFRESH
instruções geralmente incluem planos de consulta detalhados que fornecem insights sobre como otimizar o desempenho.
Para acessar REFRESH
instruções na interface do usuário do histórico de consultas, use as seguintes etapas:
- Clique em na barra lateral esquerda para abrir a interface do usuário do histórico de consultas.
- Marque a caixa de seleção REFRESH no filtro suspenso Instrução .
- Clique no nome da instrução de consulta para exibir detalhes resumidos, como a duração da consulta e as métricas agregadas.
- Clique em Ver perfil de consulta para abrir o perfil de consulta. Para obter detalhes sobre como navegar no perfil de consulta, consulte Perfil de consulta.
- Opcionalmente, use os links na seção Fonte da Consulta para abrir a consulta ou o pipeline relacionado.
Observação
Sua exibição materializada deve ser configurada para ser executada usando o canal de visualização . Consulte Definir o canal de tempo de execução.
Consulte CRIAR VISUALIZAÇÃO MATERIALIZADA.
Exibir o status de atualização na interface do usuário do Delta Live Tables
Por padrão, o pipeline do Delta Live Tables que gerencia uma exibição materializada não está visível na interface do usuário do 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:
- Copie e cole o link mostrado na linha Atualização mais recente da tabela retornada pela instrução
DESCRIBE EXTENDED
. - Na guia linhagem da exibição materializada, clique em Pipelines e, em seguida, clique no link do pipeline.
Para comandos REFRESH
assíncronos enviados usando o editor SQL na interface do usuário do Azure Databricks, você pode exibir o status de atualização seguindo o link mostrado no painel Resultados.
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.
Atualizar a definição de uma exibição materializada
Para atualizar a definição de uma exibição materializada, primeiro você deve descartar e recriar a exibição materializada.
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.
Para remover uma exibição materializada, use a instrução DROP VIEW. Para enviar uma instrução DROP
, você pode usar o editor de SQL na interface do usuário do Azure Databricks, na CLI do SQL do Databricks ou na API do SQL do Databricks. O exemplo a seguir descarta a exibição materializada mv1
:
DROP MATERIALIZED VIEW mv1;
Descrever uma exibição materializada
Para recuperar as colunas e os tipos de dados para uma exibição materializada, use a instrução DESCRIBE
. Para recuperar as colunas, os tipos de dados e os metadados, como proprietário, local, hora de criação e status de atualização para uma exibição materializada, use DESCRIBE EXTENDED
. Para enviar uma instrução DESCRIBE
, use o editor de SQL na interface do usuário do Azure Databricks, na CLI do SQL do Databricks ou na API do SQL do Databricks.
Mudar o proprietário de uma exibição materializada
Você pode alterar o proprietário de uma exibição materializada se for um administrador de metastore e um administrador de workspace. As exibiçõ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 exibições materializadas:
- Na guia linhagem da exibição materializada, clique em Pipelines e, em seguida, clique no link do pipeline.
- Clique no menu kebab à direita do nome do pipeline e clique em Permissões. Isso abrirá a caixa de diálogo de permissões.
- Clique no 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 deverá ser o novo proprietário do pipeline.
- Clique em Salvar para salvar suas alterações e feche a caixa de diálogo.
Todos os ativos do pipeline, incluindo as exibições materializadas definidas no pipeline, pertencerão ao novo proprietário do pipeline. Todas as atualizações futuras serão executadas usando a identidade do novo proprietário.
Controlar o acesso a exibições materializadas
As exibições materializadas dão suporte a controles de acesso avançados para dar suporte ao compartilhamento de dados, evitando expor dados potencialmente privados. Um proprietário de exibição materializado pode conceder SELECT
privilégios a outros usuários. Os usuários com SELECT
acesso à exibição materializada não precisam de SELECT
acesso às tabelas referenciadas pela exibição materializada. Esse controle de acesso permite o compartilhamento de dados enquanto controla o acesso aos dados subjacentes.
Conceder privilégios a uma exibição materializada
Para conceder acesso a uma exibição materializada, use a instrução GRANT
:
GRANT
privilege_type [, privilege_type ] ...
ON <mv_name> TO principal;
A privilege_type pode ser:
SELECT
– o usuário podeSELECT
a exibição materializada.REFRESH
– o usuário podeREFRESH
a exibiçã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 exibição materializada
Para revogar o acesso de uma exibição materializada, use a instrução REVOKE
:
REVOKE
privilege_type [, privilege_type ]
ON <name> FROM principal;
Quando os privilégios SELECT
em uma tabela base são revogados do proprietário da exibição materializada ou de qualquer outro usuário que recebeu privilégios SELECT
para a exibição materializada ou a tabela base é descartada, o proprietário da exibição materializada ou acesso concedido pelo usuário ainda é capaz de consultar a exibição materializada. No entanto, ocorre o seguinte comportamento:
- O proprietário da exibição materializada ou outras pessoas que perderam o acesso a uma exibição materializada não podem mais
REFRESH
essa exibição materializada, e a exibição materializada ficará obsoleta. - Se automatizado com um agendamento, o próximo agendado falhará
REFRESH
ou não será executado.
O exemplo a seguir revoga o SELECT
privilégio de mv1
:
REVOKE SELECT ON mv1 FROM user1;
Habilitar o feed de dados de alterações
O feed de dados da mudança é necessário nas tabelas básicas das exibições materializadas, exceto em determinados casos de uso avançados. Para ativar o feed de dados alterados em uma tabela base, defina a propriedade delta.enableChangeDataFeed
table usando a seguinte sintaxe:
ALTER TABLE table1 SET TBLPROPERTIES (delta.enableChangeDataFeed = true);
Exibir o histórico de atualização para uma exibição materializada
Para exibir o status das operações REFRESH
em uma exibição materializada, incluindo atualizações atuais e passadas, consulte o log de 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.
Confira O que é o log de eventos do Delta Live Tables?.
Limitações
- Para requisitos de computação e workspace, confira Requisitos.
- As exibições materializadas não dão suporte a colunas de identidade ou chaves substitutas.
- Se uma exibição materializada usar uma soma agregada em uma
NULL
coluna capaz e apenasNULL
os valores permanecerem nessa coluna, o valor agregado resultante das exibições materializadas será zero em vez deNULL
. - Você não pode ler um feed de dados alterados de uma visualização materializada.
- Não há suporte para consultas de 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çãoCOUNT DISTINCT
, os arquivos subjacentes conterão uma lista dos valores reais defield_a
.