Analítica en tiempo realData warehousingObservabilidadIA/MLCloudOss
Requisitos previos
- A running ClickHouse Cloud service. If you don’t have one yet, complete the Create your first Cloud service quickstart first.
uk_price_paid y en los conceptos que se introducen allí:
Lo que crearás
uk_price_paid por town o county requiere un escaneo completo de la tabla porque está ordenada por (postcode, addr1, addr2).
En esta guía de inicio rápido resolverás ese problema creando una proyección: una representación ordenada adicional de tus datos almacenada dentro de la misma tabla. A diferencia de las vistas materializadas, las proyecciones no requieren una tabla de destino independiente, se mantienen sincronizadas con las mutaciones (eliminaciones y actualizaciones) y el optimizador de consultas las usa de forma transparente; sigues consultando la misma tabla.
Al final, entenderás cómo añadir y materializar una proyección, cómo ClickHouse la selecciona automáticamente y cuándo elegir proyecciones en lugar de vistas materializadas.
Entiende por qué necesitas una proyección
Tu tablauk_price_paid está ordenada por (postcode, addr1, addr2). Esto significa que ClickHouse puede omitir grandes bloques de datos cuando filtras por postcode, addr1 o addr2, pero las consultas que filtran por town deben escanear cada una de las filas: los 30 millones.Una proyección almacena una copia adicional ordenada de (algunas o todas las) columnas dentro de la misma tabla. Cuando consultas la tabla, el optimizador de consultas comprueba automáticamente si leer desde la proyección implicaría menos gránulos que los datos base y, si es así, la utiliza de forma transparente.Diferencias clave con las vistas materializadas:- Sin tabla independiente: la proyección reside dentro de
uk_price_paid - Optimización transparente de consultas: consultas
uk_price_paidcon normalidad; ClickHouse elige la proyección automáticamente - Se mantiene sincronizada con las mutaciones: las eliminaciones y actualizaciones aplicadas a la tabla se reflejan en la proyección
Agrega una proyección a tu tabla
Define una proyección sobreuk_price_paid que almacene town, date, price y type, ordenados por (town, date):PROJECTION uk_price_paid_by_town en la salida.Materializar la proyección para los datos existentes
Al igual que las vistas materializadas, una proyección recién añadida solo se aplica a las inserciones futuras. Para rellenarla con los 30 millones de filas que ya están en la tabla, materialícela explícitamente:is_done = 1, la proyección está completamente materializada. También puede comprobarlo consultando system.projection_parts:Consulta la tabla y observa el uso automático de la proyección
Ahora ejecuta una consulta con filtro portown, en la misma tabla que has consultado hasta ahora:uk_price_paid_by_town en lugar de escanear los datos base.Puedes confirmar que se ha usado la proyección con EXPLAIN:ReadFromMergeTree con referencia al nombre de la proyección. Si quieres comparar el rendimiento explícitamente, puedes deshabilitar la optimización de proyecciones para una sola consulta:Comparación entre proyecciones y vistas materializadas
Tanto las proyecciones como las vistas materializadas resuelven el mismo problema —lecturas más rápidas con patrones de acceso alternativos—, pero implican concesiones distintas. En resumen, las proyecciones son la mejor opción cuando solo necesitas un orden distinto para los mismos datos; las vistas materializadas son más flexibles cuando necesitas transformar, agregar o enrutar datos a un esquema diferente. Para una comparación detallada, consulta Vistas materializadas frente a proyecciones.Observe la sobrecarga de almacenamiento
Las proyecciones almacenan una segunda copia de las columnas seleccionadas dentro de la misma tabla, lo que incrementa el uso del disco. Consultasystem.parts para ver el tamaño total de uk_price_paid (que ahora incluye los datos de la proyección):Siguientes pasos
En esta guía de inicio rápido añadiste una proyección auk_price_paid que almacena los datos ordenados por (town, date), lo que permite búsquedas rápidas por localidad sin crear una tabla independiente. Aprendiste que el optimizador de consultas elige las proyecciones de forma transparente, que se mantienen sincronizadas con las mutaciones y que consumen espacio en disco a cambio de mejorar el rendimiento de lectura.
A continuación, consulta estas guías de inicio rápido:
O profundiza con la documentación de referencia:
