Escolha um tipo de materialização para vistas métricas

Esta página descreve como selecionar entre materializações agregadas e não agregadas para visualizações métricas com base nos seus padrões de consulta. Para saber o que é cada tipo e como funciona, veja Tipos de materializações para vistas métricas.

Use a tabela seguinte para encontrar a abordagem certa para a sua situação. As secções que se seguem respondem a cada pergunta em detalhe.

A sua situação Approach
Executas frequentemente os mesmos padrões de consulta e sabes por que dimensões agrupas. Materialização agregada
Consulta uma medida não aditiva, como COUNT(DISTINCT), com uma granularidade fixa. Materialização agregada com dimensões que correspondem às da consulta GROUP BY
Executas consultas ad hoc sobre dados unidos ou filtrados e não consegues prever o GROUP BY. Materialização não agregada
Tem tanto dashboards previsíveis como consultas ad hoc na mesma vista métrica. Ambos os tipos juntos
A sua visualização de métricas aponta para uma única tabela, sem junções nem filtros. Nenhum dos dois; usar materializações agregadas para padrões conhecidos, ou saltar a materialização

Materializações agregadas

Uma materialização agregada é uma tabela de respostas pré-construída para um tipo específico de pergunta. Serve as consultas correspondentes de forma mais rápida ao devolver resultados pré-computados em vez de escanear os dados de origem.

Os exemplos seguintes utilizam uma vista métrica sobre dados de vendas com os campos region, , e category, e as medidas order_date (total_revenue), SUM (order_count), e COUNT (unique_customersCOUNT(DISTINCT)).

Como é que acelero uma consulta que executo frequentemente?

Crie uma materialização agregada para tal. Uma consulta que executas diariamente é um bom candidato, porque a materialização devolve resultados pré-calculados em vez de analisar os dados de origem. Por exemplo, suponha que executa esta consulta todas as manhãs:

SELECT region, MEASURE(total_revenue) FROM sales_mv GROUP BY ALL

Se costumas consultar region e order_date em conjunto, inclui ambos os campos numa única materialização:

- name: revenue_by_region_date
  type: aggregated
  dimensions:
    - region
    - order_date
  measures:
    - total_revenue
    - order_count

A materialização a um nível de granularidade mais fino (região e data, em vez de apenas região) significa que qualquer consulta agrupada por region separadamente, order_date separadamente ou por ambos pode utilizar esta materialização. Incluir medidas aditivas como order_count permite que a mesma materialização sirva consultas para essas medidas, por isso não precisa de criar uma separada para cada uma.

Como sei se uma materialização existente cobre uma nova consulta?

Compare as dimensões da consulta GROUP BY com as dimensões da materialização. Se a materialização não incluir uma dimensão pela qual agrupas, a consulta não pode usá-la. Por exemplo, suponha que pretende obter a receita por category, mas a única materialização de que dispõe é o exemplo revenue_by_region_date mostrado anteriormente. Como não inclui category, as consultas que agrupam por category recorrem a uma materialização não agregada (se existir) ou às tabelas de origem.

Se fizeres consultas por category frequentemente, cria uma materialização separada para esse efeito. Se a consulta for pouco frequente ou já rápida o suficiente, não crie uma. Cada materialização acrescenta custos de armazenamento e renovação.

Como é que acelero uma consulta com uma medida não aditiva?

Crie uma materialização agregada cujas dimensões correspondam exatamente às da GROUP BY consulta. Medidas não aditivas, como COUNT(DISTINCT), não podem ser agregadas a partir de uma materialização com maior granularidade, pelo que uma materialização a um nível de granularidade diferente não será útil. Por exemplo, suponha que esta consulta é lenta:

SELECT region, MEASURE(unique_customers) FROM sales_mv GROUP BY ALL

unique_customers usa COUNT(DISTINCT), que é não aditivo. A revenue_by_region_date materialização mostrada anteriormente tem dimensões diferentes, por isso não pode servir esta consulta. Crie uma materialização com dimensões que coincidam:

- name: customers_by_region
  type: aggregated
  dimensions:
    - region
  measures:
    - unique_customers

Materializações não agregadas

Uma materialização não agregada é um ponto de partida pré-construído, não uma resposta pré-construída. Realiza o trabalho dispendioso de juntar tabelas e aplicar filtros uma vez, permitindo que as consultas se agreguem a partir do resultado unido em vez de voltarem a juntar as tabelas de origem em cada execução.

A agregação ainda acontece no momento da consulta, por isso as materializações não agregadas não são tão rápidas como as agregadas. São mais rápidas do que voltar a fazer junções a partir das tabelas de origem em bruto a cada consulta.

Os exemplos seguintes utilizam uma vista métrica que une três tabelas e aplica um filtro:

source: raw_events
filter: event_type = 'purchase'
joins:
  - name: customers
    source: dim_customers
    on: customers.id = source.customer_id
  - name: products
    source: dim_products
    on: products.id = source.product_id

Que tipo devo usar para padrões de consulta imprevisíveis?

Use uma materialização não agregada. Quando executas consultas ad hoc constantemente e não consegues prever o GROUP BY, é difícil definir materializações agregadas que cubram os campos certos. Uma materialização não agregada evita este problema: materializa o conjunto de dados integrado e filtrado uma vez, e qualquer consulta pode usá-lo independentemente da sua forma.

materialized_views:
  - name: baseline
    type: unaggregated

Devo materializar uma única tabela sem junções?

Uma materialização não agregada numa só tabela, sem junções nem filtros, duplica a tabela sem qualquer benefício. Use materializações agregadas para padrões de consulta conhecidos, ou ignore completamente a materialização.

Posso usar ambos os tipos de materialização em conjunto?

Yes. Utilize uma materialização não agregada como alternativa e materializações agregadas para as suas consultas conhecidas com tráfego elevado. Este padrão encaixa-se numa vista métrica que tem junções dispendiosas, juntamente com um painel de widgets conhecidos. A reescrita de consultas prefere materializações agregadas (correspondências exatas ou de rollup) sempre que possível e recorre a materializações não agregadas nos restantes casos.

materialized_views:
  - name: baseline
    type: unaggregated
  - name: revenue_by_region_date
    type: aggregated
    dimensions:
      - region
      - order_date
    measures:
      - total_revenue

Ao criar materializações, dê prioridade primeiro às suas consultas mais lentas ou com mais tráfego. Adicione mais materializações quando observar que as consultas regressam à origem. Para verificar se uma consulta utiliza uma materialização, veja Verificar se uma consulta está a usar vistas materializadas.