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 estima las PROJECTIONS hipotéticas normales (ordenadas): a cuántas marcas y filas accedería la lectura de la PROJECTION para una consulta y si el optimizador la elegiría en lugar de la tabla base. No se estiman todas las PROJECTIONS: las PROJECTIONS de agregación y las que tienen una cláusula WHERE son dos de esos casos. Los candidatos que no se estiman aparecen en la lista junto con el motivo. Consulte EXPLAIN WHATIF para ver la lista completa. Las PROJECTIONS hipotéticas de la sesión también pueden consultarse en 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. EXPLAIN WHATIF requiere SELECT a nivel de columna sobre las columnas de la PROJECTION para estimarla, 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, y EXPLAIN WHATIF vuelve a comprobar ese privilegio antes de validar una definición almacenada frente a la tabla. DROP ALL HYPOTHETICAL PROJECTIONS no nombra ninguna tabla y no requiere ningún privilegio.

Véase también