Materialização para exibições de métrica

Importante

Esse recurso está em Visualização Pública.

A materialização para visões métricas acelera as consultas usando visões materializadas para pré-computar agregações. Os pipelines do Lakeflow orquestram exibições materializadas definidas pelo usuário para uma determinada exibição de métrica. No momento da consulta, o otimizador de consulta roteia consultas para a melhor exibição materializada usando correspondência automática de consulta com reconhecimento agregado (reescrita de consulta). Você consulta a exibição de métrica como de costume, sem nenhum esforço manual adicional. O Databricks atualiza as materializações para mantê-las atualizadas. Ele também escolhe qual materialização consultar para consultas mais rápidas a um custo menor.

Como funciona a materialização

A materialização para exibições de métrica envolve duas fases: definir a materialização e executar consultas nela.

Fase de definição

Ao definir uma exibição de métrica com materialização, especifique seus campos, medidas e agendamento de atualização na exibição de métrica YAML. A partir dessa definição, o Databricks cria um pipeline gerenciado do Lakeflow que compila e mantém as exibições materializadas.

Definição de visualização de métrica e pipeline de materialização

Isso mantém a definição de métrica separada de como ela é armazenada:

  • A exibição de métrica é um objeto do Catálogo do Unity que define os campos, as medidas e as junções da métrica, juntamente com a configuração de materialização (agendamento e granularidade). É a única fonte de verdade para o que a métrica significa.
  • O pipeline materializa essa definição em uma ou mais visões materializadas, cada uma pré-calculada em um nível específico de granularidade. O Databricks escolhe qual deles ler no momento da consulta.

Execução da consulta

Quando você executa SELECT ... FROM <metric_view>, o otimizador de consulta usa a reescrita de consulta sensível a agregados para otimizar o desempenho:

Execução de consulta com reescrita com reconhecimento agregado

  • Caminho rápido: leituras de exibições materializadas pré-computadas quando existe uma materialização adequada.
  • Caminho alternativo: lê diretamente dos dados de origem quando nenhuma materialização adequada está disponível.

O otimizador de consulta equilibra automaticamente o desempenho e a atualização escolhendo entre dados materializados e de origem. Você recebe resultados de forma transparente, independentemente de qual caminho o otimizador usa. Para saber mais sobre como executar consultas em visualizações de métricas, consulte Consultar visualizações de métricas.

Requisitos

Para usar a materialização para exibições de métrica:

  • Seu workspace deve ter a computação sem servidor habilitada. Isso é necessário para executar pipelines do Lakeflow.
  • Um sql warehouse ou recurso de computação executando o Databricks Runtime 17.3 ou superior.

Note

A materialização requer o Databricks Runtime 17.3 ou superior. Há suporte para a criação de uma exibição de métrica sem materialização no Databricks Runtime 16.4 e superior. Para obter o tempo de execução mínimo para cada recurso, consulte a disponibilidade do recurso de exibição de métrica.

Referência de configuração

Você configura a materialização em um campo materialization de nível superior na definição YAML da visualização de métricas. Esse campo define a reescrita da consulta mode (sempre relaxed), uma atualização opcional schedule e uma lista de materialized_views a serem mantidos. Cada exibição materializada é aggregated, que calcula previamente dimensões e medidas específicas ou unaggregated, que materializa o modelo de dados completo.

Para obter a especificação completa campo a campo, incluindo campos obrigatórios e opcionais, valores permitidos e restrições de schedule cláusula, consulte Materialização.

Definição de exemplo

O exemplo a seguir define uma exibição de métrica com uma materialização não agregada e duas agregadas:

version: 1.1

source: prod.operations.orders_enriched_view

filter: revenue > 0

fields:
  - name: category
    expr: substring(category, 5)

  - name: color
    expr: color

measures:
  - name: total_revenue
    expr: SUM(revenue)

  - name: number_of_suppliers
    expr: COUNT(DISTINCT supplier_id)

materialization:
  schedule: every 6 hours
  mode: relaxed

  materialized_views:
    - name: baseline
      type: unaggregated

    - name: revenue_breakdown
      type: aggregated
      dimensions:
        - category
        - color
      measures:
        - total_revenue
      cluster_by:
        cols:
          - category
          - color
      partition_by:
        - category

    - name: suppliers_by_category
      type: aggregated
      dimensions:
        - category
      measures:
        - number_of_suppliers

Note

O bloco materialization usa a palavra-chave dimensions: para listar os campos a serem materializados, embora a definição de nível superior use fields:. As duas palavras-chave são equivalentes. Consulte Campos.

A materialização revenue_breakdown usa cluster_by e partition_by para controlar como os dados materializados são organizados fisicamente, da mesma forma que as cláusulas CLUSTER BY e PARTITION BY em uma exibição materializada. Para obter a especificação completa do campo, consulte Materialização.

Criar a exibição de métrica usando o SQL

Para criar essa exibição de métrica fora do Catalog Explorer, encapsule o YAML em CREATE OR REPLACE VIEW ... WITH METRICS LANGUAGE YAML AS e coloque a definição entre os delimitadores $$:

CREATE OR REPLACE VIEW catalog.schema.orders_materialized WITH METRICS LANGUAGE YAML AS
$$
  version: 1.1

  source: prod.operations.orders_enriched_view

  filter: revenue > 0

  dimensions:
    - name: category
      expr: substring(category, 5)

    - name: color
      expr: color

  measures:
    - name: total_revenue
      expr: SUM(revenue)

    - name: number_of_suppliers
      expr: COUNT(DISTINCT supplier_id)

  materialization:
    schedule: every 6 hours
    mode: relaxed

    materialized_views:
      - name: baseline
        type: unaggregated

      - name: revenue_breakdown
        type: aggregated
        dimensions:
          - category
          - color
        measures:
          - total_revenue

      - name: suppliers_by_category
        type: aggregated
        dimensions:
          - category
        measures:
          - number_of_suppliers
$$

Modo de reescrita de consulta

No modo relaxed, a reescrita automática de consulta apenas verifica se as visualizações materializadas candidatas contêm os campos e as medidas necessários para atender à consulta.

As seguintes verificações são ignoradas:

  • Atualidade: ele não verifica se a materialização está atualizada.
  • Configurações do SQL: ele não verifica se configurações como TIMEZONE ou ANSI_MODE correspondem.
  • Determinismo: ele não verifica se os resultados materializados são totalmente determinísticos.

As consultas que correspondem a uma materialização usam a última atualização. Consultas que não correspondem recorrem à fonte e retornam dados em tempo real. Como resultado, a atualização de dados pode variar dependendo se uma consulta se qualifica para reescrita. Para verificar a consistência, alinhe a programação de atualização da materialização com o pipeline de origem. Por exemplo, se sua fonte for atualizada diariamente com um pipeline em lotes, agende as atualizações da materialização para serem executadas após a conclusão desse pipeline. Como alternativa, use uma materialização não agregada para garantir que todas as consultas leiam do mesmo instantâneo.

Você não pode criar uma materialização quando a exibição de métrica ou qualquer uma de suas tabelas de origem usa:

  • segurança em nível de linha (RLS), mascaramento em nível de coluna (CLM) ou políticas ABAC. Os resultados pré-computados podem ignorar controles de acesso por usuário que devem ser impostos no momento da consulta.
  • Expressões dependentes do invocador, cujo resultado é alterado com base em quem executa a consulta (por exemplo, current_user() ou is_member()). Uma materialização é previamente computada uma vez e compartilhada, portanto, servi-la a um usuário diferente retornaria resultados incorretos ou inseguros.

O Databricks valida essa restrição quando você cria, altera ou atualiza uma materialização. Essas operações falham com a condição METRIC_VIEW_MATERIALIZATION_WITH_INVOKER_DEPENDENT_EXPRESSIONS_NOT_SUPPORTED de erro (SQLSTATE 42K0E). Veja METRIC_VIEW_MATERIALIZATION_WITH_INVOKER_DEPENDENT_EXPRESSIONS_NOT_SUPPORTED.

Tipos de materializações para exibições de métrica

As seções a seguir explicam os tipos de exibições materializadas disponíveis para exibições de métrica e fornecem diretrizes sobre como selecionar a configuração apropriada para suas fontes de dados e padrões de consulta.

Tipo agregado

Esse tipo calcula previamente agregações para combinações de medida e campo especificadas para cobertura direcionada.

Use um tipo agregado quando houver combinações de dimensão e medida específicas que são consultadas com frequência. Com as materializações agregadas, as estratégias de correspondência exata e cumulativa se aplicam, fornecendo o melhor desempenho de consulta para esses padrões.

Para agregações ideais:

  • Inclua as dimensões mais usadas em GROUP BY cláusulas.
  • Inclua todas as possíveis colunas de filtro (colunas usadas em WHERE no momento da consulta).
  • Materialize no nível de maior detalhamento necessário para as suas consultas. Por exemplo, uma materialização em (region, sku, event_day) pode atender a todas as opções a seguir:
    • GROUP BY region
    • GROUP BY region, event_month
    • GROUP BY sku com WHERE region = 'US'
  • Evite dimensões tão granulares a ponto de produzirem principalmente grupos com apenas uma linha (por exemplo, um registro de data e hora bruto com precisão de milissegundos). Isso não tem nenhum benefício e infla o armazenamento.
  • Fique atento a medidas não aditivas. Medidas não aditivas não podem ser reagregadas a partir de resultados parciais (por exemplo, COUNT(DISTINCT), MEDIAN e percentis) e exigem uma correspondência exata com uma materialização.

Uma única agregação só pode atender a consultas que correspondam exatamente às suas dimensões específicas (correspondência exata) ou a um subconjunto de suas dimensões (correspondência por rollup). O Databricks recomenda a criação de várias materializações agregadas para diferentes formas de consulta.

Tipo não agregado

Esse tipo materializa todo o modelo de dados não agregado (os campos source, joins, filter e fields) para oferecer cobertura mais ampla, com menor impacto no desempenho em comparação com o tipo agregado.

Use um tipo não agregado quando qualquer um dos seguintes valores for verdadeiro:

  • Sua exibição de métrica envolve transformações de origem caras ou junções.
  • Os padrões de consulta são imprevisíveis ou variados.
  • Todos os usuários que consultam a exibição de métrica devem ver consistência dentro dos dados.

Com materializações não agregadas, views de origem caras e junções são computadas uma vez durante a atualização, em vez de a cada consulta. Quando existem materializações agregadas e não agregadas, o Databricks calcula as materializações agregadas a partir da materialização não agregada. Isso fornece uma captura consistente e evita o recálculo desnecessário da fonte. Uma correspondência não agregada está sempre qualificada, independentemente da estrutura da consulta, sujeita às restrições descritas em Modo de reescrita de consulta.

Uma materialização não agregada não ajuda quando a origem é uma referência de tabela direta sem um filtro seletivo. Nesse caso, ele não tem nenhum benefício em consultar a origem diretamente.

Para obter orientações adicionais sobre como e quando usar esses tipos de materialização, consulte Escolher um tipo de materialização para exibições de métrica.

Reescrita de consulta automática

Quando você consulta uma visualização de métrica, a reescrita de consultas encaminha automaticamente sua consulta para a melhor materialização disponível. Utiliza três estratégias de reescrita de consulta: correspondência exata, correspondência por rollup e correspondência não agregada.

Reescrita de consulta com reconhecimento agregado

A consulta é executada automaticamente na melhor forma de materialização em vez de usar as tabelas base, utilizando este algoritmo:

  1. Primeiro, o otimizador de consulta tenta uma correspondência exata.
  2. Se não houver correspondência exata, o otimizador de consultas tentará encontrar uma correspondência por agregação.
  3. Se não houver correspondência de rollup e houver uma materialização não agregada, o otimizador de consulta tentará uma correspondência não agregada.
  4. Se não houver correspondência não agregada, a consulta lerá diretamente das tabelas de origem.

As seções a seguir explicam como cada estratégia funciona.

Estratégias de correspondência para reescrita de consulta

Note

As materializações devem ser concluídas antes que a reescrita de consulta possa entrar em vigor.

Correspondência exata

A consulta solicita exatamente o que foi previamente computado na materialização. A reescrita de consulta lê o resultado armazenado sem trabalho adicional, habilitando resultados rápidos.

Para se qualificar para a correspondência exata:

  • As expressões GROUP BY da consulta devem corresponder exatamente às dimensões da materialização.
  • As medidas da consulta devem ser um subconjunto das medidas de materialização.

Por exemplo, uma materialização tem dimensões [region, order_date] e mede [total_revenue, order_count]. Uma consulta que agrupa por region e order_date e solicita total_revenue é uma correspondência exata, pois as dimensões são as mesmas e a métrica foi pré-computada.

Correspondência de rollup

A consulta solicita um resumo em um nível mais amplo do que o pré-computado. O otimizador lê o resultado pré-computado e o agrega novamente até o nível que a consulta precisa.

Para se qualificar para a partida de rollup:

  • Granularidade mais ampla: A consulta agrupa por menos dimensões ou por uma granularidade de tempo mais ampla do que a materialização.
  • Todas as medidas são aditivas: cada medida que sua consulta solicita deve ser uma que possa ser recomputada corretamente combinando resultados parciais (por exemplo, SUM de SUMs ou MAX de MAXes). MEDIAN não pode ser acumulado porque depende da distribuição do grupo.
  • Todos os filtros participantes devem ser expressões determinísticas: se a consulta tiver uma WHERE cláusula, o filtro sempre deverá produzir o mesmo resultado para a mesma entrada. Por exemplo, WHERE region = 'US' é determinístico, mas expressões como rand() ou uuid() não são.

A correspondência cumulativa não é qualificada para medidas não aditivas, pois elas não podem ser agregadas corretamente de resultados parciais. Consulte as medidas aditivas.

Por exemplo, usando a mesma materialização com dimensões [region, order_date] e medidas [total_revenue, order_count], uma consulta que agrupa apenas region por e solicita total_revenue é uma correspondência de rollup. A consulta precisa de menos dimensões do que as que foram materializadas, de modo que o mecanismo agrega os totais diários em totais por região.

Medidas aditivas

Uma medida é aditiva se seu resultado agregado puder ser recalculado corretamente por meio de uma nova agregação a partir de materializações já agregadas. Este é o requisito fundamental para a correspondência de rollups.

Qualquer agregação usando DISTINCT (por exemplo, COUNT(DISTINCT), SUM(DISTINCT)) não é aditiva e não pode ser acumulada.

As seguintes funções são aditivas:

  • SUM
  • COUNT
  • MIN
  • MAX
  • BIT_AND
  • BIT_OR
  • BIT_XOR
  • BOOL_AND
  • BOOL_OR

Restrições adicionais se aplicam a medidas aditivas:

  • A definição da medida deve conter exatamente uma função de agregação. Uma medida cuja definição combina múltiplas agregações (por exemplo, sum(cost) + min(revenue)) não é elegível para correspondência de rollup.
  • Se a definição de medida incluir uma FILTER cláusula, ela deverá ser determinística.
  • A medida não pode ser uma medida de janela (por exemplo, uma comparação total de 7 dias ou ano a ano definida com um bloco de janela).

Correspondência não agregada

A consulta não corresponde a nenhuma agregação pré-computada, mas o trabalho de preparação caro (junções e filtros) já foi feito. A reescrita de consulta começa a partir do conjunto de dados preparado da materialização não agregada em vez de voltar para as tabelas de origem.

Se houver uma materialização não agregada, essa estratégia pode sempre ser usada como alternativa antes de acessar a fonte. Qualquer estrutura de consulta pode usá-la, sujeita às restrições descritas no modo de reescrita de consulta.

Por exemplo, sua consulta agrupa por category e solicita unique_customers, mas nenhuma materialização agregada inclui esses campos e medidas. No entanto, existe uma materialização não agregada com o conjunto de dados unido e filtrado pronto. O otimizador de consulta lê desse conjunto de dados preparado e executa GROUP BY category, COUNT(DISTINCT customer_id) no momento da consulta, em vez de fazer novamente a junção das tabelas brutas do zero.

Verificar se uma consulta está usando exibições materializadas

Há duas maneiras de verificar se uma consulta está usando uma exibição materializada:

  • Execute EXPLAIN EXTENDED em sua consulta para ver o plano de consulta. Se a materialização foi usada, o nó folha inclui __materialization_mat_<pipeline ID>___metric_view_mat_ e o nome da materialização do arquivo YAML.
  • Examine o perfil de consulta, conforme mostrado abaixo.

Perfil de consulta mostrando o uso da materialização

Ciclo de vida de materialização

Esta seção explica como as materializações são criadas, gerenciadas e atualizadas durante todo o ciclo de vida.

Criar e modificar

Quando você cria ou modifica uma exibição de métrica (usando CREATE, ALTERou Catalog Explorer), a definição da exibição de métrica é atualizada imediatamente. As exibições materializadas são atualizadas de forma assíncrona em segundo plano usando um pipeline gerenciado.

Para definir uma nova materialização no editor do Catalog Explorer:

  1. Clique em Materializações.
  2. Clique em Agendar para definir uma agenda. Você pode selecionar um período de intervalo ou definir a materialização a ser executada em um momento específico.
  3. Selecione um tipo. Somente uma materialização não agregada é permitida para cada visualização de métricas. Para obter mais informações, consulte Tipos de materializações para exibições de métrica.
  4. Use o menu suspenso Campos para selecionar os campos a serem incluídos na materialização.
  5. Use a lista suspensa Medidas para selecionar as medidas a serem incluídas.

Quando você cria uma visualização de métrica, o Databricks cria um pipeline do Lakeflow e agenda imediatamente uma atualização inicial, caso haja visualizações materializadas especificadas. A visualização de métricas permanece consultável sem materializações, retornando à consulta dos dados de origem.

Quando você modifica uma exibição de métrica, o Databricks não agenda novas atualizações, a menos que você esteja habilitando a materialização pela primeira vez. Visões materializadas não são usadas para reescrita automática de consultas até que a próxima atualização agendada seja concluída.

Alterar o agendamento de materialização não dispara uma atualização.

Sem um agendamento, o pipeline executa uma atualização inicial na criação, mas as atualizações subsequentes devem ser disparadas manualmente ou os dados ficarão obsoletos. O Databricks recomenda sempre definir um agendamento para que os dados permaneçam atualizados, a menos que você esteja testando ou protótipos.

Consulte Atualização Manual para um controle mais preciso sobre o comportamento de atualização.

Inspecionar o pipeline (canalização) subjacente

A materialização para visualizações de métricas é implementada usando pipelines do Lakeflow. Você pode acessar o pipeline de duas maneiras:

  • No Gerenciador de Catálogos: a guia Visão geral da exibição de métrica inclui um link direto no título Agendamento de Atualização . Para saber como acessar o Gerenciador de Catálogos, consulte o que é o Gerenciador de Catálogos?.
  • Usando o SQL: Executar DESCRIBE EXTENDED. A seção Atualizar Informações contém o link do pipeline e o status atual da atualização.
DESCRIBE EXTENDED my_metric_view;

Exemplo de saída:

-- Returns additional metadata such as parent schema, owner, access time etc.
> DESCRIBE EXTENDED my_metric_view;
                      col_name                       data_type    comment
 ------------------------------- ------------------------------ ----------
                           ...                             ...        ...

 # Detailed Table Information
                           ...                             ...

                      Language                            YAML
              Table properties                             ...
 # Refresh Information
         Latest Refresh Status                       Succeeded
                Latest Refresh                     https://...
              Refresh Schedule                   EVERY 6 HOURS

Atualização manual

A partir do link para a página do pipeline do Lakeflow, você pode iniciar manualmente uma atualização do pipeline para atualizar as materializações. Você também pode disparar uma atualização manual usando o seguinte comando SQL:

REFRESH MATERIALIZED VIEW <metric-view-name>

Atualização incremental

As exibições materializadas usam atualização incremental sempre que possível e têm as mesmas limitações que as exibições materializadas padrão em relação às fontes de dados e à estrutura do plano.

Para obter detalhes sobre pré-requisitos e restrições, consulte Atualização incremental para exibições materializadas.

Billing

A atualização de exibições materializadas incorre em encargos de uso de pipelines do Lakeflow. Para localizar o consumo de DBU do pipeline, consulte O que é o consumo de DBU de um pipeline sem servidor?.

Restrições conhecidas

As seguintes restrições se aplicam à materialização para visões métricas:

  • Você não pode materializar uma exibição de métrica que define parâmetros.
  • Depois que uma materialização é criada para uma visualização de métrica, você não pode alterar o proprietário.
  • O Databricks não oferece suporte à propriedade por grupo de visões de métricas materializadas.
  • Somente a estratégia de correspondência exata é compatível com visualizações de métricas com junções um-para-muitos.