Usar a visualização materializada em Databricks SQL

Prévia

Esse recurso está em Prévia Pública.

Este artigo descreve como criar e usar a visualização materializada em Databricks SQL para melhorar o desempenho e reduzir o custo de suas cargas de trabalho de análise e processamento de dados.

O que são visualizações materializadas?

Em Databricks SQL, a visualização materializada é Unity Catalog gerenciar tabelas que permitem aos usuários pré-calcular resultados com base na versão mais recente dos dados nas tabelas de origem. A visualização materializada em Databricks difere de outras implementações, pois os resultados retornados refletem o estado dos dados quando a visualização materializada view foi atualizada pela última vez, em vez de sempre atualizar os resultados quando a visualização materializada view é consultada. O senhor pode acessar manualmente refresh materialized view ou programar a atualização.

A visualização materializada é poderosa para cargas de trabalho de processamento de dados, como o processamento de extração, transformação e carregamento (ETL). A visualização materializada oferece uma maneira simples e declarativa de processar dados para compliance, correções, agregações ou captura geral de dados de alterações (CDC) (CDC). A visualização materializada reduz o custo e melhora a latência da consulta ao pré-computar consultas lentas e cálculos usados com frequência. A visualização materializada também permite transformações fáceis de usar, limpando, enriquecendo e desnormalizando tabelas de base. A visualização materializada pode reduzir os custos e, ao mesmo tempo, proporcionar uma experiência simplificada ao usuário final, pois, em alguns casos, ela pode incrementar compute alterações nas tabelas de base.

A visualização materializada foi suportada pela primeira vez na Databricks Data Intelligence Platform com o lançamento do Delta Live Tables. Quando o senhor cria um view materializado em um depósito Databricks SQL, um Delta Live Tables pipeline é criado para processar a atualização do view materializado. O senhor pode monitorar o status das operações do refresh na interface do usuário Delta Live Tables, no Delta Live Tables API, ou no Delta Live Tables CLI. Consulte view o status de um materializado view refresh .

Requisitos

  • O senhor deve usar um armazém Databricks SQL habilitado para o Unity Catalog para criar e refresh materialized view.

Para saber mais sobre as restrições ao usar a visualização materializada com Databricks SQL, consulte Limitações.

Criar uma visualização materializada

Para criar um view materializado, use a instrução CREATE MATERIALIZED VIEW. Veja CREATE MATERIALIZED VIEW na referência Databricks SQL. Para enviar uma instrução de criação, use o editor SQL na interface do usuário do Databricks, a CLI do Databricks SQL ou a API do Databricks SQL.

Observação

O usuário que cria um view materializado é o proprietário do view materializado e precisa ter as seguintes permissões:

  • SELECT privilégio nas tabelas de base referenciadas pelo site materializado view.

  • USE CATALOG e USE SCHEMA privilégios no catálogo e no esquema que contêm as tabelas de origem para o materializado view.

  • USE CATALOG e USE SCHEMA privilégios no catálogo e esquema de destino para o materializado view.

  • CREATE TABLE e CREATE MATERIALIZED VIEW privilégios no esquema que contém o materializado view.

O exemplo a seguir cria o site materializado view mv1 a partir da tabela base base_table1:

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

Como as visualizações materializadas são criadas?

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

Carregar dados de sistemas externos

Databricks recomenda o carregamento de dados de uso externo lakehouse Federation para fontes de dados compatíveis. Para obter informações sobre o carregamento de dados de fontes não suportadas pela lakehouse Federation, consulte Opções de formato de dados.

Atualizar uma visão materializada

As operações REFRESH atualizam o site materializado view para refletir as últimas alterações na tabela base. Para refresh um view materializado, use a instrução REFRESH MATERIALIZED VIEW. Consulte REFRESH (MATERIALIZED VIEW e STREAMING TABLE ) na referência Databricks SQL. Para enviar uma declaração refresh, use o editorSQL na interface do usuário Databricks, o Databricks SQL CLIou o Databricks SQL API.

Somente o proprietário pode REFRESH o materializado view.

O exemplo a seguir atualiza o mv1 materializado view:

REFRESH MATERIALIZED VIEW mv1;

Como a visualização materializada Databricks SQL é atualizada?

A visualização materializada cria e usa automaticamente o pipeline Delta Live Tables para processar refresh operações. Como o refresh é gerenciado por um Delta Live Tables pipeline, o depósito Databricks SQL usado para criar o view materializado não é usado e não precisa estar em execução durante as refresh operações.

Delta Live Tables O pipeline usa um modo de execução contínuo ou acionado. A visualização materializada pode ser atualizada em qualquer modo de execução. Para evitar processamento desnecessário ao operar no modo de execução contínua, o pipeline monitora automaticamente as tabelas dependentes do Delta e executa uma atualização somente quando o conteúdo dessas tabelas dependentes é alterado. Consulte O que é um pipeline Delta Live Tables?

Observação

O tempo de execução do Delta Live Tables não consegue detectar alterações em fontes de dados que não sejamDelta. A tabela ainda é atualizada regularmente, mas com um intervalo de acionamento default mais alto para evitar que a recomputação excessiva diminua a velocidade de qualquer processamento incremental que esteja ocorrendo em compute.

Em default, refresh operações são realizadas de forma síncrona. O senhor também pode definir uma refresh operação para ocorrer de forma assíncrona. O comportamento associado a cada abordagem é o seguinte:

  • Síncrono: Um refresh síncrono bloqueia outras operações até que a refresh operação seja concluída. Isso permite que o senhor sequencie refresh operações em uma ferramenta de orquestração, como o fluxo de trabalho. Para orquestrar a visualização materializada com fluxo de trabalho, use o tipo SQL tipo tarefa. Consulte Introdução ao site Databricks Workflows.

  • Assíncrono: Um refresh assíncrono começa um Job em segundo plano no Delta Live Tables compute quando um view refresh materializado começa, e o comando retorna antes que a carga de dados seja concluída. Como o Delta Live Tables pipeline gerencia o refresh, o depósito Databricks SQL usado para criar o view materializado não é usado. Não é necessário que ele esteja em execução durante as refresh operações.

Algumas consultas podem ser atualizadas de forma incremental. Consulte refresh operações for materialized view. Se não for possível executar um refresh incremental, será executado um refresh completo.

programar materializado view refresh

O senhor pode configurar uma Databricks SQL materializada view para refresh automaticamente com base em um programa definido. Configure esse programar com a cláusula SCHEDULE quando o senhor criar o site viewmaterializado ou adicionar um programar com a instrução ALTER VIEW declaração. Quando um programar é criado, um novo Databricks Job é automaticamente configurado para processar a atualização. O senhor pode view o programa a qualquer momento com a instrução DESCRIBE EXTENDED.

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

Para atualizar a definição de um site materializado view, o senhor deve primeiro descartar e depois recriar o site materializado view.

Soltar uma visualização materializada

Observação

Para enviar o comando para eliminar um view materializado, o senhor deve ser o proprietário desse view materializado.

Para eliminar uma visualização materializada, use a instrução DROP VIEW. Para enviar uma instrução DROP, o senhor pode usar o editor SQL na interface do usuário do Databricks, a CLI do Databricks SQL ou a API do Databricks SQL. O exemplo a seguir elimina o mv1 materializado view:

DROP MATERIALIZED VIEW mv1;

Descrever uma visualização materializada

Para recuperar as colunas e os tipos de dados de um site materializado view, 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 refresh de um site materializado view, use DESCRIBE EXTENDED. Para enviar uma instrução DESCRIBE, use o editor SQL na interface do usuário do Databricks, a CLI do Databricks SQL ou a API do Databricks SQL.

view O status de um site materializado view refresh

Observação

Como um Delta Live Tables pipeline gerenciar materializado view refresh, há uma latência incorrida pelo startup tempo para o pipeline. Esse tempo pode ser de segundos a minutos, além do tempo necessário para executar o refresh.

O senhor pode view o status de um materializado view refresh visualizando o pipeline que gerenciar o materializado view na interface do usuário Delta Live Tables ou visualizando as informaçõesrefresh retornadas pelo comando DESCRIBE EXTENDED para o materializado view.

O senhor também pode view a refresh história de uma view materializada consultando o evento Delta Live Tables log. Consulte view a refresh história para uma viewmaterializada.

Visualize o status de atualização na UI do Delta Live Tables

Por default, o Delta Live Tables pipeline que gerencia um view materializado não é visível na interface do usuário Delta Live Tables. Para view o pipeline na interface do usuário Delta Live Tables, o senhor deve acessar diretamente o link para a página de detalhes pipeline 'spipeline. Para acessar o link:

  • Se o senhor enviar o comando REFRESH no editor SQL, siga o link no painel Resultados.

  • Siga o link retornado pela instrução DESCRIBE EXTENDED.

  • Na linhagem tab para o view materializado, clique em pipeline e, em seguida, no link pipeline.

Interromper uma atualização ativa

Para interromper um refresh ativo na interface do usuário do Delta Live Tables, na página de detalhes dopipeline , clique em Stop (Parar ) para interromper a atualização do pipeline. O senhor também pode interromper o refresh com o comando Databricks CLI ou o POST /api/2.0/pipeline/{pipeline}/stop operações em andamento API.

Alterar o proprietário de uma visão materializada

O senhor pode alterar o proprietário de um view materializado se for um administrador do metastore e um administrador do workspace. A visualização materializada cria e usa automaticamente o pipeline Delta Live Tables para processar alterações. Use os seguintes passos para alterar o proprietário de uma visualização materializada:

  • Clique em Ícone de empregos fluxo de trabalho e, em seguida, clique no botão Delta Live Tables tab.

  • Clique no nome do pipeline cujo proprietário o senhor deseja alterar.

  • Clique no menu Menu Kebab kebab à direita do nome do pipeline e clique em Permissions (Permissões). Isso abre 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 deve ser o novo proprietário do pipeline.

  • Clique em Save para salvar as alterações e fechar a caixa de diálogo.

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

Controle o acesso à visualização materializada

As visualizações materializadas oferecem suporte a controles de acesso avançados para o compartilhamento de dados, evitando a exposição de dados potencialmente privados. Um proprietário de view materializado pode conceder SELECT privilégios a outros usuários. Os usuários com acesso SELECT ao site materializado view não precisam de acesso SELECT às tabelas referenciadas pelo site materializado view. Esse controle de acesso permite o compartilhamento de dados e, ao mesmo tempo, controla o acesso aos dados subjacentes.

Conceder privilégios a uma visão materializada

Para conceder acesso a um site materializado view, use a instrução GRANT:

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

O privilege_type pode ser:

  • SELECT - O usuário pode SELECT o materializado view.

  • REFRESH - O usuário pode REFRESH o materializado view. As atualizações são executadas usando as permissões do proprietário.

O exemplo a seguir cria um site materializado view e concede privilégios 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;

Revogar privilégios de uma visualização materializada

Para revogar o acesso de um site materializado view, use a instrução REVOKE:

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

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

  • O proprietário do view materializado ou outras pessoas que perderam o acesso a um view materializado não podem mais REFRESH esse view materializado, e o view materializado se tornará obsoleto.

  • Se automatizado com um programar, o próximo REFRESH programado falha ou não é executado.

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

REVOKE SELECT ON mv1 FROM user1;

Ativar feed de dados de alteração

É necessário alterar o feed de dados nas tabelas de base da visualização materializada, exceto em determinados casos de uso avançado. Para ativar o feed de dados de alteração em uma tabela base, defina a propriedade delta.enableChangeDataFeed table usando a seguinte sintaxe:

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

view O refresh história para um senhor materializado view

Para view o status de REFRESH operações em um view materializado, incluindo a atualização atual e passada, consulte o evento Delta Live Tables log:

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 do site materializado view, incluindo o catálogo e o esquema.

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

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

Para otimizar o desempenho da atualização materializada do view, o Databricks usa um modelo de custo para selecionar a técnica usada para o refresh. A tabela a seguir descreve essas técnicas:

Técnica

Incremental refresh?

Descrição

FULL_RECOMPUTE

Não

O site view materializado foi totalmente recalculado

NO_OP

Não se aplica

O site materializado view não foi atualizado porque não foram detectadas alterações na tabela base.

ROW_BASED ou PARTITION_OVERWRITE

Sim

O site materializado view foi atualizado de forma incremental usando a técnica especificada.

Para determinar a técnica usada, consulte o evento Delta Live Tables log 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 do site materializado view, incluindo o catálogo e o esquema.

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

Limitações

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

    • Databricks SQL A visualização materializada só pode ser criada e atualizada no armazém pro SQL e no armazém serverless SQL .

    • Um Databricks SQL materializado view só pode ser atualizado a partir do workspace que o criou.

    • O proprietário de um Databricks SQL materializado view pode consultar o view materializado de um modo de acesso de usuário único cluster. Caso contrário, a visualização materializada Databricks SQL poderá ser consultada somente em Databricks SQL warehouses, Delta Live Tables e clusters compartilhado com Databricks Runtime 11.3 ou superior.

  • A visualização materializada não oferece suporte a colunas de identidade ou chave substituta.

  • Se uma visualização materializada view usar um agregado de soma em uma coluna NULL-able e apenas NULL valores permanecerem nessa coluna, o valor agregado resultante da visualização materializada será zero em vez de NULL.

  • O senhor não pode ler um feed de dados de alteração em um site materializado view.

  • Os arquivos subjacentes que dão suporte à visualização materializada podem incluir dados de tabelas upstream (incluindo possíveis informações de identificação pessoal) que não aparecem na definição da view materializada. Esses dados são adicionados automaticamente ao armazenamento subjacente para dar suporte à atualização incremental da visualização materializada. Como os arquivos subjacentes de um view materializado podem expor dados de tabelas upstream que não fazem parte do esquema view materializado, o site Databricks recomenda não compartilhar o armazenamento subjacente com consumidores downstream não confiáveis. Por exemplo, suponha que a definição de um view materializado inclua uma cláusula COUNT(DISTINCT field_a). Embora a definição do view materializado inclua apenas a cláusula aggregate COUNT DISTINCT, os arquivos subjacentes conterão uma lista dos valores reais de field_a.