| Almacenamiento y ubicación de los datos | Almacenan sus resultados en una tabla de destino independiente y explícita y actúan como desencadenadores de inserción al insertar en una tabla de origen. | Las proyecciones crean diseños de datos optimizados que se almacenan físicamente junto con los datos de la tabla principal y son invisibles para el usuario. |
| Mecanismo de actualización | Funcionan de forma sincrónica con INSERT en la tabla de origen (en el caso de las vistas materializadas incrementales). Nota: también pueden programarse mediante vistas materializadas actualizables. | Actualizaciones asíncronas en segundo plano tras un INSERT en la tabla principal. |
| Interacción con consultas | Trabajar con vistas materializadas requiere consultar la tabla de destino directamente, lo que significa que debes tener en cuenta la existencia de las vistas materializadas al escribir consultas. | Las proyecciones son seleccionadas automáticamente por el optimizador de consultas de ClickHouse y son transparentes, en el sentido de que el usuario no tiene que modificar sus consultas sobre la tabla con la proyección para aprovecharla. Desde la versión 25.6 también es posible filtrar por más de una proyección. |
Manejo de UPDATE / DELETE | No reaccionan automáticamente a las operaciones UPDATE o DELETE en la tabla de origen, ya que las vistas materializadas no tienen conocimiento de la tabla de origen y actúan únicamente como desencadenadores de inserción sobre una tabla de origen. Esto puede dar lugar a datos desactualizados entre las tablas de origen y de destino y requiere soluciones alternativas o una actualización completa periódica (mediante una vista materializada actualizable). | De forma predeterminada, son incompatibles con las filas DELETED (especialmente con las eliminaciones ligeras). lightweight_mutation_projection_mode (v24.7+) puede habilitar la compatibilidad. |
Compatibilidad con JOIN | Sí. Las vistas materializadas actualizables pueden utilizarse para una desnormalización compleja. Las vistas materializadas incrementales solo se activan con inserciones en la tabla situada más a la izquierda. | No. Las operaciones JOIN no son compatibles dentro de las definiciones de proyección para filtrar los datos materializados. Sin embargo, las consultas que unen tablas con proyecciones funcionan con normalidad; las proyecciones optimizan el acceso a cada tabla individual. |
Cláusula WHERE en la definición | Sí. Se pueden incluir cláusulas WHERE para filtrar los datos antes de la materialización. | No. Las cláusulas WHERE no son compatibles dentro de las definiciones de proyección para filtrar los datos materializados. |
| Capacidades de encadenamiento | Sí, la tabla de destino de una vista materializada puede ser el origen de otra vista materializada, lo que permite pipelines de varias etapas. | No. Las proyecciones no se pueden encadenar. |
| Motores de tabla aplicables | Pueden utilizarse con varios motores de tabla de origen, pero las tablas de destino suelen ser de la familia MergeTree. | Solo disponibles para motores de tabla de la familia MergeTree. |
| Manejo de fallos | Un fallo durante la inserción de datos implica que los datos se pierden en la tabla de destino, lo que puede provocar inconsistencias. | Los fallos se gestionan silenciosamente en segundo plano. Las consultas pueden combinar sin problemas partes materializadas y no materializadas. |
| Sobrecarga operativa | Requiere crear explícitamente la tabla de destino y, a menudo, realizar backfilling manual. Gestionar la consistencia con UPDATE/DELETE aumenta la complejidad. | Las proyecciones se mantienen y se sincronizan automáticamente y, por lo general, suponen una menor carga operativa. |
Compatibilidad con consultas FINAL | Generalmente compatibles, pero a menudo requieren GROUP BY en la tabla de destino. | No funcionan con consultas FINAL. |
| Materialización diferida | Sí. | Supervisa los problemas de compatibilidad de las proyecciones al usar funciones de materialización. Puede que necesites establecer query_plan_optimize_lazy_materialization = false |
| Réplicas paralelas | Sí. | No. |
optimize_read_in_order | Sí. | Sí. |
| Actualizaciones y eliminaciones ligeras | Sí. | No. |