Skip to main content
Las PROJECTIONS hipotéticas son PROJECTIONS virtuales, con alcance de sesión, que puede adjuntar a una tabla de la familia MergeTree sin necesidad de construirlas ni almacenarlas. Existen únicamente dentro de la sesión actual y se listan mediante EXPLAIN WHATIF. EXPLAIN WHATIF aún no estima el beneficio de una PROJECTION hipotética: informa cada una con status: not_applicable. Definirlas resulta útil actualmente para validar una definición frente a la tabla sin materializarla, y para herramientas que leen system.hypothetical_projections.

CREATE HYPOTHETICAL PROJECTION

La sintaxis es análoga a la de ALTER TABLE ... ADD PROJECTION, y la definición se valida exactamente igual, por lo que una PROJECTION rechazada aquí tampoco se habría podido materializar. No se construye ni se escribe nada: solo se almacena la descripción, en la sesión actual.
  • name — nombre de la PROJECTION; debe ser único dentro de (database, table) para esta sesión y no debe entrar en conflicto con una PROJECTION real de la tabla.
  • El cuerpo admite las mismas formas que una PROJECTION real: una PROJECTION de reordenamiento con ORDER BY, una de agregación con GROUP BY, una filtrada con WHERE, o la forma de índice de PROJECTION INDEX <expression> TYPE <projection_index_type>.
  • WITH SETTINGS (...) se acepta y se conserva; los ajustes pueden consultarse en system.hypothetical_projections.
La tabla de destino debe ser una tabla de la familia MergeTree en una base de datos Atomic (debe tener un UUID), ya que el almacén de sesión indexa las entradas por el UUID de la tabla. Las restricciones que impone un ADD PROJECTION real también se aplican aquí: se rechazan las tablas con UNIQUE KEY, los modos de fusión distintos de Ordinary con deduplicate_merge_projection_mode = throw, las tablas MergeTree con sintaxis antigua y los discos inmutables. Ejemplo

DROP HYPOTHETICAL PROJECTION

Elimina una PROJECTION hipotética de la sesión actual.

DROP ALL HYPOTHETICAL PROJECTIONS

Elimina todas las PROJECTIONS hipotéticas definidas en la sesión actual, sin importar la tabla. Los índices hipotéticos no se ven afectados; DROP ALL HYPOTHETICAL INDEXES hace lo contrario.

Alcance y ciclo de vida

  • Las PROJECTIONS hipotéticas solo existen en la sesión actual: son invisibles para las demás sesiones y se descartan al finalizar la sesión.
  • Definir o eliminar una no construye ninguna PROJECTION ni afecta jamás a las consultas ordinarias sobre la tabla.
  • Consulte las PROJECTIONS hipotéticas de la sesión actual mediante system.hypothetical_projections.

Privilegios requeridos

CREATE HYPOTHETICAL PROJECTION requiere ALTER ADD PROJECTION sobre la tabla —el mismo privilegio que necesita el ALTER TABLE ... ADD PROJECTION real— porque valida la definición frente a las columnas de la tabla. No lee datos de la tabla, por lo que aún no se requiere SELECT sobre las columnas de la PROJECTION; cuando EXPLAIN WHATIF empiece a estimar PROJECTIONS, leerá esas columnas y entonces sí se requerirá SELECT a nivel de columna, tal como ya ocurre con CREATE HYPOTHETICAL INDEX. DROP HYPOTHETICAL PROJECTION requiere el mismo privilegio, de modo que nombrar una tabla en un DROP no pueda revelar si existe o si es apta. DROP ALL HYPOTHETICAL PROJECTIONS no nombra ninguna tabla y no requiere ningún privilegio.

Véase también

Última modificación el 26 de septiembre de 2026