Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En esta página se describe cómo seleccionar entre materializaciones agregadas y no agregadas para las vistas de métricas en función de los patrones de consulta. Para saber qué es cada tipo y cómo funciona, consulte Tipos de materializaciones para vistas de métricas.
Use la tabla siguiente para encontrar el enfoque adecuado para su situación. Las secciones siguientes responden cada pregunta con detalle.
| Su situación | Approach |
|---|---|
| A menudo ejecutas los mismos patrones de consulta y sabes según qué dimensiones agrupas. | Materialización agregada |
Consulta una medida no aditiva, como COUNT(DISTINCT), con una granularidad fija. |
Materialización agregada con dimensiones que coinciden con las de la consulta GROUP BY |
Ejecuta consultas ad hoc sobre datos combinados o filtrados y no puede predecir el GROUP BY. |
Materialización no agregada |
| Tiene acceso tanto a cuadros de mando previsibles como a consultas ad hoc en la misma vista de métricas. | Ambos tipos juntos |
| La vista de métricas apunta a una sola tabla sin uniones ni filtros. | Tampoco; usar materializaciones agregadas para patrones conocidos o omitir la materialización |
Materializaciones agregadas
Una materialización agregada es una tabla de respuesta pregenerada para un tipo específico de pregunta. Sirve consultas coincidentes más rápido devolviendo resultados calculados previamente en lugar de examinar los datos de origen.
En los siguientes ejemplos se utiliza una vista métrica de los datos de ventas con los campos region, category y order_date, y las medidas total_revenue (SUM), order_count (COUNT) y unique_customers (COUNT(DISTINCT)).
¿Cómo puedo acelerar una consulta que ejecuto con frecuencia?
Cree una materialización agregada para ella. Una consulta que se ejecuta diariamente es un buen candidato, ya que la materialización devuelve resultados calculados previamente en lugar de examinar los datos de origen. Por ejemplo, supongamos que ejecuta esta consulta cada mañana:
SELECT region, MEASURE(total_revenue) FROM sales_mv GROUP BY ALL
Si consulta habitualmente region y order_date juntos, incluya ambos campos en una sola materialización:
- name: revenue_by_region_date
type: aggregated
dimensions:
- region
- order_date
measures:
- total_revenue
- order_count
Materializar con un nivel de detalle más fino (región y fecha, en lugar de solo región) significa que cualquier consulta agrupada solo por region, solo por order_date o por ambos puede usar esta materialización. Incluir medidas aditivas como order_count permite que la misma materialización dé servicio a consultas para esas medidas, por lo que no es necesario crear una materialización independiente para cada una.
¿Cómo sé si una materialización existente cubre una nueva consulta?
Compare las dimensiones de la consulta GROUP BY con las dimensiones de la materialización. Si la materialización no incluye una dimensión por la que agrupa, la consulta no puede usarla. Por ejemplo, supongamos que desea ingresos por category, pero la única materialización es el ejemplo de revenue_by_region_date mostrado anteriormente. Dado que no incluye category, las consultas agrupadas por category recurren a una materialización no agregada (si existe) o a las tablas de origen.
Si consulta por category con frecuencia, cree una materialización independiente para ello. Si la consulta es poco frecuente o ya es lo suficientemente rápida, no cree una. Cada materialización añade costes de almacenamiento y actualización.
¿Cómo puedo acelerar una consulta con una medida no aditiva?
Cree una materialización agregada cuyas dimensiones coincidan exactamente con la consulta GROUP BY . Las medidas no aditivas, como COUNT(DISTINCT), no se pueden agregar a partir de una materialización de grano más fino, por lo que una materialización con un grado de detalle distinto no ayudará. Por ejemplo, supongamos que esta consulta es lenta:
SELECT region, MEASURE(unique_customers) FROM sales_mv GROUP BY ALL
unique_customers utiliza COUNT(DISTINCT), que no es aditivo. La revenue_by_region_date materialización mostrada anteriormente tiene diferentes dimensiones, por lo que no puede servir esta consulta. Cree una materialización con dimensiones que coincidan con:
- name: customers_by_region
type: aggregated
dimensions:
- region
measures:
- unique_customers
Materializaciones sin agregar
Una materialización no agregada es un punto de partida pregenerado, no una respuesta pregenerada. Realiza el costoso trabajo de combinar tablas y aplicar filtros una vez, por lo que las consultas pueden agregarse a partir del resultado combinado en lugar de volver a unir las tablas de origen en cada ejecución.
La agregación sigue sucediendo en el momento de la consulta, por lo que las materializaciones no agregadas no son tan rápidas como las agregadas. Son más rápidas que volver a unir a partir de las tablas de origen sin procesar en cada consulta.
En los ejemplos siguientes se usa una vista de métrica que combina tres tablas y se aplica un 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
¿Qué tipo debo usar para patrones de consulta imprevisibles?
Use una materialización no agregada. Cuando ejecutas consultas ad hoc constantemente y no puedes predecir el GROUP BY, es difícil definir materializaciones agregadas que cubran los campos adecuados. Una materialización no agregada evita este problema: materializa una sola vez el conjunto de datos combinado y filtrado, y cualquier consulta puede utilizarlo independientemente de su estructura.
materialized_views:
- name: baseline
type: unaggregated
¿Debo materializar una sola tabla sin uniones?
Una materialización no agregada en una sola tabla sin uniones ni filtros duplica la tabla sin ningún beneficio. Use materializaciones agregadas para patrones de consulta conocidos o omita completamente la materialización.
¿Puedo usar ambos tipos de materialización juntos?
Yes. Use una materialización no agregada como reserva y materializaciones agregadas para las consultas conocidas de alto tráfico. Este patrón encaja con una vista de métricas que tiene uniones costosas, junto con un panel con widgets conocidos. La reescritura de consultas prefiere las materializaciones agregadas (coincidencia exacta o por consolidación) cuando es posible y, para todo lo demás, recurre a las no agregadas.
materialized_views:
- name: baseline
type: unaggregated
- name: revenue_by_region_date
type: aggregated
dimensions:
- region
- order_date
measures:
- total_revenue
Al crear materializaciones, priorice primero las consultas más lentas o con más tráfico. Agregue más materializaciones cuando observe que las consultas recurren a la fuente. Para comprobar si una consulta usa una materialización, consulte Comprobación de que una consulta usa vistas materializadas.