Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Esta página descreve como selecionar entre materializações agregadas e não agregadas para exibições de métrica com base em seus padrões de consulta. Para saber o que é cada tipo e como ele funciona, consulte Tipos de materializações para exibições de métrica.
Use a tabela a seguir para encontrar a abordagem certa para sua situação. As seções a seguir respondem a cada pergunta em detalhes.
| Sua situação | Approach |
|---|---|
| Você executa os mesmos padrões de consulta com frequência e sabe por quais dimensões você agrupa. | Materialização agregada |
Você consulta uma medida não aditiva, como COUNT(DISTINCT), em uma granularidade fixa. |
Materialização agregada com dimensões que correspondem às da consulta GROUP BY |
Você executa consultas ad hoc em dados unidos ou filtrados e não pode prever o GROUP BY. |
Materialização não agregada |
| Você tem dashboards previsíveis e consultas ad hoc na mesma visualização de métricas. | Ambos os tipos juntos |
| Sua exibição de métrica aponta para uma única tabela sem junções ou filtros. | Nenhum dos dois; usar materializações agregadas para padrões conhecidos ou ignorar a materialização |
Materializações agregadas
Uma materialização agregada é uma tabela de respostas pré-criada para um tipo específico de pergunta. Ele atende consultas correspondentes mais rapidamente retornando resultados pré-computados em vez de verificar dados de origem.
Os exemplos a seguir usam uma visualização métrica dos dados de vendas com os campos region, category e order_date, e as medidas total_revenue (SUM), order_count (COUNT) e unique_customers (COUNT(DISTINCT)).
Como posso acelerar uma consulta que executo com frequência?
Crie uma materialização agregada para isso. Uma consulta que você executa diariamente é uma boa candidata, pois a materialização retorna resultados pré-computados em vez de verificar os dados de origem. Por exemplo, suponha que você execute esta consulta todas as manhãs:
SELECT region, MEASURE(total_revenue) FROM sales_mv GROUP BY ALL
Se você costuma consultar region e order_date em conjunto, inclua os dois campos em uma materialização:
- name: revenue_by_region_date
type: aggregated
dimensions:
- region
- order_date
measures:
- total_revenue
- order_count
Materializar em uma granularidade mais fina (região e data em vez de apenas região) significa que qualquer consulta que agrupe apenas por region, apenas por order_date ou por ambos pode usar essa materialização. Incluir medidas aditivas, como order_count permite que a mesma materialização atenda consultas para essas medidas, para que você não precise criar uma separada para cada uma.
Como saber se uma materialização existente abrange 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 você agrupa, a consulta não poderá utilizá-la. Por exemplo, suponha que você queira receita por category, mas sua única materialização é o exemplo revenue_by_region_date mostrado anteriormente. Como não inclui category, as consultas agrupadas por category recorrem a uma materialização não agregada (se houver) ou às tabelas de origem.
Se você consultar com frequência por category, crie uma materialização separada para isso. Se a consulta for pouco frequente ou já for rápida o suficiente, não crie uma. Cada materialização adiciona custo de armazenamento e de atualização.
Como posso acelerar uma consulta com uma medida não aditiva?
Crie uma materialização agregada cujas dimensões correspondem exatamente às da GROUP BY consulta. Medidas não aditivas, como COUNT(DISTINCT), não podem ser agregadas em uma materialização em nível mais detalhado, portanto uma materialização em outro nível de granularidade não ajudará. Por exemplo, suponha que essa consulta seja 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, portanto, não pode atender a essa consulta. Crie uma materialização com dimensões que correspondam:
- 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. Ele executa o trabalho caro de unir tabelas e aplicar filtros uma vez, para que as consultas possam agregar a partir do resultado associado em vez de unir novamente as tabelas de origem em cada execução.
A agregação ainda acontece no momento da consulta, portanto, as materializações não agregadas não são tão rápidas quanto as agregadas. Eles são mais rápidos do que refazer a junção das tabelas brutas de origem a cada consulta.
Os exemplos a seguir usam uma exibição de 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
Qual tipo devo usar para padrões de consulta imprevisíveis?
Use uma materialização não agregada. Quando você executa consultas ad hoc constantemente e não consegue prever o GROUP BY, é difícil definir materializações agregadas que abrangem os campos certos. Uma materialização não agregada evita esse problema: materializa o conjunto de dados unido e filtrado uma vez e qualquer consulta pode usá-lo independentemente de sua forma.
materialized_views:
- name: baseline
type: unaggregated
Devo materializar uma única tabela sem junções?
Uma materialização não agregada em uma única tabela sem junções ou filtros duplica a tabela sem nenhum benefício. Use materializações agregadas para padrões de consulta conhecidos ou ignore totalmente a materialização.
Posso usar os dois tipos de materialização juntos?
Sim. Use uma materialização não agregada como fallback e materializações agregadas para suas consultas de alto tráfego já conhecidas. Esse padrão é adequado a uma visualização de métricas que tem junções custosas, juntamente com um painel de widgets conhecidos. A regravação de consultas prefere materializações agregadas (correspondência exata ou por acúmulo) quando possível e recorre às não agregadas para todos os demais 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, priorize primeiro suas consultas mais lentas ou com maior tráfego. Adicione mais materializações ao observar consultas voltando à origem. Para verificar se uma consulta usa uma materialização, consulte Verificar se uma consulta está usando exibições materializadas.