Usar exibições materializadas no Databricks SQL
Nota
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 espaço de trabalho deve oferecer suporte a pipelines sem servidor para usar essa funcionalidade.
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 vistas materializadas foram suportadas pela primeira vez no Azure Databricks com o lançamento do Delta Live Tables. Quando você cria um modo de exibição materializado em um armazém SQL do Databricks, um pipeline sem servidor é criado para processar atualizações para o modo de exibição materializado. 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 Ver o estado de uma atualização de vista materializada.
Requerimentos
Para criar ou atualizar vistas materializadas:
Você deve usar um SQL warehouse pro habilitado para Catálogo Unity ou SQL warehouse sem servidor.
Para atualizar uma exibição materializada, você deve estar no espaço de trabalho que a criou.
Seu espaço de trabalho deve estar em uma região que ofereça suporte a armazéns SQL sem servidor.
Para consultar vistas materializadas:
- Você deve ser o dono da visão materializada, ou ter
SELECT
sobre a visão materializada, junto comUSE SCHEMA
eUSE CATALOG
sobre seus pais. - Você deve usar um dos seguintes recursos de computação:
- Armazém SQL
- Interfaces Delta Live Tables
- Computação do modo de acesso compartilhado
- 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 na computação de um único usuário.
- 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 esteja executando o Databricks Runtime entre 14.3 e 15.3.
Para saber mais sobre outras restrições no uso de modos de exibição materializados, consulte Limitações.
Criar uma vista materializada
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. 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 Delta Live Tables sem servidor é criado automaticamente para cada exibição materializada do Databricks SQL. Quando a exibição materializada é atualizada , o pipeline Delta Live Tables processa a atualização.
Para criar uma exibição materializada, use a CREATE MATERIALIZED VIEW
instrução. 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
eUSE SCHEMA
privilégios no catálogo e esquema contendo as tabelas de origem para a exibição materializada. -
USE CATALOG
eUSE SCHEMA
privilégios no catálogo de destino e esquema para a exibição materializada. -
CREATE TABLE
eCREATE 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_table1
base:
CREATE MATERIALIZED VIEW mv1
AS SELECT
date,
sum(sales) AS sum_of_sales
FROM
base_table1
GROUP BY
date;
Os comentários de coluna em uma tabela base são propagados automaticamente para a nova exibição materializada. Para adicionar uma agenda, restrições de tabela ou outras propriedades, modifique a definição de exibição materializada. Para obter detalhes de sintaxe para definir uma vista materializada, consulte CREATE MATERIALIZED VIEW.
Definir o canal de tempo de execução
As exibições materializadas criadas usando armazéns SQL são atualizadas automaticamente usando um pipeline Delta Live Tables. Os pipelines Delta Live Tables usam o tempo de execução no current
canal por padrão. Consulte as notas de versão do Delta Live Tables e o processo de atualização da versão para saber mais sobre o processo de lançamento.
A Databricks recomenda o uso do current
canal para cargas de trabalho de produção. Novos recursos são lançados pela primeira vez no preview
canal. Você pode definir um pipeline para o canal de visualização 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 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. 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 uma exibição materializada, use a REFRESH MATERIALIZED VIEW
instrução. 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 usuário do Azure Databricks, um bloco de anotações anexado a um depósito SQL, 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 sem servidor para processar operações de atualização. A atualização é gerenciada pelo pipeline Delta Live Tables 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 Delta Live Tables que é executado em uma programação. Consulte Modo de pipeline acionado versus contínuo.
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. Isso pode ser definido usando o comando refresh. Consulte 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 Databricks Jobs, use uma atualização síncrona. Para orquestrar exibições materializadas com um trabalho, use o tipo de tarefa SQL . Consulte Programar e orquestrar fluxos de trabalho.
- Assíncrono: 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, 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 depósito onde o comando é iniciado. Se a atualização ficar ociosa e nenhuma outra tarefa estiver em execução, o depósito poderá ser desligado enquanto a atualização usar outra computação disponível. Além disso, as atualizações assíncronas suportam a inicialização de várias operações em paralelo.
Algumas consultas podem ser atualizadas incrementalmente. Consulte Atualização incremental para visualizações 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. Para definir uma agenda, siga um destes procedimentos:
- Configure a agenda com a
SCHEDULE
cláusula ao criar a exibição materializada - Adicione uma agenda com a instrução ALTER MATERIALIZED VIEW .
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. - Use o Catalog Explorer para exibir o modo de exibição materializado. A agenda está listada na guia Visão geral , em Status de atualização. Consulte O que é o Catalog Explorer?.
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.
O monitor é executado usando o histórico de consultas
Você pode usar a página de histórico de consultas para acessar detalhes de consulta e perfis de consulta que podem ajudá-lo a identificar consultas de baixo desempenho e gargalos no pipeline Delta Live Tables usado para executar suas atualizações de tabela de streaming. Para obter uma visão geral do tipo de informações disponíveis para históricos de consultas e perfis de consulta, consulte Histórico de consultas e Perfil de consulta.
Importante
Esta funcionalidade está em Pré-visualização Pública. Os administradores do espaço de trabalho podem ativar esse recurso na página Visualizações . Consulte Gerenciar visualizações 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 Delta Live Tables. As REFRESH
instruções geralmente incluem planos de consulta detalhados que fornecem informações sobre a otimização do desempenho.
Para acessar REFRESH
instruções na interface do usuário do histórico de consultas, use as seguintes etapas:
- Clique na barra lateral esquerda para abrir a interface do usuário do Histórico de Consultas.
- Marque a caixa de seleção ATUALIZAR no filtro suspenso Instrução .
- Clique no nome da instrução de consulta para exibir detalhes de resumo, como a duração da consulta e 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 Origem da Consulta para abrir a consulta ou o pipeline relacionado.
Nota
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 CREATE MATERIALIZED VIEW.
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:
- Copie e cole o link mostrado na linha Atualização mais recente da tabela retornada pela
DESCRIBE EXTENDED
instrução. - Na guia linhagem para a exibição materializada, clique em Pipelines e, em seguida, clique no link pipeline.
Para comandos assíncronos REFRESH
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 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 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 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.
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:
- Na guia linhagem para a exibição materializada, clique em Pipelines e, em seguida, clique no link pipeline.
- Clique no 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 ou um usuário com o privilégio MANAGE
pode conceder o privilégio SELECT
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 podeSELECT
a visão materializada. -
REFRESH
- o usuário podeREFRESH
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 privilégios SELECT
em uma tabela base são revogados do proprietário da vista materializada ou de qualquer outro usuário que tenha recebido privilégios MANAGE
ou SELECT
na vista materializada, ou a tabela base é eliminada, o proprietário da vista materializada ou o usuário ao qual foi concedido acesso ainda pode consultar a vista 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?.
Limitações
- Para requisitos de computação e espaço de trabalho, consulte Requisitos.
- As visualizações materializadas não suportam colunas de identidade ou chaves substitutas.
- Se uma exibição materializada usa uma soma agregada em uma
NULL
coluna -able e apenasNULL
os valores permanecem nessa coluna, o valor agregado resultante das exibições materializadas é zero em vez deNULL
. - Não é possível ler um feed de dados de alteração a partir de uma exibição materializada.
- As consultas de viagem no tempo não são suportadas em vistas 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 agregadaCOUNT DISTINCT
, os arquivos subjacentes conterão uma lista dos valores reais defield_a
.