Utilizar objetos materializados views no Databricks SQL
Este artigo descreve como criar e usar views materializados no Databricks SQL para melhorar o desempenho e reduzir o custo de suas cargas de trabalho de processamento e análise de dados.
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.
Importante
Os views materializados que são criados no Databricks SQL são suportados 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 materializados views?
No Databricks SQL, os views materializados são tables gerenciados pelo Unity Catalog que permitem aos usuários pré-calcular resultados com base na versão mais recente dos dados na tablesde origem. Os views materializados no Azure Databricks diferem de outras implementações, pois os resultados retornados refletem o estado dos dados quando o modo de exibição materializado foi atualizado pela última vez, em vez de sempre atualizar os resultados quando o modo de exibição materializado é consultado. Você pode refresh manualmente views materializados ou agendar atualizações.
Os views materializados são poderosos para cargas de trabalho de processamento de dados, como processamento de extração, transformação e carga (ETL). Os views materializados fornecem uma maneira simples e declarativa de processar dados para conformidade, correções, agregações ou captura geral de dados de alteração (CDC). Materializadas views para reduzir custos e melhorar a latência de consultas através da pré-computação de consultas lentas e cálculos usados com frequência. Os views materializados também possibilitam transformações fáceis de usar, permitindo a limpeza, enriquecimento e desnormalização do tablesde base. O views materializado pode reduzir custos enquanto fornece uma experiência simplificada ao usuário final porque, em alguns casos, eles podem calcular incrementalmente as alterações a partir do tablesbase.
Os views materializados foram suportados 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 refresh na interface do usuário do Delta Live Tables ou nos pipelines API. Veja para ver o estado de uma vista materializada refresh.
Requerimentos
Para criar ou refresh materializar views:
Você deve usar um Unity Catalog-enabled pro ou um SQL warehouse sem servidor.
Para refresh uma vista materializada, tem de 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 dados materializados views:
- 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 do 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 ao uso de viewsmaterializado, 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 é automaticamente criado para cada vista materializada do Databricks SQL. Quando a visualização materializada é atualizada o pipeline Delta Live Tables processa o refresh.
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 na base tables referenciado pela visão materializada. -
USE CATALOG
eUSE SCHEMA
privilégios no catalog e schema contendo a fonte tables para a visão materializada. -
USE CATALOG
eUSE SCHEMA
privilégios no catalog de destino e schema para a visão materializada. -
CREATE TABLE
eCREATE MATERIALIZED VIEW
privilégios no schema que contém a visão materializada.
O exemplo a seguir cria a visão materializada mv1
a partir da base tablebase_table1
.
CREATE MATERIALIZED VIEW mv1
AS SELECT
date,
sum(sales) AS sum_of_sales
FROM
base_table1
GROUP BY
date;
Column comentários em uma base de dados table são automaticamente propagados para a nova vista materializada. Para adicionar uma agenda, restrições de table ou outras propriedades, modifique a definição de exibição materializada. Para saber os detalhes da sintaxe para definir uma exibição materializada, consulte CREATE MATERIALIZED VIEW.
Set o canal de tempo de execução
Os views materializados criados usando armazéns SQL são atualizados automaticamente usando um pipeline Delta Live Tables. Os pipelines Delta Live Tables usam o tempo de execução no canal current
por padrão. Consulte as notas de versão do Delta Live Tables e o processo de atualização da versão para entender 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 set um pipeline para o canal de visualização Delta Live Tables para testar novos recursos ao especificar preview
como uma propriedade table. Você pode especificar essa propriedade ao criar o table ou depois que o table for criado usando uma instrução ALTER.
O exemplo de código a seguir mostra como set o canal para visualizar 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.
Refresh uma visão materializada
A operação REFRESH
atualiza a vista materializada para refletir as últimas alterações na base table. A operação é síncrona por padrão, o que significa que o comando bloqueia até que a operação refresh seja concluída. Para refresh uma visão materializada, use o comando REFRESH MATERIALIZED VIEW
. Consulte REFRESH (MATERIALIZED VIEW ou STREAMING TABLE) para obter detalhes sobre a sintaxe SQL e parameters para este comando. Para saber mais sobre os tipos de views materializados que podem ser atualizados incrementalmente, consulte Incremental refresh para viewsmaterializados.
Para enviar uma instrução refresh, use o editor SQL na interface do usuário do Azure Databricks, um bloco de anotações anexado a um depósito SQL, o Databricks SQL CLIou o Databricks SQL API.
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 o Databricks SQL é materializado views atualizado?
Materializa views que cria e utiliza automaticamente pipelines sem servidor Delta Live Tables para processar operações refresh. O refresh é gerenciado pelo pipeline Delta Live Tables e o update é monitorado pelo armazém SQL Databricks usado para criar a exibição materializada. Os views materializados podem ser atualizados usando um pipeline Delta Live Tables que é executado em um cronograma. 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. O table ainda é atualizado 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 refresh são realizadas sincronamente. Você também pode set uma operação refresh ocorrer de forma assíncrona. Isso pode ser set usando o comando refresh. Ver REFRESH (MATERIALIZED VIEW ou STREAMING TABLE) O comportamento associado a cada abordagem é o seguinte:
-
síncrono: uma operação refresh síncrona impede que outras operações prossigam até que a refresh esteja concluída. Se o resultado for necessário para a próxima etapa, como quando se sequenciam operações de refresh em ferramentas de orquestração como Databricks Jobs, use um refreshsíncrono. Para orquestrar as materializações de
com um trabalho, use o tipo de tarefa do SQL . Consulte Programar e orquestrar fluxos de trabalho. - Assíncrono: Um refresh assíncrono inicia um trabalho em segundo plano no Delta Live Tables quando uma vista materializada refresh começa, permitindo que o comando seja retornado antes que a carga de dados seja concluída. Esse tipo de refresh pode reduzir custos porque a operação não necessariamente mantém a capacidade de computação no depósito where quando o comando é iniciado. Se o refresh ficar ocioso e nenhuma outra tarefa estiver em execução, o armazém poderá ser desligado enquanto o refresh usa outros recursos computacionais disponíveis. 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 refresh incremental para viewsmaterializada. Se não for possível executar uma refresh incremental, será executada uma refresh completa.
Agendar atualizações de exibição materializadas
Você pode configurar uma exibição materializada do Databricks SQL para refresh automaticamente com base em uma agenda definida. Para set fazer um agendamento, 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, uma nova tarefa do Databricks é configurada automaticamente para processar o update.
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. - Utilize o Catalog Explorer para visualizar a vista materializada. O horário está listado na aba Visão Geral, em Refresh status. Consulte O que é Catalog Explorer?.
Ver o estado de uma vista materializada refresh
Nota
Como um pipeline Delta Live Tables gerencia a atualização de vistas materializadas, há uma latência resultante do tempo de inicialização do pipeline. Esse tempo pode ser de segundos a minutos, além do tempo necessário para realizar o refresh.
Você pode visualizar o status de uma vista materializada
Você também pode exibir o histórico de refresh de uma exibição materializada consultando o log de eventos do Delta Live Tables. Consulte Exibir o histórico de refresh para obter uma exibição 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 streaming table. 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 declarações relacionadas ao views materializado aparecem no histórico de consultas. Você pode usar o filtro suspenso Statement para select qualquer comando e inspecionar as consultas relacionadas. Todas as instruções CREATE
são seguidas de uma instrução REFRESH
que se executa de forma assíncrona num 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.
- Select a caixa de seleção REFRESH do filtro suspenso Statement.
- 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 Set o canal de execução em tempo real.
Consulte CREATE MATERIALIZED VIEW.
Exibir o status do refresh 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 é visível na interface do usuário do Delta Live Tables. Para visualizar o pipeline na interface Delta Live Tables, é necessário acessar diretamente o link para a página de detalhes do Pipeline. Para acessar o link:
- Copie e cole o link mostrado na linha Refresh mais recente do table retornado pela instrução
DESCRIBE EXTENDED
. - Na guia linhagem para a exibição materializada, clique em Pipelines e, em seguida, clique no link pipeline.
Para comandos REFRESH
assíncronos enviados usando o editor SQL na interface do usuário do Azure Databricks, você pode exibir o status do refresh seguindo o link mostrado no painel de Resultados .
Parar um refresh em funcionamento
Para interromper um
Update a definição de uma visão materializada
Para update a definição de uma visão materializada, você deve primeiro soltar e, em seguida, recriar a visão 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 eliminar uma visã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 os columns e os tipos de dados para uma exibição materializada, use a instrução DESCRIBE
. Para recuperar os columns, tipos de dados e metadados, como proprietário, local, hora de criação e status refresh para 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 visualização materializada se for tanto um administrador de metastore quanto um administrador de espaço de trabalho. As visualizações materializadas views criam e usam automaticamente os pipelines Delta Live Tables para processar alterações. Use as seguintes etapas para alterar um proprietário materializado identificado por views:
- 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 remove o proprietário atual.
- Comece a digitar para filtrar o list de utilizadores 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 gasoduto, incluindo os views materializados definidos no gasoduto, são de propriedade do novo proprietário do gasoduto. Todas as atualizações futuras são executadas usando a identidade do novo proprietário.
Controlar o acesso aos views materializados
Os views materializados 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 grantSELECT
privilégios a outros usuários. Utilizadores com acesso SELECT
à vista materializada não necessitam de acesso SELECT
ao tables referenciado na vista materializada. Esse controle de acesso permite o compartilhamento de dados enquanto controla o acesso aos dados subjacentes.
Grant privilégios para uma visão materializada
Para grant aceder a uma vista materializada, use a instrução GRANT
.
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 select e refresh 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;
Revoke privilégios de uma visão materializada
Para aceder a revoke a partir de uma visão materializada, use a instrução REVOKE
.
REVOKE
privilege_type [, privilege_type ]
ON <name> FROM principal;
Quando os privilégios SELECT
numa base table são revogados do proprietário da vista materializada ou de qualquer outro utilizador que tenha recebido privilégios MANAGE
ou SELECT
sobre a vista materializada, ou se a base table for eliminada, o proprietário da vista materializada ou o utilizador com acesso concedido ainda podem 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
O feed de dados de alteração é necessário no tablesbase de views materializado, exceto para certos casos de uso avançados. Para ativar o feed de dados de alteração em uma tablebase, set a propriedade delta.enableChangeDataFeed
table usando a seguinte sintaxe:
ALTER TABLE table1 SET TBLPROPERTIES (delta.enableChangeDataFeed = true);
Ver o histórico de refresh para uma visão materializada
Para exibir o status das operações de 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 visão materializada, incluindo o catalog e schema.
Veja O que é o log de eventos do Delta Live Tables?.
Limitações
- Para requisitos de computação e espaço de trabalho, consulte Requisitos.
- Os views materializados não suportam chaves de identidade columns ou chaves substitutas.
- Se uma visão materializada utiliza uma soma agregada sobre um column que é agregável por
NULL
e apenasNULL
values permanecem nesse column, o valor agregado materializado do views resultante é 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 viewsmaterializada.
- Os arquivos subjacentes que suportam views materializados podem incluir dados de tables 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 viewsmaterializados. Como os arquivos subjacentes de uma exibição materializada podem expor dados de upstream tables que não fazem parte da exibição materializada schema, a Databricks recomenda não compartilhar o armazenamento subjacente com consumidores a jusante 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 da vista materializada inclua apenas a cláusula agregadaCOUNT DISTINCT
, os arquivos subjacentes conterão um list do values real defield_a
.