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
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
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:
- Se você enviar o
REFRESH
comando no editor SQL, siga o link no painel Resultados . - Siga o link retornado pela
DESCRIBE EXTENDED
declaração. - Na guia linhagem para a exibição materializada, clique em Pipelines e, em seguida, clique no link pipeline.
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 Fluxos 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 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 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 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
NULL
coluna -able e apenasNULL
os valores permanecem nessa coluna, o valor agregado resultante das exibições materializadas é zero em vez deNULL
.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
.As visualizações materializadas do Databricks SQL não são suportadas nas regiões Centro-Sul dos EUA e Oeste dos EUA 2.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários