> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-vortex-format.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog de la versión 26.6 para Cloud

> Changelog de la versión 26.6

<h2 id="backward-incompatible-changes">
  Cambios incompatibles con versiones anteriores
</h2>

<h3 id="query-and-syntax-changes">
  Cambios en las consultas y la sintaxis
</h3>

* Las funciones de ventana `RANK` y `DENSE_RANK` ahora rechazan argumentos y lanzan `NUMBER_OF_ARGUMENTS_DOESNT_MATCH`, conforme al SQL standard. Anteriormente, consultas como `RANK(x) OVER (ORDER BY id)` se aceptaban sin más, ignorando el argumento, lo que solía generar confusión entre los usuarios. Para restaurar el comportamiento permisivo anterior, establezca `allow_rank_dense_rank_arguments = 1`. [#104324](https://github.com/ClickHouse/ClickHouse/pull/104324) ([groeneai](https://github.com/groeneai)).

<h3 id="data-type-changes">
  Cambios en los tipos de datos
</h3>

* `icebergHash` y `icebergBucket` ahora rechazan los argumentos `Int128`, `UInt128`, `Int256`, `UInt256` y `Decimal256` con un error explícito. Anteriormente, truncaban silenciosamente los valores de mayor tamaño y generaban hash con colisiones. La especificación de Iceberg solo define el cálculo de hash para enteros de 32/64 bits y decimales con una precisión de hasta 38; convierta a `Int64` o `Decimal128` para mantener el comportamiento anterior en los valores que quepan. [#105866](https://github.com/ClickHouse/ClickHouse/pull/105866) ([Algunenano](https://github.com/Algunenano)).
* `toUUID`, `toUUIDOrNull`, `toUUIDOrZero`, `toUUIDOrDefault`, `CAST` a `UUID` y `Nullable(UUID)`, `accurateCastOrNull` a `UUID` y los formatos de entrada que parsean un UUID a partir de texto (`Avro`, `MsgPack`, `JSONExtract`, ...) ahora rechazan las cadenas que tienen la longitud correcta pero contienen caracteres no hexadecimales. Anteriormente, esas entradas se convertían silenciosamente en un UUID inventado al leer más allá del final de la tabla de lookup de dígitos hexadecimales. Ahora `toUUID` lanza `CANNOT_PARSE_UUID` y las variantes `Or*` devuelven `NULL`, el UUID con valor cero o el valor predeterminado suministrado. [#104370](https://github.com/ClickHouse/ClickHouse/pull/104370) ([groeneai](https://github.com/groeneai)).
* Los tipos `Dynamic` y `Variant` ahora se validan en la clause `PARTITION BY` de la ventana; antes esto no se comprobaba cuando `allow_suspicious_types_in_group_by` está disabled. Las consultas que particionan una ventana sobre una columna `Dynamic` o `Variant` ahora lanzan un error a menos que `allow_suspicious_types_in_group_by = 1`. [#105450](https://github.com/ClickHouse/ClickHouse/pull/105450) ([Avogar](https://github.com/Avogar)).

<h3 id="storage-and-index-changes">
  Cambios en el almacenamiento y los índices
</h3>

* Se rechazan valores Dynamic/Variant anidados en agregaciones min/max e índices minmax. Anteriormente, solo se comprobaban valores Dynamic/Variant de nivel superior. [#105468](https://github.com/ClickHouse/ClickHouse/pull/105468) ([Avogar](https://github.com/Avogar)).
* El valor predeterminado del SETTING del servidor `insert_deduplication_version` cambia de `compatible_double_hashes` a `new_unified_hash`. La deduplicación de inserciones ahora funciona sobre todo el bloque insertado (por inserción), en lugar de por parte/partición: un reintento de la misma inserción se sigue deduplicando, pero dos inserciones distintas que generan una parte idéntica ya no se deduplican entre sí, y las inserciones reordenadas de las mismas filas ya no se deduplican. Establezca `insert_deduplication_version = compatible_double_hashes` para restaurar el comportamiento anterior. La deduplicación de inserciones asíncronas también se rige por la ventana síncrona con `new_unified_hash`: tanto su habilitación (`replicated_deduplication_window`) como su retención (`replicated_deduplication_window_seconds`, 1 hora de forma predeterminada) siguen los SETTINGs síncronos, por lo que `*_for_async_inserts` es una configuración heredada y solo se aplica a `old_separate_hashes` / `compatible_double_hashes`. Las instancias que actualicen directamente desde una versión cuyo valor predeterminado era `old_separate_hashes` deben ejecutarse primero con `compatible_double_hashes` hasta que haya transcurrido la ventana de deduplicación relevante más larga (incluida `replicated_deduplication_window_for_async_inserts`, cuyo valor predeterminado es una semana, si se usan inserciones asíncronas) antes de usar `new_unified_hash`. Las cargas de trabajo asíncronas que cambien desde `compatible_double_hashes` deben primero aumentar `replicated_deduplication_window[_seconds]` hasta la ventana asíncrona (y ejecutarse durante una ventana asíncrona completa), detener las inserciones asíncronas o mantenerse en `compatible_double_hashes`, porque `new_unified_hash` ya no comprueba los ID de `async_blocks` de mayor duración. [#107886](https://github.com/ClickHouse/ClickHouse/pull/107886) ([CheSema](https://github.com/CheSema)).
* Se corrige el problema por el que `hasToken` con un needle que contiene un separador devolvía resultados silenciosamente mediante un índice de texto, en lugar de generar `BAD_ARGUMENTS`. [#108189](https://github.com/ClickHouse/ClickHouse/pull/108189) ([Ergus](https://github.com/Ergus)).

<h3 id="removed-features">
  Funciones eliminadas
</h3>

* Ya no es posible usar el Parquet reader ni el writer basados en Arrow, ahora obsoletos. En su lugar siempre se utiliza la implementación native. Los SETTINGS que seleccionaban o ajustaban las implementaciones antiguas ahora son obsoletos y se ignoran: `input_format_parquet_use_native_reader_v3`, `output_format_parquet_use_custom_encoder`, `output_format_parquet_version`, `output_format_parquet_compliant_nested_types` y `output_format_parquet_unsupported_types_as_binary`. El Native writer siempre escribe Parquet V2.6+ con tipos anidados compatibles, y genera `UNKNOWN_TYPE` para los tipos no compatibles en lugar de escribirlos como raw binary. [#100949](https://github.com/ClickHouse/ClickHouse/pull/100949) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se eliminó el SETTING obsoleto `allow_experimental_query_deduplication` y el comportamiento experimental no compatible de deduplicación de consultas asociado. [#99398](https://github.com/ClickHouse/ClickHouse/pull/99398) ([devcrafter](https://github.com/devcrafter)).
* `ALTER TABLE ... REPLACE PARTITION ... FROM ...` ya no elimina silenciosamente los datos de la partición de destino cuando la tabla de origen no tiene partes en la partición solicitada. Anteriormente, dicha solicitud eliminaba la partición de destino sin escribir nada en su lugar. Ahora se rechaza con `BAD_ARGUMENTS` de forma predeterminada. Este es un cambio incompatible con versiones anteriores: un `REPLACE PARTITION` desde un origen vacío que antes se ejecutaba correctamente (borrando el destino) ahora generará un error tras la actualización. Para restaurar el comportamiento anterior de borrado silencioso, establezca el nuevo SETTING `allow_replace_partition_from_empty_source = 1` (por consulta o en el perfil), o establezca `compatibility` en `26.5` o una versión anterior. Para eliminar explícitamente los datos de destino, use `ALTER TABLE ... DROP PARTITION ...`. [#104939](https://github.com/ClickHouse/ClickHouse/pull/104939) ([groeneai](https://github.com/groeneai)).
* Se eliminaron las funciones experimentales de KQL (Kusto) `array_sort_asc` y `array_sort_desc`, así como sus implementaciones SQL, `kql_array_sort_asc` y `kql_array_sort_desc`. Estas funciones eran experimentales, tenían una implementación de baja calidad y provocaban errores de corrección y del analizador sintáctico. Las consultas que usan estos nombres ahora devuelven `UNKNOWN_FUNCTION`. [#108101](https://github.com/ClickHouse/ClickHouse/pull/108101) ([groeneai](https://github.com/groeneai)).

<h2 id="new-features">
  Nuevas características
</h2>

<h3 id="functions">
  Funciones
</h3>

* Se añadió compatibilidad con la función de PromQL `histogram_quantile` en las funciones de tabla `prometheusQuery` y `prometheusQueryRange`. Esto permite calcular cuantiles a partir de los buckets de histogramas clásicos de Prometheus identificados por la etiqueta `le`. [#103477](https://github.com/ClickHouse/ClickHouse/pull/103477) ([Yasumoto](https://github.com/Yasumoto)).
* Se añadió la función `h3PolygonToCellsWithContainment`, que admite modos de contención centrada, de contención completa y de solapamiento. [#104455](https://github.com/ClickHouse/ClickHouse/pull/104455) ([yousefQadry](https://github.com/yousefQadry)).
* Ahora se puede especificar un argumento de precisión opcional para las funciones `formatReadableSize`, `formatReadableDecimalSize` y `formatReadableQuantity`, que controla el número de dígitos después del punto decimal. El valor predeterminado es 2, lo que mantiene el comportamiento previo. [#104648](https://github.com/ClickHouse/ClickHouse/pull/104648) ([antoniofilipovic](https://github.com/antoniofilipovic)).
* Se añadieron los alias de agregación `min_by` y `max_by` para `argMin` y `argMax`. [#105712](https://github.com/ClickHouse/ClickHouse/pull/105712) ([itsjoeoui](https://github.com/itsjoeoui)).

<h3 id="sql-and-query-features">
  Funcionalidades de SQL y consultas
</h3>

* `formatReadableTimeDelta` ahora acepta como entrada expresiones `INTERVAL` de tipos distintos de `Month` y `Year`. [#64315](https://github.com/ClickHouse/ClickHouse/pull/64315) ([Beetelbrox](https://github.com/Beetelbrox)).
* Se añadió compatibilidad con el formato de salida PNG, lo que permite renderizar directamente los resultados de las consultas como imágenes PNG. [#74691](https://github.com/ClickHouse/ClickHouse/pull/74691) ([m7kss1](https://github.com/m7kss1)).
* Se introdujo una función de reserva de memoria para cargas de trabajo. Consulte la documentación sobre [planificación de cargas de trabajo](https://clickhouse.com/docs/operations/workload-scheduling). [#82414](https://github.com/ClickHouse/ClickHouse/pull/82414) ([serxa](https://github.com/serxa)).
* Se añadieron las opciones `IPV4_PREFIX_BITS` e `IPV6_PREFIX_BITS` para cuotas identificadas mediante `IP_ADDRESS` o `FORWARDED_IP_ADDRESS`, lo que permite compartir los límites de cuota por subred IP en lugar de aplicarlos por separado a cada dirección IP completa. [#89270](https://github.com/ClickHouse/ClickHouse/pull/89270) ([adityachopra29](https://github.com/adityachopra29)).
* Se implementó `ADD ENUM VALUES` en consultas `ALTER TABLE` para simplificar la adición de nuevos valores a un tipo Enum existente sin necesidad de volver a especificar todos los valores Enum actuales. [#93830](https://github.com/ClickHouse/ClickHouse/pull/93830) ([ilejn](https://github.com/ilejn)).
* Se añadió el formato de entrada `GeoJSON` para lectura. [#98124](https://github.com/ClickHouse/ClickHouse/pull/98124) ([mneedham](https://github.com/mneedham)).
* Se añadió un posprocesador al índice de texto que transforma los tokens tras la tokenización. [#98939](https://github.com/ClickHouse/ClickHouse/pull/98939) ([Ergus](https://github.com/Ergus)).
* Se añadió compatibilidad opcional con nodos TTL en ClickHouse Keeper. Los nodos TTL caducan automáticamente al finalizar su tiempo de vida configurado y no pueden tener nodos secundarios. [#100397](https://github.com/ClickHouse/ClickHouse/pull/100397) ([scanhex12](https://github.com/scanhex12)).
* Se añadió almacenamiento de posiciones de tokens para índices de texto, con el fin de admitir búsquedas exactas con `hasPhrase`. Habilite el argumento de índice `support_phrase_search` y la configuración de `MergeTree` `allow_experimental_text_index_phrase_search`. [#103172](https://github.com/ClickHouse/ClickHouse/pull/103172) ([ahmadov](https://github.com/ahmadov)).
* Se añadieron las funciones arrayTopK y arrayBottomK: - `arrayTopK(k, array)` devuelve los K elementos más grandes en orden descendente - `arrayBottomK(k, array)` devuelve los K elementos más pequeños en orden ascendente. [#104563](https://github.com/ClickHouse/ClickHouse/pull/104563) ([vitlibar](https://github.com/vitlibar)).
* Se añadió compatibilidad para seleccionar columnas mediante patrones de nombre con `* LIKE '<pattern>'` y `* ILIKE '<pattern>'`, incluidas formas calificadas como `table.* LIKE '<pattern>'` y `table.* ILIKE '<pattern>'`. `LIKE` busca coincidencias en los nombres de columna distinguiendo entre mayúsculas y minúsculas; `ILIKE`, sin distinguirlas. [#104569](https://github.com/ClickHouse/ClickHouse/pull/104569) ([niyue](https://github.com/niyue)).
* Se añadieron consultas continuas para tablas `MergeTree` mediante una secuencia de lecturas de instantáneas. [#105114](https://github.com/ClickHouse/ClickHouse/pull/105114) ([Michicosun](https://github.com/Michicosun)).
* Se añadió el formato `RowBinaryWithNamesAndTypesAndDefaults` para mejorar la compatibilidad con la evolución del esquema. [#105736](https://github.com/ClickHouse/ClickHouse/pull/105736) ([mzitnik](https://github.com/mzitnik)).
* Se añadieron funciones para servir Mapbox Vector Tiles directamente desde SQL: `MVTEncodeGeom` proyecta una geometría en el espacio de píxeles de una tesela de mapa Slippy y la recorta; `MVTEncode` agrega las geometrías proyectadas de un grupo en los bytes binarios de una tesela de una sola capa; y `MVTBoundingBox` / `MVTBoundingBoxMercator` devuelven el cuadro delimitador de una tesela para limitar las filas a esta. Se admiten geometrías de puntos, líneas y polígonos. También están disponibles con los alias de PostGIS `ST_AsMVTGeom` y `ST_AsMVT`. [#106107](https://github.com/ClickHouse/ClickHouse/pull/106107) ([saarthak2002](https://github.com/saarthak2002)).
* Se añadieron `LOCALTIME` y `LOCALTIMESTAMP` (sintaxis estándar de SQL/PostgreSQL). `LOCALTIMESTAMP` es un alias de `now()` (devuelve `DateTime`); `LOCALTIME` devuelve la hora actual como un valor `Time`. [#106139](https://github.com/ClickHouse/ClickHouse/pull/106139) ([thomas-cabral](https://github.com/thomas-cabral)).
* Se añadieron dos nuevas estrategias de `load_balancing`, `hostname_longest_common_prefix` y `hostname_longest_common_suffix`, que prefieren la réplica cuyo hostname comparte con el hostname del iniciador el prefijo común más largo (o, respectivamente, el sufijo). Son útiles cuando el centro de datos se codifica como prefijo o sufijo de hostnames cuyos segmentos numéricos tienen longitud variable, situaciones en las que las estrategias existentes `nearest_hostname` y `hostname_levenshtein_distance` seleccionan la réplica equivocada. [#107360](https://github.com/ClickHouse/ClickHouse/pull/107360) ([den-crane](https://github.com/den-crane)).
* Nuevas funciones `quantizeBFloat16ToInt8` y `dequantizeInt8ToBFloat16`: un códec escalar que comprime los componentes de embedding a 8 bits mediante un cuantificador gaussiano Lloyd-Max de 256 niveles, del que se pueden extraer códigos Int4/Int2/binarios mediante truncamiento de bits. [#108102](https://github.com/ClickHouse/ClickHouse/pull/108102) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="table-engines-and-storage">
  Motores de tabla y almacenamiento
</h3>

* Se añadió compatibilidad con la escritura en Azure Data Lake Storage Gen2. [#105406](https://github.com/ClickHouse/ClickHouse/pull/105406) ([scanhex12](https://github.com/scanhex12)).

<h3 id="settings-and-configuration">
  Configuración y ajustes
</h3>

* Se añadió el SETTING `output_format_always_write_decimal_point_in_float_and_decimal` para imprimir siempre el punto decimal en los números de coma flotante y `Decimal` en formatos de texto, incluso cuando el valor es un número entero. Por ejemplo, muestra `1.` en lugar de `1`. Está deshabilitado de forma predeterminada. [#62614](https://github.com/ClickHouse/ClickHouse/pull/62614) ([qoega](https://github.com/qoega)).
* Se añadió un nuevo SETTING inmutable de `MergeTree`, `allow_tuple_element_aggregation`, deshabilitado de forma predeterminada. Cuando está habilitado, `SummingMergeTree`, `AggregatingMergeTree` y `CoalescingMergeTree` aplanan recursivamente las columnas `Tuple` y agregan cada elemento hoja de forma independiente durante las fusiones, como si fuera una columna de nivel superior: `SummingMergeTree` lo suma, `AggregatingMergeTree` fusiona su estado de función de agregación y `CoalescingMergeTree` conserva su último valor no NULL. El SETTING debe especificarse al crear la tabla y los motores que no lo admiten lo ignoran silenciosamente. [#98039](https://github.com/ClickHouse/ClickHouse/pull/98039) ([JingYanchao](https://github.com/JingYanchao)).
* Se añadió el SETTING `output_format_float_precision` para controlar el número de dígitos decimales en la salida de texto de números de coma flotante. [#99721](https://github.com/ClickHouse/ClickHouse/pull/99721) ([phulv94](https://github.com/phulv94)).
* Se añadieron los SETTINGs de tabla de MergeTree `materialize_projections_on_insert` y `materialize_projections_on_merge`. Cuando `materialize_projections_on_insert = 0`, los INSERT omiten la creación de partes de proyección, lo que mejora el rendimiento de inserción en tablas con muchas proyecciones. Cuando `materialize_projections_on_merge = 1`, una fusión reconstruye una proyección que falta en todas sus partes de origen, por lo que las proyecciones pueden crearse durante las fusiones en lugar de durante la inserción. Las fusiones siguen combinando únicamente partes que comparten el mismo conjunto de proyecciones. [#100993](https://github.com/ClickHouse/ClickHouse/pull/100993) ([cwurm](https://github.com/cwurm)).
* Se añadió un nuevo SETTING de S3Queue, `after_processing_move_preserve_path`. Cuando se habilita junto con `after_processing='move'` y `after_processing_move_prefix`, los objetos procesados se mueven conservando toda su ruta de origen bajo el prefijo de destino, en lugar de aplanarse para conservar solo el nombre de archivo. [#105354](https://github.com/ClickHouse/ClickHouse/pull/105354) ([asya-ch](https://github.com/asya-ch)).
* Se añadieron los elementos de configuración del controlador HTTP `url_prefix` y `full_url_prefix` para hacer coincidir todas las rutas con un prefijo determinado, así como los elementos explícitos `url_regexp`, `full_url_regexp` y `headers_regexp`. La sintaxis heredada `<url>regex:...</url>` sigue siendo compatible. [#107492](https://github.com/ClickHouse/ClickHouse/pull/107492) ([vitlibar](https://github.com/vitlibar)).

<h3 id="authentication">
  Autenticación
</h3>

* Se añadió una credencial `external_id` opcional para el acceso a S3 basado en roles. [#106941](https://github.com/ClickHouse/ClickHouse/pull/106941) ([eliangidoni](https://github.com/eliangidoni)).
* Se añadió a la tabla `system.session_log` información sobre el certificado TLS del cliente (subjects, número de serie, issuer y período de validez) para mejorar la observabilidad de la autenticación basada en certificados. [#107679](https://github.com/ClickHouse/ClickHouse/pull/107679) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="system-tables">
  Tablas del sistema
</h3>

* Se añadió la tabla `system.iceberg_files`, que expone metadatos por archivo de las tablas Iceberg, con una fila por cada archivo de datos o de borrado en el snapshot actual de cada tabla. [#104415](https://github.com/ClickHouse/ClickHouse/pull/104415) ([asya-ch](https://github.com/asya-ch)).
* Se añadieron índices de omisión hipotéticos (de tipo «qué pasaría si»). Use `CREATE HYPOTHETICAL INDEX ... ON t (expr) TYPE ...` para definir un índice de omisión virtual con ámbito de sesión y, a continuación, `EXPLAIN WHATIF SELECT ...` para estimar su ratio de omisión y coste sin materializarlo. Los índices definidos son visibles en la nueva tabla `system.hypothetical_indexes`. [#104608](https://github.com/ClickHouse/ClickHouse/pull/104608) ([yariks5s](https://github.com/yariks5s)).
* Se añadió la tabla del sistema `system.constraints`, que proporciona información sobre todas las restricciones CHECK y ASSUME de todas las tablas, incluidos el nombre, el tipo y la expresión de cada restricción. [#105337](https://github.com/ClickHouse/ClickHouse/pull/105337) ([PedroTadim](https://github.com/PedroTadim)).
* Se añadió una nueva tabla del sistema, `system.documentation`, que recopila en una sola tabla la documentación de referencia integrada de los componentes uniformes del sistema (funciones, motores de tabla, tipos de datos, configuraciones, formatos y otros), con la documentación renderizada en Markdown. [#107463](https://github.com/ClickHouse/ClickHouse/pull/107463) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h2 id="experimental-features">
  Funcionalidades experimentales
</h2>

* Se añadió el algoritmo experimental de reordenación de JOIN `dphyp` para INNER JOIN como opción del SETTING `query_plan_optimize_join_order_algorithm`, así como el SETTING `query_plan_optimize_join_order_max_searched_plans`, que limita la búsqueda del orden de los JOIN y recurre al siguiente algoritmo de la cadena cuando se supera dicho límite; establézcala en `0` para mantener el comportamiento anterior de búsqueda ilimitada. [#98798](https://github.com/ClickHouse/ClickHouse/pull/98798) ([davenger](https://github.com/davenger)).
* Se añadió el modo de aplicación diferida de listas de postings para el índice de texto. Cuando se habilita mediante `SET allow_experimental_text_index_lazy_apply = 1` y `SET text_index_posting_list_apply_mode = 'lazy'`, las listas de postings se decodifican bajo demanda con granularidad de bloques empaquetados mediante un enfoque basado en cursores, en lugar de materializarse por completo en mapas de bits Roaring, lo que reduce el uso de memoria y el tiempo de CPU en consultas selectivas sobre índices de texto. [#100035](https://github.com/ClickHouse/ClickHouse/pull/100035) ([fastio](https://github.com/fastio)).
* Se permite adjuntar controladores prometheus al puerto HTTP principal con un prefijo opcional. [#104975](https://github.com/ClickHouse/ClickHouse/pull/104975) ([JTCunning](https://github.com/JTCunning)).
* Se añadió un SETTING experimental de MergeTree, `packed_skip_index_max_bytes`, que agrupa substreams pequeños de índices de omisión en un único archivo `skp_idx.packed` por parte, lo que reduce la presión sobre los inodos cuando se definen muchos índices de omisión en una tabla. La decisión se toma por substream en el momento de la escritura: los substreams cuyo tamaño serializado se mantiene por debajo del umbral se incluyen en el archivo; los de mayor tamaño conservan la disposición independiente `skp_idx_<name>.idx2` / `.mrk2`. Una misma parte puede combinar ambas disposiciones. Los índices de texto completo no son compatibles y siempre se almacenan en archivos individuales. El valor predeterminado es 0 (empaquetado deshabilitado). [#105321](https://github.com/ClickHouse/ClickHouse/pull/105321) ([Algunenano](https://github.com/Algunenano)).
* Se admite la serialización `Buffers` para UDF de WebAssembly mediante `ABI BUFFERED_V1`, y se añade `webassembly_udf_enable_fuel` como SETTING persistente de funciones UDF de WASM. [#105574](https://github.com/ClickHouse/ClickHouse/pull/105574) ([antonio2368](https://github.com/antonio2368)).
* Ejecución de consultas distribuidas en varias etapas: el planificador divide el plan de consulta en etapas conectadas mediante intercambios de dispersión / difusión / recopilación / reorganización, y envía los fragmentos del plan a los nodos worker. Los datos entre etapas se transmiten mediante TCP o se transfieren mediante archivos temporales en almacenamiento de objetos compartido; la ruta admite reorganización distribuida, hash joins de difusión, agregación mediante reorganización y ordenación distribuida. La funcionalidad es experimental y está deshabilitada de forma predeterminada. [#106020](https://github.com/ClickHouse/ClickHouse/pull/106020) ([davenger](https://github.com/davenger)).
* El motor experimental de planes de consultas distribuidas (`make_distributed_plan`) ahora puede usar un puerto distinto para el envío de tareas y el intercambio de streaming por worker, configurado por réplica en `<remote_servers>` mediante `stateless_worker_port` y `streaming_exchange_port`. Si no se configuran, se utilizan los puertos anteriores a nivel de servidor (`stateless_worker_client.port` y `distributed_query.streaming_exchange_port`). Esto permite ejecutar varios workers en un mismo host. [#107885](https://github.com/ClickHouse/ClickHouse/pull/107885) ([davenger](https://github.com/davenger)).

<h2 id="performance-improvements">
  Mejoras del rendimiento
</h2>

<h3 id="join-performance">
  Rendimiento de JOIN
</h3>

* Implementa la aplicación diferida de índices de selector y de replicación cuando un JOIN va seguido de un LIMIT selectivo, TopN u otro JOIN. Para controlar el número de columnas de payload necesario para habilitar los índices de selector diferidos, utiliza el SETTING `query_plan_min_columns_for_join_lazy_indexing` (0 significa que la optimización está deshabilitada). Para controlar el LIMIT al que se aplica la optimización, utiliza el SETTING `query_plan_max_limit_for_join_lazy_indexing`. [#98883](https://github.com/ClickHouse/ClickHouse/pull/98883) ([m-selmi](https://github.com/m-selmi)).
* Permite que `ASOF JOIN` use el algoritmo de join `parallel_hash`, paralelizando la compilación entre valores distintos de las claves de igualdad. Anteriormente, ASOF se excluía incondicionalmente de `parallel_hash`. [#105375](https://github.com/ClickHouse/ClickHouse/pull/105375) ([gregakinman](https://github.com/gregakinman)).
* Comparte el FixedHashMap del hash join como filtro en tiempo de ejecución de JOIN en el lado de sondeo. Cuando la tabla hash del lado de compilación es (o puede convertirse en) un FixedHashMap, se publica como filtro en tiempo de ejecución y sustituye el `Set`/`BloomFilter` que, de otro modo, instalaría `BuildRuntimeFilterStep`. Esta función se controla mediante el nuevo SETTING `enable_join_runtime_filter_shared_fixed_hash_table` (valor predeterminado: `true`). [#105640](https://github.com/ClickHouse/ClickHouse/pull/105640) ([wudidapaopao](https://github.com/wudidapaopao)).
* La reordenación de JOIN mediante DP ahora se permite con réplicas paralelas. [#105889](https://github.com/ClickHouse/ClickHouse/pull/105889) ([nickitat](https://github.com/nickitat)).
* Se mejora el plan de consulta cuando JOIN usa filtros en tiempo de ejecución (`enable_join_runtime_filters` habilitado de forma predeterminada): el modelo de costes de reordenación de joins ahora puede atravesar `WindowTransform` (y otros pasos del plan que preservan las filas) en el subárbol derecho y utiliza el recuento de filas subyacente y el NDV por columna en lugar de asumir que no hay estadísticas. [#107229](https://github.com/ClickHouse/ClickHouse/pull/107229) ([UnamedRus](https://github.com/UnamedRus)).

<h3 id="query-optimization">
  Optimización de consultas
</h3>

* Se mejoró el rendimiento del análisis de índices de texto en búsquedas con varios tokens al optimizar el manejo de tokens poco frecuentes. [#98226](https://github.com/ClickHouse/ClickHouse/pull/98226) ([CurtizJ](https://github.com/CurtizJ)).
* Se mejoró el rendimiento de las funciones `encrypt`, `decrypt` y `halfMD5` al evitar búsquedas implícitas del proveedor de OpenSSL por cada fila en OpenSSL 3.x. [#99105](https://github.com/ClickHouse/ClickHouse/pull/99105) ([thevar1able](https://github.com/thevar1able)).
* Se compactan los bloques de origen antes de `projection.calculate()` durante `MATERIALIZE PROJECTION` para reducir el número de partes temporales de proyección y la sobrecarga de fusión. Aceleración de \~3,4 veces en una tabla de 50 millones de filas. [#100047](https://github.com/ClickHouse/ClickHouse/pull/100047) ([amosbird](https://github.com/amosbird)).
* Los usuarios ahora se benefician de un mayor rendimiento de los filtros de tiempo de ejecución aproximados y los índices de filtro Bloom. [#100201](https://github.com/ClickHouse/ClickHouse/pull/100201) ([cv4g](https://github.com/cv4g)).
* Se aceleran las consultas `ORDER BY ... LIMIT BY` ejecutando `LIMIT BY` dentro de cada flujo ordenado en paralelo durante `Sort` cuando las columnas de `LIMIT BY` son un prefijo de las de `ORDER BY`. Esto reduce el número de filas que pasan por la fusión de ordenación final y por cualquier paso posterior de la canalización. Esta optimización se controla mediante la nueva configuración `query_plan_push_limit_by_into_sort` (habilitada de forma predeterminada). [#104000](https://github.com/ClickHouse/ClickHouse/pull/104000) ([nihalzp](https://github.com/nihalzp)).
* Se reduce la sobrecarga por consulta en consultas SELECT sencillas (análisis sintáctico, análisis y planificación). Por ejemplo, `SELECT count() FROM hits` desde una única conexión es aproximadamente un 50 % más rápido. [#104513](https://github.com/ClickHouse/ClickHouse/pull/104513) ([Algunenano](https://github.com/Algunenano)).
* Se mejoró el rendimiento de `bitmapContains` para estados `groupBitmap` distintos de `UInt64` al evitar llamadas repetidas a `rb_max` durante las comprobaciones de rango. [#105960](https://github.com/ClickHouse/ClickHouse/pull/105960) ([niyue](https://github.com/niyue)).
* Se mejoró el rendimiento de inserción para columnas `LowCardinality` con índices `bloom_filter`. [#106410](https://github.com/ClickHouse/ClickHouse/pull/106410) ([EmeraldShift](https://github.com/EmeraldShift)).
* Se mejoró el rendimiento de las funciones `L2DistanceTransposed` y `cosineDistanceTransposed` para el tipo de datos `QBit`. [#106701](https://github.com/ClickHouse/ClickHouse/pull/106701) ([rienath](https://github.com/rienath)).
* Se mejoró el rendimiento del análisis de consultas sobre tablas con muchas columnas al evitar calcular hashes de nodos de columna —que incluyen toda la expresión de la tabla de origen— cuando no es necesario. El análisis de subconsultas `SELECT *` anidadas sobre una tabla con \~1200 columnas ahora es unas 50 veces más rápido. [#106957](https://github.com/ClickHouse/ClickHouse/pull/106957) ([novikd](https://github.com/novikd)).
* Se mejoró el rendimiento de las funciones `encrypt`, `decrypt`, `tryDecrypt`, `aes_encrypt_mysql` y `aes_decrypt_mysql` hasta en un orden de magnitud, recuperando el rendimiento perdido durante la migración de BoringSSL a OpenSSL 3.x (24.4). [#107339](https://github.com/ClickHouse/ClickHouse/pull/107339) ([thevar1able](https://github.com/thevar1able)).
* Se mejoró la ejecución de `arrayElement` en `Array(LowCardinality(String))` y de las funciones LIKE para mapas con claves o valores `LowCardinality(String)` al evitar la materialización innecesaria de cadenas. [#107450](https://github.com/ClickHouse/ClickHouse/pull/107450) ([EmeraldShift](https://github.com/EmeraldShift)).
* Se redujo el uso de CPU y se mejoró el rendimiento de evaluación de índices de omisión en consultas que filtran columnas `DateTime64`. [#107707](https://github.com/ClickHouse/ClickHouse/pull/107707) ([shankar-iyer](https://github.com/shankar-iyer)).
* Se mejoró el rendimiento de las búsquedas de subcadenas que no distinguen entre mayúsculas y minúsculas, incluidas `positionCaseInsensitiveUTF8`, `ILIKE` y `multiSearchAnyCaseInsensitiveUTF8`. [#107882](https://github.com/ClickHouse/ClickHouse/pull/107882) ([Algunenano](https://github.com/Algunenano)).
* Se corrigió una regresión de rendimiento de aproximadamente un 16 % en el rendimiento del códec de coma flotante `FPC` en ARM, introducida cuando sus tablas de predictores empezaron a usar `VectorWithMemoryTracking`. [#108182](https://github.com/ClickHouse/ClickHouse/pull/108182) ([groeneai](https://github.com/groeneai)).
* Se corrigió una regresión de rendimiento por la que una sola eliminación ligera `DELETE` deshabilitaba la caché de condiciones de consulta de toda la tabla. Las consultas selectivas repetidas sobre una tabla que hubiera sido modificada mediante una eliminación ligera dejaban de descartar gránulos y pasaban a leer todas las marcas. [#112947](https://github.com/ClickHouse/ClickHouse/pull/112947) ([fm4v](https://github.com/fm4v)).
* Se limitó el coste de estimar la selectividad de `col IN (...)` a partir de las estadísticas de columnas, que podía añadir cientos de milisegundos a la planificación de una sola consulta. El estimador ya no ejecuta la subconsulta de `col IN (subquery)` para rellenar un conjunto del que solo necesita un valor de selectividad; en su lugar, omite los conjuntos no construidos. Para conjuntos con un tamaño superior al del nuevo ajuste `statistics_max_set_size_for_exact_selectivity_estimation` (10000 de forma predeterminada), la selectividad se deriva ahora del tamaño del conjunto y de los límites de su rango. [#114389](https://github.com/ClickHouse/ClickHouse/pull/114389) ([nickitat](https://github.com/nickitat)).

<h3 id="function-and-aggregation-performance">
  Rendimiento de funciones y agregaciones
</h3>

* Optimiza el análisis del índice de clave primaria para claves primarias largas y de alta cardinalidad. En el caso de una clave primaria larga, el tiempo de ejecución del análisis de índices depende ahora principalmente de la complejidad del filtro de la consulta —las columnas de clave que utiliza realmente—, y no de la longitud de la clave primaria. Por tanto, ampliar la clave de ordenación supone una sobrecarga adicional insignificante para el análisis de índices de consultas que filtran solo unas pocas de sus columnas. Para una clave primaria de alta cardinalidad, en la que ClickHouse conserva en memoria únicamente un prefijo selectivo de las columnas de clave y no carga las columnas finales, el análisis de índices ahora trabaja solo con ese prefijo en memoria en lugar de con toda la clave. La optimización está habilitada de forma predeterminada y se puede desactivar con el nuevo SETTING `use_lightweight_primary_key_index_analysis`. [#91836](https://github.com/ClickHouse/ClickHouse/pull/91836) ([nihalzp](https://github.com/nihalzp)).
* Reduce el uso máximo de memoria al fusionar resultados parciales de agregación de dos niveles con estados de agregación grandes (p. ej., `groupArray`), liberando de forma incremental los estados de origen de cada bucket durante la fusión, en lugar de mantenerlos todos activos hasta que finalice. [#102330](https://github.com/ClickHouse/ClickHouse/pull/102330) ([yurifedoseev](https://github.com/yurifedoseev)).
* Nueva optimización de `GROUP BY` para claves de alta cardinalidad distribuidas uniformemente, que distribuye las filas entre los hilos mediante el hash de la clave de agrupación, de modo que cada hilo agrega un subconjunto disjunto de claves sin necesidad de una fase de fusión. Establezca `enable_sharding_aggregator = 1` para habilitarla. [#104233](https://github.com/ClickHouse/ClickHouse/pull/104233) ([nihalzp](https://github.com/nihalzp)).
* Acelera las consultas `LIMIT BY` en tablas `MergeTree` particionadas ejecutando `LIMIT BY` en paralelo dentro del flujo de cada partición, en lugar de fusionar todos los flujos en uno antes de aplicar el límite. Esto se aplica cuando la expresión de partición es una función determinista de las columnas de `LIMIT BY`, de modo que ningún grupo de `LIMIT BY` puede abarcar dos particiones. Se controla mediante el nuevo SETTING `allow_limit_by_partitions_independently` (habilitado de forma predeterminada). [#105126](https://github.com/ClickHouse/ClickHouse/pull/105126) ([nihalzp](https://github.com/nihalzp)).
* Acelera las consultas `SELECT ... LIMIT N BY <cols>` cuando `<cols>` son un prefijo de la clave de ordenación de la tabla, o pasan a serlo después de que `WHERE col = const` fije las columnas iniciales. Con esta opción habilitada, `MergeTree` lee los datos en orden de clave primaria y `LIMIT BY` primero filtra en modo de flujo, con memoria O(1) por flujo ordenado, descartando la mayor parte de los datos; a continuación, ejecuta el `LIMIT BY` normal sobre los datos reducidos para obtener el resultado final. Se controla mediante el nuevo SETTING `optimize_limit_by_in_order` (habilitado de forma predeterminada). [#105135](https://github.com/ClickHouse/ClickHouse/pull/105135) ([nihalzp](https://github.com/nihalzp)).
* Acelera las consultas `LIMIT BY` eliminando expresiones de clave redundantes: se descarta una clave que es una función determinista de las demás claves (p. ej., `LIMIT 5 BY x, f(x)` pasa a ser `LIMIT 5 BY x`) y una función inyectiva de una clave se sustituye por su argumento (p. ej., `LIMIT 5 BY toString(x)` pasa a ser `LIMIT 5 BY x`). Esto permite evaluar menos expresiones y de menor coste por fila. Se controla mediante los nuevos SETTINGs `optimize_limit_by_function_keys` y `optimize_injective_functions_in_limit_by`, ambas habilitadas de forma predeterminada. [#106818](https://github.com/ClickHouse/ClickHouse/pull/106818) ([nihalzp](https://github.com/nihalzp)).
* Acelera el análisis de consultas con muchas llamadas a funciones o llamadas profundamente anidadas eliminando un hash redundante del árbol de consultas de la caché de resolución de funciones. [#107516](https://github.com/ClickHouse/ClickHouse/pull/107516) ([novikd](https://github.com/novikd)).
* Paraleliza el procesamiento del resultado de una CTE recursiva: una operación `GROUP BY` u otra operación sobre un resultado grande de `WITH RECURSIVE` ya no está limitada a un único hilo. [#107694](https://github.com/ClickHouse/ClickHouse/pull/107694) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="storage-and-io-performance">
  Rendimiento de almacenamiento y E/S
</h3>

* Los clientes de S3 con el mismo endpoint y bucket comparten una caché, lo que evita detectar regiones duplicadamente. [#96802](https://github.com/ClickHouse/ClickHouse/pull/96802) ([zvonand](https://github.com/zvonand)).
* Se mejoró el rendimiento de copia en el almacenamiento de objetos al copiar blobs en paralelo. [#105089](https://github.com/ClickHouse/ClickHouse/pull/105089) ([asya-ch](https://github.com/asya-ch)).
* Se evita leer el contenido de los archivos al usar el formato de entrada One con funciones de tabla de tipo archivo, como file y s3. [#105157](https://github.com/ClickHouse/ClickHouse/pull/105157) ([niyue](https://github.com/niyue)).
* La clave primaria de `MergeTree` y los índices de omisión ahora pueden descartar gránulos en filtros donde `ifNull` o `coalesce` envuelven una condición, como `ifNull(key = 0, 0)` o `coalesce(key = 0, 0)`. Estos predicados —que los generadores de consultas suelen emitir para convertir una comparación que podría devolver `NULL` en un valor booleano definido— antes eran opacos para el análisis de índices y no permitían omitir gránulos. Esto amplía el SETTING existente `allow_key_condition_coalesce_rewrite` (habilitado de forma predeterminada). [#106272](https://github.com/ClickHouse/ClickHouse/pull/106272) ([andyzzhao](https://github.com/andyzzhao)).
* Se mejoró el rendimiento de decodificación de las columnas Parquet `FLOAT` y `DOUBLE` codificadas con `BYTE_STREAM_SPLIT`. [#106376](https://github.com/ClickHouse/ClickHouse/pull/106376) ([Algunenano](https://github.com/Algunenano)).
* Se corrigieron bloqueos prolongados al iniciar sesión y al iniciar consultas con el almacenamiento de acceso replicado cuando se modifican a la vez muchas entidades de acceso (políticas de fila, roles, cuotas y perfiles de configuración). Cada caché por entidad ahora se recalcula una vez por lote de notificaciones, en lugar de una vez por cada entidad modificada, lo que elimina trabajo cuadrático que podía mantener bloqueado el acceso durante minutos. [#107672](https://github.com/ClickHouse/ClickHouse/pull/107672) ([azat](https://github.com/azat)).
* Se corrigió una regresión de rendimiento por la que la lectura de muchos archivos pequeños desde el almacenamiento de objetos mediante `s3` y otras funciones de tabla dejó de realizar prefetch y pasó a usar lecturas síncronas, ralentizando considerablemente las lecturas de muchos archivos pequeños en un solo hilo o con baja concurrencia. [#108872](https://github.com/ClickHouse/ClickHouse/pull/108872) ([fm4v](https://github.com/fm4v)).
* Se habilitó el prefetch inicial de objetos pequeños cuando las lecturas del almacenamiento de objetos pasan por la caché del sistema de archivos (`filesystem_cache_name`). Antes, las lecturas de muchos archivos pequeños, como la ingesta con `S3Queue`, seguían siendo síncronas y estaban limitadas por la latencia cuando la caché del sistema de archivos estaba habilitada. [#109478](https://github.com/ClickHouse/ClickHouse/pull/109478) ([fm4v](https://github.com/fm4v)).
* Se mejoró la optimización de `PREWHERE` para subcolumnas `Map` al tener en cuenta su tamaño en disco. [#110623](https://github.com/ClickHouse/ClickHouse/pull/110623) ([Avogar](https://github.com/Avogar)).
* La materialización diferida ahora se aplica a consultas con `FINAL`, un filtro y un `LIMIT` pequeño, incluso sin `ORDER BY` (para `ReplacingMergeTree`). [#110722](https://github.com/ClickHouse/ClickHouse/pull/110722) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Se redujo el tiempo de CPU dedicado a la deduplicación durante los vaciados de inserciones asíncronas que abarcan muchas particiones. [#111150](https://github.com/ClickHouse/ClickHouse/pull/111150) ([valerypetrov](https://github.com/valerypetrov)).
* Se corrigió una regresión de CPU en consultas que realizan muchas lecturas pequeñas e independientes de la misma parte de `MergeTree` cuando la tabla tiene columnas `LowCardinality`. La comprobación que determina si una parte tiene un único diccionario compartido examinaba cada marca de toda la parte en cada tarea de lectura; ahora localiza mediante búsqueda binaria cada secuencia de marcas iguales. Las consultas de este tipo en tablas con una `index_granularity` pequeña eran hasta varias veces más lentas desde la versión 26.6. [#116134](https://github.com/ClickHouse/ClickHouse/pull/116134) ([groeneai](https://github.com/groeneai)).

<h3 id="memory-optimization">
  Optimización de memoria
</h3>

* Se redujo hasta diez veces la memoria utilizada por los metadatos del tipo `Enum` en tablas con columnas `Enum`. Las búsquedas de valor a nombre se mantienen igual de rápidas o son más rápidas, mientras que las búsquedas de nombre a valor durante el análisis y la deserialización pueden ser más lentas. [#95668](https://github.com/ClickHouse/ClickHouse/pull/95668) ([qoega](https://github.com/qoega)).
* Se redujo el uso máximo de memoria de `BACKUP` al dejar de copiar la lista interna de información de archivos al escribir entradas de copia de seguridad (algo significativo para copias de seguridad que contienen millones de archivos). [#111162](https://github.com/ClickHouse/ClickHouse/pull/111162) ([jkartseva](https://github.com/jkartseva)).

<h2 id="improvements">
  Mejoras
</h2>

<h3 id="query-and-sql-improvements">
  Consultas y SQL
</h3>

* Identifica las columnas por posición (en lugar de por nombre) al eliminar columnas no utilizadas del plan de consulta. Esto permite eliminar columnas no utilizadas cuando existen nombres de columna duplicados. [#100586](https://github.com/ClickHouse/ClickHouse/pull/100586) ([antaljanosbenjamin](https://github.com/antaljanosbenjamin)).
* Se añadió `SESSION_USER` como alias de `currentUser()` que no distingue entre mayúsculas y minúsculas, para lograr compatibilidad con PostgreSQL y el estándar SQL. [#106081](https://github.com/ClickHouse/ClickHouse/pull/106081) ([takumihara](https://github.com/takumihara)).
* Se redujo la latencia de cancelación de las consultas ejecutadas mediante el protocolo de red de PostgreSQL: KILL QUERY ahora interrumpe la serialización de salida dentro de un único fragmento, en lugar de esperar a que se envíe el fragmento completo al cliente. [#106535](https://github.com/ClickHouse/ClickHouse/pull/106535) ([rvasin](https://github.com/rvasin)).
* Corrige un error `ILLEGAL_TYPE_OF_ARGUMENT` en consultas distribuidas con `serialize_query_plan = 1` que contienen una lambda con un argumento constante (p. ej., `arrayMap(t -> t.2, ...)`). Las columnas constantes de los nodos `INPUT` de `ActionsDAG` ahora se conservan durante la serialización del plan de consulta. [#107124](https://github.com/ClickHouse/ClickHouse/pull/107124) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se redujo la latencia de cancelación de las consultas ejecutadas mediante el protocolo de red de MySQL: KILL QUERY ahora interrumpe la serialización de salida dentro de un único fragmento, en lugar de esperar a que se envíe el fragmento completo al cliente. [#107228](https://github.com/ClickHouse/ClickHouse/pull/107228) ([rvasin](https://github.com/rvasin)).

<h3 id="functions-improvements">
  Funciones
</h3>

* `EXPLAIN SYNTAX` ahora representa de forma coherente los operadores como llamadas a funciones en la salida de explicación (por ejemplo, `plus(1, 2)` en lugar de `1 + 2`). [#94681](https://github.com/ClickHouse/ClickHouse/pull/94681) ([1abdelhalim](https://github.com/1abdelhalim)).
* Ahora se admite la sintaxis de estilo PostgreSQL `expr OP SOME(array)` / `expr OP ALL(array)` (con un lado derecho que no es una subconsulta) y se reescribe como `has` / `NOT has` para `=`/`<>`, o como lambdas `arrayExists` / `arrayAll` para otros operadores de comparación. No se acepta `ANY` en la forma de array porque `any` también es una función de agregación; use `SOME` en su lugar. La forma de subconsulta de `ANY`/`SOME`/`ALL` sigue convirtiéndose en `IN` / `NOT IN`. [#105129](https://github.com/ClickHouse/ClickHouse/pull/105129) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se añadió compatibilidad con las funciones `multiSearchAny`, `multiSearchAnyUTF8` y `multiMatchAny` en los índices de texto. También se mejoró el análisis de índices de texto para la función `match`: ahora los patrones con grupos alternativos pueden omitir más gránulos. [#106279](https://github.com/ClickHouse/ClickHouse/pull/106279) ([CurtizJ](https://github.com/CurtizJ)).
* La función `h3PolygonToCells` ahora aplica el límite máximo de tamaño de array al conjunto de polígonos de un `MultiPolygon`, valida los códigos de retorno de la biblioteca H3 subyacente y rechaza argumentos `MultiLineString` en lugar de devolver silenciosamente un resultado vacío. [#106399](https://github.com/ClickHouse/ClickHouse/pull/106399) ([Algunenano](https://github.com/Algunenano)).
* La deserialización de los estados de las funciones de agregación `contingency`, `cramersV`, `cramersVBiasCorrected` y `theilsU` ahora valida que los recuentos almacenados formen una tabla de contingencia coherente y, de lo contrario, genera una excepción `CORRUPTED_DATA`. [#107185](https://github.com/ClickHouse/ClickHouse/pull/107185) ([nihalzp](https://github.com/nihalzp)).
* Se mejora la estimación de cardinalidad en el optimizador del plan de consulta: una columna generada por una función determinista de un único argumento (por ejemplo, `toYear(date)`) ahora hereda como límite superior el número de valores distintos de su argumento, en lugar de quedar sin estadísticas, lo que permite una reordenación de joins más precisa. [#107757](https://github.com/ClickHouse/ClickHouse/pull/107757) ([davenger](https://github.com/davenger)).

<h3 id="table-engines-and-storage-improvements">
  Motores de tabla y almacenamiento
</h3>

* Corrige los consumidores del motor de tabla Kafka que seguían usando un intervalo de sondeo corto tras la asignación de particiones, para que vuelvan a usar el valor configurado de `kafka_poll_timeout_ms` y eviten sondeos vacíos excesivos, partes insertadas más pequeñas y sobrecarga adicional de fusión tras los reequilibrios. [#100431](https://github.com/ClickHouse/ClickHouse/pull/100431) ([sugaf1204](https://github.com/sugaf1204)).
* Los motores de tabla para lagos de datos, incluidos `Iceberg` y `DeltaLake`, ahora pueden usar discos S3 y Azure con caché, lo que permite que las lecturas repetidas utilicen la caché del sistema de archivos. [#102017](https://github.com/ClickHouse/ClickHouse/pull/102017) ([RinChanNOWWW](https://github.com/RinChanNOWWW)).
* Permite fusionar con el PREWHERE existente, en una segunda pasada del optimizador, los filtros introducidos después de la selección PREWHERE inicial (pushdown de predicados, filtros de tiempo de ejecución o un PREWHERE explícito junto con un WHERE establecido por el planificador), en lugar de mantenerlos como un paso Filter independiente sobre la lectura de MergeTree. [#105445](https://github.com/ClickHouse/ClickHouse/pull/105445) ([yariks5s](https://github.com/yariks5s)).
* Se añadió el SETTING `wait_for_part_commit_in_dependent_materialized_views`. Cuando está habilitada, una vista materializada en cascada que se vuelve a unir a su origen puede ver la fila que se está insertando. [#105943](https://github.com/ClickHouse/ClickHouse/pull/105943) ([ahmadov](https://github.com/ahmadov)).
* Compatibilidad con PostgreSQL para `EXTRACT(TIMEZONE_HOUR FROM dt)` y `EXTRACT(TIMEZONE_MINUTE FROM dt)`, que extraen las partes de hora y minuto de un desplazamiento de zona horaria, y para `EXTRACT(<unit> FROM INTERVAL n <unit>)` / `date_part('<unit>', INTERVAL n <unit>)`, que extraen el valor de un intervalo. [#106227](https://github.com/ClickHouse/ClickHouse/pull/106227) ([vinayakj592](https://github.com/vinayakj592)).
* Se implementó `SYSTEM RESTART DISK <name>`: ahora recarga los metadatos de un disco en memoria y vuelve a examinar las partes de datos de las tablas de réplicas de solo lectura ubicadas en él. Esto permite que una réplica de solo lectura de una tabla en almacenamiento compartido `plain_rewritable` detecte, bajo demanda, los datos escritos por otro servidor, sin esperar a `refresh_parts_interval` ni reiniciar el servidor. [#106645](https://github.com/ClickHouse/ClickHouse/pull/106645) ([jrdi](https://github.com/jrdi)).
* Omite cargas innecesarias de archivos de marcas para datos compartidos avanzados de JSON. [#107051](https://github.com/ClickHouse/ClickHouse/pull/107051) ([Avogar](https://github.com/Avogar)).
* Se añadió el SETTING, aplicable al momento de creación, `materialized_postgresql_use_extended_date_and_time_types` para el motor de base de datos `MaterializedPostgreSQL`. De forma predeterminada (habilitada), las columnas `date`/`timestamp` de PostgreSQL se infieren como `Date32`/`DateTime64`; establecerla en `0` al ejecutar `CREATE DATABASE` infiere los tipos más restringidos `Date`/`DateTime`. El SETTING no es aplicable al motor de tabla `MaterializedPostgreSQL`. [#107428](https://github.com/ClickHouse/ClickHouse/pull/107428) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* MergeTree ahora puede leer un flujo comprimido cuyos bloques usan códecs diferentes. Este es el requisito previo en el lado de lectura para la selección adaptativa de códecs. [#108592](https://github.com/ClickHouse/ClickHouse/pull/108592) ([rienath](https://github.com/rienath)).
* Usa el índice de omisión `bloom_filter` para predicados `IN` en una columna indexada directamente cuando `transform_null_in = 1` y el conjunto `IN` no contiene ningún valor `NULL`. Antes, el índice se omitía en estas consultas, lo que obligaba a realizar un escaneo completo. [#111329](https://github.com/ClickHouse/ClickHouse/pull/111329) ([groeneai](https://github.com/groeneai)).

<h3 id="s3-and-object-storage-improvements">
  S3 y almacenamiento de objetos
</h3>

* Registra los privilegios en `system.query_log.used_privileges` para todas las comprobaciones de acceso concedidas, incluidas las que siguen la ruta `isGranted` que no genera excepciones (`checkAccessWithFilter`). Anteriormente, solo se registraban los privilegios comprobados mediante puntos de entrada que generan excepciones (`checkAccess` / `checkGrantOption`), por lo que `READ ON FILE` / `READ ON S3` / `READ ON AZURE` / `READ ON URL` no aparecían en el registro de auditoría de consultas `DESCRIBE`, `CREATE TABLE AS` y similares que usan las funciones de tabla `file` / `s3` / `azure` / `url`. La aplicación del control de acceso no cambia. [#104693](https://github.com/ClickHouse/ClickHouse/pull/104693) ([alexbakharew](https://github.com/alexbakharew)).
* Completa de forma asíncrona la solicitud final de carga multiparte de S3 mediante el rastreador de tareas, de modo que pueda solaparse con la carga de la última parte en lugar de ejecutarse secuencialmente durante la finalización. [#105487](https://github.com/ClickHouse/ClickHouse/pull/105487) ([asya-ch](https://github.com/asya-ch)).
* Se aumentó de una a seis horas la configuración predeterminada de `persistent_processing_node_ttl_seconds` para `S3Queue` y `AzureQueue`, lo que evita que los procesos de larga duración o reiniciados pierdan el bloqueo del bucket demasiado pronto. [#106838](https://github.com/ClickHouse/ClickHouse/pull/106838) ([kssenii](https://github.com/kssenii)).
* Admite los valores `REDUCED_REDUNDANCY`, `STANDARD_IA`, `ONEZONE_IA`, `GLACIER_IR` y `EXPRESS_ONEZONE` (además de `STANDARD` e `INTELLIGENT_TIERING`) para la configuración `s3_storage_class_name`. [#107251](https://github.com/ClickHouse/ClickHouse/pull/107251) ([adityaksolves](https://github.com/adityaksolves)).
* La ruta de ejemplo de particionamiento Hive para tablas de almacenamiento de objetos (p. ej., `S3`) se resuelve al usar la tabla por primera vez, en lugar de durante `CREATE`/`ATTACH`, por lo que un endpoint inaccesible ya no bloquea la creación de tablas ni el inicio del servidor. [#111842](https://github.com/ClickHouse/ClickHouse/pull/111842) ([evillique](https://github.com/evillique)).

<h3 id="settings-and-configuration-improvements">
  Ajustes y configuración
</h3>

* Hacer que la estrategia de partición Hive sea la predeterminada en la configuración de compatibilidad `file_like_engine_default_partition_strategy`. [#86746](https://github.com/ClickHouse/ClickHouse/pull/86746) ([kssenii](https://github.com/kssenii)).
* Se añadieron cuatro nuevas configuraciones de tabla MergeTree para controlar los parámetros predeterminados de los índices de texto: `text_index_dictionary_block_size`, `text_index_dictionary_block_frontcoding_compression`, `text_index_posting_list_block_size` y `text_index_posting_list_codec`. Estas configuraciones permiten ajustar el comportamiento de los índices de texto a nivel de tabla sin especificar parámetros en cada definición de índice. Los argumentos explícitos de cada índice siguen teniendo prioridad. [#100626](https://github.com/ClickHouse/ClickHouse/pull/100626) ([CurtizJ](https://github.com/CurtizJ)).
* Añadir la configuración `output_format_pretty_use_nbsp_for_padding` para representar el relleno del diseño de tabla en los formatos `Pretty` de estilo tabular mediante el ESPACIO DE NO SEPARACIÓN `U+00A0` cuando `output_format_pretty_grid_charset` sea `UTF-8`. Esto ayuda a que la salida `Pretty` copiada conserve la alineación de las tablas en herramientas que contraen los espacios normales. La configuración está deshabilitada de forma predeterminada y la salida con el juego de caracteres `ASCII` conserva los espacios normales. [#103559](https://github.com/ClickHouse/ClickHouse/pull/103559) ([ashrithb](https://github.com/ashrithb)).
* Admitir la compatibilidad con el analizador anterior mediante la configuración `analyzer_compatibility_allow_non_aggregate_in_having`. Si está habilitada, las condiciones sin agregación se moverán de HAVING a WHERE. [#104232](https://github.com/ClickHouse/ClickHouse/pull/104232) ([novikd](https://github.com/novikd)).
* `OPTIMIZE TABLE ... ON CLUSTER` y otras instrucciones DDL ya no se bloquean cuando la tabla de destino tiene `table_readonly = 1`. La configuración ahora genera un nuevo código de error específico, `TABLE_IS_PERMANENTLY_READ_ONLY`, que `DDLWorker` trata como no reintentable (a diferencia de `TABLE_IS_READ_ONLY`, un error transitorio que se produce durante desconexiones temporales de ZooKeeper en `ReplicatedMergeTree`). La configuración `table_readonly` también se rechaza ahora explícitamente para `ReplicatedMergeTree`, tanto durante la creación como mediante `ALTER MODIFY SETTING`. [#105109](https://github.com/ClickHouse/ClickHouse/pull/105109) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* El orden descendente en las claves de ordenación de `MergeTree` (p. ej., `ORDER BY (time DESC, key)`) ahora siempre es compatible y ya no requiere la configuración experimental `allow_experimental_reverse_key`, que ha quedado obsoleta. [#106440](https://github.com/ClickHouse/ClickHouse/pull/106440) ([nikitamikhaylov](https://github.com/nikitamikhaylov)).
* Admitir `keyed_by_normalized_query_hash` para las cuotas definidas en la configuración estática del servidor (`users.xml`), en consonancia con la sintaxis DDL existente `CREATE QUOTA ... KEYED BY normalized_query_hash`. [#107654](https://github.com/ClickHouse/ClickHouse/pull/107654) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* La configuración de compatibilidad ya no aplica configuraciones obsoletas, por lo que no las marca como modificadas ni genera advertencias sobre ellas. [#107737](https://github.com/ClickHouse/ClickHouse/pull/107737) ([UberDever](https://github.com/UberDever)).
* Se añadió la configuración `analyzer_compatibility_multiple_joins_qualify_column_names` (valor predeterminado: `false`). Cuando está habilitada y la cláusula `FROM` de una consulta contiene dos o más `JOIN`, los nombres de las columnas de resultado generados por el analizador imitan la reescritura de múltiples JOIN del analizador anterior: las columnas expandidas desde `*` se denominan `<alias-or-table>.<column>`, y una referencia a una columna sin alias en la lista `SELECT` conserva el nombre exactamente como se escribió. Esto permite que las consultas externas que hacen referencia a esos nombres cualificados, como `SELECT ll.Date FROM (SELECT * FROM t AS ll JOIN t1 ON ... JOIN t2 ON ...)`, funcionen como lo hacían con el analizador anterior. También se corrigió un problema por el que el analizador perdía los nombres cualificados de las columnas de resultado expandidas desde `*` cuando `group_by_use_nulls` se combinaba con `ROLLUP`, `CUBE` o `GROUPING SETS`, lo que producía nombres de columnas de resultado duplicados e impedía las referencias externas a esas columnas. [#110746](https://github.com/ClickHouse/ClickHouse/pull/110746) ([novikd](https://github.com/novikd)).
* Se añadió la configuración `analyzer_compatibility_apply_final_to_all_joined_tables`, que restaura el comportamiento anterior: el modificador `FINAL` de la tabla situada más a la izquierda de un JOIN también se aplicaba a las demás tablas combinadas. La configuración se registra en el historial de cambios de configuración, por lo que `compatibility` con versiones anteriores a la 26.6 restaura automáticamente la semántica anterior. [#111589](https://github.com/ClickHouse/ClickHouse/pull/111589) ([fm4v](https://github.com/fm4v)).
* Se añadió una nueva configuración de MergeTree, `text_index_version`, que controla la versión del formato en disco de los índices de texto: `v0_initial`, `v1_with_codec` o `v2_with_positions`. Durante una actualización progresiva o antes de una reversión de versión, establézcala en una versión anterior para que los servidores más recientes sigan escribiendo partes de índices de texto en un formato que los servidores más antiguos aún puedan leer; la configuración de compatibilidad la ajusta automáticamente. [#111803](https://github.com/ClickHouse/ClickHouse/pull/111803) ([CurtizJ](https://github.com/CurtizJ)).

<h3 id="system-tables-and-monitoring-improvements">
  Tablas del sistema y monitorización
</h3>

* Rellena `used_storages` en `system.query_log` con el nombre del motor de almacenamiento al consultar tablas a través de DataLakeCatalog. [#100706](https://github.com/ClickHouse/ClickHouse/pull/100706) ([melvynator](https://github.com/melvynator)).
* Añade las columnas `current_projection`, `current_projection_progress`, `projections_completed` y `projections_remaining` a `system.merges` para mostrar el progreso de fusión de las proyecciones. [#102611](https://github.com/ClickHouse/ClickHouse/pull/102611) ([amosbird](https://github.com/amosbird)).
* Los motores de tabla ahora incluyen documentación integrada, que puede consultarse mediante las nuevas columnas `description`, `syntax`, `examples`, `introduced_in` y `related` de la tabla `system.table_engines`. [#106177](https://github.com/ClickHouse/ClickHouse/pull/106177) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Los motores de base de datos ahora incluyen documentación integrada, que puede consultarse mediante las nuevas columnas `description`, `syntax`, `examples`, `introduced_in` y `related` de la tabla `system.database_engines`. [#106178](https://github.com/ClickHouse/ClickHouse/pull/106178) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Los tipos de datos ahora incluyen documentación integrada, que puede consultarse mediante las nuevas columnas `description`, `syntax`, `examples`, `introduced_in` y `related` de la tabla `system.data_type_families`. [#106180](https://github.com/ClickHouse/ClickHouse/pull/106180) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Los formatos de entrada/salida ahora incluyen documentación integrada, que puede consultarse mediante las nuevas columnas `description`, `examples`, `introduced_in` y `related` de la tabla `system.formats`. [#106181](https://github.com/ClickHouse/ClickHouse/pull/106181) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Los combinadores de funciones de agregación ahora incluyen documentación integrada, que puede consultarse mediante las nuevas columnas `description`, `syntax`, `examples`, `introduced_in` y `related` de la tabla `system.aggregate_function_combinators`. [#106185](https://github.com/ClickHouse/ClickHouse/pull/106185) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se añadió una nueva tabla `system.data_skipping_index_types` que enumera los tipos de índices de omisión de datos disponibles, junto con su documentación integrada (`description`, `syntax`, `examples`, `introduced_in`, `related`). [#106186](https://github.com/ClickHouse/ClickHouse/pull/106186) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se añadió una nueva tabla `system.disk_types` que enumera los tipos de disco disponibles, junto con su documentación integrada (`description`, `syntax`, `examples`, `introduced_in`, `related`). [#106187](https://github.com/ClickHouse/ClickHouse/pull/106187) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se añadieron las métricas asíncronas `TotalUncompressedBytesOfMergeTreeTables` y `TotalUncompressedBytesOfMergeTreeTablesSystem`, que informan del tamaño total sin comprimir de los datos almacenados en tablas de la familia MergeTree. [#106364](https://github.com/ClickHouse/ClickHouse/pull/106364) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Añade el evento de perfil `GlobalMemoryLimitExceeded` para que los operadores puedan supervisar cuándo se alcanza el límite de memoria de todo el servidor. [#106466](https://github.com/ClickHouse/ClickHouse/pull/106466) ([sacheendra](https://github.com/sacheendra)).
* Se añadieron las métricas asíncronas `ExecutableUserDefinedFunctionMemoryResidentBytes` y `ExecutableUserDefinedFunctionProcesses`, que informan sobre la memoria residente (`VmRSS`) y el número de procesos en ejecución de las funciones definidas por el usuario `executable` y `executable_pool`, incluidos los procesos descendientes y los trabajadores inactivos del grupo. [#107300](https://github.com/ClickHouse/ClickHouse/pull/107300) ([HanziJiang](https://github.com/HanziJiang)).
* Se añadió `show_remote_databases_in_system_tables`, habilitado de forma predeterminada, para que los usuarios puedan ocultar las bases de datos `MySQL` y `PostgreSQL` de `system.tables`, `system.columns` y `system.completions`. `show_data_lake_catalogs_in_system_tables` sigue controlando únicamente la visibilidad de `DataLakeCatalog`. [#104416](https://github.com/ClickHouse/ClickHouse/pull/104416) ([pamarcos](https://github.com/pamarcos)). [#109082](https://github.com/ClickHouse/ClickHouse/pull/109082) ([pamarcos](https://github.com/pamarcos)).

<h3 id="clickhouse-keeper-improvements">
  ClickHouse Keeper
</h3>

* Diversos cambios en Keeper que lo hacen aproximadamente el doble de rápido en general (mejor procesamiento por lotes, canalización de mensajes al líder y de adiciones al log). [#101757](https://github.com/ClickHouse/ClickHouse/pull/101757) ([al13n321](https://github.com/al13n321)).
* Añade más eventos del perfil de Keeper, tanto del lado del servidor como del client, para watches. [#105336](https://github.com/ClickHouse/ClickHouse/pull/105336) ([scanhex12](https://github.com/scanhex12)).
* Añade una nueva tabla `system.keeper_snapshots`, exclusiva de Keeper, con información sobre snapshots locales de ClickHouse Keeper. [#105571](https://github.com/ClickHouse/ClickHouse/pull/105571) ([mstetsyuk](https://github.com/mstetsyuk)).
* Añade una nueva tabla `system.keeper_changelogs`, exclusiva de Keeper, con información sobre archivos de changelog locales de ClickHouse Keeper (log de Raft). [#105617](https://github.com/ClickHouse/ClickHouse/pull/105617) ([mstetsyuk](https://github.com/mstetsyuk)).
* Añade una tabla `system.keeper_cluster` exclusiva de Keeper. Contiene una fila por cada miembro del clúster de Raft según lo ve el Keeper actual. [#105646](https://github.com/ClickHouse/ClickHouse/pull/105646) ([mstetsyuk](https://github.com/mstetsyuk)).
* Reduce el uso máximo de memoria al aplicar snapshots recibidos en ClickHouse Keeper con `KeeperMemoryStorage`. [#105851](https://github.com/ClickHouse/ClickHouse/pull/105851) ([antonio2368](https://github.com/antonio2368)).
* Añade `coordination_settings` de Keeper para limitar la admisión de entradas de log no confirmadas de `NuRaft` y aplicar throttling a los sondeos inversos de append-entries. [#106108](https://github.com/ClickHouse/ClickHouse/pull/106108) ([antonio2368](https://github.com/antonio2368)).

<h3 id="memory-management-improvements">
  Gestión de memoria
</h3>

* Se corrigieron mensajes de error de sintaxis que podían incluir bytes de memoria adyacente después de que el analizador retrocediera más allá del final de una instrucción. [#105086](https://github.com/ClickHouse/ClickHouse/pull/105086) ([groeneai](https://github.com/groeneai)).
* Se redujo el uso de memoria al abrir una copia de seguridad (para `RESTORE` o como base de un `BACKUP` incremental). Los metadatos de `.backup` ahora se analizan como un flujo en lugar de cargarse en un árbol de documentos XML en memoria, lo que evita asignar un árbol DOM de varios gigabytes en el caso de copias de seguridad grandes, especialmente incrementales. [#109107](https://github.com/ClickHouse/ClickHouse/pull/109107) ([jkartseva](https://github.com/jkartseva)).
* Se redujo el uso máximo de memoria al finalizar un `BACKUP`. Al escribir los metadatos de la copia de seguridad, ya no se copia la información de todos los archivos a un vector temporal (lo que, en copias de seguridad con millones de archivos, consumía transitoriamente varios gigabytes); ahora se recorre directamente. [#109861](https://github.com/ClickHouse/ClickHouse/pull/109861) ([jkartseva](https://github.com/jkartseva)).

<h3 id="data-formats-improvements">
  Formatos de datos
</h3>

* Ahora se pueden insertar campos Fixed de Avro para variantes de enteros de 8, 16, 32 y 64 bits. [#98139](https://github.com/ClickHouse/ClickHouse/pull/98139) ([patrickpichler](https://github.com/patrickpichler)).
* El formato `AvroConfluent` ahora reintenta el cliente HTTP de Confluent Schema Registry ante fallos transitorios (timeouts de transporte, conexión rechazada, errores de DNS y HTTP `5xx`/`408`/`429`) con backoff exponencial, en lugar de cancelar el INSERT ante el primer fallo de red. Los nuevos settings `format_avro_schema_registry_max_retries` (valor predeterminado: `5`) y `format_avro_schema_registry_retry_initial_backoff_ms` (valor predeterminado: `100`) controlan la política. Los errores de validación del esquema (HTTP `409` y JSON de Avro malformado) siguen siendo irrecuperables. [#106661](https://github.com/ClickHouse/ClickHouse/pull/106661) ([groeneai](https://github.com/groeneai)).
* Se conservaron los códigos de error originales de ClickHouse para los errores devueltos mediante Apache Arrow. [#107267](https://github.com/ClickHouse/ClickHouse/pull/107267) ([azat](https://github.com/azat)).

<h3 id="named-collections-and-dictionaries">
  Colecciones con nombre y diccionarios
</h3>

* Se añadió la configuración `enable_compression` para la función de tabla `mysql`, el motor de tabla `MySQL`, el motor de base de datos `MySQL`, el diccionario `SOURCE(MYSQL)` y las colecciones con nombre. Al habilitarla, ClickHouse negocia la compresión a nivel de protocolo MySQL para todos los datos transferidos a través de la conexión. [#103229](https://github.com/ClickHouse/ClickHouse/pull/103229) ([bernardlim](https://github.com/bernardlim)).
* Se añadió una nueva tabla `system.dictionary_layouts` que enumera las estructuras de diccionario disponibles junto con documentación integrada (`description`, `syntax`, `examples`, `introduced_in`, `related`). [#106182](https://github.com/ClickHouse/ClickHouse/pull/106182) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se añadió una nueva tabla `system.dictionary_sources` que enumera las fuentes de diccionario disponibles junto con documentación integrada (`description`, `syntax`, `examples`, `introduced_in`, `related`). [#106184](https://github.com/ClickHouse/ClickHouse/pull/106184) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* El tipo de almacenamiento efectivo de las colecciones con nombre ya está disponible como `named_collections_storage.type` en `system.server_settings` y mediante `getServerSetting('named_collections_storage_type')`. [#111806](https://github.com/ClickHouse/ClickHouse/pull/111806) ([pamarcos](https://github.com/pamarcos)).

<h3 id="other-improvements">
  Otras mejoras
</h3>

* Se mejoraron las sugerencias de nombres de tablas en los mensajes de error: ya no sugieren exactamente el mismo nombre e incluyen el nombre de la base de datos (p. ej., "¿Quizás quiso decir other\_db.my\_table?"). [#95116](https://github.com/ClickHouse/ClickHouse/pull/95116) ([matt-metivier](https://github.com/matt-metivier)).
* Se mejoró el mensaje de error para identificadores no resueltos en consultas sin cláusula FROM, sugiriendo añadir una. [#101769](https://github.com/ClickHouse/ClickHouse/pull/101769) ([Onyx2406](https://github.com/Onyx2406)).
* Se corrigió un problema por el que `PREWHERE` con una subconsulta `IN` en columnas de clave primaria no usaba el índice de clave primaria para la poda de gránulos, lo que provocaba escaneos completos de tabla en lugar de leer solo los gránulos relevantes. [#102570](https://github.com/ClickHouse/ClickHouse/pull/102570) ([nikitamikhaylov](https://github.com/nikitamikhaylov)).
* Las vistas materializadas actualizables ahora continúan actualizándose después de reemplazar su tabla de destino mediante `EXCHANGE TABLES` y eliminar la tabla antigua. Anteriormente, las actualizaciones podían fallar con una excepción `UNKNOWN_TABLE` porque conservaban el UUID de la tabla antigua. [#102724](https://github.com/ClickHouse/ClickHouse/pull/102724) ([seva-potapov](https://github.com/seva-potapov)).
* Se activa `enable_join_transitive_predicates` de forma predeterminada. [#103724](https://github.com/ClickHouse/ClickHouse/pull/103724) ([davenger](https://github.com/davenger)).
* La vista materializada actualizable ahora admite `REFRESH DEPENDS ON` para desencadenar actualizaciones al actualizarse otra RMV, en lugar de según una programación basada en tiempo. (`REFRESH EVERY ... DEPENDS ON` ya existía, pero no se podía usar de forma fiable para este caso de uso). Consulte la documentación de CREATE MATERIALIZED VIEW. [#104440](https://github.com/ClickHouse/ClickHouse/pull/104440) ([al13n321](https://github.com/al13n321)).
* Se añade la opción `EXPLAIN PIPELINE` para compactar cadenas repetidas de procesadores. [#104662](https://github.com/ClickHouse/ClickHouse/pull/104662) ([niyue](https://github.com/niyue)).
* Se añadió `REGEXP_SUBSTR` como alias de `regexpExtract` que no distingue entre mayúsculas y minúsculas, para compatibilidad con Oracle/MySQL/Snowflake. [#105122](https://github.com/ClickHouse/ClickHouse/pull/105122) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se añadió `date_part('unit', expr)` como azúcar sintáctico para `EXTRACT(unit FROM expr)`. Se admiten todos los tipos de intervalos estándar y los adicionales de PostgreSQL (`epoch`, `dow`, `doy`, `isodow`, `isoyear`, `century`, `decade`, `millennium`). [#105127](https://github.com/ClickHouse/ClickHouse/pull/105127) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `QueryConditionCache` ahora registra individualmente los gránulos descartados por el filtro, incluso dentro de lotes de lectura que superan parcialmente PREWHERE, lo que reduce el número de marcas que las consultas posteriores con la misma condición deben volver a leer. [#105335](https://github.com/ClickHouse/ClickHouse/pull/105335) ([hanfei1991](https://github.com/hanfei1991)).
* Se añade compatibilidad con BFloat16 para funciones de predicados numéricos. [#105391](https://github.com/ClickHouse/ClickHouse/pull/105391) ([mohhddhassan](https://github.com/mohhddhassan)).
* Se admiten estadísticas básicas, una estadística compacta por columna que almacena mínimos y máximos numéricos, la longitud media de las cadenas y recuentos de NULL cuando corresponde. [#106048](https://github.com/ClickHouse/ClickHouse/pull/106048) ([hanfei1991](https://github.com/hanfei1991)).
* Se admite un modificador `NULL` / `NOT NULL` al final de `ALTER TABLE ... ADD/MODIFY COLUMN`, al igual que en `CREATE TABLE`. [#106150](https://github.com/ClickHouse/ClickHouse/pull/106150) ([takumihara](https://github.com/takumihara)).
* El optimizador PREWHERE ahora agrupa los conjunciones que hacen referencia al mismo conjunto de columnas antes de estimar la selectividad, de modo que condiciones como `a > 2500 AND a < 2502` se evalúan conjuntamente como un rango combinado (\~0,02 % de selectividad), en lugar de como dos predicados independientes (\~50 % cada uno). Esto permite ordenar con mayor precisión las condiciones PREWHERE cuando hay estadísticas de columnas disponibles. [#106337](https://github.com/ClickHouse/ClickHouse/pull/106337) ([hanfei1991](https://github.com/hanfei1991)).
* No se muestra el preámbulo "Stack trace (when copying this message, always include the lines below):" en los mensajes de excepción cuando el stack trace está vacío. [#106524](https://github.com/ClickHouse/ClickHouse/pull/106524) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corregido `CREATE TABLE ... CLONE AS (and REPLACE / ATTACH PARTITION ... FROM)` en discos cifrados para que copie datos en lugar de crear enlaces físicos. [#106731](https://github.com/ClickHouse/ClickHouse/pull/106731) ([nikitamikhaylov](https://github.com/nikitamikhaylov)).
* Corregida la lectura de datos de tablas en bases de datos `DataLakeCatalog` con `catalog_type = 'onelake'` mediante el uso predeterminado del endpoint Blob de OneLake (`.blob.fabric.microsoft.com`). Establezca `onelake_use_blob_endpoint = false` para conservar el comportamiento anterior del endpoint DFS (`.dfs.fabric.microsoft.com`). [#106843](https://github.com/ClickHouse/ClickHouse/pull/106843) ([scanhex12](https://github.com/scanhex12)).
* Reducida la sobrecarga de CPU del registro asíncrono con tasas elevadas de registros al notificar al consumidor de registros solo cuando la cola pasa de estar vacía a no estarlo, en lugar de hacerlo con cada mensaje. [#107352](https://github.com/ClickHouse/ClickHouse/pull/107352) ([nikitamikhaylov](https://github.com/nikitamikhaylov)).
* Corregida la lectura de la longitud de `auth_response` en el handshake de MySQL, donde un byte de longitud `>= 128` se interpretaba como un valor de varios gigabytes porque se leía como un `char` con signo. [#107384](https://github.com/ClickHouse/ClickHouse/pull/107384) ([uwezkhan](https://github.com/uwezkhan)).
* `MaterializedPostgreSQL` ahora asigna las columnas de PostgreSQL `numeric(p, 0)` con una precisión superior a 76 (por ejemplo, `numeric(78, 0)`, utilizado para enteros de 256 bits) a `Int256` de ClickHouse, en lugar de generar el error "Precision too big". Los valores que no caben en `Int256` se rechazan con un error claro. [#107431](https://github.com/ClickHouse/ClickHouse/pull/107431) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `Nullable(Tuple(...))` ahora está en fase Beta. Está deshabilitado de forma predeterminada; establezca `enable_nullable_tuple_type = 1` para usarlo. [#107754](https://github.com/ClickHouse/ClickHouse/pull/107754) ([nihalzp](https://github.com/nihalzp)).
* Las inserciones asíncronas ya no registran la lista completa de `query_id` en el nivel `trace`/`debug`, lo que, desde la versión 26.2, podía saturar `text_log` en servicios con mucho tráfico de inserciones asíncronas. Las líneas detalladas ahora se registran en el nivel `test`. [#107852](https://github.com/ClickHouse/ClickHouse/pull/107852) ([CheSema](https://github.com/CheSema)).
* Reducido el uso de metadatos de la caché del sistema de archivos mediante la liberación rápida de las entradas de prioridad invalidadas. [#107903](https://github.com/ClickHouse/ClickHouse/pull/107903) ([kssenii](https://github.com/kssenii)).
* Un índice de omisión `bloom_filter` en una columna `Array` ahora se utiliza para `arrayJoin(column) IN (set)`, `arrayJoin(column) GLOBAL IN (set)` y `arrayJoin(column) = const`, igual que ya se utilizaba para `hasAny(column, set)` y `has(column, const)`. Anteriormente, estas formas de `arrayJoin ...` recurrían a un análisis completo. [#109536](https://github.com/ClickHouse/ClickHouse/pull/109536) ([groeneai](https://github.com/groeneai)).
* `IS NOT DISTINCT FROM` e `IS TRUE` ahora usan índices de clave primaria y minmax para descartar gránulos, igual que `=`. Anteriormente, `k IS NOT DISTINCT FROM 42` y `(k = 42) IS TRUE` escaneaban todos los gránulos. [#110006](https://github.com/ClickHouse/ClickHouse/pull/110006) ([groeneai](https://github.com/groeneai)).

<h2 id="bug-fixes">
  Correcciones de errores
</h2>

<h3 id="join-fixes">
  Correcciones de JOIN
</h3>

* Se corrigió la función `nested` (utilizada internamente por `ARRAY JOIN`), que eliminaba `LowCardinality` de los tipos de columna y provocaba que `Array(LowCardinality(String))` se convirtiera en `Array(String)` en la salida. [#98974](https://github.com/ClickHouse/ClickHouse/pull/98974) ([Onyx2406](https://github.com/Onyx2406)).
* Se corrigió la reordenación de joins que descartaba silenciosamente las filas sin coincidencia de un `RIGHT`/`LEFT JOIN` cuando se combinaba mediante comas (cross join) con otra tabla; por ejemplo, `t1 RIGHT JOIN t2 ON t1.c = t2.c, t3`. Anteriormente, la consulta devolvía el resultado de un inner join en lugar del de un outer join. [#101684](https://github.com/ClickHouse/ClickHouse/pull/101684) ([groeneai](https://github.com/groeneai)).
* Se corrigió un `LOGICAL_ERROR` ("Port is not connected", código 49) que podía producirse al ejecutar consultas que incluían una VIEW con agregación dentro de un JOIN. [#102574](https://github.com/ClickHouse/ClickHouse/pull/102574) ([Ergus](https://github.com/Ergus)).
* Se corrigió el problema por el que `max_rows_to_transfer` y `max_bytes_to_transfer` se ignoraban silenciosamente en consultas `GLOBAL IN` y `GLOBAL JOIN` con el nuevo analizador. Ahora, los ajustes generan `SET_SIZE_LIMIT_EXCEEDED` (o interrumpen la ejecución, según `transfer_overflow_mode`) cuando la tabla externa materializada supera el límite configurado, de acuerdo con el comportamiento del analizador antiguo. [#104119](https://github.com/ClickHouse/ClickHouse/pull/104119) ([groeneai](https://github.com/groeneai)).
* Se corrigieron resultados incorrectos o fallos de consulta en consultas `JOIN` que usan `join_algorithm = 'direct'` con una tabla `MergeTree` en el lado derecho cuando la optimización reordenaba las columnas de búsqueda. [#104174](https://github.com/ClickHouse/ClickHouse/pull/104174) ([groeneai](https://github.com/groeneai)).
* Se corrigió un error por el que las consultas que combinaban `arrayJoin` con `ORDER BY ... LIMIT` después de un `JOIN` podían devolver silenciosamente cero filas. La optimización del plan de consulta que eleva la evaluación de funciones por encima de `SortingStep` ya no se aplica cuando la expresión elevada contiene `arrayJoin`, ya que `arrayJoin` puede cambiar el número de filas. [#104558](https://github.com/ClickHouse/ClickHouse/pull/104558) ([groeneai](https://github.com/groeneai)).
* Se corrigió un error lógico en algunos casos de uso de `LIMIT BY` negativo con `ARRAY JOIN`. [#105403](https://github.com/ClickHouse/ClickHouse/pull/105403) ([nihalzp](https://github.com/nihalzp)).
* Se añadió un nuevo ajuste de compatibilidad, `analyzer_compatibility_prefer_alias_over_subcolumn` (deshabilitado de forma predeterminada). Cuando está habilitado, el nuevo analizador prefiere interpretar los identificadores de varias partes como prefijos de alias en lugar de como coincidencias con subcolumnas Tuple o columnas con puntos, restaurando el comportamiento del intérprete anterior. Esto evita errores `AMBIGUOUS_IDENTIFIER` (y relacionados) cuando una consulta une una tabla cuyo nombre coincide con el de una tabla interna de una CTE/subconsulta que usa `SELECT *` sobre un join, caso en el que las columnas renombradas mediante asterisco (por ejemplo, `b.id`) podrían filtrar los identificadores de la tabla interna al ámbito externo. [#105491](https://github.com/ClickHouse/ClickHouse/pull/105491) ([vdimir](https://github.com/vdimir)).
* Se corrigieron posibles resultados incorrectos en consultas que combinan un outer join con un inner join posterior que hace referencia al lado que aporta valores nulos del outer join. La reordenación de joins podía elegir un plan que incorporaba las condiciones del inner join en la cláusula ON del outer join. [#105992](https://github.com/ClickHouse/ClickHouse/pull/105992) ([vdimir](https://github.com/vdimir)).
* Se mejoró la compatibilidad con el analizador antiguo. Si la tabla tiene columnas como `x.a Array, x.b Array, x String`, se prefieren los arrays para `ARRAY JOIN x`. [#106069](https://github.com/ClickHouse/ClickHouse/pull/106069) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Se corrigió una excepción en consultas `INNER JOIN` con una tabla `MergeTree` vacía en el lado izquierdo cuando están habilitados `enable_parallel_replicas`, `query_plan_use_new_logical_join_step` y `query_plan_optimize_join_order_algorithm = 'greedy'`. [#106338](https://github.com/ClickHouse/ClickHouse/pull/106338) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Corrige un error lógico (`Left and right columns have same names`) en el optimizador del orden de JOIN que podía producirse en JOIN ejecutados con réplicas paralelas cuando dos relaciones del grafo de JOIN comparten nombres de columnas. [#106418](https://github.com/ClickHouse/ClickHouse/pull/106418) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige una excepción `LOGICAL_ERROR` (`Invalid number of rows in Chunk`) en `JoiningTransform` para un `LEFT JOIN` con claves únicas en el lado derecho, una condición `ON` mixta y un valor pequeño de `max_joined_block_size_rows`. [#106928](https://github.com/ClickHouse/ClickHouse/pull/106928) ([groeneai](https://github.com/groeneai)).
* Corrige una excepción (`LOGICAL_ERROR`) en el filtro en tiempo de ejecución de JOIN cuando la clave de JOIN contiene un tipo `Variant` o `Dynamic` anidado dentro de una `Tuple`, `Array` o `Map`, y el lado derecho del JOIN tiene un único valor distinto. [#106931](https://github.com/ClickHouse/ClickHouse/pull/106931) ([groeneai](https://github.com/groeneai)).
* Corrige un `LOGICAL_ERROR` (`Expected the argument N to have X rows, but it has Y`) al ejecutar una función sobre una columna `Dynamic` creada mediante un JOIN sobre `Dynamic` (por ejemplo, las filas no unidas de un `RIGHT`/`FULL JOIN` o una subconsulta `EXISTS` correlacionada que se descorrelaciona en un JOIN). [#107095](https://github.com/ClickHouse/ClickHouse/pull/107095) ([groeneai](https://github.com/groeneai)).
* Corrige una excepción de error lógico `Bad cast from type DB::IColumn const* to DB::ColumnNullable const*` cuando se pasa un asterisco calificado (`t.*`) sobre una clave `JOIN ... USING` a una función de agregación y el otro lado de un OUTER JOIN tiene una clave `Nullable` (con `join_use_nulls = 0`). [#107129](https://github.com/ClickHouse/ClickHouse/pull/107129) ([groeneai](https://github.com/groeneai)).
* Corrige un error lógico (`Unexpected return type from equals. Expected Nullable(UInt8). Got UInt8`) cuando la optimización de inserción de disyunciones (predicados parciales) inserta una condición sobre una clave `USING` cuyo tipo se amplía mediante el JOIN. También corrige un bloqueo del servidor (fallo de segmentación) en el analizador al resolver identificadores en consultas `JOIN ... USING` que contienen ramas `if`/`multiIf` evaluables como constantes que hacen referencia a identificadores desconocidos. [#107407](https://github.com/ClickHouse/ClickHouse/pull/107407) ([groeneai](https://github.com/groeneai)).
* Corrige el filtro en tiempo de ejecución de JOIN que producía resultados incorrectos para columnas JSON. [#107663](https://github.com/ClickHouse/ClickHouse/pull/107663) ([Avogar](https://github.com/Avogar)).
* Corrige una excepción de error lógico `Bad cast from type DB::ColumnNullable to DB::ColumnVector<...>` cuando un asterisco calificado (`t.*`) selecciona una clave `JOIN USING` y ese JOIN está anidado bajo un JOIN `PASTE`/`CROSS`/por coma o un JOIN `ON` externo, con `join_use_nulls = 0`. [#108043](https://github.com/ClickHouse/ClickHouse/pull/108043) ([groeneai](https://github.com/groeneai)).
* Corrige un error en el nuevo analizador por el que FINAL en una tabla de un JOIN (por ejemplo, `FROM t1 FINAL JOIN t2`) se aplicaba incorrectamente también a las demás tablas unidas, lo que podía ralentizar esas consultas. [#108979](https://github.com/ClickHouse/ClickHouse/pull/108979) ([vdimir](https://github.com/vdimir)).
* Con `analyzer_compatibility_join_using_top_level_identifier = 1`, ahora un identificador en `JOIN ... USING` puede resolverse a partir de un alias definido en una subexpresión dentro de la lista SELECT (por ejemplo, `SELECT uniqExact(lower(x) AS id) FROM t1 JOIN t2 USING (id)`), igualando el comportamiento del analizador antiguo. Anteriormente, solo se consideraban los alias de proyección de nivel superior, y estas consultas fallaban con una excepción `UNKNOWN_IDENTIFIER` incluso con la configuración habilitada. La sugerencia de error que recomienda habilitar esta configuración ahora también se genera cuando el alias coincidente está anidado. [#110739](https://github.com/ClickHouse/ClickHouse/pull/110739) ([novikd](https://github.com/novikd)).
* Se corrigió el error `INCOMPATIBLE_TYPE_OF_JOIN` en un join `ANY` sobre una tabla con engine `Join` cuando un filtro `WHERE` en una columna del lado derecho permitía al planificador de consultas reescribir el join como `SEMI` o `ANTI`. Las tablas con engine `Join` tienen una strictness declarada fija que no se puede cambiar, por lo que ahora se rechaza la conversión para estas tablas. [#111362](https://github.com/ClickHouse/ClickHouse/pull/111362) ([groeneai](https://github.com/groeneai)).
* Se corrigió `TYPE_MISMATCH` ("Key type for complex key ... does not match") cuando un `JOIN` con un diccionario utiliza una clave de join `Nullable`, `LowCardinality` o `LowCardinality(Nullable)` y la clave del diccionario no está envuelta. La búsqueda en diccionario de joins directos ahora normaliza la clave al tipo de clave declarado del diccionario (como ya hacen `dictGet`/`dictHas`), y una clave `NULL` nunca coincide. [#111857](https://github.com/ClickHouse/ClickHouse/pull/111857) ([groeneai](https://github.com/groeneai)).
* Se corrigió `AMBIGUOUS_COLUMN_NAME` (`Block structure mismatch in (columns with identical name must have identical structure)`) en una consulta que repite una condición `JOIN ON` en `WHERE` con `join_use_nulls = 1`. Ahora esta consulta devuelve su resultado en lugar de fallar. [#112007](https://github.com/ClickHouse/ClickHouse/pull/112007) ([groeneai](https://github.com/groeneai)).
* Se corrigieron resultados incorrectos o la finalización del servidor en `JOIN` directos con diccionarios cuya clave utiliza serialización dispersa. [#112327](https://github.com/ClickHouse/ClickHouse/pull/112327) ([groeneai](https://github.com/groeneai)).
* Se corrigieron resultados incorrectos cuando un hash join tiene una única clave `LowCardinality` de un tipo de más de 8 bytes (`UInt128`, `Int128`, `UInt256`, `Int256` y sus variantes `Nullable`). Este join devolvía silenciosamente filas cuyos valores de clave no eran iguales. [#113230](https://github.com/ClickHouse/ClickHouse/pull/113230) ([groeneai](https://github.com/groeneai)).
* Se corrigió la poda de partes y gránulos para una condición `JOIN ON` que implica columnas constantes del otro lado. [#113484](https://github.com/ClickHouse/ClickHouse/pull/113484) ([vdimir](https://github.com/vdimir)).
* Se corrigió un valor incorrecto devuelto para una columna virtual como `_table` o `_database`, seleccionada del lado derecho de un JOIN gestionado por `DirectKeyValueJoin` (un almacenamiento key-value como `EmbeddedRocksDB`, `KeeperMap`, `Redis` o un diccionario). En su lugar, la consulta devolvía el contenido de una columna de datos o fallaba con `LOGICAL_ERROR`. [#113698](https://github.com/ClickHouse/ClickHouse/pull/113698) ([groeneai](https://github.com/groeneai)).

<h3 id="query-and-analyzer-fixes">
  Correcciones en consultas y en el analizador
</h3>

* Corrige un error por el que splitMultipartQuery generaba el error "Consulta vacía" en consultas que terminaban con un comentario después de un punto y coma. [#85491](https://github.com/ClickHouse/ClickHouse/pull/85491) ([yariks5s](https://github.com/yariks5s)).
* Corrige el caso en el que el analizador sintáctico no aceptaba un alias después de una subconsulta en DESCRIBE TABLE y generaba un error de sintaxis. [#100205](https://github.com/ClickHouse/ClickHouse/pull/100205) ([yariks5s](https://github.com/yariks5s)).
* Corrige que la cláusula `FORMAT` fuera consumida por `INSERT` en lugar de aplicarse a la salida de `EXPLAIN` en `EXPLAIN INSERT INTO ... SELECT ... FORMAT ...`. [#101772](https://github.com/ClickHouse/ClickHouse/pull/101772) ([Onyx2406](https://github.com/Onyx2406)).
* Corrige que las consultas SELECT fueran significativamente más lentas cuando se ejecutaban INSERT simultáneos. Anteriormente, una canalización INSERT reservaba slots de CPU hasta `max_threads` al inicio de la consulta, incluso cuando la mayoría nunca se utilizaba, lo que privaba de recursos a los SELECT simultáneos. La asignación de slots de CPU ahora se realiza según la demanda: la canalización solo solicita slots a medida que envía trabajo paralelizable. Se aplica tanto al control de concurrencia como al planificador de CPU preventivo para cargas de trabajo. La nueva configuración del servidor `concurrent_threads_lazy_allocation` (valor predeterminado: `true`) sirve como mecanismo de reversión. [#102928](https://github.com/ClickHouse/ClickHouse/pull/102928) ([seva-potapov](https://github.com/seva-potapov)).
* Corrige un error por el que `ALTER TABLE ... MODIFY SETTING` en una tabla `EmbeddedRocksDB` podía persistir un valor de configuración no válido en el archivo de metadatos de la tabla, incluso cuando el servidor rechazaba la consulta. En el siguiente reinicio del servidor, la tabla no podía adjuntarse debido a `CANNOT_PARSE_BOOL` (o un error de análisis similar) y, en bases de datos donde los errores de carga son fatales, el servidor se negaba a iniciarse. Los valores de configuración no válidos ahora se rechazan antes de escribir metadatos. [#103417](https://github.com/ClickHouse/ClickHouse/pull/103417) ([groeneai](https://github.com/groeneai)).
* Corrige `INSERT` de streaming con `input_format_max_block_wait_ms` para la interfaz `HTTP` y para `INSERT SELECT FROM input`, de modo que los bloques de entrada parciales se vacíen antes de que finalice la solicitud. [#104534](https://github.com/ClickHouse/ClickHouse/pull/104534) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige que la expresión `CASE` devolviera la rama `ELSE` en lugar de la rama `THEN` correspondiente cuando tanto la expresión como un valor `WHEN` eran `NULL`. [#105556](https://github.com/ClickHouse/ClickHouse/pull/105556) ([Algunenano](https://github.com/Algunenano)).
* Corrige la compatibilidad con el uso de UDF de SQL de `WASM` en definiciones de `MATERIALIZED VIEW`. [#106161](https://github.com/ClickHouse/ClickHouse/pull/106161) ([niyue](https://github.com/niyue)).
* Corrige que `INTERPOLATE ()` generara `INVALID_WITH_FILL_EXPRESSION` cuando las columnas de ORDER BY tenían alias en la lista SELECT con el analizador anterior. [#106252](https://github.com/ClickHouse/ClickHouse/pull/106252) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* Las funciones `base58Encode`, `base58Decode` y `tryBase58Decode` ahora respetan `max_execution_time` y la cancelación de consultas con entradas grandes, y rechazan entradas de más de 10 KB en lugar de ejecutarse durante mucho tiempo. El límite se puede configurar mediante la nueva configuración `function_base58_max_input_size` (`0` lo desactiva). [#106428](https://github.com/ClickHouse/ClickHouse/pull/106428) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige un error que producía resultados incorrectos, por el que `WHERE c0 = const` no devolvía filas en tablas con `ORDER BY f(c0)` cuando `f(const)` se evalúa como NaN; por ejemplo, `ORDER BY sqrt(c0)` con una constante negativa. El análisis de la clave primaria descartaba incorrectamente todos los gránulos y contaminaba la caché de condiciones de consulta para consultas posteriores. [#106507](https://github.com/ClickHouse/ClickHouse/pull/106507) ([groeneai](https://github.com/groeneai)).
* Se corrigieron resultados incorrectos para `SELECT c, count() FROM t WHERE c GROUP BY c` en tablas con la `_minmax_count_projection` implícita, una proyección de agregación explícita o una proyección normal: todos los grupos se reducían a una sola fila con una clave constante y el número total de filas. [#106590](https://github.com/ClickHouse/ClickHouse/pull/106590) ([groeneai](https://github.com/groeneai)).
* Se hizo que `FORMAT` también se aplique a la salida de `EXPLAIN` de `EXPLAIN ... INSERT ... SELECT ... FORMAT ...` cuando `SETTINGS` precede a `FORMAT` o el formato de salida es `Values`. [#106686](https://github.com/ClickHouse/ClickHouse/pull/106686) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se corrigió un error espurio poco frecuente `RESOURCE_ACCESS_DENIED` ("Scheduler queue with resource request is about to be destructed") en una consulta a la que se había concedido acceso a un recurso de carga de trabajo, causado por la reutilización de un objeto de solicitud local al hilo que conservaba el fallo de una solicitud anterior. [#106690](https://github.com/ClickHouse/ClickHouse/pull/106690) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se corrigieron `match`, `extract`, `extractAll` y `countMatches`, que devolvían resultados incorrectos para expresiones regulares con secuencias de escape hexadecimales u octales. [#106709](https://github.com/ClickHouse/ClickHouse/pull/106709) ([ofeliacode](https://github.com/ofeliacode)).
* Se corrigió un desbordamiento por defecto de enteros en el analizador del protocolo de conexión PostgreSQL, donde un mensaje con un campo de longitud inferior a 4 provocaba que `size - 4` se desbordara y un `resize`/`ignore` de tamaño excesivo. [#107485](https://github.com/ClickHouse/ClickHouse/pull/107485) ([uwezkhan](https://github.com/uwezkhan)).
* Con `enable_analyzer = 1` (el valor predeterminado), al consultar una tabla por su nombre sin calificar cuando solo existe en otra base de datos, ahora se sugiere la tabla correcta; por ejemplo, `SELECT * FROM functions` muestra `Maybe you meant system.functions?`. Anteriormente, el nuevo analizador mostraba un error `Unknown table expression identifier` sin sugerencias, mientras que el analizador anterior ya ofrecía una sugerencia útil. [#107550](https://github.com/ClickHouse/ClickHouse/pull/107550) ([groeneai](https://github.com/groeneai)).
* Se corrigió un aborto del servidor (`std::terminate`, señal 6) durante el desmontaje de una consulta con plan distribuido (`make_distributed_plan = 1`) cuando una comprobación de estado de un trabajador no lograba reprogramar la siguiente comprobación (por ejemplo, `CANNOT_SCHEDULE_TASK` durante el apagado o `MEMORY_LIMIT_EXCEEDED`). La consulta ahora falla correctamente y el servidor sigue en ejecución. [#107575](https://github.com/ClickHouse/ClickHouse/pull/107575) ([groeneai](https://github.com/groeneai)).
* Se corrigieron resultados incorrectos en consultas distribuidas que seleccionaban columnas `ALIAS` con una subexpresión común: las columnas podían desalinearse y los valores devolverse en la columna equivocada. [#107675](https://github.com/ClickHouse/ClickHouse/pull/107675) ([vdimir](https://github.com/vdimir)).
* Se corrigió un error lógico `Inconsistent AST formatting` para una función de ventana sin argumentos dentro de una declaración `CODEC` o de motor (p. ej., `CODEC(cume_dist() OVER (...))`); dicha función ahora conserva sus paréntesis para que la consulta supere un ciclo de formato/análisis. [#107806](https://github.com/ClickHouse/ClickHouse/pull/107806) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `getClientHTTPHeader` ahora se trata correctamente como no determinista, por lo que su resultado ya no se reutiliza incorrectamente en la caché de resultados de consultas. [#108029](https://github.com/ClickHouse/ClickHouse/pull/108029) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se corrigieron resultados incorrectos al usar `SELECT [...] SAMPLE [...]` junto con la caché de condiciones de consulta (la configuración `use_query_condition_cache = 1`, que también es el valor predeterminado). [#108488](https://github.com/ClickHouse/ClickHouse/pull/108488) ([groeneai](https://github.com/groeneai)).
* Corrige `NOT_FOUND_COLUMN_IN_BLOCK` cuando se asigna un alias a un predicado compuesto en `GROUP BY` y se vuelve a hacer referencia a él, con `enable_identifier_resolve_cache` habilitado (de forma predeterminada). La optimización `optimize_and_compare_chain` no era idempotente y un nodo resuelto compartido acumulaba un conjuncional transitivo duplicado. [#108553](https://github.com/ClickHouse/ClickHouse/pull/108553) ([groeneai](https://github.com/groeneai)).
* Corrige el error `NUMBER_OF_COLUMNS_DOESNT_MATCH` cuando una subconsulta sobre una tabla `Distributed` lee dos o más columnas `ALIAS` que se expanden a la misma expresión (por ejemplo, `a1 String ALIAS toString(x), a2 String ALIAS toString(x)`) y alimenta una consulta externa, p. ej., `SELECT count() FROM (SELECT a1, a2 FROM dist GROUP BY a1, a2)`. [#108725](https://github.com/ClickHouse/ClickHouse/pull/108725) ([groeneai](https://github.com/groeneai)).
* Corrige el error `UNKNOWN_IDENTIFIER` en `ALTER TABLE ... DROP COLUMN` cuando otra columna tiene una expresión `DEFAULT` o `MATERIALIZED` que define y hace referencia a un alias insertado en línea. [#109374](https://github.com/ClickHouse/ClickHouse/pull/109374) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige que `system.tables` omitiera silenciosamente bases de datos para usuarios con permisos por base de datos cuando la consulta solo lee las columnas `name`/`database`. Introducido en 26.2. [#109723](https://github.com/ClickHouse/ClickHouse/pull/109723) ([samay-sharma](https://github.com/samay-sharma)).
* Corrige el error `UNKNOWN_IDENTIFIER` en columnas calificadas con el nombre de una CTE (`cte_name.column`) en consultas almacenadas en vistas cuando el analizador está habilitado. [#111386](https://github.com/ClickHouse/ClickHouse/pull/111386) ([novikd](https://github.com/novikd)).
* Corrige `NOT_FOUND_COLUMN_IN_BLOCK` cuando una consulta `FINAL` filtra por una columna de la clave de ordenación que no figura en la lista `SELECT` y el filtro se mueve a `PREWHERE` (por ejemplo, `SELECT s FROM t FINAL WHERE k GROUP BY s` con `optimize_move_to_prewhere_if_final = 1`). [#111721](https://github.com/ClickHouse/ClickHouse/pull/111721) ([groeneai](https://github.com/groeneai)).
* Corrige el inicio del servidor y el fallo de `ATTACH` con `WITH RECURSIVE is not supported with the old analyzer` en una vista con una CTE recursiva cuando `enable_analyzer = 0` es el valor predeterminado del servidor. [#112784](https://github.com/ClickHouse/ClickHouse/pull/112784) ([evillique](https://github.com/evillique)).
* Corrige la propagación de los ajustes de consulta y el manejo de NULL en `accurateCastOrDefault`. [#114912](https://github.com/ClickHouse/ClickHouse/pull/114912) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige que `read_rows`, `read_bytes`, `written_rows` y `written_bytes` en `system.query_thread_log` informaran un total acumulado durante la vida útil del hilo en lugar de los valores de la consulta registrada. Se veían afectadas las filas de los hilos de larga duración agrupados, en particular el hilo `HTTPHandler` que inicia la consulta. [#115596](https://github.com/ClickHouse/ClickHouse/pull/115596) ([groeneai](https://github.com/groeneai)).

<h3 id="mergetree-and-storage-fixes">
  Correcciones de MergeTree y de almacenamiento
</h3>

* Ahora se pueden eliminar las partes separadas con el sufijo `tryN`. [#58957](https://github.com/ClickHouse/ClickHouse/pull/58957) ([antaljanosbenjamin](https://github.com/antaljanosbenjamin)).
* Se corrige una excepción `MULTIPLE_EXPRESSIONS_FOR_ALIAS` en consultas con alias de proyección duplicados (por ejemplo, `SELECT *, day + 365 AS day`) dentro de subconsultas anidadas al ejecutarse con réplicas paralelas. [#80310](https://github.com/ClickHouse/ClickHouse/pull/80310) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se corrigió la selección incorrecta del códec de compresión para partes de `MergeTree` cuando se configuraba explícitamente el ajuste a nivel de tabla `default_compression_codec`. Las partes escritas durante las inserciones, las fusiones y para las proyecciones usaban el códec predeterminado global del servidor en lugar del ajuste a nivel de tabla. Ahora también se cubre la parte vacía generada por una mutación que elimina todos los datos. [#101784](https://github.com/ClickHouse/ClickHouse/pull/101784) ([Onyx2406](https://github.com/Onyx2406)).
* Se corrigen errores `MULTIPLE_EXPRESSIONS_FOR_ALIAS` generados por réplicas remotas al ejecutar consultas que hacen referencia a alias de proyección en `PREWHERE` / `WHERE` / `HAVING` / `QUALIFY` (p. ej., `SELECT x AS a, y AS b, (a AND b) AS c FROM t PREWHERE c`) o `SELECT *` sobre autojoins con nombres de columna coincidentes, con réplicas paralelas y `parallel_replicas_local_plan = 0`. [#103806](https://github.com/ClickHouse/ClickHouse/pull/103806) ([groeneai](https://github.com/groeneai)).
* Se corrige una parte de parche dañada tras ejecutar `ALTER TABLE ... DROP PARTITION ID 'patch-...'` seguido de `DETACH`/`ATTACH TABLE`. Anteriormente, la parte de cobertura vacía se escribía sin `partition.dat` ni `source_parts.dat`, lo que provocaba una entrada `broken-on-start_patch-...` en `system.detached_parts` después del siguiente attach o reinicio del servidor. [#104353](https://github.com/ClickHouse/ClickHouse/pull/104353) ([groeneai](https://github.com/groeneai)).
* Se corrigió el reemplazo silencioso de datos por valores predeterminados cuando `ALTER TABLE ... RENAME COLUMN` se ejecutaba simultáneamente con `OPTIMIZE TABLE ... FINAL` u otra fusión en segundo plano. [#104822](https://github.com/ClickHouse/ClickHouse/pull/104822) ([groeneai](https://github.com/groeneai)).
* Se corrigieron dos casos de `LOGICAL_ERROR: Reading from materialized CTE 'X' before it has been materialized` generados por consultas con `enable_materialized_cte`: (1) una CTE materializada reutilizada y filtrada mediante `IN (subquery)` sobre otra CTE materializada, y (2) una CTE materializada a la que se hace referencia tanto directamente como dentro de un filtro `WHERE ... IN (...)` que accede a una clave primaria de MergeTree mediante una subconsulta IN anidada. `EXPLAIN` sobre las mismas consultas también se veía afectado, ya que los errores se producían durante la optimización del plan. [#105041](https://github.com/ClickHouse/ClickHouse/pull/105041) ([novikd](https://github.com/novikd)).
* Con `skip_cache_on_disk_failure = 1`, las consultas ahora continúan cuando `FileCache` no puede crear un directorio de caché en disco. El fallo se registra en lugar de hacer que falle la consulta. [#105250](https://github.com/ClickHouse/ClickHouse/pull/105250) ([Diskein](https://github.com/Diskein)).
* Se corrigió la excepción de error lógico `Mutation of Memory table produced incomplete output` generada por `ALTER TABLE <memory_table> APPLY PATCHES` y `ALTER TABLE <memory_table> APPLY DELETED MASK`. Las tablas `Memory` no poseen partes de parche ni máscaras de eliminación, por lo que ambos comandos ahora se tratan correctamente como operaciones sin efecto. [#105286](https://github.com/ClickHouse/ClickHouse/pull/105286) ([groeneai](https://github.com/groeneai)).
* Se corrige `CANNOT_CONVERT_TYPE` para `Merge` sobre `Merge` sobre `Distributed` con `distributed_group_by_no_merge=1`. [#105330](https://github.com/ClickHouse/ClickHouse/pull/105330) ([azat](https://github.com/azat)).
* Se corrigió que `singleValueOrNullMerge` devolviera un valor concreto en lugar de `NULL` al fusionar un estado que ya había observado varios valores distintos. [#105734](https://github.com/ClickHouse/ClickHouse/pull/105734) ([fallintoplace](https://github.com/fallintoplace)).
* Corrige un fallo en la función de tabla `mongodb`, el almacenamiento MongoDB y la fuente de diccionarios MongoDB cuando el nombre de la colección está vacío o contiene bytes NUL. [#105776](https://github.com/ClickHouse/ClickHouse/pull/105776) ([Algunenano](https://github.com/Algunenano)).
* Corrige el rechazo de `ALTER TABLE ... CLEAR COLUMN` para las columnas explícitas `columns_to_sum` de `SummingMergeTree` y `CoalescingMergeTree`. [#105785](https://github.com/ClickHouse/ClickHouse/pull/105785) ([antonio2368](https://github.com/antonio2368)).
* Corrige errores `UNKNOWN_DATABASE` al crear una vista parametrizada cuyo nombre de base de datos se proporciona mediante un parámetro de consulta. [#105799](https://github.com/ClickHouse/ClickHouse/pull/105799) ([groeneai](https://github.com/groeneai)).
* Restaura la optimización de lectura en orden para las tablas `Merge` al usar el analizador. [#105867](https://github.com/ClickHouse/ClickHouse/pull/105867) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Corrige las mutaciones `UPDATE` y `DELETE` en tablas Iceberg a las que se accede mediante un catálogo, incluidas las actualizaciones y eliminaciones repetidas que no afectan a ninguna fila. [#106111](https://github.com/ClickHouse/ClickHouse/pull/106111) ([scanhex12](https://github.com/scanhex12)).
* Corrige que `optimize_skip_unused_shards` no se aplicara (y que force\_optimize\_skip\_unused\_shards fallara erróneamente) al consultar una tabla `Distributed` a través de una tabla `Merge` o de la función de tabla `merge`, con el predicado aplicado sobre ellas. [#106250](https://github.com/ClickHouse/ClickHouse/pull/106250) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Corrige un error lógico `Column identifier ... is already registered` cuando un predicado de mutación (`DELETE`/`UPDATE`) contiene una subconsulta `IN`/`EXISTS` que lee de una expresión de tabla predeterminada anidada en otra subconsulta. [#106414](https://github.com/ClickHouse/ClickHouse/pull/106414) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige resultados incorrectos esporádicos en consultas `ORDER BY ... DESC` al leer partes anchas en orden inverso con `read_in_order_use_virtual_row_per_block = 1` y un valor pequeño de `max_block_size`. [#106429](https://github.com/ClickHouse/ClickHouse/pull/106429) ([vdimir](https://github.com/vdimir)).
* Corrige una excepción `Bad cast exception` en diccionarios Redis que usan `STORAGE_TYPE 'simple'` con una disposición `cache`/`direct` y una única clave de cadena (compleja); estos diccionarios ahora funcionan y las claves compuestas con almacenamiento `simple` informan de un error claro. [#106501](https://github.com/ClickHouse/ClickHouse/pull/106501) ([vdimir](https://github.com/vdimir)).
* Corrige la excepción `Mutation of Memory table produced incomplete output` generada por comandos `ALTER TABLE <memory_table>` que no tienen efectos sobre los datos por fila en un motor `Memory`, incluidos `APPLY PATCHES`, `APPLY DELETED MASK`, `MATERIALIZE STATISTICS`, `MATERIALIZE INDEX`, `MATERIALIZE PROJECTION` y `REWRITE PARTS`. Las tablas `Memory` no poseen estas estructuras, por lo que estos comandos ahora se tratan como operaciones sin efecto. [#106621](https://github.com/ClickHouse/ClickHouse/pull/106621) ([groeneai](https://github.com/groeneai)).
* Corrige el fallo que impedía iniciar el servidor con `Too many marks in file ...skp_idx_idx.cmrk4, marks expected 0 (bytes size 0)` cuando una tabla `MergeTree` tiene una parte de índice de omisión con cero gránulos y un archivo de marcas no vacío en disco. [#106675](https://github.com/ClickHouse/ClickHouse/pull/106675) ([groeneai](https://github.com/groeneai)).
* Corrige el caso en el que las réplicas paralelas no se aplicaban a una vista con UNION debido a una tabla vacía en la UNION. [#106900](https://github.com/ClickHouse/ClickHouse/pull/106900) ([devcrafter](https://github.com/devcrafter)).
* Corrige una excepción de error lógico `conflicted_part_name.has_value()` que podía producirse durante una inserción síncrona en una tabla `ReplicatedMergeTree` cuando el bloque insertado se había deduplicado por completo y ya se había eliminado el nodo de deduplicación de la parte en conflicto (por ejemplo, mediante un `DROP PARTITION` simultáneo). [#107026](https://github.com/ClickHouse/ClickHouse/pull/107026) ([groeneai](https://github.com/groeneai)).
* Corrige el poco frecuente `LOGICAL_ERROR` "Attempt to release query context that does not exist" y el fallo del servidor asociado al leer tablas `MergeTree` mediante un disco de caché del sistema de archivos creado con `enable_filesystem_query_cache_limit = 1`. [#107028](https://github.com/ClickHouse/ClickHouse/pull/107028) ([groeneai](https://github.com/groeneai)).
* Corrige un fallo del servidor al mover una parte vacía a un disco `plain_rewritable` (por ejemplo, con `ALTER TABLE ... MOVE PARTITION ... TO DISK` para una parte vacía conservada debido a `remove_empty_parts = 0`). [#107040](https://github.com/ClickHouse/ClickHouse/pull/107040) ([groeneai](https://github.com/groeneai)).
* Corrige una excepción `Logical error: Too large size passed to allocator` al ejecutar `INSERT` en una tabla `MergeTree` cuando `adaptive_write_buffer_initial_size` se establece en un valor extremadamente grande. El tamaño inicial del búfer de escritura adaptativo ahora se limita al tamaño máximo del búfer. [#107104](https://github.com/ClickHouse/ClickHouse/pull/107104) ([groeneai](https://github.com/groeneai)).
* Corrige lotes de `ALTER TABLE ... ON CLUSTER` que combinan `MODIFY SETTING`/`RESET SETTING` con un cambio de comentario (por ejemplo, `MODIFY COMMENT 'x', MODIFY SETTING old_parts_lifetime = 123`) y que se aplicaban solo en la réplica líder, dejando las demás réplicas desincronizadas. También corrige que un `MODIFY COLUMN ... COMMENT` posicional o `SETTINGS` por columna se clasificara erróneamente como un cambio local de metadatos que solo afecta a comentarios, lo que omitía la reordenación de columnas de los metadatos replicados y podía provocar `INCOMPATIBLE_COLUMNS` al reiniciar la réplica. [#107142](https://github.com/ClickHouse/ClickHouse/pull/107142) ([groeneai](https://github.com/groeneai)).
* Corrige el error `Argument ... of GROUPING function is not a part of GROUP BY clause` en consultas que usan la función `grouping` con la configuración `group_by_use_nulls` habilitada. [#107206](https://github.com/ClickHouse/ClickHouse/pull/107206) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Corrige consultas de actualización ligera `UPDATE` con réplicas paralelas heredadas habilitadas en tablas `MergeTree` no replicadas. [#107246](https://github.com/ClickHouse/ClickHouse/pull/107246) ([groeneai](https://github.com/groeneai)).
* Corrige una posible excepción de error lógico en SYSTEM SYNC DATABASE REPLICA ... STRICT y hace que el modificador STRICT surta efecto para las réplicas de bases de datos. [#107344](https://github.com/ClickHouse/ClickHouse/pull/107344) ([PedroTadim](https://github.com/PedroTadim)).
* Corrige `Logical error: 'Duplicate announcement received for replica number N'`, que podía producirse con réplicas paralelas cuando una subconsulta escalar contenía subconsultas anidadas que leían la misma tabla. [#107381](https://github.com/ClickHouse/ClickHouse/pull/107381) ([groeneai](https://github.com/groeneai)).
* Corrige la pérdida silenciosa de datos en `MergeTree` simple (no replicado) al ejecutar `REPLACE PARTITION`, `MOVE PARTITION`, `DETACH PARTITION` o `DETACH PART` en una partición que aún tiene parches de actualización ligera `UPDATE` sin aplicar. Estas operaciones ahora rechazan el comando (como ya hace `ReplicatedMergeTree`) e indican que se use `ALTER TABLE ... APPLY PATCHES`, en lugar de revertir silenciosamente la actualización confirmada. [#107386](https://github.com/ClickHouse/ClickHouse/pull/107386) ([groeneai](https://github.com/groeneai)).
* Corrige que `MaterializedPostgreSQL` dejara de replicar silenciosamente los cambios cuando el nombre de la base de datos o de la tabla de PostgreSQL contiene letras mayúsculas (el consumidor de `pgoutput` solicitaba un nombre de publicación sin comillas y en minúsculas que no coincidía con la publicación que conservaba las mayúsculas). [#107423](https://github.com/ClickHouse/ClickHouse/pull/107423) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige el error `THERE_IS_NO_COLUMN` cuando `optimize_if_transform_strings_to_enum = 1` y la expresión `if`/`transform` optimizada sobre literales de cadena es una clave de `GROUP BY` u `ORDER BY` en una tabla Distributed o con réplicas paralelas. [#107455](https://github.com/ClickHouse/ClickHouse/pull/107455) ([groeneai](https://github.com/groeneai)).
* Se corrigió un problema por el que `SELECT ... FINAL` y `OPTIMIZE TABLE ... FINAL` devolvían filas duplicadas después de que `CREATE TABLE ... CLONE AS`, `ATTACH PARTITION ... FROM` o `MOVE PARTITION ... TO TABLE` adoptaran partes de un `MergeTree` simple en un `ReplacingMergeTree`, `SummingMergeTree` o `AggregatingMergeTree`. El nivel de fusión de la parte adoptada ahora se restablece a 0 cuando los motores de origen y destino son distintos, de modo que el destino la deduplica en la siguiente fusión. [#107481](https://github.com/ClickHouse/ClickHouse/pull/107481) ([groeneai](https://github.com/groeneai)).
* Ahora se realiza un mejor seguimiento de la cancelación de consultas mientras se espera el cuórum en ReplicatedMergeTree. [#107513](https://github.com/ClickHouse/ClickHouse/pull/107513) ([nickitat](https://github.com/nickitat)).
* Contabiliza en el rastreador de memoria la memoria utilizada por la biblioteca rapidjson (en `prettyPrintJSON`, `JSONMergePatch` y el analizador JSON de rapidjson), de modo que las entradas patológicas se rechacen con `MEMORY_LIMIT_EXCEEDED` en lugar de asignar memoria sin límite. [#107555](https://github.com/ClickHouse/ClickHouse/pull/107555) ([Algunenano](https://github.com/Algunenano)).
* Corrige un `Logical error: Stream ... variant_discr ... is not found` que podía producirse al fusionar o leer una parte de `MergeTree` generada por una mutación de una tabla con una columna `Dynamic`. [#107562](https://github.com/ClickHouse/ClickHouse/pull/107562) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige un `LOGICAL_ERROR` (`updateFormatPrewhereInfo called more than once`) generado al consultar una fuente `file()`, `url()` o de almacenamiento de objetos con un `PREWHERE` y un `WHERE` explícitos mientras `optimize_prewhere_after_pushdown` estaba habilitado. [#107568](https://github.com/ClickHouse/ClickHouse/pull/107568) ([groeneai](https://github.com/groeneai)).
* Se corrigió una excepción del servidor (error lógico `Digest does not match`) que podía producirse con `RENAME TABLE`, `RENAME DATABASE` o `CREATE OR REPLACE TABLE` que involucraran una tabla `TimeSeries` dentro de una base de datos `Replicated`. Ahora se admite cambiar el nombre de una tabla `TimeSeries`. [#107583](https://github.com/ClickHouse/ClickHouse/pull/107583) ([groeneai](https://github.com/groeneai)).
* Corrige `DROP TABLE` de una tabla `TimeSeries` en una base de datos `Replicated`, que anteriormente dejaba tablas internas sin eliminar y la tarea de eliminación en segundo plano se reintentaba indefinidamente (`DROP TABLE ... SYNC` se quedaba bloqueado). [#107604](https://github.com/ClickHouse/ClickHouse/pull/107604) ([groeneai](https://github.com/groeneai)).
* Se corrigieron dos vulnerabilidades de recorrido de rutas en el protocolo de obtención de partes replicadas que podían permitir a una réplica maliciosa escribir archivos fuera del directorio de la parte. [#107606](https://github.com/ClickHouse/ClickHouse/pull/107606) ([antonio2368](https://github.com/antonio2368)).
* Se corrigió un problema por el que `ALTER TABLE ... REPLACE PARTITION` en una tabla `MergeTree` simple restauraba las partes reemplazadas tras reiniciar el servidor, lo que hacía que la tabla devolviera tanto las filas de reemplazo como las filas antiguas reemplazadas. [#107623](https://github.com/ClickHouse/ClickHouse/pull/107623) ([groeneai](https://github.com/groeneai)).
* Se corrigió un `LOGICAL_ERROR` ("Block structure mismatch ... between `ConvertingTransform` and `RemovingReplicatedColumnsTransform`") al insertar en una vista materializada cuya tabla de destino `TO` declara una columna con un `Enum` más amplio que el producido por el `SELECT` de la vista. La ampliación válida de `Enum` ahora se aplica en la ruta de inserción de la vista materializada, igual que en un `INSERT ... SELECT` directo. [#107648](https://github.com/ClickHouse/ClickHouse/pull/107648) ([groeneai](https://github.com/groeneai)).
* Se corrige el error `NUMBER_OF_COLUMNS_DOESNT_MATCH` al consultar una tabla `Distributed` (o usar réplicas paralelas) que tiene varias columnas `ALIAS` expandidas a la misma expresión y se hace referencia a ellas junto con `ORDER BY`/`GROUP BY`/`HAVING`. [#107913](https://github.com/ClickHouse/ClickHouse/pull/107913) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* Un error transitorio al actualizar las partes de datos de una tabla de solo lectura ya no detiene permanentemente la tarea de actualización en segundo plano. [#108034](https://github.com/ClickHouse/ClickHouse/pull/108034) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Ahora se respeta `index_granularity_bytes` para las columnas de estado de `AggregateFunction`. Anteriormente, se ignoraba el límite de bytes por gránulo para estas columnas (por ejemplo, los estados `uniqExact` en tablas `AggregatingMergeTree` y proyecciones de agregación), lo que generaba gránulos mucho mayores que el límite configurado y aumentaba la amplificación de lectura y el uso de memoria durante las consultas. [#108297](https://github.com/ClickHouse/ClickHouse/pull/108297) ([groeneai](https://github.com/groeneai)).
* Se corrigió que `insert_quorum = 'auto'` no rechazara las inserciones de inmediato cuando había menos de la mayoría de las réplicas activas. Estas inserciones ahora fallan inmediatamente con `TOO_FEW_LIVE_REPLICAS`, en lugar de escribir una parte local y agotar posteriormente el tiempo de espera con `UNKNOWN_STATUS_OF_INSERT`. [#108800](https://github.com/ClickHouse/ClickHouse/pull/108800) ([gagandhakrey](https://github.com/gagandhakrey)).
* Se corrigió un bloqueo del servidor durante inserciones asíncronas con deduplicación cuando `optimize_on_insert` deja vacío el bloque insertado (por ejemplo, filas cuya suma es cero en `SummingMergeTree`). [#109229](https://github.com/ClickHouse/ClickHouse/pull/109229) ([Diskein](https://github.com/Diskein)).
* Se corrige la pérdida de datos de una columna sin expresión predeterminada cuando una fusión se ejecuta simultáneamente con `ALTER TABLE ... RENAME COLUMN`, o cuando los únicos valores de la columna provienen de una actualización ligera `UPDATE`. La columna podía eliminarse de la parte fusionada, por lo que todos sus valores se leían como NULL. [#109356](https://github.com/ClickHouse/ClickHouse/pull/109356) ([groeneai](https://github.com/groeneai)).
* Se corrigió una terminación poco frecuente del servidor al fusionar estados de agregación de `uniqExact` en paralelo con `GROUPING SETS`, `ROLLUP` o `CUBE`. [#109389](https://github.com/ClickHouse/ClickHouse/pull/109389) ([groeneai](https://github.com/groeneai)).
* Se corrigió que las fusiones de rollup se reprogramaran indefinidamente. [#109410](https://github.com/ClickHouse/ClickHouse/pull/109410) ([Michicosun](https://github.com/Michicosun)).
* Se corrigieron las mutaciones `GROUP BY` en tablas con columnas virtuales materializadas o persistentes. [#109532](https://github.com/ClickHouse/ClickHouse/pull/109532) ([Michicosun](https://github.com/Michicosun)).
* Se corrigió el error `UNKNOWN_IDENTIFIER: Missing columns: '_block_offset'` al ejecutar `ALTER TABLE ... MATERIALIZE INDEX` sobre el índice minmax implícito creado por `add_minmax_index_for_block_number_column`/`add_minmax_index_for_block_offset_column` en una tabla con partes recién insertadas (de nivel 0). Ahora el índice se crea para esas partes en lugar de producir un error. [#110236](https://github.com/ClickHouse/ClickHouse/pull/110236) ([groeneai](https://github.com/groeneai)).
* Se corrigió que una réplica de almacenamiento de objetos de solo lectura (un disco configurado con `read_only = true`) no detectara partes nuevas mediante `refresh_parts_interval`, y que `table_disk = true` fuera rechazado en dicho disco con "table\_disk is not supported for non-ObjectStorage disks". [#110460](https://github.com/ClickHouse/ClickHouse/pull/110460) ([jkartseva](https://github.com/jkartseva)).
* Se corrige un LOGICAL\_ERROR ("No set is registered for key") en `ALTER TABLE ... DROP COLUMN`, mutaciones `ALTER TABLE ... DELETE/UPDATE` y DELETE ligero, en tablas con una columna ALIAS cuya expresión usa un operador IN (incluso a través de otra columna ALIAS). [#111039](https://github.com/ClickHouse/ClickHouse/pull/111039) ([PedroTadim](https://github.com/PedroTadim)).
* Corrige casos en los que no se aplicaba una política de filas a las proyecciones de MergeTree durante la ejecución de consultas. [#112329](https://github.com/ClickHouse/ClickHouse/pull/112329) ([yariks5s](https://github.com/yariks5s)).
* Corrige el error lógico `ReadBufferFromEncryptedFile: Wrong file position` al leer una parte `Compact` de un disco `encrypted` con E/S directa, que hacía que las fusiones quedaran bloqueadas en `system.replication_queue`. [#112943](https://github.com/ClickHouse/ClickHouse/pull/112943) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige la lectura de la base de datos interna `_temporary_and_external_tables` mediante la función de tabla `merge` y el motor de tabla `Merge`, que permitía que una sesión leyera las tablas temporales de otras sesiones y usuarios, y provocaba una excepción en la ruta del analizador antiguo. Ahora, una expresión regular de bases de datos omite esa base de datos y se prohíbe mencionarla explícitamente, al igual que acceder a ella directamente. [#113224](https://github.com/ClickHouse/ClickHouse/pull/113224) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige el problema por el que una política de filas que contenía una subconsulta escalar se evaluaba una sola vez y, tras leer la tabla mediante una tabla `Merge`, se reutilizaba indefinidamente. La condición de la política analizada se almacena en caché y se comparte entre todas las consultas; leerla mediante `Merge` reescribía la expresión almacenada en caché in situ, lo que también provocaba una carrera de datos entre consultas simultáneas que usaban la misma política. [#113563](https://github.com/ClickHouse/ClickHouse/pull/113563) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige errores `CANNOT_CONVERT_TYPE` al leer una tabla `Merge` que contiene una tabla `Distributed` con réplicas paralelas de clave personalizada. [#113742](https://github.com/ClickHouse/ClickHouse/pull/113742) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige `Logical error: No set is registered for key ...` al leer mediante una tabla `Merge` cuyo hijo declara una columna `ALIAS` que contiene `IN` y cuyos hijos difieren en el valor predeterminado de esa columna. [#113757](https://github.com/ClickHouse/ClickHouse/pull/113757) ([groeneai](https://github.com/groeneai)).
* Corrige una omisión de política de filas por la que la función de tabla mergeTreeIndex exponía los valores de la clave primaria y del índice minmax de las filas ocultas por una política de filas SELECT en la tabla de origen; ahora se prohíbe leer mergeTreeIndex para una tabla con una política de filas. [#115304](https://github.com/ClickHouse/ClickHouse/pull/115304) ([yariks5s](https://github.com/yariks5s)).

<h3 id="data-type-and-serialization-fixes">
  Correcciones de tipos de datos y de serialización
</h3>

* Se corrigió una excepción en `ARRAY JOIN` al usar tipos numéricos `LowCardinality`. [#91784](https://github.com/ClickHouse/ClickHouse/pull/91784) ([Ergus](https://github.com/Ergus)).
* Se corrigió la creación silenciosa de columnas `NOT NULL` como `Nullable` cuando `data_type_default_nullable = 1` y la tabla se crea en una base de datos `Replicated` o mediante `ON CLUSTER`. [#97572](https://github.com/ClickHouse/ClickHouse/pull/97572) ([xiaohuanlin](https://github.com/xiaohuanlin)).
* Se corrigió el número incorrecto de filas devuelto por una consulta a una `MaterializedView` con `query_plan_enable_optimizations = 0` cuando la vista asigna una columna `integer` a una columna `Bool`. [#100692](https://github.com/ClickHouse/ClickHouse/pull/100692) ([Maximus5](https://github.com/Maximus5)).
* Se corrigieron metadatos incoherentes de partes tras mutaciones de columnas con serializaciones no predeterminadas. [#102817](https://github.com/ClickHouse/ClickHouse/pull/102817) ([korowa](https://github.com/korowa)).
* Se corrigió la propagación de `NULL` al leer subcolumnas extraídas de columnas `Nullable(Tuple(...))`. Por ejemplo, para `tup Nullable(Tuple(s Nullable(String)))`, `SELECT tup.s` ahora devuelve correctamente `NULL` en las filas donde la tupla externa es `NULL`, en lugar de valores no válidos. Esto abarca todos los tipos de elementos que pueden representar `NULL`: `Nullable`, `Dynamic`, `Variant` y `LowCardinality(Nullable(...))`. [#102942](https://github.com/ClickHouse/ClickHouse/pull/102942) ([nihalzp](https://github.com/nihalzp)).
* Se corrigió que `recursiveRemoveLowCardinality` eliminara nombres personalizados de tipos geométricos (p. ej., `LineString` frente a `Ring`, `MultiLineString` frente a `Polygon`), lo que provocaba una interpretación incorrecta del tipo geométrico. [#103041](https://github.com/ClickHouse/ClickHouse/pull/103041) ([jh0x](https://github.com/jh0x)).
* Se corrigió que `dictGetOrNull` sobrescribiera silenciosamente otras columnas de la proyección `SELECT` con `NULL` al invocarse con una columna clave `Nullable` cuyos valores no están presentes en el diccionario. La función modificaba in situ un mapa de valores nulos con alias de entrada; ahora realiza una copia profunda de la columna de resultados antes de modificarla. [#104327](https://github.com/ClickHouse/ClickHouse/pull/104327) ([groeneai](https://github.com/groeneai)).
* Se corrigió una excepción en consultas distribuidas que contenían una tupla `IN` vacía en la clave de segmentación cuando `optimize_skip_unused_shards_rewrite_in` está habilitado. [#104966](https://github.com/ClickHouse/ClickHouse/pull/104966) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se corrigió la estimación de selectividad de `PREWHERE` mediante estadísticas count-min para columnas `Float32`, incluidas comparaciones con literales `Float64`. [#105047](https://github.com/ClickHouse/ClickHouse/pull/105047) ([hanfei1991](https://github.com/hanfei1991)).
* Se corrigió `ILLEGAL_TYPE_OF_ARGUMENT` al fusionar los estados de agregación de `quantileExactWeightedInterpolated`, `quantileDD` o `quantilePrometheusHistogram` con sus equivalentes plurales `quantilesXxxMerge` (y viceversa). Las variantes singular y plural de estas tres familias de cuantiles comparten el mismo estado de agregación interno, pero no figuraban en la tabla interna de asignación de nombres, por lo que se rechazaban tanto la fusión de estados entre funciones como la optimización de fusión de funciones para estas familias. [#105189](https://github.com/ClickHouse/ClickHouse/pull/105189) ([groeneai](https://github.com/groeneai)).
* Corrige resultados incorrectos de `toStartOfWeek`, `toLastDayOfWeek`, `toMonday`, `toStartOfMonth`, `toLastDayOfMonth`, `toStartOfQuarter` y `toStartOfYear` para argumentos `Date32` y `DateTime64` cuyo resultado queda fuera del rango de `Date`: en lugar de desbordarse a fechas arbitrarias, los resultados anteriores a `1970-01-01` ahora se limitan a `1970-01-01` y los posteriores a `2149-06-06` se limitan a `2149-06-06`. Esto también corrige resultados de consulta incorrectos (partes y gránulos descartados incorrectamente) cuando estas funciones se usaban en `WHERE` sobre una clave `Date32` o `DateTime64` que contenía valores fuera de rango. [#105244](https://github.com/ClickHouse/ClickHouse/pull/105244) ([yariks5s](https://github.com/yariks5s)).
* Corrige un error lógico en `arrayRemove` cuando el primer argumento es un array de `Variant` cuyas alternativas son incompatibles con el tipo del segundo argumento y `variant_throw_on_type_mismatch` está deshabilitado. La función ahora considera que la comparación "nunca es igual" y devuelve el array sin cambios, en lugar de provocar un fallo de `assertTypeEquality` en el servidor. [#105248](https://github.com/ClickHouse/ClickHouse/pull/105248) ([groeneai](https://github.com/groeneai)).
* Corrige que `toFloat64`/`toUInt32`/`toString`/etc. en Dynamic ignoraran `cast_keep_nullable`. [#105467](https://github.com/ClickHouse/ClickHouse/pull/105467) ([Avogar](https://github.com/Avogar)).
* Corrige un segfault del servidor en `uniqStateOrNull` / `uniqStateOrDefault` / `uniqOrNullState` (y cadenas de combinadores similares sobre `uniq`) cuando se usan con `GROUP BY ... WITH ROLLUP`, `WITH CUBE` o `WITH TOTALS` y un argumento Nullable. [#105470](https://github.com/ClickHouse/ClickHouse/pull/105470) ([groeneai](https://github.com/groeneai)).
* Corrige que `toStartOfMillisecond` y `toStartOfMicrosecond` devolvieran un resultado desviado casi un segundo para valores `DateTime64` negativos (anteriores a la época), y corrige el desbordamiento de enteros con signo detectado por `UndefinedBehaviorSanitizer` en `toStartOfSecond`, `toStartOfMillisecond` y `toStartOfMicrosecond` para entradas `DateTime64` cercanas a `INT64_MIN`. [#105482](https://github.com/ClickHouse/ClickHouse/pull/105482) ([groeneai](https://github.com/groeneai)).
* Corrige la finalización del servidor al deserializar estados `singleValueOrNull` para `JSON`. [#105535](https://github.com/ClickHouse/ClickHouse/pull/105535) ([Avogar](https://github.com/Avogar)).
* Corrige que se ignorara `input_format_try_infer_datetimes` durante la inserción en datos compartidos en JSON. [#105544](https://github.com/ClickHouse/ClickHouse/pull/105544) ([Avogar](https://github.com/Avogar)).
* Corrige el desbordamiento circular de `DateTime` para valores fuera de rango en `JSONExtract` y durante la deserialización de texto. [#105551](https://github.com/ClickHouse/ClickHouse/pull/105551) ([Avogar](https://github.com/Avogar)).
* Corrige un fallo al insertar tuplas de distintos tamaños en la misma cláusula VALUES en una columna String. [#105582](https://github.com/ClickHouse/ClickHouse/pull/105582) ([Avogar](https://github.com/Avogar)).
* Corrige el error NOT\_IMPLEMENTED en `toString` a partir de DateTime con Timezone que contiene un valor NULL. [#105587](https://github.com/ClickHouse/ClickHouse/pull/105587) ([yariks5s](https://github.com/yariks5s)).
* Añade validación para columnas Dynamic aplanadas malformadas en la entrada Native. [#105666](https://github.com/ClickHouse/ClickHouse/pull/105666) ([Avogar](https://github.com/Avogar)).
* Corrige un `LOGICAL_ERROR` (`Unexpected return type from if`) generado durante la planificación de consultas para expresiones `if` cuyo tipo de resultado es `Variant` y cuya segunda o tercera rama es un `if` con condición constante sobre un literal `UInt64` que cabe en `Int64`. [#105680](https://github.com/ClickHouse/ClickHouse/pull/105680) ([groeneai](https://github.com/groeneai)).
* Corrige `Bad get: has Decimal32, requested Decimal128` en `sumMap` y `sumMapWithOverflow` sobre una columna `Nested(... Nullable(Decimal(P, S)))` cuando se serializa el estado de agregación (p. ej., réplicas paralelas, `sumMapState` mediante un formateador de estado binario o agregación externa). [#105816](https://github.com/ClickHouse/ClickHouse/pull/105816) ([groeneai](https://github.com/groeneai)).
* Corrige los errores `Expected ColumnLowCardinality, got String` / `Bad cast from type DB::ColumnString to DB::ColumnLowCardinality` al usar `apply_mutations_on_fly = 1` en una tabla con mutaciones `UPDATE`/`DELETE` pendientes aplicadas sobre la marcha, encoladas antes de una mutación `ALTER MODIFY COLUMN ... LowCardinality(...)`. [#105847](https://github.com/ClickHouse/ClickHouse/pull/105847) ([Algunenano](https://github.com/Algunenano)).
* Corrige el error `Cannot find column` en consultas distribuidas con un filtro `IN Array(...)` al usar el nuevo analizador. [#105894](https://github.com/ClickHouse/ClickHouse/pull/105894) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* Corrige una terminación del servidor cuando una columna con `STATISTICS` se modificaba a `Nullable` mientras otro `ALTER` la eliminaba simultáneamente. [#105917](https://github.com/ClickHouse/ClickHouse/pull/105917) ([groeneai](https://github.com/groeneai)).
* Rechaza bytes `IntervalKind` fuera de rango durante la decodificación de tipos de `RowBinaryWithNamesAndTypes` (`input_format_binary_decode_types_in_binary_format = 1`) con un error `INCORRECT_DATA` claro, en lugar de construir un `DataTypeInterval` con un tipo no válido que posteriormente podría provocar comportamiento indefinido en rutas de hash. [#106261](https://github.com/ClickHouse/ClickHouse/pull/106261) ([groeneai](https://github.com/groeneai)).
* Lee la subcolumna 'null' como una ruta JSON en Nullable(JSON), en lugar de como mapa de valores nulos. [#106295](https://github.com/ClickHouse/ClickHouse/pull/106295) ([Avogar](https://github.com/Avogar)).
* Corrige una lectura fuera de límites en `sipHash64Keyed`, `sipHash128Keyed` y `sipHash128ReferenceKeyed` al calcular el hash de una columna cuyos arrays están todos vacíos y cuya clave no es constante. [#106355](https://github.com/ClickHouse/ClickHouse/pull/106355) ([Algunenano](https://github.com/Algunenano)).
* Corrige un error que impedía a los usuarios utilizar subconsultas escalares en el primer argumento de `IN` cuando el segundo argumento es una tupla no constante. [#106610](https://github.com/ClickHouse/ClickHouse/pull/106610) ([yariks5s](https://github.com/yariks5s)).
* Corrige que se ignorara `session_timezone` al serializar columnas `LowCardinality(DateTime)` en formatos de texto (CSV, TSV, JSONEachRow, etc.). Anteriormente, tras la primera escritura de una columna `LowCardinality(DateTime)` en un servidor, todas las consultas posteriores que escribían esa columna mostraban la cadena de hora local en la primera zona horaria detectada, independientemente de `session_timezone`. [#106634](https://github.com/ClickHouse/ClickHouse/pull/106634) ([groeneai](https://github.com/groeneai)).
* Corrige una terminación del servidor en `if` y `multiIf` cuando la condición es un valor constante `Nullable(Nothing)`. [#106678](https://github.com/ClickHouse/ClickHouse/pull/106678) ([groeneai](https://github.com/groeneai)).
* Revierte un cambio que hacía que `sumMap` y el combinador `-Map` rechazaran tipos de valores numéricos con nombres personalizados (como `SimpleAggregateFunction(sum, T)` y `Bool`) con `ILLEGAL_TYPE_OF_ARGUMENT: Values for -Map cannot be summed`, lo que interrumpía agregaciones que funcionaban anteriormente. [#106729](https://github.com/ClickHouse/ClickHouse/pull/106729) ([fm4v](https://github.com/fm4v)).
* Corrige una excepción `Bad cast` al descartar partes mediante estadísticas `MinMax` cuando una columna clave es `LowCardinality` y la constante del predicado es `LowCardinality(Nullable(...))`. [#106793](https://github.com/ClickHouse/ClickHouse/pull/106793) ([groeneai](https://github.com/groeneai)).
* Corrige un error lógico en `parseDateTime` con bytes de entrada no ASCII. [#106856](https://github.com/ClickHouse/ClickHouse/pull/106856) ([Avogar](https://github.com/Avogar)).
* Corrige la excepción `THERE_IS_NO_COLUMN` en consultas distribuidas que usan la optimización `optimize_rewrite_aggregate_function_with_if` cuando el argumento de la función de agregación requiere una conversión al tipo Nullable. [#106908](https://github.com/ClickHouse/ClickHouse/pull/106908) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* Corrige un desbordamiento de enteros con signo (comportamiento indefinido) en `arrayLevenshteinDistanceWeighted` y `arraySimilarity` cuando los arrays de pesos contienen valores enteros grandes. La distancia ponderada ahora se acumula en un entero de mayor tamaño para pesos enteros, por lo que los valores de peso grandes ya no se desbordan y conservan la precisión. [#106934](https://github.com/ClickHouse/ClickHouse/pull/106934) ([groeneai](https://github.com/groeneai)).
* Corrige un fallo (`Source column is not Map` / `SIGSEGV`) al fusionar bloques ordenados que contienen una columna `Variant` con una variante `Map` cuyo orden de almacenamiento local difiere del orden global. [#107011](https://github.com/ClickHouse/ClickHouse/pull/107011) ([groeneai](https://github.com/groeneai)).
* Corrige el error `TYPE_MISMATCH` ("Cannot convert string ... to type ...") en consultas `ORDER BY <numeric column> ... LIMIT n` cuando la materialización diferida situaba otra columna antes de la columna de ordenación. El umbral top-K ahora se lee de la columna de ordenación correcta. [#107060](https://github.com/ClickHouse/ClickHouse/pull/107060) ([groeneai](https://github.com/groeneai)).
* Corrige un `ALTER TABLE ... RENAME COLUMN a TO b, RENAME COLUMN c TO a` compuesto que reutiliza un nombre de columna liberado (un "intercambio") entre columnas de distintos tipos. La parte materializada registraba el tipo de columna incorrecto, por lo que un `SELECT` posterior fallaba con `Conversion between numeric types and IPv6 is not supported` (o se interrumpía al cargar la parte en compilaciones de depuración). [#107064](https://github.com/ClickHouse/ClickHouse/pull/107064) ([groeneai](https://github.com/groeneai)).
* Corrige resultados no deterministas de la función `roundDown` cuando el array de límites contiene `NaN`. El mismo valor de entrada podía devolver un límite finito o `NaN` según las filas circundantes del lote. Los límites `NaN` ahora se ignoran, por lo que el resultado depende únicamente de los límites finitos. [#107065](https://github.com/ClickHouse/ClickHouse/pull/107065) ([groeneai](https://github.com/groeneai)).
* Corrige que `quantileTDigest` y `quantileTDigestWeighted` generaran `DECIMAL_OVERFLOW` para argumentos `Date` y `DateTime` cuando el cuantil interpolado es fraccionario, pero está dentro del rango (por ejemplo, `quantileTDigestWeighted(date, weight)` con valores que caben todos en el tipo). El resultado fraccionario ahora se trunca al tipo de resultado, de forma coherente con `quantilesTDigestWeighted`; los valores realmente fuera de rango siguen generando un error. [#107066](https://github.com/ClickHouse/ClickHouse/pull/107066) ([groeneai](https://github.com/groeneai)).
* Corrige el truncamiento silencioso de valores enteros fuera de rango en definiciones de tipo `Enum8`/`Enum16`. `Enum8('a' = 200)` ahora genera `ARGUMENT_OUT_OF_BOUND` en lugar de crear silenciosamente `Enum8('a' = -56)`. [#107081](https://github.com/ClickHouse/ClickHouse/pull/107081) ([groeneai](https://github.com/groeneai)).
* Corrige el orden incorrecto de las filas (y un `LOGICAL_ERROR` "Rows are not sorted with permutation" en compilaciones de depuración) en consultas `ORDER BY ... LIMIT` con varias columnas que ordenan por columnas `Nullable` cuando varias filas empatan en las columnas iniciales. [#107094](https://github.com/ClickHouse/ClickHouse/pull/107094) ([groeneai](https://github.com/groeneai)).
* Corrige `Logical error: 'Bad cast from type DB::ColumnVector<...> to DB::ColumnTuple'` al leer una columna `Array(Tuple(...))` cuyo valor se completa con valores predeterminados, por ejemplo, después de `ALTER TABLE ... ADD COLUMN` o de aplicar sobre la marcha una mutación `ALTER TABLE ... CLEAR COLUMN` sin finalizar. [#107232](https://github.com/ClickHouse/ClickHouse/pull/107232) ([groeneai](https://github.com/groeneai)).
* Rechaza usos no compatibles de columnas `AggregateFunction` en expresiones TTL al ejecutar `CREATE TABLE` (por ejemplo, `TTL toDateTime(state)`) en lugar de fallar posteriormente durante la ejecución de TTL con `ILLEGAL_TYPE_OF_ARGUMENT`. Esto también abarca estados incluidos en alternativas de `Variant` y valores `Dynamic`. Los consumidores válidos que admiten estados, como `finalizeAggregation`, siguen aceptándose. [#107366](https://github.com/ClickHouse/ClickHouse/pull/107366) ([Ria-K912](https://github.com/Ria-K912)).
* Corrige `arrayResize` con un argumento de tamaño `Decimal`: ahora el tamaño se interpreta según su valor real (por ejemplo, `arrayResize([1, 2, 3], 1.5::Decimal(2, 1))` devuelve un elemento) en lugar de según su representación interna sin escalar. [#107389](https://github.com/ClickHouse/ClickHouse/pull/107389) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige `LOGICAL_ERROR: Unexpected return type from materialize` (y errores similares de incompatibilidad de tipos) al usar `apply_mutations_on_fly = 1` en una tabla con un `UPDATE` pendiente aplicado sobre la marcha cuya columna de destino también se lee como entrada de función en un `UPDATE` anterior aplicado sobre la marcha, antes de una mutación `ALTER MODIFY COLUMN ... LowCardinality(...)`. [#107475](https://github.com/ClickHouse/ClickHouse/pull/107475) ([groeneai](https://github.com/groeneai)).
* Corrige la conversión silenciosa de valores NULL en cadenas vacías al insertar datos Arrow/ORC en una columna LowCardinality(Nullable(...)). Se trataba de una regresión introducida en la versión 26.5. [#107532](https://github.com/ClickHouse/ClickHouse/pull/107532) ([Ergus](https://github.com/Ergus)).
* Corrige un `LOGICAL_ERROR` ("Input nodes size mismatch in dag") cuando una consulta con `make_distributed_plan = 1` realiza una unión mediante una clave envuelta en una función y ambos lados no tienen un tipo común (por ejemplo, `ON intDiv(-1, t1.key) = t2.key` con una clave derecha `UInt64`). [#107701](https://github.com/ClickHouse/ClickHouse/pull/107701) ([groeneai](https://github.com/groeneai)).
* Corrige el cálculo de hashes incorrectos en la deduplicación de inserciones para columnas `String` y `Array` con la configuración de servidor `insert_deduplication_version = new_unified_hash`: las inserciones idénticas podían no deduplicarse porque el hash de deduplicación dependía de la posición de la fila dentro del bloque insertado. [#107915](https://github.com/ClickHouse/ClickHouse/pull/107915) ([CheSema](https://github.com/CheSema)).
* Corrige una terminación del servidor en `has` al buscar en un `Map` con claves `Dynamic` usando un argumento `LowCardinality`. [#107956](https://github.com/ClickHouse/ClickHouse/pull/107956) ([groeneai](https://github.com/groeneai)).
* Corrige una regresión de rendimiento en subcolumnas `Map` usadas con `PREWHERE`. [#107988](https://github.com/ClickHouse/ClickHouse/pull/107988) ([Avogar](https://github.com/Avogar)).
* Corrige un error lógico al convertir una columna `Dynamic` o `Variant` anidada en una `Tuple` a un tipo de elemento no `Nullable` con `accurateCastOrNull` o `accurateCastOrDefault`. [#108061](https://github.com/ClickHouse/ClickHouse/pull/108061) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige una excepción de error lógico `Bad cast from type DB::ColumnSparse to DB::ColumnVector<char8_t>` cuando una consulta `LIKE` lee de un índice `text` mediante la ruta alternativa de lectura directa en una columna almacenada de forma dispersa. [#108068](https://github.com/ClickHouse/ClickHouse/pull/108068) ([groeneai](https://github.com/groeneai)).
* Corrige un `LOGICAL_ERROR` ("Unexpected return type from if") al leer una columna con `apply_mutations_on_fly = 1` después de ejecutar `ALTER UPDATE col = ... WHERE <cond>` con una condición no constante o falsa, seguido de `ALTER MODIFY COLUMN col <new type>`. [#108128](https://github.com/ClickHouse/ClickHouse/pull/108128) ([groeneai](https://github.com/groeneai)).
* Corrige el `signed integer overflow` (comportamiento indefinido) en `dateDiff` con las unidades `hour` y `minute` para valores extremos de `DateTime64` próximos a los límites del rango de `Int64`. [#108229](https://github.com/ClickHouse/ClickHouse/pull/108229) ([groeneai](https://github.com/groeneai)).
* Corrige una excepción del servidor (`Logical error` en `IColumn::insertFrom`) al convertir un `Array(Dynamic)` o `Array(Variant)` a `QBit` con `accurateCastOrNull`, por ejemplo, `accurateCastOrNull(CAST(range(114), 'Array(Dynamic)'), 'QBit(Float32, 114)')`. [#108288](https://github.com/ClickHouse/ClickHouse/pull/108288) ([groeneai](https://github.com/groeneai)).
* Corrige que `parseDateTimeBestEffort` con zona horaria genere `CANNOT&#95;PARSE&#95;DATETIME` en filas `NULL` de `toString(Nullable(DateTime64))`. [#108310](https://github.com/ClickHouse/ClickHouse/pull/108310) ([yariks5s](https://github.com/yariks5s)).
* Corrige un bloqueo del servidor (desbordamiento de pila) provocado por expresiones muy anidadas como `[[[ ... ]]]` o `array(array( ... ))` cuando `max_parser_depth` se establece en un valor elevado. [#108493](https://github.com/ClickHouse/ClickHouse/pull/108493) ([Algunenano](https://github.com/Algunenano)).
* Corrige una proyección `SELECT *` que devolvía el valor predeterminado del tipo de una columna (por ejemplo, `0`) en lugar de su valor `DEFAULT` (por ejemplo, `-1`) al leer una columna añadida con `ALTER TABLE ... ADD COLUMN ... DEFAULT` después de crear la proyección. Las lecturas de la tabla base ya eran correctas; solo se veían afectadas las lecturas atendidas por la proyección, hasta que se reconstruía. [#108569](https://github.com/ClickHouse/ClickHouse/pull/108569) ([tiandiwonder](https://github.com/tiandiwonder)).
* Corrige la desactivación silenciosa de la poda de particiones y de clave primaria cuando una columna de clave `LowCardinality(FixedString)` (o `LowCardinality(Nullable(FixedString))`) estaba envuelta en una función de la clave, por ejemplo, `PARTITION BY sipHash64(k) % N` con `WHERE k = 'literal'`. Estas consultas examinaban todas las particiones en lugar de podarlas. [#108777](https://github.com/ClickHouse/ClickHouse/pull/108777) ([groeneai](https://github.com/groeneai)).
* Conserva el orden original de las claves en la serialización de Map por buckets para corregir las operaciones de comparación que dependen de él. [#109178](https://github.com/ClickHouse/ClickHouse/pull/109178) ([Avogar](https://github.com/Avogar)).
* Corrige la inferencia de esquema de los formatos `Arrow`, `ArrowStream`, `Avro` y de los lectores heredados de `ORC` y `Parquet`, que devolvía `Nullable(Tuple)` para columnas `struct` que admiten valores nulos, aunque el tipo `Nullable(Tuple)` no está permitido (`allow_experimental_nullable_tuple_type` está desactivado). `DESCRIBE` devolvía un tipo que `CREATE TABLE` rechaza, por lo que la creación de una tabla o la inserción de datos con el esquema inferido fallaba con el error `Nullable Tuple type is not allowed`. [#109185](https://github.com/ClickHouse/ClickHouse/pull/109185) ([nihalzp](https://github.com/nihalzp)).
* Corrige un error por el que los valores `DEFAULT` de las columnas no se aplicaban en `INSERT INTO TABLE FUNCTION` (por ejemplo, `remote(...)` o `file(...)`) con datos `VALUES` en línea cuando el propio servidor analiza esos datos (`send_table_structure_on_insert_with_inline_data = 0`). Un `NULL` explícito insertado en una columna no `Nullable` con un `DEFAULT` se convertía en `0` en lugar del valor predeterminado declarado. Ahora se comporta como un `INSERT` en una tabla normal y como el protocolo HTTP. [#109258](https://github.com/ClickHouse/ClickHouse/pull/109258) ([groeneai](https://github.com/groeneai)).
* Se corrigió un segfault en `groupArrayLastMerge`. Ahora se valida la deserialización del estado de la función de agregación, por lo que un estado dañado no provoca accesos fuera de límites. [#109485](https://github.com/ClickHouse/ClickHouse/pull/109485) ([mstetsyuk](https://github.com/mstetsyuk)).
* Se corrigió un segfault en la función de agregación `largestTriangleThreeBuckets` al rechazar estados dañados de funciones de agregación durante la deserialización. [#109492](https://github.com/ClickHouse/ClickHouse/pull/109492) ([mstetsyuk](https://github.com/mstetsyuk)).
* Se corrigió la lectura de una columna Parquet con un `Tuple` no anulable cuando el tipo de ClickHouse solicitado lo encapsula en `Nullable` (p. ej., `Nullable(Tuple(...))`), que anteriormente fallaba con `TYPE_MISMATCH`. [#109615](https://github.com/ClickHouse/ClickHouse/pull/109615) ([groeneai](https://github.com/groeneai)).
* El lector nativo de Parquet v3 ahora puede leer una columna struct físicamente anulable (un grupo OPTIONAL de Parquet) como `Nullable(Tuple(...))`. Anteriormente generaba `TYPE_MISMATCH`. [#109898](https://github.com/ClickHouse/ClickHouse/pull/109898) ([groeneai](https://github.com/groeneai)).
* Se corrigió un bloqueo del servidor (desbordamiento de pila nativa) al copiar o destruir un literal `Array`/`Tuple`/`Map`/`Object` profundamente anidado, por ejemplo, en una consulta con un literal muy anidado y un valor elevado de `max_parser_depth`. [#110393](https://github.com/ClickHouse/ClickHouse/pull/110393) ([Algunenano](https://github.com/Algunenano)).
* Se corrigieron resultados incorrectos de `IS NULL` / `IS NOT NULL` / `count()` con `optimize_functions_to_subcolumns` en una columna convertida en `Nullable` mediante un `ALTER MODIFY COLUMN T` de solo metadatos a `Nullable(T)`. En las partes escritas antes de la conversión, la subcolumna `.null` se rellenaba con el valor predeterminado del tipo de almacenamiento (NULL), en lugar de derivarse de la columna principal físicamente presente, por lo que las filas existentes no nulas se notificaban incorrectamente como NULL. [#110584](https://github.com/ClickHouse/ClickHouse/pull/110584) ([groeneai](https://github.com/groeneai)).
* Se corrigió un `LOGICAL_ERROR` ("Bad cast from ColumnString to ColumnLowCardinality") durante el análisis del índice de clave primaria cuando una columna clave `LowCardinality` está encapsulada en una cadena de `CAST` anidados que vuelve a introducir `LowCardinality`, p. ej., `WHERE CAST(CAST(s, 'LowCardinality(String)'), 'String') < '5'`. En builds de depuración y con sanitizadores, esto abortaba el servidor; en builds de lanzamiento, fallaba la consulta. [#111050](https://github.com/ClickHouse/ClickHouse/pull/111050) ([groeneai](https://github.com/groeneai)).
* Se corrigió la lectura de datos `Arrow` y `ArrowStream` con columnas `Array` o `Map` anidadas vacías generadas por Apache Arrow Java anterior a la versión 19.0.0 (incluida con Apache Spark), que anteriormente se rechazaban con un error `INCORRECT_DATA` porque el búfer de desplazamientos era demasiado pequeño. [#111101](https://github.com/ClickHouse/ClickHouse/pull/111101) ([Algunenano](https://github.com/Algunenano)).
* Se corrigieron un error lógico `Block structure mismatch` (en builds de depuración y con sanitizadores) y un error `Illegal types of arguments` en operaciones de conjuntos sobre columnas compatibles de estado de agregación (p. ej., `quantileState` y `quantilesState(0.9)`) anidadas dentro de columnas contenedoras como `Tuple`, `Array`, `Map`, `Nullable` o `Variant`. [#111191](https://github.com/ClickHouse/ClickHouse/pull/111191) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se añadió validación para datos corruptos de índices replicados recibidos a través del protocolo nativo. [#112331](https://github.com/ClickHouse/ClickHouse/pull/112331) ([Avogar](https://github.com/Avogar)).
* Se corrigió una lectura fuera de límites durante la deduplicación de inserciones cuando un `INSERT` pasa por una vista materializada que cambia el número de filas antes de escribir en una tabla de destino particionada. [#112649](https://github.com/ClickHouse/ClickHouse/pull/112649) ([CheSema](https://github.com/CheSema)).
* Se corrigió una escritura fuera de los límites al leer una columna `DECIMAL` de `Parquet` cuyo tipo físico es más ancho que el tipo al que corresponde su precisión declarada; por ejemplo, `DECIMAL(9, 2)` almacenado físicamente como `INT64`. Estos archivos `Parquet` son válidos y otros escritores los generan, pero el lector dimensionaba la columna de destino según la precisión declarada, mientras que el decodificador escribía con el ancho físico, lo que corrompía la memoria. Ahora, al leer este tipo de archivo también se genera `DECIMAL_OVERFLOW` cuando un valor no cabe en la precisión declarada, en lugar de devolver datos corruptos, y se lee sin pérdida con una indicación de tipo de al menos el ancho del tipo físico. [#113046](https://github.com/ClickHouse/ClickHouse/pull/113046) ([groeneai](https://github.com/groeneai)).
* Se corrigió un fallo por el que `ATTACH PARTITION FROM`, `REPLACE PARTITION`, `MOVE PARTITION TO TABLE` y la adición de una réplica `ReplicatedMergeTree` fallaban con `Tables have different ...`, `METADATA_MISMATCH` o `INCOMPATIBLE_COLUMNS` en tablas cuyas definiciones se habían escrito con paréntesis redundantes, como `PARTITION BY (a)`, `ORDER BY (b)`, `INDEX ix (b * c) TYPE minmax`, `PROJECTION p (SELECT (b) ...)`, `CONSTRAINT c CHECK (a > 0)`, `TTL (d + INTERVAL 10 YEAR)` o `DEFAULT (a + 1)`. [#114188](https://github.com/ClickHouse/ClickHouse/pull/114188) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se corrige un error por el que una entidad de acceso que contiene una configuración con valor `Map`, como un perfil de configuración con `http_response_headers` o `additional_table_filters`, se almacenaba en un formato que ClickHouse no podía volver a leer, lo que hacía que la entidad no pudiera cargarse nunca tras un reinicio. [#114620](https://github.com/ClickHouse/ClickHouse/pull/114620) ([groeneai](https://github.com/groeneai)).
* Se corrige un error por el que `has`, `indexOf`, `countEqual`, `mapContainsKey`, `mapContainsValue` y el acceso por subíndice de `Map` devolvían "no encontrado" para una aguja constante `LowCardinality` igual al valor predeterminado del tipo de elemento, como un `String` vacío o el número cero. [#114624](https://github.com/ClickHouse/ClickHouse/pull/114624) ([groeneai](https://github.com/groeneai)).
* Se corrigieron resultados incorrectos de la optimización trivial de `GROUP BY ... LIMIT` (configuración `optimize_trivial_group_by_limit_query`) en consultas con `DISTINCT`, `QUALIFY`, funciones de ventana o `arrayJoin` en la proyección: estos consumen o filtran los grupos después de la agregación, por lo que limitar la agregación a `LIMIT + OFFSET` claves podía devolver muy pocas filas o valores incorrectos. La optimización ya no se aplica a estas consultas. [#114695](https://github.com/ClickHouse/ClickHouse/pull/114695) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se corrigieron resultados incorrectos para `SELECT count(arrayJoin(arr))` con el valor predeterminado `optimize_trivial_count_query = 1`. Se devolvía el número de filas almacenadas en lugar del número de elementos del array y, en `file()` y `url()`, la consulta devolvía `0`. [#115227](https://github.com/ClickHouse/ClickHouse/pull/115227) ([groeneai](https://github.com/groeneai)).
* Se corrigió un error por el que `uniq`, `uniqExact`, `uniqHLL12` y `uniqTheta` devolvían un resultado incorrecto para un argumento envuelto en una función inyectiva que oculta la nulabilidad, como `uniqExact(tuple(x))` sobre una columna `Nullable`. La optimización `optimize_injective_functions_inside_uniq` eliminaba la función envolvente, tras lo cual las filas NULL se omitían en lugar de contarse. [#115466](https://github.com/ClickHouse/ClickHouse/pull/115466) ([vdimir](https://github.com/vdimir)).
* Se permite que los lectores de KeeperMap acepten metadatos compartidos cuando claves primarias equivalentes solo difieren en paréntesis externos redundantes. [#115642](https://github.com/ClickHouse/ClickHouse/pull/115642) ([skuznetsov-clickhouse](https://github.com/skuznetsov-clickhouse)).

<h3 id="text-index-and-skip-index-fixes">
  Correcciones en los índices de texto y de omisión
</h3>

* Corrige un aborto del servidor cuando una consulta usa comparaciones `coalesce`/`ifNull` anidadas (p. ej., `WHERE coalesce(a, b, coalesce(c, d), e) = const`) en una tabla `MergeTree` con varios índices de omisión `minmax` y `use_skip_indexes_for_disjunctions = 1`. La reescritura del índice de omisión de `<op>(coalesce(...), const)` ahora se aplica recursivamente a los argumentos internos de `coalesce`, de modo que la RPN de cada índice coincide con la RPN de la plantilla, tal como presupone el código de seguimiento de disyunciones. [#103929](https://github.com/ClickHouse/ClickHouse/pull/103929) ([groeneai](https://github.com/groeneai)).
* Corrige `NOT_FOUND_COLUMN_IN_BLOCK`, lanzado por `ALTER TABLE ... MATERIALIZE INDEX` en partes creadas en 25.8 que contienen un índice de omisión sobre una columna añadida mediante un `ALTER TABLE ... ADD COLUMN` independiente. Durante el recálculo forzado, la mutación ahora lee correctamente todas las columnas requeridas por cada índice de omisión y proyección preexistentes en la parte. [#105039](https://github.com/ClickHouse/ClickHouse/pull/105039) ([groeneai](https://github.com/groeneai)).
* Corrige un subconteo silencioso en consultas `SELECT` cuando `use_query_condition_cache = 1` (valor predeterminado). Una consulta con la forma `PREWHERE pk_prefix = X WHERE non_pk IN (...)` sobre una columna con un índice de omisión de filtro Bloom contaminaba la `QueryConditionCache` para el predicado `pk_prefix = X`, por lo que una posterior consulta inocua `SELECT count() ... WHERE pk_prefix = X` devolvía un resultado incorrecto, con un conteo inferior al real. Afectaba a todas las versiones 26.x. [#105686](https://github.com/ClickHouse/ClickHouse/pull/105686) ([groeneai](https://github.com/groeneai)).
* Corrige una excepción cuando una consulta de búsqueda vectorial usa un índice vectorial, otro índice de omisión como `minmax` y `use_skip_indexes_on_data_read = 1`. [#106473](https://github.com/ClickHouse/ClickHouse/pull/106473) ([shankar-iyer](https://github.com/shankar-iyer)).
* Corrige "Too many marks" en un índice de texto de una parte combinada vacía. [#106867](https://github.com/ClickHouse/ClickHouse/pull/106867) ([azat](https://github.com/azat)).
* Corrige resultados incorrectos al consultar una tabla `ReplacingMergeTree` con `FINAL` y un filtro en un índice de texto mientras `query_plan_optimize_lazy_final` estaba habilitado. La optimización diferida de `FINAL` generaba pasos de lectura que no reproducían la lectura directa desde el índice de texto, por lo que el filtro descartaba todas las filas coincidentes. [#106894](https://github.com/ClickHouse/ClickHouse/pull/106894) ([Ergus](https://github.com/Ergus)).
* Corrige `LOGICAL ERROR` (`Bad cast from type DB::ColumnString to DB::ColumnLowCardinality`) cuando una constante `Variant` que contiene un miembro `LowCardinality` se compara con una columna clave cuya expresión de clave es una función determinista no monótona (por ejemplo, un índice de omisión `minmax` sobre `sipHash64(col)`). [#107111](https://github.com/ClickHouse/ClickHouse/pull/107111) ([groeneai](https://github.com/groeneai)).
* Corrige resultados incorrectos (a menudo vacíos) de `ORDER BY <col> LIMIT n` cuando la optimización `use_skip_indexes_for_top_k` está activa y una parte con un índice de omisión `minmax` en la columna de ordenación tiene filas eliminadas mediante una eliminación ligera con `DELETE`. La optimización ya no clasifica el minmax obsoleto de las partes con eliminaciones ligeras por delante de las partes que contienen las filas superiores vigentes. [#107320](https://github.com/ClickHouse/ClickHouse/pull/107320) ([groeneai](https://github.com/groeneai)).
* Corrige que el índice de omisión Set no descarte gránulos de columnas LowCardinality. [#107868](https://github.com/ClickHouse/ClickHouse/pull/107868) ([thevar1able](https://github.com/thevar1able)).
* La configuración `use_skip_indexes_on_data_read` ahora puede revertirse a su valor predeterminado anterior a la versión 26.1 (`false`) mediante la configuración `compatibility`, lo que ofrece una alternativa ante una regresión de rendimiento en la que la ruta de lectura de datos impide la poda de rangos de marcas de los índices de omisión `minmax`/`set`/`bloom_filter`. [#108330](https://github.com/ClickHouse/ClickHouse/pull/108330) ([egor-click](https://github.com/egor-click)).
* Se corrigió la lectura directa desde varios índices de texto parcialmente materializados. [#108607](https://github.com/ClickHouse/ClickHouse/pull/108607) ([CurtizJ](https://github.com/CurtizJ)).
* Se corrigió el problema por el que un índice de texto definido en `mapValues(map)` o `mapKeys(map)` no se utilizaba silenciosamente al consultar una tabla a través de una tabla con motor `Distributed` usando el analyzer. El índice se utilizaba para la tabla local y mediante `cluster()`/`remote()`, pero una consulta a través de una tabla con motor `Distributed` lo omitía (y fallaba con `INDEX_NOT_USED` al usar `force_data_skipping_indices`). [#109188](https://github.com/ClickHouse/ClickHouse/pull/109188) ([groeneai](https://github.com/groeneai)).
* Se corrigió un bloqueo del servidor en `CREATE HYPOTHETICAL INDEX ... TYPE set` (y `ngrambf_v1`/`tokenbf_v1`) cuando se omitía el argumento de índice obligatorio. Estas sentencias ahora se rechazan con un error claro. [#109294](https://github.com/ClickHouse/ClickHouse/pull/109294) ([groeneai](https://github.com/groeneai)).
* Se corrigieron resultados incorrectos de las funciones `has`, `mapContainsKey` y `mapContainsValue` con una subcadena vacía cuando había un índice de texto. [#110246](https://github.com/ClickHouse/ClickHouse/pull/110246) ([rschu1ze](https://github.com/rschu1ze)).
* Se corrigió el error `ATTEMPT_TO_READ_AFTER_EOF` al fusionar partes con un índice de texto si una de las partes fusionadas estaba vacía, por ejemplo, tras una mutación que eliminaba todas las filas de la parte. [#112490](https://github.com/ClickHouse/ClickHouse/pull/112490) ([CurtizJ](https://github.com/CurtizJ)).
* Se corrigió un bloqueo en la optimización del plan de consulta cuando una cláusula `WHERE` contiene una constante de cadena grande con muchos puntos y la tabla tiene un índice de omisión `bloom_filter`, `tokenbf_v1`, `ngrambf_v1` o `text`. Al comparar el nombre de una columna de filtro con las columnas del índice `JSONAllPaths(...)`, se enumeraban todas las divisiones del nombre por cada punto, lo que hacía que la creación de condiciones de índices de omisión fuera cuadrática respecto de la longitud de la constante. [#113289](https://github.com/ClickHouse/ClickHouse/pull/113289) ([groeneai](https://github.com/groeneai)).
* Se corrigió el problema por el que `ORDER BY ... LIMIT` devolvía menos filas de las solicitadas, o incluso ninguna, cuando una política de filas era el único filtro de la consulta y la columna de ordenación tenía un índice de omisión `minmax`. La optimización top-K restringía la lectura antes de aplicar la política de filas. [#114073](https://github.com/ClickHouse/ClickHouse/pull/114073) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="data-lake-fixes">
  Correcciones del lago de datos
</h3>

* Corrige una excepción de error lógico al leer tablas Iceberg cuya versión de formato se actualizó mediante una herramienta externa (p. ej., Spark). [#100407](https://github.com/ClickHouse/ClickHouse/pull/100407) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige una excepción (`LOGICAL_ERROR: 'PREWHERE passed to format that doesn't support it'`) al leer tablas Iceberg que contienen archivos de datos ORC con la optimización de PREWHERE habilitada. [#101206](https://github.com/ClickHouse/ClickHouse/pull/101206) ([groeneai](https://github.com/groeneai)).
* Corrige excepciones `LOGICAL_ERROR` al leer tablas de lago de datos `Iceberg` o `DeltaLake` a través de rutas que pueden llegar a la canalización de lectura sin un `datalake_table_state` fijado, como actualizaciones simultáneas de metadatos de `Iceberg` o lecturas de `merge` en tablas `DeltaLake`. [#102033](https://github.com/ClickHouse/ClickHouse/pull/102033) ([groeneai](https://github.com/groeneai)).
* Corrige el error esporádico `Logical error: 'Database <name> not found'` de `DataLakeConfiguration::getCatalog` al cargar una tabla con motor `Iceberg` dentro de una base de datos normal durante la carga asíncrona de metadatos. [#103775](https://github.com/ClickHouse/ClickHouse/pull/103775) ([groeneai](https://github.com/groeneai)).
* Corrige las lecturas excesivas de metadatos del catálogo y de S3 cuando una sentencia INSERT o DDL hace referencia a una tabla inexistente en una base de datos de catálogo DataLake con `show_data_lake_catalogs_in_system_tables` habilitado. La ruta de sugerencias para errores tipográficos cargaba los metadatos completos de Iceberg de cada tabla de todo el catálogo, lo que podía agotar la memoria en catálogos grandes. [#104124](https://github.com/ClickHouse/ClickHouse/pull/104124) ([il9ue](https://github.com/il9ue)).
* Corrige el valor inflado de `read_bytes` (y los bytes/s derivados que se muestran en `system.query_log`, la barra de progreso, etc.) al leer archivos Parquet. La implementación anterior informaba el tamaño comprimido total del grupo de filas en cada fragmento, por lo que al leer K de N columnas se contabilizaba en exceso por `N / K`. Ahora solo se suma el tamaño de las columnas seleccionadas. También corrige el seguimiento del progreso a nivel de archivo en las tablas Iceberg, que antes nunca informaba el tamaño del archivo de datos. [#105413](https://github.com/ClickHouse/ClickHouse/pull/105413) ([groeneai](https://github.com/groeneai)).
* Corrige resultados incorrectos al leer una tabla Iceberg con `iceberg_use_version_hint = 1` después de que otro escritor (como la función de tabla `icebergLocal`/`icebergS3`) avance la tabla sin esta configuración. `version-hint.text` ahora se mantiene sincronizado con cada escritor una vez que existe el archivo, por lo que los lectores posteriores que usan la sugerencia ven la instantánea más reciente. [#105682](https://github.com/ClickHouse/ClickHouse/pull/105682) ([groeneai](https://github.com/groeneai)).
* Las escrituras de Iceberg ahora preservan los valores NULL en columnas de partición `Nullable(T)`. Anteriormente, un NULL escrito por ClickHouse aparecía como el valor predeterminado del tipo interno (`0` para `int`) al leerse de nuevo con Spark u otros lectores de Iceberg. [#105862](https://github.com/ClickHouse/ClickHouse/pull/105862) ([groeneai](https://github.com/groeneai)).
* Corrige las eliminaciones por posición con merge-on-read de `Iceberg` v2 que devolvían filas incorrectas cuando un único archivo de borrado hace referencia a varios archivos de datos y varios archivos de borrado se aplican al mismo archivo de datos. Las entradas de eliminación ahora se filtran según la ruta del archivo al que hacen referencia. [#105888](https://github.com/ClickHouse/ClickHouse/pull/105888) ([groeneai](https://github.com/groeneai)).
* Corrige que el motor de tabla `IcebergLocal` pasara a ser de solo lectura después de un ciclo `DETACH` + `ATTACH` o de reiniciar el servidor, lo que hacía que todos los `INSERT` posteriores fallaran con `Local object storage Local is readonly. (READONLY)`. [#106016](https://github.com/ClickHouse/ClickHouse/pull/106016) ([groeneai](https://github.com/groeneai)).
* Corrige que la caché del sistema de archivos se deshabilitara silenciosamente para Azure Blob Storage (p. ej., tablas Delta Lake en Azure) porque los metadatos del objeto no incluían el ETag del blob. [#106091](https://github.com/ClickHouse/ClickHouse/pull/106091) ([thewisenerd](https://github.com/thewisenerd)).
* Se añadió validación de rutas para las tablas de Delta Lake a fin de impedir que los metadatos accedan a objetos fuera de la ubicación de almacenamiento configurada. [#106115](https://github.com/ClickHouse/ClickHouse/pull/106115) ([scanhex12](https://github.com/scanhex12)).
* La poda de particiones de Iceberg ahora gestiona correctamente los filtros `WHERE partition_col = (SELECT ... FROM ...)` en los que el analizador encapsula el resultado de la subconsulta escalar en un `_CAST(Const, 'TargetType')` interno con tipos de origen y destino coincidentes. Anteriormente, estos filtros deshabilitaban la poda de particiones y provocaban un análisis completo de la tabla. [#106204](https://github.com/ClickHouse/ClickHouse/pull/106204) ([groeneai](https://github.com/groeneai)).
* Se corrigió un problema por el que los catálogos REST de `Iceberg` con tablas se informaban incorrectamente como vacíos. [#106301](https://github.com/ClickHouse/ClickHouse/pull/106301) ([LefterisXefteris](https://github.com/LefterisXefteris)).
* Se corrigió una excepción `NOT_FOUND_COLUMN_IN_BLOCK` al consultar una tabla Iceberg o S3 con un `WHERE` compuesto que contiene `IS NOT NULL` en una columna que no figura en la lista `SELECT`, al usar el lector nativo de Parquet V3. [#106443](https://github.com/ClickHouse/ClickHouse/pull/106443) ([tiandiwonder](https://github.com/tiandiwonder)).
* Se corrigió el informe de progreso inflado al leer tablas Iceberg con filtros `_file` o `_path`. Anteriormente, el progreso de `total_bytes_to_read` incluía todos los archivos del manifiesto independientemente del filtrado. [#106491](https://github.com/ClickHouse/ClickHouse/pull/106491) ([PedroTadim](https://github.com/PedroTadim)).
* Se corrigió una excepción del servidor (error lógico `std::out_of_range`) al insertar en una tabla `Iceberg` cuyos nombres de columna del bloque de escritura no coinciden con los ID de campo del esquema más reciente (por ejemplo, después de que un escritor concurrente cambie el nombre de una columna dentro de la ventana de `iceberg_metadata_staleness_ms`). La inserción ahora falla con un error de consulta claro en lugar de abortar el servidor. [#107279](https://github.com/ClickHouse/ClickHouse/pull/107279) ([groeneai](https://github.com/groeneai)).
* Se corrigió un posible desbordamiento de pila del servidor (crash) al leer un esquema o valor profundamente anidado en los formatos MsgPack, BSON, ORC, Parquet, JSON, DeltaLake, Iceberg y Paimon. Estas entradas profundamente anidadas ahora se rechazan con una excepción. [#107341](https://github.com/ClickHouse/ClickHouse/pull/107341) ([Algunenano](https://github.com/Algunenano)).
* Se corrigió un crash (`LOGICAL_ERROR` en compilaciones de depuración) y un error silencioso que producía resultados incorrectos (en compilaciones de lanzamiento) al leer una tabla Iceberg cuyos metadatos vuelven a asociar un `schema-id` existente con un esquema diferente entre versiones de metadatos. Estos metadatos ahora se rechazan con `ICEBERG_SPECIFICATION_VIOLATION`. [#107370](https://github.com/ClickHouse/ClickHouse/pull/107370) ([groeneai](https://github.com/groeneai)).
* Se corrigió la lectura de tablas Iceberg v3 cuyos archivos de datos Parquet contienen columnas reservadas de linaje de filas (como `_row_id`); el lector nativo de Parquet ya no genera `ICEBERG_SPECIFICATION_VIOLATION` para ID de campo reservados que no forman parte del esquema de la tabla. [#107377](https://github.com/ClickHouse/ClickHouse/pull/107377) ([gregakinman](https://github.com/gregakinman)).
* Se corrigió una excepción espuria `filesystem error: in last_write_time: No such file or directory` al enumerar un directorio de almacenamiento de objetos en un disco local (por ejemplo, una tabla Iceberg en un disco `local`) mientras los archivos se reemplazan de forma concurrente. Las entradas eliminadas de forma concurrente ahora se omiten de la enumeración en lugar de abortarla. [#107432](https://github.com/ClickHouse/ClickHouse/pull/107432) ([groeneai](https://github.com/groeneai)).
* Se corrigió el error 'Account must be specified' al leer una tabla de Delta Lake en Azure. [#107620](https://github.com/ClickHouse/ClickHouse/pull/107620) ([SmitaRKulkarni](https://github.com/SmitaRKulkarni)).
* Se corrigió un bloqueo al leer tablas Iceberg con archivos de borrado por igualdad. Si una columna admitía valores nulos en el archivo de borrado por igualdad, pero no en el esquema de la tabla (o viceversa), los valores leídos del archivo de borrado se insertaban mediante una conversión sin comprobar en una columna de distinto tipo (una confusión de tipos de columna), lo que corrompía la columna y provocaba el bloqueo del servidor. [#109551](https://github.com/ClickHouse/ClickHouse/pull/109551) ([mstetsyuk](https://github.com/mstetsyuk)).
* Se corrigió un falso error `ICEBERG_SPECIFICATION_VIOLATION` al leer una tabla Iceberg cuyo tipo decimal (u otro tipo primitivo parametrizado) se serializaba con distintos espacios en blanco en los archivos de metadatos; por ejemplo, `decimal(20,0)` en los metadatos de la tabla y `decimal(20, 0)` en el manifiesto. Estas cadenas de tipos equivalentes según la especificación ahora se comparan ignorando los espacios en blanco. [#109676](https://github.com/ClickHouse/ClickHouse/pull/109676) ([groeneai](https://github.com/groeneai)).
* Se corrigió la lectura de tablas Iceberg cuyo orden de clasificación predeterminado hace referencia a una columna que requiere comillas (por ejemplo, `@timestamp`). Estas tablas no se podían leer porque el `ORDER BY` de almacenamiento sintetizado se construía a partir del nombre de columna sin procesar y no se podía analizar, lo que generaba `SYNTAX_ERROR`. [#110233](https://github.com/ClickHouse/ClickHouse/pull/110233) ([groeneai](https://github.com/groeneai)).
* Se corrigió la lectura de tablas Paimon que contienen una columna `ARRAY` o `MAP` que admite valores nulos. Estas tablas no se podían leer porque el mapeador de esquemas envolvía el tipo compuesto en `Nullable`, algo que ClickHouse no permite; por ello, tanto `DESC` como `SELECT` fallaban con `Nested type Array(Nullable(Int32)) cannot be inside Nullable type`. Ahora, una columna compuesta que admite valores nulos se asigna a un tipo compuesto sin `Nullable`, y los valores `NULL` se leen como valores vacíos. [#113450](https://github.com/ClickHouse/ClickHouse/pull/113450) ([groeneai](https://github.com/groeneai)).
* Se registra el espacio de nombres de Iceberg en el catálogo antes de escribir archivos de tabla (necesario para SeaweedFS). [#114285](https://github.com/ClickHouse/ClickHouse/pull/114285) ([azat](https://github.com/azat)).

<h3 id="s3-azure-object-storage-fixes">
  Correcciones de S3/Azure/almacenamiento de objetos
</h3>

* Se corrigió la excepción "Distributed task iterator is not initialized" al usar `url`, `s3` o funciones de tabla similares en consultas con réplicas paralelas habilitadas. [#100146](https://github.com/ClickHouse/ClickHouse/pull/100146) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se corrigió un posible segfault del servidor en funciones de tabla de clúster (`s3Cluster`, `urlCluster`, `fileCluster`, ...) cuando el planificador genera un `SELECT` con la marca `recursive_with` establecida, pero sin expresión `WITH`. [#105433](https://github.com/ClickHouse/ClickHouse/pull/105433) ([groeneai](https://github.com/groeneai)).
* Se corrigió el pushdown de filtros de `Parquet` y `ORC` para predicados `IN (subquery)`, lo que permite aplicar la poda de grupos de filas, páginas y filtros Bloom en lecturas de `file`, `url`, `s3` y almacenamiento de objetos. [#105863](https://github.com/ClickHouse/ClickHouse/pull/105863) ([arsenmuk](https://github.com/arsenmuk)).
* Se corrigió la excepción `LOGICAL_ERROR` durante la predescarga de caché cuando un objeto remoto de S3 se sobrescribe con contenido más corto entre la enumeración y la lectura. [#106375](https://github.com/ClickHouse/ClickHouse/pull/106375) ([fm4v](https://github.com/fm4v)).
* Se corrigió que la función de tabla `s3` ignorara silenciosamente una `partition_strategy` posicional en minúsculas (p. ej., `hive`). [#107297](https://github.com/ClickHouse/ClickHouse/pull/107297) ([jkartseva](https://github.com/jkartseva)).
* Se corrigió una regresión por la que establecer `compatibility = '26.6'` (lo que habilita implícitamente la estrategia de partición `hive`) aceptaba silenciosamente `{_partition_id}` en rutas de tablas de `S3` y almacenamiento de objetos, en lugar de generar `BAD_ARGUMENTS`. [#107437](https://github.com/ClickHouse/ClickHouse/pull/107437) ([LefterisXefteris](https://github.com/LefterisXefteris)).
* Se corrigió que `s3` y otras funciones de tabla de almacenamiento de objetos generaran `LOGICAL_ERROR` en lugar de `BAD_ARGUMENTS` cuando se duplica un argumento clave-valor, p. ej., `s3('http://...', format = 'CSV', format = 'TSV')`. [#107670](https://github.com/ClickHouse/ClickHouse/pull/107670) ([groeneai](https://github.com/groeneai)).
* Se corrigió una excepción del servidor (`Logical error: 'index >= result.start'`) al formatear una consulta malformada que mezcla las formas posicional y con nombre del argumento secreto de las funciones de tabla `s3`/`gcs`, p. ej., `s3('url', 'a', 'b', secret_access_key = 'c')`. [#107818](https://github.com/ClickHouse/ClickHouse/pull/107818) ([groeneai](https://github.com/groeneai)).
* Se corrigió la prioridad de la configuración de S3 para que un bloque de endpoint `<s3>` específico de una URL tenga precedencia sobre los valores predeterminados de `<s3>` de nivel superior. [#109251](https://github.com/ClickHouse/ClickHouse/pull/109251) ([bharatnc](https://github.com/bharatnc)).
* Se corrigieron errores `411 Length Required` de servicios de Azure: el transporte HTTP de Azure basado en Poco ahora establece `Content-Length` a partir del cuerpo de la solicitud para clientes del SDK que no establecen el encabezado por sí mismos (p. ej., Azure Key Vault). [#110299](https://github.com/ClickHouse/ClickHouse/pull/110299) ([thevar1able](https://github.com/thevar1able)).

<h3 id="s3queue-fixes">
  Correcciones de S3Queue
</h3>

* Corrige un bloqueo del servidor (acceso fuera de límites) en `S3Queue`/`AzureQueue` con `enable_hash_ring_filtering = 1` cuando un lote contenía un archivo no procesable y, al mismo tiempo, fallaba la solicitud a Keeper para marcar el lote como en procesamiento. [#108977](https://github.com/ClickHouse/ClickHouse/pull/108977) ([groeneai](https://github.com/groeneai)).
* Corrige filtraciones de credenciales en `SHOW CREATE`, `system.query_log`, los registros del servidor y la salida de `EXPLAIN`. Ahora, todas las formas de localizador de `S3` ocultan `session_token` y los secretos de Google ADC, los valores de `extra_credentials`/`headers` en cualquier posición de argumento, las claves secretas duplicadas o generadas mediante expresiones, las formas posicionales no válidas (error seguro) y las credenciales integradas en URL de S3; esto abarca las funciones de tabla `s3`/`s3Cluster` con URL explícita y colecciones con nombre, los motores de tabla basados en S3 (`S3`, `GCS`, los motores de lago de datos, `S3Queue`), el motor de base de datos `S3`, `BACKUP ... TO S3` y el motor de base de datos `Backup`. Además, los argumentos secretos de `encrypt`/`decrypt`/HMAC construidos mediante una expresión, incluidos los insertados desde una UDF de SQL, ahora se ocultan en los nombres de proyección, `EXPLAIN QUERY TREE` y `EXPLAIN actions`. [#109768](https://github.com/ClickHouse/ClickHouse/pull/109768) ([Algunenano](https://github.com/Algunenano)).
* Corrige el modo ordenado de `S3Queue`/`AzureQueue` con nodos de procesamiento persistentes: los bloqueos de bucket ahora se renuevan durante el streaming, de modo que la limpieza por TTL (`persistent_processing_node_ttl_seconds`) no elimine los bloqueos de un procesador activo. Si aun así se pierde la propiedad del bloqueo, se detecta y se informa (un error lógico y el evento de perfil `ObjectStorageQueueBucketLockLostOwnership`), y el streaming se recupera con un nuevo iterador de archivos. [#110292](https://github.com/ClickHouse/ClickHouse/pull/110292) ([kssenii](https://github.com/kssenii)).

<h3 id="security-and-access-control-fixes">
  Correcciones de seguridad y de control de acceso
</h3>

* Se corrigió un fallo del servidor (SIGSEGV) que podía provocar cualquier usuario con permisos de `CREATE TABLE` al enviar `CREATE TABLE ... TO INNER UUID '...'` sin una cláusula `ENGINE` mediante HTTP o el protocolo nativo. El mismo error también bloqueaba el cliente. El analizador ahora informa correctamente del error `BAD_ARGUMENTS` en lugar de desreferenciar un puntero nulo. [#105579](https://github.com/ClickHouse/ClickHouse/pull/105579) ([groeneai](https://github.com/groeneai)).
* Se corrigió un fallo del servidor al consultar tablas DeltaLake con `allow_experimental_delta_kernel_rs` habilitado y una credencial u opción que contenía bytes no válidos (la FFI de Rust generaba un pánico al cruzar el límite `extern "C"`). [#106109](https://github.com/ClickHouse/ClickHouse/pull/106109) ([Algunenano](https://github.com/Algunenano)).
* Se corrigieron múltiples lecturas fuera de los límites del montón en el lector del formato Arrow IPC (`ArrowColumnToCHColumn`). Un archivo Arrow malformado podía declarar más filas de las que contenían sus búferes, declarar longitudes de elementos secundarios list/struct/map incompatibles con su elemento principal, proporcionar desplazamientos de lista no monotónicos o truncar un bitmap de validez secundario, lo que provocaba lecturas más allá del final de las asignaciones del montón. Cualquier usuario con el privilegio `SELECT` podía provocar este problema mediante `file()`, `format()`, funciones de tabla o entradas de ArrowFlight. Ahora se validan todos los búferes de datos, desplazamientos, view-struct y bitmap de validez antes de cualquier acceso a punteros sin procesar, y se comprueba la coherencia de las formas y los desplazamientos de list/struct/map. [#106395](https://github.com/ClickHouse/ClickHouse/pull/106395) ([Algunenano](https://github.com/Algunenano)).
* Se corrigió un error por el que las columnas `used_privileges` y `missing_privileges` de `system.query_log` podían contener cadenas de privilegios filtradas de consultas anteriores no relacionadas de otro usuario, base de datos o sesión. [#106425](https://github.com/ClickHouse/ClickHouse/pull/106425) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se corrigió un desbordamiento de búfer del montón (fallo del servidor) en `decodeHTMLComponent` al decodificar cadenas que contenían las entidades HTML expansivas `&nGt;` o `&nLt;`, que podía provocar cualquier usuario con una única consulta `SELECT`. [#106741](https://github.com/ClickHouse/ClickHouse/pull/106741) ([Algunenano](https://github.com/Algunenano)).
* Se corrigieron resultados de consulta incorrectos causados por la caché de condiciones de consulta cuando las mutaciones sobre la marcha (`apply_mutations_on_fly`) o las partes de parche filtraban filas antes de `PREWHERE`. Una consulta que leía con `apply_mutations_on_fly = 1` podía contaminar la caché, de modo que una consulta posterior con `apply_mutations_on_fly = 0` y el mismo predicado omitía marcas que debería haber leído y devolvía demasiadas pocas filas. La misma corrección también cubre las políticas de seguridad a nivel de fila, que se anteponen como filtro a `PREWHERE`: una consulta ejecutada bajo una política de fila restrictiva podía contaminar la caché para una consulta posterior que utilizara el mismo predicado sin esa política. [#107145](https://github.com/ClickHouse/ClickHouse/pull/107145) ([groeneai](https://github.com/groeneai)).
* Se corrigió un desbordamiento de búfer del montón (fallo del servidor) en `windowFunnel` al finalizar un estado manipulado de una función de agregación con un tipo de evento fuera de rango, que podía provocar cualquier usuario con una única consulta `SELECT`. [#107412](https://github.com/ClickHouse/ClickHouse/pull/107412) ([uwezkhan](https://github.com/uwezkhan)).
* Se corrigió un problema por el que `currentUser()`, `user()`, `SESSION_USER` y `authenticatedUser()` se evaluaban como una cadena vacía durante el vaciado de inserciones asíncronas (con `async_insert = 1`). Esto afectaba a las expresiones de columna `DEFAULT`/`MATERIALIZED` y a las vistas materializadas que hacían referencia a estas funciones, que almacenaban silenciosamente una cadena vacía en lugar del usuario que realizó la inserción. [#107541](https://github.com/ClickHouse/ClickHouse/pull/107541) ([groeneai](https://github.com/groeneai)).
* Cuando se asignan varias cuotas al mismo usuario o rol, ahora todas se aplican conjuntamente (una consulta se rechaza si se supera cualquiera de ellas), en lugar de aplicar solo una cuota elegida de forma no determinista. `SHOW QUOTA` y `system.quota_usage` ahora muestran todas las cuotas aplicadas al usuario actual. [#107664](https://github.com/ClickHouse/ClickHouse/pull/107664) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `SYSTEM RESET DDL WORKER` ahora requiere el nuevo privilegio `SYSTEM RESET DDL WORKER`. Anteriormente, cualquier usuario autenticado (incluidos los usuarios `readonly`) podía ejecutarlo y restablecer repetidamente el estado del worker de DDL, bloqueando las operaciones DDL `ON CLUSTER`. [#108460](https://github.com/ClickHouse/ClickHouse/pull/108460) ([groeneai](https://github.com/groeneai)).
* Se corrigió la identificación de usuarios mediante `ssl_certificate` para que un único comodín `*` coincida exactamente con un componente del nombre (RFC 6125 6.4.3). Anteriormente, un comodín en un sujeto `CN` o SAN `DNS:` (por ejemplo, `*.corp.example.com`) también coincidía con nombres de varias etiquetas, como `evil.deep.corp.example.com`, lo que permitía al titular de un certificado para un subdominio más profundo autenticarse como el usuario comodín. La coincidencia de SAN `URI:` no ha cambiado. [#108472](https://github.com/ClickHouse/ClickHouse/pull/108472) ([groeneai](https://github.com/groeneai)).
* Los comandos del protocolo MySQL wire `COM_FIELD_LIST` (`mysql_list_fields`) y `COM_INIT_DB` (`USE database`) ahora aplican el mismo control de acceso que sus equivalentes en SQL (`SHOW COLUMNS`/`DESCRIBE` y `USE`). Anteriormente, podían revelar los nombres de columnas de tablas para las que el usuario solo tenía permisos parciales sobre las columnas y cambiar la base de datos actual sin el privilegio `SHOW DATABASES`. [#108508](https://github.com/ClickHouse/ClickHouse/pull/108508) ([groeneai](https://github.com/groeneai)).
* `http_forbid_headers` ahora realiza las coincidencias sin distinguir entre mayúsculas y minúsculas. Los nombres de los encabezados HTTP no distinguen entre mayúsculas y minúsculas, por lo que prohibir `Authorization` ahora también bloquea `authorization`, `AUTHORIZATION` y otras variantes. Los patrones `header_regexp` configurados ahora también se comparan sin distinguir entre mayúsculas y minúsculas, sin necesidad de la marca explícita `(?i)`. [#108509](https://github.com/ClickHouse/ClickHouse/pull/108509) ([groeneai](https://github.com/groeneai)).
* Se corrigió una vulnerabilidad de divulgación de metadatos por la que `DESCRIBE loop('db', 'table')` y `DESCRIBE loop(<inner table function>)` omitían la comprobación de acceso a `SHOW COLUMNS` / al origen, lo que permitía a usuarios sin privilegios leer el esquema de columnas de una tabla. [#108624](https://github.com/ClickHouse/ClickHouse/pull/108624) ([groeneai](https://github.com/groeneai)).
* Se corrigió un error de inicio por el que una base de datos `DataLakeCatalog` creada con una versión anterior (25.12 o anterior) y un `auth_header` malformado no podía adjuntarse tras actualizar a la versión 26.2 o posterior, lo que impedía iniciar el servidor. Ahora, `auth_header` se valida solo en `CREATE` y, en `ATTACH`, el catálogo se crea de forma diferida en el primer uso en lugar de durante el inicio. Por tanto, una única base de datos de catálogo mal configurada o inaccesible ya no bloquea el inicio del servidor. [#108674](https://github.com/ClickHouse/ClickHouse/pull/108674) ([groeneai](https://github.com/groeneai)).
* Se reforzaron las conexiones de RabbitMQ frente a tramas AMQP maliciosamente grandes y se aplicaron sistemáticamente las comprobaciones de `remote_url_allow_hosts` a `rabbitmq_address`. [#112479](https://github.com/ClickHouse/ClickHouse/pull/112479) ([kssenii](https://github.com/kssenii)).
* Se corrigió un caso en el que `CREATE TABLE ... ENGINE = Distributed(...)` sin una lista de columnas podía revelar la estructura de una tabla local que el usuario que la creaba no tenía permiso para ver. Cuando el servidor local ejecuta un `CREATE` por sí mismo, la estructura ahora se infiere en el contexto del propio usuario, por lo que se requiere `SHOW COLUMNS` en la tabla de destino, como ya ocurre con el motor `Remote`. No se cubre un `CREATE` reproducido desde la cola DDL (`ON CLUSTER` o dentro de una base de datos `Replicated`). [#113220](https://github.com/ClickHouse/ClickHouse/pull/113220) ([groeneai](https://github.com/groeneai)).
* Se corrigió un caso en el que `CREATE TABLE ... ENGINE = Buffer(...)` sin una lista de columnas podía revelar la estructura de una tabla de destino que el usuario que la crea no tiene permiso para ver. En un `CREATE` ejecutado por el propio servidor local, la estructura ahora se infiere en el contexto del usuario, por lo que se requiere `SHOW COLUMNS` en el destino, como ya ocurre con `Merge` y `Remote`. Esto no cubre un `CREATE` reproducido desde la cola DDL (`ON CLUSTER` o dentro de una base de datos `Replicated`). [#113372](https://github.com/ClickHouse/ClickHouse/pull/113372) ([groeneai](https://github.com/groeneai)).
* Se limitó el tamaño del mensaje de inicio del protocolo de conexión de PostgreSQL, que se lee antes de la autenticación. [#115708](https://github.com/ClickHouse/ClickHouse/pull/115708) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="backup-and-restore-fixes">
  Correcciones de Backup y restauración
</h3>

* Se corrigió un aborto del servidor durante `RESTORE` de copias de seguridad que contienen tablas con dependencias cíclicas. [#103824](https://github.com/ClickHouse/ClickHouse/pull/103824) ([thevar1able](https://github.com/thevar1able)).
* Se corrigió el problema por el que se ignoraba la clase de almacenamiento de S3 (`s3_storage_class` / `s3_storage_class_name`) para los objetos escritos mediante carga multiparte en discos `S3` y almacenamiento de objetos, lo que provocaba que los objetos grandes se crearan con la clase predeterminada `STANDARD`. El nombre de la opción ahora se acepta como `s3_storage_class` y `s3_storage_class_name` para discos, almacenamiento de objetos y copias de seguridad. [#106214](https://github.com/ClickHouse/ClickHouse/pull/106214) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se corrigió un problema por el que `SYSTEM RELOAD CONFIG` descartaba la configuración de Azure Blob Storage por endpoint (como `use_native_copy`), lo que hacía que se ignorara la configuración de un disco para `BACKUP`/`RESTORE` hasta reiniciar el servidor. [#106357](https://github.com/ClickHouse/ClickHouse/pull/106357) ([jkartseva](https://github.com/jkartseva)).
* Se corrigió el fallo de las copias de seguridad con FILE\_DOESNT\_EXIST cuando se recopila el destino de REPLACE de una vista materializada actualizable en una base de datos Replicated o Shared cuya vista materializada aún no se ha instanciado en la réplica que inicia la copia de seguridad. [#106411](https://github.com/ClickHouse/ClickHouse/pull/106411) ([jkartseva](https://github.com/jkartseva)).
* Se corrigió que Azure BACKUP/RESTORE ignorara la configuración de endpoint para discos `azure_blob_storage` con formato heredado. [#106784](https://github.com/ClickHouse/ClickHouse/pull/106784) ([jkartseva](https://github.com/jkartseva)).
* Se corrigió `BACKUP` a `AzureBlobStorage`: al copiar un archivo de datos dentro de una copia de seguridad, el objeto de destino se escribía fuera del directorio de la copia de seguridad. Las comprobaciones de existencia de objetos de copia de seguridad en destinos `S3` ahora usan solicitudes `HeadObject` exactas en lugar de listar prefijos, lo que evita coincidencias falsas con claves de prefijos similares. [#107153](https://github.com/ClickHouse/ClickHouse/pull/107153) ([pamarcos](https://github.com/pamarcos)).
* Las copias de seguridad incrementales ya no almacenan credenciales de `S3` en el localizador `<base_backup>` del archivo de metadatos `.backup`. Las copias de seguridad creadas con `use_same_s3_credentials_for_base_backup = 1`, o con credenciales explícitas de copia de seguridad base que coincidan con este localizador, almacenan un marcador no secreto y se restauran sin configuración adicional durante la restauración; para las copias de seguridad creadas con credenciales explícitas distintas para la copia de seguridad base o argumentos adicionales de autenticación base, páselos a `RESTORE` mediante la configuración `base_backup`. Las copias de seguridad creadas por versiones anteriores con credenciales incrustadas siguen pudiendo restaurarse. [#107357](https://github.com/ClickHouse/ClickHouse/pull/107357) ([pamarcos](https://github.com/pamarcos)).
* Se corrigió `RESTORE` para las tablas `ReplicatedMergeTree`, de modo que las partes con contenido duplicado de una copia de seguridad se conserven en lugar de deduplicarse silenciosamente. [#107652](https://github.com/ClickHouse/ClickHouse/pull/107652) ([pamarcos](https://github.com/pamarcos)).
* Un marcador de posición `{_partition_id}` en la ruta de un motor similar a un archivo (`S3`, `AzureBlobStorage`, `URL`, etc.) sin una `partition_strategy` explícita vuelve a implicar la estrategia `wildcard`, independientemente de `file_like_engine_default_partition_strategy`. Esto restaura la compatibilidad con versiones anteriores para DDL anteriores a la 26.6 que empezaron a fallar con `BAD_ARGUMENTS` ("Partition strategy hive can not be used with a '\_partition\_id' wildcard in the path"). [#111279](https://github.com/ClickHouse/ClickHouse/pull/111279) ([fm4v](https://github.com/fm4v)).

<h3 id="clickhouse-keeper-fixes">
  Correcciones de ClickHouse Keeper
</h3>

* Corrige la limpieza de snapshots de `Keeper` tras escrituras fallidas, de modo que los snapshots parciales se eliminen de forma segura y las escrituras fallidas puedan reintentarse sin avanzar `latest_snapshot_meta`. [#105779](https://github.com/ClickHouse/ClickHouse/pull/105779) ([antonio2368](https://github.com/antonio2368)).
* Corrige los fallos de `Keeper` durante la sincronización de seguidores cuando la nueva cola de respuestas del despachador de solicitudes podía llenarse antes de que se iniciara el hilo de respuestas. [#106049](https://github.com/ClickHouse/ClickHouse/pull/106049) ([antonio2368](https://github.com/antonio2368)).
* Corrige el bloqueo ocasional de Keeper durante el inicio cuando la configuración `nuraft_max_log_gap_in_stream` se establece en un valor distinto del predeterminado (el valor predeterminado es 0, es decir, desactiva la canalización de solicitudes `append_entries`). [#106220](https://github.com/ClickHouse/ClickHouse/pull/106220) ([al13n321](https://github.com/al13n321)).
* El TLS interno de Raft de Keeper ahora respeta la configuración `openSSL.client.verificationMode`. Anteriormente, la verificación de certificados de pares siempre estaba habilitada para la comunicación Raft entre instancias de Keeper, independientemente de esta configuración, por lo que `none` se ignoraba silenciosamente. Ahora, `none` desactiva explícitamente la verificación de certificados de pares de Raft, mientras que la ausencia de esta configuración mantiene el comportamiento anterior, seguro de forma predeterminada. Las configuraciones que establezcan explícitamente `none` dejarán de verificar los certificados de pares de Raft tras la actualización, conforme a la configuración especificada. [#106726](https://github.com/ClickHouse/ClickHouse/pull/106726) ([antonio2368](https://github.com/antonio2368)).
* Corrige la recreación espuria de sesiones de ZooKeeper al recargar la configuración. [#107096](https://github.com/ClickHouse/ClickHouse/pull/107096) ([azat](https://github.com/azat)).
* Corrige un error en ClickHouse Keeper por el que los metadatos de snapshots informados mediante `last_snapshot` (y `zk_latest_snapshot_size` en `mntr`) podían retroceder tras instalar un snapshot obsoleto o duplicado. Esto también podía permitir que un snapshot local con el mismo índice sobrescribiera un archivo de snapshot registrado mientras aún se transmitía a un par o se cargaba en S3. [#107321](https://github.com/ClickHouse/ClickHouse/pull/107321) ([antonio2368](https://github.com/antonio2368)).
* Corrige el bloqueo de una vista materializada actualizable si se pierde la conexión con ZooKeeper en un momento inoportuno. [#108234](https://github.com/ClickHouse/ClickHouse/pull/108234) ([al13n321](https://github.com/al13n321)).
* Corrige las mutaciones con un parámetro de consulta como partición (`ALTER TABLE ... UPDATE/DELETE ... IN PARTITION {param:Type}`): el valor de partición sustituido se serializaba en la entrada de mutación de una forma que no podía analizarse de nuevo, lo que impedía cargar la tabla (en las tablas replicadas, en cada réplica). Ahora también se verifica que los comandos de mutación puedan analizarse de nuevo antes de escribirse en ZooKeeper o en disco, de modo que una discrepancia similar haga fallar la consulta `ALTER` en lugar de inutilizar la tabla. [#111518](https://github.com/ClickHouse/ClickHouse/pull/111518) ([al13n321](https://github.com/al13n321)).
* Corrige el desbordamiento numérico al analizar datos para `system.zookeeper_info`. [#111629](https://github.com/ClickHouse/ClickHouse/pull/111629) ([kssenii](https://github.com/kssenii)).

<h3 id="crash-and-stability-fixes">
  Correcciones de fallos y mejoras de estabilidad
</h3>

* Corrige la excepción NOT\_FOUND\_COLUMN\_IN\_BLOCK al usar LIMIT BY con columnas constantes junto con DISTINCT y ORDER BY en el nuevo analizador. [#93195](https://github.com/ClickHouse/ClickHouse/pull/93195) ([ashrithb](https://github.com/ashrithb)).
* Mejora la estabilidad de la conexión con HiveCatalog mediante la incorporación de un mecanismo de reintento automático y lógica de reconexión para gestionar errores TTransportException al comunicarse con Hive Metastore. [#98471](https://github.com/ClickHouse/ClickHouse/pull/98471) ([otselnik](https://github.com/otselnik)).
* Corrige el plegado de constantes durante el análisis en funciones de cortocircuito (`if`, `multiIf`, `and`, `or`, etc.) para que las ramas estáticamente inalcanzables ya no generen excepciones durante el análisis. Por ejemplo, `WITH 0 AS n SELECT multiIf(n = 0, 0, intDiv(100, n))` ahora devuelve correctamente `0` en lugar de fallar con un error de división por cero. [#103157](https://github.com/ClickHouse/ClickHouse/pull/103157) ([fastio](https://github.com/fastio)).
* Corrige una finalización del servidor que podía producirse al llamar a `runningAccumulate` en una función de agregación que devuelve su propio estado. [#105085](https://github.com/ClickHouse/ClickHouse/pull/105085) ([antaljanosbenjamin](https://github.com/antaljanosbenjamin)).
* Corrige `getServerSetting` para que devuelva el valor efectivo actual de las configuraciones del servidor modificables en tiempo de ejecución (como `max_server_memory_usage`, `mark_cache_size`, `max_concurrent_queries`, tamaños de grupos de subprocesos, etc.), en consonancia con lo que informa `system.server_settings`. [#105172](https://github.com/ClickHouse/ClickHouse/pull/105172) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige la excepción `NOT_FOUND_COLUMN_IN_BLOCK` al combinar `ORDER BY ... WITH FILL INTERPOLATE` y `LIMIT N BY` con el analizador habilitado. [#105481](https://github.com/ClickHouse/ClickHouse/pull/105481) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* Corrige una excepción del servidor (error lógico `Trying to execute PLACEHOLDER action`) al usar como lado derecho de `IN` una CTE `MATERIALIZED` cuyo cuerpo es una subconsulta correlacionada. Esta CTE ahora se rechaza durante el análisis, de forma coherente con el rechazo del mismo patrón cuando se hace referencia directamente a la CTE en `FROM`. [#105518](https://github.com/ClickHouse/ClickHouse/pull/105518) ([groeneai](https://github.com/groeneai)).
* Corrige que `variant_throw_on_type_mismatch/dynamic_throw_on_type_mismatch=false` no capturara excepciones durante la ejecución de funciones. [#105543](https://github.com/ClickHouse/ClickHouse/pull/105543) ([Avogar](https://github.com/Avogar)).
* Corrige la excepción NOT\_FOUND\_COLUMN\_IN\_BLOCK cuando una expresión TTL hace referencia a una subcolumna. [#105578](https://github.com/ClickHouse/ClickHouse/pull/105578) ([Avogar](https://github.com/Avogar)).
* Corrige un bloqueo del servidor que podía producirse al cancelar una consulta que leía de PostgreSQL —mediante la función de tabla postgresql, el motor de tabla PostgreSQL o un diccionario con una fuente PostgreSQL— (por ejemplo, con KILL QUERY), si fallaba la cancelación de la consulta remota de PostgreSQL. [#105949](https://github.com/ClickHouse/ClickHouse/pull/105949) ([rorylshanks](https://github.com/rorylshanks)).
* Corrige un posible bloqueo debido a un literal de cadena demasiado grande enviado en la consulta. [#105996](https://github.com/ClickHouse/ClickHouse/pull/105996) ([nickitat](https://github.com/nickitat)).
* Corrige la excepción `INVALID_WITH_FILL_EXPRESSION` al usar `INTERPOLATE ()` (vacío) con un prefijo de ordenación en `ORDER BY` y `use_with_fill_by_sorting_prefix` habilitado. Las columnas del prefijo de ordenación ahora se excluyen correctamente del conjunto de interpolación implícito, en consonancia con el comportamiento de `INTERPOLATE (col)` especificado explícitamente. [#106001](https://github.com/ClickHouse/ClickHouse/pull/106001) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* Los estados malformados de `AggregateFunction(uniqTheta, ...)` procedentes de entradas `RowBinary` o parámetros de consulta ahora se rechazan con `CORRUPTED_DATA` en lugar de provocar la finalización del servidor. [#106260](https://github.com/ClickHouse/ClickHouse/pull/106260) ([groeneai](https://github.com/groeneai)).
* Se corrige un bloqueo y un posible error `NOT_FOUND_COLUMN_IN_BLOCK` al usar la optimización basada en restricciones (`optimize_using_constraints`) con subconsultas correlacionadas. [#106349](https://github.com/ClickHouse/ClickHouse/pull/106349) ([Algunenano](https://github.com/Algunenano)).
* Se corrige la excepción `NUMBER_OF_COLUMNS_DOESNT_MATCH` al consultar una tabla `Distributed` con dos o más columnas ALIAS que se expanden a la misma expresión (p. ej., ambas definidas como `toString(x)`), o cuando la misma expresión se escribe tanto como referencia a una columna ALIAS como directamente en la lista SELECT, con una cláusula `ORDER BY`. [#106404](https://github.com/ClickHouse/ClickHouse/pull/106404) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* Se corrigió el error `LOGICAL_ERROR` "Trying to get name of not a column: `ExpressionList`" generado por consultas que pasan un asterisco dentro de `multiIf` a un argumento de función de tabla, p. ej., `numbers(multiIf(*, ...), 2)`. Ahora la consulta rechaza el patrón no resoluble con `UNSUPPORTED_METHOD`. [#106647](https://github.com/ClickHouse/ClickHouse/pull/106647) ([groeneai](https://github.com/groeneai)).
* Se rechazan patrones glob patológicos de `file` que provocarían una recursión ilimitada al enumerar directorios. Ahora se impone una profundidad máxima de recursión de 1000; las consultas que la superen generan `TOO_DEEP_RECURSION` en lugar de abortar el servidor por desbordamiento de pila. [#106676](https://github.com/ClickHouse/ClickHouse/pull/106676) ([groeneai](https://github.com/groeneai)).
* Se corrige la excepción `'Trying to read from input() twice.'` generada cuando la función de tabla `input` se encapsula en una CTE no MATERIALIZED a la que se hace referencia desde más de un punto de la consulta. Ahora la consulta se rechaza con el error claro `INVALID_USAGE_OF_INPUT` durante la planificación. `input` es un flujo de cliente de un solo uso y solo puede consumirlo una única fuente del plan de consulta. [#106682](https://github.com/ClickHouse/ClickHouse/pull/106682) ([groeneai](https://github.com/groeneai)).
* Se corrigen columnas incoherentes (que posteriormente provocan LOGICAL\_ERROR) tras una excepción (p. ej., MEMORY\_LIMIT\_EXCEEDED) durante el análisis. [#106802](https://github.com/ClickHouse/ClickHouse/pull/106802) ([azat](https://github.com/azat)).
* Se corrige un bloqueo del servidor (SIGSEGV) al leer datos Protobuf truncados con `input_format_allow_errors_num > 0`. [#106905](https://github.com/ClickHouse/ClickHouse/pull/106905) ([atsarevskiy](https://github.com/atsarevskiy)).
* Se corrige un bloqueo del servidor (desreferenciación de puntero nulo) al ejecutar `TRUNCATE` o `DROP` en una tabla `EmbeddedRocksDB` cuyo identificador de RocksDB se había liberado; por ejemplo, una tabla `read_only` cuyo directorio de datos se vació mediante un `TRUNCATE` anterior. [#106940](https://github.com/ClickHouse/ClickHouse/pull/106940) ([groeneai](https://github.com/groeneai)).
* Se corrige una excepción (`std::length_error` notificada como `LOGICAL_ERROR`) al leer desde una función de tabla `*Cluster`, como `urlCluster`, con una configuración de `max_streams_for_files_processing_in_cluster_functions` muy elevada. El número de flujos ahora se limita a un valor razonable. [#106946](https://github.com/ClickHouse/ClickHouse/pull/106946) ([groeneai](https://github.com/groeneai)).
* Se corrigió la finalización del servidor cuando una consulta distribuida se cancelaba inmediatamente antes de enviarse a un shard. [#106950](https://github.com/ClickHouse/ClickHouse/pull/106950) ([groeneai](https://github.com/groeneai)).
* Se corrigió una excepción del servidor (error lógico `this->visited_views == right->visited_views`) en `INSERT` cuando dos vistas materializadas de la misma tabla de origen escriben en la misma tabla de destino y una vista dependiente lee de esa tabla, con `materialized_views_squash_parallel_inserts` habilitado. [#107027](https://github.com/ClickHouse/ClickHouse/pull/107027) ([groeneai](https://github.com/groeneai)).
* Se corrigió una excepción `LOGICAL_ERROR` al insertar en una tabla DeltaLake con columnas que no coinciden con su esquema de escritura (por ejemplo, una columna `Nested` que se aplana en subcolumnas, o una función de tabla con un subconjunto explícito de columnas). Ahora, estas inserciones fallan con un error `INCOMPATIBLE_COLUMNS` orientado al usuario. [#107058](https://github.com/ClickHouse/ClickHouse/pull/107058) ([groeneai](https://github.com/groeneai)).
* Se corrigió un `LOGICAL_ERROR` ("Table expression ... data must be initialized") que se producía cuando un selector de asterisco calificado (por ejemplo, `x.*`) hacía referencia por nombre a una CTE recursiva dentro de su propio término recursivo. Estos selectores ahora expanden las columnas de la tabla recursiva, igual que ya lo hacen una columna calificada (`x.a`) o un selector no calificado (`*`) en esa posición. [#107144](https://github.com/ClickHouse/ClickHouse/pull/107144) ([groeneai](https://github.com/groeneai)).
* Se corrigió un `LOGICAL_ERROR` ("Unexpected exception in refresh scheduling") que podía provocar que el servidor entrara en un ciclo de fallos al reiniciarse cuando una vista materializada actualizable tiene una dependencia `REFRESH ... DEPENDS ON <name>` cuyo nombre sin calificar coincide con una tabla temporal o con el nombre de una CTE. [#107156](https://github.com/ClickHouse/ClickHouse/pull/107156) ([groeneai](https://github.com/groeneai)).
* Se corrigió un `LOGICAL_ERROR` (`Variant N (T) has size X, but expected Y`) cuando se aplica una función como `toString` o `concat` a una columna `Variant` o `Dynamic` que contiene una única variante no vacía junto con valores NULL, y la función devuelve sin cambios la columna de entrada. [#107374](https://github.com/ClickHouse/ClickHouse/pull/107374) ([groeneai](https://github.com/groeneai)).
* Se corrigió un `LOGICAL_ERROR` (`block.rows() == getRows()`) que se producía en un `INSERT` asíncrono en una tabla `Alias` cuando `use_strict_insert_block_limits` estaba habilitado. [#107400](https://github.com/ClickHouse/ClickHouse/pull/107400) ([groeneai](https://github.com/groeneai)).
* Se corrigió una excepción del servidor (`Logical error: Not-ready Set is passed as the second argument for function 'in'`) cuando una expresión de clave (`ORDER BY`, `PRIMARY KEY`, `PARTITION BY` o un `INDEX` de omisión) contenía un operador `IN` con una tabla en el lado derecho, por ejemplo, `ORDER BY (x IN some_table)`. Estas expresiones de clave ahora se rechazan al crear la tabla. [#107424](https://github.com/ClickHouse/ClickHouse/pull/107424) ([groeneai](https://github.com/groeneai)).
* Se corrigió un fallo poco frecuente del servidor durante el procesamiento de `DISTINCT` que podía ocurrir si fallaba una asignación de memoria (por ejemplo, al alcanzar un límite de memoria) mientras se inicializaba el conjunto de claves distintas. [#107467](https://github.com/ClickHouse/ClickHouse/pull/107467) ([groeneai](https://github.com/groeneai)).
* Se corrigieron errores en operaciones de `DeltaLake` tras la expiración de credenciales temporales de S3 actualizando las credenciales almacenadas en caché antes de la siguiente operación. Las credenciales de asunción de rol de STS también se actualizan tras fallos de autenticación. [#107480](https://github.com/ClickHouse/ClickHouse/pull/107480) ([ahmadov](https://github.com/ahmadov)).
* Se corrigió un `LOGICAL_ERROR` (`Not-ready Set is passed as the second argument for function 'in'`) al consultar una tabla con una clave `PARTITION BY` y una subconsulta `IN`/`NOT IN` incluida en una expresión más amplia, por ejemplo, `WHERE (c0 IN (SELECT ...)) != 0`. [#107515](https://github.com/ClickHouse/ClickHouse/pull/107515) ([groeneai](https://github.com/groeneai)).
* Corrige un fallo (desreferenciación de puntero nulo) que podía producirse al ejecutar localmente un plan de consulta distribuida (`make_distributed_plan` + `distributed_plan_execute_locally`) con `log_formatted_queries = 1`. [#107570](https://github.com/ClickHouse/ClickHouse/pull/107570) ([groeneai](https://github.com/groeneai)).
* Corrige un fallo del servidor al leer una vista materializada cuyo destino es una tabla `Distributed` cuando la consulta se ejecuta con `enable_analyzer = 0`. [#107653](https://github.com/ClickHouse/ClickHouse/pull/107653) ([groeneai](https://github.com/groeneai)).
* Corrige un fallo del servidor (SIGSEGV) al leer datos Protobuf con `input_format_allow_errors_num > 0`, cuando un mensaje válido precede a otro incorrecto (que se puede omitir) en el mismo bloque. [#107739](https://github.com/ClickHouse/ClickHouse/pull/107739) ([atsarevskiy](https://github.com/atsarevskiy)).
* Corrige el bloqueo durante varios minutos de las funciones de tabla `odbc` y `jdbc`, que ignoraban la cancelación de consultas (`KILL QUERY`, `max_execution_time`) cuando el puente dejaba de responder durante la inferencia de la estructura de la tabla remota. [#107809](https://github.com/ClickHouse/ClickHouse/pull/107809) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige un posible fallo (desreferenciación de puntero nulo) cuando la sobrescritura de `database`/`db` de una colección con nombre pasada a `remote()`/`remoteSecure()` no es un nombre de base de datos constante; por ejemplo, `remote(nc, database = (SELECT 1))`. Ahora la consulta devuelve un error claro en lugar de provocar un fallo. [#108271](https://github.com/ClickHouse/ClickHouse/pull/108271) ([groeneai](https://github.com/groeneai)).
* Las consultas de búsqueda vectorial que seleccionan la columna `_distance` ahora devuelven un error adecuado en lugar de fallar con un `LOGICAL_ERROR`. [#108423](https://github.com/ClickHouse/ClickHouse/pull/108423) ([rschu1ze](https://github.com/rschu1ze)).
* Corrige un posible fallo (desbordamiento del búfer del montón) cuando se utilizaba como clave de `GROUP BY` una columna de estado de una función de agregación de la familia `quantileTDigest` y varios hilos la serializaban simultáneamente. [#110263](https://github.com/ClickHouse/ClickHouse/pull/110263) ([groeneai](https://github.com/groeneai)).
* Corrige la poda incorrecta derivada del análisis del índice de clave primaria en tablas con una clave de ordenación inversa (descendente) (`ORDER BY (g, r DESC)`). Un gránulo que abarcaba un cambio en una columna de clave inicial seguido de una columna de clave descendente podía podarse incorrectamente y descartar filas coincidentes. [#111059](https://github.com/ClickHouse/ClickHouse/pull/111059) ([nihalzp](https://github.com/nihalzp)).
* Corrige un error lógico `block.rows() == getRows()` (una lectura fuera de límites y una deduplicación de inserciones defectuosa en compilaciones de producción) cuando un `INSERT` pasa por una vista materializada dependiente cuyo destino es un `Alias` y cuya consulta interna cambia el número de filas, con una tabla con deduplicación accesible tras el alias. [#111103](https://github.com/ClickHouse/ClickHouse/pull/111103) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Corrige un segfault debido a un acceso a memoria fuera de límites al deserializar un estado de función de agregación malformado que contiene un valor `String`. Estos estados ahora se validan y rechazan en lugar de provocar segfaults. [#111606](https://github.com/ClickHouse/ClickHouse/pull/111606) ([mstetsyuk](https://github.com/mstetsyuk)).
* Corrige un fallo al leer un archivo Parquet con metadatos de filtro de Bloom incoherentes. Estos archivos también podían devolver silenciosamente menos filas de las debidas. [#112498](https://github.com/ClickHouse/ClickHouse/pull/112498) ([tiandiwonder](https://github.com/tiandiwonder)).
* Corrige un fallo de segmentación y una corrupción silenciosa de datos cuando un `INSERT` en el motor `File` o la función de tabla `file` agrega datos a un archivo no vacío en un formato que no admite anexarlos, como `Avro`. La escritura mediante un descriptor de archivo o una ruta particionada omitía la comprobación existente, por lo que se suprimía el prefijo de formato y se escribía un segundo encabezado tras los bytes existentes, dejando el archivo ilegible. Este tipo de `INSERT` ahora se rechaza con `CANNOT_APPEND_TO_FILE`, como ya sucede con una ruta simple. [#112839](https://github.com/ClickHouse/ClickHouse/pull/112839) ([groeneai](https://github.com/groeneai)).
* Corrige el bloqueo de `DROP TABLE` y `SYSTEM STOP VIEW` cuando una vista materializada actualizable se bloquea durante la planificación de su consulta de actualización. [#113188](https://github.com/ClickHouse/ClickHouse/pull/113188) ([evillique](https://github.com/evillique)).
* Corrige una terminación poco frecuente del servidor cuando las entradas de la cola de inserciones asíncronas tenían plazos idénticos. [#113363](https://github.com/ClickHouse/ClickHouse/pull/113363) ([mstetsyuk](https://github.com/mstetsyuk)).
* Corrige la corrupción de memoria del montón al leer Parquet mediante un formato de entrada que gestiona su propio búfer de lectura, por ejemplo, un diccionario con `SOURCE(FILE(... format 'Parquet'))`. Las tareas de prelectura y decodificación en segundo plano aún podían leer y escribir en el búfer después de que el pipeline lo liberara, lo que podía provocar la finalización del servidor. [#114668](https://github.com/ClickHouse/ClickHouse/pull/114668) ([groeneai](https://github.com/groeneai)).
* Corrige un bloqueo al eliminar una tabla `TimeSeries` cuyo nombre se ordena lexicográficamente antes que los nombres de sus tablas internas, por ejemplo, una tabla llamada `-ts`, o al eliminar una vista materializada declarada con `ENGINE = TimeSeries`. La operación de eliminación se autobloqueaba mediante la protección DDL y no podía cancelarse con `KILL QUERY`. [#114953](https://github.com/ClickHouse/ClickHouse/pull/114953) ([groeneai](https://github.com/groeneai)).

<h3 id="other-bug-fixes">
  Otras correcciones de errores
</h3>

* Las funciones `like`, `ilike`, `notLike`, `notILike` y `match` ahora admiten un haystack constante con una aguja no constante (p. ej., `'foo' LIKE pattern_column`), lo que antes generaba `ILLEGAL_COLUMN`. [#100479](https://github.com/ClickHouse/ClickHouse/pull/100479) ([Onyx2406](https://github.com/Onyx2406)).
* Corrige el error `NOT_FOUND_COLUMN_IN_BLOCK` al seleccionar desde una VIEW sobre una tabla con una proyección normal. [#101218](https://github.com/ClickHouse/ClickHouse/pull/101218) ([amosbird](https://github.com/amosbird)).
* Rechaza valores Float64 negativos (p. ej., `-100.5`) en configuraciones de workload como `max_bytes_per_second`, `max_cpus`, etc. Antes solo se validaban los enteros negativos, lo que permitía que los valores de punto flotante negativos crearan silenciosamente nodos de scheduler defectuosos. [#101842](https://github.com/ClickHouse/ClickHouse/pull/101842) ([groeneai](https://github.com/groeneai)).
* Las lecturas desde almacenamiento de objetos ahora responden con rapidez a la cancelación de consultas. [#103016](https://github.com/ClickHouse/ClickHouse/pull/103016) ([SmitaRKulkarni](https://github.com/SmitaRKulkarni)).
* Corrige que `input_format_max_block_size_bytes` se ignorara silenciosamente durante el análisis de `INSERT` cuando `max_insert_block_size_bytes` es `0` (el valor predeterminado). La configuración ahora limita correctamente el tamaño de los bloques generados por los formatos de entrada basados en filas. [#103068](https://github.com/ClickHouse/ClickHouse/pull/103068) ([Fgrtue](https://github.com/Fgrtue)).
* Corrige que ClickHouse produjera ocasionalmente tokens GSSAPI no válidos debido a la eliminación incorrecta de bytes nulos finales. [#103114](https://github.com/ClickHouse/ClickHouse/pull/103114) ([EmeraldShift](https://github.com/EmeraldShift)).
* EXPLAIN SYNTAX expande las vistas parametrizadas. [#103263](https://github.com/ClickHouse/ClickHouse/pull/103263) ([jrdi](https://github.com/jrdi)).
* Corrige la corrupción de datos al escribir Parquet (y otros formatos con tráiler, como ORC y Arrow) en HDFS mediante `INSERT INTO FUNCTION hdfs(...)`. Desde la versión 26.1, `WriteBufferFromHDFS` no vaciaba su búfer de trabajo al ejecutar `finalize()`, por lo que se perdían silenciosamente hasta los últimos `DBMS_DEFAULT_BUFFER_SIZE` bytes de cada archivo, incluido el pie `PAR1` de Parquet. Al leer estos archivos se devolvía `Not a Parquet file (wrong magic bytes at the end of file)`. [#103268](https://github.com/ClickHouse/ClickHouse/pull/103268) ([groeneai](https://github.com/groeneai)).
* Corrige resultados incorrectos y un posible error lógico en subconsultas correlacionadas cuando se establece un límite de tamaño de join (`max_rows_in_join` / `max_bytes_in_join`) junto con `join_overflow_mode = 'break'`. El join creado internamente para evaluar una subconsulta correlacionada ahora ignora esos límites definidos por el usuario, por lo que ya no puede detenerse prematuramente ni descartar filas. [#103322](https://github.com/ClickHouse/ClickHouse/pull/103322) ([groeneai](https://github.com/groeneai)).
* Corrige resultados incorrectos o la omisión de una proyección cuando una proyección de agregación contiene varias agregaciones `sumIf` con distintas condiciones `IN (...)`. [#104765](https://github.com/ClickHouse/ClickHouse/pull/104765) ([Ergus](https://github.com/Ergus)).
* Corrige que `deltaSumTimestamp` devuelva resultados incorrectos para tipos enteros con signo que cruzan el cero. [#104830](https://github.com/ClickHouse/ClickHouse/pull/104830) ([thevar1able](https://github.com/thevar1able)).
* Corrige el error `Logical error: 'Metadata is not initialized'` generado por `DELETE FROM` en una tabla `Iceberg`, `DeltaLake` o `Hudi` recién adjunta cuyo archivo de metadatos está corrupto o no se puede cargar. En su lugar, se devuelve una excepción habitual orientada al usuario y el servidor continúa en ejecución. [#104917](https://github.com/ClickHouse/ClickHouse/pull/104917) ([groeneai](https://github.com/groeneai)).
* Las consultas `ATTACH TABLE name <clauses>;` que incluyen cláusulas de almacenamiento (`ORDER BY`, `PARTITION BY`, `PRIMARY KEY`, `SAMPLE BY`, `TTL`, `UNIQUE KEY` o `SETTINGS` del motor) sin `ENGINE` ahora generan `BAD_ARGUMENTS`, en lugar de volver a adjuntar silenciosamente la tabla con su definición almacenada y descartar las cláusulas especificadas por el usuario. Los `SETTINGS` de sesión a nivel de consulta (como `log_comment`) se siguen aplicando. Use `ATTACH TABLE t;` para volver a adjuntar la tabla con los metadatos almacenados, o `ALTER TABLE t MODIFY SETTING ...` después de `ATTACH` para cambiar la configuración. [#105068](https://github.com/ClickHouse/ClickHouse/pull/105068) ([groeneai](https://github.com/groeneai)).
* Se corrigieron un desbordamiento del búfer de montón al leer archivos Arrow o ArrowStream con desplazamientos intermedios corruptos en una columna binaria o de cadena, y una desreferenciación de puntero nulo al leer columnas Arrow geoetiquetadas. [#105449](https://github.com/ClickHouse/ClickHouse/pull/105449) ([Algunenano](https://github.com/Algunenano)).
* Se corrigió un cierre del servidor al leer subcolumnas `Dynamic` de una tabla `Memory` comprimida después de `ALTER`. [#105464](https://github.com/ClickHouse/ClickHouse/pull/105464) ([Avogar](https://github.com/Avogar)).
* Se incluyó `skip_first_lines` en la clave de la caché de esquemas para los formatos `WithNames`. [#105469](https://github.com/ClickHouse/ClickHouse/pull/105469) ([Avogar](https://github.com/Avogar)).
* Se corrigió `histogram`, que producía resultados incorrectos con entradas pequeñas no ordenadas. [#105548](https://github.com/ClickHouse/ClickHouse/pull/105548) ([Avogar](https://github.com/Avogar)).
* Se corrigió el uso de la tabla de inserción en funciones de tabla cuando `optimize_trivial_insert_select` está habilitado. [#105555](https://github.com/ClickHouse/ClickHouse/pull/105555) ([Avogar](https://github.com/Avogar)).
* Se corrigió la pérdida de datos acumulados entre filas en la función de ventana `estimateCompressionRatio`. [#105581](https://github.com/ClickHouse/ClickHouse/pull/105581) ([Avogar](https://github.com/Avogar)).
* La extracción de valores de partición de Hive ahora respeta la configuración `cast_string_to_date_time_mode` y, de forma predeterminada, acepta timestamps ISO 8601 con sufijos de zona horaria (p. ej., `+0000`, `+00:00`, `Z`) en las claves de partición. [#105584](https://github.com/ClickHouse/ClickHouse/pull/105584) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se corrigió la recuperación de errores del formato de entrada `Template` tras filas malformadas. [#105735](https://github.com/ClickHouse/ClickHouse/pull/105735) ([niyue](https://github.com/niyue)).
* Se corrigió el formato de `SYSTEM INSTRUMENT ADD` para que los argumentos del controlador estén separados por un único espacio, y se rechazan las listas no válidas de argumentos de instrumentación `SLEEP` con más de dos valores o con un intervalo cuyo mínimo sea mayor que el máximo. [#105984](https://github.com/ClickHouse/ClickHouse/pull/105984) ([pamarcos](https://github.com/pamarcos)).
* Se corrigió el fallo silencioso de las operaciones de partición de ALTER TABLE con claves de partición Bool. [#106004](https://github.com/ClickHouse/ClickHouse/pull/106004) ([Avogar](https://github.com/Avogar)).
* Se corrigieron `JSONExtractRaw` y `JSONHas` para rutas JSON tipadas con valores predeterminados. [#106005](https://github.com/ClickHouse/ClickHouse/pull/106005) ([Avogar](https://github.com/Avogar)).
* Se corrigió un prefijo `/` incorrecto en rutas base vacías de configuraciones de lago de datos. [#106013](https://github.com/ClickHouse/ClickHouse/pull/106013) ([thewisenerd](https://github.com/thewisenerd)).
* Se corrigió que `system.dictionaries` devolviera 0 filas tras una revocación parcial de `SHOW DICTIONARIES`. [#106105](https://github.com/ClickHouse/ClickHouse/pull/106105) ([Avogar](https://github.com/Avogar)).
* Corrige resultados incorrectos en consultas sobre tablas cuyo `ORDER BY` contiene una función monótonamente decreciente, como `(c0 / -42)` o `intDiv(c0, -42)`. Los predicados sobre la columna subyacente (por ejemplo, `c0 < 0`) podían descartar erróneamente gránulos que contenían filas coincidentes, lo que provocaba resultados incompletos. [#106136](https://github.com/ClickHouse/ClickHouse/pull/106136) ([nihalzp](https://github.com/nihalzp)).
* Se añadió validación para estados de agregación `DDSketch` malformados durante la inserción. [#106236](https://github.com/ClickHouse/ClickHouse/pull/106236) ([yariks5s](https://github.com/yariks5s)).
* Se corrigió la consistencia de la caché del sistema de archivos tras degradaciones fallidas de `SLRU`, evitando que las entradas quedaran bloqueadas en estado de expulsión. También se corrigieron el redimensionamiento de la caché dividida `System`/`Data` y la limpieza de espacio libre para que los límites se actualicen de forma atómica y se pueda recuperar espacio de ambos segmentos de caché. [#106286](https://github.com/ClickHouse/ClickHouse/pull/106286) ([kssenii](https://github.com/kssenii)).
* Se corrigió una conversión incorrecta de valores `Float16` subnormales a `Float32` (por ejemplo, al leerlos de archivos `.npy` de NumPy), causada por un desplazamiento de mantisa desfasado en una posición. [#106343](https://github.com/ClickHouse/ClickHouse/pull/106343) ([jh0x](https://github.com/jh0x)).
* Corrige `regexpExtract(haystack, pattern)` para que los patrones sin grupo de captura devuelvan la coincidencia completa en lugar de generar `INDEX_OF_POSITIONAL_ARGUMENT_IS_OUT_OF_RANGE`. [#106374](https://github.com/ClickHouse/ClickHouse/pull/106374) ([groeneai](https://github.com/groeneai)).
* Corrige un error lógico al crear un diccionario de polígonos a partir de datos de origen que contienen coordenadas de puntos `NaN` o infinitas. Estas coordenadas ahora se rechazan con un error claro. [#106423](https://github.com/ClickHouse/ClickHouse/pull/106423) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Los diccionarios HTTP ahora pueden especificar encabezados de solicitud mediante colecciones con nombre. [#106459](https://github.com/ClickHouse/ClickHouse/pull/106459) ([ZelvaMan](https://github.com/ZelvaMan)).
* Los valores de enumeración `Avro` malformados ahora se validan y rechazan con una excepción, en lugar de provocar accesos a memoria fuera de los límites y la terminación del servidor. [#106476](https://github.com/ClickHouse/ClickHouse/pull/106476) ([mstetsyuk](https://github.com/mstetsyuk)).
* Corrige que `LIMIT WITH TIES` y `LIMIT WITH TIES` fraccionario no respetaran la intercalación de `ORDER BY ... COLLATE` al determinar empates. Las filas iguales según la intercalación (por ejemplo, `'1'` y `'01'` con intercalación numérica) se comparaban byte a byte, por lo que algunas filas empatadas se descartaban erróneamente del resultado. [#106539](https://github.com/ClickHouse/ClickHouse/pull/106539) ([nihalzp](https://github.com/nihalzp)).
* Corrige que las optimizaciones `DISTINCT` en orden y `LIMIT BY` en orden (incluido `LIMIT BY` negativo) devolvieran resultados incorrectos cuando la entrada se ordenaba con una intercalación (`ORDER BY ... COLLATE`). Las filas iguales según la intercalación (por ejemplo, `'a'` y `'A'` con una intercalación sin distinción entre mayúsculas y minúsculas) se ordenan por clave de intercalación y no son adyacentes por valor, por lo que la optimización en orden ahora se omite cuando se utiliza un colacionador. [#106564](https://github.com/ClickHouse/ClickHouse/pull/106564) ([nihalzp](https://github.com/nihalzp)).
* Se corrigió una condición de carrera durante el cierre del consumidor de NATS que podía terminar el servidor. [#106692](https://github.com/ClickHouse/ClickHouse/pull/106692) ([mstetsyuk](https://github.com/mstetsyuk)).
* Se corrigieron varios problemas de seguridad de memoria y agotamiento de recursos en lectores de formatos accesibles desde entradas no confiables: una lectura fuera de los límites del montón en el manejo de la longitud de los niveles de definición/repetición de `DataPageV2` del lector nativo de Parquet, un desbordamiento de pila en archivos Parquet con esquemas profundamente anidados y asignaciones que ignoraban `max_memory_usage` al analizar geometrías GeoParquet WKB/WKT y cadenas/bytes de Avro. [#106739](https://github.com/ClickHouse/ClickHouse/pull/106739) ([Algunenano](https://github.com/Algunenano)).
* Se corrigió que `keeper_server.http_control.secure_port` enviara respuestas HTTP en texto sin cifrar a clientes HTTPS. El puerto seguro ahora sirve HTTPS correctamente. [#106822](https://github.com/ClickHouse/ClickHouse/pull/106822) ([linjiayu1025-collab](https://github.com/linjiayu1025-collab)).
* Se corrigió que `SHOW CREATE ROW POLICY` emitiera `restrictive`/`permissive` en minúsculas en lugar de mayúsculas, de forma incoherente con otras palabras clave. [#106865](https://github.com/ClickHouse/ClickHouse/pull/106865) ([valerypetrov](https://github.com/valerypetrov)).
* Se corrigió que las partes se marcaran como dañadas y se desconectaran en cada recarga de partes (reinicio del servidor, `DETACH` o `ATTACH`) en tablas con una columna `LowCardinality(Nullable(...))` en la clave de partición. Desde la versión 26.5, el archivo de índice minmax de cada parte no se escribía cuando el mínimo y el máximo de dicha columna eran `NULL`, aunque la comprobación de consistencia de la parte seguía requiriéndolo. Las partes escritas por las versiones afectadas no incluyen el archivo de índice minmax y aún deben volver a adjuntarse manualmente. [#106945](https://github.com/ClickHouse/ClickHouse/pull/106945) ([PedroTadim](https://github.com/PedroTadim)).
* Se corrigió que `elapsed_us` siempre fuera cero y que `read_rows`/`read_bytes` se contabilizaran por debajo de su valor real en `system.processors_profile_log` y `system.query_log` para consultas de vaciado de inserciones asíncronas (`AsyncInsertFlush`). [#106982](https://github.com/ClickHouse/ClickHouse/pull/106982) ([cwurm](https://github.com/cwurm)).
* Se corrigió un error lógico `Block structure mismatch in UnionStep stream` (abortado del servidor en builds de depuración/sanitizer, `Code: 49` en builds de lanzamiento) que se producía cuando una rama de un `UNION`/`INTERSECT`/`EXCEPT` leía una columna serializada como `Sparse`, mientras que la rama homóloga leía la misma columna completa (por ejemplo, al insertar en una vista materializada). [#107041](https://github.com/ClickHouse/ClickHouse/pull/107041) ([groeneai](https://github.com/groeneai)).
* Se corrigió el orden incorrecto de las filas en consultas `ORDER BY` sobre `UNION ALL` con `optimize_read_in_order` y `read_in_order_use_virtual_row` habilitados. [#107053](https://github.com/ClickHouse/ClickHouse/pull/107053) ([vdimir](https://github.com/vdimir)).
* Se corrigió un error de sintaxis cuando una cláusula `FORMAT`, `SETTINGS` o `INTO OUTFILE` sigue a `SHOW ROW POLICIES` o `SHOW MASKING POLICIES` (p. ej., `SHOW ROW POLICIES FORMAT TabSeparated`). [#107061](https://github.com/ClickHouse/ClickHouse/pull/107061) ([groeneai](https://github.com/groeneai)).
* Se corrigió que `trimLeft`, `trimRight` y `trimBoth` (y los alias `ltrim`, `rtrim`, `trim`) generaran `TOO_LARGE_STRING_SIZE` cuando el conjunto personalizado de caracteres para recortar tenía más de 16 caracteres. Los conjuntos de recorte de cualquier longitud vuelven a ser compatibles. [#107071](https://github.com/ClickHouse/ClickHouse/pull/107071) ([fm4v](https://github.com/fm4v)).
* Se corrigió un desbordamiento de enteros con signo en `quantileExactExclusive`, `quantilesExactExclusive`, `quantileExactInclusive` y `quantilesExactInclusive` que podía producir resultados incorrectos para entradas `Int64` que abarcaran un rango amplio. [#107154](https://github.com/ClickHouse/ClickHouse/pull/107154) ([groeneai](https://github.com/groeneai)).
* Las recargas de configuración ya no vuelven a ejecutar los scripts de inicio, lo que evita que las acciones de inicio que solo deben ejecutarse una vez vuelvan a ejecutarse. [#107187](https://github.com/ClickHouse/ClickHouse/pull/107187) ([mstetsyuk](https://github.com/mstetsyuk)).
* Se corrigió el orden incorrecto de los resultados de `ORDER BY` sobre `UNION ALL` con `optimize_read_in_order` habilitado cuando la canalización de la unión se reducía debido a la configuración de `max_streams_for_union_step`; ahora se omite esta reducción cuando el plan depende de flujos de salida ordenados de UNION. [#107208](https://github.com/ClickHouse/ClickHouse/pull/107208) ([vdimir](https://github.com/vdimir)).
* Se corrigió una posible desreferenciación de puntero nulo al resolver la configuración del proxy durante la fase final de apagado del servidor. [#107231](https://github.com/ClickHouse/ClickHouse/pull/107231) ([PedroTadim](https://github.com/PedroTadim)).
* Se corrigió `ORDER BY ... WITH FILL`, que producía filas adicionales cuando una columna de ORDER BY anterior a la columna de relleno usa una intercalación `COLLATE`. Las filas ahora se agrupan por el prefijo de ordenación mediante esa intercalación, de acuerdo con el orden de clasificación. [#107365](https://github.com/ClickHouse/ClickHouse/pull/107365) ([groeneai](https://github.com/groeneai)).
* Se corrigió el comportamiento indefinido al pasar un valor de coma flotante no finito (como `nan` o `inf`) como argumento de marca de tiempo o duración a las funciones de tabla `prometheusQuery` / `prometheusQueryRange`. Ahora, dicho argumento genera `BAD_ARGUMENTS` en lugar de producir una marca de tiempo inválida. [#107417](https://github.com/ClickHouse/ClickHouse/pull/107417) ([groeneai](https://github.com/groeneai)).
* Se corrigieron resultados incorrectos de la optimización `optimize_rewrite_aggregate_function_with_if` para funciones de agregación que preservan valores de carga útil `NULL` (la familia `*_respect_nulls`: `anyRespectNulls`, `first_value_respect_nulls`, `anyLast_respect_nulls`, `last_value_respect_nulls`). La optimización ya no reescribe `f(if(cond, x, NULL))` a la forma `-If` para dichas funciones. [#107430](https://github.com/ClickHouse/ClickHouse/pull/107430) ([groeneai](https://github.com/groeneai)).
* Se añadió validación para límites malformados en la entrada ORC. [#107580](https://github.com/ClickHouse/ClickHouse/pull/107580) ([al13n321](https://github.com/al13n321)).
* Se corrigió una denegación de servicio no autenticada por agotamiento de memoria en el puerto del protocolo MySQL. [#107599](https://github.com/ClickHouse/ClickHouse/pull/107599) ([tiandiwonder](https://github.com/tiandiwonder)).
* Se corrigió un problema que impedía usar la interfaz MySQL con `MySQL Connector/J` 8.2.0 y versiones posteriores (incluida la serie 9.x). El campo `info` del paquete `OK` ahora está codificado con longitud, como en el servidor MySQL, por lo que el controlador JDBC puede conectarse. [#107693](https://github.com/ClickHouse/ClickHouse/pull/107693) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se corrigió el error lógico `Block structure mismatch in UnionStep stream` (abortado del servidor en compilaciones de depuración/sanitizador, `Code: 49` en compilaciones de lanzamiento) que se producía cuando las ramas hermanas de un `UNION`/`INTERSECT`/`EXCEPT` diferían solo en su predicado `WHERE` y el predicado de una de ellas se reducía a una constante en una columna `Const`. [#107719](https://github.com/ClickHouse/ClickHouse/pull/107719) ([groeneai](https://github.com/groeneai)).
* La lectura de datos `Arrow` y `ArrowStream` con columnas `String` o `Binary` vacías generadas por Apache Arrow Java anterior a la versión 19.0.0 (incluido Apache Spark) ya no produce `INCORRECT_DATA`. [#107764](https://github.com/ClickHouse/ClickHouse/pull/107764) ([Algunenano](https://github.com/Algunenano)).
* Los bloques Native malformados cuyo discriminador `Variant` hace referencia a una variante inexistente ahora se rechazan de forma segura. [#107991](https://github.com/ClickHouse/ClickHouse/pull/107991) ([uwezkhan](https://github.com/uwezkhan)).
* Se corrigió una regresión de rendimiento al leer columnas `Dynamic` con varios hilos. [#107997](https://github.com/ClickHouse/ClickHouse/pull/107997) ([Avogar](https://github.com/Avogar)).
* El ajuste obsoleto del lago de datos `storage_catalog_url` ahora se rechaza correctamente mediante la protección del catálogo (anteriormente solo se comprobaban `storage_catalog_type` y `storage_aws_access_key_id`), y el mensaje de error enumera todos los ajustes obsoletos. [#108040](https://github.com/ClickHouse/ClickHouse/pull/108040) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se corrigió un problema por el que la función/motor de tabla `ArrowFlight` rechazaba una colección con nombre que omitía la clave opcional `dataset` con el error `No such key 'dataset'`. [#108041](https://github.com/ClickHouse/ClickHouse/pull/108041) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Los secretos y las credenciales ahora se enmascaran en `system.query_views_log.view_query` en lugar de exponerse en el SQL registrado de las vistas. [#108214](https://github.com/ClickHouse/ClickHouse/pull/108214) ([Fidelaggio](https://github.com/Fidelaggio)).
* Se corrigió el problema por el que `type_json_allow_duplicated_key_with_literal_and_nested_object` no funcionaba con rutas tipadas en JSON. [#108218](https://github.com/ClickHouse/ClickHouse/pull/108218) ([Avogar](https://github.com/Avogar)).
* Se corrigió un comportamiento indefinido (se pasaba un puntero nulo a `memcpy`) en las funciones `detectCharset` y `detectLanguageUnknown` cuando la cadena de entrada supera los 32768 bytes y no se puede detectar ningún juego de caracteres. [#108250](https://github.com/ClickHouse/ClickHouse/pull/108250) ([groeneai](https://github.com/groeneai)).
* Se corrigió el error `NOT_FOUND_COLUMN_IN_BLOCK` en consultas que usan las columnas virtuales `_part_starting_offset/_part_offset` en WHERE junto con la materialización diferida. [#108287](https://github.com/ClickHouse/ClickHouse/pull/108287) ([vdimir](https://github.com/vdimir)).
* Se ocultan los argumentos secretos de funciones como `encrypt`, `decrypt` y `HMAC` en la salida de `EXPLAIN actions`, `EXPLAIN header` y `EXPLAIN PIPELINE` cuando `format_display_secrets_in_show_and_select` está deshabilitado (el valor predeterminado). [#108386](https://github.com/ClickHouse/ClickHouse/pull/108386) ([Algunenano](https://github.com/Algunenano)).
* `CREATE OR REPLACE` ahora se ejecuta correctamente para una vista materializada actualizable cuando su destino `TO` ya pertenece a esa misma vista. Los destinos que pertenecen a otra vista siguen rechazándose. [#108392](https://github.com/ClickHouse/ClickHouse/pull/108392) ([evillique](https://github.com/evillique)).
* Se restringió la ruta del modelo de `catboostEvaluate` al directorio `user_files`, al igual que para `file()` y las fuentes de diccionario. Anteriormente, la función aceptaba una ruta arbitraria del sistema de archivos sin comprobar que estuviera contenida en `user_files`, lo que permitía comprobar la existencia de archivos fuera de `user_files` y desencadenar su lectura. Ahora los modelos deben estar ubicados dentro de `user_files`. [#108463](https://github.com/ClickHouse/ClickHouse/pull/108463) ([groeneai](https://github.com/groeneai)).
* Se corrigió el problema por el que `CREATE OR REPLACE MATERIALIZED VIEW ... POPULATE` dejaba la nueva vista sin suscripción a su tabla de origen, lo que descartaba silenciosamente todas las filas insertadas después del reemplazo. [#108728](https://github.com/ClickHouse/ClickHouse/pull/108728) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se corrigió un fallo de segmentación al combinar estados de agregación de `uniqExact` con `GROUPING SETS`, `ROLLUP` o `CUBE` y `max_threads > 1`. [#108928](https://github.com/ClickHouse/ClickHouse/pull/108928) ([Algunenano](https://github.com/Algunenano)).
* Se corrigió un posible error lógico "Unexpected substream ... for column ..." al actualizar la configuración de compatibilidad. [#109496](https://github.com/ClickHouse/ClickHouse/pull/109496) ([Avogar](https://github.com/Avogar)).
* La función `getClientHTTPHeader` ahora trata los nombres de encabezado sin distinguir entre mayúsculas y minúsculas, de acuerdo con la [RFC 9110](https://www.rfc-editor.org/info/rfc9110/#section-5.1); en particular, el encabezado `authorization` ahora se filtra independientemente de cómo se escriba. [#109791](https://github.com/ClickHouse/ClickHouse/pull/109791) ([Felixoid](https://github.com/Felixoid)).
* Se corrigió la pérdida silenciosa de datos con inserciones asíncronas y deduplicación (`async_insert=1`, `async_insert_deduplicate=1`). Cuando varias entradas de inserción asíncrona con valores distintos de `insert_deduplication_token` se combinaban en un único vaciado que escribía en particiones distintas, cada token se registraba en el registro de deduplicación de todas las particiones afectadas por el vaciado, no solo en la partición donde se insertaban sus propias filas. Posteriormente, una inserción que reutilizaba uno de esos tokens en una partición en la que nunca se habían insertado filas con ese token se deduplicaba silenciosamente. Ahora los tokens se registran únicamente en la partición donde realmente se insertaron sus filas. [#111049](https://github.com/ClickHouse/ClickHouse/pull/111049) ([groeneai](https://github.com/groeneai)).
* Se corrigieron las inserciones asíncronas en formato Native para evitar que una entrada almacenada temporalmente en el búfer que se vuelve incompatible tras `ALTER ... MODIFY COLUMN` provoque el error de todo el lote. [#111108](https://github.com/ClickHouse/ClickHouse/pull/111108) ([Felixoid](https://github.com/Felixoid)).
* Se corrigió `CREATE OR REPLACE` de un diccionario con un objeto de otro tipo: fallaba con `CANNOT_DETACH_DICTIONARY_AS_TABLE` después de confirmar el reemplazo, lo que dejaba una tabla `_tmp_replace_*` huérfana. [#111142](https://github.com/ClickHouse/ClickHouse/pull/111142) ([evillique](https://github.com/evillique)).
* Se corrigió una fuga de memoria de certificados de pares durante handshakes TLS con la verificación de certificados habilitada. [#111425](https://github.com/ClickHouse/ClickHouse/pull/111425) ([thevar1able](https://github.com/thevar1able)).
* Se corrigió un error lógico `Block structure mismatch in IntersectOrExceptStep stream: different number of columns` que podía ocurrir cuando la optimización de división de filtros (`query_plan_split_filter`) se aplicaba a un `WHERE` cuyo nombre de columna de filtro también era el de una columna de entrada. La optimización dejaba una columna interna `__split_filter` en la cabecera de salida de la rama, que luego difería de la rama asociada de una operación de conjuntos como `INTERSECT` o `UNION`. [#111930](https://github.com/ClickHouse/ClickHouse/pull/111930) ([groeneai](https://github.com/groeneai)).
* Se corrigieron resultados incorrectos en filtros o expresiones `ORDER BY` que usan `toString` con valores `Time`, `Time64` o `DateTime` en zonas horarias con horario de verano. También se restauró la optimización de lectura en orden para `ORDER BY` sobre un prefijo de la clave de ordenación de la tabla y para conversiones de `String` a `Nullable(String)`. [#113291](https://github.com/ClickHouse/ClickHouse/pull/113291) ([vdimir](https://github.com/vdimir)).
* Se corrigió `ATTACH` de una tabla `Kafka` cuando `kafka_num_consumers` supera el límite derivado del número de núcleos de CPU. [#113390](https://github.com/ClickHouse/ClickHouse/pull/113390) ([evillique](https://github.com/evillique)).
* Se deshabilitó el análisis de índices distribuido al usar proyecciones para evitar resultados de consulta incorrectos. [#115132](https://github.com/ClickHouse/ClickHouse/pull/115132) ([azat](https://github.com/azat)).
* Se corrigió un error en la función `formatRowNoNewline` que podía producir resultados incorrectos o un error lógico cuando una fila se formateaba como un resultado vacío. [#115669](https://github.com/ClickHouse/ClickHouse/pull/115669) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Ya no se devuelve memoria sin inicializar en el resultado de un literal de cadena binaria cuya longitud no es múltiplo de ocho ni desde el descompresor LZ4 cuando un bloque comprimido no tiene cuerpo. [#115704](https://github.com/ClickHouse/ClickHouse/pull/115704) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Se incluyeron las rutas de los objetos en los hashes de deduplicación para evitar la deduplicación incorrecta de valores de objetos distintos. [#115866](https://github.com/ClickHouse/ClickHouse/pull/115866) ([Felixoid](https://github.com/Felixoid)).
