Saltar al contenido principal

Tabla de contenidos

Versión de ClickHouse v25.12, 2025-12-18
Versión de ClickHouse v25.11, 2025-11-27
Versión de ClickHouse v25.10, 2025-10-30
Versión de ClickHouse v25.9, 2025-09-25
Versión de ClickHouse v25.8 LTS, 2025-08-28
Versión de ClickHouse v25.7, 2025-07-24
Versión de ClickHouse v25.6, 2025-06-26
Versión de ClickHouse v25.5, 2025-05-22
Versión de ClickHouse v25.4, 2025-04-22
Versión de ClickHouse v25.3 LTS, 2025-03-20
Versión de ClickHouse v25.2, 2025-02-27
Versión de ClickHouse v25.1, 2025-01-28
Registro de cambios de 2024
Registro de cambios de 2023
Registro de cambios de 2022
Registro de cambios de 2021
Registro de cambios de 2020
Registro de cambios de 2019
Registro de cambios de 2018
Registro de cambios de 2017

Lanzamiento de ClickHouse 25.12, 2025-12-18

Cambio incompatible con versiones anteriores

  • ALTER MODIFY COLUMN ahora requiere un DEFAULT explícito al convertir columnas Nullable en tipos no anulables. Antes, esos ALTER podían quedarse atascados con errores de cannot convert null to not null; ahora los valores NULL se sustituyen por la expresión por defecto de la columna. Resuelve #5985. #84770 (Vladimir Cherkasov).
  • El tokenizador ngram ya no devolverá ngrams de longitud inferior a N, con la que fue configurado. La búsqueda de texto no devolverá filas cuando los tokens de búsqueda estén vacíos. #89757 (George Larionov).
  • Al hacer alter de una columna de String a Nullable(String), no realizaremos ninguna mutación de los datos. Sin embargo, para la función de agregado uniq, se utiliza una estructura de datos distinta: para una columna nullable, se usará AggregateFunctionNull con un agregador uniq anidado. AggregateFunctionNull serializará una marca bool adicional. Esto hará que el archivo de estadísticas sea incompatible. La corrección consiste en añadir una marca para registrar si se trata de una columna nullable durante la serialización. El formato de las estadísticas ha cambiado, y el servidor puede fallar si hay estadísticas con el formato antiguo. Este PR #90904 corregirá el fallo y lanzará una excepción cuando las estadísticas existentes usen el formato heredado. Para evitar la excepción, debemos ejecutar ALTER TABLE table MATERIALIZE STATISTICS ALL para regenerar las estadísticas y corregirlo. #90311 (Han Fei).
  • Se eliminan los ajustes allow_not_comparable_types_in_order_by/allow_not_comparable_types_in_comparison_functions. Permitir tipos no comparables en ORDER BY o en funciones de comparación puede provocar errores lógicos y resultados inesperados. Resuelve #90028. #90527 (Pavel Kruglov).
  • Se cambió el valor predeterminado de la configuración check_query_single_value_result de true a false. Esto hace que CHECK TABLE devuelva resultados detallados por cada parte en lugar de un resultado agregado (1 = correcto, 0 = se encontraron errores). En comparación con el comportamiento anterior, es probable que esto se ajuste mejor a lo que espera el usuario. #91009 (Robert Schulze).
  • Múltiples correcciones relacionadas con los índices implícitos. El esquema mostrado o almacenado (metadatos de Keeper) no incluirá índices implícitos, como los creados por la configuración add_minmax_index_for_numeric_columns o add_minmax_index_for_string_columns. Esto podría provocar errores de metadatos cuando una tabla ReplicatedMergeTree se crea o actualiza en una versión más reciente, si hay una réplica en una versión anterior. En esos casos, envíe los DDLs a la réplica antigua hasta que el clúster se haya actualizado por completo. #91429 (Raúl Marín).
  • Actualizar clickhouse-client para que devuelva un código de salida distinto de cero (159 - TIMEOUT_EXCEEDED) cuando una consulta agote el tiempo de espera debido a receive_timeout. Antes, los tiempos de espera devolvían el código de salida 0 (éxito), lo que dificultaba que los scripts y la automatización detectaran estos fallos por tiempo de espera. #91432 (Sav).
  • Ahora se prohíbe crear tablas especiales de MergeTree (como ReplacingMergeTree, CollapsingMergeTree, etc.) con una clave ORDER BY vacía, ya que el comportamiento de merge en estas tablas no está definido. Si aun así necesita crear una tabla de este tipo, habilite la opción allow_suspicious_primary_key. #91569 (Anton Popov).
  • Se corrigen las funciones bitShiftLeft y bitShiftRight para que devuelvan 0 o un valor vacío cuando el desplazamiento es exactamente del tamaño del tipo. #91943 (Pablo Marcos).
  • Seguimiento de #88380. Este PR considera la desactivación de los argumentos posicionales en las proyecciones como un cambio incompatible con versiones anteriores. Además, introduce la configuración enable_positional_arguments_for_projections para permitir una actualización segura de un clúster de ClickHouse cuando hay argumentos posicionales en las proyecciones. #92007 (Dmitry Novik).
  • Se habilitan de forma predeterminada los datos compartidos avanzados para JSON. Tras este cambio, ya no será posible volver a versiones anteriores a la 25.8, porque esas versiones no podrán leer las nuevas partes de datos con una columna JSON. Para realizar actualizaciones seguras, se recomienda establecer la opción compatibility en la versión anterior o configurar los ajustes de MergeTree dynamic_serialization_version='v2', object_serialization_version='v2'. #92511 (Pavel Kruglov).

Nueva funcionalidad

  • Los usuarios ahora pueden configurar tablas de S3/Azure Queue para mover o etiquetar archivos procesados, además de las opciones anteriores de conservar o eliminar archivos. Soluciona #72944. #86907 (Murat Khairulin).
  • En el almacenamiento S3/Azure Queue se añade la configuración commit_on_select (para definir si los datos procesados deben confirmarse y si debe aplicarse la acción after_processing). El valor predeterminado es false; se corrige la comprobación de la MV adjunta durante un SELECT. #91450 (Kseniia Sumarokova).
  • Añade instrumentación en tiempo de ejecución con XRay para depurar problemas en producción y obtener perfiles de forma determinista. Resuelve #74249. #89173 (Pablo Marcos).
  • Permite usar segundos argumentos no constantes con IN. También admite una tupla como segundo argumento. #77906 (Yarik Briukhovetskyi).
  • Funciones para calcular el área y el perímetro para el tipo Geometry. #89047 (Konstantin Vedernikov).
  • Se implementa la función dictGetKeys, que devuelve la(s) clave(s) del diccionario cuyo atributo es igual al valor especificado. Utiliza una caché de búsqueda inversa por consulta, ajustada mediante la configuración max_reverse_dictionary_lookup_cache_size_bytes, para acelerar las búsquedas repetidas. #89197 (Nihal Z. Miaji).
  • Añade la configuración type_json_skip_invalid_typed_paths para deshabilitar las excepciones en las inserciones/conversiones de tipo al tipo JSON cuando el JSON de entrada no puede convertirse a rutas tipadas explícitas en el tipo JSON. En su lugar, se usa el valor NULL/cero de la ruta tipada. #89886 (Max Justus Spransy).
  • Se admite el join direct (bucle anidado) para tablas MergeTree. Para usarlo, especifíquelo como la única opción en la configuración: join_algorithm = 'direct'. #89920 (Vladimir Cherkasov).
  • Se admite ORDER BY en la operación CREATE para Iceberg, además de la ordenación en INSERT. Resuelve #89916. #90141 (Konstantin Vedernikov).
  • Se introducen ajustes a nivel de proyección, expuestos mediante la nueva cláusula WITH SETTINGS en ALTER TABLE ... ADD PROJECTION. Estos ajustes permiten que las proyecciones redefinan determinados parámetros de almacenamiento de MergeTree (p. ej., index_granularity, index_granularity_bytes) de forma individual para cada proyección. #90158 (Amos Bird).
  • Se añade la función SQL HMAC(algorithm, message, key) como parte de #73900 y #38775. #90837 (Mikhail f. Shiryaev).
  • Se añadió compatibilidad para que la función has utilice la clave primaria y los índices de omisión de datos cuando el primer argumento es un array constante. Cierra #90980. #91023 (Nihal Z. Miaji).
  • Se implementa el nuevo formato de entrada y salida Buffers. Este formato es similar a Native; sin embargo, a diferencia de Native, no almacena nombres de columnas, tipos de columnas ni ningún metadato adicional. Cierra #84017. #91156 (Nihal Z. Miaji).
  • Agrega un ajuste max_streams_for_files_processing_in_cluster_functions para controlar el número de streams para la lectura paralela de archivos en las funciones de tabla Cluster. Cierra #90223. #91323 (Pavel Kruglov).
  • Enmascaramiento de datos para la seguridad a nivel de fila (solo disponible en ClickHouse Cloud). Se añadió un analizador de políticas de enmascaramiento de datos para dar soporte a esta función en clickhouse-client. #90552 (pufit).
  • Se añade la opción allow_reentry a la función de agregación windowFunnel. Cuando se habilita con strict_order, ignora los eventos que incumplen el orden en lugar de detener el análisis del embudo. Esto permite gestionar recorridos de usuario con recargas (A->A->B) o navegación hacia atrás (A->B->A->C) sin infravalorar las tasas de conversión. #86916 (Lee ChaeRok).
  • Compatibilidad de Keeper con ZooKeeper: CREATE con STATISTICS. #88797 (Konstantin Vedernikov).
  • Soporte para watches persistentes de ZooKeeper en ClickHouse Keeper. Continuación, parte 2: https://github.com/ClickHouse/ClickHouse/pull/78207. #88813 (Konstantin Vedernikov).
  • Se añade una configuración de MergeTree alter_column_secondary_index_mode para controlar qué hacer con los índices durante las mutaciones. Valores posibles: throw, drop, rebuild y compatibility. Cierra #77797. #89335 (Raúl Marín).
  • Como los tipos de datos Time y Time64 ya están listos para su uso en producción, la configuración enable_time_time64_type ahora está habilitada de forma predeterminada. #89345 (Yarik Briukhovetskyi).
  • Se admite la lectura del CDF de DeltaLake mediante la función de tabla deltaLake con los ajustes delta_lake_snapshot_start_version, delta_lake_snapshot_end_version. El CDF (Change Data Feed, una funcionalidad que permite capturar y consultar automáticamente cambios en los datos a nivel de fila, como inserciones, actualizaciones y eliminaciones, entre versiones de una tabla Delta) se habilita en DeltaLake mediante delta.enableChangeDataFeed. Las columnas proporcionadas junto con los datos son _change_type, _commit_version, _commit_timestamp. #90431 (Kseniia Sumarokova).
  • Se admite el uso de índices negativos para acceder a elementos de tuplas (p. ej., tuple.-1). #91665 (Amos Bird).

Funcionalidad experimental

  • Se introduce el formato de índice de texto v3 y se promueve a estado Beta.
  • Se introduce una nueva lógica para ejecutar automáticamente consultas mediante réplicas paralelas, controlada por la configuración automatic_parallel_replicas_mode. Durante la ejecución normal en un solo nodo, ClickHouse recopila estadísticas que luego se tendrán en cuenta en la etapa de planificación. Si las estadísticas sugieren que las réplicas paralelas probablemente serán beneficiosas, ClickHouse ejecutará automáticamente la consulta en cuestión con réplicas paralelas. El conjunto de consultas admitidas es actualmente bastante limitado. #87541 (Nikita Taranov).
  • Permite acceder a instancias de ClickHouse Cloud usando credenciales de Cloud con —login. #89261 (Krishna Mannem).
  • Añade la configuración de nivel de sesión aggregate_function_input_format para mejorar las consultas INSERT en tablas con columnas AggregateFunction, permitiendo insertar datos como estado serializado, valores sin procesar o arrays. #88088 (Punith Nandyappa Subashchandra).

Mejora del rendimiento

  • Optimiza las consultas ORDER BY...LIMIT N usando un skip index y un filtro de umbral dinámico para reducir significativamente las filas procesadas. #89835 (Shankar Iyer).
  • ClickHouse ahora utiliza skip indexes para realizar análisis de índices en cláusulas WHERE con condiciones de filtrado combinadas con AND y OR. Anteriormente, la cláusula WHERE debía ser una conjunción (AND) de condiciones de filtrado para poder utilizar skip indexes. Una nueva configuración use_skip_indexes_for_disjunctions (valor predeterminado: activado) controla esta funcionalidad. (incidencia #75228). #87781 (Shankar Iyer).
  • Se admite conservar la lectura en orden desde la tabla izquierda en operaciones LEFT/INNER JOIN, lo que puede aprovecharse en pasos posteriores. Puede deshabilitarse mediante el ajuste query_plan_read_in_order_through_join. Se admite la optimización con fila virtual durante la lectura (consulte el ajuste read_in_order_use_virtual_row) para LEFT/INNER JOINs. #89815 (Vladimir Cherkasov).
  • Se mejora el rendimiento de las columnas materializadas de manera diferida con un límite mayor. #90309 (Nikolai Kochetov).
  • Los usuarios deberían notar una menor latencia en el análisis de índices cuando hay índices minmax grandes (millones de gránulos). #90428 (Shankar Iyer).
  • Implementa un algoritmo sencillo de reordenación de JOIN con DPsize para INNER JOIN. Una nueva configuración experimental controla qué algoritmos se usan y en qué orden; por ejemplo, query_plan_optimize_join_order_algorithm='dpsize,greedy' significa que primero se prueba DPsize y, si falla, se recurre a greedy. #91002 (Alexander Gololobov).
  • Falla de inmediato cuando las consultas alcanzan los límites de filas. Resuelve #61872. #62804 (Sean Haynes).
  • #84477 añadió restricciones sobre las consultas SELECT que pueden usarse en consultas insert select from s3Cluster(...) para la ejecución distribuida en paralelo. Este cambio permite usar WHERE, lo que antes era posible. #84611 (Igor Nikonov).
  • Precarga de las claves durante la iteración de la tabla hash para minimizar los fallos de caché. #84708 (lgbo).
  • Se optimiza la función de agregación histogram ordenando solo la cola del array de puntos y omitiendo la ordenación en entradas monotónicas, lo que logra una mejora de velocidad de ~10%. #85760 (MakarDev).
  • Se mejoró el rendimiento del filtrado de predicados con funciones como like, equals, has y otras, aprovechando un filtro preliminar adicional construido a partir del índice de texto. Esta optimización se habilita mediante la configuración query_plan_text_index_add_hint. También se mejoró el uso del índice de texto para columnas del tipo de datos Map. #88550 (Anton Popov).
  • Optimiza las búsquedas inversas repetidas en diccionarios mediante búsquedas más rápidas en un conjunto precalculado de posibles valores de la clave. Cierra #7968. #88971 (Nihal Z. Miaji).
  • Mejora del rendimiento y del comportamiento de la función de agregado topK. #90091 (Raúl Marín).
  • Se ha mejorado el rendimiento de las operaciones de comparación de Decimal. Resuelve #28192. #90153 (Konstantin Bogdanov).
  • Se añadió compatibilidad con la poda de particiones para las funciones de Apache Paimon, como continuación de https://github.com/ClickHouse/ClickHouse/pull/84423. #90253 (JIaQi).
  • Uso de operaciones SIMD avanzadas para funciones lógicas mediante despacho dinámico. #90432 (Raúl Marín).
  • Mejora el rendimiento de la función JIT al no inicializar innecesariamente en cero la columna de resultado. #90449 (Raúl Marín).
  • Se acelera la descompresión de T64 mediante despacho dinámico. #90610 (Raúl Marín).
  • Optimiza el filtrado in-place en el lector de MergeTree. Resuelve #87119. #90630 (Xiaozhe Yu).
  • Se introduce una heurística adicional para reducir la amplitud de las fusiones seleccionadas. Realizar fusiones más pequeñas aumentará la amplificación de escritura, pero al mismo tiempo puede ayudar a evitar errores TOO_MANY_PARTS. #91163 (Mikhail Artemenko).
  • Mejora el rendimiento de las consultas para tablas de S3 creadas con un patrón glob al aplicar pushdown a los valores del filtro _path, lo que permite evitar las operaciones de listado de S3. Se controla con la configuración s3_path_filter_limit. #91165 (Eduard Karacharov).
  • Se acelera la conversión de columnas a bool (en cláusulas WHERE) mediante despacho dinámico. #91203 (Raúl Marín).
  • Se acelera la ordenación de un único bloque numérico mediante despacho dinámico. #91213 (Raúl Marín).
  • Añade una optimización para eliminar las columnas no utilizadas en los planes de ejecución de consultas. Resuelve #75152. #76487 (János Benjamin Antal).
  • El valor predeterminado de query_plan_optimize_join_order_limit se ha cambiado a 10. #89312 (Alexey Milovidov).
  • Se habilita la configuración allow_statistics_optimize de forma predeterminada, para que el optimizador de JOINs use estadísticas de columnas. #89332 (Alexey Milovidov).
  • Se añade soporte para los filtros de runtime de JOIN en los JOIN ANTI. Además, se refactoriza la implementación de los filtros de runtime para reducir la contención de bloqueos. #89710 (Dmitry Novik).
  • Reduce el uso de memoria durante las fusiones en la tabla system.metric_log (activada de forma predeterminada) estableciendo min_bytes_for_wide_part y vertical_merge_algorithm_min_bytes_to_activate en 128MB. #89811 (filimonov).
  • Se habilita el uso del índice invertido en PREWHERE. Resuelve #89975. #89977 (Peng Jian).
  • No se agregan proveedores de S3 si se usa GCP OAuth, lo que mejora el rendimiento en GCS. #91706 (Antonio Andelic).

Mejora

  • Se añadió una nueva configuración apply_row_policy_after_final que permite que la consulta aplique la política de filas solo después de FINAL, lo que hace más preciso el comportamiento de ReplacingMergeTree con políticas de filas. Corrige #90986. #91065 (Yarik Briukhovetskyi).
  • En el formato Pretty, las tuplas nombradas ahora se muestran como Pretty JSON. Esto cierra #65022. #91779 (Mostafa Mohamed Salah).
  • Se añadieron los campos last_error_time, last_error_message, last_error_query_id y last_error_trace a la tabla system.error_log. #89879 (Narasimha Pakeer).
  • El cliente CLI ahora puede omitir el mensaje ‘la versión de ClickHouse server es anterior a la del cliente de ClickHouse. Esto puede indicar que el servidor está desactualizado y que puede actualizarse’ al especificar --no-server-client-version-message o false. #87784 (Larry Snizek).
  • Se añade un mensaje de error que indica que la parte se deduplicó. #80264 (Aleksandr Musorin).
  • Se añadieron las columnas dependencies y missing_dependencies a system.kafka_consumers para indicar las tablas de destino de las vistas materializadas de las tablas de Kafka. Se añadió el contador KafkaMVNotReady. #85346 (Ilya Golshtein).
  • Ahora, las expresiones por defecto de la tabla funcionan correctamente en las inserciones que usan remote y el protocolo nativo. Cierra #87972. #88540 (Pervakov Grigorii).
  • Permite deshabilitar la recopilación de métricas asíncronas PSI_*_*. #88557 (MikhailBurdukov).
  • Se añadió compatibilidad con la serialización dispersa para columnas de tipo Nullable. Esto da continuidad a #44539. #88999 (Amos Bird).
  • El disco plain-rewritable tiene su propia implementación y estructura. No lo basemos en discos plain normales. #89807 (Mikhail Artemenko).
  • Ninguna excepción en HTTP debería contener nunca el fragmento final de longitud cero. #89998 (Kaviraj Kanagaraj).
  • Se añade una comprobación en el lado del servidor de Keeper durante el handshake para rechazar a los clientes cuando last_zxid_seen (provided by the client) > last_processed_zxid. Esto evita lecturas desactualizadas cuando los clientes se reconectan a réplicas con retraso. #90016 (Miсhael Stetsyuk).
  • Se añade kafka_consumer_reschedule_ms como una configuración ajustable del motor de tabla Kafka para ajustar cuánto tiempo duermen los consumidores mientras esperan nuevos datos. Resuelve #89204. #90112 (Jeremy Aguilon).
  • Añade una nueva columna parts_in_progress_names a system.mutations para mejorar las tareas de diagnóstico. #90155 (Shaohua Wang).
  • Reintentar ante errores de red cuando la biblioteca S3 analiza una respuesta XML. #90216 (Sema Checherinda).
  • Queremos ejecutar los keepers en procesos de servidor independientes y, para evitar sobrecargar Prometheus en regiones grandes, debemos seguir exponiendo solo las métricas relacionadas con Keeper. #90244 (Miсhael Stetsyuk).
  • Se añade compatibilidad con la carga de la configuración de ClickHouse Client desde las rutas de XDG Base Directory (p. ej., ~/.config/clickhouse/config.xml), además de la ubicación heredada ~/.clickhouse-client/. Resuelve #89882. #90306 (Wujun Jiang).
  • Añadir un límite de tamaño en bytes para el lote de solicitudes de append en Keeper. El límite se controla con keeper_server.coordination_settings.max_requests_append_bytes_size. #90342 (Antonio Andelic).
  • Se añade una configuración para Iceberg a fin de evitar una gran cantidad de particiones. #90365 (Konstantin Vedernikov).
  • Actualizar los mensajes de advertencia al acercarse a los límites de guardrails: mostrar los valores actuales y los de throw. #90438 (Nikita Fomichev).
  • Transmitir fragmentos en la tabla system.filesystem_cache en lugar de crear un único fragmento con todo el estado de la caché. Leer el estado de la caché del sistema de archivos puede llevar mucho tiempo en cachés grandes y consumir mucha memoria, por lo que procesarlo en streaming es indispensable para implementaciones de gran tamaño. #90508 (Kseniia Sumarokova).
  • Corregido un mensaje de excepción incorrecto en el particionamiento de Hive: le faltaba un espacio. #90685 (Alexey Milovidov).
  • Las entradas de la caché del índice de similitud vectorial ahora se eliminan cuando las partes de la tabla se eliminan o se sustituyen por partes más recientes. Antes, solo se eliminaban de forma diferida mediante la expulsión de la caché. #90750 (Shankar Iyer).
  • Se actualiza chdig (una herramienta de diagnóstico de ClickHouse para la línea de comandos) a la versión v25.12.1. #91394 (Azat Khuzhin).
  • Ahora, las URL prefirmadas funcionan con S3. Cierra #65032. #90827 (Yarik Briukhovetskyi).
  • El índice de texto ahora funciona con tablas ReplacingMergeTree. #90908 (Elmi Ahmadov).
  • Evitar exponer la versión del servidor ClickHouse en las respuestas de error HTTP devueltas antes de la autenticación. #91003 (filimonov).
  • Ahora se lanzará la excepción HTTP_CONNECTION_LIMIT_REACHED cuando se alcance el hard_limit de las conexiones de los clientes HTTP. Está configurado en 20000 para las conexiones de disco. #91016 (Sema Checherinda).
  • Se añade system.background_schedule_pool{,_log} para mejorar la introspección de las tareas en segundo plano. #91157 (Azat Khuzhin).
  • Ahora puede comentar o descomentar rápidamente las líneas que tenga seleccionadas en ese momento en el editor de consultas de la interfaz web con Ctrl+/ (o Cmd+/ en Mac), lo que facilita desactivar temporalmente partes de la consulta mientras realiza pruebas. #91160 (Samuel K.).
  • Añade system.completions a la lista de tablas accesibles en todo momento. #91166 (Yakov Olkhovskiy).
  • Se añaden los eventos de perfil FailedInitialQuery y FailedInitialSelectQuery. #91172 (RinChanNOW).
  • Se corrigió un posible problema de inanición del grupo de hilos al leer muestras de columnas en columnas JSON con muchas subcolumnas, respetando la configuración merge_tree_use_prefixes_deserialization_thread_pool en lugar de usar incondicionalmente el grupo de hilos. #91208 (Raufs Dunamalijevs).
  • Se añadió compatibilidad con el tipo JSON en tupleElement. Cierra #81630. #91327 (Pavel Kruglov).
  • Se corrigieron errores de límite de memoria espurios cuando la caché de páginas en espacio de usuario está habilitada. #91361 (Michael Kolupaev).
  • El tokenizador de ngrams ahora se puede construir con ngram_length = 1. #91529 (George Larionov).
  • Se admiten configuraciones de almacenamiento dentro de las funciones en INSERT INTO FUNCTION, al igual que ya se admiten para SELECT. Cierra #89386. #91707 (Kseniia Sumarokova).
  • Lanzar “not implemented” para la consulta TRUNCATE en lagos de datos, en lugar de no hacer nada en silencio. Cierra #86604. #91713 (Kseniia Sumarokova).
  • Se establece el tamaño máximo del mensaje en el lector Parquet v3 para evitar el error DB::Exception: apache::thrift::transport::TTransportException: MaxMessageSize reached. #91737 (Arthur Passos).
  • Añade una configuración insert_select_deduplicate. Esto aclara mejor cómo gestionamos la deduplicación de inserción en INSERT SELECT. En general, no es posible realizar la deduplicación para este tipo de consultas, pero si la tabla no cambia y el resultado está ordenado, entonces sí es posible deduplicar en un reintento. No podíamos rastrear que el origen fuera el mismo. Pero sí podíamos comprobar que el resultado de la consulta SELECT estuviera ordenado. En realidad, resultó que en el caso general es realmente difícil de comprobar, pero el caso sencillo con ORDER BY ALL es fácil. Ahora mismo, la lógica aquí está rota. Intentamos deduplicar, pero en la mayoría de los casos simplemente no detecta duplicados entre los bloques porque SELECT devuelve datos distintos. #91830 (Sema Checherinda).
  • Permitir la conversión implícita de tipos al convertir Array a QBit. Los arrays de enteros y de coma flotante ahora pueden insertarse directamente en columnas QBit sin conversiones de tipo explícitas. #91846 (Raufs Dunamalijevs).
  • Se añade un límite al tamaño de los mensajes CapnProto. Puede cambiarse con format_capn_proto_max_message_size. #91888 (Antonio Andelic).
  • Ajusta las métricas de la caché de marcas para que rastreen solo las consultas (después de #83415, MarkCacheHits/MarkCacheMisses también se actualizaban para las fusiones; este PR revierte ese comportamiento). #91910 (Azat Khuzhin).
  • Se corrige que client_info.interface se configure como TCP para las conexiones locales. #91933 (Konstantin Bogdanov).
  • El parámetro refresh_certificates_task_interval de la configuración del cliente ACME ahora espera un valor expresado en segundos. #92211 (Konstantin Bogdanov).
  • Registrar en system.part_log los eventos de partes de system.*_log. #92217 (Azat Khuzhin).

corrección de error (fallo visible para el usuario en una versión estable oficial)

  • Corrige algunos errores en PREWHERE relacionados con los supertipos de los tipos de datos Time y Time64. Resuelve #84544. #84715 (Yarik Briukhovetskyi).
  • Inicializar DNSResolver antes de usarlo para tener en cuenta los ajustes personalizados. Corrige #76296. #81302 (Zhigao Hong).
  • Corrige la lectura de subcolumnas de una columna con un punto en el nombre en determinados casos. Resuelve #81261, #82058, #88169. #87205 (Pavel Kruglov).
  • Se corrige el bloqueo del motor GenerateRandom con parámetros no literales: ahora devuelve BAD_ARGUMENTS con un mensaje claro en lugar de LOGICAL_ERROR. #88157 (Shafi Ahmed).
  • Se corrige la eliminación de columnas de proyección no utilizadas cuando hay UNION. Corrige #88180. #88350 (Sema Checherinda).
  • Se corrigió la segmentación incorrecta en la optimización de JOIN cuando la clave primaria está ordenada en orden descendente. Resuelve #88512. #88794 (Amos Bird).
  • Se vuelve a habilitar s3queue_keeper_fault_injection_probablility y se corrigen problemas. #88800 (Kseniia Sumarokova).
  • Se corrigieron varios problemas causados por la eliminación prematura de columnas en TTL. Corrige #88002. #88860 (Amos Bird).
  • Lanza una excepción cuando temporary_files_buffer_size se establece en 0. Resuelve #88900. #88917 (Vladimir Cherkasov).
  • Corrige el error Bad get que se producía durante el análisis del índice Set cuando el predicado contenía la constante NULL. Corrige #84856 y #82974. #89429 (Nikolai Kochetov).
  • Se corrige Cannot add subcolumn X.Y: column with this name already exists. Se resuelve #89599. #89602 (Azat Khuzhin).
  • Se corrigieron errores en las funciones theilsU y contingency que provocaban resultados incorrectos. #89760 (Nihal Z. Miaji).
  • Se corrigen problemas de estabilidad de Alias: se corrige StrictnessLevel con SharedDatabaseCatalog, se impide que el destino también sea un alias y se implementan métodos adicionales (getSerializationHints, supportsReplication, getStoragePolicy, totalBytesUncompressed, lifetimeRows, lifetimeBytes, storesDataOnDisk, tryLockForShare, lockForShare). Resuelve #89106. #89812 (Kai Zhu).
  • Corrige un posible fallo durante una consulta remota con ARRAY JOIN dentro de IN y con la configuración enable_lazy_columns_replication activada. Resuelve #90361. #89997 (Pavel Kruglov).
  • Se corrige un posible error lógico al usar analyzer_compatibility_join_using_top_level_identifier con varias cláusulas JOIN. #90010 (Vladimir Cherkasov).
  • Corrige, en algunos casos, la inferencia de valores DateTime64 no válidos a partir de Strings en formatos de texto. Resuelve #89368. #90013 (Pavel Kruglov).
  • Se realizan comprobaciones de tamaño al deserializar datos de estados de agregación y otras fuentes. #90031 (Raúl Marín).
  • Se dividen los rangos de partes según las características del volumen para habilitar merges de eliminación por TTL en volúmenes fríos. Después de este parche, las partes con un TTL máximo < now se eliminarán del almacenamiento en frío. El algoritmo programará solo eliminaciones de una sola parte. #90059 (Mikhail Artemenko).
  • En caso de que la tabla de Kafka se hubiera creado con la configuración kafka_handle_error_mode = 'dead_letter_queue' y la tabla system.dead_letter_queue no estuviera configurada, el servidor podía fallar. Este comportamiento ya se ha corregido. Resuelve #87573. #90064 (Nikita Mikhaylov).
  • Se corrigió un posible error Column with Array type is not represented by ColumnArray column: Replicated durante la inserción al usar ARRAY JOIN con la configuración enable_lazy_columns_replication habilitada. #90066 (Pavel Kruglov).
  • Se corrigió un fallo durante el cierre limpio del servidor debido a un orden de destrucción incorrecto. Resuelve #82420. #90076 (Nikita Mikhaylov).
  • Corrige un error lógico y un error en la operación de módulo de la tabla del sistema numbers cuando se utiliza un tamaño de paso grande. Cierra #83398. #90123 (Nihal Z. Miaji).
  • Se corrige un problema en la escritura de Parquet que no conservaba el orden original al usar escritura de un solo hilo con el escritor nativo. Revierte parcialmente https://github.com/ClickHouse/ClickHouse/pull/64424/files. #90126 (Arthur Passos).
  • No aplicar la optimización de nodos constantes a la expresión LIMIT/OFFSET. Corrige #89607. #90156 (Yakov Olkhovskiy).
  • Se corrige la incompatibilidad con el particionamiento de Hive que impedía una actualización fluida en la versión 25.8 (soluciona el error All hive partitioning columns must be present in the schema durante la actualización). #90202 (Kseniia Sumarokova).
  • Corrige una excepción de JSON en una tabla Iceberg con una columna timestamp al usar el catálogo de Glue. Resuelve #90210. #90209 (Alsu Giliazova).
  • Corrige una discrepancia en el recuento de filas en MergeTreeReaderIndex cuando la parte tiene menos filas que index_granularity. Resuelve #89691. #90254 (Peng Jian).
  • Corrige una consulta infinita con nan/inf y WITH FILL. Resuelve #69261. #90255 (Konstantin Bogdanov).
  • Se corrige el error ‘column not found’ al usar query_plan_use_logical_join_step=0 y una condición residual en JOIN ON. Resuelve #88635. #90279 (Vladimir Cherkasov).
  • Corrige algunas consultas con optimización de proyecciones agregadas. #90288 (János Benjamin Antal).
  • Se corrige un error al leer subcolumnas de JSON en partes compactas que podía provocar el error CANNOT_READ_ALL_DATA. Resuelve #90264. #90302 (Pavel Kruglov).
  • Ahora ClickHouse no usará la optimización de lectura en orden para Iceberg si los archivos de manifiesto no especifican el criterio de ordenación (o este no coincide) con default_sort_order de la tabla. Corrige #89178. #90304 (alesapin).
  • Time y Time64 ahora deberían respetar correctamente las zonas horarias al convertir desde DateTime y DateTime64 (deben mostrar la hora en la misma zona horaria en la que se muestra al usuario como DateTime[64]). Cierra #89896. #90310 (Yarik Briukhovetskyi).
  • Corrige un error por el que SELECT CAST(CAST(now(), 'Time'), 'Time64') generaba un resultado incorrecto. Cierra #88349. #90324 (Yarik Briukhovetskyi).
  • Se corrigió un cierre inesperado por desbordamiento de enteros en randomStringUTF8. #90326 (Michael Kolupaev).
  • Se corrigieron las actualizaciones del descubrimiento de clústeres en configuraciones multiclúster con multicluster_root_path para evitar retrasos y la pérdida de actualizaciones de ZooKeeper. #90341 (RinChanNOW).
  • Corrige un posible error lógico al usar prewhere con una ruta JSON inexistente y index_granularity_bytes=0. Resuelve #86924. #90375 (Pavel Kruglov).
  • Se corrigió un error en L2DistanceTransposed que provocaba cierres inesperados cuando el argumento precision superaba el rango válido. Cierra #90401. #90405 (Raufs Dunamalijevs).
  • Corrige un posible error lógico en arrayUnion con el argumento Array(Dynamic). Resuelve #90270. #90409 (Pavel Kruglov).
  • Corrige un posible error lógico al renombrar y modificar la misma columna Nested en una misma instrucción ALTER. Resuelve #90406. #90412 (Pavel Kruglov).
  • Corrige el análisis de valores JSON/Dynamic/Variant desde parámetros HTTP. Resuelve #88925. #90430 (Pavel Kruglov).
  • Se corrigió una condición de carrera en el particionamiento de Hive, donde un KeyValuePairExtractor estático provocaba corrupción de datos o fallos durante lecturas concurrentes de archivos. #90474 (Paresh Joshi).
  • Se corrigieron los cálculos de distancia incorrectos en L2DistanceTransposed al usar vectores de referencia de tipo array (que, de forma predeterminada, son Array(Float64))) con columnas QBit de tipos de elemento distintos de Float64 (Float32, BFloat16). La función ahora convierte automáticamente el vector de referencia para que coincida con el tipo de elemento de QBit. Resuelve #89976. #90485 (Raufs Dunamalijevs).
  • Corrige un error por el cual toDateTimeOrNull con un argumento negativo devuelve NULL. #90490 (Yarik Briukhovetskyi).
  • Corrige un posible error lógico durante la generación de la salida de LowCardinality(Bool/Date32) en formato Arrow. Resuelve #83883. #90505 (Pavel Kruglov).
  • Se corrigieron las funciones de análisis de IPv4 (p. ej., IPv4StringToNumOrDefault) que devolvían resultados incorrectos con algunas entradas no válidas. Soluciona #90544. Soluciona #87583. #90545 (Michael Kolupaev).
  • Reintentar markReplicasActive cuando falla la resolución de la dirección durante la comprobación del host local: Registra una advertencia si se produce una excepción durante la comprobación del propio host en DDLTask. En DDLWorker::markReplicasActive, lanza una excepción para volver a intentarlo si no se encuentra ningún host local y hay ID de host en los clústeres. #90556 (Tuan Pham Anh).
  • Corrige un error lógico provocado por un caso poco frecuente en la función equals. Cierra #88142. #90557 (Nihal Z. Miaji).
  • Se espera que corrija los fallos del sanitizador de hilos en test_ssh/test.py::test_paramiko_password. #90612 (Govind R Nair).
  • Corrige un error lógico en la función concatWithSeparator al usar una columna constante de un tipo distinto de cadena. Cierra #90596. #90655 (Nihal Z. Miaji).
  • Corrige el formateo de INTO OUTFILE. Resuelve #90207. #90656 (Azat Khuzhin).
  • Se corrige un posible cierre inesperado al ejecutar mutaciones con subconsultas y allow_statistics_optimize=1. Resuelve #90626. #90664 (Azat Khuzhin).
  • Se corrigió la validación del analizador de LIMIT BY con GROUP BY para que devuelva el error NOT_AN_AGGREGATE correcto en lugar de NOT_FOUND_COLUMN_IN_BLOCK cuando LIMIT BY usa columnas que no están en GROUP BY. Cierra #89713. #90665 (xiaohuanlin).
  • Corrige errores de conversión de tipos al usar columnas LowCardinality en las claves de partición. Cierra #89412. #90666 (xiaohuanlin).
  • Se corrigió un problema por el que las consultas con predicados de filtro que contenían constantes derivadas de funciones no deterministas (p. ej., shardNum()) podían usar incorrectamente la caché de condiciones de consulta. #90692 (Eduard Karacharov).
  • Corrige un fallo de segmentación en una consulta con la función EXISTS en la sección ON de JOIN. Ahora la consulta simplemente devuelve el error INVALID_JOIN_ON_EXPRESSION. Cierra #90698. #90719 (Vladimir Cherkasov).
  • Corregido el error lógico: ‘Formato del AST inconsistente’ para AccessRightsElement al usar la base de datos predeterminada sin ninguna tabla. #90742 (Pablo Marcos).
  • Corrige la validación de acceso para las consultas ALTER UPDATE cuando se usa una función de tabla remote con localhost como host de destino. #90761 (pufit).
  • Corregidos los secretos ocultos de las named collections para que dependan de display_secrets_in_show_and_select y format_display_secrets_in_show_and_select. #90765 (Pablo Marcos).
  • Se deshabilita enable_shared_storage_snapshot_in_query (provoca fugas de memoria). #90770 (Azat Khuzhin).
  • Se corrige el problema de duplicación de datos en RIGHT JOIN con una tabla distribuida cuando las réplicas paralelas están habilitadas. #90806 (zoomxi).
  • Se corrige un posible estado incoherente de los datos compartidos y las rutas dinámicas en JSON que podría provocar errores lógicos y resultados inesperados. #90816 (Pavel Kruglov).
  • Corrige ALTER MODIFY QUERY con dictGet() y el nombre del diccionario en CSE para SharedCatalog (funcionalidad solo de Cloud). #90860 (Azat Khuzhin).
  • Se corrige la compatibilidad de la serialización en memoria del estado de agregación de String. Una serialización distinta podría provocar resultados duplicados si una consulta de agregación se ejecuta en instancias con versiones distintas. La nueva serialización puede habilitarse con serialize_string_in_memory_with_zero_byte. #90880 (Antonio Andelic).
  • Se corrige el vaciado en segundo plano de Buffer en caso de operaciones INSERT frecuentes. #90892 (Azat Khuzhin).
  • No incluir la carpeta padre contrib/ en system.licenses. #90901 (Raúl Marín).
  • Se corrige el elevado uso de memoria durante la lectura de columnas JSON/Dynamic/Variant. #90907 (Pavel Kruglov).
  • Se corrige la asignación del búfer para la función base58Decode. #90909 (Antonio Andelic).
  • Corrige un posible error lógico al recibir otra solicitud de lectura de una réplica después de enviar una respuesta con el indicador finish=true. Esto podía ocurrir debido a una condición de carrera lógica en MergeTreeReadPoolParallelReplicas, aunque era muy poco probable. #90921 (Nikita Taranov).
  • Corregida la comprobación de los permisos con comodines para la revocación parcial. Se añadieron más pruebas. #90922 (pufit).
  • Corrige la agregación de SummingMergeTree en columnas Nested LowCardinality. #90927 (Ivan Babrou).
  • Corrige la gestión de los permisos globales con revocaciones mediante comodines. Soluciona el problema por el que revocar un permiso con comodín puede eliminar accidentalmente algunos permisos de nivel global, como CREATE USER. #90928 (pufit).
  • Corrige un posible bucle infinito al listar blobs en Azure. #90947 (Julia Kartseva).
  • Corregir los flushes excesivos de Buffer (consumen CPU y generan muchísimos logs). #91000 (Azat Khuzhin).
  • … No permitir que adaptive_write_buffer_initial_size sea 0. #91001 (Pedro Ferreira).
  • Se corrigió un error en JSON cuando una ruta podía estar tanto en los datos compartidos como en las rutas dinámicas durante la lectura de subobjetos en partes compactas con write_marks_for_substreams_in_compact_parts deshabilitado. #91014 (Pavel Kruglov).
  • Corrige el error std::out_of_range en CTE con dictGet sin argumentos. Cierra #91027. #91022 (Pavel Kruglov).
  • Corrige la lectura de subcolumnas dinámicas desde columnas materializadas en las mutaciones. Cierra #90653. #91040 (Pavel Kruglov).
  • Se corrige un problema por el que la función arrayFilter no funcionaba al usar un array vacío y la función isNull. Cierra #73849. #91105 (Nihal Z. Miaji).
  • Corrige un error lógico en ARRAY JOIN cuando una de las columnas de la tabla es de tipo tupla vacía. Cierra #90801. #91123 (Nihal Z. Miaji).
  • Se corrigió la materialización diferida de una columna añadida mediante alter add column en partes antiguas. #91142 (Pavel Kruglov).
  • Se corrige la fusión de columnas JSON en Summing/Aggregating/Coalescing MergeTree. Anteriormente, esto podía provocar rutas dinámicas inesperadas durante la escritura en partes de datos. #91151 (Pavel Kruglov).
  • Se corrige una posible inconsistencia en la estructura dinámica durante la escritura en partes compactas que podía provocar un segfault. #91152 (Pavel Kruglov).
  • Se corrige el análisis de valores de coma flotante subnormales en notación científica. Cierra #78903. #91162 (Nihal Z. Miaji).
  • Corrige la inferencia incorrecta del esquema en INSERT SELECT desde una subconsulta con una fuente con esquema implícito. #91204 (Pervakov Grigorii).
  • Se corrige https://github.com/clickhouse/clickhouse/issues/91206: cuando creamos una tabla con estadísticas, escribimos datos y eliminamos una de las estadísticas, se producía un fallo al volver a leerla. Esto ocurría porque asumíamos que serialize y deserialize tendrían estadísticas de los mismos tipos. En esta corrección, comprobamos si los metadatos actuales contienen las estadísticas serializadas; si no, creamos una estadística ficticia y deserializamos solo para omitirla. #91227 (Han Fei).
  • Se corrige un problema al insertar en una columna de CoalescingMergeTree con Tuple de JSON/Dynamic y LowCardinality. Cierra #91215. #91270 (Pavel Kruglov).
  • Se corrige SYSTEM DROP FILESYSTEM CACHE ON CLUSTER. #91304 (Anton Ivashkin).
  • Corrige un posible error de lógica “Bad cast from type DB::ColumnSparse to DB::ColumnNullable”. Cierra #91284. #91309 (Pavel Kruglov).
  • Corrige un fallo por el que secuencias de bytes manipuladas maliciosamente podían deserializarse en tipos QBit anidados, algo que debería ser imposible, pero que podía explotarse para provocar una caída del servidor. #91313 (Raufs Dunamalijevs).
  • Se corrige la tabla de alias con argumentos vacíos en la base de datos Replicated. Resuelto #91378. #91382 (Kai Zhu).
  • Actualmente, la configuración está establecida en false, por lo que, cuando la cola de async insert se descarga en un servidor remoto, las inserciones siempre son sincrónicas, incluso si la configuración es True para un usuario. #91386 (Mikhail f. Shiryaev).
  • Eliminar columnas dispersas del encabezado en los algoritmos de fusión. Cierra #91377. #91396 (Pavel Kruglov).
  • Corrige un error de particionamiento de Hive en 25.8 que puede hacer que se lance incorrectamente la excepción A hive partitioned file can't contain only partition columns. #91403 (Kseniia Sumarokova).
  • Se corrige un fallo en dictGetDescendants provocado por NULL cuando el tipo de diccionario admite jerarquía, pero ninguna columna es HIERARCHICAL. Cierra #92026. Cierra #92121. #91420 (Nihal Z. Miaji).
  • Se corrige un fallo en la función IN cuando se usan argumentos lambda y de tupla no constantes. Cierra #91379. #91446 (Nihal Z. Miaji).
  • Se corrigieron las escrituras paralelas provocadas por inserciones de MaterializedView en motores de almacenamiento que no las admiten. #91449 (Pervakov Grigorii).
  • Gestión de valores NULL para los diccionarios XML de Ytsaurus. #91465 (MikhailBurdukov).
  • Se corrigió el problema del tipo QBit que fallaba con parámetros de consulta como SET param_q=[1,2,3,4]; SELECT {q:QBit(Float32,4)}. #91488 (Raufs Dunamalijevs).
  • Se corrige LOGICAL_ERROR al usar untuple en una expresión constante. #91507 (Pervakov Grigorii).
  • Se corrige una posible condición de carrera en librdkafka. #91521 (János Benjamin Antal).
  • Corrige un error lógico causado por el argumento de asteriscos en la función remote. Cierra #90568. #91524 (Nihal Z. Miaji).
  • Corrige un desbordamiento al leer el formato ORC para los tipos Date y DateTime64. Cierra #70976. #91572 (Yarik Briukhovetskyi).
  • Se deshabilitan los ALTERs para los motores de tabla de Object Storage. Por ejemplo, ALTER ADD PROJECTION podría haber impedido reiniciar el servidor, ya que los motores de Object Storage no admiten proyecciones. #91573 (Nikolay Degterinsky).
  • Se corrigió un problema por el que L2DistanceTransposed devolvía resultados incorrectos al usar vectores de referencia no constantes (p. ej., de una tabla). #91517. #91593 (Raufs Dunamalijevs).
  • Corrige un error en JOINs con condiciones FALSE que devolvían LOGICAL_ERROR durante una etapa de despacho. Cierra #91173. #91598 (Yarik Briukhovetskyi).
  • Se corrige el aumento del uso de memoria en join con “filtro adicional” y se cierra #91011. #91664 (Vladimir Cherkasov).
  • Corrige las consultas JOIN que usan una vista y réplicas paralelas habilitadas. #91813 (Igor Nikonov).
  • Se corrige la configuración de Delta Lake delta_lake_snapshot_version, que podía devolver un resultado incorrecto al usarse con el motor de tabla (no con la función de tabla) y el valor -1 (deshabilitado) después de haber usado previamente una versión de snapshot. Cierra #87676. #91818 (Kseniia Sumarokova).
  • Se corrigió LOGICAL_ERROR en RecursiveCTEChunkGenerator. #91827 (Pablo Marcos).
  • Corrige un desajuste en la estructura de bloques en consultas que usan FINAL y PREWHERE. #91847 (Antonio Andelic).
  • Corrige el error lógico con join_use_nulls y varios joins junto con un cross join. #91853 (Vladimir Cherkasov).
  • Se agregó un mecanismo de reparación para JSON con una ruta duplicada en datos compartidos y rutas dinámicas, lo que podía ocurrir debido al error corregido en https://github.com/ClickHouse/ClickHouse/pull/90816. #91886 (Pavel Kruglov).
  • Corrige el fallo del lector ORC al leer columnas de cadena codificadas con DICTIONARY_V2 que contienen únicamente valores NULL. #91889 (Peng Jian).
  • Se corrige una inconsistencia de serialización entre subflujos dispersos y que admiten NULL en columnas Tuple que podía provocar partes corruptas o fallos durante la lectura. Esto corrige https://github.com/ClickHouse/ClickHouse/pull/91851. @Algunenano, ¿podrías ayudar a comprobar si esto puede corregir la prueba de estrés en el repositorio privado? @CurtizJ, ¿podrías también echarle un vistazo, por favor? ¡Gracias! #91932 (Amos Bird).
  • Se corrige Directory '{}' does not exist (LOGICAL_ERROR) al crear copias de seguridad en discos reescribibles simples. #91935 (Julia Kartseva).
  • Evita un cierre inesperado al conectarse a MongoDB con named collections. #91959 (Antonio Andelic).
  • Corrige el error “TOO_MANY_MARKS”, que podía producirse tras algunas consultas ALTER sobre partes compactas. #91980 (alesapin).
  • Se cierra https://github.com/clickhouse/clickhouse/issues/87417: el esquema de escritura del formato v1 tiene un error; el tipo de “added_snapshot_id” debería ser “long” en lugar de “null, long” porque es obligatorio. Es un error porque no es compatible con otros sistemas como Spark. Cuando se mezclan sus archivos manifest, se produce el error. #92078 (Han Fei).
  • Se corrigieron los nombres incorrectos de readWKT y readWKB, que tenían un estilo inadecuado en versiones anteriores. #92094 (Alexey Milovidov).
  • Corrige numerosos errores lógicos, errores de desbordamiento y fallos funcionales en la función midpoint. Cierra #91816. #92102 (Nihal Z. Miaji).
  • Corrige resultados incorrectos que podían aparecer al leer determinadas subcolumnas (p. ej., el tamaño de una cadena) con codificación dispersa. #92156 (Pavel Kruglov).
  • Se corrige el fallo de system.view_refreshes que producía el error No macro 'replica' in config. #92203 (Michael Kolupaev).
  • Se corrige Replace de UDF en format. #92210 (Raúl Marín).
  • En ddlworker::markreplicasactive, si no se encuentra ningún host activo y remote_servers tiene algunos host_ids, registramos una advertencia en el log en lugar de lanzar una excepción. #92223 (Tuan Pham Anh).
  • Encierre entre paréntesis los operadores IN, NOT IN. Soluciona #85075. #92225 (Mikhail f. Shiryaev).
  • Corrige la copia de seguridad de las tablas KeeperMap y Memory. Crear una copia de seguridad de tablas que usan uno de esos dos motores con max_compress_block_size establecido en 0 podía provocar un cierre inesperado. #92237 (Antonio Andelic).
  • Se corrige un bloqueo al leer tanto datos de tipo String como la subcolumna .size del motor Log. Esto soluciona #89909. Esto incluye algunos commits de #92290. #92341 (Amos Bird).
  • Corrige un error lógico causado por el uso del tipo Nothing en los argumentos de la función caseWithExpression. Cierra #85354. #92351 (Nihal Z. Miaji).
  • Corrige un posible cierre inesperado en las funciones de agregación tras MEMORY_LIMIT_EXCEEDED. #92390 (Azat Khuzhin).

mejora de compilación/pruebas/empaquetado

Versión de ClickHouse 25.11, 2025-11-27

Cambio incompatible con versiones anteriores

  • Se elimina el tipo Object, que está obsoleto. #85718 (Pavel Kruglov).
  • Se elimina la funcionalidad LIVE VIEW, que ha quedado obsoleta. Si usa LIVE VIEW, no será posible actualizar a la nueva versión. #88706 (Alexey Milovidov).
  • En versiones anteriores, el tipo Geometry era un alias de String, pero ahora es un tipo plenamente funcional. #83344 (scanhex12).
  • Se escapan los nombres de archivo creados para las subcolumnas del tipo Variant en partes de datos Wide de tablas MergeTree. Este cambio rompe la compatibilidad con tablas antiguas con tipos de datos Variant/Dynamic/JSON. Corrige el almacenamiento de tipos con símbolos especiales dentro de Variant (como DateTime con una timezone específica que contiene \). El escape puede deshabilitarse cambiando la configuración de MergeTree escape_variant_subcolumn_filenames (para mantener la compatibilidad, desactive esta configuración en la configuración de MergeTree o establezca la configuración compatibility en la versión anterior antes de actualizar). Resuelve #69590. #87300 (Pavel Kruglov).
  • Se habilita el formato de serialización with_size_stream para el tipo de datos String de forma predeterminada. Este cambio es compatible con versiones anteriores, pero el nuevo formato de serialización solo es compatible a partir de la versión 25.10, lo que significa que no será posible volver a versiones anteriores a la 25.10. Si quiere mantener la posibilidad de volver a 25.9 y anteriores, configure serialization_info_version como basic y string_serialization_version como single_stream en la sección merge_tree de la configuración del servidor. #89329 (Alexey Milovidov).
  • Se añade compatibilidad con el etiquetado de excepciones en la respuesta de resultados HTTP para que los clientes puedan analizarlas de forma más fiable. Resuelve #75175. La configuración http_write_exception_in_output_format está deshabilitada de forma predeterminada para mantener la coherencia entre formatos. #88818 (Kaviraj Kanagaraj). Aunque no debería romper ningún comportamiento existente (en el peor de los casos, se añadirá una cadena extraña al mensaje de excepción), sigue teniendo sentido usar “Backward Incompatible Change” como categoría del changelog por precaución (porque quién sabe cómo algunos scripts chapuceros pueden analizar el mensaje de excepción).
  • Se prohíbe la creación de varios discos plain-rewritable sobre la ruta compartida de object storage, ya que esto puede provocar un comportamiento indefinido cuando colisionan distintas transacciones de almacenamiento de metadatos. #89038 (Mikhail Artemenko).
  • Se corrige la precedencia de la configuración SASL del almacenamiento Kafka. La configuración SASL a nivel de tabla especificada en consultas CREATE TABLE ahora anula correctamente la configuración específica de consumer/producer procedente de los archivos de configuración. #89401 (János Benjamin Antal).
  • Los timestamps de Parquet sin timezone (isAdjustedToUTC=false) ahora se leen como DateTime64(…, ‘UTC’) en lugar de DateTime64(…). Esto es menos incorrecto, ya que convertir ese timestamp UTC a cadena produce una representación de la hora local correcta. Use input_format_parquet_local_time_as_utc = 0 para obtener el comportamiento anterior. Resuelve #87469. #87872 (Michael Kolupaev).
  • Una pequeña mejora para el codec T64: ya no acepta tipos de datos no alineados con el tamaño del elemento de compresión, lo que de otro modo provocaba un error. Resuelve #89282. #89432 (yanglongwei).

Nueva funcionalidad

  • Se introduce el tipo Geometry. Se admite la lectura de los formatos WKB y WKT para este tipo. En versiones anteriores, el tipo Geometry era un alias de String, pero ahora es un tipo completo. #83344 (scanhex12).
  • Se añadió la nueva sentencia SQL EXECUTE AS para permitir la suplantación de usuarios. Resuelve #39048. #70775 (Shankar).
  • Agregar la función naiveBayesClassifier para clasificar texto mediante Naive Bayes a partir de ngrams. #88677 (Nihal Z. Miaji).
  • Se agrega soporte para LIMIT y OFFSET fraccionarios para seleccionar una fracción de una tabla. Cierra #81892. #88755 (Ahmed Gouda).
  • Subsistema de ClickHouse para el catálogo de Microsoft OneLake. #89366 (scanhex12).
  • Se añade la función flipCoordinates, que desanida el número requerido de dimensiones de un array e intercambia los punteros dentro de la columna Tuple. Resuelve #79469. #79634 (Sachin Kumar Singh).
  • Se añade la tabla system.unicode, que contiene una lista de caracteres Unicode y sus propiedades. Cierra #80055. #80857 (wxybear).
  • Se ha añadido una nueva configuración de MergeTree merge_max_dynamic_subcolumns_in_wide_part para limitar el número de subcolumnas dinámicas en la parte Wide después de la fusión, independientemente de los parámetros especificados en el tipo de datos. #87646 (Pavel Kruglov).
  • Se agregó compatibilidad con la función de ventana cume_dist. Corrige #86920. #88102 (Manuel).
  • Ahora se puede añadir un nuevo argumento preprocessor en la construcción de índices de texto. El argumento es una expresión arbitraria que transforma cada documento antes de la tokenización. #88272 (Jimmy Aguilar Mena).
  • Añade un campo memory_usage a X-ClickHouse-Progress y X-ClickHouse-Summary. Esto puede usarse para recopilar en tiempo real, en el cliente, el uso de memoria de las consultas. #88393 (Christoph Wurm).
  • Añade la configuración into_outfile_create_parent_directories para crear automáticamente los directorios padre de INTO OUTFILE, evitando errores cuando las rutas de salida no existen. Esto simplifica los flujos de trabajo en los que las consultas escriben resultados en directorios anidados. Resuelve #88610. #88795 (Saksham).
  • Se añade compatibilidad con la sintaxis CREATE OR REPLACE para tablas temporales. Cierra #35888. #89450 (Aleksandr Musorin).
  • Se añade compatibilidad con arrayRemove para eliminar del array arr todos los elementos iguales a elem. Esto solo es necesario por compatibilidad con Postgres, ya que ClickHouse ya dispone de la función mucho más potente arrayFilter. Resuelve #52099. #89585 (tiwarysaurav).
  • Se introduce la función escalar midpoint, que calcula el promedio. Resuelve #89029. #89679 (simonmichal).
  • La interfaz web ahora incluye un botón de descarga. Descarga el resultado completo aunque la UI solo muestre una parte. #89768 (Alexey Milovidov).
  • Se añadió la configuración arrow_flight_request_descriptor_type para admitir Dremio y otros servidores de Arrow Flight que requieren descriptores de tipo comando. Implementa #89523. #89826 (Shreyas Ganesh).
  • Nuevas funciones de agregación argAndMin y argAndMax que devuelven el argumento y el valor extremo correspondiente. En versiones anteriores, esto también se podía hacer usando una tupla como argumento. #89884 (AbdAlRahman Gad).
  • Configuración para escribir y verificar sumas de verificación de Parquet. #79012 (Michael Kolupaev).
  • Se añadió la configuración kafka_schema_registry_skip_bytes al motor de tabla Kafka para omitir los bytes del encabezado del envoltorio (p. ej., el prefijo de 19 bytes de AWS Glue Schema Registry) antes de analizar la carga útil del mensaje. Esto permite que ClickHouse consuma mensajes de registros de esquemas que añaden encabezados de metadatos. #89621 (Taras Polishchuk).
  • Se agrega la función h3PolygonToCells, que permite rellenar geometrías con hexágonos H3. Resuelve #33991. #66262 (Zacharias Knudsen).
  • Añade una nueva columna virtual _tags (Map(String, String)) con todas las etiquetas asociadas al blob en S3 (nota: si el blob no tiene ninguna etiqueta, no se hará ninguna petición adicional). Resuelve #72945. #77773 (Zicong Qu).

Funcionalidad experimental

  • Se admite la obtención de certificados TLS desde proveedores ACME, RFC 8555, como Let’s Encrypt. Esto permite la configuración automática de TLS en clústeres distribuidos. #66315 (Konstantin Bogdanov).
  • Se admite parte de la API HTTP de consultas de Prometheus. Para habilitarla, agregue una regla de tipo query_api en la sección <prometheus> del archivo de configuración. Los handlers compatibles son /api/v1/query_range y /api/v1/query. #86132 (Nikita Mikhaylov).
  • La búsqueda de texto completo ahora está en beta (antes estaba en fase experimental). #88928 (Robert Schulze).
  • Alias pasa a experimental y puede habilitarse con allow_experimental_alias_table_engine = 1. #89712 (Kai Zhu).

Mejora del rendimiento

  • El lector de Parquet v3 está habilitado de forma predeterminada. #88827 (Michael Kolupaev).
  • Ejecución distribuida: las tareas se dividen mejor por identificadores de grupos de filas, no por archivos. #87508 (scanhex12).
  • Los RIGHT y FULL JOIN ahora usan ConcurrentHashJoin; esto significa que estos tipos de JOIN ahora se ejecutan con un mayor grado de paralelismo. Mejora varios casos de RIGHT y FULL JOIN hasta en un factor de dos. Resuelve #78027. #78462 (Yarik Briukhovetskyi).
  • Optimización para valores elevados de expresiones constantes en consultas. Cierra #72880. #81104 (Yakov Olkhovskiy).
  • Consultas SELECT hasta 8 veces más rápidas gracias a una poda intensiva de particiones en tablas con más de 10K partes. #85535 (James Morrison).
  • Cuando una consulta usa una tabla hash de tamaño fijo para el estado de agregación (GROUP BY sobre un entero pequeño), ClickHouse ahora fusiona el estado de agregación en paralelo para acelerar la consulta. #87366 (Jianfei Hu).
  • Permite usar proyecciones (que usan SELECT sobre _part_offset y un ORDER BY distinto) como índice secundario. Cuando está habilitado, determinados predicados de la consulta pueden usarse para leer datos de partes de proyección y generar bitmaps para filtrar filas de forma eficiente durante la etapa de PREWHERE. Este es el tercer paso para implementar el índice de proyección, después de #80343. #81021 (Amos Bird).
  • Se corrige VDSO para sistemas Aarch64 poco frecuentes y para otras posibles combinaciones de arquitectura/kernel. #86096 (Tomas Hulata).
  • Mejora la velocidad de descompresión de LZ4 al simplificar el código y ajustar el algoritmo de selección. #88360 (Raúl Marín).
  • S3 particiona los objetos internamente según los prefijos del nombre de la clave y escala automáticamente para admitir altas tasas de solicitudes por partición. Este cambio introduce dos nuevas opciones de configuración de BACKUP: data_file_name_generator y data_file_name_prefix_length. Cuando data_file_name_generator=checksum, los archivos de datos de la copia de seguridad se nombran mediante un hash de su contenido. Ejemplo: para un checksum = abcd1234ef567890abcd1234ef567890 y data_file_name_prefix_length = 3, la ruta resultante será: abc/d1234ef567890abcd1234ef567890. La distribución de claves resultante mejora el balanceo de carga entre las particiones de S3 y reduce el riesgo de throttling. #88418 (Julia Kartseva).
  • Se mejoró el rendimiento del índice de texto almacenando en caché bloques de diccionario y usando tablas hash para la búsqueda de tokens en lugar de la búsqueda binaria. #88786 (Elmi Ahmadov).
  • Las consultas ahora pueden aprovechar simultáneamente optimize_read_in_order y query_plan_optimize_lazy_materialization. Resuelve #88767. #88866 (Manuel).
  • Utiliza una proyección agregada para las consultas con DISTINCT. Cierra #86925. #88894 (Nihal Z. Miaji).
  • Almacenamiento en caché de las posting lists para mejorar el rendimiento en ejecuciones sucesivas. #88912 (Elmi Ahmadov).
  • Ejecutar la transformación streaming de LIMIT BY cuando el orden de entrada coincida con las claves de LIMIT BY. #88969 (Eduard Karacharov).
  • Se permite reescribir ANY LEFT JOIN o ANY RIGHT JOIN como ALL INNER JOIN en algunos casos. #89403 (Dmitry Novik).
  • Reduce la sobrecarga del logging: usa menos operaciones atómicas por registro. #89651 (Sergei Trifonov).
  • Cuando los filtros de tiempo de ejecución están habilitados en una consulta con múltiples JOIN y se añaden varios filtros de tiempo de ejecución, se implementa el pushdown de los pasos de filtro recién añadidos por delante de los demás. #89725 (Alexander Gololobov).
  • Se aceleran ligeramente algunas operaciones de uniqExact al reducir la sobrecarga de la fusión de tablas hash. #89727 (Raúl Marín).
  • Se aumenta el límite de filas para la materialización diferida de 10 a 100. #89772 (Alexey Milovidov).
  • Se habilita de forma predeterminada la configuración allow_special_serialization_kinds_in_output_formats. Esto reducirá el uso de memoria y mejorará la velocidad de las consultas al generar la salida de columnas dispersas/Replicated en algunos formatos de salida por fila. #89402 (Pavel Kruglov).
  • Se añadió paralelismo a las consultas ALTER TABLE ... FREEZE. #71743 (Kirill).
  • Se añade una caché para la autenticación con bcrypt. #87115 (Nikolay Degterinsky).
  • Si un índice de omisión utilizado en una consulta con FINAL está en una columna que forma parte de la clave primaria, el paso adicional para comprobar la intersección con la clave primaria en otras partes es innecesario y ya no se realiza. Resuelve #85897. #88368 (Shankar Iyer).
  • La optimización enable_lazy_columns_replication ahora es la predeterminada, lo que reducirá el uso de memoria en los joins. #89316 (Alexey Milovidov).
  • Se introduce una caché por tabla de ColumnsDescription para las partes, lo que reduce el consumo de memoria cuando las tablas contienen muchas partes y columnas. #89352 (Azat Khuzhin).
  • Se introdujo una caché para la cabecera deserializada del índice de texto a fin de reducir la E/S y mejorar el rendimiento de las consultas. La caché se puede configurar mediante nuevos parámetros del servidor: - text_index_header_cache_policy - text_index_header_cache_size - text_index_header_cache_max_entries - text_index_header_cache_size_ratio. #89513 (Elmi Ahmadov).

Mejora

  • UNION debería unificar los types con Variant si es necesario cuando use_variant_as_common_type está habilitado. Resuelve #82772. #83246 (Mithun p).
  • Los roles definidos en SQL ahora pueden otorgarse a los usuarios definidos en users.xml. #88139 (c-end).
  • Registrar las consultas internas (las que ejecutan internamente los diccionarios, las vistas materializadas actualizables, etc.) y añadir la nueva columna is_internal a system.query_log. #83277 (Miсhael Stetsyuk).
  • Operador IS NOT DISTINCT FROM (<=>) mejorado: se añadió compatibilidad con el inverso IS DISTINCT FROM, así como con operandos numéricos compatibles de distintos tipos (p. ej., Nullable(UInt32) y Nullable(Int64)). Resuelve #86763. #87581 (yanglongwei).
  • clickhouse-client y clickhouse-local en modo interactivo resaltarán en la línea de comandos los identificadores que tengan el mismo nombre que el que está actualmente bajo el cursor. #89689 (Alexey Milovidov).
  • Los ajustes relacionados con el formato de salida ya no afectan a la caché de consultas. Además, la caché de consultas ignorará el ajuste http_response_headers. Esto es necesario para permitir la implementación de funciones como descargar el resultado desde la caché en la interfaz web. #89756 (Alexey Milovidov).
  • La interfaz HTTP proporcionará los encabezados Age y Expires cuando se utilice la caché de resultados de consultas. La presencia del encabezado Age indica si el resultado proviene de la caché, mientras que Expires también se establece en la primera escritura. Se añaden nuevos eventos de perfil: QueryCacheAgeSeconds, QueryCacheReadRows, QueryCacheReadBytes, QueryCacheWrittenRows, QueryCacheWrittenBytes. #89759 (Alexey Milovidov).
  • Permitir la inserción en tablas remotas y de lago de datos cuando disable_insertion_and_mutation está habilitado (es decir, warehouses de solo lectura en ClickHouse Cloud). #88549 (Alexander Tokmakov).
  • Se agrega la consulta SYSTEM DROP TEXT INDEX CACHES. #90287 (Anton Popov).
  • Se habilita enable_shared_storage_snapshot_in_query de forma predeterminada para ofrecer mejores garantías de consistencia. No debería tener desventajas. #82634 (Alexey Milovidov).
  • Se añadió la configuración send_profile_events, que permite a los clientes reducir el tráfico de red cuando no se utilizan los eventos de perfil. #89588 (Kaviraj Kanagaraj).
  • Permite desactivar la descarga en segundo plano de segmentos próximos por consulta. Corrige #89524. #89668 (tanner-bruce).
  • Permitir FETCH PARTITION cuando haya discos dañados en tablas MergeTree replicadas. #58663 (Duc Canh Le).
  • Se corrige una excepción no controlada al obtener el esquema de una tabla MySQL en el motor de base de datos MySQL. #69358 (Duc Canh Le).
  • Todas las consultas DDL ON CLUSTER ahora se ejecutan con el contexto del usuario de la consulta original para mejorar la validación de acceso. #71334 (pufit).
  • Se añadió compatibilidad con UUID en Parquet cuando está representado mediante FixedString(16) con el tipo lógico UUID. #74484 (alekseev-maksim).
  • Deshabilitar ThreadFuzzer de forma predeterminada en los binarios que no pertenecen al servidor. #89115 (Raúl Marín).
  • Hacer visibles las optimizaciones del plan de consulta para el subplan de entrada de la subconsulta correlacionada al posponer su materialización. Parte de #79890. #85455 (Dmitry Novik).
  • Puede ver una barra de progreso, logs y estadísticas de rendimiento para consultas CREATE OR REPLACE TABLE con SELECT en clickhouse-client. Esta consulta ya no provocará un timeout, incluso si el SELECT tarda bastante tiempo. Resuelve #38416. #87247 (Diskein).
  • Se añade compatibilidad con los tipos JSON y Dynamic en las funciones hash. Resuelve #87734. #87791 (Pavel Kruglov).
  • Se implementaron las partes que faltaban del servidor ArrowFlight. #88013 (Vitaly Baranov).
  • Se agregan varias métricas de histograma para el servidor y Keeper con el fin de instrumentar la duración de las etapas de ejecución de las solicitudes de Keeper. Se agregarán las siguientes métricas al servidor: keeper_client_queue_duration_milliseconds, keeper_client_send_duration_milliseconds, keeper_client_roundtrip_duration_milliseconds. Se agregarán las siguientes métricas a Keeper: keeper_server_preprocess_request_duration_milliseconds, keeper_server_process_request_duration_milliseconds, keeper_server_queue_duration_milliseconds, keeper_server_send_duration_milliseconds. #88158 (Miсhael Stetsyuk).
  • Agregar la opción input_headers a la consulta EXPLAIN para añadir las cabeceras de entrada a los pasos. #88311 (János Benjamin Antal).
  • Agrega eventos de perfil para contar la cantidad de solicitudes a S3 y AzureBlobStorage retrasadas por los limitadores. Corrige la inconsistencia de los eventos de perfil ThrottlerCount relacionados y no relacionados con disco. Ahora las solicitudes HTTP DELETE de AzureBlobStorage ya no se limitan. #88535 (Sergei Trifonov).
  • Almacenamiento en caché de estadísticas a nivel de tabla; se añaden dos ajustes: el ajuste de MergeTree refresh_statistics_interval indica el intervalo de actualización de la caché de estadísticas; 0 significa que no se creará ninguna caché. El ajuste de sesión use_statistics_cache indica si se deben usar estadísticas a nivel de tabla en una consulta. A veces queremos estadísticas más precisas, por lo que optamos por ignorar la caché. #88670 (Han Fei).
  • Se corrigió la deserialización binaria de Array y Map para usar la configuración max_binary_array_size en lugar de max_binary_string_size al comprobar los límites de tamaño. Esto garantiza que se apliquen los límites correctos al leer en formato RowBinary. #88744 (Raufs Dunamalijevs).
  • Se introdujo una clase LockGuardWithStopWatch y se utilizó en el background pool para ejecutar merges. Si un mutex permanecía retenido durante un segundo o algún hilo tardaba más de un segundo en adquirirlo, se imprimirá un mensaje de advertencia. La parte más pesada del código se trasladó del destructor de MergeMutateSelectedEntry al método finalize para evitar mantener el bloqueo en el ejecutor MergeTreeBackground durante demasiado tiempo. #88898 (Nikita Mikhaylov).
  • Permite usar automáticamente regiones de AWS con activación opcional para S3 cuando la región no se especifica en el endpoint. Referencia: regiones de AWS con activación opcional. #88930 (Andrey Zvonov).
  • Ahora, el usuario puede cancelar la consulta en clickhouse-client pulsando Ctrl-C cuando el paginador está activo. Resuelve #80778. #88935 (Grigorii).
  • La interfaz web mostrará barras en la tabla incluso cuando los valores sean negativos. Así, podrá mostrar un gráfico de barras a ambos lados, con distintos colores en los lados negativo y positivo. #89016 (Alexey Milovidov).
  • Desactiva shared_merge_tree_create_per_replica_metadata_nodes para reducir la cantidad de metadatos que SharedMergeTree almacena en Keeper. #89036 (Alexander Tokmakov).
  • Hacer que S3Queue respete la opción de configuración del servidor disable_insertion_and_mutation. #89048 (Raúl Marín).
  • Establecer s3_retry_attempts en 500 de forma predeterminada para la versión 25.6, a fin de garantizar que las copias de seguridad se completen correctamente cuando haya un reparticionamiento en S3 y S3 responda con errores «Slow Down» durante más de 10 minutos. #89051 (Nikita Mikhaylov).
  • Ahora se pueden usar los ajustes kafka_compression_codec y kafka_compression_level para especificar la compresión para los productores de Kafka en ambos motores Kafka. #89073 (János Benjamin Antal).
  • Añade una nueva columna statistics en system.columns que indica los tipos de estadísticas generadas para esta tabla. Si un tipo de estadísticas se crea automáticamente, aparecerá con el sufijo (auto). #89086 (Han Fei).
  • Se mejora el mensaje de error cuando se pasa una expansión genérica en lugar del nombre del clúster a una table function *Cluster. #89093 (Konstantin Bogdanov).
  • YTsaurus: permitir el uso de una replicated_table como fuente de datos. #89107 (MikhailBurdukov).
  • Las consultas que empiezan con espacios en blanco ya no se guardan en el historial de la CLI. #89116 (Konstantin Bogdanov).
  • Se admite Array de String como entrada en las funciones hasAnyTokens o hasAllTokens. #89124 (Elmi Ahmadov).
  • Se modificó la forma en que los discos reescribibles simples almacenan sus metadatos en memoria, lo que corrige numerosos errores relacionados con el anidamiento de directorios y otros problemas afines. #89125 (Mikhail Artemenko).
  • Las subconsultas que participan en expresiones con IN al consultar una tabla Iceberg se precalcularán correctamente antes del análisis de poda de particiones. #89177 (Daniil Ivanik).
  • Se habilita create_table_empty_primary_key_by_default de forma predeterminada. Esto mejora la usabilidad. #89333 (Alexey Milovidov).
  • Corrige un error en el código del motor de base de datos Backup que podía generar una consulta no válida con SHOW CREATE DATABASE o al consultar engine_full en system.databases. Cierra #89477. #89341 (Alexey Milovidov).
  • En versiones anteriores, la configuración create_table_empty_primary_key_by_default no surtía efecto cuando no se especificaba el motor de la tabla en la consulta CREATE TABLE. #89342 (Alexey Milovidov).
  • Actualiza chdig a la versión 25.11.1; incluye mejoras importantes en logging y varias mejoras más (notas de la versión 25.11). #89957 (Azat Khuzhin). (notas de la versión 25.10). #89452 (Azat Khuzhin).
  • El controlador de redimensionado del área de texto de la consulta en la Web UI ahora ocupa todo el ancho, lo que la hace un poco más cómoda. Además, el controlador de redimensionado nativo del navegador no estaba disponible en Safari en iPad y, tras este cambio, al menos puedes arrastrar la parte inferior del área de texto, si lo sabes. #89457 (Alexey Milovidov).
  • Se mejoró el seguimiento de memoria en la generación de resultados de hash joins. Anteriormente, las asignaciones temporales durante la generación del resultado del join no se contabilizaban correctamente, lo que podía hacer que se superaran los límites de memoria. #89560 (Azat Khuzhin).
  • Registro asíncrono del servidor: vaciado anticipado y aumento del tamaño predeterminado de la cola. #89597 (Raúl Marín).
  • Corrige el valor incorrecto de FilesystemCacheBytes (y otros) en system.asynchronous_metrics. Ejecuta las consultas SYSTEM sobre las cachés del sistema de archivos solo una vez. Vista Atomic para cachés que apuntan a la misma ruta en system.filesystem_caches. #89640 (Azat Khuzhin).
  • Se aclaró la descripción de algunas columnas de system.view_refreshes. #89701 (Tuan Pham Anh).
  • Almacena en caché las credenciales de S3 usadas al interactuar con el endpoint de STS, para poder reutilizarlas en distintas llamadas a funciones. La cantidad de credenciales almacenadas en caché puede controlarse con s3_credentials_provider_max_cache_size. #89734 (Antonio Andelic).
  • Se corrige el pushdown del filtro en tiempo de ejecución cuando hay varios pasos de expresión por debajo. #89741 (Alexander Gololobov).
  • Si la memoria del sistema es inferior a 5 GB, no bloquear el ejecutable con mlock de forma predeterminada. #89751 (Alexey Milovidov).
  • Las pistas de tipo en la interfaz web ya no se desbordan sobre el encabezado de la tabla. También se corrigió la visualización de los tooltips: ya no quedan detrás del encabezado de la tabla. #89753 (Alexey Milovidov).
  • Mostrar las propiedades de la tabla en la interfaz web. Al hacer clic en el número de filas o de bytes, se abrirá una consulta de system.tables. Al hacer clic en el motor de tabla, se abrirá SHOW TABLES. #89771 (Alexey Milovidov).
  • Se admite non_replicated_deduplication_window para tablas con un disco que no implementa la escritura en modo append. Resuelve #87281. #89796 (Tuan Pham Anh).
  • Se agregó la posibilidad de especificar una lista de tablas sobre las que hacer flush con el comando SYSTEM FLUSH ASYNC INSERT QUEUE. #89915 (Sema Checherinda).
  • Almacena los ID de los bloques de deduplicación en system.part_log. #89928 (Sema Checherinda).
  • Se cambió el valor predeterminado de la configuración de la caché del sistema de archivos keep_free_space_remove_batch de 10 a 100, ya que es más eficiente. #90030 (Kseniia Sumarokova).
  • Se introduce el tipo de fusión TTL DROP y no se actualiza la programación de la siguiente fusión TTL de borrado tras este tipo de fusiones. #90077 (Mikhail Artemenko).
  • Se reduce el límite de nodos para la solicitud RemoveRecursive de Keeper durante la limpieza de S3Queue. #90201 (Antonio Andelic).
  • Hacer que la consulta SYSTEM FLUSH LOGS espere a la creación de la tabla incluso cuando los logs estén vacíos. #89408 (János Benjamin Antal).
  • Corrige el valor incorrecto de rows_before_limit_at_least cuando intervienen varios segmentos remotos en una agregación distribuida con fusión, o cuando hay subconsultas IN. Esto corrige #63280. #63511 (Amos Bird).
  • Se corrigió la aparición de 0 rows in set tras la consulta INSERT INTO ... SELECT. Cierra #47800. #79462 (Engel Danila).

Corrección de errores (fallo visible para el usuario en una versión estable oficial)

  • Corrige multiIf con argumentos constantes y evaluación de cortocircuito. Cierra #72714. #84546 (Yakov Olkhovskiy).
  • Corrige un error lógico al seleccionar de una tabla con una restricción de subconsulta. Resuelve #84190. #85575 (Pervakov Grigorii).
  • Se corrigió un error en consultas especiales que utilizan un URI con signos de interrogación. #85663 (Yarik Briukhovetskyi).
  • Se corrigió la ausencia ocasional de columnas en la salida de EXPLAIN indexes = 1. Resuelve #86696. #87083 (Michael Kolupaev).
  • Se corrige el posible error «Cannot add subcolumn with parallel replicas». Cierra #84888. #87514 (Pavel Kruglov).
  • En el escritor de Parquet, ahora se emite la cadena created_by con el formato correcto, por ejemplo, ClickHouse version 25.10.1 (build 5b1dfb14925db8901a4e9202cd5d63c11ecfbb9f) en lugar de ClickHouse v25.9.1.1-testing. Se corrigió la compatibilidad del lector de Parquet con archivos defectuosos escritos por versiones antiguas de parquet-mr. #87735 (Michael Kolupaev).
  • Se corrigió el cálculo de phi-cuadrado, que provocaba resultados incorrectos en cramersV, cramersVBiasCorrected, theilsU y contingency. #87831 (Nihal Z. Miaji).
  • Se corrige la lectura de un array mixto de Float y Bool en JSON. Anteriormente, al insertar estos datos se producía una excepción. #88008 (Pavel Kruglov).
  • Uso de shared_ptr para QueryState en TCPHandler para detectar si el estado es inválido en setProgressCallback, setFileProgressCallback y setBlockMarshallingCallback. #88201 (Tuan Pham Anh).
  • Corrige un error lógico en la reordenación de cross join cuando query_plan_optimize_join_order_limit > 1, cierra #89409. #88286 (Vladimir Cherkasov).
  • Se corrige #88426 1. No se permiten definiciones explícitas de columnas en Alias, y las columnas se cargan automáticamente desde la tabla de destino. Esto garantiza que el alias siempre coincida con el esquema de la tabla de destino. 2. Se exponen más métodos de IStorage mediante proxy. #88552 (Kai Zhu).
  • Después de recuperarse, una réplica de una base de datos Replicated podía quedarse atascada durante mucho tiempo mostrando mensajes como Failed to marked query-0004647339 as finished (finished=No node, synced=No node), ya se ha corregido. #88671 (Alexander Tokmakov).
  • Corrige el posible “Context has expired” con el nuevo analizador y subconsultas. #88694 (Azat Khuzhin).
  • Se corrigió un fallo de segmentación en el lector de Parquet cuando input_format_parquet_local_file_min_bytes_for_seek está configurado en 0. Resuelve #78456. #88784 (Animesh).
  • Soluciona el resultado incorrecto de min(PK)/max(PK) cuando la PK está en orden inverso. Esto corrige #83619. #88796 (Amos Bird).
  • Se corrige la propagación de las restricciones de tamaño mediante los ajustes max_table_size_to_drop y max_partition_size_to_drop en DROP de las tablas internas. #88812 (Nikolay Degterinsky).
  • Se corrige top_k para que respete el parámetro de umbral cuando se invoca con un solo argumento. Cierra #88757. #88867 (Manuel).
  • Las fuentes de ArrowFlight con endpoint que requerían una conexión SSL (como las que están detrás de un AWS ALB) ahora pueden solicitar correctamente un conjunto de datos específico. #88868 (alex-shchetkov).
  • Corrige el manejo de Nested(Tuple(...)) sin materializar (añadido mediante ALTER). Corrige #83133. #88879 (Azat Khuzhin).
  • Se corrige un error en la función reverseUTF8. En versiones anteriores, invertía por error los bytes de los puntos de código UTF-8 de longitud 4. Esto resuelve #88913. #88914 (Alexey Milovidov).
  • Se corrigió el protocolo de icebergS3Cluster. Se añadió compatibilidad con la evolución del schema, así como con las eliminaciones posicionales y por igualdad en la función de clúster Iceberg. Resuelve #88287. #88919 (Yang Jiang).
  • Deshabilita parallel_replicas_support_projection para las consultas con réplicas en paralelo sobre tablas distribuidas. Cierra #88899. #88922 (zoomxi).
  • Se propaga el contexto en los casts internos. Se corrigen varios problemas por los que no se propagaba la configuración de cast. Cierra #88873. Cierra #78025. #88929 (Manuel).
  • Corrige la obtención del formato de archivo a partir de globs en la función file(). Resuelve #88920. #88947 (Vitaly Baranov).
  • No se comprueba el acceso SET DEFINER <current_user>:definer al crear una vista con SQL SECURITY DEFINER. #88968 (pufit).
  • Se corrigió LOGICAL_ERROR en L2DistanceTransposed(vec1, vec2, p), donde la optimización para la lectura parcial de QBit eliminó incorrectamente Nullable del tipo de retorno cuando p era Nullable. #88974 (Raufs Dunamalijevs).
  • Se corrige un bloqueo con un tipo de catálogo desconocido. Resuelve #88819. #88987 (scanhex12).
  • Con esto se cierra #88081. #88988 (scanhex12).
  • Se corrigió una degradación del rendimiento en el análisis de los índices de omisión. #89004 (Anton Popov).
  • Corrige el error ACCESS_ENTITY_NOT_FOUND al intentar ejecutar clusterAllReplicas desde un usuario con un rol que no existe. Resuelve #87670. #89068 (pufit).
  • Se corrige el procesamiento de columnas dispersas mediante una restricción CHECK. Cierra #88637. #89076 (Eduard Karacharov).
  • Se corrigió un recuento incorrecto de filas al rellenar columnas virtuales en MergeTreeReaderTextIndex, que provocaba una caída con LOGICAL_ERROR. #89095 (Peng Jian).
  • Evita fugas en el contador de merge de TTL cuando se producen excepciones durante la preparación del merge. Resuelve #89019. #89127 (save-my-heart).
  • Se corrigió el cálculo del tamaño del búfer necesario para las operaciones de codificación y decodificación de base32/base58. #89133 (Antonio Andelic).
  • Se corrige un acceso a memoria ya liberada en Distributed debido a una condición de carrera entre el apagado y los INSERT en segundo plano. Resuelve #88640. #89136 (Azat Khuzhin).
  • Evita posibles condiciones de carrera causadas por excepciones mutables al analizar Parquet. Corrige #88385. #89174 (Azat Khuzhin).
  • Vista materializada actualizable: se corrigió un raro bloqueo del servidor si la tabla de origen se eliminaba por completo durante una actualización. #89203 (Michael Kolupaev).
  • Vaciar los búferes al enviar un error en mitad de un flujo comprimido en la interfaz HTTP. #89256 (Alexander Tokmakov).
  • Se evita que las reglas de enmascaramiento de consultas se apliquen incorrectamente a las sentencias DDL. #89272 (MikhailBurdukov).
  • Se corrigió un número incorrecto de filas al rellenar columnas virtuales en MergeTreeReaderTextIndex, lo que causaba un fallo con LOGICAL_ERROR. Reabre #89095. #89303 (Jimmy Aguilar Mena).
  • Se corrige el LOGICAL_ERROR por el que Statistics countmin no admitía el tipo de datos estimate de LowCardinality(Nullable(String)). #89343 (Han Fei).
  • Posible fallo/comportamiento indefinido en la función IN cuando los tipos de las columnas de la clave primaria son distintos de los tipos de las columnas del lado derecho de la función IN. Ejemplo: SELECT string_column, int_column FROM test_table WHERE (string_column, int_column) IN (SELECT ‘5’, ‘not a number’). Ocurre si se seleccionan muchas filas y hay filas que contienen tipos no compatibles. #89367 (Ilya Golshtein).
  • Corrige el truncamiento de los argumentos de countIf(*). Cierra #89372. #89373 (Manuel).
  • Evita la pérdida de sumas de comprobación sin comprimir en las estadísticas de mutaciones. #89381 (Azat Khuzhin).
  • Se corrige el LOGICAL_ERROR en L2DistanceTransposed(vec1, vec2, p), donde la optimización para la lectura parcial de QBit eliminaba incorrectamente Nullable del tipo de retorno cuando p era LowCardinality(Nullable(T)). Resuelve #88362. #89397 (Raufs Dunamalijevs).
  • Se corrige la carga de tablas con una serialización dispersa incorrecta de la propia Tuple (escrita por versiones anteriores de ClickHouse). #89405 (Azat Khuzhin).
  • Se corrigió el manejo incorrecto de merge en partes vaciadas por TTL con proyecciones no vacías al usar deduplicate_merge_projection_mode='ignore'. Resuelve #89430. #89458 (Amos Bird).
  • Corrige un error lógico en el join full_sorting_merge con columnas duplicadas. Resuelve #86957. #89495 (Vladimir Cherkasov).
  • Se corrigió la lectura de los changelogs al iniciar Keeper en los casos en que un changelog no se había renombrado correctamente durante la rotación. #89496 (Antonio Andelic).
  • Corrige resultados incorrectos de JOIN al usar condiciones OR con claves únicas de la tabla de la derecha. Resuelve #89391. #89512 (Vladimir Cherkasov).
  • Se corrige el posible error “Context has expired” con el analizador y PK IN (subconsulta) (v2). Corrige #89433. #89527 (Azat Khuzhin).
  • Corrige la replicación de MaterializedPostgreSQL para tablas con nombres de columna en mayúsculas configurados. Resuelve #72363. #89530 (Danylo Osipchuk).
  • Se corrige un cierre inesperado cuando el estado de una función de agregación contiene un valor serializado de una columna LowCardinality(String). #89550 (Pavel Kruglov).
  • Se corrige un bloqueo al usar ARRAY JOIN en el lado derecho de un JOIN con la configuración enable_lazy_columns_replication activada. #89551 (Pavel Kruglov).
  • Corrige un error lógico en query_plan_convert_join_to_in. Soluciona #89066. #89554 (Vladimir Cherkasov).
  • Se corrigió una excepción en el estimador de estadísticas al intentar estimar condiciones con tipos de columna y de constante incompatibles que no se pueden convertir. #89596 (Han Fei).
  • Añade filtros de runtime solo para algoritmos de JOIN compatibles, es decir, hash joins. Un filtro solo puede construirse cuando el algoritmo de JOIN primero lee completamente el lado derecho y luego lee el izquierdo, pero FullSortingMergeJoin, por ejemplo, lee ambos lados simultáneamente. Corrige #89220. #89652 (Alexander Gololobov).
  • Se corrige la ejecución concurrente de las funciones hasAnyTokens, hasAllTokens y tokens con el tokenizador sparseGrams. Resuelve #89605. #89665 (Elmi Ahmadov).
  • Se corrige un error lógico o bloqueo relacionado con el runtime filter de join en algunos casos. Corrige #89062. #89666 (Alexander Gololobov).
  • Corrige un posible error lógico durante ARRAY JOIN en una columna Map con enable_lazy_columns_replication activado. Cierra #89705. #89717 (Pavel Kruglov).
  • Se evita un fallo al leer desde el servidor remoto tras la desconexión en consultas remotas durante la cancelación. Resuelve #89468. #89740 (Azat Khuzhin).
  • Se corrige una condición de carrera en la lectura del índice de proyección. Resuelve #89497. #89762 (Peng Jian).
  • Se corrige un error en la lectura del índice de proyección que podía provocar condiciones de carrera. Resuelve #89497. #89775 (Amos Bird).
  • Se corrigió el manejo de la función de tabla Paimon en tablas sin partición. Resuelve #89690. #89793 (JIaQi).
  • Corrige un posible error lógico al leer las rutas y sus subcolumnas en la serialización avanzada de datos compartidos en JSON. Cierra #89805. #89819 (Pavel Kruglov).
  • Se corrige un posible desbordamiento de pila en la deserialización binaria de los tipos de datos. Cierra #88710. #89822 (Pavel Kruglov).
  • Corrige un error lógico con una tupla vacía en la función IN. Cierra #88343. #89850 (Nihal Z. Miaji).
  • Eliminar las funciones inyectivas de GROUP BY independientemente de optimize_injective_functions_in_group_by en el analizador antiguo por motivos de compatibilidad. Resuelve #89854. #89870 (Raufs Dunamalijevs).
  • Si la fusión se interrumpía, por ejemplo, por un límite de memoria, el ejecutor en segundo plano de merge mutate llamaba a cancel en la tarea de fusión sin bloqueo, pero, en este caso, la parte resultante parcialmente creada no se eliminaba (ya que no estaba terminada y en esta fase no era visible). Después de eso, la tarea de fusión se destruía, lo que provocaba la destrucción de la parte resultante. Esto revertía la transacción de disco y hacía que los datos se eliminaran de S3. Al final, esta recolección de basura se ejecutaba bajo el bloqueo del ejecutor en segundo plano de merge mutate. #89875 (Mikhail Artemenko).
  • Corrige un error lógico relacionado con una tupla vacía en la función reverse y en CAST. Cierra #89137. #89908 (Nihal Z. Miaji).
  • Ahora ClickHouse mostrará de forma predeterminada la base de datos del catálogo del lago de datos en la consulta SHOW DATABASES. #89914 (alesapin).
  • Se corrige el uso de la copia nativa en GCS para las copias de seguridad. Debido a una clonación incorrecta del cliente, la copia nativa de GCS siempre fallaba y recurría a un método menos eficiente de lectura y escritura manual de los datos. #89923 (Antonio Andelic).
  • Se corrige el cálculo del tamaño del búfer para base32Encode. Calcular base32Encode para una columna de cadenas con tamaño inferior a 5 podía provocar fallos. Resuelve #89911. #89929 (Antonio Andelic).
  • Se corrigió el escape incorrecto para las consultas SHOW COLUMNS y SHOW FUNCTIONS. #89942 (alesapin).
  • Se corrige la validación de la URL en el motor de MongoDB cuando el nombre de usuario contiene el carácter ’@’. Anteriormente, los nombres de usuario con ’@’ provocaban un error debido a una codificación incorrecta. #89970 (Kai Zhu).
  • Backport en #90592: Se corrige un posible fallo durante una consulta remota con ARRAY JOIN dentro de IN y con la opción enable_lazy_columns_replication habilitada. Resuelve #90361. #89997 (Pavel Kruglov).
  • Retroportado en #90448: se corrige la inferencia de valores DateTime64 incorrectos a partir de Strings en formatos de texto en algunos casos. Resuelve #89368. #90013 (Pavel Kruglov).
  • Corrige un error lógico provocado por una columna de tupla vacía en BSONEachRow y MsgPack. Cierra #89814. Cierra #71536. #90018 (Nihal Z. Miaji).
  • Retroportado en #90457: se realizan comprobaciones de tamaño al deserializar datos de estados de agregación y otras fuentes. #90031 (Raúl Marín).
  • Corrige el posible error ‘Número no válido de filas en Chunk’ al hacer JOIN con columnas duplicadas. Resuelve #89411. #90053 (Vladimir Cherkasov).
  • Retroportado en #90588: se corrige un posible error Column with Array type is not represented by ColumnArray column: Replicated durante la inserción al usar ARRAY JOIN con la configuración enable_lazy_columns_replication habilitada. #90066 (Pavel Kruglov).
  • Permitir archivos que empiezan con punto en user_files. Cierra #89662. #90079 (Raúl Marín).
  • Retroportado en #90647: se corrige un error lógico y un error del operador módulo en la tabla del sistema numbers cuando se utiliza un tamaño de paso grande. Cierra #83398. #90123 (Nihal Z. Miaji).
  • Corrige un desbordamiento de enteros en el análisis sintáctico de los argumentos de Diccionario. Cierra #78506. #90171 (Raúl Marín).
  • Retroportado en #90468: se corrige una incompatibilidad con el particionamiento de Hive que impedía una actualización sin problemas en la versión 25.8 (soluciona el error All hive partitioning columns must be present in the schema durante la actualización). #90202 (Kseniia Sumarokova).
  • Se corrigieron posibles resultados incorrectos en consultas tras actualizaciones ligeras en consultas SELECT con la caché de condiciones de consulta activada. Corrige #90176. Corrige #90054. #90204 (Anton Popov).
  • Se corrige un fallo en StorageDistributed al analizar nombres malformados de directorios de segmentos. #90243 (Aleksandr Musorin).
  • Se corrige la conversión implícita de una cadena a un entero o a un booleano en LogicalExpressionOptimizerPass. Resuelve #89803. #90245 (Elmi Ahmadov).
  • Se corrige el formato incorrecto de ciertos índices de omisión en la definición de la tabla, que provocaba METADATA_MISMATCH e impedía la creación de nuevas réplicas en la base de datos Replicated. #90251 (Nikolay Degterinsky).
  • Retroportado en #90381: corrige una discrepancia en el recuento de filas en MergeTreeReaderIndex cuando la única parte tiene menos filas que index_granularity. Resuelve #89691. #90254 (Peng Jian).
  • Retroportado en #90608: se corrige un error al leer subcolumnas de JSON en partes compactas que podía provocar el error CANNOT_READ_ALL_DATA. Resuelve #90264. #90302 (Pavel Kruglov).
  • Se corrigen las funciones trim, ltrim y rtrim, que no funcionaban con dos argumentos. Resuelve #90170. #90305 (Nihal Z. Miaji).
  • Retroportado en #90625: se corrige un posible error lógico en prewhere para una ruta JSON inexistente con index_granularity_bytes=0. Resuelve #86924. #90375 (Pavel Kruglov).
  • Backport en #90484: se corrigió un error en L2DistanceTransposed que provocaba fallos cuando el argumento de precisión excedía el rango válido. Cierra #90401. #90405 (Raufs Dunamalijevs).
  • Retroportado en #90577: Se corrigieron cálculos de distancia incorrectos en L2DistanceTransposed al usar vectores de referencia de tipo array (que por defecto usan Array(Float64))) con columnas QBit cuyos tipos de elemento no son Float64 (Float32, BFloat16). La función ahora convierte automáticamente el vector de referencia para que coincida con el tipo de elemento de QBit. Resuelve #89976. #90485 (Raufs Dunamalijevs).
  • Backport en #90601: se corrige un error lógico causado por un caso poco frecuente en la función equals. Cierra #88142. #90557 (Nihal Z. Miaji).
  • Se corrige CoalescingMergeTree para tipos Tuple. #88828 (scanhex12).

Mejoras de compilación/pruebas/empaquetado

  • Se corrige el error Connection refused al ejecutar ClickHouse en Docker con scripts SQL de initdb y el puerto TCP redefinido. #88042 (Grigorii).
  • Se añade soporte experimental para e2k como nueva plataforma de ClickHouse. #90159 (Ramil Sattarov).
  • Se elimina el uso restante de FindPackage en CMake. Las compilaciones no deberían depender de los paquetes del sistema. #89380 (Alexey Milovidov).
  • Se usa la caché del compilador en las compilaciones durante la configuración de CMake (p. ej., protoc). #89613 (Konstantin Bogdanov).
  • Se usa el sysroot de FreeBSD 13.4. #89617 (Konstantin Bogdanov).

Versión de ClickHouse 25.10, 2025-10-31

Cambio incompatible con versiones anteriores

  • Se cambió la configuración predeterminada de schema_inference_make_columns_nullable para que respete la información de los metadatos de Parquet/ORC/Arrow sobre si las columnas son Nullable, en lugar de hacer que todo sea Nullable. No hay cambios para los formatos de texto. #71499 (Michael Kolupaev).
  • La caché de resultados de consultas dejará de tener en cuenta la opción log_comment, por lo que cambiar únicamente log_comment en una consulta ya no provocará un fallo de caché. Existe una pequeña posibilidad de que algunos usuarios segmentaran intencionadamente su caché variando log_comment. Este cambio modifica ese comportamiento y, por tanto, no es retrocompatible. Utilice la opción query_cache_tag para este propósito. #79878 (filimonov).
  • En versiones anteriores, las consultas con funciones de tabla con el mismo nombre que las funciones de implementación de los operadores se formateaban de forma incoherente. Cierra #81601. Cierra #81977. Cierra #82834. Cierra #82835. Las consultas EXPLAIN SYNTAX no siempre formatearán los operadores; el nuevo comportamiento refleja mejor el propósito de explicar la sintaxis. clickhouse-format, formatQuery y similares no formatearán las funciones como operadores si la consulta las contenía en forma funcional. #82825 (Alexey Milovidov).
  • Se prohíbe usar el tipo Dynamic en las claves de JOIN. Esto puede dar lugar a resultados inesperados cuando se compara un valor de tipo Dynamic con uno de un tipo distinto de Dynamic. Es preferible convertir la columna Dynamic al tipo requerido. #86358 (Pavel Kruglov).
  • La opción del servidor storage_metadata_write_full_object_key está activada de forma predeterminada y ya no se puede desactivar. Este es un cambio retrocompatible. Esto es solo para su información. Este cambio solo es compatible hacia adelante con las versiones 25.x. Eso significa que, si necesita revertir la nueva versión, solo podrá volver a una versión 25.x. #87335 (Sema Checherinda).
  • Reducir replicated_deduplication_window_seconds de una semana a una hora para almacenar menos znodes en ZooKeeper cuando la tasa de inserción es baja. #87414 (Sema Checherinda).
  • Se cambió el nombre de la configuración query_plan_use_new_logical_join_step a query_plan_use_logical_join_step. #87679 (Vladimir Cherkasov).
  • La nueva sintaxis permite que el parámetro tokenizer del índice de texto sea más flexible. #87997 (Elmi Ahmadov).
  • Se renombraron las funciones searchAny y searchAll como hasAnyTokens y hasAllTokens para mantener una mayor coherencia con la función existente hasToken. #88109 (Robert Schulze).
  • Elimina cache_hits_threshold de la caché del sistema de archivos. Esta funcionalidad se añadió por un colaborador externo antes de que tuviéramos la política de caché SLRU, y ahora que la tenemos, no tiene sentido mantener compatibilidad con ambas. #88344 (Kseniia Sumarokova).
  • Dos pequeños cambios en el funcionamiento de las configuraciones min_free_disk_ratio_to_perform_insert y min_free_disk_bytes_to_perform_insert: - usar bytes no reservados en lugar de bytes disponibles para determinar si se debe rechazar una inserción. Probablemente esto no sea crucial si las reservas para background merges y mutaciones son pequeñas en comparación con los umbrales configurados, pero parece más correcto. - No aplicar estas configuraciones a las tablas del sistema. La razón es que queremos que tablas como query_log sigan actualizándose. Esto ayuda mucho con la depuración. Los datos escritos en las tablas del sistema suelen ser pequeños en comparación con los datos propiamente dichos, por lo que deberían poder seguir funcionando durante mucho más tiempo con un umbral razonable de min_free_disk_ratio_to_perform_insert. #88468 (c-end).
  • Se habilita el modo asíncrono para la replicación interna de Keeper. Keeper conservará el mismo comportamiento que antes, con posibles mejoras de rendimiento. Si actualiza desde una versión anterior a la 23.9, primero debe actualizar a la 23.9+ y luego a la 25.10+. También puede establecer keeper_server.coordination_settings.async_replication en 0 antes de la actualización y habilitarlo una vez finalizada. #88515 (Antonio Andelic).

Nueva funcionalidad

  • Se añade compatibilidad con LIMIT negativo y OFFSET negativo. Cierra #28913. #88411 (Nihal Z. Miaji).
  • El motor Alias crea un proxy a otra tabla. Todas las operaciones de lectura y escritura se redirigen a la tabla de destino, mientras que el alias en sí no almacena datos y solo mantiene una referencia a dicha tabla. #87965 (Kai Zhu).
  • Compatibilidad total con el operador IS NOT DISTINCT FROM (<=>). #88155 (simonmichal).
  • Se añadió la posibilidad de crear automáticamente estadísticas en todas las columnas adecuadas de las tablas MergeTree. También se añadió la configuración a nivel de tabla auto_statistics_types, que almacena, separadas por comas, los tipos de estadísticas que se deben crear (p. ej., auto_statistics_types = 'minmax, uniq, countmin'). #87241 (Anton Popov).
  • Un nuevo índice de filtro bloom para texto, sparse_gram. #79985 (scanhex12).
  • Una nueva función conv para convertir números entre bases; actualmente admite bases de 2-36. #83058 (hp).
  • Se añadió compatibilidad con la sintaxis LIMIT BY ALL. Al igual que GROUP BY ALL y ORDER BY ALL, LIMIT BY ALL se expande automáticamente para usar todas las expresiones no agregadas de la cláusula SELECT como claves de LIMIT BY. Por ejemplo, SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALL es equivalente a SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name. Esta funcionalidad simplifica las consultas cuando se quiere limitar por todas las columnas no agregadas seleccionadas sin tener que enumerarlas explícitamente. Cierra #59152. #84079 (Surya Kant Ranjan).
  • Se añadió soporte para consultar Apache Paimon en ClickHouse. Esta integración permitiría a los usuarios de ClickHouse interactuar directamente con el almacenamiento en lago de datos de Paimon. #84423 (JIaQi).
  • Se añadió la función de agregación studentTTestOneSample. #85436 (Dylan).
  • La función de agregación quantilePrometheusHistogram acepta los límites superiores y los valores acumulados de las cubetas del histograma como argumentos, y realiza una interpolación lineal entre los límites superior e inferior de la cubeta en la que se encuentra la posición del cuantil. Se comporta de forma similar a la función histogram_quantile de PromQL en histogramas clásicos. #86294 (Stephen Chi).
  • Una nueva tabla del sistema para los archivos de metadatos de Delta Lake. #87263 (scanhex12).
  • Añade ALTER TABLE REWRITE PARTS: reescribe las partes de la tabla desde cero usando todos los ajustes nuevos (ya que algunos, como use_const_adaptive_granularity, solo se aplican a las partes nuevas). #87774 (Azat Khuzhin).
  • Se añade el comando SYSTEM RECONNECT ZOOKEEPER para forzar la desconexión y reconexión de ZooKeeper (https://github.com/ClickHouse/ClickHouse/issues/87317). #87318 (Pradeep Chhetri).
  • Se limita el número de colecciones con nombre mediante la configuración max_named_collection_num_to_warn y max_named_collection_num_to_throw. Se añade la nueva métrica NamedCollection y el error TOO_MANY_NAMED_COLLECTIONS. #87343 (Pablo Marcos).
  • Se añadieron variantes optimizadas que no distinguen entre mayúsculas y minúsculas de las funciones startsWith y endsWith: startsWithCaseInsensitive, endsWithCaseInsensitive, startsWithCaseInsensitiveUTF8 y endsWithCaseInsensitiveUTF8. #87374 (Guang Zhao).
  • Añade una forma de definir WORKLOAD y RESOURCE en SQL mediante la sección “resources_and_workloads” de la configuración del servidor. #87430 (Sergei Trifonov).
  • Agregar una nueva configuración de tabla min_level_for_wide_part que permite especificar el nivel mínimo a partir del cual una parte se crea como una parte wide. #88179 (Christoph Wurm).
  • Se añaden variantes recursivas de los comandos cp-cpr y mv-mvr en el cliente de Keeper. #88570 (Mikhail Artemenko).
  • Se añadió una configuración de sesión para excluir una lista de skip indexes de la materialización durante las inserciones (exclude_materialize_skip_indexes_on_insert). Se añadió una configuración de tabla de MergeTree para excluir una lista de skip indexes de la materialización durante la combinación (exclude_materialize_skip_indexes_on_merge). #87252 (George Larionov).

Funcionalidad experimental

  • Se implementa el tipo de dato QBit, que almacena vectores en formato bit-sliced, y la función L2DistanceTransposed, que permite la búsqueda vectorial aproximada, donde la relación entre precisión y velocidad se controla mediante un parámetro. #87922 (Raufs Dunamalijevs).
  • Las funciones searchAll y searchAny ahora también funcionan con columnas que no son de texto. En esos casos, usan el tokenizador predeterminado. #87722 (Jimmy Aguilar Mena).

Mejora del rendimiento

  • Implementa la replicación diferida de columnas en JOIN y ARRAY JOIN. Evita convertir representaciones especiales de columnas, como Sparse y Replicated, en columnas totalmente materializadas en algunos formatos de salida. Esto evita copias innecesarias de datos en memoria. #88752 (Pavel Kruglov).
  • Añade la serialización opcional de la subcolumna .size para las columnas String de nivel superior en tablas MergeTree, con el fin de mejorar la compresión y permitir un acceso eficiente a las subcolumnas. Introduce nuevos ajustes de MergeTree para controlar la versión de serialización y optimizar expresiones para cadenas vacías. #82850 (Amos Bird).
  • Compatibilidad con la lectura en orden para Iceberg. #88454 (scanhex12).
  • Acelere algunas consultas con JOIN creando un bloom filter a partir del subárbol derecho en tiempo de ejecución y pasando este filtro al escaneo del subárbol izquierdo. Esto puede ser beneficioso para consultas como SELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE'. #84772 (Alexander Gololobov).
  • Se mejoró el rendimiento de las consultas al refactorizar el orden y la integración de la caché de condiciones de consulta (QCC) con el análisis de índices. El filtrado de la QCC ahora se aplica antes del análisis de la primary key y de los skip indexes, lo que reduce el cómputo innecesario de índices. El análisis de índices se ha ampliado para admitir varios filtros de rango, y sus resultados de filtrado ahora se vuelven a almacenar en la QCC. Esto acelera significativamente las consultas en las que el análisis de índices domina el tiempo de ejecución, especialmente las que dependen de skip indexes (p. ej., índices vectoriales o índices invertidos). #82380 (Amos Bird).
  • Varias microoptimizaciones para acelerar las consultas pequeñas. #83096 (Raúl Marín).
  • Se comprimen los logs y los eventos de perfil en el protocolo nativo. En clústeres con más de 100 réplicas, los eventos de perfil sin comprimir consumen entre 1 y 10 MB/s, y la barra de progreso responde con lentitud en conexiones lentas a Internet. Esto cierra #82533. #83586 (Alexey Milovidov).
  • Mejora el rendimiento de la búsqueda de cadenas con distinción entre mayúsculas y minúsculas (operaciones como el filtrado, por ejemplo, WHERE URL LIKE '%google%') mediante la biblioteca StringZilla, utilizando instrucciones SIMD de la CPU cuando estén disponibles. #84161 (Raúl Marín).
  • Se reduce la asignación de memoria y la copia de memoria al hacer select de una tabla AggregatingMergeTree con FINAL cuando la tabla tiene columnas de tipo SimpleAggregateFunction(anyLast). #84428 (Duc Canh Le).
  • Incorpora una lógica para aplicar pushdown a los predicados disyuntivos de JOIN. Ejemplo: en TPC-H Q7, para una condición sobre 2 tablas, n1 y n2, como (n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE'), extraemos filtros parciales independientes para cada tabla: n1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY' para n1 y n2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE' para n2. #84735 (Yarik Briukhovetskyi).
  • Mejora el rendimiento de LIKE con un prefijo o sufijo al usar la nueva configuración predeterminada optimize_rewrite_like_perfect_affix. #85920 (Guang Zhao).
  • Corrige la degradación del rendimiento provocada por una clave serializada de gran tamaño al agrupar por varias columnas de tipo cadena o numérico. Es una continuación de #83884. #85924 (李扬).
  • Se añadió la nueva configuración joined_block_split_single_row para reducir el uso de memoria en joins hash con muchas coincidencias por clave. Esto permite dividir en fragmentos los resultados del hash join incluso dentro de las coincidencias de una sola fila de la tabla izquierda, lo que resulta especialmente útil cuando una fila de la tabla izquierda coincide con miles o millones de filas de la tabla derecha. Antes, todas las coincidencias tenían que materializarse de una sola vez en memoria. Esto reduce el pico de uso de memoria, pero puede aumentar el uso de CPU. #87913 (Vladimir Cherkasov).
  • Mejoras en SharedMutex (mejora del rendimiento con un gran número de consultas simultáneas). #87491 (Raúl Marín).
  • Mejora del rendimiento en la construcción del índice de texto para documentos que contienen principalmente tokens poco frecuentes. #87546 (Anton Popov).
  • Se acelera el caso habitual del destructor de Field (mejora el rendimiento cuando hay un gran número de consultas pequeñas). #87631 (Raúl Marín).
  • Se omite el recálculo en tiempo de ejecución de las estadísticas de la tabla hash durante la optimización de JOIN (mejora el rendimiento de todas las consultas con JOIN). Se añadieron nuevos eventos de perfil JoinOptimizeMicroseconds y QueryPlanOptimizeMicroseconds. #87683 (Vladimir Cherkasov).
  • Se habilita el almacenamiento en caché de marcas y se evita la E/S directa para el lector MergeTreeLazy. Esto mejora el rendimiento de las consultas con ORDER BY y un LIMIT pequeño. #87989 (Nikita Taranov).
  • La consulta SELECT con la cláusula FINAL en una tabla ReplacingMergeTree con la columna is_deleted ahora se ejecuta más rápido gracias a una mejor paralelización de dos optimizaciones existentes: 1. la optimización do_not_merge_across_partitions_select_final para las particiones de la tabla que tienen solo un part; 2. dividir otros rangos seleccionados de la tabla en intersecting / non-intersecting, de modo que solo los rangos intersecting tengan que pasar por la transformación de fusión de FINAL. #88090 (Shankar Iyer).
  • Reducir el impacto de no utilizar fail points (la ruta de código predeterminada cuando la depuración no está activa). #88196 (Raúl Marín).
  • Evita el escaneo completo de system.tables al filtrar por uuid (puede ser útil si solo tienes el UUID de los logs o la ruta de ZooKeeper). #88379 (Azat Khuzhin).
  • Se ha mejorado el rendimiento de las funciones tokens, hasAllTokens y hasAnyTokens. #88416 (Anton Popov).
  • Se aplicó inline a AddedColumns::appendFromBlock para mejorar ligeramente el rendimiento de JOIN en algunos casos. #88455 (Nikita Taranov).
  • El autocompletado del cliente es más rápido y consistente al usar system.completions en lugar de realizar múltiples consultas a las tablas del sistema. #84694 (|2ustam).
  • Se añade el nuevo parámetro de índice de texto dictionary_block_frontcoding_compression para controlar la compresión del diccionario. De forma predeterminada, está habilitado para usar la compresión front-coding. #87175 (Elmi Ahmadov).
  • Compacta los bloques de datos de todos los hilos antes de insertarlos en las vistas materializadas, según la configuración de min_insert_block_size_rows_for_materialized_views y min_insert_block_size_bytes_for_materialized_views. Anteriormente, si parallel_view_processing estaba habilitado, cada hilo que insertaba en una vista materializada específica compactaba los bloques de la inserción de forma independiente, lo que podía dar lugar a un mayor número de partes generadas. #87280 (Antonio Andelic).
  • Añade la configuración temporary_files_buffer_size para controlar el tamaño del búfer de escritura de archivos temporales. * Optimiza el consumo de memoria de la operación scatter (usada, por ejemplo, en grace hash join) para columnas LowCardinality. #88237 (Vladimir Cherkasov).
  • Se añadió compatibilidad con la lectura directa a partir de índices de texto con réplicas paralelas. Se mejoró el rendimiento de la lectura de índices de texto en almacenamiento de objetos. #88262 (Anton Popov).
  • Las consultas sobre tablas de catálogos de lagos de datos usarán réplicas paralelas para el procesamiento distribuido. #88273 (scanhex12).
  • La heurística interna para ajustar el algoritmo de fusiones en segundo plano, llamada “to_remove_small_parts_at_right”, se ejecutará antes de calcular la puntuación del rango de fusión. Antes, el selector de fusiones elegía la fusión wide y después filtraba por su sufijo. Correcciones: #85374. #88736 (Mikhail Artemenko).

Mejora

  • Ahora la función generateSerialID admite un argumento no constante que contiene el nombre de la serie. Cierra #83750. #88270 (Alexey Milovidov).
  • Se añadió el parámetro opcional start_value a la función generateSerialID para especificar valores iniciales personalizados para nuevas series. #88085 (Manuel).
  • Se agregó la opción --semicolons_inline en clickhouse-format para formatear las consultas de modo que los puntos y coma se coloquen en la última línea en lugar de en una línea nueva. #88018 (Jan Rada).
  • Permite configurar el throttling a nivel del servidor cuando la configuración se sobrescribe en Keeper. Cierra #73964. #74066 (JIaQi).
  • mannWhitneyUTest ya no lanza una excepción cuando ambas muestras contienen únicamente valores idénticos. Ahora devuelve un resultado válido, en consonancia con SciPy. Esto cierra: #79814. #80009 (DeanNeaht).
  • La transacción reescrita de almacenamiento de objetos en disco elimina los blobs remotos anteriores si se confirma la transacción de metadatos. #81787 (Sema Checherinda).
  • Se corrigió el paso de optimización para la expresión de igualdad redundante cuando LowCardinality en el tipo resultante difiere antes y después de la optimización. #82651 (Yakov Olkhovskiy).
  • Cuando los clientes HTTP establecen la cabecera X-ClickHouse-100-Continue: defer además de Expect: 100-continue, ClickHouse no envía una respuesta 100 Continue al cliente hasta que se supera la validación de la cuota, lo que evita desperdiciar ancho de banda de red al transmitir cuerpos de solicitud que de todos modos acabarían descartándose. Esto es relevante para las consultas INSERT, en las que la consulta puede enviarse en la cadena de consulta de la URL y los datos se envían en el cuerpo de la solicitud. Abortar una solicitud sin enviar el cuerpo completo impide reutilizar la conexión con HTTP/1.1, pero la latencia adicional que introduce abrir conexiones nuevas suele ser insignificante en comparación con la duración total de una operación INSERT con grandes volúmenes de datos. #84304 (c-end).
  • Ocultar las credenciales de S3 en los registros al usar DATABASE ENGINE = Backup con almacenamiento S3. #85336 (Kenny Sun).
  • Hacer visibles para el subplan de entrada de la subconsulta correlacionada las optimizaciones del plan de consulta, posponiendo su materialización. Parte de #79890. #85455 (Dmitry Novik).
  • Un cambio en SYSTEM DROP DATABASE REPLICA: - Al eliminar con una base de datos o al eliminar la réplica completa: también se elimina la réplica de cada tabla de la base de datos - Si se proporciona ‘WITH TABLES’, se elimina la réplica de cada almacenamiento - En caso contrario, la lógica no cambia; solo se elimina la réplica de las bases de datos - Al eliminar una réplica de base de datos con la ruta de Keeper: - Si se proporciona ‘WITH TABLES’: - Restaurar la base de datos como Atomic - Restaurar las tablas RMT a partir de la sentencia en Keeper - Eliminar la base de datos (las tablas restauradas también se eliminan) - En caso contrario, solo se elimina la réplica en la ruta de Keeper proporcionada. #85637 (Tuan Pham Anh).
  • Se corrige el formato inconsistente de TTL cuando contiene una función materialize. Cierra #82828. #85749 (Alexey Milovidov).
  • El estado de la tabla Iceberg ya no se almacena en un objeto de almacenamiento. Esto debería permitir usar Iceberg en ClickHouse con consultas concurrentes. #86062 (Daniil Ivanik).
  • Convertir el bloqueo de bucket en el modo ordenado de S3Queue en un modo persistente, de forma similar a los nodos de procesamiento cuando use_persistent_processing_nodes = 1. Añadir inyección de fallos de Keeper en las pruebas. #86628 (Kseniia Sumarokova).
  • Ofrece sugerencias cuando un usuario comete un error tipográfico en el nombre del formato. Cierra #86761. #87092 (flynn).
  • Las réplicas remotas omitirán el análisis de índices si no hay proyecciones. #87096 (zoomxi).
  • Se permite deshabilitar la codificación UTF-8 para la tabla de YTsaurus. #87150 (MikhailBurdukov).
  • Se deshabilita s3_slow_all_threads_after_retryable_error de forma predeterminada. #87198 (Nikita Mikhaylov).
  • Renombrar la función de tabla arrowflight a arrowFlight. #87249 (Vitaly Baranov).
  • Se actualizó clickhouse-benchmark para aceptar - en lugar de _ en sus opciones de la CLI. #87251 (Ahmed Gouda).
  • Realizar de forma síncrona el vaciado en system.crash_log durante el manejo de señales. #87253 (Miсhael Stetsyuk).
  • Se añadió la configuración inject_random_order_for_select_without_order_by, que agrega ORDER BY rand() a las consultas SELECT de nivel superior sin cláusula ORDER BY. #87261 (Rui Zhang).
  • Mejora el mensaje de error de joinGet para que indique correctamente que la cantidad de join_keys no coincide con la cantidad de right_table_keys. #87279 (Isak Ellmer).
  • Añade la posibilidad de comprobar el estado de un nodo arbitrario de Keeper durante la transacción de escritura. Esto puede ayudar a detectar el problema ABA. #87282 (Mikhail Artemenko).
  • Redirigir las solicitudes intensivas de ytsaurus a proxies de alta carga. #87342 (MikhailBurdukov).
  • Corrige las reversiones de las operaciones unlink/rename/removeRecursive/removeDirectory/etc., así como los recuentos de enlaces físicos en cualquier posible carga de trabajo de metadatos de transacciones de disco, y simplifica las interfaces para hacerlas más genéricas, de modo que puedan reutilizarse en otros almacenes de metadatos. #87358 (Mikhail Artemenko).
  • Se añadió el parámetro de configuración keeper_server.tcp_nodelay, que permite desactivar TCP_NODELAY en Keeper. #87363 (Copilot).
  • Se admite --connection en clickhouse-benchmarks. Funciona igual que en clickhouse-client: puede especificar conexiones predefinidas en el config.xml/config.yaml del cliente, en la ruta connections_credentials, para evitar tener que indicar explícitamente el usuario y la contraseña mediante argumentos de línea de comandos. Se añade compatibilidad con --accept-invalid-certificate en clickhouse-benchmark. #87370 (Azat Khuzhin).
  • Ahora la configuración max_insert_threads se aplicará a las tablas Iceberg. #87407 (alesapin).
  • Añadir histogramas y métricas dimensionales a PrometheusMetricsWriter. De este modo, PrometheusRequestHandler tendrá todas las métricas esenciales y podrá usarse para recopilar métricas de forma fiable y con baja sobrecarga en la nube. #87521 (Miсhael Stetsyuk).
  • La función hasToken ahora devuelve cero coincidencias para el token vacío (mientras que antes esto provocaba una excepción). #87564 (Jimmy Aguilar Mena).
  • Se añade compatibilidad con índices de texto para los valores Array y Map (mapKeys y mapValues). Las funciones compatibles son mapContainsKey y has. #87602 (Elmi Ahmadov).
  • Se añade una nueva métrica ZooKeeperSessionExpired, que indica el número de sesiones globales de ZooKeeper expiradas. #87613 (Miсhael Stetsyuk).
  • Utilice el cliente de almacenamiento S3 con ajustes específicos de backup (por ejemplo, backup_slow_all_threads_after_retryable_s3_error) para la copia del lado del servidor (nativa) en un destino de backup. Marque s3_slow_all_threads_after_retryable_error como obsoleto. #87660 (Julia Kartseva).
  • Se corrige el manejo incorrecto de las configuraciones max_joined_block_size_rows y max_joined_block_size_bytes durante la serialización del plan de consulta con la opción experimental make_distributed_plan. #87675 (Vladimir Cherkasov).
  • La configuración enable_http_compression pasa a ser la predeterminada. Esto significa que, si un cliente acepta compresión HTTP, el servidor la usará. Sin embargo, este cambio tiene ciertos inconvenientes. El cliente puede solicitar un método de compresión costoso, como bzip2, lo cual no resulta razonable, y esto aumentará el consumo de recursos del servidor (aunque solo se notará cuando se transfieran resultados voluminosos). El cliente puede solicitar gzip, que no está mal, pero es subóptimo en comparación con zstd. Cierra #71591. #87703 (Alexey Milovidov).
  • Se añadió una nueva entrada en system.server_settings, keeper_hosts, que muestra la lista de hosts de [Zoo]Keeper a los que ClickHouse puede conectarse. #87718 (Nikita Mikhaylov).
  • Se añaden los valores from y to a los dashboards del sistema para facilitar las investigaciones históricas. #87823 (Mikhail f. Shiryaev).
  • Se añadió más información para el seguimiento del rendimiento en las consultas SELECT de Iceberg. #87903 (Daniil Ivanik).
  • Mejora de la caché del sistema de archivos: reutilización del iterador de prioridad de la caché entre hilos que reservan espacio en la caché de forma simultánea. #87914 (Kseniia Sumarokova).
  • Se añadió la posibilidad de limitar las solicitudes de Keeper (configuración max_request_size, igual que jute.maxbuffer para ZooKeeper, desactivada de forma predeterminada por compatibilidad con versiones anteriores; se activará en las próximas versiones). #87952 (Azat Khuzhin).
  • Hacer que clickhouse-benchmark ya no incluya stacktraces en los mensajes de error de forma predeterminada. #87954 (Ahmed Gouda).
  • Evite usar la carga asíncrona de marks en el thread pool (load_marks_asynchronously=1) cuando los marks estén en caché (ya que el pool puede estar saturado y las consultas incurrirán en una penalización por ello incluso si los marks ya están en caché). #87967 (Azat Khuzhin).
  • Ytsaurus: permitir la creación de tablas/funciones de tabla/diccionarios con un subconjunto de columnas. #87982 (MikhailBurdukov).
  • A partir de ahora, system.zookeeper_connection_log está activado de forma predeterminada y se puede usar para obtener información sobre las sesiones de Keeper. #88011 (János Benjamin Antal).
  • Hacer que el comportamiento de TCP y HTTP sea coherente cuando se pasan tablas externas duplicadas. HTTP permite pasar una tabla temporal varias veces. #88032 (Sema Checherinda).
  • Elimina los MemoryPools personalizados para leer Arrow/ORC/Parquet. Este componente parece innecesario después de #84082, porque ahora se rastrean todas las asignaciones de memoria de todos modos. #88035 (Nikita Mikhaylov).
  • Se permite crear una base de datos Replicated sin argumentos. #88044 (Pervakov Grigorii).
  • clickhouse-keeper-client: Se añadió compatibilidad para conectarse al puerto TLS de clickhouse-keeper; los nombres de las opciones se mantuvieron igual que en clickhouse-client. #88065 (Pradeep Chhetri).
  • Se añadió un nuevo evento de perfil para registrar cuántas veces se rechazó un merge en segundo plano por superar los límites de memoria. #88084 (Grant Holly).
  • Habilita el analizador para validar las expresiones predeterminadas de las columnas en CREATE/ALTER TABLE. #88087 (Max Justus Spransy).
  • Mejora en la planificación interna de consultas: usar JoinStepLogical para CROSS JOIN. #88151 (Vladimir Cherkasov).
  • Se añadió un alias a las funciones hasAnyTokens (hasAnyToken) y hasAllTokens (hasAllToken). #88162 (George Larionov).
  • Habilita de forma predeterminada el profiler de muestreo global (es decir, también para los hilos del servidor no relacionados con las consultas): recopila stacktraces de todos los hilos cada 10 segundos de tiempo de CPU y de tiempo real. #88209 (Alexander Tokmakov).
  • Se actualiza el SDK de Azure para incluir la corrección de ‘Content-Length’ observada en las funciones de copia y creación de contenedores. #88278 (Smita Kulkarni).
  • La función lag ahora no distingue entre mayúsculas y minúsculas para mantener la compatibilidad con MySQL. #88322 (Lonny Kapelushnik).
  • Se permite iniciar clickhouse-local desde el directorio clickhouse-server. En versiones anteriores, producía el error Cannot parse UUID: . Ahora puede iniciar clickhouse-local y manipular las bases de datos del servidor sin iniciar el servidor. #88383 (Alexey Milovidov).
  • Añade la configuración keeper_server.coordination_settings.check_node_acl_on_remove. Si está habilitada, antes de cada eliminación de un nodo se verificarán las ACL tanto del propio nodo como del nodo padre. De lo contrario, solo se verificará la ACL del nodo padre. #88513 (Antonio Andelic).
  • Las columnas JSON ahora se muestran con un formato legible al usar el formato Vertical. Cierra #81794. #88524 (Frank Rosner).
  • Almacena los archivos de clickhouse-client (p. ej., el historial de consultas) en las ubicaciones descritas en la especificación XDG Base Directories, en lugar de en la raíz del directorio personal. ~/.clickhouse-client-history se seguirá usando si ya existe. #88538 (Konstantin Bogdanov).
  • Corrige una fuga de memoria provocada por GLOBAL IN (https://github.com/ClickHouse/ClickHouse/issues/88615). #88617 (pranavmehta94).
  • Se añadió una sobrecarga a hasAny/hasAllTokens para aceptar una cadena como entrada. #88679 (George Larionov).
  • Añadir un paso al script de postinstalación de clickhouse-keeper para habilitar el inicio al arrancar. #88746 (YenchangChan).
  • Comprobar las credenciales en la web UI solo al pegarlas, en lugar de hacerlo con cada pulsación de tecla. Así se evita un problema con servidores LDAP mal configurados. Esto cierra #85777. #88769 (Alexey Milovidov).
  • Limita la longitud del mensaje de excepción cuando se incumple una restricción. En versiones anteriores, se podía obtener un mensaje de excepción muy largo al insertar una cadena muy larga, y este acababa escribiéndose en el query_log. Cierra #87032. #88801 (Alexey Milovidov).
  • Se corrigió la solicitud de la estructura de un conjunto de datos al servidor ArrowFlight durante la creación de una tabla. #87542 (Vitaly Baranov).

Corrección de errores (fallo visible para el usuario en una versión estable oficial)

  • Se corrigió GeoParquet, que provocaba errores en el protocolo del cliente. #84020 (Michael Kolupaev).
  • Se corrige la resolución de funciones que dependen del host, como shardNum(), en subconsultas en el nodo iniciador. #84409 (Eduard Karacharov).
  • Se corrigió el manejo incorrecto de fechas anteriores al epoch con fracciones de segundo en varias funciones relacionadas con fecha y hora, como parseDateTime64BestEffort, change{Year,Month,Day} y makeDateTime64. Anteriormente, la parte fraccionaria de los segundos se restaba de los segundos en lugar de sumarse. Por ejemplo, parseDateTime64BestEffort('1969-01-01 00:00:00.468') devolvía 1968-12-31 23:59:59.532 en lugar de 1969-01-01 00:00:00.468. #85396 (xiaohuanlin).
  • Se corrige el fallo de los comandos ALTER COLUMN IF EXISTS cuando el estado de la columna cambia dentro de la misma sentencia ALTER. Los comandos como DROP COLUMN IF EXISTS, MODIFY COLUMN IF EXISTS, COMMENT COLUMN IF EXISTS y RENAME COLUMN IF EXISTS ahora gestionan correctamente los casos en que una columna se elimina mediante un comando previo en la misma sentencia. #86046 (xiaohuanlin).
  • Se corrigió la inferencia de Date/DateTime/DateTime64 para fechas fuera del rango admitido. #86184 (Pavel Kruglov).
  • Corrige un fallo por el que algunos datos válidos enviados por usuarios a una columna AggregateFunction(quantileDD) podían hacer que las fusiones recursaran infinitamente. #86560 (Raphaël Thériault).
  • Compatibilidad con tipos JSON/Dynamic en tablas creadas con la función de tabla cluster. #86821 (Pavel Kruglov).
  • Se corrige el problema por el que el resultado de la función calculada en la CTE no era determinista en la consulta. #86967 (Yakov Olkhovskiy).
  • Se corrigió LOGICAL_ERROR en EXPLAIN con pointInPolygon en las columnas de la clave primaria. #86971 (Michael Kolupaev).
  • Se corrigen las tablas de lago de datos cuyo nombre contiene una secuencia codificada mediante porcentaje. Cierra #86626. #87020 (Anton Ivashkin).
  • Se corrigió el comportamiento incorrecto de IS NULL en columnas Nullable en OUTER JOIN con optimize_functions_to_subcolumns, cierra #78625. #87058 (Vladimir Cherkasov).
  • Se corrigió el cómputo incorrecto de las liberaciones de datos temporales en el seguimiento del límite de max_temporary_data_on_disk_size, cierra #87118. #87140 (JIaQi).
  • La función checkHeaders ahora valida correctamente las cabeceras proporcionadas y rechaza las cabeceras no permitidas. Autor original: Michael Anastasakis (@michael-anastasakis). #87172 (Raúl Marín).
  • Hace que toDate y toDate32 tengan el mismo comportamiento para todos los tipos numéricos. Corrige la comprobación de underflow de Date32 al convertir desde int16. #87176 (Pervakov Grigorii).
  • Se corrigió un error lógico con parallel replicas en consultas con múltiples JOINs, en particular con RIGHT JOIN después de LEFT/INNER JOIN. #87178 (Igor Nikonov).
  • Se respeta la configuración input_format_try_infer_variants en la caché de inferencia de esquemas. #87180 (Pavel Kruglov).
  • Hacer que pathStartsWith coincida solo con rutas bajo el prefijo. #87181 (Raúl Marín).
  • Se corrigieron errores lógicos en la columna virtual _row_number y en las eliminaciones por posición de Iceberg. #87220 (Michael Kolupaev).
  • Se corrigió LOGICAL_ERROR “Too large size passed to allocator” en JOIN debido a la mezcla de bloques const y non-const. #87231 (Azat Khuzhin).
  • Se corrigieron las actualizaciones ligeras con subconsultas que leen desde otras tablas MergeTree. #87285 (Anton Popov).
  • Se corrigió la optimización move-to-prewhere, que no funcionaba cuando había una política de filas. Continuación de #85118. Cierra #69777. Cierra #83748. #87303 (Nikolai Kochetov).
  • Se corrigió la aplicación de parches a columnas con expresión por defecto ausentes en las partes de datos. #87347 (Anton Popov).
  • Se corrigió un error de segmentación al usar nombres de campos de partición duplicados en tablas MergeTree. #87365 (xiaohuanlin).
  • Se corrigió la actualización de EmbeddedRocksDB. #87392 (Raúl Marín).
  • Se corrigió la lectura directa desde el índice de texto en almacenamiento de objetos. #87399 (Anton Popov).
  • Evita la creación de privilegios con un motor inexistente. #87419 (Jitendra).
  • Ignorar únicamente los errores not found para s3_plain_rewritable (lo que puede provocar todo tipo de problemas). #87426 (Azat Khuzhin).
  • Se corrigen los diccionarios con origen YTSaurus y layouts range_hashed. #87490 (MikhailBurdukov).
  • Se corrigió un problema al crear un array de tuplas vacías. #87520 (Pavel Kruglov).
  • Comprobación de columnas no válidas durante la creación de tablas temporales. #87524 (Pavel Kruglov).
  • No coloque nunca las columnas de partición de Hive en el encabezado del formato. Corrige #87515. #87528 (Arthur Passos).
  • Se corrige la preparación de la lectura desde DeltaLake cuando se usa el formato de texto. #87529 (Pavel Kruglov).
  • Corrige la validación de acceso para select e insert en tablas Buffer. #87545 (pufit).
  • No se permite crear un índice de omisión de datos para una tabla S3. #87554 (Bharat Nallan).
  • Se evita la fuga de memoria contabilizada en el logging asíncrono (puede tener una desviación significativa; en 10 horas, ~100GiB) y en text_log (es posible casi la misma desviación). #87584 (Azat Khuzhin).
  • Se corrigió un error que podía hacer que la configuración global del servidor se sobrescribiera con la configuración de SELECT de una vista o vista materializada si esa vista se eliminaba de forma asíncrona y el servidor se reiniciaba antes de que terminara la limpieza en segundo plano. #87603 (Alexander Tokmakov).
  • Excluir los bytes de la caché de páginas en espacio de usuario (si es posible) al calcular la alerta de sobrecarga de memoria. #87610 (Bharat Nallan).
  • Se corrigió un error por el que un orden incorrecto de tipos durante la deserialización de CSV provocaba LOGICAL_ERROR. #87622 (Yarik Briukhovetskyi).
  • Se corrige el manejo incorrecto de command_read_timeout en diccionarios ejecutables. #87627 (Azat Khuzhin).
  • Se corrigió el comportamiento incorrecto de SELECT * REPLACE en la cláusula WHERE al filtrar columnas reemplazadas con el nuevo analizador. #87630 (xiaohuanlin).
  • Se corrigió la agregación de dos niveles al usar Merge sobre Distributed. #87687 (c-end).
  • Se corrige la generación del bloque de salida en el algoritmo HashJoin cuando no se usa la lista de filas de la derecha. Corrige #87401. #87699 (Dmitry Novik).
  • El modo de lectura con réplicas paralelas podía seleccionarse incorrectamente si, tras aplicar el análisis de índices, no quedaban datos por leer. Cierra #87653. #87700 (zoomxi).
  • Se corrige el manejo de las columnas timestamp / timestamptz en Glue. #87733 (Andrey Zvonov).
  • Cierra #86587. #87761 (scanhex12).
  • Se corrigió la escritura de valores booleanos en la interfaz de PostgreSQL. #87762 (Artem Yurov).
  • Se corrige el error de tabla desconocida en la consulta INSERT SELECT con CTE, #85368. #87789 (Guang Zhao).
  • Se corrigió la lectura de la subcolumna map nula de Variants que no pueden estar dentro de Nullable. #87798 (Pavel Kruglov).
  • Se corrigió el manejo de errores cuando no se podía eliminar por completo la base de datos del clúster en el nodo secundario. #87802 (Tuan Pham Anh).
  • Corrige varios fallos en los índices de omisión. #87817 (Raúl Marín).
  • En AzureBlobStorage, se actualizó para intentar primero la copia nativa y, en caso de error ‘Unauthroized’, recurrir a lectura y escritura (en AzureBlobStorage, si las cuentas de almacenamiento del origen y el destino son diferentes, obtenemos un error ‘Unauthorized’). También se corrigió la aplicación de “use_native_copy” cuando el endpoint está definido en la configuración. #87826 (Smita Kulkarni).
  • ClickHouse se bloquea si el archivo ArrowStream contiene un diccionario no único. #87863 (Ilya Golshtein).
  • Se corrigió un fallo fatal al usar approx_top_k y finalizeAggregation. #87892 (Jitendra).
  • Corrige el merge con proyecciones cuando el último bloque está vacío. #87928 (Raúl Marín).
  • No se eliminan las funciones inyectivas de GROUP BY si los tipos de los argumentos no están permitidos en GROUP BY. #87958 (Pavel Kruglov).
  • Corrección de la eliminación incorrecta de gránulos/particiones en claves basadas en fecha y hora al usar la configuración session_timezone en las consultas. #87987 (Eduard Karacharov).
  • Devuelve el número de filas afectadas tras una consulta en la Interfaz de PostgreSQL. #87990 (Artem Yurov).
  • Se restringe el uso de filter pushdown en PASTE JOIN porque puede provocar resultados incorrectos. #88078 (Yarik Briukhovetskyi).
  • Aplica la normalización de URI antes de evaluar la comprobación de grants introducida por https://github.com/ClickHouse/ClickHouse/pull/84503. #88089 (pufit).
  • Se corrige un error lógico cuando ARRAY JOIN COLUMNS() no encuentra ninguna columna en el nuevo analizador. #88091 (xiaohuanlin).
  • Corregir la advertencia “Alto uso de memoria de ClickHouse” (excluyendo la caché de páginas). #88092 (Azat Khuzhin).
  • Se corrigió una posible corrupción de datos en tablas MergeTree con la columna TTL configurada. #88095 (Anton Popov).
  • Se corrigió una posible excepción no capturada al leer system.tables con bases de datos externas (PostgreSQL/SQLite/…) adjuntas que contienen tablas no válidas. #88105 (Azat Khuzhin).
  • Se corrigió un cierre inesperado en las funciones mortonEncode y hilbertEncode al llamarlas con un argumento de tupla vacío. #88110 (xiaohuanlin).
  • Ahora las consultas ON CLUSTER tardarán menos cuando haya réplicas inactivas en el clúster. #88153 (alesapin).
  • Ahora, la limpieza del worker de DDL elimina del conjunto de réplicas los hosts obsoletos. Esto reducirá la cantidad de metadatos almacenados en ZooKeeper. #88154 (alesapin).
  • Se corrigió la ejecución de ClickHouse sin cgroups (por error, los cgroups pasaron a ser un requisito para las métricas asíncronas). #88164 (Azat Khuzhin).
  • Deshacer correctamente la operación de mover el directorio en caso de error. Necesitamos reescribir todos los objetos prefix.path modificados durante la ejecución, no solo el de la raíz. #88198 (Mikhail Artemenko).
  • Se corrigió la propagación de la bandera is_shared en ColumnLowCardinality. Esto puede dar lugar a un resultado incorrecto en un GROUP BY si se inserta un valor nuevo en una columna después de que los valores hash ya se hayan precalculado y almacenado en caché en el ReverseIndex. #88213 (Nikita Taranov).
  • Corrige el ajuste de workload max_cpu_share. Ahora puede usarse sin tener configurado el ajuste de workload max_cpus. #88217 (Neerav).
  • Se corrige un error por el que mutaciones muy pesadas con subconsultas podían quedarse bloqueadas en la fase de preparación. Ahora es posible detener estas mutaciones con SYSTEM STOP MERGES. #88241 (alesapin).
  • Ahora las subconsultas correlacionadas funcionarán con sistemas de almacenamiento de objetos. #88290 (alesapin).
  • Evita intentar inicializar bases de datos DataLake al acceder a system.projections y system.data_skipping_indices. #88330 (Azat Khuzhin).
  • Ahora, los catálogos de data lakes solo se mostrarán en las tablas de introspección del sistema si show_data_lake_catalogs_in_system_tables se habilita explícitamente. #88341 (alesapin).
  • Se corrigió DatabaseReplicated para que respete la configuración interserver_http_host. #88378 (xiaohuanlin).
  • Los argumentos posicionales ahora quedan deshabilitados explícitamente al definir proyecciones, ya que no tienen sentido en esta etapa interna de la consulta. Esto corrige #48604. #88380 (Amos Bird).
  • Se corrige la complejidad cuadrática en la función countMatches. Cierra #88400. #88401 (Alexey Milovidov).
  • Hacer que los comandos ALTER COLUMN ... COMMENT para tablas KeeperMap replicadas queden registrados en los metadatos de la base de datos Replicated y se propaguen a todas las réplicas. Cierra #88077. #88408 (Eduard Karacharov).
  • Corrige un caso de dependencia cíclica falsa con vistas materializadas en Database Replicated, que impedía añadir nuevas réplicas a la base de datos. #88423 (Nikolay Degterinsky).
  • Se corrigió la agregación de columnas dispersas cuando group_by_overflow_mode se establece en any. #88440 (Eduard Karacharov).
  • Se corrige el error “columna no encontrada” al usar query_plan_use_logical_join_step=0 con varias cláusulas FULL JOIN USING. Cierra #88103. #88473 (Vladimir Cherkasov).
  • Los clusters grandes con más de 10 nodos tienen una alta probabilidad de que falle la restauración con el error [941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again. El nodo num_hosts se sobrescribe por muchos hosts al mismo tiempo. La corrección hace que la configuración para controlar los intentos sea dinámica. Cierra #87721. #88484 (Mikhail f. Shiryaev).
  • Este PR solo busca mantener la compatibilidad con 23.8 y versiones anteriores. El problema de compatibilidad se introdujo en este PR: https://github.com/ClickHouse/ClickHouse/pull/54240. Este SQL fallará con enable_analyzer=0 (antes de 23.8, funcionaba correctamente). #88491 (JIaQi).
  • Se corrige el desbordamiento de enteros de UBSAN en el mensaje de error de accurateCast al convertir valores grandes a DateTime. #88520 (xiaohuanlin).
  • Se corrige el coalescing merge tree para tipos Tuple. Esto cierra #88469. #88526 (scanhex12).
  • Se prohíben las eliminaciones para iceberg_format_version=1. Esto cierra #88444. #88532 (scanhex12).
  • Este parche corrige la operación de movimiento en los discos plain-rewritable para carpetas con cualquier nivel de profundidad. #88586 (Mikhail Artemenko).
  • Se corrige SQL SECURITY DEFINER en las funciones *cluster. #88588 (Julian Maicher).
  • Corrige un posible cierre inesperado causado por la mutación concurrente de las columnas const subyacentes de PREWHERE. #88605 (Azat Khuzhin).
  • Se corrigió la lectura en el índice de texto y se habilitó la caché de condiciones de consulta (con las opciones use_skip_indexes_on_data_read y use_query_condition_cache habilitadas). #88660 (Anton Popov).
  • Una excepción Poco::TimeoutException lanzada desde Poco::Net::HTTPChunkedStreamBuf::readFromDevice provoca una caída con SIGABRT. #88668 (Miсhael Stetsyuk).
  • Retroportado en #88910: Tras la recuperación, una réplica de una base de datos Replicated podía quedarse atascada durante mucho tiempo mostrando mensajes como Failed to marked query-0004647339 as finished (finished=No node, synced=No node); ya se ha corregido. #88671 (Alexander Tokmakov).
  • Se corrigió la adición a system.zookeeper_connection_log en caso de que ClickHouse se conecte por primera vez después de recargar la configuración. #88728 (Antonio Andelic).
  • Se corrigió un error por el que la conversión de DateTime64 a Date con date_time_overflow_behavior = 'saturate' podía producir resultados incorrectos para valores fuera de rango al trabajar con zonas horarias. #88737 (Manuel).
  • Enésimo intento de corregir el error “having zero bytes error” con el motor de tabla S3 y la caché habilitada. #88740 (Kseniia Sumarokova).
  • Corrige la validación de acceso en SELECT para la table function loop. #88802 (pufit).
  • Capturar excepciones cuando falle el logging asíncrono para evitar que el programa aborte. #88814 (Raúl Marín).
  • Retroportado en #89060: Se corrige top_k para que respete el parámetro threshold cuando se llama con un solo argumento. Cierra #88757. #88867 (Manuel).
  • Aplicado como backport en #88944: se corrigió un error en la función reverseUTF8. En versiones anteriores, se invertían por error los bytes de los puntos de código UTF-8 de longitud 4. Esto corrige #88913. #88914 (Alexey Milovidov).
  • Retroportado en #88980: no comprobar el acceso a SET DEFINER <current_user>:definer al crear una vista con SQL SECURITY DEFINER. #88968 (pufit).
  • Retroportado en #89058: Se corrigió LOGICAL_ERROR en L2DistanceTransposed(vec1, vec2, p), donde la optimización para la lectura parcial de QBit eliminaba incorrectamente Nullable del tipo de retorno cuando p era Nullable. #88974 (Raufs Dunamalijevs).
  • Backport en #89167: corrige un fallo en un tipo de catálogo desconocido. Resuelve #88819. #88987 (scanhex12).
  • Retroportado en #89028: Se corrigió una degradación del rendimiento en el análisis de los índices de omisión de datos. #89004 (Anton Popov).

Mejoras de compilación/pruebas/empaquetado

  • Se usa la versión 18.0 de la biblioteca postgres. #87647 (Konstantin Bogdanov).
  • Se habilita ICU para FreeBSD. #87891 (Raúl Marín).
  • Se usa SSE 4.2 cuando se utiliza despacho dinámico a SSE 4.2, y no SSE 4. #88029 (Raúl Marín).
  • Ya no se requiere la marca NO_ARMV81_OR_HIGHER si Speculative Store Bypass Safe no está disponible. #88051 (Konstantin Bogdanov).
  • Cuando ClickHouse se compila con ENABLE_LIBFIU=OFF, las funciones relacionadas con failpoints pasan a ser no-ops y ya no pueden afectar al rendimiento. Las queries SYSTEM ENABLE/DISABLE FAILPOINT devuelven un error SUPPORT_IS_DISABLED en ese caso. #88184 (c-end).

Versión de ClickHouse 25.9, 2025-09-25

Cambio incompatible con versiones anteriores

  • Se deshabilitan las operaciones binarias sin sentido con IPv4/IPv6: ya no se permite sumar/restar una IPv4/IPv6 con un tipo no entero. Antes se permitían operaciones con tipos de coma flotante y se producían errores lógicos con algunos otros tipos (como DateTime). #86336 (Raúl Marín).
  • Se deja obsoleta la configuración allow_dynamic_metadata_for_data_lakes. Ahora todas las tablas Iceberg intentan obtener del almacenamiento el esquema más reciente de la tabla antes de ejecutar cada consulta. #86366 (Daniil Ivanik).
  • Se cambió la resolución de la columna coalescida en la cláusula OUTER JOIN ... USING para que sea más consistente: anteriormente, al seleccionar tanto la columna de USING como columnas calificadas (a, t1.a, t2.a) en un OUTER JOIN, la columna de USING se resolvía incorrectamente como t1.a, mostrando 0/NULL para las filas de la tabla derecha sin coincidencia en la izquierda. Ahora, los identificadores de la cláusula USING siempre se resuelven como la columna coalescida, mientras que los identificadores calificados se resuelven como las columnas no coalescidas, independientemente de qué otros identificadores estén presentes en la consulta. Por ejemplo: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) — Antes: a=0, t1.a=0, t2.a=2 (incorrecto: ‘a’ se resolvía como t1.a) — Después: a=2, t1.a=0, t2.a=2 (correcto: ‘a’ es coalescida). #80848 (Vladimir Cherkasov).
  • Se aumenta la ventana de deduplicación en tablas replicadas hasta 10000. Esto es totalmente compatible, pero cabe imaginar escenarios en los que este cambio podría provocar un alto consumo de recursos cuando hay una gran cantidad de tablas. #86820 (Sema Checherinda).

nueva funcionalidad

  • Ahora puede usar NATS JetStream para consumir mensajes especificando los nuevos ajustes nats_stream y nats_consumer del motor NATS. #84799 (Dmitry Novikov).
  • Se añadió compatibilidad con autenticación y SSL a la función de tabla arrowFlight. #87120 (Vitaly Baranov).
  • Se añade un nuevo parámetro al motor de tabla S3 y a la función de tabla s3 llamado storage_class_name, que permite especificar Intelligent Tiering de AWS. Compatible tanto con el formato clave-valor como con el formato posicional (obsoleto). #87122 (alesapin).
  • ALTER UPDATE para el motor de tablas Iceberg. #86059 (scanhex12).
  • Se añade la tabla del sistema iceberg_metadata_log para obtener archivos de metadatos de Iceberg durante las sentencias SELECT. #86152 (scanhex12).
  • Las tablas Iceberg y DeltaLake admiten una configuración personalizada del disco mediante la opción disk del nivel de almacenamiento. #86778 (scanhex12).
  • Compatibilidad con Azure para discos de lago de datos. #87173 (scanhex12).
  • Se admite el catálogo Unity sobre Azure blob storage. #80013 (Smita Kulkarni).
  • Se admiten más formatos (ORC, Avro) en las escrituras de Iceberg. Esto cierra #86179. #87277 (scanhex12).
  • Se añade una nueva tabla del sistema database_replicas con información sobre las réplicas de la base de datos. #83408 (Konstantin Morozov).
  • Se añadió la función arrayExcept, que sustrae un array de otro, tratándolos como conjuntos. #82368 (Joanna Hulboj).
  • Añade una nueva tabla system.aggregated_zookeeper_log. La tabla contiene estadísticas (p. ej., número de operaciones, latencia media, errores) de las operaciones de ZooKeeper, agrupadas por ID de sesión, ruta padre y tipo de operación, y escritas periódicamente en disco. #85102 #87208 (Miсhael Stetsyuk).
  • Una nueva función, isValidASCII. Devuelve 1 si la cadena de entrada o FixedString contiene solo bytes ASCII (0x00–0x7F); en caso contrario, 0. Cierra #85377. … #85786 (rajat mohan).
  • Los ajustes booleanos pueden especificarse sin argumentos; por ejemplo, SET use_query_cache;, lo que equivale a establecer el ajuste en true. #85800 (thraeka).
  • Nuevas opciones de configuración: logger.startupLevel & logger.shutdownLevel permiten anular el nivel de registro durante el arranque y el apagado de ClickHouse, respectivamente. #85967 (Lennard Eijsackers).
  • Funciones de agregado timeSeriesChangesToGrid y timeSeriesResetsToGrid. Se comportan de forma similar a timeSeriesRateToGrid, aceptando parámetros para la marca de tiempo de inicio, la marca de tiempo de fin, step y la ventana retrospectiva, así como dos argumentos para las marcas de tiempo y los valores, pero requieren al menos 1 muestra por ventana en lugar de 2. Calculan changes/resets de PromQL, contando el número de veces que el valor de la muestra cambia o disminuye en la ventana especificada para cada marca de tiempo de la cuadrícula temporal definida por los parámetros. El tipo de retorno es Array(Nullable(Float64)). #86010 (Stephen Chi).
  • Permite crear vistas temporales con una sintaxis similar a la de las tablas temporales (CREATE TEMPORARY VIEW). #86432 (Aly Kafoury).
  • Agregar advertencias sobre el uso de CPU y memoria a la tabla system.warnings. #86838 (Bharat Nallan).
  • Se admite el indicador oneof en las entradas Protobuf. Se puede usar una columna especial para indicar la presencia de una de las alternativas de oneof. Si un mensaje contiene oneof y se establece input_format_protobuf_oneof_presence, ClickHouse rellena la columna que indica qué campo de oneof se ha encontrado. #82885 (Ilya Golshtein).
  • Mejora del perfilado de asignaciones basada en las herramientas internas de jemalloc. Ahora se puede habilitar el profiler global de jemalloc con la configuración jemalloc_enable_global_profiler. Las asignaciones y liberaciones de memoria globales muestreadas pueden almacenarse en system.trace_log con el tipo JemallocSample al habilitar la configuración jemalloc_collect_global_profile_samples_in_trace_log. Ahora el perfilado de jemalloc puede habilitarse de forma independiente para cada consulta mediante el ajuste jemalloc_enable_profiler. El almacenamiento de muestras en system.trace_log puede controlarse por consulta mediante el ajuste jemalloc_collect_profile_samples_in_trace_log. Se actualizó jemalloc a una versión más reciente. #85438 (Antonio Andelic).
  • Un nuevo ajuste para eliminar archivos al eliminar tablas Iceberg. Cierra #86211. #86501 (scanhex12).

Funcionalidad experimental

  • El índice de texto invertido se rediseñó desde cero para que fuera escalable en conjuntos de datos que no caben en RAM. #86485 (Anton Popov).
  • La reordenación de JOIN ahora usa estadísticas. Esta funcionalidad se puede habilitar estableciendo allow_statistics_optimize = 1 y query_plan_optimize_join_order_limit = 10. #86822 (Han Fei).
  • Se añadió compatibilidad con alter table ... materialize statistics all, que materializa todas las estadísticas de una tabla. #87197 (Han Fei).

Mejora del rendimiento

  • Permite filtrar partes de datos mediante índices de omisión durante la lectura para reducir las lecturas innecesarias de índices. Se controla con la nueva configuración use_skip_indexes_on_data_read (deshabilitada de forma predeterminada). Esto aborda #75774. También incluye parte del trabajo preliminar común con #81021. #81526 (Amos Bird).
  • Se añadió una optimización del orden de JOIN que puede reordenar automáticamente los JOIN para mejorar el rendimiento (controlada por la configuración query_plan_optimize_join_order_limit). Tenga en cuenta que la optimización del orden de join actualmente tiene soporte limitado para estadísticas y se basa principalmente en estimaciones del número de filas de los motores de almacenamiento; en versiones futuras se añadirán una recopilación de estadísticas más sofisticada y una estimación de cardinalidad mejorada. Si encuentra problemas con consultas JOIN después de actualizar, puede desactivar temporalmente la nueva implementación estableciendo SET query_plan_use_new_logical_join_step = 0 e informar del problema para su investigación. Nota sobre la resolución de identificadores de la cláusula USING: Se cambió la resolución de la columna coalescida de la cláusula OUTER JOIN ... USING para que sea más consistente: anteriormente, al seleccionar tanto la columna USING como columnas calificadas (a, t1.a, t2.a) en un OUTER JOIN, la columna USING se resolvía incorrectamente como t1.a, mostrando 0/NULL para las filas de la tabla derecha sin coincidencia en la izquierda. Ahora, los identificadores de la cláusula USING siempre se resuelven en la columna coalescida, mientras que los identificadores calificados se resuelven en las columnas no coalescidas, independientemente de qué otros identificadores estén presentes en la consulta. Por ejemplo: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) — Antes: a=0, t1.a=0, t2.a=2 (incorrecto: ‘a’ se resolvía como t1.a) — Después: a=2, t1.a=0, t2.a=2 (correcto: ‘a’ es la columna coalescida). #80848 (Vladimir Cherkasov).
  • INSERT SELECT distribuido en lagos de datos. #86783 (scanhex12).
  • Se mejora la optimización de PREWHERE para condiciones como func(primary_column) = 'xx' y column in (xxx). #85529 (李扬).
  • Se implementó la reescritura de JOIN: 1. Se convierten LEFT ANY JOIN y RIGHT ANY JOIN en JOIN SEMI/ANTI si la condición de filtro siempre es falsa para las filas coincidentes o no coincidentes. Esta optimización se controla mediante una nueva configuración: query_plan_convert_any_join_to_semi_or_anti_join. 2. Se convierte FULL ALL JOIN en LEFT ALL o RIGHT ALL JOIN si la condición de filtro siempre es falsa para las filas no coincidentes de uno de los lados. #86028 (Dmitry Novik).
  • Se mejoró el rendimiento de las fusiones verticales tras ejecutar una eliminación ligera. #86169 (Anton Popov).
  • Se optimizó ligeramente el rendimiento de HashJoin en casos de join LEFT/RIGHT con muchas filas sin coincidencia. #86312 (Nikita Taranov).
  • Ordenación radix: ayuda al compilador a usar SIMD y a realizar un prefetch más eficiente. Usa despacho dinámico para aplicar prefetch por software solo en CPU Intel. Continúa el trabajo de @taiyang-li en https://github.com/ClickHouse/ClickHouse/pull/77029. #86378 (Raúl Marín).
  • Mejora el rendimiento de las consultas cortas en tablas con muchas partes (optimizando MarkRanges mediante el uso de devector en lugar de deque). #86933 (Azat Khuzhin).
  • Se mejoró el rendimiento al aplicar patch parts en el modo join. #87094 (Anton Popov).
  • Se agregó la configuración query_condition_cache_selectivity_threshold (valor predeterminado: 1.0), que excluye de la inserción en la caché de condiciones de consulta los resultados de escaneo de predicados con baja selectividad. Esto permite reducir el consumo de memoria de la caché de condiciones de consulta, a costa de una menor tasa de aciertos de la caché. #86076 (zhongyuankai).
  • Reduce el uso de memoria en las escrituras de Iceberg. #86544 (scanhex12).

Mejora

  • Admite la escritura de varios archivos de datos en Iceberg en una sola inserción. Añade nuevas opciones de configuración, iceberg_insert_max_rows_in_data_file y iceberg_insert_max_bytes_in_data_file, para controlar los límites. #86275 (scanhex12).
  • Se añadió un límite de filas/bytes para los archivos de datos insertados en Delta Lake. Se controla mediante la configuración delta_lake_insert_max_rows_in_data_file y delta_lake_insert_max_bytes_in_data_file. #86357 (Kseniia Sumarokova).
  • Se admiten más tipos de particiones en las escrituras en Iceberg. Esto cierra #86206. #86298 (scanhex12).
  • Hacer configurable la estrategia de reintento de S3 y permitir que la configuración del disco S3 se recargue en caliente al cambiar el archivo XML de configuración. #82642 (RinChanNOW).
  • Se ha mejorado el motor de tabla S3(Azure)Queue para que pueda tolerar la pérdida de la conexión con ZooKeeper sin riesgo de duplicados. Requiere habilitar la configuración de S3Queue use_persistent_processing_nodes (puede modificarse con ALTER TABLE MODIFY SETTING). #85995 (Kseniia Sumarokova).
  • Puedes usar parámetros de consulta después de TO al crear una vista materializada; por ejemplo: CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_table. #84899 (Diskein).
  • Proporciona instrucciones más claras a los usuarios cuando se especifican configuraciones incorrectas para el motor de tabla Kafka2. #83701 (János Benjamin Antal).
  • Ya no es posible especificar zonas horarias para el tipo Time (no tenía sentido). #84689 (Yarik Briukhovetskyi).
  • Se simplificó una lógica relacionada con el procesamiento de Time/Time64 en el modo best_effort (y se evitaron algunos errores). #84730 (Yarik Briukhovetskyi).
  • Se añadió la función deltaLakeAzureCluster (similar a deltaLakeAzure para el modo de clúster) y la función deltaLakeS3Cluster (alias de deltaLakeCluster). Resuelve #85358. #85547 (Smita Kulkarni).
  • Se aplica la configuración azure_max_single_part_copy_size a las operaciones normales de copia, igual que para la copia de seguridad. #85767 (Ilya Golshtein).
  • Se ralentizan los hilos del cliente S3 cuando se producen errores reintentables en el almacenamiento de objetos S3. Esto amplía la configuración anterior backup_slow_all_threads_after_retryable_s3_error a los discos S3 y le cambia el nombre por el más general s3_slow_all_threads_after_retryable_error. #85918 (Julia Kartseva).
  • Se marcan como obsoletas las configuraciones allow_experimental_variant/dynamic/json y enable_variant/dynamic/json. Ahora los tres tipos están habilitados sin condiciones. #85934 (Pavel Kruglov).
  • Se admite el filtrado por la cadena de URL completa (directiva full_url) en http_handlers (incluidos el esquema y host:port). #86155 (Azat Khuzhin).
  • Se añadió una nueva opción de configuración, allow_experimental_delta_lake_writes. #86180 (Kseniia Sumarokova).
  • Se ha corregido la detección de systemd en el script de init.d (corrige la comprobación “Instalar paquetes”). #86187 (Azat Khuzhin).
  • Añade una nueva métrica dimensional startup_scripts_failure_reason. Esta métrica es necesaria para distinguir entre distintos tipos de error que hacen que fallen los scripts de inicio. En particular, a efectos de generación de alertas, necesitamos distinguir entre errores transitorios (por ejemplo, MEMORY_LIMIT_EXCEEDED o KEEPER_EXCEPTION) y errores no transitorios. #86202 (Miсhael Stetsyuk).
  • Se permite omitir la función identity en la partición de una tabla Iceberg. #86314 (scanhex12).
  • Se añadió la posibilidad de habilitar el registro JSON solo para un canal específico; para ello, establezca logger.formatting.channel en uno de syslog/console/errorlog/log. #86331 (Azat Khuzhin).
  • Permitir el uso de números nativos en WHERE. Ya se permite usarlos como argumentos de funciones lógicas. Esto simplifica las optimizaciones de filter-push-down y move-to-prewhere. #86390 (Nikolai Kochetov).
  • Se corrigió un error al ejecutar SYSTEM DROP REPLICA en un catálogo con metadatos dañados. #86391 (Nikita Mikhaylov).
  • Añadir reintentos adicionales a la comprobación de acceso al disco (skip_access_check = 0) en Azure, ya que el aprovisionamiento del acceso puede tardar bastante tiempo. #86419 (Alexander Tokmakov).
  • La ventana de obsolescencia en las funciones timeSeries*() pasa a ser abierta por la izquierda y cerrada por la derecha. #86588 (Vitaly Baranov).
  • Se agregan eventos de perfil FailedInternal*Query. #86627 (Shane Andrade).
  • Corrige el manejo de usuarios con un punto en el nombre cuando se añaden mediante un archivo de configuración. #86633 (Mikhail Koviazin).
  • Agregar una métrica asíncrona para el uso de memoria en las consultas (QueriesMemoryUsage y QueriesPeakMemoryUsage). #86669 (Azat Khuzhin).
  • Puede usar la opción clickhouse-benchmark --precise para obtener informes más precisos de QPS y otras métricas por intervalo. Ayuda a obtener un QPS uniforme cuando la duración de las consultas es comparable al intervalo de informes --delay D. #86684 (Sergei Trifonov).
  • Permitir configurar los valores nice de los hilos de Linux para asignar a algunos hilos (merge/mutate, consulta, vista materializada, cliente de ZooKeeper) prioridades más altas o más bajas. #86703 (Miсhael Stetsyuk).
  • Se corrigió el engañoso error “specified upload does not exist”, que se produce cuando se pierde la excepción original en una carga multiparte debido a una condición de carrera. #86725 (Julia Kartseva).
  • Se limita la descripción del plan de consulta en la consulta EXPLAIN. No se calcula la descripción para consultas distintas de EXPLAIN. Se añadió el ajuste query_plan_max_step_description_length. #86741 (Nikolai Kochetov).
  • Se añadió la posibilidad de ajustar las señales pendientes para intentar evitar CANNOT_CREATE_TIMER (para los perfiladores de consultas, query_profiler_real_time_period_ns/query_profiler_cpu_time_period_ns). Además, ahora se recopila SigQ de /proc/self/status para introspección (si ProcessSignalQueueSize está cerca de ProcessSignalQueueLimit, es probable que obtenga errores CANNOT_CREATE_TIMER). #86760 (Azat Khuzhin).
  • Mejora del rendimiento de la solicitud RemoveRecursive en Keeper. #86789 (Antonio Andelic).
  • Eliminar los espacios en blanco adicionales en PrettyJSONEachRow al generar la salida del tipo JSON. #86819 (Pavel Kruglov).
  • Ahora se escriben los tamaños de los blobs de prefix.path al eliminar el directorio en el disco reescribible simple. #86908 (alesapin).
  • Admite pruebas de rendimiento en instancias remotas de ClickHouse, incluido ClickHouse Cloud. Ejemplo de uso: tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user <username> --password <password> --host <hostname> --port <port> --secure. #86995 (Raufs Dunamalijevs).
  • Se respetan los límites de memoria en algunos lugares donde se sabe que se asigna una cantidad significativa (>16MiB) de memoria (ordenación, inserciones asíncronas, file log). #87035 (Azat Khuzhin).
  • Lanzar una excepción si la configuración network_compression_method no corresponde a un codec genérico compatible. #87097 (Robert Schulze).
  • La tabla del sistema system.query_cache ahora devuelve todas las entradas de la caché de resultados de consultas, mientras que antes devolvía solo las entradas compartidas o las entradas no compartidas del mismo usuario y rol. Esto no supone un problema, ya que se espera que las entradas no compartidas no revelen resultados de consultas, mientras que system.query_cache devuelve textos de las consultas. Esto hace que el comportamiento de la tabla del sistema sea más similar al de system.query_log. #87104 (Robert Schulze).
  • Se habilitó la evaluación de cortocircuito para la función parseDateTime. #87184 (Pavel Kruglov).
  • Agrega una nueva columna statistics a system.parts_columns. #87259 (Han Fei).

Corrección de errores (fallo visible para el usuario en una versión estable oficial)

  • Los resultados de las consultas ALTER solo se validan en el nodo iniciador para las bases de datos replicadas y las tablas con replicación interna. Esto corrige situaciones en las que una consulta ALTER ya confirmada podía quedarse bloqueada en otros nodos. #83849 (János Benjamin Antal).
  • Limita el número de tareas de cada tipo en BackgroundSchedulePool. Evita situaciones en las que todos los slots estén ocupados por tareas de un mismo tipo, mientras otras tareas quedan bloqueadas por falta de recursos. También evita interbloqueos cuando las tareas esperan entre sí. Esto se controla mediante la configuración del servidor background_schedule_pool_max_parallel_tasks_per_type_ratio. #84008 (Alexander Tokmakov).
  • Apague correctamente las tablas al recuperar una réplica de la base de datos. Un apagado incorrecto provocaría LOGICAL_ERROR en algunos motores de tablas durante la recuperación de la réplica de la base de datos. #84744 (Antonio Andelic).
  • Comprobar los permisos de acceso al generar sugerencias de corrección de errores tipográficos para el nombre de la base de datos. #85371 (Dmitry Novik).
    1. LowCardinality para columnas de hive 2. Rellenar las columnas de hive antes que las columnas virtuales (necesario para https://github.com/ClickHouse/ClickHouse/pull/81040) 3. LOGICAL_ERROR con formato vacío para hive #85528 4. Corregir la comprobación de que las columnas de partición de hive sean las únicas columnas presentes 5. Asegurar que todas las columnas de hive estén especificadas en el esquema 6. Corrección parcial de parallel_replicas_cluster con hive 7. Usar un contenedor ordenado en extractkeyValuePairs para las utilidades de hive (necesario para https://github.com/ClickHouse/ClickHouse/pull/81040). #85538 (Arthur Passos).
  • Se evita la optimización innecesaria del primer argumento de las funciones IN, que a veces provocaba un error cuando se utilizaba el mapeo de arrays. #85546 (Yakov Olkhovskiy).
  • La correspondencia entre los IDs de source de Iceberg y los nombres de Parquet no se ajustó al schema al escribir el archivo Parquet. Este PR procesa el schema correspondiente a cada archivo de datos de Iceberg, no el actual. #85829 (Daniil Ivanik).
  • Corrige la lectura del tamaño del archivo para que se haga por separado de su apertura. Está relacionado con https://github.com/ClickHouse/ClickHouse/pull/33372, que se introdujo en respuesta a un error en los kernels de Linux anteriores a la versión 5.10. #85837 (Konstantin Bogdanov).
  • ClickHouse Keeper ya no falla al iniciarse en sistemas donde IPv6 está deshabilitado a nivel del kernel (p. ej., RHEL con ipv6.disable=1). Ahora intenta usar un listener IPv4 como alternativa si falla el listener IPv6 inicial. #85901 (jskong1124).
  • Este PR cierra #77990. Añade soporte de TableFunctionRemote para réplicas paralelas en globalJoin. #85929 (zoomxi).
  • Corrige el puntero nulo en orcschemareader::initializeifneeded(). este PR aborda el siguiente problema: #85292 ### entrada de documentación para cambios visibles para el usuario. #85951 (yanglongwei).
  • Añade una comprobación para permitir subconsultas correlacionadas en la cláusula FROM solo si usan columnas de la consulta externa. Corrige #85469. Corrige #85402. #85966 (Dmitry Novik).
  • Se corrige la actualización mediante alter de una columna con una subcolumna utilizada en la expresión materializada de otra columna. Anteriormente, una columna materializada con una subcolumna en su expresión no se actualizaba correctamente. #85985 (Pavel Kruglov).
  • Prohibir la modificación de columnas cuyas subcolumnas se usan en la PK o en la expresión de partición. #86005 (Pavel Kruglov).
  • Se corrigió la lectura de subcolumnas con un modo de asignación de columnas distinto del predeterminado en el almacenamiento DeltaLake. #86064 (Kseniia Sumarokova).
  • Se corrige el uso de valores predeterminados incorrectos para la ruta con sugerencia de Enum dentro de JSON. #86065 (Pavel Kruglov).
  • Análisis de la URL del catálogo hive de DataLake con sanitización de entradas. Cierra #86018. #86092 (rajat mohan).
  • Corrige un error lógico en el redimensionamiento dinámico de la caché del sistema de archivos. Cierra #86122. Cierra https://github.com/ClickHouse/clickhouse-core-incidents/issues/473. #86130 (Kseniia Sumarokova).
  • Use NonZeroUInt64 para logs_to_keep en DatabaseReplicatedSettings. #86142 (Tuan Pham Anh).
  • Se producía una excepción al ejecutar una consulta FINAL con un índice de omisión si la tabla (por ejemplo, ReplacingMergeTree) se había creado con la configuración index_granularity_bytes = 0. Esa excepción ya se ha corregido. #86147 (Shankar Iyer).
  • Elimina UB y corrige problemas en el análisis de la expresión de partición de Iceberg. #86166 (Daniil Ivanik).
  • Se corrige un fallo en el caso de bloques const y no const en un mismo INSERT. #86230 (Azat Khuzhin).
  • Procesa por defecto las inclusiones de /etc/metrika.xml al crear discos desde SQL. #86232 (alekar).
  • Se corrige la conversión de accurateCastOrNull/accurateCastOrDefault de String a JSON. #86240 (Pavel Kruglov).
  • Se admiten directorios sin ’/’ en el engine Iceberg. #86249 (scanhex12).
  • Se corrige un fallo en replaceRegex con un haystack de tipo FixedString y un needle vacío. #86270 (Raúl Marín).
  • Se corrigió un fallo durante ALTER UPDATE Nullable(JSON). #86281 (Pavel Kruglov).
  • Se corrige la falta de la columna definer en system.tables. #86295 (Raúl Marín).
  • Se corrige el cast de LowCardinality(Nullable(T)) a Dynamic. #86365 (Pavel Kruglov).
  • Corrige un error lógico al escribir en DeltaLake. Cierra #86175. #86367 (Kseniia Sumarokova).
  • Se corrigió 416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resource al leer blobs vacíos de Azure Blob Storage para el disco plain_rewritable. #86400 (Julia Kartseva).
  • Se corrige el GROUP BY de Nullable(JSON). #86410 (Pavel Kruglov).
  • Se corrigió un error en las vistas materializadas: una MV podía no funcionar si se había creado, eliminado y luego vuelto a crear con el mismo nombre. #86413 (Alexander Tokmakov).
  • Generar un error si todas las réplicas no están disponibles al leer desde las funciones *cluster. #86414 (Julian Maicher).
  • Corregir la fuga de MergesMutationsMemoryTracking provocada por las tablas Buffer y corregir query_views_log para la ingesta en streaming desde Kafka (y otros orígenes). #86422 (Azat Khuzhin).
  • Se corrige SHOW TABLES tras eliminar la tabla de referencia del almacenamiento alias. #86433 (RinChanNOW).
  • Se corrige la ausencia del encabezado del fragmento cuando send_chunk_header está habilitado y se invoca una UDF a través del protocolo HTTP. #86469 (Vladimir Cherkasov).
  • Se corrige un posible interbloqueo cuando están habilitadas las operaciones de flush del perfil de jemalloc. #86473 (Azat Khuzhin).
  • Corrige la lectura de subcolumnas en el motor de tablas DeltaLake. Cierra #86204. #86477 (Kseniia Sumarokova).
  • Correcta gestión del ID del host de loopback para evitar colisiones al procesar tareas de DDL:. #86479 (Tuan Pham Anh).
  • Se corrige detach/attach en tablas del motor de base de datos Postgres con columnas numéricas o decimales. #86480 (Julian Maicher).
  • Corrige el uso de memoria sin inicializar en getSubcolumnType. #86498 (Raúl Marín).
  • Las funciones searchAny y searchAll, cuando se llaman con patrones de búsqueda vacíos, ahora devuelven true (es decir, “coinciden con todo”). Antes devolvían false. (issue #86300). #86500 (Elmi Ahmadov).
  • Corrige la función timeSeriesResampleToGridWithStaleness() cuando el primer intervalo no tiene ningún valor. #86507 (Vitaly Baranov).
  • Se corrige el fallo causado porque merge_tree_min_read_task_size estaba establecido en 0. #86527 (yanglongwei).
  • Durante la lectura, el formato de cada archivo de datos se obtiene de los metadatos de Iceberg (antes se obtenía de los argumentos de la tabla). #86529 (Daniil Ivanik).
  • Ignorar las excepciones durante el vaciado del log al apagar y hacer más seguro el apagado (para evitar SIGSEGV). #86546 (Azat Khuzhin).
  • Se corrigió una excepción del motor de base de datos Backup al ejecutar una consulta con archivos de partes de tamaño cero. #86563 (Max Justus Spransy).
  • Corrige la ausencia de la cabecera de fragmento cuando send_chunk_header está habilitado y la UDF se invoca mediante el protocolo HTTP. #86606 (Vladimir Cherkasov).
  • Corrige el error lógico de S3Queue “Expected current processor to be equal to ”, provocado por el vencimiento de la sesión de Keeper. #86615 (Kseniia Sumarokova).
  • Errores de nulabilidad en insert y pruning. Esto cierra #86407. #86630 (scanhex12).
  • No desactive la caché del sistema de archivos si la caché de metadatos de Iceberg está desactivada. #86635 (Daniil Ivanik).
  • Se corrigió el error ‘Deadlock in Parquet::ReadManager (single-threaded)’ en el lector de Parquet v3. #86644 (Michael Kolupaev).
  • Se ha corregido la compatibilidad con IPv6 en listen_host para ArrowFlight. #86664 (Vitaly Baranov).
  • Se corrige el cierre del handler de ArrowFlight. Este PR corrige #86596. #86665 (Vitaly Baranov).
  • Se corrige un problema en las consultas distribuidas con describe_compact_output=1. #86676 (Azat Khuzhin).
  • Se corrigen el análisis de la definición de ventana y la aplicación de parámetros de consulta. #86720 (Azat Khuzhin).
  • Se corrige la excepción Partition strategy wildcard can not be used without a '_partition_id' wildcard. al crear una tabla con PARTITION BY, pero sin un comodín de partición, algo que solía funcionar en versiones anteriores a la 25.8. Cierra https://github.com/ClickHouse/clickhouse-private/issues/37567. #86748 (Kseniia Sumarokova).
  • Se corrige LogicalError si consultas paralelas intentan adquirir un único bloqueo. #86751 (Pervakov Grigorii).
  • Se corrige la escritura de NULL en datos compartidos de JSON en el formato de entrada RowBinary y se añaden algunas validaciones adicionales en ColumnObject. #86812 (Pavel Kruglov).
  • Se corrige la permutación vacía de Tuple con un límite. #86828 (Pavel Kruglov).
  • No use un nodo de Keeper independiente para los nodos de procesamiento persistentes. Corrección de https://github.com/ClickHouse/ClickHouse/pull/85995. Cierra #86406. #86841 (Kseniia Sumarokova).
  • Se corrige un problema por el que una tabla con motor TimeSeries impedía la creación de una nueva réplica en una base de datos Replicated. #86845 (Nikolay Degterinsky).
  • Se corrigió la consulta de system.distributed_ddl_queue en los casos en que a las tareas les faltan ciertos nodos de Keeper. #86848 (Antonio Andelic).
  • Se corrige el seek al final del bloque descomprimido. #86906 (Pavel Kruglov).
  • Procesar la excepción lanzada durante la ejecución asíncrona del iterador de Iceberg. #86932 (Daniil Ivanik).
  • Se corrige el guardado de configuraciones XML preprocesadas de gran tamaño. #86934 (c-end).
  • Se corrigió el llenado del campo date en la tabla system.iceberg_metadata_log. #86961 (Daniil Ivanik).
  • Se corrigió la recalculación infinita de TTL con WHERE. #86965 (Anton Popov).
  • Se corrigió un posible error en el resultado de la función uniqExact con los modificadores ROLLUP y CUBE. #87014 (Nikita Taranov).
  • Se corrige la resolución del esquema de la tabla con la función de tabla url() cuando la configuración parallel_replicas_for_cluster_functions se establece en 1. #87029 (Konstantin Bogdanov).
  • Realizar correctamente la conversión de tipo de la salida de PREWHERE después de dividirla en varios pasos. #87040 (Antonio Andelic).
  • Se corrigieron las actualizaciones ligeras al usar la cláusula ON CLUSTER. #87043 (Anton Popov).
  • Se corrige la compatibilidad de algunos estados de funciones de agregación con el argumento String. #87049 (Pavel Kruglov).
  • Soluciona un problema por el que no se enviaba el nombre del modelo de OpenAI. #87100 (Kaushik Iska).
  • EmbeddedRocksDB: La ruta debe estar dentro de user_files. #87109 (Raúl Marín).
  • Corrige un problema en las tablas KeeperMap creadas antes de la versión 25.1, que dejaban datos en ZooKeeper tras la consulta DROP. #87112 (Nikolay Degterinsky).
  • Se corrigió la lectura de los ID de campo de maps y arrays en Parquet. #87136 (scanhex12).
  • Se corrigió la lectura de un array mediante la subcolumna de tamaños del array en la materialización diferida. #87139 (Pavel Kruglov).
  • Se corrigió la función CASE con argumentos Dynamic. #87177 (Pavel Kruglov).
  • Se corrige la lectura de un array vacío desde una cadena vacía en CSV. #87182 (Pavel Kruglov).
  • Corrige un posible resultado erróneo de EXISTS no correlacionado. Se rompía con execute_exists_as_scalar_subquery=1, que se introdujo en https://github.com/ClickHouse/ClickHouse/pull/85481 y afecta a 25.8. Corrige #86415. #87207 (Nikolai Kochetov).
  • Lanza un error si iceberg_metadata_log no está configurado, pero el usuario intenta obtener información de depuración sobre los metadatos de Iceberg. Corrige un acceso a nullptr. #87250 (Daniil Ivanik).

mejora de compilación/pruebas/empaquetado

Versión 25.8 LTS de ClickHouse, 2025-08-28

Cambio incompatible con versiones anteriores

  • Inferir Array(Dynamic) en lugar de Tuple sin nombre para arrays de valores con distintos tipos en JSON. Para usar el comportamiento anterior, deshabilite la configuración input_format_json_infer_array_of_dynamic_from_array_of_different_types. #80859 (Pavel Kruglov).
  • Mover las métricas de latencia de S3 a histogramas para mantener la homogeneidad y la simplicidad. #82305 (Miсhael Stetsyuk).
  • Exigir comillas invertidas alrededor de identificadores con puntos en expresiones por defecto para evitar que se interpreten como identificadores compuestos. #83162 (Pervakov Grigorii).
  • La materialización diferida se habilita solo con el analizador (que es el valor predeterminado) para evitar mantener la compatibilidad sin el analizador, lo que, según nuestra experiencia, presenta algunos problemas (por ejemplo, al usar indexHint() en condiciones). #83791 (Igor Nikonov).
  • Escribir valores de tipo Enum como BYTE_ARRAY con tipo lógico ENUM en el formato de salida Parquet de forma predeterminada. #84169 (Pavel Kruglov).
  • Habilitar por defecto la configuración de MergeTree write_marks_for_substreams_in_compact_parts. Mejora significativamente el rendimiento de lectura de subcolumnas desde partes Compact recién creadas. Los servidores con versiones anteriores a la 25.5 no podrán leer las nuevas partes Compact. #84171 (Pavel Kruglov).
  • El valor predeterminado anterior de concurrent_threads_scheduler era round_robin, que resultó ser poco equitativo cuando había un gran número de consultas de un solo hilo (p. ej., INSERTs). Este cambio establece fair_round_robin como planificador predeterminado, una alternativa más segura. #84747 (Sergei Trifonov).
  • ClickHouse admite la sintaxis heredoc de estilo PostgreSQL: $tag$ string contents... $tag$, también conocida como literales de cadena entre comillas de dólar. En versiones anteriores, había menos restricciones sobre las etiquetas: podían contener caracteres arbitrarios, incluidos signos de puntuación y espacios en blanco. Esto introduce ambigüedad en el análisis con identificadores que también pueden comenzar con un signo de dólar. Al mismo tiempo, PostgreSQL solo permite caracteres alfanuméricos y guiones bajos en las etiquetas. Para resolver el problema, ahora restringimos las etiquetas heredoc a contener únicamente esos caracteres. Cierra #84731. #84846 (Alexey Milovidov).
  • Las funciones azureBlobStorage, deltaLakeAzure e icebergAzure se han actualizado para validar correctamente los permisos AZURE. Todas las funciones con variante de clúster (funciones -Cluster) ahora verifican los permisos con respecto a sus equivalentes sin clúster. Además, las funciones icebergLocal y deltaLakeLocal ahora también aplican comprobaciones del permiso FILE. #84938 (Nikita Mikhaylov).
  • Habilitar por defecto la configuración allow_dynamic_metadata_for_data_lakes (configuración a nivel de motor de tabla). #85044 (Daniil Ivanik).
  • Deshabilitar por defecto las comillas en enteros de 64 bits en formatos JSON. #74079 (Pavel Kruglov)

Nueva funcionalidad

  • Se añade compatibilidad básica con el dialecto PromQL. Para usarlo, establezca dialect='promql' en clickhouse-client, apúntelo a la tabla TimeSeries mediante la opción promql_table_name='X' y ejecute consultas como rate(ClickHouseProfileEvents_ReadCompressedBytes[1m])[5m:1m]. Además, puede encapsular la consulta PromQL en SQL: SELECT * FROM prometheusQuery('up', ...);. Por ahora solo se admiten las funciones rate, delta e increase. No hay operadores unarios ni binarios. No hay API HTTP. #75036 (Vitaly Baranov).
  • La generación de SQL impulsada por IA ahora puede detectar automáticamente las variables de entorno ANTHROPIC_API_KEY y OPENAI_API_KEY, si están disponibles; esto permite ofrecer una opción sin configuración para usar esta función. #83787 (Kaushik Iska).
  • Se implementó compatibilidad con el protocolo ArrowFlight RPC mediante la adición de: - una nueva función de tabla arrowflight. #74184 (zakr600).
  • Ahora todas las tablas admiten la columna virtual _table (no solo las tablas con el motor Merge), lo que resulta especialmente útil para consultas con UNION ALL. #63665 (Xiaozhe Yu).
  • Permitir el uso de cualquier política de almacenamiento (es decir, almacenamiento de objetos, como S3) para la agregación/ordenación externas. #84734 (Azat Khuzhin).
  • Se implementa la autenticación de AWS S3 con un IAM role proporcionado explícitamente. Se implementa OAuth para GCS. Estas funciones, que hasta hace poco solo estaban disponibles en ClickHouse Cloud, ahora se han publicado como código abierto. Se sincronizan algunas interfaces, como la serialización de los parámetros de conexión para el almacenamiento de objetos. #84011 (Alexey Milovidov).
  • Añade compatibilidad con eliminaciones por posición en Iceberg TableEngine. #83094 (Daniil Ivanik).
  • Compatibilidad con Equality Deletes en Iceberg. #85843 (Han Fei).
  • Escrituras en Iceberg con CREATE. Cierra #83927. #83983 (Konstantin Vedernikov).
  • Catálogos de Glue para escritura. #84136 (Konstantin Vedernikov).
  • Catálogos REST de Iceberg para escritura. #84684 (Konstantin Vedernikov).
  • Fusiona todos los position delete files de Iceberg en archivos de datos. Esto reducirá la cantidad y el tamaño de los archivos Parquet en el almacenamiento de Iceberg. Sintaxis: OPTIMIZE TABLE table_name. #85250 (Konstantin Vedernikov).
  • Compatibilidad con drop table para Iceberg (eliminación de catálogos REST/Glue + eliminación de los metadatos de la tabla). #85395 (Konstantin Vedernikov).
  • Se añade compatibilidad con las mutaciones ALTER DELETE para Iceberg en formato merge-on-read. #85549 (Konstantin Vedernikov).
  • Se admite la escritura en DeltaLake. Cierra #79603. #85564 (Kseniia Sumarokova).
  • Se añadió la configuración delta_lake_snapshot_version para permitir leer una versión específica de una instantánea en el motor de tabla DeltaLake. #85295 (Kseniia Sumarokova).
  • Añadir más estadísticas de Iceberg (tamaños de columnas y límites inferior y superior) a los metadatos (entradas del manifiesto) para la poda min-max. #85746 (Konstantin Vedernikov).
  • Se admite la adición/eliminación/modificación de columnas en Iceberg para tipos simples. #85769 (Konstantin Vedernikov).
  • Iceberg: se admite la escritura del archivo version-hint. Esto cierra #85097. #85130 (Konstantin Vedernikov).
  • Las vistas creadas por usuarios efímeros ahora almacenarán una copia de un usuario real y ya no se invalidarán después de que se elimine el usuario efímero. #84763 (pufit).
  • El índice de similitud vectorial ahora admite cuantización binaria. La cuantización binaria reduce significativamente el consumo de memoria y acelera el proceso de creación de un índice vectorial (gracias a un cálculo de distancias más rápido). Además, la configuración existente vector_search_postfilter_multiplier quedó obsoleta y fue sustituida por una configuración más general: vector_search_index_fetch_multiplier. #85024 (Shankar Iyer).
  • Permitir argumentos de clave-valor en el motor/función de tabla s3 o s3Cluster, p. ej., s3('url', CSV, structure = 'a Int32', compression_method = 'gzip'). #85134 (Kseniia Sumarokova).
  • Una nueva tabla del sistema para almacenar mensajes entrantes erróneos de motores como Kafka (“cola de mensajes fallidos”). #68873 (Ilya Golshtein).
  • El nuevo SYSTEM RESTORE DATABASE REPLICA para bases de datos Replicated, similar a la funcionalidad de restauración ya existente en ReplicatedMergeTree. #73100 (Konstantin Morozov).
  • El protocolo de PostgreSQL ahora es compatible con el comando COPY. #74344 (Konstantin Vedernikov).
  • Compatibilidad con clientes C# para el protocolo mysql. Esto cierra #83992. #84397 (Konstantin Vedernikov).
  • Se añadió compatibilidad para lecturas y escrituras con particiones al estilo de Hive. #76802 (Arthur Passos).
  • Se añade la tabla del sistema zookeeper_connection_log para almacenar información histórica sobre las conexiones de ZooKeeper. #79494 (János Benjamin Antal).
  • La configuración del servidor cpu_slot_preemption habilita la planificación preventiva de CPU para las cargas de trabajo y garantiza una asignación max-min justa del tiempo de CPU entre las cargas de trabajo. Se añaden nuevas configuraciones de carga de trabajo para la limitación de CPU: max_cpus, max_cpu_share y max_burst_cpu_seconds. Más detalles: https://clickhouse.com/docs/operations/workload-scheduling#cpu&#95;scheduling. #80879 (Sergei Trifonov).
  • Cerrar la conexión TCP después de un número configurado de consultas o de un umbral de tiempo. Esto resulta útil para lograr una distribución más uniforme de las conexiones entre los nodos del cluster detrás de un balanceador de carga. Resuelve #68000. #81472 (Kenny Sun).
  • Las réplicas paralelas ahora permiten usar proyecciones en las consultas. #82659. #82807 (zoomxi).
  • Admite DESCRIBE SELECT, además de DESCRIBE (SELECT …). #82947 (Yarik Briukhovetskyi).
  • Forzar el uso de una conexión segura para mysql_port y postgresql_port. #82962 (tiandiwonder).
  • Ahora puede realizar búsquedas de claves JSON sin distinguir entre mayúsculas y minúsculas con JSONExtractCaseInsensitive (y otras variantes de JSONExtract). #83770 (Alistair Evans).
  • Se introduce la tabla system.completions. Cierra #81889. #83833 (|2ustam).
  • Se añadió una nueva función nowInBlock64. Ejemplo de uso: SELECT nowInBlock64(6) devuelve 2025-07-29 17:09:37.775725. #84178 (Halersson Paris).
  • Añade extra_credentials a AzureBlobStorage para autenticarse mediante client_id y tenant_id. #84235 (Pablo Marcos).
  • Se añadió la función dateTimeToUUIDv7 para convertir un valor de tipo DateTime en un UUIDv7. Ejemplo de uso: SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56')) devuelve 0198af18-8320-7a7d-abd3-358db23b9d5c. #84319 (samradovich).
  • Funciones de agregación timeSeriesDerivToGrid y timeSeriesPredictLinearToGrid para remuestrear datos en una cuadrícula temporal definida por la marca de tiempo de inicio, la marca de tiempo de fin y el paso especificados; calculan deriv y predict_linear al estilo de PromQL, respectivamente. #84328 (Stephen Chi).
  • Se añaden dos nuevas funciones de TimeSeries: - timeSeriesRange(start_timestamp, end_timestamp, step), - timeSeriesFromGrid(start_timestamp, end_timestamp, step, values),. #85435 (Vitaly Baranov).
  • Se añadió una nueva sintaxis: GRANT READ ON S3('s3://foo/.*') TO user. #84503 (pufit).
  • Se añadió Hash como un nuevo formato de salida. Calcula un único valor hash para todas las columnas y filas del resultado. Esto resulta útil para calcular una “huella digital” del resultado, por ejemplo, en casos de uso en los que la transferencia de datos supone un cuello de botella. Ejemplo: SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hash devuelve e5f9e676db098fdb9530d2059d8c23ef. #84607 (Robert Schulze).
  • Se añade la posibilidad de configurar watches arbitrarios en consultas Multi de Keeper. #84964 (Mikhail Artemenko).
  • Añade la opción --max-concurrency a la herramienta clickhouse-benchmark, que permite un modo con un aumento gradual del número de consultas en paralelo. #85623 (Sergei Trifonov).
  • Soporte para métricas parcialmente agregadas. #85328 (Mikhail Artemenko).

funcionalidad experimental

  • Se habilita de forma predeterminada el soporte para subconsultas correlacionadas; ya no son experimentales. #85107 (Dmitry Novik).
  • Los catálogos de lago de datos de Unity, Glue, Rest y Hive Metastore pasan de experimental a beta. #85848 (Melvyn Peignon).
  • Las actualizaciones ligeras y las eliminaciones pasan de experimental a beta.
  • La búsqueda vectorial aproximada con índices de similitud vectorial ahora es GA. #85888 (Robert Schulze).
  • Motor de tabla y función de tabla de Ytsaurus. #77606 (MikhailBurdukov).
  • Anteriormente, los datos del índice de texto se separaban en varios segmentos (el tamaño de cada segmento era de 256 MiB de forma predeterminada). Esto podía reducir el consumo de memoria al crear el índice de texto; sin embargo, incrementaba el espacio requerido en disco y el tiempo de respuesta de la consulta. #84590 (Elmi Ahmadov).

Mejora del rendimiento

  • Nueva implementación del lector de Parquet. En general, es más rápida y admite pushdown de filtros a nivel de página y PREWHERE. Actualmente está en fase experimental. Use la configuración input_format_parquet_use_native_reader_v3 para habilitarla. #82789 (Michael Kolupaev).
  • Reemplazamos el transporte HTTP oficial de la biblioteca de Azure por nuestra propia implementación de cliente HTTP para Azure Blob Storage. Incorporamos varias configuraciones para este cliente que replican ajustes de S3. También introdujimos timeouts de conexión agresivos tanto para Azure como para S3. Mejoramos la introspección de los eventos de perfil y las métricas de Azure. El nuevo cliente está habilitado de forma predeterminada y ofrece latencias mucho mejores para consultas en frío sobre Azure Blob Storage. Se puede volver al cliente Curl anterior configurando azure_sdk_use_native_client=false. #83294 (alesapin). La implementación oficial anterior del cliente de Azure no era apta para producción debido a picos de latencia desastrosos, que iban desde cinco segundos hasta varios minutos. Hemos descartado esa pésima implementación y estamos muy orgullosos de ello.
  • Procesa los índices en orden ascendente de tamaño de archivo. En conjunto, el orden de los índices prioriza los índices minmax y vectoriales (por simplicidad y selectividad, respectivamente), y luego los índices pequeños. Dentro de los índices minmax/vectoriales, también se da preferencia a los índices más pequeños. #84094 (Maruth Goyal).
  • Se habilita de forma predeterminada la configuración de MergeTree write_marks_for_substreams_in_compact_parts. Mejora significativamente el rendimiento de la lectura de subcolumnas desde partes Compact recién creadas. Los servidores con una versión inferior a la 25.5 no podrán leer las nuevas partes Compact. #84171 (Pavel Kruglov).
  • Motor de tabla azureBlobStorage: almacenar en caché y reutilizar los tokens de autenticación de identidad administrada cuando sea posible para evitar el throttling. #79860 (Nick Blakely).
  • Los ALL LEFT/INNER JOINs se convertirán automáticamente en RightAny si el lado derecho queda determinado funcionalmente por las columnas de la clave de JOIN (todas las filas tienen valores únicos en la clave de JOIN). #84010 (Nikita Taranov).
  • Se añade max_joined_block_size_bytes, además de max_joined_block_size_rows, para limitar el uso de memoria de los JOIN con columnas de gran tamaño. #83869 (Nikolai Kochetov).
  • Se añadió una nueva lógica (controlada por la configuración enable_producing_buckets_out_of_order_in_aggregation, habilitada de forma predeterminada) que permite enviar algunos buckets fuera de orden durante la agregación eficiente en memoria. Cuando algunos buckets de agregación tardan mucho más que otros en fusionarse, esto mejora el rendimiento al permitir que el iniciador fusione mientras tanto buckets con identificadores más altos. La desventaja es un uso de memoria potencialmente mayor (no debería ser significativo). #80179 (Nikita Taranov).
  • Se introdujo la configuración optimize_rewrite_regexp_functions (habilitada de forma predeterminada), que permite al optimizador reescribir determinadas llamadas a replaceRegexpAll, replaceRegexpOne y extract en formas más simples y eficientes cuando detecta patrones específicos de expresiones regulares. (incidencia #81981). #81992 (Amos Bird).
  • Se procesa max_joined_block_rows fuera del bucle principal de hash JOIN. Rendimiento ligeramente superior para ALL JOIN. #83216 (Nikolai Kochetov).
  • Procesa primero los índices min-max de mayor granularidad. Cierra #75381. #83798 (Maruth Goyal).
  • Hacer que las agregaciones de ventana con DISTINCT se ejecuten en tiempo lineal y corregir un error en sumDistinct. Cierra #79792. Cierra #52253. #79859 (Nihal Z. Miaji).
  • Las consultas de búsqueda vectorial que utilizan un índice de similitud vectorial se completan con menor latencia gracias a la reducción de las lecturas desde almacenamiento y del uso de CPU. #83803 (Shankar Iyer).
  • Rendezvous hashing para mejorar la localidad de caché en la distribución de la carga de trabajo entre réplicas paralelas. #82511 (Anton Ivashkin).
  • Se implementó addManyDefaults para los combinadores If, de modo que ahora las funciones de agregación con combinadores If funcionan más rápido. #83870 (Raúl Marín).
  • Calcular la clave serializada de forma columnar al agrupar por varias columnas de cadena o numéricas. #83884 (李扬).
  • Se evitaron los escaneos completos en los casos en que el análisis de índices produce rangos vacíos al leer con réplicas paralelas. #84971 (Eduard Karacharov).
  • Pruebe -falign-functions=64 para intentar obtener pruebas de rendimiento más estables. #83920 (Azat Khuzhin).
  • El índice bloom filter ahora se usa para condiciones como has([c1, c2, ...], column), donde column no es de tipo Array. Esto mejora el rendimiento de esas consultas y las hace tan eficientes como el operador IN. #83945 (Doron David).
  • Reduce las llamadas innecesarias a memcpy en CompressedReadBufferBase::readCompressedData. #83986 (Raúl Marín).
  • Optimiza largestTriangleThreeBuckets eliminando los datos temporales. #84479 (Alexey Milovidov).
  • Optimiza la deserialización de cadenas al simplificar el código. Cierra #38564. #84561 (Alexey Milovidov).
  • Se corrigió el cálculo del tamaño mínimo de tarea para las réplicas paralelas. #84752 (Nikita Taranov).
  • Se mejoró el rendimiento al aplicar patch parts en modo Join. #85040 (Anton Popov).
  • Se eliminó el byte cero. Cierra #85062. Se corrigieron algunos errores menores. Las funciones structureToProtobufSchema y structureToCapnProtoSchema no colocaban correctamente un byte nulo de terminación y usaban un salto de línea en su lugar. Esto provocaba la falta de un salto de línea en la salida y podía causar desbordamientos de búfer al usar otras funciones que dependen del byte cero (como logTrace, demangle, extractURLParameter, toStringCutToZero y encrypt/decrypt). La disposición del Diccionario regexp_tree no admitía procesar cadenas con bytes cero. La función formatRowNoNewline, cuando se llamaba con el formato Values o con cualquier otro formato sin un salto de línea al final de las filas, recortaba por error el último carácter de la salida. La función stem contenía un error de seguridad ante excepciones que, en un caso muy poco frecuente, podía provocar una fuga de memoria. La función initcap funcionaba incorrectamente para argumentos FixedString: no reconocía el inicio de una palabra al comienzo de la cadena si la cadena anterior en un bloque terminaba con un carácter de palabra. Se corrigió una vulnerabilidad de seguridad en el formato Apache ORC, que podía provocar la exposición de memoria no inicializada. Se cambió el comportamiento de la función replaceRegexpAll y del alias correspondiente, REGEXP_REPLACE: ahora puede realizar una coincidencia vacía al final de la cadena incluso si la coincidencia anterior procesó toda la cadena, como en el caso de ^a*|a*$ o ^|.*; esto se corresponde con la semántica de JavaScript, Perl, Python, PHP y Ruby, pero difiere de la semántica de PostgreSQL. La implementación de muchas funciones se ha simplificado y optimizado. La documentación de varias funciones era incorrecta y ahora se ha corregido. Tenga en cuenta que la salida de byteSize para columnas String y tipos complejos, que consistían en columnas String, ha cambiado (de 9 bytes por cadena vacía a 8 bytes por cadena vacía), y esto es normal. #85063 (Alexey Milovidov).
  • Optimiza la materialización de constantes en los casos en los que esta materialización se realiza solo para devolver una única fila. #85071 (Alexey Milovidov).
  • Mejora del procesamiento paralelo de archivos con el backend de delta-kernel-rs. #85642 (Azat Khuzhin).
  • Se ha introducido un nuevo ajuste, enable_add_distinct_to_in_subqueries. Cuando está habilitado, ClickHouse añadirá automáticamente DISTINCT a las subconsultas de las cláusulas IN en las consultas distribuidas. Esto puede reducir significativamente el tamaño de las tablas temporales transferidas entre segmentos y mejorar la eficiencia de la red. Nota: esto supone una contrapartida: aunque se reduce la transferencia de red, se requiere trabajo adicional de fusión (deduplicación) en cada nodo. Habilite este ajuste cuando la transferencia de red sea un cuello de botella y el coste de la fusión sea aceptable. #81908 (fhw12345).
  • Reduce la sobrecarga del seguimiento de memoria de las consultas para las funciones ejecutables definidas por el usuario. #83929 (Eduard Karacharov).
  • Implementar el filtrado interno de delta-kernel-rs (estadísticas y poda de particiones) en el almacenamiento DeltaLake. #84006 (Kseniia Sumarokova).
  • Deshabilitar con mayor granularidad los índices de salto de datos que dependen de columnas actualizadas sobre la marcha o mediante patch parts. Ahora, los índices de salto de datos solo dejan de usarse en las partes afectadas por mutaciones sobre la marcha o patch parts; antes, esos índices se deshabilitaban en todas las partes. #84241 (Anton Popov).
  • Asigne a encrypted_buffer la cantidad mínima de memoria necesaria para las named collections cifradas. #84432 (Pablo Marcos).
  • Se mejoró el soporte para los índices bloom filter (regular, ngram y token) para que puedan utilizarse cuando el primer argumento es un array constante (el conjunto) y el segundo es la columna indexada (el subconjunto), lo que permite una ejecución de consultas más eficiente. #84700 (Doron David).
  • Reducir la contención del bloqueo de almacenamiento en Keeper. #84732 (Antonio Andelic).
  • Se añade la compatibilidad que faltaba de read_in_order_use_virtual_row para WHERE. Permite omitir la lectura de más partes en consultas con filtros que no se han trasladado por completo a PREWHERE. #84835 (Nikolai Kochetov).
  • Permite iterar de forma asíncrona sobre objetos de una tabla Iceberg sin almacenar explícitamente objetos para cada archivo de datos. #85369 (Daniil Ivanik).
  • Ejecute EXISTS no correlacionado como una subconsulta escalar. Esto permite usar una caché de subconsultas escalares y convertir el resultado en una constante, lo que resulta útil para los índices. Por compatibilidad, se añade el nuevo ajuste execute_exists_as_scalar_subquery=1. #85481 (Nikolai Kochetov).

Mejora

  • Se añaden opciones de configuración database_replicated que definen los valores predeterminados de DatabaseReplicatedSettings. Si la configuración no está presente en la consulta CREATE de la base de datos Replicated, se usa el valor de esta configuración. #85127 (Tuan Pham Anh).
  • Se añadió la posibilidad de redimensionar las columnas de la tabla en la interfaz web (play). #84012 (Doron David).
  • Se admite el archivo .metadata.json comprimido mediante la configuración iceberg_metadata_compression_method. Admite todos los métodos de compresión de ClickHouse. Esto cierra #84895. #85196 (Konstantin Vedernikov).
  • Mostrar el número de rangos que se leerán en la salida de EXPLAIN indexes = 1. #79938 (Christoph Wurm).
  • Se añaden ajustes para configurar el tamaño del bloque de compresión de ORC, y se actualiza su valor predeterminado de 64KB a 256KB para mantener la coherencia con Spark o Hive. #80602 (李扬).
  • Se añadió el archivo columns_substreams.txt a la parte Wide para registrar todos los subflujos almacenados en ella. Esto permite rastrear los flujos dinámicos en los tipos JSON y Dynamic y, así, evitar leer una muestra de estas columnas para obtener la lista de flujos dinámicos (por ejemplo, para calcular el tamaño de las columnas). Además, ahora todos los flujos dinámicos se reflejan en system.parts_columns. #81091 (Pavel Kruglov).
  • Se añade una opción de la CLI, —show_secrets, a clickhouse format para ocultar los datos confidenciales de forma predeterminada. #81524 (Nikolai Ryzhov).
  • Las solicitudes de lectura y escritura de S3 se regulan a nivel del socket HTTP (en lugar de a nivel de las solicitudes completas de S3) para evitar problemas con la limitación de max_remote_read_network_bandwidth_for_server y max_remote_write_network_bandwidth_for_server. #81837 (Sergei Trifonov).
  • Permitir mezclar distintas intercalaciones para la misma columna en diferentes ventanas (en funciones de ventana). #82877 (Yakov Olkhovskiy).
  • Añadir una herramienta para simular, visualizar y comparar selectores de fusión. #71496 (Sergei Trifonov).
  • Se añade compatibilidad para las funciones de tabla remote* con réplicas paralelas si se proporciona un clúster en el argumento address_expression. Además, corrige #73295. #82904 (Igor Nikonov).
  • Establece en TRACE todos los mensajes de registro para la escritura de archivos de copia de seguridad. #82907 (Hans Krutzer).
  • Las funciones definidas por el usuario con nombres inusuales y los codecs pueden recibir un formato inconsistente por parte del formateador de SQL. Esto cierra #83092. #83644 (Alexey Milovidov).
  • Ahora se pueden usar los tipos Time y Time64 dentro del tipo JSON. #83784 (Yarik Briukhovetskyi).
  • Los joins con réplicas en paralelo ahora usan el paso lógico de join. Si surge algún problema con las consultas con join que usan réplicas en paralelo, prueba SET query_plan_use_new_logical_join_step=0 y reporta el problema. #83801 (Vladimir Cherkasov).
  • Se corrige la compatibilidad de cluster_function_process_archive_on_multiple_nodes. #83968 (Kseniia Sumarokova).
  • Se admite cambiar la configuración de insert de las vistas materializadas a nivel de tabla de S3Queue. Se añadieron nuevas configuraciones a nivel de S3Queue: min_insert_block_size_rows_for_materialized_views y min_insert_block_size_bytes_for_materialized_views. De forma predeterminada, se usarán las configuraciones del perfil, y las configuraciones a nivel de S3Queue las anularán. #83971 (Kseniia Sumarokova).
  • Se agregó el evento de perfil MutationAffectedRowsUpperBound, que muestra el número de filas afectadas en una mutación (p. ej., el número total de filas que cumplen la condición en la consulta ALTER UPDATE o ALTER DELETE. #83978 (Anton Popov).
  • Usa información de cgroup (si aplica, es decir, si memory_worker_use_cgroup y los cgroups están disponibles) para ajustar el rastreador de memoria (memory_worker_correct_memory_tracker). #83981 (Azat Khuzhin).
  • MongoDB: Conversión implícita de cadenas en tipos numéricos. Anteriormente, si se recibía un valor de cadena desde una fuente de MongoDB para una columna numérica en una tabla de ClickHouse, se producía una excepción. Ahora, el motor intenta interpretar automáticamente el valor numérico contenido en la cadena. Cierra #81167. #84069 (Kirill Nikiforov).
  • Resaltar grupos de dígitos en los formatos Pretty para números Nullable. #84070 (Alexey Milovidov).
  • Dashboard: el tooltip no se desbordará del contenedor en la parte superior. #84072 (Alexey Milovidov).
  • Puntos con un aspecto algo mejor en el panel. #84074 (Alexey Milovidov).
  • El dashboard ahora tiene un favicon un poco mejor. #84076 (Alexey Milovidov).
  • Interfaz web: dar a los navegadores la opción de guardar la contraseña. Además, se recordarán los valores de la URL. #84087 (Alexey Milovidov).
  • Se añadió compatibilidad para aplicar ACL adicionales a nodos específicos de Keeper mediante la configuración apply_to_children. #84137 (Antonio Andelic).
  • Se corrige el uso de la serialización de los discriminadores “compact” de Variant en MergeTree. Antes no se utilizaba en algunos casos en los que sí podía usarse. #84141 (Pavel Kruglov).
  • Se añadió una server setting, logs_to_keep, a la configuración de bases de datos Replicated, que permite cambiar el parámetro predeterminado logs_to_keep para las bases de datos replicadas. Los valores más bajos reducen la cantidad de ZNodes (especialmente si hay muchas bases de datos), mientras que los valores más altos permiten que una réplica ausente se ponga al día tras un período de tiempo más largo. #84183 (Alexey Khatskevich).
  • Se añade la configuración json_type_escape_dots_in_keys para escapar los puntos en las claves JSON durante el análisis del tipo JSON. La configuración está deshabilitada de forma predeterminada. #84207 (Pavel Kruglov).
  • Comprobar si la conexión se ha cancelado antes de comprobar el EOF para evitar leer de una conexión cerrada. Corrige #83893. #84227 (Raufs Dunamalijevs).
  • Colores ligeramente mejorados para la selección de texto en la Web UI. La diferencia solo es significativa en las celdas de tabla seleccionadas en el modo oscuro. En versiones anteriores, no había suficiente contraste entre el texto y el fondo de la selección. #84258 (Alexey Milovidov).
  • Se mejoró la gestión del apagado del servidor para las conexiones de cliente al simplificar las comprobaciones internas. #84312 (Raufs Dunamalijevs).
  • Se añadió un ajuste delta_lake_enable_expression_visitor_logging para desactivar los registros del visitante de expresiones, ya que pueden resultar demasiado verbosos incluso con el nivel de registro de prueba al depurar algún problema. #84315 (Kseniia Sumarokova).
  • Las métricas a nivel de cgroup y las métricas de todo el sistema ahora se informan de forma conjunta. Las métricas a nivel de cgroup tienen nombres CGroup<Metric> y las métricas a nivel del SO (recopiladas de procfs) tienen nombres OS<Metric>. #84317 (Nikita Taranov).
  • Gráficos ligeramente mejores en la Web UI. No gran cosa, pero mejores. #84326 (Alexey Milovidov).
  • Se cambia el valor predeterminado del ajuste max_retries_before_automatic_recovery de la base de datos Replicated a 10 para que la recuperación sea más rápida en algunos casos. #84369 (Alexander Tokmakov).
  • Se corrigió el formato de CREATE USER con parámetros de consulta (es decir, CREATE USER {username:Identifier} IDENTIFIED WITH no_password). #84376 (Azat Khuzhin).
  • Se introducen backup_restore_s3_retry_initial_backoff_ms, backup_restore_s3_retry_max_backoff_ms, backup_restore_s3_retry_jitter_factor para configurar la estrategia de backoff de los reintentos de S3 utilizada durante las operaciones de copia de seguridad y restauración. #84421 (Julia Kartseva).
  • Corrección del modo ordenado de S3Queue: finalizar antes si ya se había llamado a shutdown. #84463 (Kseniia Sumarokova).
  • Compatibilidad con escrituras de Iceberg para su lectura desde pyiceberg. #84466 (Konstantin Vedernikov).
  • Permitir la conversión de tipos de los valores de Set durante el pushdown de filtros IN / GLOBAL IN sobre las claves primarias del almacenamiento KeyValue (p. ej., EmbeddedRocksDB, KeeperMap). #84515 (Eduard Karacharov).
  • Se actualiza chdig a 25.7.1. #84521 (Azat Khuzhin).
  • Los errores de bajo nivel durante la ejecución de UDF ahora se reportan con el código de error UDF_EXECUTION_FAILED, mientras que antes podían devolverse códigos de error distintos. #84547 (Xu Jia).
  • Se añade el comando get_acl a KeeperClient. #84641 (Antonio Andelic).
  • Añade la versión de instantánea a los motores de tablas de lago de datos. #84659 (Pete Hampton).
  • Se añade una métrica dimensional del tamaño de ConcurrentBoundedQueue, etiquetada por el tipo de cola (es decir, la finalidad de la cola) y el id de la cola (es decir, un id generado aleatoriamente para la instancia actual de la cola). #84675 (Miсhael Stetsyuk).
  • La tabla system.columns ahora ofrece column como alias de la columna existente name. #84695 (Yunchi Pang).
  • Nueva opción de configuración de MergeTree search_orphaned_parts_drives para limitar el alcance de la búsqueda de partes, por ejemplo, a discos con metadatos locales. #84710 (Ilya Golshtein).
  • Se añadió 4LW en Keeper, lgrq, para activar o desactivar el registro de solicitudes recibidas. #84719 (Antonio Andelic).
  • Hacer que los forward_headers de autenticación externa coincidan sin distinguir entre mayúsculas y minúsculas. #84737 (ingodwerust).
  • La herramienta encrypt_decrypt ahora admite conexiones cifradas con ZooKeeper. #84764 (Roman Vasin).
  • Añadir la columna de cadena de formato a system.errors. Esta columna es necesaria para agrupar por el mismo tipo de error en las reglas de alerta. #84776 (Miсhael Stetsyuk).
  • Se actualizó clickhouse-format para aceptar --highlight como alias de --hilite. - Se actualizó clickhouse-client para aceptar --hilite como alias de --highlight. - Se actualizó la documentación de clickhouse-format para reflejar este cambio. #84806 (Rishabh Bhardwaj).
  • Se corrigió la lectura de Iceberg por IDs de campo en tipos complejos. #84821 (Konstantin Vedernikov).
  • Se introduce una nueva configuración backup_slow_all_threads_after_retryable_s3_error para reducir la presión sobre S3 durante tormentas de reintentos provocadas por errores como SlowDown, ralentizando todos los hilos en cuanto se detecta un único error reintentable. #84854 (Julia Kartseva).
  • Omitir la creación y el renombrado de la antigua tabla temporal de los DDL de RMV no append en las BD Replicated. #84858 (Tuan Pham Anh).
  • Limitar el tamaño de la caché de entradas de log de Keeper por número de entradas mediante keeper_server.coordination_settings.latest_logs_cache_entry_count_threshold y keeper_server.coordination_settings.commit_logs_cache_entry_count_threshold. #84877 (Antonio Andelic).
  • Se permite usar simdjson en arquitecturas no compatibles (antes provocaba errores CANNOT_ALLOCATE_MEMORY). #84966 (Azat Khuzhin).
  • Logging asíncrono: hacer ajustables los límites y añadir introspección. #85105 (Raúl Marín).
  • Recopila todos los objetos eliminados para ejecutar una única operación de eliminación en el almacenamiento de objetos. #85316 (Mikhail Artemenko).
  • La implementación actual de Iceberg para los archivos de eliminación posicional mantiene todos los datos en RAM. Esto puede resultar bastante costoso si los archivos de eliminación posicional son grandes, algo que suele ocurrir. Mi implementación mantiene en RAM solo el último grupo de filas de los archivos de eliminación Parquet, lo que resulta significativamente más económico. #85329 (Konstantin Vedernikov).
  • chdig: corrige restos en la pantalla, corrige un fallo tras editar una consulta en el editor, busca editor en path, actualiza a 25.8.1. #85341 (Azat Khuzhin).
  • Añadir partition_columns_in_data_file que faltaba a la configuración de Azure. #85373 (Arthur Passos).
  • Permitir un paso de cero en las funciones timeSeries*ToGrid Esto forma parte de #75036. #85390 (Vitaly Baranov).
  • Se añadió la opción show_data_lake_catalogs_in_system_tables para controlar la incorporación de tablas de lago de datos en system.tables. Resuelve #85384. #85411 (Smita Kulkarni).
  • Se añadió compatibilidad con la expansión de macros en remote_fs_zero_copy_zookeeper_path. #85437 (Mikhail Koviazin).
  • La IA en clickhouse-client tendrá un aspecto ligeramente mejor. #85447 (Alexey Milovidov).
  • Habilitar trace_log.symbolize de forma predeterminada para despliegues antiguos. #85456 (Azat Khuzhin).
  • Se amplía la resolución de más casos de identificadores compuestos. En particular, mejora la compatibilidad de ARRAY JOIN con el analizador anterior. Se introduce una nueva configuración, analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested, para mantener el comportamiento anterior. #85492 (Nikolai Kochetov).
  • Ignorar UNKNOWN_DATABASE al obtener los tamaños de las columnas de tabla en system.columns. #85632 (Azat Khuzhin).
  • Se añadió un límite (configuración de tabla max_uncompressed_bytes_in_patches) para la cantidad total de bytes sin comprimir en las partes de parche. Esto evita ralentizaciones significativas en las consultas SELECT tras las actualizaciones ligeras y también posibles usos indebidos de las actualizaciones ligeras. #85641 (Anton Popov).
  • Agregar una columna parameter a system.grants para indicar el tipo de origen en GRANT READ/WRITE y el motor de tabla en GRANT TABLE ENGINE. #85643 (MikhailBurdukov).
  • Se corrige el análisis sintáctico de una coma final en las columnas de la consulta CREATE DICTIONARY después de una columna con parámetros, por ejemplo, Decimal(8). Cierra #85586. #85653 (Nikolay Degterinsky).
  • Compatibilidad con arrays internos en la función nested. #85719 (Nikolai Kochetov).
  • Ahora, todas las asignaciones realizadas por bibliotecas externas son visibles para el rastreador de memoria de ClickHouse y se contabilizan correctamente. Esto puede dar lugar a un uso de memoria reportado “aumentado” en determinadas consultas o a fallos con MEMORY_LIMIT_EXCEEDED. #84082 (Nikita Mikhaylov).

Corrección de errores (fallo visible para el usuario en una versión estable oficial)

  • Este PR corrige la resolución de los metadatos al consultar tablas Iceberg a través del catálogo REST. … #80562 (Saurabh Kumar Ojha).
  • Se corrige markReplicasActive en DDLWorker y DatabaseReplicatedDDLWorker. #81395 (Tuan Pham Anh).
  • Se corrige la reversión de una columna Dynamic cuando falla el análisis. #82169 (Pavel Kruglov).
  • La función trim, cuando se llama con entradas constantes, ahora produce una cadena de salida constante. (Error #78796). #82900 (Robert Schulze).
  • Se corrige un error lógico con subconsultas duplicadas cuando optimize_syntax_fuse_functions está habilitado; resuelve #75511. #83300 (Vladimir Cherkasov).
  • Se corrigió el resultado incorrecto de las consultas con la cláusula WHERE ... IN (<subquery>) cuando estaba habilitada la caché de condiciones de consulta (ajuste use_query_condition_cache). #83445 (LB7666).
  • Históricamente, la función gcs no requería ningún permiso de acceso para usarse. Ahora comprobará el permiso GRANT READ ON S3 para poder utilizarse. Cierra #70567. #83503 (pufit).
  • Omitir los nodos no disponibles durante INSERT SELECT desde s3Cluster() en un MergeTree replicado. #83676 (Igor Nikonov).
  • Se corrige la escritura con append (en MergeTree, usado para transacciones experimentales) con tipos de metadatos plain_rewritable/plain; antes simplemente se ignoraban. #83695 (Tuan Pham Anh).
  • Ocultar los detalles de autenticación del registro de esquemas Avro para que no sean visibles para el usuario ni en los logs. #83713 (János Benjamin Antal).
  • Se corrige un problema por el cual, si se crea una tabla MergeTree con add_minmax_index_for_numeric_columns=1 o add_minmax_index_for_string_columns=1, el índice se materializa posteriormente durante una operación ALTER, lo que impide que la base de datos Replicated se inicialice correctamente en una nueva réplica. #83751 (Nikolay Degterinsky).
  • Se corrigió el escritor de Parquet, que generaba estadísticas incorrectas (mín./máx.) para tipos Decimal. #83754 (Michael Kolupaev).
  • Se corrige la ordenación de los valores NaN en el tipo LowCardinality(Float32|Float64|BFloat16). #83786 (Pervakov Grigorii).
  • Al restaurar desde una copia de seguridad, es posible que el usuario definidor no se incluya en la copia de seguridad, lo que puede inutilizar toda la copia de seguridad. Para corregirlo, posponemos la comprobación de permisos al crear la tabla de destino durante la restauración y solo la realizamos en tiempo de ejecución. #83818 (pufit).
  • Se corrige un cierre inesperado del cliente debido a que la conexión quedaba en estado desconectado tras un INSERT erróneo. #83842 (Azat Khuzhin).
  • Permite hacer referencia a cualquier tabla en el argumento view(...) de la función de tabla remote con el analizador habilitado. Corrige #78717. Corrige #79377. #83844 (Dmitry Novik).
  • La llamada a Onprogress en jsoneachrowwithprogress se ha sincronizado con la finalización. #83879 (Sema Checherinda).
  • Se cierra #81303. #83892 (Konstantin Vedernikov).
  • Se corrige colorSRGBToOKLCH/colorOKLCHToSRGB cuando se mezclan argumentos const y no const. #83906 (Azat Khuzhin).
  • Se corrige la escritura de rutas JSON con valores NULL en el formato RowBinary. #83923 (Pavel Kruglov).
  • Se ha corregido el desbordamiento de valores grandes (>2106-02-07) al convertir de Date a DateTime64. #83982 (Yarik Briukhovetskyi).
  • Aplica siempre filesystem_prefetches_limit (no solo desde MergeTreePrefetchedReadPool). #83999 (Azat Khuzhin).
  • Corrige un error poco frecuente por el que la consulta MATERIALIZE COLUMN podía provocar archivos inesperados en checksums.txt y acabar dejando partes de datos en estado detached. #84007 (alesapin).
  • Corrige el error lógico Expected single dictionary argument for function al hacer un JOIN con una condición de desigualdad cuando una de las columnas es LowCardinality y la otra es una constante. Cierra #81779. #84019 (Alexey Milovidov).
  • Se corrige un bloqueo de clickhouse client cuando se usa en modo interactivo con resaltado de sintaxis. #84025 (Bharat Nallan).
  • Se corrigieron resultados incorrectos cuando se utiliza la caché de condiciones de consulta junto con CTE recursivas (problema #81506). #84026 (zhongyuankai).
  • Se gestionan correctamente las excepciones en la actualización periódica de las partes. #84083 (Azat Khuzhin).
  • Se corrige la integración del filtro en la condición JOIN en los casos en que los operandos de igualdad tienen tipos distintos o hacen referencia a constantes. Corrige #83432. #84145 (Dmitry Novik).
  • Se corrige un cierre inesperado poco frecuente de ClickHouse cuando una tabla tiene una proyección, lightweight_mutation_projection_mode = 'rebuild' y el usuario ejecuta una eliminación ligera que borra TODAS las filas de cualquier bloque de la tabla. #84158 (alesapin).
  • Se corrige el interbloqueo causado por el hilo de comprobación de cancelación en segundo plano. #84203 (Antonio Andelic).
  • Se corrige el análisis recursivo infinito de definiciones WINDOW no válidas. Corrige #83131. #84242 (Dmitry Novik).
  • Se corrigió un error que provocaba una codificación y decodificación incorrectas en Bech32. El error no se detectó inicialmente porque una implementación en línea del algoritmo utilizada para las pruebas tenía el mismo problema. #84257 (George Larionov).
  • Se corrigió una construcción incorrecta de tuplas vacías en la función array(). Esto corrige #84202. #84297 (Amos Bird).
  • Se corrige LOGICAL_ERROR en consultas con réplicas paralelas y varios INNER JOIN seguidos de un RIGHT JOIN. No use réplicas paralelas para esas consultas. #84299 (Vladimir Cherkasov).
  • Anteriormente, los índices set no tenían en cuenta las columnas Nullable al comprobar si los gránulos cumplían el filtro (problema #75485). #84305 (Elmi Ahmadov).
  • Ahora ClickHouse puede leer tablas del Glue Catalog cuando el tipo de tabla se especifica en minúsculas. #84316 (alesapin).
  • No intente sustituir las funciones de tabla por su alternativa de clúster cuando haya un JOIN o una subconsulta. #84335 (Konstantin Bogdanov).
  • Se corrige el uso del logger en IAccessStorage. #84365 (Konstantin Bogdanov).
  • Se corrigió un error lógico en las actualizaciones ligeras que modifican todas las columnas de la tabla. #84380 (Anton Popov).
  • El códec DoubleDelta ahora solo puede aplicarse a columnas de tipo numérico. En particular, las columnas FixedString ya no pueden comprimirse con DoubleDelta. (corrige #80220). #84383 (Jimmy Aguilar Mena).
  • La comparación con el valor NaN no utilizaba los rangos correctos al evaluar el índice MinMax. #84386 (Elmi Ahmadov).
  • Se corrige la lectura de una columna Variant con materialización diferida. #84400 (Pavel Kruglov).
  • Hacer que zoutofmemory sea un error de hardware; de lo contrario, lanzará un error lógico. Véase https://github.com/clickhouse/clickhouse-core-incidents/issues/877. #84420 (Han Fei).
  • Se corrigió un bloqueo del servidor cuando un usuario creado con no_password intentaba iniciar sesión después de cambiar a 0 la configuración del servidor allow_no_password. #84426 (Shankar Iyer).
  • Se solucionan las escrituras fuera de orden en el changelog de Keeper. Anteriormente, podíamos tener escrituras en curso en el changelog, pero un rollback podía provocar una modificación simultánea del archivo de destino. Esto podía dar lugar a logs inconsistentes y a una posible pérdida de datos. #84434 (Antonio Andelic).
  • Ahora, si se eliminan todos los TTL de la tabla, MergeTree ya no hará nada relacionado con el TTL. #84441 (alesapin).
  • Se permitía INSERT SELECT distribuido en paralelo con LIMIT, algo incorrecto, ya que provocaba la duplicación de datos en la tabla de destino. #84477 (Igor Nikonov).
  • Se corrige la poda de archivos mediante una columna virtual en lagos de datos. #84520 (Kseniia Sumarokova).
  • Corregidas fugas en Keeper con almacenamiento RocksDB (los iteradores no se destruían). #84523 (Azat Khuzhin).
  • Se corrigió un problema por el que ALTER MODIFY ORDER BY no validaba las columnas TTL en las claves de ordenación. Ahora, las columnas TTL se rechazan correctamente cuando se usan en cláusulas ORDER BY durante operaciones ALTER, lo que evita una posible corrupción de la tabla. #84536 (xiaohuanlin).
  • Cambiar a false el valor de allow_experimental_delta_kernel_rs en versiones anteriores a 25.5, por compatibilidad. #84587 (Kseniia Sumarokova).
  • Deja de tomar el esquema de los archivos de manifiesto y, en su lugar, almacena de forma independiente los esquemas relevantes de cada instantánea. Infiere el esquema relevante de cada archivo de datos a partir de su instantánea correspondiente. El comportamiento anterior violaba la especificación de Iceberg para las entradas de archivos de manifiesto con estado existing. #84588 (Daniil Ivanik).
  • Se corrigió un problema por el que la configuración de Keeper rotate_log_storage_interval = 0 provocaba el cierre inesperado de ClickHouse. (problema #83975). #84637 (George Larionov).
  • Corrige el error lógico de S3Queue “Table is already registered”. Cierra #84433. Se rompió después de https://github.com/ClickHouse/ClickHouse/pull/83530. #84677 (Kseniia Sumarokova).
  • Bloquear el ‘mutex’ al obtener ZooKeeper desde ‘view’ en RefreshTask. #84699 (Tuan Pham Anh).
  • Se corrige el error CORRUPTED_DATA al usar columnas de carga diferida con ordenación externa. #84738 (János Benjamin Antal).
  • Se corrige la poda de columnas con delta-kernel en DeltaLake. Cierra #84543. #84745 (Kseniia Sumarokova).
  • Actualizar credenciales en delta-kernel del almacenamiento DeltaLake. #84751 (Kseniia Sumarokova).
  • Se corrige el inicio innecesario de copias de seguridad internas tras problemas de conexión. #84755 (Vitaly Baranov).
  • Se corrigió un problema por el cual, al consultar una fuente remota con latencia, podía producirse un acceso a un vector fuera de rango. #84820 (George Larionov).
  • Los tokenizadores ngram y no_op ya no provocan fallos en el índice de texto (experimental) cuando hay tokens de entrada vacíos. #84849 (Robert Schulze).
  • Se corrigieron las actualizaciones ligeras en tablas con motores ReplacingMergeTree y CollapsingMergeTree. #84851 (Anton Popov).
  • Almacena correctamente todos los ajustes en los metadatos de las tablas que usan el motor object queue. #84860 (Antonio Andelic).
  • Se corrigió el recuento total de watches devuelto por Keeper. #84890 (Antonio Andelic).
  • Se corrigieron las actualizaciones ligeras en tablas con motor ReplicatedMergeTree creadas en servidores con una versión inferior a la 25.7. #84933 (Anton Popov).
  • Se corrigieron las actualizaciones ligeras en tablas con motor MergeTree sin replicación después de ejecutar una consulta ALTER TABLE ... REPLACE PARTITION. #84941 (Anton Popov).
  • Corrige la generación de nombres de columna para que los literales booleanos usen “true”/“false” en lugar de “1”/“0”, evitando conflictos entre nombres de columna de literales booleanos y enteros en las consultas. #84945 (xiaohuanlin).
  • Se corrige el desajuste en el seguimiento de memoria del background schedule pool y del ejecutor. #84946 (Azat Khuzhin).
  • Corrige posibles problemas de ordenación incorrecta en el motor de tabla Merge. #85025 (Xiaozhe Yu).
  • Implementa las API que faltan para DiskEncrypted. #85028 (Azat Khuzhin).
  • Añade una comprobación para evitar un fallo si se usa una subconsulta correlacionada en un contexto distribuido. Corrige #82205. #85030 (Dmitry Novik).
  • Ahora, Iceberg ya no intenta almacenar en caché la versión relevante de la instantánea entre consultas select y siempre intenta resolver la instantánea correctamente. El intento anterior de almacenar en caché la instantánea de Iceberg provocó problemas al usar una tabla Iceberg con time travel. #85038 (Daniil Ivanik).
  • Se corrigió un doble free en AzureIteratorAsync. #85064 (Nikita Taranov).
  • Se mejora el mensaje de error al intentar crear un usuario identificado con JWT. #85072 (Konstantin Bogdanov).
  • Se corrigió la limpieza de las partes de parche en ReplicatedMergeTree. Anteriormente, el resultado de una actualización ligera podía no ser visible temporalmente en la réplica hasta que se descargara desde otra réplica la parte fusionada o mutada que materializa las partes de parche. #85121 (Anton Popov).
  • Se corrige illegal_type_of_argument en mv cuando los tipos difieren. #85135 (Sema Checherinda).
  • Se soluciona un fallo de segmentación en la implementación de delta-kernel. #85160 (Kseniia Sumarokova).
  • Se corrige la recuperación de bases de datos Replicated cuando el traslado del archivo de metadatos tarda mucho tiempo. #85177 (Tuan Pham Anh).
  • Se corrigió Not-ready Set para IN (subquery) dentro de la configuración additional_table_filters expression. #85210 (Nikolai Kochetov).
  • Elimina las llamadas innecesarias a getStatus() en las consultas SYSTEM DROP REPLICA. Corrige el caso en el que una tabla se elimina en segundo plano y se lanza la excepción Shutdown for storage is called. #85220 (Nikolay Degterinsky).
  • Soluciona una condición de carrera en la implementación delta-kernel del motor DeltaLake. #85221 (Kseniia Sumarokova).
  • Se corrige la lectura de datos particionados con delta-kernel deshabilitado en el motor DeltaLake. Esto presentaba un fallo en la versión 25.7 (https://github.com/ClickHouse/ClickHouse/pull/81136). #85223 (Kseniia Sumarokova).
  • Se añadieron las validaciones que faltaban para la longitud de los nombres de tabla en las consultas CREATE OR REPLACE y RENAME. #85326 (Michael Kolupaev).
  • Corrige la creación de RMV en una nueva réplica de la base de datos Replicated si se elimina DEFINER. #85327 (Nikolay Degterinsky).
  • Corrige la escritura en Iceberg de tipos complejos. #85330 (Konstantin Vedernikov).
  • No se admite la escritura de límites inferior y superior para tipos complejos. #85332 (Konstantin Vedernikov).
  • Corrige un error lógico al leer desde funciones de almacenamiento de objetos a través de una tabla Distributed o de la función de tabla remote. Corrige: #84658, corrige #85173, corrige #52022. #85359 (alesapin).
  • Corrige la copia de seguridad de partes con proyecciones defectuosas. #85362 (Antonio Andelic).
  • Prohibir el uso de la columna _part_offset en proyecciones en las versiones hasta que se estabilice. #85372 (Sema Checherinda).
  • Se corrigen un fallo y la corrupción de datos durante ALTER UPDATE en JSON. #85383 (Pavel Kruglov).
  • Las consultas con réplicas paralelas que usan la optimización de lectura inversa en orden pueden producir resultados incorrectos. #85406 (Igor Nikonov).
  • Corrige un posible UB (fallos) en caso de MEMORY_LIMIT_EXCEEDED durante la deserialización de String. #85440 (Azat Khuzhin).
  • Se corrigen las métricas incorrectas KafkaAssignedPartitions y KafkaConsumersWithAssignment. #85494 (Ilya Golshtein).
  • Se corrigió la subestimación de la estadística de bytes procesados cuando se utiliza PREWHERE (explícito o automático). #85495 (Michael Kolupaev).
  • Corrige la condición de retorno anticipado para la ralentización de la tasa de solicitudes de S3: ahora basta con que s3&#95;slow&#95;all&#95;threads&#95;after&#95;network&#95;error o backup&#95;slow&#95;all&#95;threads&#95;after&#95;retryable&#95;s3&#95;error sea verdadero para activar la ralentización cuando todos los hilos están en pausa debido a un error de S3 reintentable, en lugar de exigir ambos. #85505 (Julia Kartseva).
  • Este PR corrige la resolución de metadatos al consultar tablas Iceberg a través de un catálogo REST. … #85531 (Saurabh Kumar Ojha).
  • Se corrigió un fallo poco frecuente en las inserciones asíncronas al cambiar la configuración log_comment o insert_deduplication_token. #85540 (Anton Popov).
  • Se ignoraban parámetros como date_time_input_format al usar HTTP con multipart/form-data. #85570 (Sema Checherinda).
  • Se corrige el enmascaramiento de secretos en las funciones de tabla icebergS3Cluster e icebergAzureCluster. #85658 (MikhailBurdukov).
  • Se corrige la pérdida de precisión en JSONExtract al convertir números JSON a tipos Decimal. Ahora, los valores numéricos de JSON conservan su representación decimal exacta, lo que evita errores de redondeo de coma flotante. #85665 (ssive7b).
  • Se corrigió LOGICAL_ERROR al usar COMMENT COLUMN IF EXISTS en la misma instrucción ALTER después de DROP COLUMN. La cláusula IF EXISTS ahora omite correctamente la operación COMMENT cuando la columna se ha eliminado dentro de la misma instrucción. #85688 (xiaohuanlin).
  • Se corrigió la lectura del recuento desde la caché para Delta Lake. #85704 (Kseniia Sumarokova).
  • Se corrige un fallo de segmentación en CoalescingMergeTree con cadenas grandes. Se cierra #84582. #85709 (Konstantin Vedernikov).
  • Se actualiza la marca de tiempo de los metadatos en las escrituras de Iceberg. #85711 (Konstantin Vedernikov).
  • Usar distributed_depth como indicador de *la función Cluster era incorrecto y podía provocar duplicación de datos; use client_info.collaborate_with_initiator en su lugar. #85734 (Konstantin Bogdanov).
  • Spark no puede leer archivos de eliminación por posición. #85762 (Konstantin Vedernikov).
  • Se corrige send_logs_source_regexp (tras la refactorización del logging asíncrono en #85105). #85797 (Azat Khuzhin).
  • Corrige una posible inconsistencia en los diccionarios con update_field en errores MEMORY_LIMIT_EXCEEDED. #85807 (Azat Khuzhin).
  • Se agregó compatibilidad con constantes globales de la sentencia WITH para INSERT SELECT distribuido en paralelo con la tabla de destino Distributed. Antes, la consulta podía generar un error Unknown expression identifier. #85811 (Nikolai Kochetov).
  • Se enmascaran las credenciales para deltaLakeAzure, deltaLakeCluster, icebergS3Cluster e icebergAzureCluster. #85889 (Julian Maicher).
  • Corrige un error lógico al intentar CREATE ... AS (SELECT * FROM s3Cluster(...)) con DatabaseReplicated. #85904 (Konstantin Bogdanov).
  • Corrige las solicitudes HTTP realizadas por la table function url() para que incluyan correctamente los números de puerto en el encabezado Host al acceder a puertos no estándar. Esto resuelve errores de autenticación al usar URL prefirmadas con servicios compatibles con S3, como MinIO, que se ejecutan en puertos personalizados, algo habitual en entornos de desarrollo. (Corrige #85898). #85921 (Tom Quist).
  • Ahora, Unity catalog ignorará los esquemas con tipos de datos inusuales en las tablas no delta. Corrige #85699. #85950 (alesapin).
  • Corrige la admisión de valores NULL en los campos de Iceberg. #85977 (Konstantin Vedernikov).
  • Se corrigió un error en la recuperación de la base de datos Replicated: si el nombre de una tabla contenía el símbolo %, podía volver a crearse con un nombre distinto durante la recuperación. #85987 (Alexander Tokmakov).
  • Corrige los fallos en la restauración de copias de seguridad debidos al error BACKUP_ENTRY_NOT_FOUND al restaurar una tabla Memory vacía. #86012 (Julia Kartseva).
  • Se agregan comprobaciones para sharding_key durante ALTER de la tabla Distributed. Anteriormente, un ALTER incorrecto podía dañar la definición de la tabla e impedir el reinicio del servidor. #86015 (Nikolay Degterinsky).
  • Evita crear un archivo de eliminación de Iceberg vacío. #86061 (Konstantin Vedernikov).
  • Se corrigieron valores de configuración elevados que provocaban fallos en las tablas S3Queue y en el reinicio de réplicas. #86074 (Nikolay Degterinsky).

mejora de compilación/pruebas/empaquetado

Lanzamiento de ClickHouse 25.7, 2025-07-24

Cambio incompatible con versiones anteriores

  • Cambios en la función extractKeyValuePairs: se introduce un nuevo argumento, unexpected_quoting_character_strategy, que controla qué ocurre cuando se encuentra inesperadamente un quoting_character al leer una clave o un valor sin comillas. El valor puede ser uno de los siguientes: invalid, accept o promote. invalid descartará la clave y volverá al estado de espera de clave. accept lo tratará como parte de la clave. promote descartará el carácter anterior y comenzará a analizarlo como una clave entre comillas. Además, después de analizar un valor entre comillas, solo se analizará la siguiente clave si se encuentra un delimitador de par. #80657 (Arthur Passos).
  • Se admite una coincidencia de cero bytes en la función countMatches. Los usuarios que deseen mantener el comportamiento anterior pueden habilitar la configuración count_matches_stop_at_empty_match. #81676 (Elmi Ahmadov).
  • Se usan limitadores de todo el servidor para operaciones locales (max_local_read_bandwidth_for_server y max_local_write_bandwidth_for_server) y remotas (max_remote_read_network_bandwidth_for_server y max_remote_write_network_bandwidth_for_server) al generar BACKUPs, además de sus configuraciones específicas del servidor (max_backup_bandwidth_for_server, max_mutations_bandwidth_for_server y max_merges_bandwidth_for_server). #81753 (Sergei Trifonov).
  • Se prohíbe la creación de una tabla sin columnas insertables. #81835 (Pervakov Grigorii).
  • Se paralelizan las funciones de clúster por archivos dentro de archivos comprimidos. En versiones anteriores, el archivo comprimido completo (como zip, tar o 7z) era una unidad de trabajo. Se añadió una nueva configuración, cluster_function_process_archive_on_multiple_nodes, cuyo valor predeterminado es true. Si se establece en true, aumenta el rendimiento del procesamiento de archivos comprimidos en las funciones de clúster. Debe establecerse en false por compatibilidad y para evitar errores durante la actualización a 25.7+ si se usan funciones de clúster con archivos comprimidos en versiones anteriores. #82355 (Kseniia Sumarokova).
  • La consulta SYSTEM RESTART REPLICAS provocaba la activación de tablas en la base de datos Lazy, incluso sin acceso a esa base de datos, y esto ocurría mientras esas tablas se eliminaban de forma concurrente. Nota: ahora SYSTEM RESTART REPLICAS solo reiniciará réplicas en las bases de datos donde tenga permiso para SHOW TABLES, lo cual es lo esperable. #83321 (Alexey Milovidov).

nueva funcionalidad

  • Se añadió compatibilidad con actualizaciones ligeras para tablas de la familia MergeTree. Las actualizaciones ligeras pueden utilizarse con una nueva sintaxis: UPDATE <table> SET col1 = val1, col2 = val2, ... WHERE <condition>. Se añadió la implementación de eliminaciones ligeras mediante actualizaciones ligeras. Puede habilitarse estableciendo lightweight_delete_mode = 'lightweight_update'. #82004 (Anton Popov).
  • Soporte para tipos complejos en la evolución del esquema de Iceberg. #73714 (Konstantin Vedernikov).
  • Se añade compatibilidad con INSERTs en tablas Iceberg. #82692 (Konstantin Vedernikov).
  • Lee archivos de datos de Iceberg por ID de campo. Esto mejora la compatibilidad con Iceberg: los campos pueden cambiar de nombre en los metadatos y seguir asignándose a nombres distintos en los archivos Parquet subyacentes. Esto cierra #83065. #83653 (Konstantin Vedernikov).
  • Ahora ClickHouse admite archivos metadata.json comprimidos para Iceberg. Corrige #70874. #81451 (alesapin).
  • Compatibilidad con TimestampTZ en el catálogo de Glue. Esto cierra #81654. #83132 (Konstantin Vedernikov).
  • Agrega generación de SQL con IA al cliente de ClickHouse. Ahora puedes generar consultas SQL a partir de descripciones en lenguaje natural anteponiendo ?? a la consulta. Compatible con los proveedores OpenAI y Anthropic, con detección automática del esquema. #83314 (Kaushik Iska).
  • Se añade una función para escribir tipos Geo en formato WKB. #82935 (Konstantin Vedernikov).
  • Se introdujeron dos nuevos tipos de acceso, READ y WRITE, para Sources, y quedan obsoletos todos los tipos de acceso anteriores relacionados con Sources. Antes: GRANT S3 ON *.* TO user; ahora: GRANT READ, WRITE ON S3 TO user. Esto también permite separar los permisos READ y WRITE para Sources, por ejemplo: GRANT READ ON * TO user, GRANT WRITE ON S3 TO user. La funcionalidad se controla mediante la configuración access_control_improvements.enable_read_write_grants y está deshabilitada de forma predeterminada. #73659 (pufit).
  • NumericIndexedVector: nueva estructura de datos vectorial respaldada por compresión bit-sliced y bitmap Roaring, junto con más de 20 funciones para crear, analizar y realizar aritmética punto a punto. Puede reducir el almacenamiento y acelerar los JOIN, filtros y agregaciones en datos dispersos. Implementa #70582 y el artículo “Large-Scale Metric Computation in Online Controlled Experiment Platform” de T. Xiong e Y. Wang de VLDB 2024. #74193 (FriendLey).
  • Ahora se admite el ajuste de carga de trabajo max_waiting_queries. Puede utilizarse para limitar el tamaño de la cola de consultas. Si se alcanza el límite, todas las consultas posteriores se cancelarán con el error SERVER_OVERLOADED. #81250 (Oleg Doronin).
  • Se añaden funciones financieras: financialInternalRateOfReturnExtended (XIRR), financialInternalRateOfReturn (IRR), financialNetPresentValueExtended (XNPV), financialNetPresentValue (NPV). #81599 (Joanna Hulboj).
  • Se añaden las funciones geoespaciales polygonsIntersectCartesian y polygonsIntersectSpherical para comprobar si dos polígonos se intersecan. #81882 (Paul Lamb).
  • Se admite la columna virtual _part_granule_offset en las tablas de la familia MergeTree. Esta columna indica el índice, con base cero, del gránulo o marca al que pertenece cada fila dentro de su data part. Esto resuelve #79572. #82341 (Amos Bird). #82341 (Amos Bird)
  • Se agregaron las funciones SQL colorSRGBToOkLCH y colorOkLCHToSRGB para convertir colores entre los espacios de color sRGB y OkLCH. #83679 (Fgrtue).
  • Se permiten parámetros en las consultas CREATE USER para los nombres de usuario. #81387 (Diskein).
  • La tabla system.formats ahora contiene información ampliada sobre los formatos, como el tipo de contenido HTTP, las capacidades de inferencia de esquemas, etc. #81505 (Alexey Milovidov).

Funcionalidad experimental

  • Se añadieron las funciones searchAny y searchAll, que son herramientas de uso general para buscar en índices de texto. #80641 (Elmi Ahmadov).
  • El índice de texto ahora admite el nuevo tokenizador split. #81752 (Elmi Ahmadov).
  • Se cambió el valor predeterminado de la granularidad de índice para los índices text a 64. Esto mejora el rendimiento esperado de la consulta de prueba promedio en benchmarks internos. #82162 (Jimmy Aguilar Mena).
  • El bitmap de 256 bits almacena las etiquetas salientes de un estado de forma ordenada, pero los estados salientes se guardan en disco en el orden en que aparecen en la tabla hash. Por lo tanto, una etiqueta podía apuntar a un siguiente estado incorrecto al leer desde disco. #82783 (Elmi Ahmadov).
  • Se habilitó la compresión zstd para el blob del árbol FST en índices de texto. #83093 (Elmi Ahmadov).
  • El índice de similitud vectorial pasó a beta. Se introdujo la opción alias enable_vector_similarity_index, que debe estar habilitada para usar el índice de similitud vectorial. #83459 (Robert Schulze).
  • Se eliminó la lógica experimental de send_metadata relacionada con la replicación experimental zero-copy. Nunca se usó y nadie da soporte a este código. Como ni siquiera había pruebas relacionadas, es muy probable que lleve mucho tiempo roto. #82508 (alesapin).
  • Se integró StorageKafka2 en system.kafka_consumers. #82652 (János Benjamin Antal).
  • Se añadieron estimaciones mediante estadísticas para CNF/DNF complejas; por ejemplo, (a < 1 and a > 0) or b = 3. #82663 (Han Fei).

Mejora del rendimiento

  • Se introduce el logging asíncrono. Cuando los logs se escriben en un dispositivo lento, ya no se retrasan las consultas. #82516 (Raúl Marín). Se limita el número máximo de elementos retenidos en la cola. #83214 (Raúl Marín).
  • El INSERT SELECT Distributed en paralelo está habilitado de forma predeterminada en el modo en que INSERT SELECT se ejecuta en cada segmento de forma independiente; consulte la configuración parallel_distributed_insert_select. #83040 (Igor Nikonov).
  • Cuando la consulta de agregación contiene solo una función count() sobre una columna no Nullable, la lógica de agregación queda totalmente integrada al sondear la tabla hash. Esto evita asignar y mantener estado de agregación, lo que reduce significativamente el uso de memoria y la sobrecarga de CPU. Esto aborda parcialmente #81982. #82104 (Amos Bird).
  • Se optimizó el rendimiento de HashJoin al eliminar el bucle adicional sobre las tablas hash en el caso habitual de una sola columna de clave; además, se eliminaron las comprobaciones de null_map y join_mask cuando siempre son true/false. #82308 (Nikita Taranov).
  • Optimización menor para el combinador -If. #78454 (李扬).
  • Las consultas de búsqueda vectorial que utilizan un índice de similitud vectorial se completan con menor latencia gracias a la reducción de las lecturas de almacenamiento y al menor uso de CPU. #79103 (Shankar Iyer).
  • Se tiene en cuenta merge_tree_min_{rows,bytes}_for_seek en filterPartsByQueryConditionCache para alinearlo con otros métodos que filtran por índices. #80312 (李扬).
  • Convertir en multihilo la pipeline posterior al paso TOTALS. #80331 (UnamedRus).
  • Se corrigió el filtro por clave en los almacenamientos Redis y KeeperMap. #81833 (Pervakov Grigorii).
  • Se añade la nueva configuración min_joined_block_size_rows (análoga a min_joined_block_size_bytes; valor predeterminado: 65409) para controlar el tamaño mínimo de los bloques (en filas) de entrada y salida de JOIN (si el algoritmo de JOIN lo admite). Los bloques pequeños se combinarán. #81886 (Nikita Taranov).
  • ATTACH PARTITION ya no provoca la eliminación de todas las memorias caché. #82377 (Alexey Milovidov).
  • Optimiza el plan generado para las subconsultas correlacionadas eliminando operaciones JOIN redundantes mediante el uso de clases de equivalencia. Si hay expresiones equivalentes para todas las columnas correlacionadas, no se genera CROSS JOIN si la opción query_plan_correlated_subqueries_use_substitution está habilitada. #82435 (Dmitry Novik).
  • Leer solo las columnas necesarias en una subconsulta correlacionada cuando aparece como argumento de la función EXISTS. #82443 (Dmitry Novik).
  • Se aceleró ligeramente la comparación de árboles de consultas durante el análisis de consultas. #82617 (Nikolai Kochetov).
  • Agregar alineación al Counter de ProfileEvents para reducir el false sharing. #82697 (Jiebin Sun).
  • Las optimizaciones para null_map y JoinMask de #82308 también se aplicaron al caso de JOIN con múltiples disyunciones. Además, se optimizó la estructura de datos KnownRowsHolder. #83041 (Nikita Taranov).
  • Se utiliza un std::vector<std::atomic_bool> simple para las banderas de join y así evitar calcular un hash en cada acceso a ellas. #83043 (Nikita Taranov).
  • No preasigne memoria por adelantado para las columnas de resultados cuando HashJoin usa el modo de salida lazy. Esto no es óptimo, especialmente cuando el número de coincidencias es bajo. Además, conocemos la cantidad exacta de coincidencias una vez finalizado el join, por lo que podemos preasignar con mayor precisión. #83304 (Nikita Taranov).
  • Se minimiza la copia de memoria en las cabeceras de los puertos durante la construcción del pipeline. PR original de heymind. #83381 (Raúl Marín).
  • Se mejora el arranque de clickhouse-keeper cuando utiliza almacenamiento rocksdb. #83390 (Antonio Andelic).
  • Evita mantener el bloqueo mientras se crean los datos de la instantánea de almacenamiento, para reducir la contención de bloqueos con cargas concurrentes elevadas. #83510 (Duc Canh Le).
  • Se mejoró el rendimiento del formato de entrada ProtobufSingle al reutilizar el serializador cuando no se producen errores de análisis. #83613 (Eduard Karacharov).
  • Se mejora el rendimiento de la construcción de pipelines, lo que acelera las consultas cortas. #83631 (Raúl Marín).
  • Se optimiza MergeTreeReadersChain::getSampleBlock, lo que acelera las consultas cortas. #83875 (Raúl Marín).
  • Se acelera el listado de tablas en catálogos de datos mediante solicitudes asíncronas. #81084 (alesapin).
  • Añadir jitter al mecanismo de reintento de S3 cuando la configuración s3_slow_all_threads_after_network_error está habilitada. #81849 (zoomxi).

Mejora

  • Colorea los paréntesis de distintos colores para mejorar la legibilidad. #82538 (Konstantin Bogdanov).
  • Se resaltan los metacaracteres en los patrones LIKE/REGEXP a medida que se escribe. Ya lo teníamos en clickhouse-format y en el eco de clickhouse-client, pero ahora también se hace en el prompt de comandos. #82871 (Alexey Milovidov).
  • El resaltado en clickhouse-format y en el eco del cliente funcionará de la misma manera que el resaltado en el prompt de la línea de comandos. #82874 (Alexey Milovidov).
  • Ahora se permiten los discos plain_rewritable para los metadatos de la base de datos. Implemente los métodos moveFile y replaceFile en plain_rewritable para que pueda usarse como disco de base de datos. #79424 (Tuan Pham Anh).
  • Se permiten copias de seguridad de las bases de datos PostgreSQL, MySQL y DataLake. Una copia de seguridad de una base de datos de este tipo solo guardaría la definición, no los datos que contiene. #79982 (Nikolay Degterinsky).
  • La configuración allow_experimental_join_condition se marcó como obsoleta, ya que ahora siempre se permite. #80566 (Vladimir Cherkasov).
  • Se agregan métricas de presión a las métricas asíncronas de ClickHouse. #80779 (Xander Garbett).
  • Se añadieron las métricas MarkCacheEvictedBytes, MarkCacheEvictedMarks, MarkCacheEvictedFiles para hacer un seguimiento de las expulsiones de la caché de marcas. (issue #60989). #80799 (Shivji Kumar Jha).
  • Se admite escribir enum de Parquet como un array de bytes, tal como dicta la especificación. #81090 (Arthur Passos).
  • Una mejora para el motor de tabla DeltaLake: delta-kernel-rs tiene una API ExpressionVisitor que se implementa en este PR y se aplica a la transformación de expresiones en columnas de partición (reemplazará el método antiguo y obsoleto de delta-kernel-rs que usábamos antes en nuestro código). En el futuro, este ExpressionVisitor también permitirá implementar pruning basado en estadísticas y algunas funcionalidades propietarias de Delta Lake. Además, este cambio tiene como objetivo admitir el partition pruning en el motor de tabla DeltaLakeCluster (el resultado de una expresión analizada, ActionsDAG, se serializará y se enviará desde el iniciador junto con la ruta de los datos, porque este tipo de información, necesaria para el pruning, solo está disponible como metainformación en el listado de archivos de datos, que únicamente realiza el iniciador, pero debe aplicarse a los datos en cada server de lectura). #81136 (Kseniia Sumarokova).
  • Conservar los nombres de los elementos al derivar supertipos para las tuplas con nombre. #81345 (lgbo).
  • Contar manualmente los mensajes consumidos para evitar depender del offset previamente confirmado en StorageKafka2. #81662 (János Benjamin Antal).
  • Se añadió clickhouse-keeper-utils, una nueva herramienta de línea de comandos para gestionar y analizar datos de ClickHouse Keeper. La herramienta permite volcar el estado a partir de snapshots y changelogs, analizar archivos de changelog y extraer rangos específicos de logs. #81677 (Antonio Andelic).
  • Los limitadores de ancho de banda de red, tanto globales como por usuario, nunca se restablecen, lo que garantiza que nunca se superen los límites de max_network_bandwidth_for_all_users y max_network_bandwidth_for_all_users. #81729 (Sergei Trifonov).
  • Se admite la escritura de archivos GeoParquet como formato de salida. #81784 (Konstantin Vedernikov).
  • Se prohíbe iniciar la mutación alter RENAME COLUMN si va a renombrar alguna columna que actualmente esté afectada por una mutación de datos incompleta. #81823 (Mikhail Artemenko).
  • La cabecera Connection se envía al final de las cabeceras cuando se sabe que la conexión debe mantenerse. #81951 (Sema Checherinda).
  • Ajuste la cola de los servidores TCP (64 de forma predeterminada) según listen_backlog (4096 de forma predeterminada). #82045 (Azat Khuzhin).
  • Se añadió la capacidad de recargar max_local_read_bandwidth_for_server y max_local_write_bandwidth_for_server en caliente, sin reiniciar el servidor. #82083 (Kai Zhu).
  • Se agregó compatibilidad para borrar todas las advertencias de la tabla system.warnings mediante TRUNCATE TABLE system.warnings. #82087 (Vladimir Cherkasov).
  • Se corrigió la poda de particiones en las funciones de clúster de lago de datos. #82131 (Kseniia Sumarokova).
  • Se corrige la lectura de datos particionados en la función de tabla DeltaLakeCluster. En este PR se incrementa la versión del protocolo de las funciones de clúster, lo que permite enviar información adicional desde el iniciador a las réplicas. Esta información adicional contiene la expresión de transformación de delta-kernel, necesaria para interpretar las columnas de partición (y otros elementos en el futuro, como las columnas generadas, etc.). #82132 (Kseniia Sumarokova).
  • La función reinterpret ahora admite la conversión a Array(T), donde T es un tipo de datos de tamaño fijo (incidencia #82621). #83399 (Shankar Iyer).
  • Ahora la base de datos Datalake lanza una excepción más adecuada. Corrige #81211. #82304 (alesapin).
  • Mejora de CROSS JOIN al hacer que HashJoin::needUsedFlagsForPerRightTableRow devuelva false. #82379 (lgbo).
  • Permite escribir/leer columnas map como Array de Tuples. #82408 (MikhailBurdukov).
  • Enumera las licencias de los paquetes crate de Rust en system.licenses. #82440 (Raúl Marín).
  • Ahora se pueden usar macros como {uuid} en la opción keeper_path del motor de tabla S3Queue. #82463 (Nikolay Degterinsky).
  • Mejora de Keeper: mover archivos de changelog entre discos en un hilo en segundo plano. Anteriormente, mover el changelog a un disco diferente bloqueaba Keeper por completo hasta que finalizara el traslado. Esto provocaba una degradación del rendimiento si el traslado era una operación larga (p. ej., a un disco S3). #82485 (Antonio Andelic).
  • Mejora de Keeper: se añadió la nueva configuración keeper_server.cleanup_old_and_ignore_new_acl. Si está habilitada, se eliminarán las ACL de todos los nodos, mientras que se ignorarán las ACL de las nuevas solicitudes. Si el objetivo es eliminar por completo las ACL de los nodos, es importante mantener esta configuración habilitada hasta que se cree un nuevo snapshot. #82496 (Antonio Andelic).
  • Se añadió una nueva configuración del servidor, s3queue_disable_streaming, que deshabilita el streaming en las tablas con el motor de tabla S3Queue. Esta configuración puede modificarse sin reiniciar el servidor. #82515 (Kseniia Sumarokova).
  • Se refactorizó la función de redimensionamiento dinámico de la caché del sistema de archivos. Se añadieron más registros para la introspección. #82556 (Kseniia Sumarokova).
  • clickhouse-server sin un archivo de configuración también escuchará en el puerto 9005 de PostgreSQL, como con la configuración predeterminada. #82633 (Alexey Milovidov).
  • En ReplicatedMergeTree::executeMetadataAlter, obtenemos el StorageID y, sin adquirir DDLGuard, intentamos llamar a IDatabase::alterTable. En ese intervalo, técnicamente podríamos haber intercambiado la tabla en cuestión por otra, por lo que, al obtener la definición, podríamos obtener la incorrecta. Para evitarlo, añadimos una comprobación independiente para verificar que los UUID coincidan al intentar llamar a IDatabase::alterTable. #82666 (Nikolay Degterinsky).
  • Al adjuntar una base de datos con un disco remoto de solo lectura, añada manualmente los UUID de las tablas en DatabaseCatalog. #82670 (Tuan Pham Anh).
  • Se impide que el usuario use nan e inf con NumericIndexedVector. Corrige #82239 y algo más. #82681 (Raufs Dunamalijevs).
  • No omita los valores cero en los formatos de las cabeceras X-ClickHouse-Progress y X-ClickHouse-Summary. #82727 (Nikita Mikhaylov).
  • Mejora de Keeper: admite permissions específicos para la ACL world:anyone. #82755 (Antonio Andelic).
  • No permitir RENAME COLUMN ni DROP COLUMN en columnas enumeradas explícitamente para sumar en SummingMergeTree. Cierra #81836. #82821 (Alexey Milovidov).
  • Se mejora la precisión de la conversión de Decimal a Float32. Se implementa la conversión de Decimal a BFloat16. Cierra #82660. #82823 (Alexey Milovidov).
  • Las barras de desplazamiento de la interfaz web se verán un poco mejor. #82869 (Alexey Milovidov).
  • clickhouse-server con configuración integrada permitirá usar la Web UI al devolver una respuesta HTTP OPTIONS. #82870 (Alexey Milovidov).
  • Se añadió soporte para especificar ACL adicionales de Keeper para rutas en la configuración. Si desea añadir ACL adicionales para una ruta específica, defínalas en la configuración, en zookeeper.path_acls. #82898 (Antonio Andelic).
  • Ahora, la instantánea de mutaciones se generará a partir de la instantánea de las partes visibles. Además, los contadores de mutaciones utilizados en la instantánea se recalcularán a partir de las mutaciones incluidas. #82945 (Mikhail Artemenko).
  • Se añade un ProfileEvent cuando Keeper rechaza una escritura debido al límite de memoria flexible. #82963 (Xander Garbett).
  • Se añaden las columnas commit_time y commit_id a system.s3queue_log. #83016 (Kseniia Sumarokova).
  • En algunos casos, necesitamos varias dimensiones para nuestras métricas. Por ejemplo, contabilizar los merges fallidos o las mutaciones fallidas por código de error, en lugar de tener un único contador. Se introduce system.dimensional_metrics, que hace exactamente eso y añade la primera métrica dimensional, llamada failed_merges. #83030 (Miсhael Stetsyuk).
  • Consolidar las advertencias sobre configuraciones desconocidas en clickhouse client y registrarlas de forma resumida. #83042 (Bharat Nallan).
  • El cliente de ClickHouse ahora indica el puerto local cuando se produce un error de conexión. #83050 (Jianfei Hu).
  • Se ha mejorado ligeramente el manejo de errores en AsynchronousMetrics. Si el directorio /sys/block existe pero no es accesible, el servidor se iniciará sin supervisar los dispositivos de bloque. Cierra #79229. #83115 (Alexey Milovidov).
  • Apagar SystemLogs después de las tablas ordinarias (y antes de las system tables, en lugar de antes de las ordinarias). #83134 (Kseniia Sumarokova).
  • Se añadieron logs para el proceso de apagado de S3Queue. #83163 (Kseniia Sumarokova).
  • Posibilidad de interpretar Time y Time64 en formato MM:SS, M:SS, SS o S. #83299 (Yarik Briukhovetskyi).
  • Cuando distributed_ddl_output_mode='*_only_active', no se espere a nuevas réplicas ni a réplicas recuperadas que tengan un retraso de replicación superior a max_replication_lag_to_enqueue. Esto debería ayudar a evitar DDL task is not finished on some hosts cuando una nueva réplica pasa a estar activa después de completar la inicialización o la recuperación, pero ha acumulado un gran volumen de log de replicación durante la inicialización. Además, se implementa la consulta SYSTEM SYNC DATABASE REPLICA STRICT, que espera a que el log de replicación quede por debajo de max_replication_lag_to_enqueue. #83302 (Alexander Tokmakov).
  • No incluir descripciones demasiado largas de las acciones de expresión en los mensajes de excepción. Cierra #83164. #83350 (Alexey Milovidov).
  • Se añade la capacidad de analizar el prefijo y el sufijo de una parte, así como de comprobar la cobertura de las columnas no constantes. #83377 (Mikhail Artemenko).
  • Se unificaron los nombres de los parámetros de ODBC y JDBC al usar colecciones con nombre. #83410 (Andrey Zvonov).
  • Cuando el almacenamiento se está cerrando, getStatus lanza una excepción ErrorCodes::ABORTED. Anteriormente, esto hacía fallar la consulta SELECT. Ahora capturamos las excepciones ErrorCodes::ABORTED y, en su lugar, las ignoramos deliberadamente. #83435 (Miсhael Stetsyuk).
  • Añade métricas de recursos del proceso (como UserTimeMicroseconds, SystemTimeMicroseconds, RealTimeMicroseconds) a los eventos de perfil de part&#95;log para las entradas MergeParts. #83460 (Vladimir Cherkasov).
  • Se habilitan de forma predeterminada las banderas de funcionalidad create_if_not_exists, check_not_exists y remove_recursive en Keeper, lo que permite nuevos tipos de solicitudes. #83488 (Antonio Andelic).
  • Detenga el streaming de S3(Azure/etc)Queue antes de apagar cualquier tabla durante el apagado del servidor. #83530 (Kseniia Sumarokova).
  • Permitir Date/Date32 como enteros en los formatos de entrada JSON. #83597 (MikhailBurdukov).
  • Se hicieron más fáciles de leer los mensajes de excepción para determinadas situaciones al cargar y añadir proyecciones. #83728 (Robert Schulze).
  • Se introduce una opción de configuración para omitir las comprobaciones de integridad de la suma de comprobación del binario de clickhouse-server. Resuelve #83637. #83749 (Rafael Roquetto).

corrección de error (fallo visible para el usuario en una versión estable oficial)

  • Se corrige el valor predeterminado incorrecto de la opción --reconnect en clickhouse-benchmark. Se cambió por error en #79465. #82677 (Alexey Milovidov).
  • Corrige el formato inconsistente de CREATE DICTIONARY. Cierra #82105. #82829 (Alexey Milovidov).
  • Corrige el formato inconsistente de TTL cuando contiene una función materialize. Cierra #82828. #82831 (Alexey Milovidov).
  • Se corrige la inconsistencia en el formato de EXPLAIN AST en una subconsulta cuando contiene opciones de salida como INTO OUTFILE. Cierra #82826. #82840 (Alexey Milovidov).
  • Se corrige el formato inconsistente de las expresiones entre paréntesis con alias en este contexto cuando no se permiten alias. Cierra #82836. Cierra #82837. #82867 (Alexey Milovidov).
  • Utilice el código de error correcto al multiplicar el estado de una función de agregación por IPv4. Cierra #82817. #82818 (Alexey Milovidov).
  • Se corrige un error lógico en la caché del sistema de archivos: “Having zero bytes but range is not finished”. #81868 (Kseniia Sumarokova).
  • Recalcula el índice min-max cuando TTL reduce las filas para garantizar la corrección de los algoritmos que dependen de este, como minmax_count_projection. Esto resuelve #77091. #77166 (Amos Bird).
  • En las consultas que combinan ORDER BY ... LIMIT BY ... LIMIT N, cuando ORDER BY se ejecuta como PartialSorting, el contador rows_before_limit_at_least ahora refleja el número de filas consumidas por la cláusula LIMIT, en lugar del número de filas consumidas por la transformación de ordenación. #78999 (Eduard Karacharov).
  • Corrige el salto excesivo de gránulos al filtrar con regexp sobre índices token/ngram que contienen alternancia y una primera alternativa no literal. #79373 (Eduard Karacharov).
  • Se ha corregido un error lógico con el operador <=> y el almacenamiento Join; ahora la consulta devuelve el código de error correcto. #80165 (Vladimir Cherkasov).
  • Se corrige un cierre inesperado en la función loop cuando se usa con la familia de funciones remote. Se garantiza que se respete la cláusula LIMIT en loop(remote(...)). #80299 (Julia Kartseva).
  • Se corrige el comportamiento incorrecto de las funciones to_utc_timestamp y from_utc_timestamp al procesar fechas anteriores al epoch de Unix (1970-01-01) y posteriores a la fecha máxima (2106-02-07 06:28:15). Ahora estas funciones ajustan correctamente los valores al inicio del epoch y a la fecha máxima, respectivamente. #80498 (Surya Kant Ranjan).
  • Para algunas consultas ejecutadas con réplicas paralelas, las optimizaciones de lectura en orden podían aplicarse en el iniciador, pero no en los nodos remotos. Esto provocaba que el coordinador de réplicas paralelas (en el iniciador) y los nodos remotos utilizaran modos de lectura distintos, lo cual constituye un error lógico. #80652 (Igor Nikonov).
  • Corrige un error lógico al materializar una proyección cuando el tipo de la columna se cambió a Nullable. #80741 (Pavel Kruglov).
  • Se corrigió el recálculo incorrecto de TTL en TTL GROUP BY al actualizar el TTL. #81222 (Evgeniy Ulasik).
  • Se corrigió un error por el que el bloom filter de Parquet aplicaba incorrectamente una condición como WHERE function(key) IN (...) como si fuera WHERE key IN (...). #81255 (Michael Kolupaev).
  • Se corrigió un posible bloqueo en Aggregator en caso de que se produjera una excepción durante la fusión. #81450 (Nikita Taranov).
  • Se corrigió InterpreterInsertQuery::extendQueryLogElemImpl para añadir comillas invertidas a los nombres de las bases de datos y las tablas cuando sea necesario (p. ej., cuando los nombres contienen caracteres especiales como -). #81528 (Ilia Shvyrialkin).
  • Se corrige la ejecución de IN con transform_null_in=1 cuando hay un NULL en el argumento izquierdo y un resultado de subconsulta no Nullable. #81584 (Pavel Kruglov).
  • No validar tipos experimentales/sospechosos en la ejecución de expresiones default/materialize al leer de una tabla existente. #81618 (Pavel Kruglov).
  • Corrige “Context has expired” durante las fusiones cuando se usa dict en una expresión TTL. #81690 (Azat Khuzhin).
  • Se corrige la monotonía de la función cast. #81722 (zoomxi).
  • Se corrige el problema por el que no se leen las columnas necesarias durante el procesamiento de subconsultas correlacionadas escalares. Corrige #81716. #81805 (Dmitry Novik).
  • En versiones anteriores, el servidor devolvía un contenido excesivo para las solicitudes a /js. Esto resuelve #61890. #81895 (Alexey Milovidov).
  • Anteriormente, las definiciones del motor de tabla MongoDB podían incluir un componente de ruta en el argumento host:port, que se ignoraba sin avisar. La integración de MongoDB rechaza cargar dichas tablas. Con esta corrección, permitimos cargar esas tablas e ignorar el componente de ruta si el motor MongoDB tiene cinco argumentos, tomando el nombre de la base de datos de los argumentos. Nota: La corrección no se aplica a las tablas recién creadas ni a las consultas con la función de tabla mongo, ni tampoco a las fuentes de diccionario ni a las colecciones con nombre. #81942 (Vladimir Cherkasov).
  • Se corrigió un posible fallo en Aggregator en caso de una excepción durante el merge. #82022 (Nikita Taranov).
  • Se corrige el análisis de filtros cuando en la consulta solo se usa una columna de alias constante. Corrige #79448. #82037 (Dmitry Novik).
  • Se corrigió LOGICAL_ERROR y el cierre inesperado posterior al usar la misma columna en el TTL para GROUP BY y SET. #82054 (Pablo Marcos).
  • Se corrige la validación de argumentos de la función de tabla S3 en el enmascaramiento de secretos, lo que evita un posible LOGICAL_ERROR; cierra #80620. #82056 (Vladimir Cherkasov).
  • Corrige condiciones de carrera en Iceberg. #82088 (Azat Khuzhin).
  • Se corrige DatabaseReplicated::getClusterImpl. Si el primer elemento (o los primeros elementos) de hosts tiene id == DROPPED_MARK y no hay otros elementos para el mismo segmento, el primer elemento de shards será un vector vacío, lo que provoca std::out_of_range. #82093 (Miсhael Stetsyuk).
  • Se corrige un error de copiar y pegar en arraySimilarity y se prohíbe el uso de pesos UInt32 e Int32. Se actualizan las pruebas y la documentación. #82103 (Mikhail f. Shiryaev).
  • Se corrige el error Not found column en consultas con arrayJoin en la condición WHERE e IndexSet. #82113 (Nikolai Kochetov).
  • Corrige un error en la integración con el catálogo de Glue. Ahora ClickHouse puede leer tablas con tipos de datos anidados en las que algunas subcolumnas contienen valores decimales, por ejemplo: map<string, decimal(9, 2)>. Corrige #81301. #82114 (alesapin).
  • Se corrige una degradación del rendimiento en SummingMergeTree introducida en la versión 25.5 en https://github.com/ClickHouse/ClickHouse/pull/79051. #82130 (Pavel Kruglov).
  • Al pasar configuraciones mediante la URI, se tiene en cuenta el último valor. #82137 (Sema Checherinda).
  • Se corrige “Context has expired” en Iceberg. #82146 (Azat Khuzhin).
  • Se corrige un posible interbloqueo en las consultas remotas cuando el servidor está bajo presión de memoria. #82160 (Kirill).
  • Corrige el desbordamiento en las funciones numericIndexedVectorPointwiseAdd, numericIndexedVectorPointwiseSubtract, numericIndexedVectorPointwiseMultiply, numericIndexedVectorPointwiseDivide que se producía al aplicarlas a números grandes. #82165 (Raufs Dunamalijevs).
  • Se corrige un error en las dependencias entre tablas que hacía que las vistas materializadas no detectaran las consultas INSERT. #82222 (Nikolay Degterinsky).
  • Soluciona una posible condición de carrera entre el hilo de sugerencias y el hilo principal del cliente. #82233 (Azat Khuzhin).
  • Ahora ClickHouse puede leer tablas Iceberg del catálogo de Glue tras la evolución del esquema. Corrige #81272. #82301 (alesapin).
  • Se corrige la validación de la configuración de métricas asíncronas asynchronous_metrics_update_period_s y asynchronous_heavy_metrics_update_period_s. #82310 (Bharat Nallan).
  • Se corrige un error lógico al resolver el matcher en una consulta con múltiples JOINs; cierra #81969. #82421 (Vladimir Cherkasov).
  • Añadir una expiración al token de AWS ECS para que pueda recargarse. #82422 (Konstantin Bogdanov).
  • Corrige un error con argumentos NULL en la función CASE. #82436 (Yarik Briukhovetskyi).
  • Corrige las condiciones de carrera en el cliente (al no usar un contexto global) y las anulaciones de session_timezone (anteriormente, si session_timezone se establecía, por ejemplo, en users.xml/las opciones del cliente con un valor no vacío y en el contexto de la consulta con un valor vacío, se usaba el valor de users.xml, aunque esto era incorrecto; ahora el contexto de la consulta siempre tendrá prioridad sobre el contexto global). #82444 (Azat Khuzhin).
  • Se corrigió un problema al desactivar la alineación de límites del búfer en caché en los motores de tablas externas. Se había roto en https://github.com/ClickHouse/ClickHouse/pull/81868. #82493 (Kseniia Sumarokova).
  • Corrige el fallo si se hace un JOIN del almacenamiento de clave-valor con una clave con conversión de tipo. #82497 (Pervakov Grigorii).
  • Se corrige el problema de ocultar los valores de las colecciones nombradas en logs/query_log. Cierra #82405. #82510 (Kseniia Sumarokova).
  • Corrige un posible cierre inesperado en logging al terminar una sesión, ya que user&#95;id a veces podía estar vacío. #82513 (Bharat Nallan).
  • Corrige casos en los que el análisis de Time podía causar problemas con msan. Esto corrige: #82477. #82514 (Yarik Briukhovetskyi).
  • Se impide establecer threadpool_writer_pool_size en cero para garantizar que las operaciones del servidor no se bloqueen. #82532 (Bharat Nallan).
  • Se corrige LOGICAL_ERROR durante el análisis de expresiones de políticas de filas para columnas correlacionadas. #82618 (Dmitry Novik).
  • Corrige el uso incorrecto de los metadatos del objeto padre en la función de tabla mergeTreeProjection cuando enable_shared_storage_snapshot_in_query = 1. Esto corresponde a #82634. #82638 (Amos Bird).
  • Las funciones trim{Left,Right,Both} ahora admiten cadenas de entrada de tipo “FixedString(N)”. Por ejemplo, SELECT trimBoth(toFixedString('abc', 3), 'ac') ahora funciona. #82691 (Robert Schulze).
  • En AzureBlobStorage, para la copia nativa se comparan los métodos de autenticación; si durante este proceso se produce una excepción, se actualizó el código para volver a lectura y copia (es decir, copia no nativa). #82693 (Smita Kulkarni).
  • Se corrige la deserialización de groupArraySample/groupArrayLast en caso de elementos vacíos (la deserialización podía omitir parte de los datos binarios si la entrada estaba vacía; esto puede provocar corrupción al leer los datos y UNKNOWN_PACKET_FROM_SERVER en el protocolo TCP). Esto no afecta a los tipos numéricos ni a los de fecha y hora. #82763 (Pedro Ferreira).
  • Se corrige la copia de seguridad de una tabla Memory vacía, que provocaba que la restauración de la copia de seguridad fallara con el error BACKUP_ENTRY_NOT_FOUND. #82791 (Julia Kartseva).
  • Se corrigió la seguridad ante excepciones en la reescritura de union/intersect/except_default_mode. Cierra #82664. #82820 (Alexey Milovidov).
  • Lleva un control del número de trabajos asíncronos de carga de tablas. Si hay trabajos en ejecución, no actualices tail_ptr en TransactionLog::removeOldEntries. #82824 (Tuan Pham Anh).
  • Se corrigen condiciones de carrera en Iceberg. #82841 (Azat Khuzhin).
  • La optimización de la configuración use_skip_indexes_if_final_exact_mode (introducida en la versión 25.6) podía no seleccionar un rango candidato relevante en función de la configuración del motor MergeTree o de la distribución de los datos. Esto ya se ha resuelto. #82879 (Shankar Iyer).
  • Se establece la sal para los datos de autenticación al analizar desde AST con el tipo SCRAM_SHA256_PASSWORD. #82888 (Tuan Pham Anh).
  • Al usar una implementación de Database sin caché, los metadatos de la tabla correspondiente se eliminan tras devolver las columnas y se invalida la referencia. #82939 (buyval01).
  • Se corrige la modificación de filtros en consultas con una expresión JOIN sobre una tabla con almacenamiento Merge. Corrige #82092. #82950 (Dmitry Novik).
  • Corrige LOGICAL_ERROR en QueryMetricLog: el mutex no puede ser NULL. #82979 (Pablo Marcos).
  • Se corrigió la salida incorrecta de la función formatDateTime cuando el formateador %f se usa junto con formateadores de tamaño variable (p. ej., %M). #83020 (Robert Schulze).
  • Corrige la degradación del rendimiento del analizador habilitado cuando las consultas secundarias siempre leen todas las columnas de las VIEW. Corrige #81718. #83036 (Dmitry Novik).
  • Se corrige un mensaje de error confuso al restaurar una copia de seguridad en un disco de solo lectura. #83051 (Julia Kartseva).
  • No se comprueban las dependencias cíclicas al CREATE table sin dependencias. Esto corrige la degradación del rendimiento en casos de uso con la creación de miles de tablas, introducida en https://github.com/ClickHouse/ClickHouse/pull/65405. #83077 (Pavel Kruglov).
  • Corrige un problema con la lectura implícita de valores Time negativos en la tabla y evita confusiones en la documentación. #83091 (Yarik Briukhovetskyi).
  • No usar partes no relacionadas de un diccionario compartido en la función lowCardinalityKeys. #83118 (Alexey Milovidov).
  • Se corrige la regresión en el uso de subcolumnas con vistas materializadas. Corrige: #82784. #83221 (Nikita Mikhaylov).
  • Se corrigió un cierre inesperado en el cliente debido a que la conexión quedaba en estado desconectado después de un INSERT fallido. #83253 (Azat Khuzhin).
  • Se corrige un fallo al calcular el tamaño de un bloque con columnas vacías. #83271 (Raúl Marín).
  • Se corrige un posible cierre inesperado en el tipo Variant en UNION. #83295 (Pavel Kruglov).
  • Se corrigió LOGICAL_ERROR en clickhouse-local para consultas SYSTEM no compatibles. #83333 (Surya Kant Ranjan).
  • Se corrige no_sign_request para el cliente de S3. Puede usarse para evitar explícitamente la firma de las solicitudes a S3. También puede definirse para endpoints específicos mediante configuraciones basadas en endpoints. #83379 (Antonio Andelic).
  • Corrige un fallo que puede ocurrir en una consulta con la configuración ‘max_threads=1’ cuando se ejecuta bajo carga con la planificación de CPU habilitada. #83387 (Fan Ziqi).
  • Corrige la excepción TOO_DEEP_SUBQUERIES cuando la definición de una CTE hace referencia a otra expresión de tabla con el mismo nombre. #83413 (Dmitry Novik).
  • Se corrige el comportamiento incorrecto por el que, al ejecutar REVOKE S3 ON system.*, se revocan los permisos de S3 para *.*. Esto corrige #83417. #83420 (pufit).
  • No compartir async_read_counters entre consultas. #83423 (Azat Khuzhin).
  • Deshabilitar las réplicas en paralelo cuando una subconsulta incluye FINAL. #83455 (zoomxi).
  • Se resuelve un pequeño desbordamiento de enteros en la configuración del parámetro role_cache_expiration_time_seconds (incidencia #83374). #83461 (wushap).
  • Se corrige un error introducido en https://github.com/ClickHouse/ClickHouse/pull/79963. Al insertar en una MV con un definidor, la comprobación de permisos debe usar los permisos del definidor. Esto corrige #79951. #83502 (pufit).
  • Desactivar la poda de archivos basada en límites para elementos de Array y valores de Map de Iceberg, incluidos todos sus subcampos anidados. #83520 (Daniil Ivanik).
  • Corrige posibles errores por falta de inicialización de la caché del sistema de archivos cuando se usa como almacenamiento temporal de datos. #83539 (Bharat Nallan).
  • Corrección de Keeper: actualizar correctamente el recuento total de watch cuando se eliminan nodos efímeros al cerrar la sesión. #83583 (Antonio Andelic).
  • Se corrigió el uso incorrecto de memoria relacionado con max_untracked_memory. #83607 (Azat Khuzhin).
  • INSERT SELECT con UNION ALL podía provocar una desreferenciación de puntero nulo en un caso límite. Esto cierra #83618. #83643 (Alexey Milovidov).
  • Se impide que max_insert_block_size tenga el valor cero, ya que podría causar un error lógico. #83688 (Bharat Nallan).
  • Se corrige un ciclo infinito en estimateCompressionRatio() con block_size_bytes=0. #83704 (Azat Khuzhin).
  • Se corrigen las métricas IndexUncompressedCacheBytes/IndexUncompressedCacheCells/IndexMarkCacheBytes/IndexMarkCacheFiles (anteriormente se incluían en la métrica sin el prefijo Cache). #83730 (Azat Khuzhin).
  • Se corrige una posible terminación abrupta (debido a que la tarea hace join de hilos) y, con suerte, cuelgues (en las pruebas unitarias) durante el cierre de BackgroundSchedulePool. #83769 (Azat Khuzhin).
  • Se introduce una configuración de compatibilidad con versiones anteriores para permitir que el nuevo analizador haga referencia a un alias externo en la cláusula WITH en caso de colisiones de nombres. Corrige #82700. #83797 (Dmitry Novik).
  • Se corrige un interbloqueo durante el apagado debido al bloqueo recursivo del contexto durante la limpieza del puente de bibliotecas. #83824 (Azat Khuzhin).

Mejora de compilación/pruebas/empaquetado

  • Compilar una biblioteca C mínima (10 KB) para el lexer de ClickHouse. Esto es necesario para #80977. #81347 (Alexey Milovidov). Añadir una prueba para el lexer independiente y la etiqueta de prueba fasttest-only. #82472 (Yakov Olkhovskiy).
  • Añadir una comprobación para las entradas del submódulo de Nix. #81691 (Konstantin Bogdanov).
  • Corregir una lista de problemas que pueden producirse al intentar ejecutar pruebas de integración en localhost. #82135 (Oleg Doronin).
  • Compilar SymbolIndex en Mac y FreeBSD. (Pero funcionará solo en sistemas ELF, Linux y FreeBSD). #82347 (Alexey Milovidov).
  • Se actualizó Azure SDK a la versión 1.15.0. #82747 (Smita Kulkarni).
  • Añadir el módulo de almacenamiento de google-cloud-cpp al sistema de compilación. #82881 (Pablo Marcos).
  • Cambiar Dockerfile.ubuntu de clickhouse-server para ajustarlo a los requisitos de Docker Official Library. #83039 (Mikhail f. Shiryaev).
  • Un seguimiento de #83158 para corregir la carga de compilaciones en curl clickhouse.com. #83463 (Mikhail f. Shiryaev).
  • Añadir el binario busybox y herramientas de instalación en clickhouse/clickhouse-server y en las imágenes oficiales de clickhouse. #83735 (Mikhail f. Shiryaev).
  • Se añadió compatibilidad con la variable de entorno CLICKHOUSE_HOST para especificar el host del servidor de ClickHouse, en consonancia con las variables de entorno existentes CLICKHOUSE_USER y CLICKHOUSE_PASSWORD. Esto permite una configuración más sencilla sin modificar directamente el cliente ni los archivos de configuración. #83659 (Doron David).

Versión de ClickHouse 25.6, 2025-06-26

Cambio incompatible con versiones anteriores

  • Anteriormente, la función countMatches dejaba de contar en la primera coincidencia vacía, incluso si el patrón la aceptaba. Para solucionar este problema, countMatches ahora continúa ejecutándose avanzando un carácter cuando se produce una coincidencia vacía. Los usuarios que prefieran conservar el comportamiento anterior pueden habilitar el ajuste count_matches_stop_at_empty_match. #81676 (Elmi Ahmadov).
  • Menor: Se fuerza a que los ajustes del servidor backup_threads y restore_threads sean distintos de cero. #80224 (Raúl Marín).
  • Menor: Se corrigió bitNot para que String devuelva una cadena terminada en cero en su representación interna en memoria. Esto no debería afectar a ningún comportamiento visible para el usuario; sin embargo, el autor quiso destacar este cambio. #80791 (Azat Khuzhin).

Nueva funcionalidad

  • Nuevos tipos de datos: Time ([H]HH:MM:SS) y Time64 ([H]HH:MM:SS[.fractional]), además de algunas funciones básicas de conversión de tipos y funciones para interactuar con otros tipos de datos. Se añadieron configuraciones para la compatibilidad con la función existente toTime. La configuración use_legacy_to_time se establece para mantener por ahora el comportamiento anterior. #81217 (Yarik Briukhovetskyi). Se admite la comparación entre Time/Time64. #80327 (Yarik Briukhovetskyi).
  • Una nueva herramienta CLI, chdig - interfaz TUI para ClickHouse (similar a top), ahora como parte de ClickHouse. #79666 (Azat Khuzhin).
  • Se admite la configuración disk para los motores de base de datos Atomic y Ordinary, que especifica el disco donde se almacenan los archivos de metadatos de las tablas. #80546 (Tuan Pham Anh). Esto permite adjuntar bases de datos desde fuentes externas.
  • Un nuevo tipo de MergeTree, CoalescingMergeTree: el motor toma el primer valor no NULL durante las fusiones en segundo plano. Esto cierra #78869. #79344 (scanhex12).
  • Funciones para leer WKB (“Well-Known Binary” es un formato de codificación binaria de varios tipos de geometría, utilizado en aplicaciones SIG). Consulte #43941. #80139 (scanhex12).
  • Se añadió la planificación de slots de consulta para las cargas de trabajo; consulta la planificación de cargas de trabajo para más detalles. #78415 (Sergei Trifonov).
  • Funciones auxiliares timeSeries* para acelerar algunos casos de uso al trabajar con series temporales: - remuestrear los datos en la cuadrícula temporal con la marca de tiempo de inicio, la marca de tiempo de fin y el paso especificados - calcular delta, rate, idelta e irate al estilo de PromQL. #80590 (Alexander Gololobov).
  • Se añaden las funciones mapContainsValuesLike/mapContainsValues/mapExtractValuesLike para filtrar valores de map, así como su compatibilidad con índices basados en bloom filter. #78171 (UnamedRus).
  • Ahora las restricciones de configuración pueden especificar un conjunto de valores no permitidos. #78499 (Bharat Nallan).
  • Se añadió una configuración enable_shared_storage_snapshot_in_query para permitir compartir la misma instantánea de almacenamiento en todas las subconsultas de una misma consulta. Esto garantiza lecturas consistentes de la misma tabla, incluso cuando la consulta hace referencia a ella varias veces. #79471 (Amos Bird).
  • Se admite la escritura de columnas JSON en Parquet y la lectura directa de columnas JSON desde Parquet. #79649 (Nihal Z. Miaji).
  • Se añade compatibilidad con MultiPolygon en pointInPolygon. #79773 (Nihal Z. Miaji).
  • Añade soporte para consultar tablas Delta montadas en un sistema de archivos local mediante la función de tabla deltaLakeLocal. #79781 (roykim98).
  • Se agrega una nueva configuración cast_string_to_date_time_mode que permite elegir el modo de análisis de DateTime al convertir desde String. #80210 (Pavel Kruglov). Por ejemplo, puede establecerla en el modo best effort.
  • Se añadieron las funciones bech32Encode y bech32Decode para trabajar con el algoritmo Bech de Bitcoin (incidencia #40381). #80239 (George Larionov).
  • Se añaden funciones SQL para analizar los nombres de las partes de MergeTree. #80573 (Mikhail Artemenko).
  • Permite filtrar las partes seleccionadas para una consulta según el disco en el que se encuentran, mediante la introducción de una nueva columna virtual, _disk_name. #80650 (tanner-bruce).
  • Se añade una página de inicio con la lista de herramientas web integradas. Se abrirá cuando la solicite un agente de usuario similar a un navegador. #81129 (Alexey Milovidov).
  • Las funciones arrayFirst, arrayFirstIndex, arrayLast y arrayLastIndex descartarán los valores NULL devueltos por la expresión de filtro. En versiones anteriores, no se admitían resultados Nullable en el filtro. Corrige #81113. #81197 (Lennard Eijsackers).
  • Ahora también se puede escribir USE DATABASE name en lugar de USE name. #81307 (Yarik Briukhovetskyi).
  • Se añadió una nueva tabla del sistema system.codecs para consultar los codecs disponibles. (issue #81525). #81600 (Jimmy Aguilar Mena).
  • Se añaden las funciones de ventana lag y lead. Cierra #9887. #82108 (Dmitry Novik).
  • La función tokens ahora admite un nuevo tokenizador llamado split, ideal para logs. #80195 (Robert Schulze).
  • Se añadió compatibilidad con el argumento --database en clickhouse-local. Ahora es posible cambiar a una base de datos creada previamente. Esto cierra #44115. #81465 (Alexey Milovidov).

Funcionalidad experimental

  • Se implementó una lógica similar al rebalance de Kafka para Kafka2 usando ClickHouse Keeper. Para cada réplica, se admiten dos tipos de bloqueos de partición: bloqueos permanentes y bloqueos temporales. La réplica intenta mantener los bloqueos permanentes el mayor tiempo posible; en cualquier momento, no hay más de all_topic_partitions / active_replicas_count bloqueos permanentes en la réplica (donde all_topic_partitions es el número total de particiones y active_replicas_count es el número de réplicas activas). Si hay más, la réplica libera algunas particiones. Algunas particiones quedan retenidas temporalmente por la réplica. El número máximo de bloqueos temporales en una réplica cambia dinámicamente para dar a otras réplicas la oportunidad de convertir algunas particiones en bloqueos permanentes. Al actualizar los bloqueos temporales, la réplica los libera todos e intenta adquirir otros de nuevo. #78726 (Daria Fomina).
  • Mejora del índice de texto experimental: ahora se admiten parámetros explícitos mediante pares clave-valor. Actualmente, los parámetros admitidos son un tokenizer obligatorio y dos opcionales: max_rows_per_postings_list y ngram_size. #80262 (Elmi Ahmadov).
  • Anteriormente, el almacenamiento packed no era compatible con el full-text index, porque el id del segmento se actualizaba sobre la marcha leyendo y escribiendo el archivo .gin_sid en disco. En el caso del almacenamiento packed, no se admite leer un valor desde el archivo no confirmado, y esto provocaba un problema. Ahora ya no ocurre. #80852 (Elmi Ahmadov).
  • Los índices experimentales de tipo gin (que no me gustan porque son una broma interna de los hackers de PostgreSQL) pasaron a llamarse text. Los índices existentes de tipo gin seguirán pudiendo cargarse, pero lanzarán una excepción (sugiriendo índices text en su lugar) cuando se intente usarlos en búsquedas. #80855 (Robert Schulze).

Mejora del rendimiento

  • Habilita la compatibilidad con el filtrado mediante varias proyecciones, lo que permite usar más de una proyección para el filtrado a nivel de parte. Esto soluciona #55525. Este es el segundo paso para implementar el índice de proyección, después de #78429. #80343 (Amos Bird).
  • Se usa la política de caché SLRU en la caché del sistema de archivos de forma predeterminada. #75072 (Kseniia Sumarokova).
  • Se eliminó la contención en el paso Resize del pipeline de consultas. #77562 (Zhiguo Zhou).
  • Se introdujo una opción para delegar la (des)compresión y la (des)serialización de bloques a los hilos del pipeline en lugar de a un único hilo asociado a una conexión de red. Se controla mediante el ajuste enable_parallel_blocks_marshalling. Debería acelerar las consultas distribuidas que transfieren cantidades significativas de datos entre el nodo iniciador y los nodos remotos. #78694 (Nikita Taranov).
  • Mejoras del rendimiento en todos los tipos de bloom filter. Vídeo de la conferencia OpenHouse #79800 (Delyan Kratunov).
  • Se introdujo una ruta rápida en UniqExactSet::merge cuando uno de los conjuntos está vacío. Además, ahora, si el conjunto LHS es de dos niveles y el RHS es de un solo nivel, no se realizará la conversión del RHS a dos niveles. #79971 (Nikita Taranov).
  • Mejora la eficiencia de la reutilización de memoria y reduce los fallos de página al usar las tablas hash de dos niveles. Esto acelera GROUP BY. #80245 (Jiebin Sun).
  • Evita actualizaciones innecesarias y reduce la contención de bloqueos en la caché de condiciones de consulta. #80247 (Jiebin Sun).
  • Optimización trivial de concatenateBlocks. Es probable que beneficie al hash join en paralelo. #80328 (李扬).
  • Al seleccionar rangos de marcas a partir del rango de la clave primaria, no se puede usar la búsqueda binaria si la clave primaria está envuelta en funciones. Este PR mejora esta limitación: la búsqueda binaria aún puede aplicarse cuando la clave primaria está envuelta en una cadena de funciones siempre monótonas, o cuando la RPN contiene un elemento siempre verdadero. Cierra #45536. #80597 (zoomxi).
  • Mejora la velocidad de apagado del motor Kafka (se elimina el retraso adicional de 3 segundos en caso de tener varias tablas Kafka). #80796 (Azat Khuzhin).
  • Inserciones asíncronas: reducen el uso de memoria y mejoran el rendimiento de las consultas de inserción. #80972 (Raúl Marín).
  • No perfilar los procesadores si la tabla de logs está deshabilitada. #81256 (Raúl Marín). Esto acelera las consultas muy breves.
  • Acelera toFixedString cuando la entrada es exactamente la solicitada. #81257 (Raúl Marín).
  • No procesar los valores de cuota si el usuario no tiene límites. #81549 (Raúl Marín). Esto acelera las consultas muy cortas.
  • Se corrigió una regresión en el rendimiento del seguimiento de memoria. #81694 (Michael Kolupaev).
  • Mejora la optimización de la clave de segmentación en consultas distribuidas. #78452 (fhw12345).
  • Réplicas paralelas: evitar esperar a réplicas lentas que no se están utilizando si todas las tareas de lectura ya se han asignado a otras réplicas. #80199 (Igor Nikonov).
  • Las réplicas paralelas usan un timeout de conexión independiente; consulte la configuración parallel_replicas_connect_timeout_ms. Antes, se usaban las configuraciones connect_timeout_with_failover_ms/connect_timeout_with_failover_secure_ms como valores de timeout de conexión para las consultas con réplicas paralelas (1 segundo de forma predeterminada). #80421 (Igor Nikonov).
  • En un sistema de archivos con journal, mkdir se escribe en el journal del sistema de archivos, que se persiste en disco. En caso de que el disco sea lento, esto puede tardar mucho tiempo. Sáquelo del ámbito del bloqueo de reserva. #81371 (Kseniia Sumarokova).
  • Posponer la lectura de los archivos de manifiesto de Iceberg hasta que se ejecute la primera consulta de lectura. #81619 (Daniil Ivanik).
  • Permitir mover el predicado GLOBAL [NOT] IN a la cláusula PREWHERE cuando corresponda. #79996 (Eduard Karacharov).

Mejora

  • EXPLAIN SYNTAX ahora usa un nuevo analizador. Devuelve un AST construido a partir del árbol de la consulta. Se añadió la opción query_tree_passes para controlar el número de pasadas que se ejecutan antes de convertir el árbol de la consulta en el AST. #74536 (Vladimir Cherkasov).
  • Se implementó la serialización aplanada para Dynamic y JSON en formato Native, que permite serializar y deserializar datos de Dynamic y JSON sin estructuras especiales como shared variant para Dynamic y shared data para JSON. Esta serialización se puede habilitar configurando output_format_native_use_flattened_dynamic_and_json_serialization. Esta serialización puede usarse para facilitar el soporte de Dynamic y JSON en el protocolo TCP en clientes escritos en distintos lenguajes. #80499 (Pavel Kruglov).
  • Actualizar las credenciales de S3 tras el error AuthenticationRequired. #77353 (Vitaly Baranov).
  • Se añadieron métricas de diccionarios a system.asynchronous_metrics - DictionaryMaxUpdateDelay - el retraso máximo (en segundos) en la actualización del diccionario. - DictionaryTotalFailedUpdates - el número de errores desde la última carga satisfactoria en todos los diccionarios. #78175 (Vlad).
  • Añade una advertencia sobre las bases de datos que podrían haberse creado para guardar tablas dañadas. #78841 (János Benjamin Antal).
  • Se añade la columna virtual _time en el motor S3Queue, AzureQueue. #78926 (Anton Ivashkin).
  • Permitir la recarga en caliente de los ajustes que controlan el cierre de conexiones cuando la CPU está sobrecargada. #79052 (Alexey Katsman).
  • Añade el prefijo del contenedor a las rutas de datos que se informan en system.tables para discos simples en Azure blob storage, de modo que la información mostrada sea coherente con S3 y GCP. #79241 (Julia Kartseva).
  • Ahora, clickhouse-client y local también aceptan parámetros de consulta en la forma param-<name> (guion), además de param_<name> (guion bajo). Con esto se resuelve #63093. #79429 (Engel Danila).
  • Mensaje de advertencia detallado sobre la reducción del ancho de banda al copiar datos de S3 local a S3 remoto con la suma de verificación habilitada. #79464 (VicoWu).
  • Anteriormente, cuando input_format_parquet_max_block_size = 0 (un valor no válido), ClickHouse se quedaba bloqueado. Ahora, este comportamiento ya se ha corregido. Esto cierra #79394. #79601 (abashkeev).
  • Se añade la configuración throw_on_error para startup_scripts: cuando throw_on_error es true, el servidor no se iniciará a menos que todas las consultas se completen correctamente. De forma predeterminada, throw_on_error es false, lo que mantiene el comportamiento anterior. #79732 (Aleksandr Musorin).
  • Se permite añadir http_response_headers en http_handlers de cualquier tipo. #79975 (Andrey Zvonov).
  • La función reverse ahora admite el tipo de datos Tuple. Cierra #80053. #80083 (flynn).
  • Se resuelve #75817: ahora se permite obtener datos de auxiliary_zookeepers desde la tabla system.zookeeper. #80146 (Nikolay Govorov).
  • Agrega métricas asíncronas sobre los sockets TCP del servidor. Esto mejora la observabilidad. Cierra #80187. #80188 (Alexey Milovidov).
  • Se admite anyLast_respect_nulls y any_respect_nulls como SimpleAggregateFunction. #80219 (Diskein).
  • Eliminar la llamada innecesaria a adjustCreateQueryForBackup para las bases de datos Replicated. #80282 (Vitaly Baranov).
  • Permitir opciones adicionales (que van después de --, como -- --config.value='abc') en clickhouse-local sin el signo igual. Cierra #80292. #80293 (Alexey Milovidov).
  • Resaltar los metacaracteres en las consultas SHOW ... LIKE. Esto cierra #80275. #80297 (Alexey Milovidov).
  • Hacer persistentes las UDF de SQL en clickhouse-local. La función creada previamente se cargará al iniciar. Esto cierra #80085. #80300 (Alexey Milovidov).
  • Corregida la descripción en el plan explain del paso preliminar DISTINCT. #80330 (UnamedRus).
  • Se permite usar colecciones con nombre en ODBC/JDBC. #80334 (Andrey Zvonov).
  • Métricas sobre la cantidad de discos de solo lectura y dañados. El indicador registra cuándo se inicia DiskLocalCheckThread. #80391 (VicoWu).
  • Se implementó compatibilidad para el almacenamiento s3_plain_rewritable con proyecciones. En versiones anteriores, los objetos de metadatos en S3 que hacían referencia a proyecciones no se actualizaban al trasladarse. Cierra #70258. #80393 (Sav).
  • El comando SYSTEM UNFREEZE no intentará buscar partes en discos de solo lectura y de escritura única. Esto corrige #80430. #80432 (Alexey Milovidov).
  • Se redujo el nivel de registro de los mensajes sobre partes fusionadas. #80476 (Hans Krutzer).
  • Cambia el comportamiento predeterminado de la poda de particiones para las tablas Iceberg. #80583 (Melvyn Peignon).
  • Se agregan dos nuevos ProfileEvents para la observabilidad del algoritmo de búsqueda de índices: IndexBinarySearchAlgorithm y IndexGenericExclusionSearchAlgorithm. #80679 (Pablo Marcos).
  • No emitir advertencias en los logs sobre MADV_POPULATE_WRITE no compatible en kernels antiguos (para evitar ensuciar los logs). #80704 (Robert Schulze).
  • Se añadió compatibilidad con Date32 y DateTime64 en las expresiones TTL. #80710 (Andrey Zvonov).
  • Ajuste de los valores de compatibilidad de max_merge_delayed_streams_for_parallel_write. #80760 (Azat Khuzhin).
  • Se corrige un fallo: si se lanza una excepción al intentar eliminar un archivo temporal (se utilizan para volcar datos temporales en disco) en el destructor, el programa puede finalizar. #80776 (Alexey Milovidov).
  • Se añadió el modificador IF EXISTS a SYSTEM SYNC REPLICA. #80810 (Raúl Marín).
  • Se amplía el mensaje de excepción sobre “Having zero bytes, but read range is not finished…” y se añade la columna finished_download_time a system.filesystem_cache. #80849 (Kseniia Sumarokova).
  • Agregar una sección del algoritmo de búsqueda a la salida de EXPLAIN al usarlo con índices = 1. Muestra “búsqueda binaria” o “búsqueda genérica por exclusión”. #80881 (Pablo Marcos).
  • A principios de 2024, prefer_column_name_to_alias se fijó en true para el handler de MySQL porque el nuevo analizador no estaba habilitado de forma predeterminada. Ahora, ya no es necesario dejarlo codificado de forma fija. #80916 (Yarik Briukhovetskyi).
  • Ahora, system.iceberg_history muestra el historial de bases de datos de catálogo, como glue o iceberg rest. Además, se renombraron las columnas table_name y database_name a table y database en system.iceberg_history para mayor coherencia. #80975 (alesapin).
  • Se permite el modo de solo lectura para la table function merge, por lo que no se requiere el privilegio CREATE TEMPORARY TABLE para usarla. #80981 (Miсhael Stetsyuk).
  • Mejor introspección de las cachés en memoria (se expone información sobre las cachés en system.metrics, frente a la incompleta system.asynchronouse_metrics). Se añade el tamaño de las cachés en memoria (en bytes) a dashboard.html. VectorSimilarityIndexCacheSize/IcebergMetadataFilesCacheSize se han renombrado a VectorSimilarityIndexCacheBytes/IcebergMetadataFilesCacheBytes. #81023 (Azat Khuzhin).
  • Ignorar las bases de datos con motores que no pueden contener tablas RocksDB al leer de system.rocksdb. #81083 (Pervakov Grigorii).
  • Se permite filesystem_caches y named_collections en el archivo de configuración de clickhouse-local. #81105 (Alexey Milovidov).
  • Se corrige el resaltado de PARTITION BY en instrucciones INSERT. En versiones anteriores, PARTITION BY no se resaltaba como palabra clave. #81106 (Alexey Milovidov).
  • Dos pequeñas mejoras en la Web UI: - gestionar correctamente las consultas sin salida, como CREATE e INSERT (hasta hace poco, estas consultas provocaban un indicador de carga infinito); - al hacer doble clic en una tabla, desplazarse hasta la parte superior. #81131 (Alexey Milovidov).
  • La métrica MemoryResidentWithoutPageCache proporciona la cantidad de memoria física que utiliza el proceso del servidor, excluida la caché de páginas en espacio de usuario, en bytes. Esto ofrece una visión más precisa del uso real de memoria cuando se utiliza la caché de páginas en espacio de usuario. Cuando la caché de páginas en espacio de usuario está deshabilitada, este valor es igual a MemoryResident. #81233 (Jayme Bird).
  • Marcar como registradas las excepciones registradas manualmente en el cliente, el servidor local, el cliente de Keeper y la app de discos, para que no se registren dos veces. #81271 (Miсhael Stetsyuk).
  • Las configuraciones use_skip_indexes_if_final y use_skip_indexes_if_final_exact_mode ahora tienen True como valor predeterminado. Las consultas con la cláusula FINAL ahora usarán índices de omisión (cuando corresponda) para preseleccionar gránulos y también leerán cualquier gránulo adicional correspondiente a rangos coincidentes de la clave primaria. Los usuarios que necesiten el comportamiento anterior, con resultados aproximados o imprecisos, pueden establecer use_skip_indexes_if_final_exact_mode en FALSE tras evaluarlo cuidadosamente. #81331 (Shankar Iyer).
  • Cuando hay varias consultas en la interfaz web, se ejecutará la que esté bajo el cursor. Continuación de #80977. #81354 (Alexey Milovidov).
  • Este PR corrige problemas en la implementación de is_strict en las comprobaciones de monotonicidad de las funciones de conversión. Actualmente, algunas funciones de conversión, como toFloat64(UInt32) y toDate(UInt8), devuelven incorrectamente is_strict con el valor false cuando deberían devolver true. #81359 (zoomxi).
  • Al comprobar si una KeyCondition coincide con un rango continuo, si la clave está envuelta en una cadena no estricta de funciones, es posible que un Constraint::POINT deba convertirse en un Constraint::RANGE. Por ejemplo: toDate(event_time) = '2025-06-03' implica un rango para event_time: [‘2025-06-03 00:00:00’, ‘2025-06-04 00:00:00’). Este PR corrige este comportamiento. #81400 (zoomxi).
  • Los alias clickhouse/ch invocarán clickhouse-client en lugar de clickhouse-local si se especifica --host o --port. Continuación de #79422. Cierra #65252. #81509 (Alexey Milovidov).
  • Ahora que tenemos los datos sobre la distribución de los tiempos de respuesta de Keeper, podemos ajustar los rangos del histograma de métricas. #81516 (Miсhael Stetsyuk).
  • Se añadió el evento de perfil PageCacheReadBytes. #81742 (Kseniia Sumarokova).
  • Corregido un error lógico en la caché del sistema de archivos: “Tiene cero bytes, pero el rango no ha finalizado”. #81868 (Kseniia Sumarokova).

Corrección de errores (fallo visible para el usuario en una versión estable oficial)

  • Se corrige la vista con parámetros en una consulta SELECT EXCEPT. Cierra #49447. #57380 (Nikolay Degterinsky).
  • Analizador: corrige el nombre de la proyección de la columna después de la promoción del tipo de columna en un JOIN. Cierra #63345. #63519 (Dmitry Novik).
  • Se corrigió un error lógico en casos de conflicto entre nombres de columnas cuando analyzer_compatibility_join_using_top_level_identifier está habilitado. #75676 (Vladimir Cherkasov).
  • Corrige el uso de CTE en los predicados que se aplican mediante pushdown cuando allow_push_predicate_ast_for_distributed_subqueries está habilitado. Corrige #75647. Corrige #79672. #77316 (Dmitry Novik).
  • Corrige un problema por el que SYSTEM SYNC REPLICA LIGHTWEIGHT ‘foo’ informaba de que se había ejecutado correctamente incluso cuando la réplica especificada no existía. Ahora, el comando valida correctamente que la réplica exista en Keeper antes de intentar la sincronización. #78405 (Jayme Bird).
  • Se corrige un bloqueo en una situación muy específica al usar la función currentDatabase en secciones CONSTRAINT de consultas ON CLUSTER Cierra #78100. #79070 (pufit).
  • Se corrigió el envío de roles externos en las consultas entre servidores. #79099 (Andrey Zvonov).
  • Se intenta usar IColumn en lugar de Field en SingleValueDataGeneric. Esto corrige los valores de retorno incorrectos de algunas funciones de agregación, como argMax, para los tipos Dynamic/Variant/JSON. #79166 (Pavel Kruglov).
  • Se corrige la aplicación de las opciones use_native_copy y allow_azure_native_copy para Azure Blob Storage, y se actualiza el comportamiento para usar la copia nativa solo cuando coinciden las credenciales, lo que resuelve #78964. #79561 (Smita Kulkarni).
  • Corrige errores lógicos relacionados con el ámbito de origen desconocido de una columna que se producían al comprobar si dicha columna está correlacionada. Corrige #78183. Corrige #79451. #79727 (Dmitry Novik).
  • Corrige los resultados incorrectos de los conjuntos de agrupación con ColumnConst y Analyzer. #79743 (Andrey Zvonov).
  • Se corrige la duplicación de resultados del segmento local al leer desde una tabla distribuida cuando la réplica local está desactualizada. #79761 (Eduard Karacharov).
  • Se corrige el orden de clasificación de los NaN con bit de signo negativo. #79847 (Pervakov Grigorii).
  • Ahora, GROUP BY ALL no tiene en cuenta la parte de GROUPING. #79915 (Yarik Briukhovetskyi).
  • Se corrigió la fusión incorrecta de estados en las funciones TopK / TopKWeighted, que provocaba valores de error excesivos incluso cuando no se había agotado la capacidad. #79939 (Joel Höner).
  • Se respeta la configuración readonly en el almacenamiento de objetos azure_blob_storage. #79954 (Julia Kartseva).
  • Se corrigieron resultados incorrectos de consultas y bloqueos por falta de memoria al usar match(column, '^…') con caracteres escapados mediante barra invertida. #79969 (filimonov).
  • Deshabilitación del particionado de Hive para data lakes. Aborda parcialmente https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7C79937. #80005 (Daniil Ivanik).
  • Los índices de omisión con expresiones lambda no se podían aplicar. Se corrige el caso en el que las funciones de alto nivel de la definición del índice coinciden exactamente con las de la consulta. #80025 (Nikolai Kochetov).
  • Corrige la versión de los metadatos al adjuntar una parte en la réplica que ejecuta el comando ATTACH_PART desde el registro de replicación. #80038 (Aleksei Filatov).
  • Los nombres de las funciones definidas por el usuario ejecutables (eUDF) no se añaden a la columna used_functions de la tabla system.query_log, a diferencia de otras funciones. Este PR implementa la adición del nombre de la eUDF si la eUDF se utilizó en la consulta. #80073 (Kyamran).
  • Se corrige un error lógico en el formato Arrow con LowCardinality(FixedString). #80156 (Pavel Kruglov).
  • Se corrige la lectura de subcolumnas en el motor Merge. #80158 (Pavel Kruglov).
  • Corrige un error en la comparación entre tipos numéricos en KeyCondition. #80207 (Yarik Briukhovetskyi).
  • Se corrige AMBIGUOUS_COLUMN_NAME al aplicar la materialización diferida a una tabla con proyecciones. #80251 (Igor Nikonov).
  • Corrige la optimización incorrecta de count para filtros por prefijo en cadenas como LIKE ‘ab_c%’ cuando se usan proyecciones implícitas. Esto corrige #80250. #80261 (Amos Bird).
  • Corrige la serialización incorrecta de campos numéricos anidados como cadenas en los documentos de MongoDB. Elimina el límite máximo de profundidad de los documentos de MongoDB. #80289 (Kirill Nikiforov).
  • Se realizan comprobaciones de metadatos menos estrictas para RMT en la base de datos Replicated. Cierra #80296. #80298 (Nikolay Degterinsky).
  • Se corrige la representación textual de DateTime y DateTime64 para el almacenamiento en Postgres. #80301 (Yakov Olkhovskiy).
  • Se permite DateTime con zona horaria en las tablas StripeLog. Esto cierra #44120. #80304 (Alexey Milovidov).
  • Deshabilita el push-down de filtros para el predicado con una función no determinista si un paso del plan de consulta cambia el número de filas. Corrige #40273. #80329 (Nikolai Kochetov).
  • Corrige posibles errores lógicos y bloqueos en las proyecciones con subcolumnas. #80333 (Pavel Kruglov).
  • Corrige el error NOT_FOUND_COLUMN_IN_BLOCK causado por la optimización de filter-push-down del sep lógico de JOIN cuando la expresión ON no es una igualdad trivial. Corrige #79647 Corrige #77848. #80360 (Nikolai Kochetov).
  • Corrige los resultados incorrectos al leer claves en orden inverso en tablas particionadas. Esto corrige #79987. #80448 (Amos Bird).
  • Se corrigió la ordenación incorrecta en tablas con una clave Nullable y con optimize_read_in_order habilitado. #80515 (Pervakov Grigorii).
  • Se corrigió el problema por el que DROP de una vista materializada actualizable se quedaba bloqueado si la vista se había pausado mediante SYSTEM STOP REPLICATED VIEW. #80543 (Michael Kolupaev).
  • Se corrige el error ‘Cannot find column’ con una tupla constante en una consulta distribuida. #80596 (Yakov Olkhovskiy).
  • Se corrige la función shardNum en las tablas distribuidas con join_use_nulls. #80612 (János Benjamin Antal).
  • Se corrige un resultado incorrecto al leer una columna presente en un subconjunto de tablas del motor Merge. #80643 (Pavel Kruglov).
  • Se corrige un posible problema con el protocolo SSH (debido a un bloqueo en replxx). #80688 (Azat Khuzhin).
  • El timestamp de la tabla iceberg_history ahora debería ser correcto. #80711 (Melvyn Peignon).
  • Se corrige un posible cierre inesperado si falla el registro de un diccionario (cuando CREATE DICTIONARY fallaba con CANNOT_SCHEDULE_TASK, podía dejar un puntero colgante en el registro de diccionarios, lo que posteriormente provocaba un cierre inesperado). #80714 (Azat Khuzhin).
  • Corrige el manejo de globs de enum de un solo elemento en las funciones de tabla de almacenamiento de objetos. #80716 (Konstantin Bogdanov).
  • Corrige el tipo de resultado incorrecto de las funciones de comparación con Tuple(Dynamic) y String, que provocaba un error lógico. #80728 (Pavel Kruglov).
  • Añade la compatibilidad faltante con el tipo de datos timestamp_ntz para Unity Catalog. Corrige #79535 y #79875. #80740 (alesapin).
  • Se corrige el error THERE_IS_NO_COLUMN en consultas distribuidas con IN cte. Corrige #75032. #80757 (Nikolai Kochetov).
  • Se corrige el número excesivo de archivos (lo que provoca un uso excesivo de memoria) para ORDER BY externo. #80777 (Azat Khuzhin).
  • Este PR podría cerrar #80742. #80783 (zoomxi).
  • Se corrigió un bloqueo en Kafka porque get_member_id() creaba std::string a partir de NULL (probablemente solo ocurría cuando fallaba la conexión con el broker). #80793 (Azat Khuzhin).
  • Esperar correctamente a que finalicen los consumidores antes de apagar el motor Kafka (los consumidores activos tras el apagado pueden disparar varias aserciones de depuración y también pueden leer datos de los brókeres en segundo plano después de que la tabla se haya eliminado o puesto en estado detached). #80795 (Azat Khuzhin).
  • Se corrige NOT_FOUND_COLUMN_IN_BLOCK, causado por la optimización predicate-push-down. Corrige #80443. #80834 (Nikolai Kochetov).
  • Se corrigió un error lógico al resolver el comodín de asterisco (*) en una función de tabla en JOIN con USING. #80894 (Vladimir Cherkasov).
  • Corregir el cómputo de memoria de la caché de archivos de metadatos de Iceberg. #80904 (Azat Khuzhin).
  • Corrige un particionamiento incorrecto con clave de partición Nullable. #80913 (Pervakov Grigorii).
  • Se corrige el error Table does not exist en consultas distribuidas con el predicado propagado (allow_push_predicate_ast_for_distributed_subqueries=1) cuando la tabla de origen no existe en el iniciador. Corrige #77281. #80915 (Nikolai Kochetov).
  • Se corrige el error lógico en las funciones anidadas con ventanas con nombre. #80926 (Pervakov Grigorii).
  • Se corrigen los valores extremos en columnas Nullable y de coma flotante. #80970 (Pervakov Grigorii).
  • Se corrigió un posible fallo al consultar system.tables (probablemente en casos de presión de memoria). #80976 (Azat Khuzhin).
  • Corrige el renombrado atómico con truncado para archivos cuya compresión se deduce de la extensión del archivo. #80979 (Pablo Marcos).
  • Se corrige ErrorCodes::getName. #81032 (RinChanNOW).
  • Se corrige un error por el que el usuario no podía listar tablas en Unity Catalog sin tener permisos para todas ellas. Ahora todas las tablas se listan correctamente; cualquier intento de leer de una tabla restringida lanzará una excepción. #81044 (alesapin).
  • Ahora ClickHouse ignorará los errores y las respuestas inesperadas de los catálogos de lagos de datos en la consulta SHOW TABLES. Corrige #79725. #81046 (alesapin).
  • Se corrige el análisis de DateTime64 a partir de enteros en JSONExtract y el análisis del tipo JSON. #81050 (Pavel Kruglov).
  • Reflejar la configuración date_time_input_format en la caché de inferencia de esquemas. #81052 (Pavel Kruglov).
  • Se corrige un cierre inesperado en INSERT si la tabla se había eliminado con DROP después de iniciarse la consulta, pero antes de que se enviaran las columnas. #81053 (Azat Khuzhin).
  • Se corrige el uso de un valor sin inicializar en quantileDeterministic. #81062 (Azat Khuzhin).
  • Se corrige la gestión del recuento de enlaces duros para las transacciones del disco metadatastoragefromdisk. Se añaden pruebas. #81066 (Sema Checherinda).
  • Los nombres de las funciones definidas por el usuario (UDF) no se agregan a la tabla system.query_log, a diferencia de los de otras funciones. Este PR añade el nombre de la UDF a una de las dos columnas, used_executable_user_defined_functions o used_sql_user_defined_functions, si la UDF se utilizó en la consulta. #81101 (Kyamran).
  • Se corrigieron errores Too large size ... passed to allocator o posibles bloqueos en las inserciones mediante el protocolo HTTP con formatos de texto (JSON, Values, …) y con campos Enum omitidos. #81145 (Anton Popov).
  • Se corrige LOGICAL_ERROR en el caso de una columna dispersa en un bloque INSERT enviado a una MV no MT. #81161 (Azat Khuzhin).
  • Se corrige Unknown table expression identifier en distributed_product_mode_local=local con replicación cruzada. #81162 (Nikolai Kochetov).
  • Se corrigió el almacenamiento en caché incorrecto del número de filas en archivos Parquet tras aplicar el filtro. #81184 (Michael Kolupaev).
  • Se corrige la configuración fs cache max_size_to_total_space cuando se usa con una ruta de caché relativa. #81237 (Kseniia Sumarokova).
  • Se corrigió el cierre inesperado de clickhouse-local al generar tuplas o maps constantes en formato Parquet. #81249 (Michael Kolupaev).
  • Verificar los offsets de Array recibidos por red. #81269 (Azat Khuzhin).
  • Se corrige un caso límite en una consulta que realiza join sobre tablas vacías y usa funciones de ventana. El error provoca un crecimiento explosivo del número de streams paralelos, lo que provoca OOMs. #81299 (Alexander Gololobov).
  • Correcciones para las funciones Cluster de lago de datos (deltaLakeCluster, icebergCluster, etc.): (1) se corrige un posible error de segmentación en DataLakeConfiguration al usar la función Cluster con el analizador antiguo; (2) se eliminan las actualizaciones duplicadas de metadatos del lago de datos (solicitudes adicionales a object storage); (3) se corrige el listado redundante en object storage cuando el format no se especifica explícitamente (algo que ya se había hecho para los motores de lago de datos sin clúster). #81300 (Kseniia Sumarokova).
  • Hacer que la bandera force_restore_data permita recuperar los metadatos perdidos de Keeper. #81324 (Raúl Marín).
  • Se corrige un error de región en delta-kernel. Corrige #79914. #81353 (Kseniia Sumarokova).
  • Deshabilitar el JIT erróneo de divideOrNull. #81370 (Raúl Marín).
  • Corrige un error de inserción cuando una tabla MergeTree tiene un nombre largo para la columna de partición. #81390 (hy123q).
  • Retroportado en #81957: Se corrigió un posible cierre inesperado en Aggregator en caso de una excepción durante el merge. #81450 (Nikita Taranov).
  • No almacene en memoria el contenido de varios archivos de manifiesto. #81470 (Daniil Ivanik).
  • Se corrigió un posible fallo al cerrar los pools en segundo plano (background_.*pool_size). #81473 (Azat Khuzhin).
  • Se corrige una lectura fuera de límites en el formato Npy que se producía al escribir en una tabla con el motor URL. Esto cierra #81356. #81502 (Alexey Milovidov).
  • Es posible que la Web UI muestre NaN% (los típicos problemas de JavaScript). #81507 (Alexey Milovidov).
  • Se corrigió DatabaseReplicated para database_replicated_enforce_synchronous_settings=1. #81564 (Azat Khuzhin).
  • Corregido el orden de ordenación de los tipos LowCardinality(Nullable(…)). #81583 (Pervakov Grigorii).
  • El servidor no debería conservar una conexión HTTP si la solicitud no se ha leído por completo desde el socket. #81595 (Sema Checherinda).
  • Hacer que las subconsultas correlacionadas escalares devuelvan un resultado Nullable de la expresión de proyección. Se corrige el caso en que una subconsulta correlacionada produce un conjunto de resultados vacío. #81632 (Dmitry Novik).
  • Se corrige Unexpected relative path for a deduplicated part durante ATTACH a ReplicatedMergeTree. #81647 (Azat Khuzhin).
  • La configuración de la consulta use_iceberg_partition_pruning no surtirá efecto para el almacenamiento Iceberg, porque usa el contexto global en lugar del contexto de la consulta. No es crítico porque su valor predeterminado es true. Este PR puede solucionarlo. #81673 (Han Fei).
  • Retroportado en #82128: se corrige “Context has expired” durante las fusiones cuando se usa dict en una expresión TTL. #81690 (Azat Khuzhin).
  • Añade una validación para la configuración de MergeTree merge_max_block_size a fin de garantizar que no sea cero. #81693 (Bharat Nallan).
  • Corrige problemas con clickhouse-local relacionados con consultas DROP VIEW bloqueadas. #81705 (Bharat Nallan).
  • Se corrige el JOIN de StorageRedis en algunos casos. #81736 (Pervakov Grigorii).
  • Se corrige un fallo en ConcurrentHashJoin con USING () vacío y con el analizador antiguo activado. #81754 (Nikita Taranov).
  • Corrección de Keeper: bloquear la confirmación de nuevos logs si hay una entrada no válida en los logs. Anteriormente, si el líder aplicaba incorrectamente algunos logs, seguía confirmando nuevos logs, aunque el follower detectara una discrepancia del digest y abortara. #81780 (Antonio Andelic).
  • Se corrige el problema por el que no se leen las columnas necesarias durante el procesamiento de subconsultas escalares correlacionadas. Corrige #81716. #81805 (Dmitry Novik).
  • Alguien ensució nuestro código con Kusto. Lo limpiamos. Esto cierra #81643. #81885 (Alexey Milovidov).
  • En versiones anteriores, el servidor devolvía demasiado contenido para las solicitudes a /js. Esto corrige #61890. #81895 (Alexey Milovidov).
  • Anteriormente, las definiciones del motor de tabla MongoDB podían incluir un componente de ruta en el argumento host:port, que se ignoraba silenciosamente. La integración de MongoDB se negaba a cargar esas tablas. Con esta corrección, permitimos cargar esas tablas e ignorar el componente de ruta si el motor MongoDB tiene cinco argumentos, usando el nombre de la base de datos de los argumentos. Nota: La corrección no se aplica a las tablas recién creadas ni a las consultas con la función de tabla mongo, ni tampoco a las fuentes de diccionario ni a las colecciones con nombre. #81942 (Vladimir Cherkasov).
  • Se corrigió un posible fallo en Aggregator en caso de que se produjera una excepción durante el merge. #82022 (Nikita Taranov).
  • Se corrige un error de copia y pega en arraySimilarity, lo que impide el uso de pesos UInt32 e Int32. Se actualizan las pruebas y la documentación. #82103 (Mikhail f. Shiryaev).
  • Corrige una posible condición de carrera entre el hilo de sugerencias y el hilo principal del cliente. #82233 (Azat Khuzhin).

Mejora de compilación/pruebas/empaquetado

Versión de ClickHouse 25.5, 2025-05-22

Cambio incompatible con versiones anteriores

  • La función geoToH3 ahora acepta la entrada en el orden (lat, lon, res) (como es habitual en otras funciones geométricas). Los usuarios que deseen conservar el orden de resultados anterior (lon, lat, res) pueden establecer la configuración geotoh3_argument_order = 'lon_lat'. #78852 (Pratima Patel).
  • Se añade la configuración de caché del sistema de archivos allow_dynamic_cache_resize, con valor predeterminado false, para permitir el cambio dinámico de tamaño de la caché del sistema de archivos. Motivo: en ciertos entornos (ClickHouse Cloud), todos los eventos de escalado se producen mediante el reinicio del proceso, y queremos que esta funcionalidad esté explícitamente deshabilitada para tener más control sobre el comportamiento y como medida de seguridad. Este PR está marcado como incompatible con versiones anteriores porque, en versiones antiguas, el cambio dinámico de tamaño de la caché funcionaba de forma predeterminada sin necesidad de una configuración especial. #79148 (Kseniia Sumarokova).
  • Se eliminó la compatibilidad con los tipos de índice heredados annoy y usearch. Ambos han sido implementaciones ficticias durante mucho tiempo; es decir, cualquier intento de usar estos índices heredados devolvía un error de todos modos. Si todavía tiene índices annoy y usearch, elimínelos. #79802 (Robert Schulze).
  • Se elimina la configuración del servidor format_alter_commands_with_parentheses. La configuración se introdujo y estaba deshabilitada de forma predeterminada en 24.2. Se habilitó de forma predeterminada en 25.2. Como no hay versiones LTS que no admitan el nuevo formato, podemos eliminar la configuración. #79970 (János Benjamin Antal).
  • Se habilita de forma predeterminada la implementación delta-kernel-rs del almacenamiento DeltaLake. #79541 (Kseniia Sumarokova).
  • Si la lectura desde una URL implica varios redireccionamientos, la configuración enable_url_encoding se aplica correctamente en todos los redireccionamientos de la cadena. #79563 (Shankar Iyer). El valor predeterminado de la configuración enble_url_encoding ahora es false. #80088 (Shankar Iyer).

Nueva funcionalidad

  • Se admiten subconsultas escalares correlacionadas en la cláusula WHERE. Cierra #6697. #79600 (Dmitry Novik). Se admiten subconsultas correlacionadas en la lista de proyección en casos simples. #79925 (Dmitry Novik). #76078 (Dmitry Novik). Ahora cubre el 100 % de la suite de pruebas TPC-H.
  • La búsqueda vectorial con el índice de similitud vectorial ahora está en beta (antes era experimental). #80164 (Robert Schulze).
  • Compatibilidad con tipos geo en formato Parquet. Cierra #75317. #79777 (scanhex12).
  • Nuevas funciones sparseGrams, sparseGramsHashes, sparseGramsHashesUTF8, sparseGramsUTF8 para calcular “ngramas dispersos”, un algoritmo robusto para extraer subcadenas para su indexación y búsqueda. #79517 (scanhex12).
  • clickhouse-local (y su alias abreviado, ch) ahora usan un FROM table implícito cuando hay datos de entrada que procesar. Esto resuelve #65023. También se habilitó la inferencia de formato en clickhouse-local si no se especifica --input-format y se procesa un archivo regular. #79085 (Alexey Milovidov).
  • Añade las funciones stringBytesUniq y stringBytesEntropy para buscar posibles datos aleatorios o cifrados. #79350 (Sachin Kumar Singh).
  • Se agregaron funciones para codificar y decodificar en base32. #79809 (Joanna Hulboj).
  • Se añaden las funciones getServerSetting y getMergeTreeSetting. Cierra #78318. #78439 (NamNguyenHoai).
  • Se añade la nueva configuración iceberg_enable_version_hint para aprovechar el archivo version-hint.text. #78594 (Arnaud Briche).
  • Permite truncar tablas específicas de una base de datos, filtradas mediante la palabra clave LIKE. #78597 (Yarik Briukhovetskyi).
  • Se admite la columna virtual _part_starting_offset en tablas de la familia MergeTree. Esta columna representa el número acumulado de filas de todas las partes anteriores, calculado en tiempo de consulta a partir de la lista actual de partes. Los valores acumulados se conservan durante toda la ejecución de la consulta y siguen siendo válidos incluso después de la poda de partes. También se ha refactorizado la lógica interna relacionada para admitir este comportamiento. #79417 (Amos Bird).
  • Agregar las funciones divideOrNull,moduloOrNull, intDivOrNull,positiveModuloOrNull para devolver NULL cuando el argumento de la derecha es cero. #78276 (kevinyhzou).
  • La búsqueda vectorial de ClickHouse ahora admite tanto el prefiltrado como el posfiltrado, y ofrece ajustes relacionados para un control más preciso. (issue #78161). #79854 (Shankar Iyer).
  • Se añaden las funciones icebergHash y icebergBucket. Se admite la poda de archivos de datos en tablas Iceberg particionadas con la transformación bucket. #79262 (Daniil Ivanik).

Funcionalidad experimental

  • Nuevos data types Time/Time64: Time (HHH:MM:SS) y Time64 (HHH:MM:SS.<fractional>), además de algunas funciones básicas de cast y funciones para interactuar con otros data types. Además, se cambió el nombre de la función existente toTime a toTimeWithFixedDate porque la función toTime es necesaria para la función de cast. #75735 (Yarik Briukhovetskyi). 72459).
  • Catálogo de metastore de Hive para el datalake Iceberg. #77677 (scanhex12).
  • Los índices de tipo full_text pasaron a llamarse gin. Esto sigue la terminología más conocida de PostgreSQL y otras bases de datos. Los índices existentes de tipo full_text seguirán pudiéndose cargar, pero lanzarán una excepción (sugiriendo índices gin en su lugar) cuando se intente usarlos en búsquedas. #79024 (Robert Schulze).

Mejora del rendimiento

  • Se cambió el formato de parte Compact para guardar marcas de cada subflujo y así poder leer subcolumnas individuales. El formato Compact antiguo sigue siendo compatible para lecturas y puede habilitarse para escrituras mediante la configuración de MergeTree write_marks_for_substreams_in_compact_parts. Está deshabilitado de forma predeterminada para que las actualizaciones sean más seguras, ya que cambia el almacenamiento de las partes compactas. Se habilitará de forma predeterminada en una de las próximas versiones. #77940 (Pavel Kruglov).
  • Permitir mover condiciones con subcolumnas a prewhere. #79489 (Pavel Kruglov).
  • Acelera los índices secundarios al evaluar sus expresiones en varios gránulos a la vez. #64109 (Alexey Milovidov).
  • Se habilita compile_expressions (compilador JIT para fragmentos de expresiones ordinarias) de forma predeterminada. Esto resuelve #51264, #56386 y #66486. #79907 (Alexey Milovidov).
  • Nueva configuración introducida: use_skip_indexes_in_final_exact_mode. Si una consulta sobre una tabla ReplacingMergeTree tiene la cláusula FINAL, leer solo rangos de tabla basados en índices de omisión puede producir resultados incorrectos. Esta configuración puede garantizar que se devuelvan resultados correctos al escanear las partes más recientes que se solapan con los rangos de clave primaria devueltos por el índice de omisión. Establézcala en 0 para deshabilitarla y en 1 para habilitarla. #78350 (Shankar Iyer).
  • Las funciones de tabla de clúster para almacenamiento de objetos (p. ej., s3Cluster) ahora asignarán archivos a las réplicas para leerlos en función de un hash consistente, a fin de mejorar la localidad de la caché. #77326 (Andrej Hoos).
  • Mejora el rendimiento de S3Queue/AzureQueue al permitir realizar INSERT de datos en paralelo (se puede habilitar con la configuración de queue parallel_inserts=true). Anteriormente, S3Queue/AzureQueue solo podía ejecutar en paralelo la primera parte del pipeline (descarga y análisis); INSERT era monohilo. Y los INSERT son casi siempre el cuello de botella. Ahora escalará casi linealmente con processing_threads_num. #77671 (Azat Khuzhin). max&#95;processed&#95;files&#95;before&#95;commit más equitativo en S3Queue/AzureQueue. #79363 (Azat Khuzhin).
  • Se introdujo un umbral (controlado por la configuración parallel_hash_join_threshold) para volver al algoritmo hash cuando el tamaño de la tabla derecha está por debajo de ese umbral. #76185 (Nikita Taranov).
  • Ahora usamos el número de réplicas para determinar el tamaño de las tareas de lectura con las réplicas paralelas habilitadas. Esto mejora la distribución de la carga entre las réplicas cuando la cantidad de datos que hay que leer no es muy grande. #78695 (Nikita Taranov).
  • Se permite la fusión en paralelo de los estados de uniqExact durante la etapa final de la agregación distribuida. #78703 (Nikita Taranov).
  • Se corrige una posible degradación del rendimiento en la fusión paralela de estados de uniqExact para la agregación por clave. #78724 (Nikita Taranov).
  • Se reduce el número de llamadas a la API List Blobs del almacenamiento de Azure. #78860 (Julia Kartseva).
  • Mejora el rendimiento del INSERT SELECT distribuido con réplicas paralelas. #79441 (Azat Khuzhin).
  • Evita que LogSeriesLimiter haga la limpieza en cada creación, lo que evita la contención por bloqueos y las regresiones de rendimiento en escenarios de alta concurrencia. #79864 (filimonov).
  • Aceleración de consultas mediante la optimización de conteo trivial. #79945 (Raúl Marín).
  • Mejora del inlining para algunas operaciones con Decimal. #79999 (Konstantin Bogdanov).
  • Se establece input_format_parquet_bloom_filter_push_down en true de forma predeterminada. Además, se corrige un error en el historial de cambios de la configuración. #80058 (Alexey Milovidov).
  • Se optimizaron las mutaciones ALTER ... DELETE para las partes en las que deben eliminarse todas las filas. Ahora, en esos casos, se crea una parte vacía en lugar de la parte original, sin ejecutar una mutación. #79307 (Anton Popov).
  • Se evita realizar copias adicionales del bloque durante la inserción en una parte Compact cuando es posible. #79536 (Pavel Kruglov).
  • Se añade la configuración input_format_max_block_size_bytes para limitar, en bytes, los bloques creados en los formatos de entrada. Puede ayudar a evitar un uso elevado de memoria durante la importación de datos cuando las filas contienen valores grandes. #79495 (Pavel Kruglov).
  • Se eliminan las páginas de guarda para los hilos y async_socket_for_remote/use_hedge_requests. Se cambia el método de asignación en FiberStack de mmap a aligned_alloc. Dado que esto divide las VMA, con alta carga se puede alcanzar vm.max_map_count. #79147 (Sema Checherinda).
  • Materialización diferida con réplicas paralelas. #79401 (Igor Nikonov).

Mejora

  • Se añadió la posibilidad de aplicar eliminaciones ligeras sobre la marcha (con los ajustes lightweight_deletes_sync = 0, apply_mutations_on_fly = 1. #79281 (Anton Popov).
  • Si los datos en el formato Pretty se muestran en el terminal y un bloque posterior tiene los mismos anchos de columna, puede continuar a partir del bloque anterior, uniéndose a él al mover el cursor hacia arriba. Esto cierra #79333. Esta funcionalidad se controla mediante la nueva configuración output_format_pretty_glue_chunks. #79339 (Alexey Milovidov).
  • Se amplía la función isIPAddressInRange para los tipos de datos String, IPv4, IPv6, Nullable(String), Nullable(IPv4) y Nullable(IPv6). #78364 (YjyJeff).
  • Permitir cambiar de forma dinámica la configuración del pool de conexiones del motor PostgreSQL. #78414 (Samay Sharma).
  • Se permite especificar _part_offset en una proyección normal. Este es el primer paso para crear un índice de proyección. Puede usarse con #58224 y puede ayudar a mejorar #63207. #78429 (Amos Bird).
  • Se agregan nuevas columnas (create_query y source) a system.named_collections. Cierra #78179. #78582 (MikhailBurdukov).
  • Se añadió un nuevo campo condition a la tabla del sistema system.query_condition_cache. Almacena la condición en texto sin cifrar cuyo hash se utiliza como clave en la caché de condiciones de consulta. #78671 (Robert Schulze).
  • Ahora se pueden crear índices de similitud vectorial en columnas BFloat16. #78850 (Robert Schulze).
  • Se admiten marcas de tiempo Unix con parte fraccionaria en el análisis de DateTime64 con mejor esfuerzo. #78908 (Pavel Kruglov).
  • En la implementación de delta-kernel para el almacenamiento DeltaLake, se corrige el modo de mapeo de columnas y se añaden pruebas para la evolución del esquema. #78921 (Kseniia Sumarokova).
  • Se mejora la inserción en la columna Variant en el formato Values mediante una mejor conversión de valores. #78923 (Pavel Kruglov).
  • La función tokens se amplió para aceptar un argumento adicional “tokenizer”, además de otros argumentos específicos del tokenizador. #79001 (Elmi Ahmadov).
  • La sentencia SHOW CLUSTER ahora expande las macros (si existen) en su argumento. #79006 (arf42).
  • Las funciones hash ahora admiten NULL dentro de arrays, tuplas y maps. (incidencias #48365 y #48623). #79008 (Michael Kolupaev).
  • Se actualiza cctz a 2025a. #79043 (Raúl Marín).
  • Se cambia el procesamiento predeterminado de stderr para UDFs a “log_last”. Mejora la usabilidad. #79066 (Alexey Milovidov).
  • Permitir deshacer el cierre de pestañas en la interfaz web. Esto cierra #71284. #79084 (Alexey Milovidov).
  • Eliminar la configuración en recoverLostReplica, tal como se hizo en: https://github.com/ClickHouse/ClickHouse/pull/78637. #79113 (Nikita Mikhaylov).
  • Se añaden eventos de perfil: ParquetReadRowGroups y ParquetPrunedRowGroups para perfilar la poda del índice de Parquet. #79180 (flynn).
  • Se admite ALTER en una base de datos en clúster. #79242 (Tuan Pham Anh).
  • Se omiten explícitamente las ejecuciones perdidas de la recopilación de estadísticas para QueryMetricLog; de lo contrario, el log tardará mucho tiempo en ponerse al día con la hora actual. #79257 (Mikhail Artemenko).
  • Algunas pequeñas optimizaciones en la lectura de formatos basados en Arrow. #79308 (Bharat Nallan).
  • La configuración allow_archive_path_syntax se marcó como experimental por error. Se añadió una prueba para evitar que la configuración experimental esté habilitada de forma predeterminada. #79320 (Alexey Milovidov).
  • Ahora es posible ajustar la configuración de la caché de páginas por consulta. Esto es necesario para experimentar más rápidamente y para poder afinar las consultas de alto rendimiento y baja latencia. #79337 (Alexey Milovidov).
  • No mostrar sugerencias numéricas en los formatos Pretty para los números que se parecen a la mayoría de los hashes de 64 bits. Esto cierra #79334. #79338 (Alexey Milovidov).
  • Los colores de los gráficos en los paneles avanzados se calcularán a partir del hash de la consulta correspondiente. Esto facilita recordar y localizar un gráfico al desplazarse por el panel. #79341 (Alexey Milovidov).
  • Se añade la métrica asíncrona FilesystemCacheCapacity, que indica la capacidad total del sistema de archivos virtual cache. Esto resulta útil para el monitoreo global de la infraestructura. #79348 (Alexey Milovidov).
  • Optimizar el acceso a system.parts (leer el tamaño de las columnas/índices solo cuando se solicite). #79352 (Azat Khuzhin).
  • Calcular solo los campos relevantes para la consulta 'SHOW CLUSTER <name>' en lugar de todos los campos. #79368 (Tuan Pham Anh).
  • Permite especificar la configuración de almacenamiento para DatabaseCatalog. #79407 (Kseniia Sumarokova).
  • Se añadió compatibilidad con almacenamiento local en DeltaLake. #79416 (Kseniia Sumarokova).
  • Se añade una configuración a nivel de consulta para habilitar delta-kernel-rs: allow_experimental_delta_kernel_rs. #79418 (Kseniia Sumarokova).
  • Corrige un posible bucle infinito al enumerar blobs en el almacenamiento de blobs de Azure/S3. #79425 (Alexander Gololobov).
  • Se añadió la configuración de la caché del sistema de archivos max_size_ratio_to_total_space. #79460 (Kseniia Sumarokova).
  • Para clickhouse-benchmark, se ajustó la opción reconnect para que admita 0, 1 o N como valores de reconexión, según corresponda. #79465 (Sachin Kumar Singh).
  • Permitir ALTER TABLE ... MOVE|REPLACE PARTITION para tablas en discos plain_rewritable distintos. #79566 (Julia Kartseva).
  • El índice de similitud vectorial ahora también se utiliza si el vector de referencia es de tipo Array(BFloat16). #79745 (Shankar Iyer).
  • Se añaden last_error_message, last_error_trace y query_id a la tabla system.error_log. Incidencia relacionada #75816. #79836 (Andrei Tinikov).
  • Se habilita el envío de informes de fallos de forma predeterminada. Esto se puede desactivar en el archivo de configuración del servidor. #79838 (Alexey Milovidov).
  • La tabla del sistema system.functions ahora muestra en qué versión de ClickHouse se introdujo cada función por primera vez. #79839 (Robert Schulze).
  • Se añadió la configuración access_control_improvements.enable_user_name_access_type. Esta configuración permite habilitar/deshabilitar grants precisos para usuarios/roles, introducidos en https://github.com/ClickHouse/ClickHouse/pull/72246. Puede que le convenga desactivar esta configuración si tiene un clúster con réplicas anteriores a la versión 25.1. #79842 (pufit).
  • La implementación adecuada del método ASTSelectWithUnionQuery::clone() ahora también tiene en cuenta el campo is_normalized. Esto podría ayudar a resolver #77569. #79909 (Nikita Mikhaylov).
  • Corrige el formato inconsistente de ciertas consultas con el operador EXCEPT. Si el lado izquierdo del operador EXCEPT termina en *, la consulta formateada pierde los paréntesis y luego se interpreta como un * con el modificador EXCEPT. Estas consultas las detecta el fuzzer y es poco probable que aparezcan en la práctica. Esto cierra #79950. #79952 (Alexey Milovidov).
  • Pequeña mejora en el análisis del tipo JSON mediante el uso de una caché con el orden de deserialización de variantes. #79984 (Pavel Kruglov).
  • Añadir la configuración s3_slow_all_threads_after_network_error. #80035 (Vitaly Baranov).
  • El nivel de logging de las partes seleccionadas para la fusión era incorrecto (Information). Cierra #80061. #80062 (Alexey Milovidov).
  • trace-visualizer: añade runtime/share en los tooltips y los mensajes de estado. #79040 (Sergei Trifonov).
  • trace-visualizer: cargar datos desde el servidor de ClickHouse. #79042 (Sergei Trifonov).
  • Se añaden métricas sobre las fusiones fallidas. #79228 (Miсhael Stetsyuk).
  • clickhouse-benchmark mostrará el porcentaje en función del número máximo de iteraciones, si se especifica. #79346 (Alexey Milovidov).
  • Se añade un visualizador de la tabla system.parts. #79437 (Sergei Trifonov).
  • Se añade una herramienta para analizar la latencia de las consultas. #79978 (Sergei Trifonov).

Corrección de errores (fallo visible para el usuario en una versión estable oficial)

  • Corrige los cambios de nombre de columnas que faltaban en la parte. #76346 (Anton Popov).
  • Una vista materializada puede iniciarse demasiado tarde, p. ej., después de la tabla de Kafka que le transmite datos. #72123 (Ilya Golshtein).
  • Se corrigió la reescritura de consultas SELECT durante la creación de VIEW con el analizador habilitado. Cierra #75956. #76356 (Dmitry Novik).
  • Se corrige la aplicación de async_insert desde el servidor (mediante apply_settings_from_server) (anteriormente provocaba errores de Unknown packet 11 from server en el cliente). #77578 (Azat Khuzhin).
  • Se corrigió un problema por el que la vista materializada actualizable en una base de datos Replicated no funcionaba en las réplicas recién añadidas. #77774 (Michael Kolupaev).
  • Se corrigió un problema por el que las vistas materializadas actualizables rompían las copias de seguridad. #77893 (Michael Kolupaev).
  • Corrige un antiguo error lógico que se activaba en transform. #78247 (Yarik Briukhovetskyi).
  • Se corrigen algunos casos en los que el índice secundario no se aplicaba con el analizador. Corrige #65607, corrige #69373. #78485 (Nikolai Kochetov).
  • Se corrige el volcado de eventos de perfil (NetworkSendElapsedMicroseconds/NetworkSendBytes) para el protocolo HTTP con compresión habilitada (el error no debería ser mayor que el tamaño del búfer, normalmente de alrededor de 1 MiB). #78516 (Azat Khuzhin).
  • Corrección en el analizador, que producía LOGICAL_ERROR cuando JOIN … USING implicaba una columna ALIAS; ahora debería generar el error adecuado. #78618 (Yakov Olkhovskiy).
  • Se corrige el analizador: CREATE VIEW … ON CLUSTER falla si SELECT contiene argumentos posicionales. #78663 (Yakov Olkhovskiy).
  • Se corrigió el error Block structure mismatch al hacer INSERT SELECT en una función de tabla con inferencia de esquema si SELECT tiene subconsultas escalares. #78677 (Pervakov Grigorii).
  • Se corrige el analizador: con prefer_global_in_and_join=1, en una consulta SELECT sobre una tabla distribuida, la función in debe sustituirse por globalIn. #78749 (Yakov Olkhovskiy).
  • Se corrigieron varios tipos de consultas SELECT que leen de tablas con engine MongoDB o la table function mongodb: consultas con conversión implícita de un valor constante en la cláusula WHERE (p. ej., WHERE datetime = '2025-03-10 00:00:00'); consultas con LIMIT y GROUP BY. Antes, podían devolver resultados incorrectos. #78777 (Anton Popov).
  • Corregida la conversión entre distintos tipos JSON. Ahora se realiza mediante un cast simple con conversión a/desde String. Es menos eficaz, pero 100 % exacta. #78807 (Pavel Kruglov).
  • Se corrigió un error lógico al convertir el tipo Dynamic a Interval. #78813 (Pavel Kruglov).
  • Se corrigió la reversión de la columna en caso de error al analizar JSON. #78836 (Pavel Kruglov).
  • Se corrige el error ‘bad cast’ al hacer join con una columna alias constante. #78848 (Vladimir Cherkasov).
  • No se permite prewhere en vistas materializadas sobre columnas con tipos distintos en la vista y en la tabla de destino. #78889 (Pavel Kruglov).
  • Se corrige un error lógico al analizar datos binarios incorrectos de una columna Variant. #78982 (Pavel Kruglov).
  • Lanzar una excepción cuando el tamaño del batch de Parquet se establece en 0. Anteriormente, cuando output_format_parquet_batch_size = 0, ClickHouse se quedaba bloqueado. Ahora, este comportamiento ya se ha corregido. #78991 (daryawessely).
  • Se corrige la deserialización de los discriminadores de Variant en partes compactas con el formato basic. Se introdujo en https://github.com/ClickHouse/ClickHouse/pull/55518. #79000 (Pavel Kruglov).
  • Los diccionarios de tipo complex_key_ssd_cache ahora rechazan los parámetros block_size y write_buffer_size cuando tienen un valor de cero o negativo (incidencia #78314). #79028 (Elmi Ahmadov).
  • No use Field para columnas no agregadas en SummingMergeTree. Podría provocar errores inesperados con tipos Dynamic/Variant utilizados en SummingMergeTree. #79051 (Pavel Kruglov).
  • Se corrige la lectura desde una vista materializada con una tabla de destino Distributed y un encabezado diferente en el analizador. #79059 (Pavel Kruglov).
  • Corrige un error por el que arrayUnion() devolvía valores adicionales (incorrectos) en tablas con inserciones por lotes. Corrige #75057. #79079 (Peter Nguyen).
  • Corrige un segfault en OpenSSLInitializer. Cierra #79092. #79097 (Konstantin Bogdanov).
  • Establecer siempre un prefijo para S3 ListObject. #79114 (Azat Khuzhin).
  • Corrige un error por el que arrayUnion() devolvía valores adicionales (incorrectos) en tablas con inserciones en lote. Corrige #79157. #79158 (Peter Nguyen).
  • Se corrigió un error lógico tras el pushdown de filtros. #79164 (Pervakov Grigorii).
  • Se corrige el motor de tabla DeltaLake cuando la implementación delta-kernel se usa con endpoints basados en HTTP; se corrige NOSIGN. Cierra #78124. #79203 (Kseniia Sumarokova).
  • Corrección de Keeper: evita activar watches en solicitudes múltiples fallidas. #79247 (Antonio Andelic).
  • Se prohíben los tipos Dynamic y JSON en IN. Con la implementación actual de IN, pueden producirse resultados incorrectos. El soporte adecuado de estos tipos en IN es complejo y podría implementarse en el futuro. #79282 (Pavel Kruglov).
  • Se corrige la comprobación de rutas duplicadas durante el análisis del tipo JSON. #79317 (Pavel Kruglov).
  • Soluciona problemas de conexión de SecureStreamSocket. #79383 (Konstantin Bogdanov).
  • Corregida la carga de discos plain_rewritable con datos. #79439 (Julia Kartseva).
  • Se corrige un bloqueo durante el descubrimiento dinámico de subcolumnas en partes Wide de MergeTree. #79466 (Pavel Kruglov).
  • Verifique la longitud del nombre de la tabla solo en las consultas CREATE iniciales. No la verifique en los CREATE secundarios para evitar problemas de compatibilidad con versiones anteriores. #79488 (Miсhael Stetsyuk).
  • Se corrigió el error Block structure mismatch en varios casos relacionados con tablas con columnas dispersas. #79491 (Anton Popov).
  • Se corrigen dos casos de “Logical Error: Can’t set alias of * of Asterisk on alias”. #79505 (Raúl Marín).
  • Se corrige el uso de rutas incorrectas al renombrar una base de datos Atomic. #79569 (Tuan Pham Anh).
  • Se corrigió ORDER BY al usar una columna JSON junto con otras columnas. #79591 (Pavel Kruglov).
  • Se corrige la duplicación de resultados al leer en remoto con use_hedged_requests y allow_experimental_parallel_reading_from_replicas ambos deshabilitados. #79599 (Eduard Karacharov).
  • Se corrige un cierre inesperado en la implementación de delta-kernel al usar Unity Catalog. #79677 (Kseniia Sumarokova).
  • Resolver macros en clústeres de autodescubrimiento. #79696 (Anton Ivashkin).
  • Gestionar adecuadamente los casos en que page_cache_limits esté mal configurado. #79805 (Bharat Nallan).
  • Corrige el resultado de la función SQL formatDateTime si un formateador de tamaño variable (p. ej., %W, es decir, el día de la semana Monday, Tuesday, etc.) va seguido de un formateador compuesto (un formateador que imprime varios componentes a la vez, p. ej., %D, es decir, la fecha en formato estadounidense 05/04/25). #79835 (Robert Schulze).
  • IcebergS3 admite la optimización de count, pero IcebergS3Cluster no. Como resultado, el resultado de count() en modo clúster puede ser un múltiplo del número de réplicas. #79844 (wxybear).
  • Corrige el error AMBIGUOUS_COLUMN_NAME con la materialización diferida cuando no se utiliza ninguna columna en la ejecución de la consulta hasta la proyección. Ejemplo: SELECT * FROM t ORDER BY rand() LIMIT 5. #79926 (Igor Nikonov).
  • Ocultar la contraseña en la consulta CREATE DATABASE datalake ENGINE = DataLakeCatalog(\'http://catalog:8181\', \'admin\', \'password\'). #79941 (Han Fei).
  • Permite especificar un alias en JOIN USING. Especifique este alias si se cambió el nombre de la columna (p. ej., debido a ARRAY JOIN). Corrige #73707. #79942 (Nikolai Kochetov).
  • Permitir que las vistas materializadas con UNION funcionen correctamente en las nuevas réplicas. #80037 (Samay Sharma).
  • El especificador de formato %e en la función SQL parseDateTime ahora reconoce días de un solo dígito (p. ej., 3), mientras que antes requería relleno con espacios (p. ej., 3). Esto hace que su comportamiento sea compatible con MySQL. Para conservar el comportamiento anterior, establezca la opción parsedatetime_e_requires_space_padding = 1. (issue #78243). #80057 (Robert Schulze).
  • Soluciona las advertencias Cannot find 'kernel' in '[...]/memory.stat' en el registro de ClickHouse (incidencia #77410). #80129 (Robert Schulze).
  • Comprobar el tamaño de la pila en FunctionComparison para evitar un fallo por desbordamiento de pila. #78208 (Julia Kartseva).
  • Se corrige una condición de carrera al hacer SELECT en system.workloads. #78743 (Sergei Trifonov).
  • Corrección: materialización diferida en consultas distribuidas. #78815 (Igor Nikonov).
  • Se corrige la conversión de Array(Bool) a Array(FixedString). #78863 (Nikita Taranov).
  • Hacer menos confusa la selección de la versión de Parquet. #78818 (Michael Kolupaev).
  • Se corrige la autofusión de ReservoirSampler. #79031 (Nikita Taranov).
  • Se corrige el almacenamiento de la tabla usada para la inserción en el contexto del cliente. #79046 (Pervakov Grigorii).
  • Se corrigió el orden de destrucción de los miembros de datos de AggregatingSortedAlgorithm y SummingSortedAlgorithm. #79056 (Nikita Taranov).
  • enable_user_name_access_type no debe afectar al tipo de acceso DEFINER. #80026 (pufit).
  • La consulta a la base de datos del sistema puede quedarse colgada si los metadatos de la base de datos del sistema están ubicados en Keeper. #79304 (Mikhail Artemenko).

Mejoras de compilación/pruebas/empaquetado

Versión de ClickHouse 25.4, 2025-04-22

Cambio incompatible con versiones anteriores

  • Se comprueba si todas las columnas de una vista materializada coinciden con la tabla de destino cuando allow_materialized_view_with_bad_select es false. #74481 (Christoph Wurm).
  • Se corrigen los casos en los que dateTrunc se usa con argumentos Date/DateTime negativos. #77622 (Yarik Briukhovetskyi).
  • Se ha eliminado la integración heredada de MongoDB. La configuración del servidor use_legacy_mongodb_integration ha quedado obsoleta y ahora no hace nada. #77895 (Robert Schulze).
  • Se mejora la validación de SummingMergeTree para omitir la agregación de las columnas utilizadas en las claves de partición o de ordenación. #78022 (Pervakov Grigorii).

Nueva funcionalidad

  • Se añadió la programación de slots de CPU para cargas de trabajo; consulta la documentación para obtener más detalles. #77595 (Sergei Trifonov).
  • clickhouse-local conservará sus bases de datos tras reiniciarse si se especifica el argumento de línea de comandos --path. Esto cierra #50647. Esto cierra #49947. #71722 (Alexey Milovidov).
  • Rechazar consultas cuando el servidor esté sobrecargado. La decisión se toma en función de la proporción entre el tiempo de espera (OSCPUWaitMicroseconds) y el tiempo de uso (OSCPUVirtualTimeMicroseconds). La consulta se rechaza con cierta probabilidad cuando esta proporción está entre min_os_cpu_wait_time_ratio_to_throw y max_os_cpu_wait_time_ratio_to_throw (son parámetros de configuración a nivel de consulta). #63206 (Alexey Katsman).
  • Viaje en el tiempo en Iceberg: añadir una configuración para consultar tablas Iceberg a partir de una marca temporal específica. #71072 (Brett Hoerner). #77439 (Daniil Ivanik).
  • Una caché en memoria para los metadatos de Iceberg, que almacena archivos de manifiesto/listas de manifiestos y metadata.json para acelerar las consultas. #77156 (Han Fei).
  • Se añade compatibilidad con el motor de tabla DeltaLake para Azure Blob Storage. Corrige #68043. #74541 (Smita Kulkarni).
  • Se añadió una caché en memoria para vector similarity indexes deserializados. Esto debería acelerar las consultas repetidas de búsqueda aproximada de vecinos más cercanos (ANN). El tamaño de la nueva caché se controla mediante los server settings vector_similarity_index_cache_size y vector_similarity_index_cache_max_entries. Esta funcionalidad sustituye a la caché de skipping index de versiones anteriores. #77905 (Shankar Iyer).
  • Compatibilidad con la poda de particiones en DeltaLake. #78486 (Kseniia Sumarokova).
  • Soporte para una actualización en segundo plano en tablas MergeTree de solo lectura, lo que permite consultar tablas actualizables con un número ilimitado de lectores distribuidos (lago de datos nativo de ClickHouse). #76467 (Alexey Milovidov).
  • Se admite el uso de discos personalizados para almacenar archivos de metadatos de las bases de datos. Por ahora, solo puede configurarse a nivel global del servidor. #77365 (Tuan Pham Anh).
  • Se admite ALTER TABLE … ATTACH|DETACH|MOVE|REPLACE PARTITION para el disco plain_rewritable. #77406 (Julia Kartseva).
  • Se añaden ajustes de tabla para la configuración de SASL y las credenciales al motor de tabla Kafka. Esto permite configurar la autenticación basada en SASL para Kafka y sistemas compatibles con Kafka directamente en la instrucción CREATE TABLE, en lugar de tener que usar archivos de configuración o colecciones nombradas. #78810 (Christoph Wurm).
  • Permite configurar default_compression_codec para las tablas MergeTree: se usa cuando la consulta CREATE no define explícitamente ninguno para las columnas indicadas. Esto cierra #42005. #66394 (gvoelfin).
  • Se añadió la opción bind_host a la configuración de clústeres para que ClickHouse pueda usar una red específica para las conexiones distribuidas. #74741 (Todd Yocum).
  • Se introduce una nueva columna, parametrized_view_parameters, en system.tables. Cierra https://github.com/clickhouse/clickhouse/issues/66756. #75112 (NamNguyenHoai).
  • Permite cambiar el comentario de una base de datos. Cierra #73351 ### Entrada de documentación para cambios visibles para el usuario. #75622 (NamNguyenHoai).
  • Se admite la autenticación SCRAM-SHA-256 en el protocolo de compatibilidad con PostgreSQL. #76839 (scanhex12).
  • Se añaden las funciones arrayLevenshteinDistance, arrayLevenshteinDistanceWeighted y arraySimilarity. #77187 (Mikhail f. Shiryaev).
  • La configuración parallel_distributed_insert_select se aplica a INSERT SELECT en ReplicatedMergeTree (anteriormente requería tablas Distribued). #78041 (Igor Nikonov).
  • Se introduce la función toInterval. Esta función acepta 2 argumentos (valor y unidad) y convierte el valor en un tipo Interval específico. #78723 (Andrew Davis).
  • Se añaden varias formas prácticas de resolver el archivo raíz metadata.json en una función de tabla y un motor de Iceberg. Cierra #78455. #78475 (Daniil Ivanik).
  • Se admite la autenticación basada en contraseña en el protocolo SSH en ClickHouse. #78586 (Nikita Mikhaylov).

Funcionalidad experimental

  • Se admiten subconsultas correlacionadas como argumento de la expresión EXISTS en la cláusula WHERE. Cierra #72459. #76078 (Dmitry Novik).
  • Se añadieron las funciones sparseGrams y sparseGramsHashes con versiones ASCII y UTF8. Autor: scanhex12. #78176 (Pervakov Grigorii). No las use: la implementación cambiará en las próximas versiones.

Mejora del rendimiento

  • Optimiza el rendimiento con columnas diferidas, que leen los datos después de aplicar ORDER BY y LIMIT. #55518 (Xiaozhe Yu).
  • Se habilitó por defecto la caché de condiciones de consulta. #79080 (Alexey Milovidov).
  • Se acelera la generación del resultado de JOIN al desvirtualizar las llamadas a col->insertFrom(). #77350 (Alexander Gololobov).
  • Combinar, si es posible, las condiciones de igualdad del paso de filtro del plan de consulta con la condición de JOIN para poder usarlas como claves de la tabla hash. #78877 (Dmitry Novik).
  • Use la segmentación dinámica para JOIN si la clave de JOIN es un prefijo de la PK en ambas partes. Esta optimización se habilita con la configuración query_plan_join_shard_by_pk_ranges (deshabilitada de forma predeterminada). #74733 (Nikolai Kochetov).
  • Se añade compatibilidad con la poda de datos de Iceberg basada en los valores de límite inferior y superior de las columnas. Corrige #77638. #78242 (alesapin).
  • Se implementó una optimización trivial del conteo para Iceberg. Ahora, las consultas con count() y sin filtros deberían ser más rápidas. Cierra #77639. #78090 (alesapin).
  • Se añade la posibilidad de configurar el número de columnas que las fusiones pueden escribir en paralelo mediante max_merge_delayed_streams_for_parallel_write (esto debería reducir unas 25 veces el uso de memoria de las fusiones verticales hacia S3). #77922 (Azat Khuzhin).
  • Deshabilita filesystem_cache_prefer_bigger_buffer_size cuando la caché se utilice de forma pasiva, por ejemplo, en las fusiones. Esto reduce el consumo de memoria durante las fusiones. #77898 (Kseniia Sumarokova).
  • Ahora usamos el número de réplicas para determinar el tamaño de las tareas de lectura cuando las réplicas paralelas están habilitadas. Esto permite una mejor distribución del trabajo entre las réplicas cuando la cantidad de datos que se va a leer no es demasiado grande. #78695 (Nikita Taranov).
  • Se admite la precarga de E/S asíncrona para el formato ORC, lo que mejora el rendimiento general al ocultar la latencia de E/S remota. #70534 (李扬).
  • Preasignar la memoria utilizada por las inserciones asincrónicas para mejorar el rendimiento. #74945 (Ilya Golshtein).
  • Reduce la cantidad de solicitudes a Keeper eliminando el uso de solicitudes get individuales, que podrían haber causado una carga significativa en Keeper al aumentar el número de réplicas, en los casos en que multiRead está disponible. #56862 (Nikolay Degterinsky).
  • Una optimización marginal para ejecutar funciones con argumentos Nullable. #76489 (李扬).
  • Se optimiza arraySort. #76850 (李扬).
  • Fusiona las marcas de la misma parte y las escribe en la caché de condiciones de consulta en una sola operación para reducir el uso de bloqueos. #77377 (zhongyuankai).
  • Optimiza el rendimiento de s3Cluster para consultas con una sola expansión entre corchetes. #77686 (Tomáš Hromada).
  • Optimiza ORDER BY en columnas Nullable o LowCardinality individuales. #77789 (李扬).
  • Se optimiza el uso de memoria del formato Native. #78442 (Azat Khuzhin).
  • Optimización trivial: no reescribir count(if(...)) como countIf si se requiere una conversión de tipo. Cierra #78564. #78565 (李扬).
  • La función hasAll ahora puede aprovechar los índices de omisión para texto completo tokenbf_v1 y ngrambf_v1. #77662 (UnamedRus).
  • El índice de similitud vectorial podía sobreasignar la memoria principal hasta en 2x. Esta corrección replantea la estrategia de asignación de memoria, reduce el consumo de memoria y mejora la eficacia de la caché del índice de similitud vectorial. (problema #78056). #78394 (Shankar Iyer).
  • Se introduce la configuración schema_type para la tabla system.metric_log con el tipo de esquema. Hay tres esquemas permitidos: wide — el esquema actual, con cada métrica/evento en una columna independiente (lo más eficaz para leer columnas por separado); transposed — similar a system.asynchronous_metric_log, donde las métricas/eventos se almacenan como filas; y, lo más interesante, transposed_with_wide_view — crea una tabla subyacente con esquema transposed, pero también introduce una vista con esquema wide que traduce las consultas a la tabla subyacente. En transposed_with_wide_view no se admite resolución de subsegundos en la vista; event_time_microseconds es solo un alias para mantener la compatibilidad con versiones anteriores. #78412 (alesapin).

Mejora

  • Serialización del plan de consulta para consultas Distributed. Se añade una nueva opción de configuración, serialize_query_plan. Cuando está habilitada, las consultas de la tabla Distributed utilizarán un plan de consulta serializado para la ejecución remota de consultas. Esto introduce un nuevo tipo de paquete en el protocolo TCP; se debe añadir <process_query_plan_packet>true</process_query_plan_packet> a la configuración del servidor para permitir procesar este paquete. #69652 (Nikolai Kochetov).
  • Compatibilidad con el tipo JSON y la lectura de subcolumnas desde vistas. #76903 (Pavel Kruglov).
  • Compatibilidad con ALTER DATABASE … ON CLUSTER. #79242 (Tuan Pham Anh).
  • Las actualizaciones de las vistas materializadas actualizables ahora se muestran en system.query_log. #71333 (Michael Kolupaev).
  • Las funciones definidas por el usuario (UDFs) ahora pueden marcarse como deterministas mediante una nueva opción en su configuración. Además, la caché de consultas ahora comprueba si las UDFs invocadas dentro de una consulta son deterministas. Si es así, almacena en caché el resultado de la consulta. (Issue #59988). #77769 (Jimmy Aguilar Mena).
  • Se habilitó una lógica de backoff para todos los tipos de tareas replicadas. Esto permitirá reducir el uso de CPU, el uso de memoria y el tamaño de los archivos de registro. Se añadieron nuevos ajustes: max_postpone_time_for_failed_replicated_fetches_ms, max_postpone_time_for_failed_replicated_merges_ms y max_postpone_time_for_failed_replicated_tasks_ms, que son similares a max_postpone_time_for_failed_mutations_ms. #74576 (MikhailBurdukov).
  • Agregar query_id a system.errors. Cierra #75815. #76581 (Vladimir Baikov).
  • Se añade compatibilidad para convertir UInt128 en IPv6. Esto permite la operación bitAnd y las operaciones aritméticas con IPv6, así como la conversión de nuevo a IPv6. Cierra #76752. Esto también permite convertir de nuevo a IPv6 el resultado de la operación bitAnd sobre IPv6. Véase también #57707. #76928 (Muzammil Abdul Rehman).
  • No se interpretan de forma predeterminada los valores especiales de Bool en formatos de texto dentro del tipo Variant. Se puede habilitar con la configuración allow_special_bool_values_inside_variant. #76974 (Pavel Kruglov).
  • Se admite un tiempo de espera configurable por tarea para consultas de baja priority, tanto a nivel de sesión como de servidor. #77013 (VicoWu).
  • Se implementó la comparación de valores del tipo de dato JSON. Ahora los objetos JSON pueden compararse de forma similar a los Map. #77397 (Pavel Kruglov).
  • Mejor soporte de permisos en system.kafka_consumers. Se reenvían los errores internos de librdkafka (cabe señalar que esta biblioteca es una porquería). #77700 (Ilya Golshtein).
  • Se añadió validación de la configuración del motor de tabla Buffer. #77840 (Pervakov Grigorii).
  • Se añade la configuración enable_hdfs_pread para habilitar o deshabilitar pread en HDFS. #77885 (kevinyhzou).
  • Añadir eventos de perfil para el número de solicitudes multi de lectura y escritura de ZooKeeper. #77888 (JackyWoo).
  • Permitir crear e insertar en tablas temporales cuando disable_insertion_and_mutation está activado. #77901 (Xu Jia).
  • Se redujo max_insert_delayed_streams_for_parallel_write (a 100). #77919 (Azat Khuzhin).
  • Se corrige la interpretación del año en la sintaxis Joda (esto viene del mundo de Java, por si te lo preguntabas), por ejemplo yyy. #77973 (李扬).
  • La adjunción de partes de tablas MergeTree se realizará en el orden de sus bloques, lo que es importante para algoritmos especiales de combinación, como ReplacingMergeTree. Esto cierra #71009. #77976 (Alexey Milovidov).
  • Las reglas de enmascaramiento de consultas ahora pueden lanzar un LOGICAL_ERROR si se produce una coincidencia. Esto ayudará a comprobar si una contraseña predefinida se está filtrando en algún lugar de los logs. #78094 (Nikita Mikhaylov).
  • Se añadió la columna index_length_column a information_schema.tables para mejorar la compatibilidad con MySQL. #78119 (Paweł Zakrzewski).
  • Se introducen dos nuevas métricas: TotalMergeFailures y NonAbortedMergeFailures. Estas métricas son necesarias para detectar los casos en los que fallan demasiadas operaciones de merge en un período corto. #78150 (Miсhael Stetsyuk).
  • Se corrigió el análisis incorrecto de la URL de S3 cuando no se especifica la clave en el estilo de ruta. #78185 (Arthur Passos).
  • Corrige los valores incorrectos de las métricas asíncronas BlockActiveTime, BlockDiscardTime, BlockWriteTime, BlockQueueTime y BlockReadTime (antes del cambio, se informaba incorrectamente que 1 segundo era 0.001). #78211 (filimonov).
  • Se respeta el límite de loading_retries para los errores durante el envío a la vista materializada de StorageS3(Azure)Queue. Antes, esos errores se reintentaban indefinidamente. #78313 (Kseniia Sumarokova).
  • En DeltaLake con la implementación delta-kernel-rs, se corrigen el rendimiento y la barra de progreso. #78368 (Kseniia Sumarokova).
  • Admite include, from_env y from_zk para discos de runtime. Cierra #78177. #78470 (Kseniia Sumarokova).
  • Añade una advertencia dinámica a la tabla system.warnings para las mutaciones de larga duración. #78658 (Bharat Nallan).
  • Se añadió el campo condition a la tabla del sistema system.query_condition_cache. Almacena la condición en texto sin formato cuyo hash se utiliza como clave en la caché de condiciones de consulta. #78671 (Robert Schulze).
  • Se permite un valor vacío para el particionado de Hive. #78816 (Arthur Passos).
  • Corrige la coerción de tipos en la cláusula IN para BFloat16 (es decir, SELECT toBFloat16(1) IN [1, 2, 3]; ahora devuelve 1). Cierra #78754. #78839 (Raufs Dunamalijevs).
  • No compruebe las partes de MergeTree en otros discos si se establece disk = .... #78855 (Azat Khuzhin).
  • Registrar los tipos de datos de used_data_type_families en system.query_log con nombres canónicos. #78972 (Kseniia Sumarokova).
  • Se limpiaron los ajustes durante recoverLostReplica, igual que se hizo en #78637. #79113 (Nikita Mikhaylov).
  • Usar columnas de inserción para la inferencia de esquemas de INFILE. #78490 (Pervakov Grigorii).

Corrección de errores (fallo visible para el usuario en una versión estable oficial)

  • Corrige el análisis incorrecto de proyecciones cuando se usa count(Nullable) en proyecciones agregadas. Esto corrige #74495 . Este PR también añade algunos logs relacionados con el análisis de proyecciones para aclarar por qué se usa una proyección o por qué no se usa. #74498 (Amos Bird).
  • Se corrigió Part <...> does not contain in snapshot of previous virtual parts. (PART_IS_TEMPORARILY_LOCKED) durante DETACH PART. #76039 (Aleksei Filatov).
  • Se corrige el problema de los índices de omisión que no funcionaban con expresiones que contienen literales en el analizador, y se eliminan las conversiones de tipo triviales durante el análisis de índices. #77229 (Pavel Kruglov).
  • Se corrigió un error por el que el parámetro de consulta close_session no surtía efecto, lo que hacía que las sesiones con nombre solo se cerraran después de session_timeout. #77336 (Alexey Katsman).
  • Se corrigió la recepción de mensajes desde el servidor NATS sin vistas materializadas asociadas. #77392 (Dmitry Novikov).
  • Corrige un error lógico al leer desde FileLog vacío mediante la función de tabla merge, cierra #75575. #77441 (Vladimir Cherkasov).
  • Usar la configuración de formato predeterminada en la serialización Dynamic de variant compartida. #77572 (Pavel Kruglov).
  • Se corrige la verificación de si la ruta de datos de la tabla existe en el disco local. #77608 (Tuan Pham Anh).
  • Se corrigió el envío de valores constantes al servidor remoto para algunos tipos. #77634 (Pavel Kruglov).
  • Corrige un fallo provocado por un Context caducado en S3/AzureQueue. #77720 (Kseniia Sumarokova).
  • Oculta las credenciales en los motores de tabla RabbitMQ, Nats, Redis y AzureQueue. #77755 (Kseniia Sumarokova).
  • Se corrige el comportamiento no definido en la comparación con NaN en argMin/argMax. #77756 (Raúl Marín).
  • Comprobar periódicamente si las fusiones y mutaciones se cancelaron, incluso en los casos en que la operación no produce ningún bloque que escribir. #77766 (János Benjamin Antal).
  • Se corrigió un problema por el que la vista materializada actualizable en una base de datos Replicated no funcionaba en las réplicas recién añadidas. #77774 (Michael Kolupaev).
  • Se corrige un posible cierre inesperado cuando se produce el error NOT_FOUND_COLUMN_IN_BLOCK. #77854 (Vladimir Cherkasov).
  • Se corrige un fallo que se produce en S3/AzureQueue durante el rellenado de datos. #77878 (Bharat Nallan).
  • Deshabilitar la búsqueda difusa del historial en el servidor SSH (ya que requiere la biblioteca skim). #78002 (Azat Khuzhin).
  • Corrige un error por el que una consulta de búsqueda vectorial en una columna sin índice devolvía resultados incorrectos si había otra columna vectorial en la tabla que tenía definido un índice de similitud vectorial. (Incidencia #77978). #78069 (Shankar Iyer).
  • Se corrige un error menor en el mensaje “El formato de salida solicitado es binario… ¿Quiere mostrarlo de todos modos? [y/N]”. #78095 (Azat Khuzhin).
  • Corrección de un error en toStartOfInterval cuando el argumento de origen es cero. #78096 (Yarik Briukhovetskyi).
  • Se prohíbe especificar un parámetro de consulta session_id vacío en la interfaz HTTP. #78098 (Alexey Katsman).
  • Se corrige una sobrescritura de metadatos en la base de datos Replicated que podría haberse producido debido a una consulta RENAME ejecutada justo después de una consulta ALTER. #78107 (Nikolay Degterinsky).
  • Se corrigió un fallo en el engine NATS. #78108 (Dmitry Novikov).
  • No intente crear history_file en el cliente embebido de SSH (en versiones anteriores, la creación siempre fallaba, aunque se intentaba). #78112 (Azat Khuzhin).
  • Se corrige system.detached_tables, que mostraba información incorrecta tras las consultas RENAME DATABASE o DROP TABLE. #78126 (Nikolay Degterinsky).
  • Corrección de las comprobaciones por demasiadas tablas en la base de datos Replicated tras #77274. Además, la comprobación se realiza antes de crear el almacenamiento para evitar la creación de nodos no contabilizados en Keeper en el caso de ReplicatedMergeTree o KeeperMap. #78127 (Nikolay Degterinsky).
  • Se corrige un posible cierre inesperado debido a la inicialización concurrente de los metadatos de S3Queue. #78131 (Azat Khuzhin).
  • Las funciones groupArray* ahora generan el error BAD_ARGUMENTS cuando el argumento max_size tiene el valor 0 de tipo Int, como ya ocurría con UInt, en lugar de intentar ejecutarse con él. #78140 (Eduard Karacharov).
  • Evita un fallo al recuperar una réplica perdida si la tabla local se elimina antes de desacoplarla. #78173 (Raúl Marín).
  • Se corrige que la columna “alterable” de system.s3_queue_settings devolviera siempre false. #78187 (Kseniia Sumarokova).
  • Ocultar la firma de acceso de Azure para que no sea visible para el usuario ni en los logs. #78189 (Kseniia Sumarokova).
  • Se corrige la precarga de subflujos con prefijos en partes Wide. #78205 (Pavel Kruglov).
  • Se corrigieron bloqueos y resultados incorrectos en mapFromArrays cuando el array de claves es de tipo LowCardinality(Nullable). #78240 (Eduard Karacharov).
  • Se corrigen las opciones de autenticación de delta-kernel-rs. #78255 (Kseniia Sumarokova).
  • No programar tareas de vistas materializadas actualizables cuando disable_insertion_and_mutation de una réplica sea true. Una tarea implica alguna inserción y fallará si disable_insertion_and_mutation es true. #78277 (Xu Jia).
  • Validar el acceso a las tablas subyacentes del motor Merge. #78339 (Pervakov Grigorii).
  • El modificador FINAL puede omitirse al consultar una tabla Distributed. #78428 (Yakov Olkhovskiy).
  • bitmapMin devuelve uint32_max cuando el bitmap está vacío (y uint64_max cuando el tipo de entrada es mayor), lo que coincide con el comportamiento del valor mínimo de un roaring_bitmap vacío. #78444 (wxybear).
  • Se deshabilita la paralelización del procesamiento de consultas justo después de leer FROM cuando distributed_aggregation_memory_efficient está habilitado, ya que puede provocar un error lógico. Cierra #76934. #78500 (flynn).
  • Se establece al menos un flujo de lectura en caso de que no haya ningún flujo planificado tras aplicar la configuración max_streams_to_max_threads_ratio. #78505 (Eduard Karacharov).
  • En el motor de almacenamiento S3Queue, se corrige el error lógico “Cannot unregister: table uuid is not registered”. Cierra #78285. #78541 (Kseniia Sumarokova).
  • ClickHouse ahora puede detectar su cgroup v2 en sistemas con cgroups v1 y v2 habilitados. #78566 (Grigory Korolev).
  • Las funciones de tabla -Cluster fallaban cuando se usaban con ajustes a nivel de tabla. #78587 (Daniil Ivanik).
  • Validaciones mejoradas cuando ReplicatedMergeTree no admite transacciones en INSERT. #78633 (Azat Khuzhin).
  • Limpieza de los ajustes de la consulta durante attach. #78637 (Raúl Marín).
  • Se corrigió un bloqueo al especificar una ruta no válida en iceberg_metadata_file_path. #78688 (alesapin).
  • En el motor de tabla DeltaLake con la implementación delta-kernel-s, se corrige el caso en que el esquema de lectura difiere del esquema de la tabla y, al mismo tiempo, hay columnas de partición, lo que provoca un error de “columna no encontrada”. #78690 (Kseniia Sumarokova).
  • Se corrige un problema por el que, tras programar el cierre de una sesión con nombre (pero antes de que expirara el timeout), al crear una nueva sesión con el mismo nombre, esta se cerraba en el momento previsto para el cierre de la primera sesión. #78698 (Alexey Katsman).
  • Se corrigieron varios tipos de consultas SELECT que leen de tablas con motor MongoDB o la función de tabla mongodb: consultas con conversión implícita de un valor constante en la cláusula WHERE (p. ej., WHERE datetime = '2025-03-10 00:00:00'); consultas con LIMIT y GROUP BY. Anteriormente, podían devolver resultados incorrectos. #78777 (Anton Popov).
  • No bloquear el cierre de la tabla al ejecutar CHECK TABLE. #78782 (Raúl Marín).
  • Corrección en Keeper: se corrige el recuento de elementos efímeros en todos los casos. #78799 (Antonio Andelic).
  • Soluciona una conversión de tipo incorrecta en StorageDistributed al usar funciones de tabla distintas de view. Cierra #78464. #78828 (Konstantin Bogdanov).
  • Corrige la consistencia del formato de tupleElement(*, 1). Cierra #78639. #78832 (Konstantin Bogdanov).
  • Los diccionarios de tipo ssd_cache ahora rechazan los parámetros block_size y write_buffer_size cuando tienen un valor cero o negativo (incidencia #78314). #78854 (Elmi Ahmadov).
  • Corrige el fallo en una vista materializada actualizable en el caso de ALTER tras un apagado incorrecto. #78858 (Azat Khuzhin).
  • Se corrige el procesamiento de valores DateTime no válidos en formato CSV. #78919 (Pavel Kruglov).
  • Corrección de Keeper: evitar activar watches en solicitudes múltiples fallidas. #79247 (Antonio Andelic).
  • Se corrigió un fallo en la lectura de una tabla Iceberg cuando el valor mín.-máx. se especificaba explícitamente, pero era NULL. Se observó que la biblioteca Iceberg de Go generaba archivos así de atroces. Cierra #78740. #78764 (flynn).

Mejora de compilación/pruebas/empaquetado

  • Respetar las características de destino de la CPU en Rust y habilitar LTO en todos los crates. #78590 (Raúl Marín).

Versión 25.3 LTS de ClickHouse, 2025-03-20

Cambio incompatible con versiones anteriores

Nueva funcionalidad

  • El tipo de datos JSON está listo para su uso en producción. Consulta https://jsonbench.com/. Los tipos de datos Dynamic y Variant están listos para su uso en producción. #77785 (Alexey Milovidov).
  • Se incorpora el protocolo SSH para clickhouse-server. Ahora es posible conectarse a ClickHouse con cualquier cliente SSH. Esto cierra: #74340. #74989 (George Gamezardashvili).
  • Sustituye las funciones de tabla por sus alternativas -Cluster si están habilitadas las réplicas paralelas. Corrige #65024. #70659 (Konstantin Bogdanov).
  • Una nueva implementación de la caché de páginas en espacio de usuario, que permite almacenar datos en caché en la memoria del proceso en lugar de depender de la caché de páginas del sistema operativo, lo que resulta útil cuando los datos se almacenan en un sistema de archivos virtual remoto sin el respaldo de la caché del sistema de archivos local. #70509 (Michael Kolupaev).
  • Se añadió la configuración de servidor concurrent_threads_scheduler, que regula cómo se distribuyen los slots de CPU entre las consultas concurrentes. Puede establecerse en round_robin (comportamiento anterior) o fair_round_robin para solucionar el problema de la distribución desigual de CPU entre INSERTs y SELECTs. #75949 (Sergei Trifonov).
  • Se agregó la función de agregación estimateCompressionRatio #70801. #76661 (Tariq Almawash).
  • Se añadió la función arraySymmetricDifference. Devuelve todos los elementos de varios argumentos de tipo array que no aparecen en todos los argumentos. Ejemplo: SELECT arraySymmetricDifference([1, 2], [2, 3]) devuelve [1, 3]. (issue #61673). #76231 (Filipp Abapolov).
  • Permite especificar explícitamente el archivo de metadatos que debe leerse para Iceberg con la configuración iceberg_metadata_file_path de la función de tabla o del almacenamiento. Corrige #47412. #77318 (alesapin).
  • Se añadió la función hash keccak256, utilizada habitualmente en implementaciones de blockchain, especialmente en sistemas basados en EVM. #76669 (Arnaud Briche).
  • Se añaden tres funciones nuevas: icebergTruncate, según la especificación https://iceberg.apache.org/spec/#truncate-transform-details, toYearNumSinceEpoch y toMonthNumSinceEpoch. Se admite la transformación truncate en la poda de particiones del motor Iceberg. #77403 (alesapin).
  • Soporte para los tipos de datos LowCardinality(Decimal) #72256. #72833 (zhanglistar).
  • Los eventos de perfil FilterTransformPassedRows y FilterTransformPassedBytes mostrarán la cantidad de filas y bytes filtrados durante la ejecución de la consulta. #76662 (Onkar Deshpande).
  • Compatibilidad con el tipo de métrica de histograma. La interfaz sigue muy de cerca la del cliente de Prometheus, donde basta con llamar a observe(value) para incrementar el contador del bucket correspondiente al valor. Las métricas de histograma se exponen a través de system.histogram_metrics. #75736 (Miсhael Stetsyuk).
  • Soporte para CASE no constante al seleccionar en función de valores explícitos. #77399 (Yarik Briukhovetskyi).

Funcionalidad experimental

  • Se añadió compatibilidad con Unity Catalog para tablas DeltaLake sobre AWS S3 y el sistema de archivos local. #76988 (alesapin).
  • Se introdujo una integración experimental con el catálogo de servicios de AWS Glue para tablas Iceberg. #77257 (alesapin).
  • Se añadió compatibilidad con el descubrimiento automático dinámico de clústeres. Esto amplía la funcionalidad existente de descubrimiento automático de nodos. ClickHouse ahora puede detectar y registrar automáticamente nuevos clústeres en una ruta común de ZooKeeper mediante <multicluster_root_path>. #76001 (Anton Ivashkin).
  • Se permite realizar automáticamente merges de limpieza de particiones completas tras un tiempo de espera configurable mediante la nueva configuración enable_replacing_merge_with_cleanup_for_min_age_to_force_merge. #76440 (Christoph Wurm).

Mejora del rendimiento

  • Implementar una caché de condiciones de consulta para mejorar el rendimiento de las consultas con condiciones repetidas. El intervalo de la porción de datos que no cumple la condición se recuerda como un índice temporal en memoria. Las consultas posteriores usarán este índice. Cierra #67768 #69236 (zhongyuankai).
  • Expulsar activamente datos de la caché al eliminar partes. No permitir que la caché crezca hasta el tamaño máximo si la cantidad de datos es menor. #76641 (Alexey Milovidov).
  • Sustituir Int256 y UInt256 por el builtin i256 de clang en los cálculos aritméticos, lo que mejora el rendimiento #70502. #73658 (李扬).
  • En algunos casos (p. ej., una columna de array vacía), las partes de datos pueden contener archivos vacíos. Se puede omitir la escritura de blobs vacíos en ObjectStorage y almacenar solo los metadatos de esos archivos cuando la tabla reside en un disco con metadatos y almacenamiento de objetos separados. #75860 (Alexander Gololobov).
  • Mejorar el rendimiento de min/max para Decimal32/Decimal64/DateTime64. #76570 (李扬).
  • La compilación de consultas (ajuste compile_expressions) ahora tiene en cuenta el tipo de máquina. Esto acelera significativamente estas consultas. #76753 (ZhangLiStar).
  • Optimizar arraySort. #76850 (李扬).
  • Desactivar filesystem_cache_prefer_bigger_buffer_size cuando la caché se use de forma pasiva, como en las fusiones. #77898 (Kseniia Sumarokova).
  • Aplicar el atributo preserve_most en algunos puntos del código, lo que permite una generación de código ligeramente mejor. #67778 (Nikita Taranov).
  • Cierre más rápido de los servidores ClickHouse (elimina un retraso de 2,5 s). #76550 (Azat Khuzhin).
  • Evitar la asignación excesiva en ReadBufferFromS3 y otros búferes de lectura remota; reducir a la mitad su consumo de memoria. #76692 (Sema Checherinda).
  • Actualizar zstd de 1.5.5 a 1.5.7, lo que podría dar lugar a algunas mejoras de rendimiento. #77137 (Pradeep Chhetri).
  • Reducir el uso de memoria durante los prefetches de una columna JSON en partes wide. Esto es relevante cuando ClickHouse se usa sobre almacenamiento compartido, como en ClickHouse Cloud. #77640 (Pavel Kruglov).

Mejora

  • Se admite el cambio de nombre atómico cuando se usa TRUNCATE con INTO OUTFILE. Resuelve #70323. #77181 (Onkar Deshpande).
  • Ya no es posible usar NaN o inf como valores de configuración de tipo flotante. No es que antes tuviera mucho sentido. #77546 (Yarik Briukhovetskyi).
  • Se deshabilitan las réplicas paralelas de forma predeterminada cuando analyzer está deshabilitado, independientemente de la configuración de compatibility. Aun así, es posible cambiar este comportamiento estableciendo explícitamente parallel_replicas_only_with_analyzer en false. #77115 (Igor Nikonov).
  • Se añadió la posibilidad de definir una lista de cabeceras que se reenvían desde la solicitud del cliente al autenticador HTTP externo. #77054 (inv2004).
  • Se respeta la coincidencia de columnas sin distinción entre mayúsculas y minúsculas para los campos de las columnas de tuplas. Cierra https://github.com/apache/incubator-gluten/issues/8324. #73780 (李扬).
  • Los parámetros del códec Gorilla ahora siempre se guardarán en los metadatos de la table en el archivo .sql. Esto resuelve: #70072. #74814 (Nikita Mikhaylov).
  • Se implementaron mejoras en el análisis para ciertos lagos de datos (análisis de Sequence ID: se añadió funcionalidad para analizar identificadores de secuencia en archivos manifest, y análisis de metadatos de Avro: se rediseñó el analizador de metadatos de Avro para que sea fácilmente extensible en futuras mejoras). #75010 (Daniil Ivanik).
  • Se quitó trace_id del ORDER BY predeterminado de system.opentelemetry_span_log. #75907 (Azat Khuzhin).
  • El cifrado (el atributo encrypted_by) ahora puede aplicarse a cualquier archivo de configuración (config.xml, users.xml y archivos de configuración anidados). Anteriormente, solo funcionaba con el archivo config.xml de nivel superior. #75911 (Mikhail Gorshkov).
  • Mejora de la tabla system.warnings y adición de algunos mensajes de advertencia dinámicos que pueden añadirse, actualizarse o eliminarse. #76029 (Bharat Nallan).
  • Este PR hace que no se pueda ejecutar una consulta ALTER USER user1 ADD PROFILES a, DROP ALL PROFILES, porque todas las operaciones DROP deben ir primero. #76242 (pufit).
  • Varias mejoras para SYNC REPLICA (mensajes de error mejorados, pruebas mejoradas, comprobaciones de coherencia). #76307 (Azat Khuzhin).
  • Usa el fallback correcto cuando falle la copia multiparte a S3 durante una copia de seguridad con Access Denied. La copia multiparte puede generar un error de Access Denied cuando la copia de seguridad se realiza entre buckets con credenciales distintas. #76515 (Antonio Andelic).
  • Se actualizó librdkafka (que es un montón de basura) a la versión 2.8.0 (el montón no mejora en nada) y se mejoró la secuencia de cierre de las tablas de Kafka, reduciendo los retrasos durante la eliminación de tablas y los reinicios del servidor. engine=Kafka ya no sale explícitamente del grupo de consumidores cuando se elimina una tabla. En su lugar, el consumidor permanece en el grupo hasta que se elimina automáticamente tras session_timeout_ms (valor predeterminado: 45 segundos) de inactividad. #76621 (filimonov).
  • Se corrige la validación de la configuración de las solicitudes a S3. #76658 (Vitaly Baranov).
  • Las tablas del sistema como server_settings o settings tienen una columna con el valor default, lo cual resulta conveniente. Añádalas a merge_tree_settings y replicated_merge_tree_settings. #76942 (Diego Nieto).
  • Se añadió ProfileEvents::QueryPreempted, que sigue una lógica similar a CurrentMetrics::QueryPreempted. #77015 (VicoWu).
  • Anteriormente, una base de datos Replicated podía mostrar en los logs las credenciales especificadas en una consulta. Este comportamiento se ha corregido. Esto cierra: #77123. #77133 (Nikita Mikhaylov).
  • Permitir ALTER TABLE DROP PARTITION en plain_rewritable disk. #77138 (Julia Kartseva).
  • La configuración de copia de seguridad/restauración allow_s3_native_copy ahora admite tres valores posibles: - False - no se usará la copia nativa de S3; - True (valor predeterminado anterior) - ClickHouse intentará primero la copia nativa de S3; si falla, recurrirá al método de lectura+escritura; - 'auto' (nuevo valor predeterminado) - ClickHouse comparará primero las credenciales de origen y destino. Si son las mismas, ClickHouse intentará la copia nativa de S3 y luego podrá recurrir al método de lectura+escritura. Si son diferentes, ClickHouse irá directamente al método de lectura+escritura. #77401 (Vitaly Baranov).
  • Se admite el uso del token de sesión de AWS y las credenciales de entorno en Delta Kernel para el motor de tabla DeltaLake. #77661 (Kseniia Sumarokova).

Corrección de errores (fallo visible para el usuario en una versión estable oficial)

  • Se corrigió el bloqueo al procesar un lote pendiente para INSERT distribuido asíncrono (debido, por ejemplo, a No such file or directory). #72939 (Azat Khuzhin).
  • Se mejoró la conversión de fecha y hora durante el análisis de índices al forzar un comportamiento saturante en las conversiones implícitas de Date a DateTime. Esto resuelve posibles imprecisiones en el análisis de índices causadas por las limitaciones del rango de fecha y hora. Corrige #73307. También corrige la conversión explícita toDateTime cuando date_time_overflow_behavior = 'ignore', que es el valor predeterminado. #73326 (Amos Bird).
  • Corrige todo tipo de errores debidos a condiciones de carrera entre UUID y nombres de tablas (por ejemplo, corrige la condición de carrera entre RENAME y RESTART REPLICA; en caso de un RENAME concurrente con SYSTEM RESTART REPLICA, podrías acabar reiniciando la réplica equivocada o incluso dejando una de las tablas en el estado Table X is being restarted). #76308 (Azat Khuzhin).
  • Corrige la pérdida de datos al habilitar async insert e insertar en … desde un archivo … con tamaños de bloque desiguales: si el tamaño del primer bloque < async_max_size pero el segundo bloque > async_max_size, el segundo bloque no se insertará. Estos datos quedan en squashing. #76343 (Han Fei).
  • Se renombró el campo ‘marks’ a ‘marks_bytes’ en system.data_skipping_indices. #76374 (Robert Schulze).
  • Corrige el manejo del cambio de tamaño dinámico de la caché del sistema de archivos ante errores inesperados durante la evicción. #76466 (Kseniia Sumarokova).
  • Se corrigió la inicialización de used_flag en el hash en paralelo. Esto podría provocar un fallo del servidor. #76580 (Nikita Taranov).
  • Se corrige un error lógico al llamar a la función defaultProfiles dentro de una proyección. #76627 (pufit).
  • No solicitar autenticación básica interactiva en el navegador desde la interfaz web. Cierra #76319. #76637 (Alexey Milovidov).
  • Corrige la excepción THERE_IS_NO_COLUMN al seleccionar un literal booleano en tablas distribuidas. #76656 (Yakov Olkhovskiy).
  • La subruta dentro del directorio de la tabla se elige ahora de una forma más precisa. #76681 (Daniil Ivanik).
  • Se corrigió un error Not found column in block después de modificar una tabla con una subcolumna en la PK. Tras https://github.com/ClickHouse/ClickHouse/pull/72644, se requiere https://github.com/ClickHouse/ClickHouse/pull/74403. #76686 (Nikolai Kochetov).
  • Añade pruebas de rendimiento para la evaluación con cortocircuito de NULL y corrige errores. #76708 (李扬).
  • Vaciar los búferes de escritura de salida antes de finalizarlos. Corrige el LOGICAL_ERROR que se generaba durante la finalización de algunos formatos de salida, por ejemplo, JSONEachRowWithProgressRowOutputFormat. #76726 (Antonio Andelic).
  • Se añadió compatibilidad con el UUID binario de MongoDB (#74452) - Se corrigió el pushdown de WHERE a MongoDB al usar la función de tabla (#72210) - Se cambió el mapeo de tipos entre MongoDB y ClickHouse para que el UUID binario de MongoDB solo pueda analizarse como UUID de ClickHouse. Esto debería evitar ambigüedades y comportamientos inesperados en el futuro. - Se corrigió el mapeo de OID, preservando la compatibilidad con versiones anteriores. #76762 (Kirill Nikiforov).
  • Se corrige la gestión de excepciones en la deserialización en paralelo de prefijos de subcolumnas JSON. #76809 (Pavel Kruglov).
  • Se corrige el comportamiento de la función lgamma para enteros negativos. #76840 (Ilya Kataev).
  • Se corrige el análisis inverso para claves primarias definidas explícitamente. Similar a #76654. #76846 (Amos Bird).
  • Se corrige la representación legible de los valores Bool en formato JSON. #76905 (Pavel Kruglov).
  • Se corrige un posible cierre inesperado causado por una reversión incorrecta de la columna JSON cuando se produce un error durante inserciones asíncronas. #76908 (Pavel Kruglov).
  • Anteriormente, multiIf podía devolver columnas de distintos tipos durante la planificación y la ejecución principal. Esto hacía que el código produjera un comportamiento indefinido desde la perspectiva de C++. #76914 (Nikita Taranov).
  • Se corrigió la serialización incorrecta de claves constantes Nullable en MergeTree. Esto soluciona #76939. #76985 (Amos Bird).
  • Se corrigió la ordenación de los valores BFloat16. Esto cierra #75487. Esto cierra #75669. #77000 (Alexey Milovidov).
  • Se corrigió un problema con JSON y la subcolumna Variant al añadir una comprobación para omitir las subcolumnas efímeras en la comprobación de consistencia de partes. #72187. #77034 (Smita Kulkarni).
  • Se corrige un fallo en el análisis sintáctico de Template en el formato Values en caso de incompatibilidad de tipos. #77071 (Pavel Kruglov).
  • No permitir la creación de tablas EmbeddedRocksDB con una subcolumna en la clave primaria. Anteriormente, se podían crear estas tablas, pero las consultas SELECT fallaban. #77074 (Pavel Kruglov).
  • Corrige una comparación no válida en las consultas distribuidas, porque trasladar predicados a nodos remotos no respeta los tipos de los literales. #77093 (Duc Canh Le).
  • Se corrige un cierre inesperado al crear una tabla de Kafka que generaba una excepción. #77121 (Pavel Kruglov).
  • Se admite JSON y subcolumnas en los motores Kafka y RabbitMQ. #77122 (Pavel Kruglov).
  • Se corrigió el desenrollado de la pila de excepciones en MacOS. #77126 (Eduard Karacharov).
  • Se corrigió la lectura de la subcolumna ‘null’ en la función getSubcolumn. #77163 (Pavel Kruglov).
  • Se corrige el índice bloom filter para Array y funciones no compatibles. #77271 (Pavel Kruglov).
  • Solo se debe comprobar la restricción sobre el número de tablas durante la consulta CREATE inicial. #77274 (Nikolay Degterinsky).
  • No es un error: SELECT toBFloat16(-0.0) == toBFloat16(0.0) ahora devuelve correctamente true (antes devolvía false). Esto hace que el comportamiento sea consistente con Float32 y Float64. #77290 (Shankar Iyer).
  • Corrige una posible referencia incorrecta a la variable key_index sin inicializar, lo que puede provocar un fallo en builds de depuración (esta referencia sin inicializar no causará problemas en builds release porque es probable que el código posterior genere errores). ### entrada de documentación para cambios visibles para el usuario. #77305 (wxybear).
  • Se corrige el nombre de la partición con un valor Bool. Se había roto en https://github.com/ClickHouse/ClickHouse/pull/74533. #77319 (Pavel Kruglov).
  • Se corrige la comparación entre Tuples con elementos Nullable y Strings. Por ejemplo, antes del cambio, la comparación entre un Tuple (1, null) y un String '(1,null)' provocaba un error. Otro ejemplo es la comparación entre un Tuple (1, a), donde a es una columna Nullable, y un String '(1, 2)'. Este cambio soluciona estos problemas. #77323 (Alexey Katsman).
  • Se corrigió un fallo en ObjectStorageQueueSource. Se había introducido en https://github.com/ClickHouse/ClickHouse/pull/76358. #77325 (Pavel Kruglov).
  • Se corrige async_insert con input. #77340 (Azat Khuzhin).
  • Corrección: WITH FILL puede fallar con NOT_FOUND_COLUMN_IN_BLOCK cuando el planificador elimina la columna usada para ordenar. Problema similar relacionado con un DAG inconsistente calculado para la expresión INTERPOLATE. #77343 (Yakov Olkhovskiy).
  • Corrige varios LOGICAL_ERROR al asignar alias a nodos AST no válidos. #77445 (Raúl Marín).
  • Se corrige el manejo de errores durante la escritura de segmentos de archivo en la implementación de la caché del sistema de archivos. #77471 (Kseniia Sumarokova).
  • Hacer que DatabaseIceberg utilice el archivo de metadatos correcto proporcionado por el catálogo. Cierra #75187. #77486 (Kseniia Sumarokova).
  • La caché de consultas ahora considera que las UDF no son deterministas. En consecuencia, los resultados de las consultas con UDF ya no se almacenan en caché. Anteriormente, los usuarios podían definir UDF no deterministas cuyo resultado podía almacenarse erróneamente en caché (incidencia #77553). #77633 (Jimmy Aguilar Mena).
  • Se corrigió un problema por el que system.filesystem_cache_log solo funcionaba con la configuración enable_filesystem_cache_log. #77650 (Kseniia Sumarokova).
  • Corrige un error lógico al llamar a la función defaultRoles dentro de una proyección. Como continuación de #76627. #77667 (pufit).
  • Los segundos argumentos de tipo Nullable para la función arrayResize ya no se permiten. Anteriormente, con Nullable como segundo argumento, podía ocurrir cualquier cosa, desde errores hasta resultados incorrectos. (issue #48398). #77724 (Manish Gill).
  • Comprobar regularmente si las fusiones y mutaciones se han cancelado, incluso cuando la operación no produce ningún bloque que escribir. #77766 (János Benjamin Antal).

Mejora de compilación/pruebas/empaquetado

Versión 25.2 de ClickHouse, 2025-02-27

Cambio incompatible con versiones anteriores

  • Se habilita completamente async_load_databases de forma predeterminada (incluso para aquellas instalaciones que no actualicen config.xml). #74772 (Azat Khuzhin).
  • Se añaden los formatos JSONCompactEachRowWithProgress y JSONCompactStringsEachRowWithProgress. Continuación de #69989. JSONCompactWithNames y JSONCompactWithNamesAndTypes ya no generan “totals”; al parecer, se trataba de un error de implementación. #75037 (Alexey Milovidov).
  • Se cambia el valor predeterminado de format_alter_operations_with_parentheses a true para eliminar la ambigüedad de la lista de comandos ALTER (consulta https://github.com/ClickHouse/ClickHouse/pull/59532). Esto rompe la replicación con clústeres anteriores a la versión 24.3. Si estás actualizando un clúster que usa versiones más antiguas, desactiva esta opción en la configuración del servidor o actualiza primero a la 24.3. #75302 (Raúl Marín).
  • Se elimina la posibilidad de filtrar mensajes de registro mediante expresiones regulares. La implementación introducía una condición de carrera, por lo que ha tenido que eliminarse. #75577 (János Benjamin Antal).
  • La opción min_chunk_bytes_for_parallel_parsing ya no puede ser cero. Esto corrige: #71110. #75239 (Nikita Mikhaylov).
  • Se validan los ajustes en la configuración de la caché. Antes, los ajustes inexistentes se ignoraban; ahora provocarán un error y deben eliminarse. #75452 (Kseniia Sumarokova).

Nueva funcionalidad

  • Compatibilidad con el tipo Nullable(JSON). #73556 (Pavel Kruglov).
  • Compatibilidad con subcolumnas en las expresiones DEFAULT y MATERIALIZED. #74403 (Pavel Kruglov).
  • Compatibilidad con la escritura de bloom filters de Parquet mediante la configuración output_format_parquet_write_bloom_filter (habilitada de forma predeterminada). #71681 (Michael Kolupaev).
  • La interfaz web ahora cuenta con navegación interactiva por la base de datos. #75777 (Alexey Milovidov).
  • Permite combinar discos de solo lectura y de lectura y escritura en la política de almacenamiento (como varios volúmenes o varios discos). Esto permite leer datos de todo el volumen, mientras que las inserciones darán preferencia al disco con escritura habilitada (es decir, una política de almacenamiento Copy-on-Write). #75862 (Azat Khuzhin).
  • Agrega un nuevo motor de base de datos, DatabaseBackup, que permite adjuntar al instante una tabla o base de datos desde una copia de seguridad. #75725 (Maksim Kita).
  • Compatibilidad con sentencias preparadas en el protocolo wire de Postgres. #75035 (scanhex12).
  • Agrega la capacidad de ATTACH tablas sin capa de base de datos, lo que resulta útil para tablas MergeTree ubicadas en Web, S3 y sistemas de archivos virtuales externos similares. #75788 (Azat Khuzhin).
  • Agrega una nueva función de comparación de cadenas, compareSubstrings, para comparar fragmentos de dos cadenas. Ejemplo: SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result significa «comparar lexicográficamente 6 bytes de las cadenas ‘Saxon’ y ‘Anglo-Saxon’, comenzando en el desplazamiento 0 de la primera cadena y en el desplazamiento 5 de la segunda». #74070 (lgbo).
  • Se agrega una nueva función, initialQueryStartTime. Devuelve la hora de inicio de la consulta actual. El valor es el mismo en todos los segmentos durante una consulta distribuida. #75087 (Roman Lomonosov).
  • Agrega compatibilidad con autenticación SSL mediante colecciones con nombre para MySQL. Cierra #59111. #59452 (Nikolay Degterinsky).

Características experimentales

  • Se añadió un nuevo ajuste, enable_adaptive_memory_spill_scheduler, que permite que varios Grace JOIN en la misma consulta supervisen su huella de memoria combinada y desencadenen de forma adaptativa el spilling a almacenamiento externo para evitar MEMORY_LIMIT_EXCEEDED. #72728 (lgbo).
  • Se actualizó el nuevo motor de tabla experimental Kafka para que respete por completo las feature flags de Keeper. #76004 (János Benjamin Antal).
  • Se restauró el codec QPL (Intel), que se había eliminado en la v24.10 debido a problemas de licencia. #76021 (Konstantin Bogdanov).
  • Para la integración con HDFS, se añadió compatibilidad con la opción de configuración dfs.client.use.datanode.hostname. #74635 (Mikhail Tiukavkin).

Mejora de rendimiento

  • Mejora del rendimiento de la lectura de la columna JSON completa en partes Wide desde S3. Esto se consigue añadiendo prefetches para la deserialización de prefijos de subcolumnas, una caché de prefijos deserializados y la deserialización en paralelo de los prefijos de subcolumnas. Esto mejora 4 veces la lectura de la columna JSON desde S3 en consultas como SELECT data FROM table y alrededor de 10 veces en consultas como SELECT data FROM table LIMIT 10. #74827 (Pavel Kruglov).
  • Se corrigió una contención innecesaria en parallel_hash cuando max_rows_in_join = max_bytes_in_join = 0. #75155 (Nikita Taranov).
  • Se corrigió la doble preasignación en ConcurrentHashJoin en caso de que el optimizador intercambie los lados del join. #75149 (Nikita Taranov).
  • Ligera mejora en algunos escenarios de join: se precalcula el número de filas de salida y se reserva memoria para ellas. #75376 (Alexander Gololobov).
  • Para consultas como WHERE a < b AND b < c AND c < 5, se pueden inferir nuevas condiciones de comparación (a < 5 AND b < 5) para mejorar la capacidad de filtrado. #73164 (Shichao Jin).
  • Mejora en Keeper: se deshabilita el cálculo del digest al confirmar en el almacenamiento en memoria para mejorar el rendimiento. Puede habilitarse con la configuración keeper_server.digest_enabled_on_commit. El digest se sigue calculando al preprocesar las solicitudes. #75490 (Antonio Andelic).
  • Se hace push down de la expresión de filtro desde JOIN ON cuando es posible. #75536 (Vladimir Cherkasov).
  • Se calculan de forma diferida los tamaños de las columnas y los índices en MergeTree. #75938 (Pavel Kruglov).
  • Se vuelve a respetar ttl_only_drop_parts en MATERIALIZE TTL; solo se leen las columnas necesarias para recalcular TTL y eliminar partes reemplazándolas por otras vacías. #72751 (Andrey Zvonov).
  • Se reduce el tamaño del búfer de escritura para los archivos de metadatos plain_rewritable. #75758 (Julia Kartseva).
  • Se reduce el uso de memoria de algunas funciones de ventana. #65647 (lgbo).
  • Se evalúan conjuntamente los bloom filters de Parquet y los índices min/max. Es necesario para admitir correctamente: x = 3 or x > 5 donde data = [1, 2, 4, 5]. #71383 (Arthur Passos).
  • Las consultas pasadas al almacenamiento Executable ya no están limitadas a una ejecución de un solo hilo. #70084 (yawnt).
  • Se obtienen partes en paralelo en ALTER TABLE FETCH PARTITION (el tamaño del thread pool se controla con max_fetch_partition_thread_pool_size). #74978 (Azat Khuzhin).
  • Se permite mover predicados con la función indexHint a PREWHERE. #74987 (Anton Popov).

Mejora

  • Se ha corregido el cálculo del tamaño en memoria de las columnas LowCardinality. #74688 (Nikita Taranov).
  • La tabla processors_profile_log ahora tiene una configuración predeterminada con un TTL de 30 días. #66139 (Ilya Yatsishin).
  • Permitir asignar nombres a los segmentos en la configuración del clúster. #72276 (MikhailBurdukov).
  • Cambia el código de estado de éxito de la respuesta de remote write de Prometheus de 200/OK a 204/NoContent. #74170 (Michael Dempsey).
  • Se añadió la posibilidad de recargar max_remote_read_network_bandwidth_for_serve y max_remote_write_network_bandwidth_for_server en caliente sin reiniciar el servidor. #74206 (Kai Zhu).
  • Permite usar rutas de blob para calcular sumas de comprobación al hacer una copia de seguridad. #74729 (Vitaly Baranov).
  • Se añadió una columna de ID de consulta a system.query_cache (cierra #68205). #74982 (NamHoaiNguyen).
  • Se permite cancelar consultas ALTER TABLE ... FREEZE ... con KILL QUERY y también automáticamente por un timeout (max_execution_time). #75016 (Kirill).
  • Se agregó compatibilidad con groupUniqArrayArrayMap como SimpleAggregateFunction. #75034 (Miel Donkers).
  • Se oculta la configuración de credenciales del catálogo en el motor de base de datos Iceberg. Cierra #74559. #75080 (Kseniia Sumarokova).
  • intExp2 / intExp10: Definen el comportamiento en casos indefinidos: devuelven 0 para un argumento demasiado pequeño, 18446744073709551615 para un argumento demasiado grande y lanzan una excepción si es nan. #75312 (Vitaly Baranov).
  • Soporte nativo de s3.endpoint desde la configuración del catálogo en DatabaseIceberg. Cierra #74558. #75375 (Kseniia Sumarokova).
  • No fallar de forma silenciosa si un usuario que ejecuta SYSTEM DROP REPLICA no tiene permisos suficientes. #75377 (Bharat Nallan).
  • Se añade un ProfileEvent sobre el número de veces que alguno de los logs del sistema no se ha podido vaciar. #75466 (Alexey Milovidov).
  • Se añade una comprobación y registros adicionales para el descifrado y la descompresión. #75471 (Vitaly Baranov).
  • Se añadió compatibilidad con el signo micro (U+00B5) en la función parseTimeDelta. Ahora, tanto el signo micro (U+00B5) como la letra griega mu (U+03BC) se reconocen como representaciones válidas de microsegundos, lo que alinea el comportamiento de ClickHouse con la implementación de Go (ver time.go y time/format.go). #75472 (Vitaly Orlov).
  • Se sustituye la configuración del servidor (send_settings_to_client) por la configuración de cliente (apply_settings_from_server), que controla si el código del lado del cliente (p. ej., el análisis de datos INSERT y el formateo de la salida de la consulta) debe usar la configuración de users.xml del servidor y del perfil de usuario. De lo contrario, solo se usan la configuración de la línea de comandos del cliente, la sesión y la consulta. Tenga en cuenta que esto solo se aplica al cliente nativo (no, por ejemplo, a HTTP) y no afecta a la mayor parte del procesamiento de consultas (que ocurre en el servidor). #75478 (Michael Kolupaev).
  • Mejores mensajes de error para errores de sintaxis. Anteriormente, si la consulta era demasiado grande y el token cuya longitud superaba el límite era un literal de cadena muy largo, el mensaje con la causa se perdía entre dos ejemplos de ese token larguísimo. Se corrige el problema por el que una consulta con UTF-8 se truncaba incorrectamente en el mensaje de error. Se corrige el uso excesivo de comillas en fragmentos de consulta. Esto cierra #75473. #75561 (Alexey Milovidov).
  • Se agregan eventos de perfil al almacenamiento S3(Azure)Queue. #75618 (Kseniia Sumarokova).
  • Deshabilitar el envío de la configuración del servidor al cliente (send_settings_to_client=false) por motivos de compatibilidad (Esta funcionalidad se volverá a implementar más adelante como una configuración de cliente para facilitar su uso). #75648 (Michael Kolupaev).
  • Se añadió la configuración memory_worker_correct_memory_tracker para permitir corregir el rastreador de memoria interno con información de distintas fuentes, leída periódicamente por el hilo en segundo plano. #75714 (Antonio Andelic).
  • Se añade la columna normalized_query_hash a system.processes. Nota: aunque puede calcularse fácilmente sobre la marcha con la función normalizedQueryHash, esto es necesario para preparar cambios posteriores. #75756 (Alexey Milovidov).
  • Consultar system.tables no generará una excepción aunque exista una tabla Merge creada sobre una base de datos que ya no existe. Se elimina el método getTotalRows de las tablas Hive porque no se permite que realice operaciones complejas. #75772 (Alexey Milovidov).
  • Se almacenan start_time/end_time para las copias de seguridad con precisión de microsegundos. #75929 (Aleksandr Musorin).
  • Añade la métrica MemoryTrackingUncorrected, que muestra el valor del memory tracker global interno, no corregido por RSS. #75935 (Antonio Andelic).
  • Permitir analizar endpoints como localhost:1234/handle en las funciones de tabla de PostgreSQL o MySQL. Esto corrige una regresión introducida en https://github.com/ClickHouse/ClickHouse/pull/52503. #75944 (Nikita Mikhaylov).
  • Se añadió una configuración a nivel de servidor, throw_on_unknown_workload, que permite elegir el comportamiento de una consulta cuando la configuración workload se establece con un valor desconocido: permitir acceso ilimitado (opción predeterminada) o devolver un error RESOURCE_ACCESS_DENIED. Es útil para obligar a que todas las consultas usen la planificación de cargas de trabajo. #75999 (Sergei Trifonov).
  • No reescribir subcolumnas como getSubcolumn en ARRAY JOIN si no es necesario. #76018 (Pavel Kruglov).
  • Reintento en caso de errores de coordinación al cargar tablas. #76020 (Alexander Tokmakov).
  • Se admite el vaciado de registros individuales en SYSTEM FLUSH LOGS. #76132 (Raúl Marín).
  • Se mejoró la página del servidor /binary. Se utiliza la curva de Hilbert en lugar de la curva de Morton. Se muestran en el cuadrado direcciones correspondientes a 512 MB, lo que permite aprovechar mejor el espacio (en versiones anteriores, las direcciones solo ocupaban la mitad del cuadrado). Las direcciones se colorean en función de su proximidad al nombre de la biblioteca, en lugar de al nombre de la función. Se permite desplazarse un poco más fuera de esa área. #76192 (Alexey Milovidov).
  • Reintentar las consultas ON CLUSTER en caso de TOO_MANY_SIMULTANEOUS_QUERIES. #76352 (Patrick Galbraith).
  • Se añade la métrica asíncrona CPUOverload, que calcula el déficit relativo de CPU del servidor. #76404 (Alexey Milovidov).
  • Se cambió el valor predeterminado de output_format_pretty_max_rows de 10000 a 1000. Creo que así es más fácil de usar. #76407 (Alexey Milovidov).

Corrección de errores (fallo visible para el usuario en una versión estable oficial)

  • Se corrige el formateo de las excepciones con un formato personalizado si aparecen durante la interpretación de la consulta. En versiones anteriores, las excepciones se formateaban con el formato predeterminado en lugar del formato especificado en la consulta. Esto resuelve #55422. #74994 (Alexey Milovidov).
  • Se corrige el mapeo de tipos de SQLite (int64 para los tipos enteros y float64 para los de coma flotante). #73853 (Joanna Hulboj).
  • Corrige la resolución de identificadores desde ámbitos superiores. Permite usar alias para expresiones en la cláusula WITH. Corrige #58994. Corrige #62946. Corrige #63239. Corrige #65233. Corrige #71659. Corrige #71828. Corrige #68749. #66143 (Dmitry Novik).
  • Se ha corregido la monotonía de la función negate. En versiones anteriores, la consulta select * from a where -x = -42;, donde x es la clave primaria, podía devolver un resultado incorrecto. #71440 (Michael Kolupaev).
  • Se corrige el manejo de tuplas vacías en arrayIntersect. Esto corrige #72578. #72581 (Amos Bird).
  • Se corrigió la lectura de subcolumnas de subobjetos JSON con un prefijo incorrecto. #73182 (Pavel Kruglov).
  • Propagar correctamente la configuración del formato Native para la comunicación cliente-servidor. #73924 (Pavel Kruglov).
  • Comprobación de tipos no compatibles en algunos motores de almacenamiento. #74218 (Pavel Kruglov).
  • Se corrigió un fallo con la consulta INSERT INTO SELECT en la Interfaz de PostgreSQL en macOS (problema #72938). #74231 (Artem Yurov).
  • Se corrigió max&#95;log&#95;ptr no inicializado en la base de datos replicada. #74336 (Konstantin Morozov).
  • Corrige un fallo al insertar un intervalo (incidencia #74299). #74478 (NamHoaiNguyen).
  • Se corrigió el formateo de literales JSON constantes. Anteriormente, esto podía provocar errores de sintaxis al enviar la consulta a otro servidor. #74533 (Pavel Kruglov).
  • Se corrige un fallo en la consulta CREATE al usar expresiones de partición constantes con proyecciones implícitas habilitadas. Esto corrige #74596 . #74634 (Amos Bird).
  • Evita dejar la conexión en un estado inconsistente después de que INSERT termine con una excepción. #74740 (Azat Khuzhin).
  • Evitar reutilizar conexiones que habían quedado en un estado intermedio. #74749 (Azat Khuzhin).
  • Se corrigió un fallo al analizar la declaración del tipo JSON cuando el nombre del tipo no está en mayúsculas. #74784 (Pavel Kruglov).
  • Keeper: se corrige logical_error cuando la conexión se había cerrado antes de establecerse. #74844 (Michael Kolupaev).
  • Se corrige un problema por el que el servidor no podía iniciarse cuando había una tabla que usaba AzureBlobStorage. Las tablas se cargan sin realizar ninguna solicitud a Azure. #74880 (Alexey Katsman).
  • Corrige los campos used_privileges y missing_privileges que faltaban en query_log para las operaciones BACKUP y RESTORE. #74887 (Alexey Katsman).
  • Renueva el ticket krb de HDFS si se produce un error de SASL durante una solicitud select a HDFS. #74930 (inv2004).
  • Se corrigieron las consultas a la base de datos Replicated en startup_scripts. #74942 (Azat Khuzhin).
  • Corrige problemas con expresiones con alias de tipo en la cláusula JOIN ON cuando se usa una comparación null-safe. #74970 (Vladimir Cherkasov).
  • Revierte el estado de la parte de deleting a outdated cuando falla la operación de eliminación. #74985 (Sema Checherinda).
  • En versiones anteriores, cuando había una subconsulta escalar, empezábamos a informar del progreso (acumulado durante el procesamiento de la subconsulta) durante la inicialización del formato de datos, antes de que se escribieran los encabezados HTTP. Esto provocaba la pérdida de encabezados HTTP, como X-ClickHouse-QueryId y X-ClickHouse-Format, así como de Content-Type. #74991 (Alexey Milovidov).
  • Se corrigen las consultas CREATE TABLE AS... con database_replicated_allow_replicated_engine_arguments=0. #75000 (Bharat Nallan).
  • Se corrige un problema por el que la conexión quedaba en mal estado en el cliente tras excepciones de INSERT. #75030 (Azat Khuzhin).
  • Se corrige un cierre inesperado debido a una excepción no controlada en la replicación de PSQL. #75062 (Azat Khuzhin).
  • Sasl puede hacer fallar cualquier llamada rpc; la corrección ayuda a repetir la llamada en caso de que el ticket de krb5 haya expirado. #75063 (inv2004).
  • Se corrigió el uso de los índices (primarios y secundarios) en columnas Array, Map y Nullable(..) con la configuración optimize_function_to_subcolumns habilitada. Anteriormente, los índices de estas columnas podían ignorarse. #75081 (Anton Popov).
  • Desactive flatten_nested al crear vistas materializadas con tablas internas, ya que no será posible usar esas columnas aplanadas. #75085 (Christoph Wurm).
  • Corrección de un problema por el que algunas direcciones IPv6 (como ::ffff:1.1.1.1) en el campo forwarded_for se interpretaban incorrectamente, lo que provocaba la desconexión del cliente con una excepción. #75133 (Yakov Olkhovskiy).
  • Se corrige el manejo de JOIN con comparaciones null-safe para el tipo de datos LowCardinality Nullable. Anteriormente, JOIN ON con comparación null-safe, como IS NOT DISTINCT FROM, <=> , a IS NULL AND b IS NULL OR a == b, no funcionaba correctamente con columnas LowCardinality. #75143 (Vladimir Cherkasov).
  • Comprueba que no se especifique key_condition al contar total_number_of_rows para NumRowsCache. #75164 (Daniil Ivanik).
  • Se corrigen las consultas con interpolación sin usar con el nuevo analizador. #75173 (János Benjamin Antal).
  • Se corrige el fallo que provocaba un cierre inesperado en CTE con Insert. #75188 (Shichao Jin).
  • Corrección en Keeper: evitar escribir en registros de cambios dañados al revertir logs. #75197 (Antonio Andelic).
  • Usa BFloat16 como supertipo cuando corresponda. Con esto se cierra: #74404. #75236 (Nikita Mikhaylov).
  • Corrige los valores predeterminados inesperados en el resultado de JOIN con any_join_distinct_right_table_keys y OR en JOIN ON. #75262 (Vladimir Cherkasov).
  • Se enmascaran las credenciales del motor de tabla azureblobstorage. #75319 (Garrett Thomas).
  • Se corrigió el comportamiento por el que ClickHouse podía realizar erróneamente un pushdown de filtro a una base de datos externa como PostgreSQL, MySQL o SQLite. Esto cierra: #71423. #75320 (Nikita Mikhaylov).
  • Se corrige un fallo en la caché de esquemas de Protobuf que puede producirse durante la salida en formato Protobuf y durante la ejecución en paralelo de la consulta SYSTEM DROP FORMAT SCHEMA CACHE. #75357 (Pavel Kruglov).
  • Corrige un posible error lógico o un problema de memoria no inicializada cuando un filtro de HAVING se empuja hacia abajo con réplicas en paralelo. #75363 (Vladimir Cherkasov).
  • Ocultar información sensible en las table functions icebergS3, icebergAzure y en los motores de tabla. #75378 (Kseniia Sumarokova).
  • La función TRIM con caracteres de recorte vacíos calculados ahora se gestiona correctamente. Ejemplo: SELECT TRIM(LEADING concat('') FROM 'foo') (incidencia #69922). #75399 (Manish Gill).
  • Se corrige una condición de carrera en IOutputFormat. #75448 (Pavel Kruglov).
  • Se corrige un posible error Elements ... and ... of Nested data structure ... (Array columns) have different array sizes al usar subcolumnas JSON de tipo Array en JOIN sobre tablas distribuidas. #75512 (Pavel Kruglov).
  • Soluciona la corrupción de datos con CODEC(ZSTD, DoubleDelta). Cierra #70031. #75548 (Konstantin Bogdanov).
  • Se corrige la interacción entre allow_feature_tier y el ajuste de compatibilidad de MergeTree. #75635 (Raúl Marín).
  • Corrige el valor incorrecto de processed_rows en system.s3queue_log cuando se reintenta un archivo. #75666 (Kseniia Sumarokova).
  • Se respeta materialized_views_ignore_errors cuando una vista materializada escribe en un motor URL y se produce un problema de conectividad. #75679 (Christoph Wurm).
  • Se corrigieron fallos poco frecuentes al leer de una tabla MergeTree después de múltiples consultas RENAME asíncronas (con alter_sync = 0) entre columnas con tipos diferentes. #75693 (Anton Popov).
  • Se corrige el error Block structure mismatch in QueryPipeline stream que se producía en algunas consultas con UNION ALL. #75715 (Nikolai Kochetov).
  • Reconstruir la proyección al ejecutar ALTER MODIFY en su columna PK. Anteriormente, esto podía provocar errores CANNOT_READ_ALL_DATA durante las consultas después de modificar con ALTER la columna usada en la PK de la proyección. #75720 (Pavel Kruglov).
  • Corrige el resultado incorrecto de ARRAY JOIN en subconsultas escalares (con el analizador). #75732 (Nikolai Kochetov).
  • Se corrigió la desreferenciación de un puntero nulo en DistinctSortedStreamTransform. #75734 (Nikita Taranov).
  • Se corrigió el comportamiento de allow_suspicious_ttl_expressions. #75771 (Aleksei Filatov).
  • Se corrige la lectura de memoria no inicializada en la función translate. Esto cierra #75592. #75794 (Alexey Milovidov).
  • Propagar la configuración de formato a JSON al formatear cadenas en Native format. #75832 (Pavel Kruglov).
  • Se registró en el historial de cambios de la configuración la activación predeterminada de parallel hash como algoritmo de join en la v24.12. Esto significa que ClickHouse seguirá realizando el join con non-parallel hash si se configura un nivel de compatibilidad anterior a la v24.12. #75870 (Robert Schulze).
  • Se corrigió un error por el que las tablas con índices min-max añadidos implícitamente no podían copiarse en una nueva tabla (incidencia #75677). #75877 (Smita Kulkarni).
  • clickhouse-library-bridge permite abrir bibliotecas arbitrarias desde el sistema de archivos, por lo que solo es seguro ejecutarlo dentro de un entorno aislado. Para evitar una vulnerabilidad cuando se ejecuta cerca de clickhouse-server, limitaremos las rutas de las bibliotecas a una ubicación especificada en la configuración. Esta vulnerabilidad fue descubierta a través del programa de recompensas por errores de ClickHouse por Arseniy Dugin. #75954 (Alexey Milovidov).
  • Resultó que usamos la serialización JSON para algunos metadatos, y eso fue un error, porque JSON no admite datos binarios dentro de literales de cadena, incluidos los bytes nulos. Las consultas SQL pueden contener datos binarios y UTF-8 no válido, así que también tenemos que admitir esto en nuestros archivos de metadatos. Al mismo tiempo, JSONEachRow de ClickHouse y formatos similares lo resuelven apartándose del estándar JSON para permitir una conversión de ida y vuelta perfecta de los datos binarios. Consulte la explicación aquí: https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790. La solución es hacer que la biblioteca Poco::JSON sea coherente con la serialización del formato JSON en ClickHouse. Esto cierra #73668. #75963 (Alexey Milovidov).
  • Se corrige la comprobación de los límites de commit en el almacenamiento S3Queue. #76104 (Kseniia Sumarokova).
  • Se corrige el problema al adjuntar tablas MergeTree con índices automáticos (add_minmax_index_for_numeric_columns/add_minmax_index_for_string_columns). #76139 (Azat Khuzhin).
  • Se corrigió un problema por el que no se imprimían las trazas de pila de los hilos padre de un trabajo (configuración enable_job_stack_trace). Se corrigió un problema por el que la configuración enable_job_stack_trace no se propagaba correctamente a los hilos, lo que hacía que el contenido de la traza de pila no siempre respetara esta configuración. #76191 (Yakov Olkhovskiy).
  • Se corrige una comprobación incorrecta de permisos por la que ALTER RENAME requería el privilegio CREATE USER. Cierra #74372. #76241 (pufit).
  • Se corrige reinterpretAs con FixedString en arquitecturas big-endian. #76253 (Azat Khuzhin).
  • Se corrige un error lógico en S3Queue: “Se esperaba que el procesador actual fuera igual a para el bucket ”. #76358 (Kseniia Sumarokova).
  • Se corrige un interbloqueo en ALTER con la base de datos Memory. #76359 (Azat Khuzhin).
  • Corrige un error lógico en el análisis de índices si la condición de WHERE contiene la función pointInPolygon. #76360 (Anton Popov).
  • Se corrigió una posible llamada insegura en el manejador de señales. #76549 (Yakov Olkhovskiy).
  • Se corrige el soporte de claves inversas en PartsSplitter. Esto corrige #73400. #73418 (Amos Bird).

Mejora de compilación/pruebas/empaquetado

  • Se admite la compilación de HDFS tanto en Mac ARM como en Intel. #74244 (Yan Xin).
  • Se habilitan ICU y GRPC al realizar compilación cruzada para Darwin. #75922 (Raúl Marín).
  • Se actualiza a LLVM 19 integrado. #75148 (Konstantin Bogdanov).
  • Se deshabilita el acceso de red para el usuario predeterminado en la imagen de Docker. #75259 (Mikhail f. Shiryaev). Todas las acciones relacionadas con clickhouse-server se convierten en una función y solo se ejecutan al iniciar el binario predeterminado en entrypoint.sh. Esta mejora, largamente pospuesta, se propuso en #50724. Se añadió la opción --users a clickhouse-extract-from-config para obtener valores de users.xml. #75643 (Mikhail f. Shiryaev).
  • Se eliminan alrededor de 20 MB de código muerto del binario. #76226 (Alexey Milovidov).

Versión de ClickHouse 25.1, 2025-01-28

Cambio incompatible con versiones anteriores

  • JSONEachRowWithProgress escribirá el progreso cada vez que se produzca. En versiones anteriores, el progreso solo se mostraba después de cada bloque del resultado, lo que lo hacía inútil. Se ha cambiado la forma de mostrar el progreso: no se mostrarán valores cero. Esto cierra #70800. #73834 (Alexey Milovidov).
  • Las tablas Merge unificarán la estructura de las tablas subyacentes utilizando una unión de sus columnas y derivando tipos comunes. Esto cierra #64864. En ciertos casos, este cambio podría ser incompatible con versiones anteriores. Un ejemplo es cuando no hay un tipo común entre tablas, pero la conversión al tipo de la primera tabla sigue siendo posible, como en el caso de UInt64 e Int64 o de cualquier tipo numérico y String. Si desea volver al comportamiento anterior, establezca merge_table_max_tables_to_look_for_schema_inference en 1 o compatibility en 24.12 o una versión anterior. #73956 (Alexey Milovidov).
  • El formato de salida Parquet convierte las columnas Date y DateTime en tipos de fecha y hora compatibles con Parquet, en lugar de escribirlas como números sin procesar. DateTime pasa a ser DateTime64(3) (antes: UInt32); la configuración output_format_parquet_datetime_as_uint32 restaura el comportamiento anterior. Date pasa a ser Date32 (antes: UInt16). #70950 (Michael Kolupaev).
  • Ya no se permiten de forma predeterminada tipos no comparables (como JSON/Object/AggregateFunction) en ORDER BY ni en las funciones de comparación less/greater/equal/etc. #73276 (Pavel Kruglov).
  • El engine de base de datos obsoleto MaterializedMySQL se ha eliminado y ya no está disponible. #73879 (Alexey Milovidov).
  • El origen de diccionario mysql ya no ejecuta la consulta SHOW TABLE STATUS, porque no aporta ningún valor para las tablas InnoDB ni para ninguna versión reciente de MySQL. Esto cierra #72636. Este cambio es compatible con versiones anteriores, pero se incluye en esta categoría para que tenga la oportunidad de advertirlo. #73914 (Alexey Milovidov).
  • Las consultas CHECK TABLE ahora requieren un permiso CHECK independiente. En versiones anteriores, bastaba con tener el permiso SHOW TABLES para ejecutar estas consultas. Pero una consulta CHECK TABLE puede ser costosa, y los límites habituales de complejidad de consulta para las consultas SELECT no se le aplican. Esto generaba un posible DoS. #74471 (Alexey Milovidov).
  • La función h3ToGeo() ahora devuelve los resultados en el orden (lat, lon) (que es el orden estándar para las funciones geométricas). Los usuarios que deseen conservar el orden heredado (lon, lat) pueden establecer la configuración h3togeo_lon_lat_result_order = true. #74719 (Manish Gill).
  • Un nuevo driver de MongoDB es ahora el predeterminado. Los usuarios que deseen seguir usando el driver heredado pueden establecer la configuración del servidor use_legacy_mongodb_integration en true. #73359 (Robert Schulze).

Nueva funcionalidad

  • Se añadió la capacidad de aplicar mutaciones no finalizadas (no materializadas por el proceso en segundo plano) durante la ejecución de consultas SELECT inmediatamente después de enviarlas. Se puede habilitar mediante la configuración apply_mutations_on_fly. #74877 (Anton Popov).
  • Se implementa la poda de particiones en tablas Iceberg para operaciones de transformación de particiones relacionadas con el tiempo en Iceberg. #72044 (Daniil Ivanik).
  • Se admiten subcolumnas en la clave de ordenación de MergeTree y en los índices de salto. #72644 (Pavel Kruglov).
  • Se admite la lectura de valores HALF_FLOAT desde Apache Arrow/Parquet/ORC (se leen como Float32). Esto cierra #72960. Ten en cuenta que el half float IEEE-754 no es lo mismo que BFloat16. Cierra #73835. #73836 (Alexey Milovidov).
  • La tabla system.trace_log contendrá dos nuevas columnas, symbols y lines, que contienen una traza de pila simbolizada. Esto permite recopilar y exportar fácilmente información de perfilado. Esto se controla mediante el valor de configuración del servidor symbolize dentro de trace_log y está habilitado de forma predeterminada. #73896 (Alexey Milovidov).
  • Añade una nueva función, generateSerialID, que puede utilizarse para generar números autoincrementales en tablas. Continuación de #64310 por kazalika. Esto cierra #62485. #73950 (Alexey Milovidov).
  • Se añade la sintaxis query1 PARALLEL WITH query2 PARALLEL WITH query3 ... PARALLEL WITH queryN para consultas DDL. Esto significa que las subconsultas {query1, query2, ... queryN} pueden ejecutarse en paralelo entre sí (y es preferible). #73983 (Vitaly Baranov).
  • Se añadió una caché en memoria para los gránulos deserializados de índices de omisión. Esto debería acelerar las consultas repetidas que usan índices de omisión. El tamaño de la nueva caché se controla mediante las opciones de configuración del servidor skipping_index_cache_size y skipping_index_cache_max_entries. La motivación original de esta caché fueron los índices de similitud vectorial, que ahora son mucho más rápidos. #70102 (Robert Schulze).
  • Ahora, la interfaz web integrada incluye una barra de progreso durante la ejecución de las consultas. Permite cancelar consultas. Muestra el número total de registros e información detallada sobre la velocidad. La tabla puede renderizarse de forma incremental en cuanto llegan los datos. Se habilitó la compresión HTTP. La renderización de la tabla se volvió más rápida. El encabezado de la tabla ahora queda fijo. Permite seleccionar celdas y desplazarse por ellas con las teclas de flecha. Se corrige el problema por el que el contorno de la celda seleccionada la hace más pequeña. Las celdas ya no se expanden al pasar el ratón por encima, sino solo al seleccionarlas. El momento de dejar de renderizar los datos entrantes se decide en el cliente en lugar de en el servidor. Se resaltan los grupos de dígitos en los números. El diseño general se renovó y se volvió más marcado. Comprueba si el servidor es accesible y si las credenciales son correctas, y muestra la versión del servidor y el tiempo de actividad. El icono de la nube tiene contorno en todas las fuentes, incluso en Safari. Los enteros grandes dentro de tipos de datos anidados se mostrarán mejor. Mostrará inf/nan correctamente. Mostrará los tipos de datos al pasar el ratón sobre el encabezado de una columna. #74204 (Alexey Milovidov).
  • Se añadió la capacidad de crear índices min-max (de omisión) de forma predeterminada para las columnas gestionadas por MergeTree mediante los ajustes add_minmax_index_for_numeric_columns (para columnas numéricas) y add_minmax_index_for_string_columns (para columnas de texto). Por ahora, ambos ajustes están deshabilitados, por lo que todavía no hay cambios de comportamiento. #74266 (Smita Kulkarni).
  • Añade los campos script_query_number y script_line_number a system.query_log, a ClientInfo en el protocolo nativo y a los logs del servidor. Esto cierra #67542. Reconocimiento a pinsvin00 por haber impulsado esta funcionalidad previamente en #68133. #74477 (Alexey Milovidov).
  • Se añadió la función de agregación sequenceMatchEvents, que devuelve las marcas temporales de los eventos coincidentes de la cadena de eventos más larga del patrón. #72349 (UnamedRus).
  • Se agregó la función arrayNormalizedGini. #72823 (flynn).
  • Se añade soporte para el operador de resta en DateTime64, lo que permite la resta entre valores DateTime64, así como con DateTime. #74482 (Li Yin).

Características experimentales

Mejora del rendimiento

  • Se optimizó la función indexHint. Ahora, las columnas que solo se usan como argumentos de la función indexHint no se leen de la tabla. #74314 (Anton Popov). Si la función indexHint es una pieza clave de su arquitectura de datos empresarial, esta optimización le salvará la vida.
  • Contabilización más precisa de la configuración max_joined_block_size_rows para el algoritmo JOIN parallel_hash. Ayuda a evitar un aumento del consumo de memoria en comparación con el algoritmo hash. #74630 (Nikita Taranov).
  • Se añade compatibilidad con la optimización de push down de predicados a nivel del plan de consulta para el paso MergingAggregated. Mejora el rendimiento de algunas consultas con el analizador. #74073 (Nikolai Kochetov).
  • Se eliminó de la fase de probe del algoritmo JOIN parallel_hash la división por hash de los bloques de la tabla izquierda. #73089 (Nikita Taranov).
  • Optimizar el formato de entrada RowBinary. Cierra #63805. #65059 (Pavel Kruglov).
  • Escribe partes de nivel 1 si optimize_on_insert está habilitado. Esto permite usar varias optimizaciones de consultas con FINAL para partes recién escritas. #73132 (Anton Popov).
  • Se acelera la deserialización de cadenas con una optimización de bajo nivel. #65948 (Nikita Taranov).
  • Al realizar una comparación de igualdad entre registros, como durante las fusiones, empiece a comparar las filas por las columnas con mayor probabilidad de ser distintas. #63780 (UnamedRus).
  • Mejora el rendimiento de grace hash join al reordenar por claves la tabla del lado derecho del join. #72237 (kevinyhzou).
  • Permite que arrayROCAUC y arrayAUCPR calculen el área parcial de la curva completa, de modo que el cálculo pueda paralelizarse en conjuntos de datos enormes. #72904 (Emmanuel).
  • Evitar generar demasiados hilos inactivos. #72920 (Guo Wangyang).
  • No listar las claves del almacenamiento de blobs si solo hay expansión entre llaves en la función de tabla. Cierra #73333. #73518 (Konstantin Bogdanov).
  • Optimización de evaluación de cortocircuito para funciones que se ejecutan sobre argumentos Nullable. #73820 (李扬).
  • No aplicar maskedExecute a columnas que no sean funciones; mejorar el rendimiento de la evaluación con cortocircuito. #73965 (lgbo).
  • Se desactiva la detección automática de cabeceras en los formatos de entrada de Kafka/NATS/RabbitMQ/FileLog para mejorar el rendimiento. #74006 (Azat Khuzhin).
  • Ejecutar el pipeline con un mayor grado de paralelismo tras la agregación con grouping sets. #74082 (Nikita Taranov).
  • Se reduce la sección crítica en MergeTreeReadPool. #74202 (Guo Wangyang).
  • Mejora del rendimiento de las réplicas paralelas. La deserialización de paquetes en el iniciador de la consulta, para los paquetes no relacionados con el protocolo de réplicas paralelas, ahora siempre se realiza en el hilo del pipeline. Antes, podía realizarse en un hilo encargado de planificar el pipeline, lo que podía hacer que el iniciador respondiera con menos rapidez y retrasar la ejecución del pipeline. #74398 (Igor Nikonov).
  • Mejora el rendimiento de las solicitudes múltiples de mayor tamaño en Keeper. #74849 (Antonio Andelic).
  • Usar envoltorios de logs por valor y no asignarlos en el heap. #74034 (Mikhail Artemenko).
  • Restablecer en segundo plano la conexión con las réplicas de diccionarios de MySQL y Postgres para no retrasar las solicitudes a los diccionarios correspondientes. #71101 (Yakov Olkhovskiy).
  • Las réplicas paralelas usaban información histórica sobre la disponibilidad de las réplicas para mejorar su selección, pero no actualizaban el recuento de errores de la réplica cuando la conexión no estaba disponible. Este PR actualiza el recuento de errores de la réplica cuando la conexión no está disponible. #72666 (zoomxi).
  • Se añadió un ajuste de MergeTree, materialize_skip_indexes_on_merge, que suprime la creación de índices de omisión durante la fusión. Esto permite controlar explícitamente (mediante ALTER TABLE [..] MATERIALIZE INDEX [...]) cuándo se crean los índices de omisión. Esto puede ser útil si los índices de omisión son costosos de generar (p. ej., índices de similitud vectorial). #74401 (Robert Schulze).
  • Optimiza las solicitudes a Keeper en Storage(S3/Azure)Queue. #74410 (Kseniia Sumarokova). #74538 (Kseniia Sumarokova).
  • Se usan hasta 1000 réplicas paralelas de forma predeterminada. #74504 (Konstantin Bogdanov).
  • Mejora de la reutilización de sesiones HTTP al leer desde el disco S3 (#72401). #74548 (Julian Maicher).

Mejora

  • Permite SETTINGS en una consulta CREATE TABLE con un ENGINE implícito y mezclar la configuración del engine con la de la consulta. #73120 (Raúl Marín).
  • Se habilita use_hive_partitioning de forma predeterminada. #71636 (Yarik Briukhovetskyi).
  • Se admite CAST y ALTER entre tipos JSON con parámetros diferentes. #72303 (Pavel Kruglov).
  • Soporte para la comparación de igualdad de valores de una columna JSON. #72991 (Pavel Kruglov).
  • Se mejora el formato de los identificadores con subcolumnas JSON para evitar comillas invertidas innecesarias. #73085 (Pavel Kruglov).
  • Mejoras en las métricas interactivas. Se corrigen las métricas de las réplicas paralelas que no se mostraban por completo. Se muestran las métricas en orden según la actualización más reciente y, después, lexicográficamente por nombre. No se muestran métricas obsoletas. #71631 (Julia Kartseva).
  • Hacer que el formato de salida JSON se muestre con formato legible de forma predeterminada. Añadir la nueva configuración output_format_json_pretty_print para controlarlo y activarla de forma predeterminada. #72148 (Pavel Kruglov).
  • Permitir LowCardinality(UUID) de forma predeterminada. Esto ha resultado práctico para los clientes de ClickHouse Cloud. #73826 (Alexey Milovidov).
  • Mejora del mensaje durante la instalación. #73827 (Alexey Milovidov).
  • Mejora del mensaje de restablecimiento de contraseña para ClickHouse Cloud. #73831 (Alexey Milovidov).
  • Mejora el mensaje de error de una tabla File que no puede añadir datos al final de un archivo. #73832 (Alexey Milovidov).
  • Solicitar confirmación cuando un usuario pida accidentalmente mostrar un formato binario (como Native, Parquet, Avro) en la terminal. Esto cierra #59524. #73833 (Alexey Milovidov).
  • Resalta los espacios en blanco finales en los formatos Pretty y Vertical en la terminal para mejorar la claridad. Esto se controla con la configuración output_format_pretty_highlight_trailing_spaces. Implementación inicial de Braden Burns en #72996. Cierra #71590. #73847 (Alexey Milovidov).
  • clickhouse-client y clickhouse-local detectarán automáticamente la compresión de stdin cuando esta se redirija desde un archivo. Con esto se cierra #70865. #73848 (Alexey Milovidov).
  • Recorta por defecto los nombres de columna demasiado largos en los formatos Pretty. Esto se controla con las configuraciones output_format_pretty_max_column_name_width_cut_to y output_format_pretty_max_column_name_width_min_chars_to_cut. Da continuidad al trabajo de tanmaydatta en #66502. Cierra #65968. #73851 (Alexey Milovidov).
  • Hacer que los formatos Pretty sean más vistosos: compactar bloques si no ha transcurrido mucho tiempo desde la salida del bloque anterior. Esto se controla mediante las nuevas opciones de configuración output_format_pretty_squash_consecutive_ms (50 ms de forma predeterminada) y output_format_pretty_squash_max_wait_ms (1000 ms de forma predeterminada). Continuación de #49537. Esto cierra #49153. #73852 (Alexey Milovidov).
  • Se añade una métrica del número de partes de origen que están fusionándose actualmente. Esto cierra #70809. #73868 (Alexey Milovidov).
  • Resalta las columnas en el formato Vertical cuando la salida se envía a un terminal. Esto puede desactivarse con la configuración output_format_pretty_color. #73898 (Alexey Milovidov).
  • Se mejoró la compatibilidad con MySQL hasta el punto de que ahora mysqlsh (una CLI avanzada de MySQL de Oracle) puede conectarse a ClickHouse. Esto es necesario para facilitar las pruebas. #73912 (Alexey Milovidov).
  • Los formatos Pretty pueden mostrar campos multilínea dentro de una celda de una tabla, lo que mejora la legibilidad. Esta opción está activada de forma predeterminada y puede controlarse mediante la configuración output_format_pretty_multiline_fields. Continuación del trabajo de Volodyachan en #64094. Esto cierra #56912. #74032 (Alexey Milovidov).
  • Exponer los encabezados HTTP X-ClickHouse a JavaScript en el navegador. Esto facilita la escritura de aplicaciones. #74180 (Alexey Milovidov).
  • El formato JSONEachRowWithProgress incluirá eventos con metadatos, así como totales y extremos. También incluye rows_before_limit_at_least y rows_before_aggregation. El formato muestra correctamente la excepción si llega después de resultados parciales. El progreso ahora incluye el tiempo transcurrido en nanosegundos. Al final, se emite un último evento de progreso. El progreso durante la ejecución de la consulta no se imprimirá con una frecuencia mayor que la indicada por la configuración interactive_delay. #74181 (Alexey Milovidov).
  • El icono del reloj de arena girará de forma fluida en la UI de Play. #74182 (Alexey Milovidov).
  • Incluso si la respuesta HTTP está comprimida, envíe los paquetes en cuanto lleguen. Esto permite que el navegador reciba paquetes de progreso y datos comprimidos. #74201 (Alexey Milovidov).
  • Si el número de registros de salida es mayor que N = output_format_pretty_max_rows, en lugar de mostrar solo las primeras N filas, recortaremos la tabla de salida por la mitad y mostraremos las primeras N/2 filas y las últimas N/2 filas. Continuación de #64200. Esto cierra #59502. #73929 (Alexey Milovidov).
  • Permitir un algoritmo de planificación de join más general cuando el algoritmo de hash join está habilitado. #71926 (János Benjamin Antal).
  • Permite crear un índice bloom_filter en columnas con el tipo de dato DateTime64. #66416 (Yutong Xiao).
  • Cuando min_age_to_force_merge_seconds y min_age_to_force_merge_on_partition_only están activados, el proceso de fusión de partes ignorará el límite máximo de bytes. #73656 (Kai Zhu).
  • Se añadieron encabezados HTTP a la tabla de logs de spans de OpenTelemetry para mejorar la trazabilidad. #70516 (jonymohajanGmail).
  • Admite escribir archivos orc con una zona horaria personalizada, en lugar de usar siempre la zona horaria GMT. #70615 (kevinyhzou).
  • Respetar la configuración de planificación de E/S al escribir copias de seguridad en distintas nubes. #71093 (János Benjamin Antal).
  • Añadir el alias name para la columna metric en system.asynchronous_metrics. #71164 (megao).
  • Históricamente, por alguna razón, la consulta ALTER TABLE MOVE PARTITION TO TABLE comprobaba los permisos SELECT y ALTER DELETE en lugar del permiso específico ALTER_MOVE_PARTITION. Este PR pasa a utilizar este tipo de acceso. Por compatibilidad, este permiso también se concederá de forma implícita si se han concedido SELECT y ALTER DELETE, pero este comportamiento se eliminará en futuras versiones. Cierra #16403. #71632 (pufit).
  • Lanzar una excepción al intentar materializar una columna en la clave de ordenación, en lugar de permitir que altere el orden de clasificación. #71891 (Peter Nguyen).
  • Ocultar secretos en EXPLAIN QUERY TREE. #72025 (Yakov Olkhovskiy).
  • Soporte para tipos lógicos enteros de Parquet en el lector “native”. #72105 (Arthur Passos).
  • Solicitar credenciales de forma interactiva en el navegador si el usuario predeterminado requiere una contraseña. En versiones anteriores, el server devolvía HTTP 403; ahora, devuelve HTTP 401. #72198 (Alexey Milovidov).
  • Convertir los tipos de acceso CREATE_USER, ALTER_USER, DROP_USER, CREATE_ROLE, ALTER_ROLE, DROP_ROLE de globales a parametrizados. Esto significa que ahora puede conceder privilegios de administración de acceso de forma más precisa: #72246 (pufit).
  • Añadir la columna latest_fail_error_code_name a system.mutations. Necesitamos esta columna para introducir una nueva métrica sobre mutaciones bloqueadas y usarla para generar gráficos de los errores detectados en la nube, así como, opcionalmente, añadir una nueva alerta con menos ruido. #72398 (Miсhael Stetsyuk).
  • Reducir la cantidad de asignaciones de memoria en la consulta ATTACH PARTITION. #72583 (Konstantin Morozov).
  • El límite max_bytes_before_external_sort pasa a depender del consumo total de memoria de la consulta (antes era la cantidad de bytes en el bloque de ordenación de un único hilo de ordenación; ahora tiene el mismo significado que max_bytes_before_external_group_by: es el límite total de memoria para toda la consulta en todos los hilos). Además, se añadió otra configuración para controlar el tamaño del bloque en disco: min_external_sort_block_bytes. #72598 (Azat Khuzhin).
  • Ignorar las restricciones de memoria del collector de trazas. #72606 (Azat Khuzhin).
  • Se añaden las configuraciones del servidor dictionaries_lazy_load y wait_dictionaries_load_at_startup a system.server_settings. #72664 (Christoph Wurm).
  • Añade la opción max_backup_bandwidth a la lista de opciones que se pueden especificar como parte de las consultas BACKUP/RESTORE. #72665 (Christoph Wurm).
  • Reducción del nivel de registro de las partes replicadas que aparecen en el motor ReplicatedMergeTree para ayudar a minimizar el volumen de logs generado en un clúster replicado. #72876 (mor-akamai).
  • Mejora la extracción de expresiones comunes en las disyunciones. Permite simplificar la expresión de filtro resultante incluso si no existe una subexpresión común para todas las disyunciones. Continuación de #71537. #73271 (Dmitry Novik).
  • En S3Queue/AzureQueue, ahora se pueden añadir configuraciones a tablas que se crearon sin ellas. #73283 (Kseniia Sumarokova).
  • Se incorpora la configuración least_greatest_legacy_null_behavior (valor predeterminado: false), que controla si las funciones least y greatest tratan los argumentos NULL devolviendo NULL incondicionalmente (si es true) o ignorándolos (si es false). #73344 (Robert Schulze).
  • Usar peticiones múltiples de Keeper en el hilo de limpieza de ObjectStorageQueueMetadata. #73357 (Antonio Andelic).
  • Cuando ClickHouse se ejecuta dentro de un cgroup, seguiremos recopilando métricas asíncronas de todo el sistema relacionadas con la carga del sistema, la planificación de procesos, la memoria, etc. Pueden proporcionar señales útiles cuando ClickHouse es el único proceso del host con un alto consumo de recursos. #73369 (Nikita Taranov).
  • En el almacenamiento S3Queue, ahora se permite transferir tablas ordenadas antiguas creadas antes de la versión 24.6 a la nueva estructura con buckets. #73467 (Kseniia Sumarokova).
  • Se añade system.azure_queue, similar al system.s3queue existente. #73477 (Kseniia Sumarokova).
  • La función parseDateTime64 (y sus variantes) ahora devuelve resultados correctos para fechas de entrada anteriores a 1970 o posteriores a 2106. Ejemplo: SELECT parseDateTime64InJodaSyntax('2200-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS'). #73594 (zhanglistar).
  • Aborda algunos problemas de usabilidad de clickhouse-disks reportados por los usuarios. Cierra #67136. #73616 (Daniil Ivanik).
  • Permite modificar la configuración de commit en el almacenamiento S3(Azure)Queue. (Las opciones de commit son: max_processed_files_before_commit, max_processed_rows_before_commit, max_processed_bytes_before_commit, max_processing_time_sec_before_commit). #73635 (Kseniia Sumarokova).
  • En S3(Azure)Queue de almacenamiento, se agrega el progreso entre orígenes para compararlo con la configuración del límite de commit. #73641 (Kseniia Sumarokova).
  • Se admiten opciones de configuración básicas en la consulta BACKUP/RESTORE. #73650 (Vitaly Baranov).
  • Se tiene en cuenta output_format_compression_level en la salida Parquet. #73651 (Arthur Passos).
  • Permite leer fixed_size_list de Apache Arrow como un Array en lugar de tratarlo como un tipo no compatible. #73654 (Julian Meyers).
  • Añade dos motores de backup: Memory (conserva los backups dentro de la sesión actual del usuario) y Null (no conserva los backups en ningún sitio), pensado para pruebas. #73690 (Vitaly Baranov).
  • concurrent_threads_soft_limit_num y concurrent_threads_soft_limit_num_ratio_to_cores ahora se pueden cambiar sin reiniciar el servidor. #73713 (Sergei Trifonov).
  • Se añadió compatibilidad con tipos numéricos extendidos (Decimal, enteros grandes) en las funciones formatReadable. #73765 (Raúl Marín).
  • Soporte de TLS para la compatibilidad con el protocolo wire de Postgres. #73812 (scanhex12).
  • La función isIPv4String devolvía true si una dirección IPv4 válida iba seguida de un byte nulo, cuando en ese caso debería devolver false. Continuación de #65387. #73946 (Alexey Milovidov).
  • Hacer que el código de error del protocolo wire de MySQL sea compatible con MySQL. Continuación de #56831. Cierra #50957. #73948 (Alexey Milovidov).
  • Se añade la configuración validate_enum_literals_in_opearators para validar los literales de enum en operadores como IN y NOT IN con respecto al tipo enum, y lanzar una excepción si el literal no es un valor enum válido. #73985 (Vladimir Cherkasov).
  • En Storage S3(Azure)Queue, se confirman todos los archivos (en un único lote definido por la configuración de commit) en una sola transacción de Keeper. #73991 (Kseniia Sumarokova).
  • Se deshabilitó la detección de cabecera para UDF ejecutables y diccionarios (podía provocar Function ‘X’: wrong result, expected Y row(s), actual Y-1). #73992 (Azat Khuzhin).
  • Se añade la opción distributed para EXPLAIN PLAN. Ahora, EXPLAIN distributed=1 ... añade el plan remoto a los pasos ReadFromParallelRemote*. #73994 (Nikolai Kochetov).
  • Se corrigió el tipo de retorno de not/xor con argumentos Dynamic. #74013 (Pavel Kruglov).
  • Se permite cambiar add_implicit_sign_column_constraint_for_colling_engine después de crear la tabla. #74014 (Christoph Wurm).
  • Compatibilidad con subcolumnas en la consulta select de una vista materializada. #74030 (Pavel Kruglov).
  • Ahora hay tres formas sencillas de definir un prompt personalizado en clickhouse-client: 1. mediante el parámetro de línea de comandos --prompt, 2. en el archivo de configuración, mediante la opción <prompt>[...]</prompt>, y 3. también en el archivo de configuración, mediante la opción por conexión <connections_credentials><prompt>[...]</prompt></connection_credentials>. #74168 (Christoph Wurm).
  • Detección automática de una conexión segura al conectarse al puerto 9440 en ClickHouse Client. #74212 (Christoph Wurm).
  • Permitir autenticar a los usuarios solo con el nombre de usuario para http_handlers (anteriormente también se requería que el usuario introdujera la contraseña). #74221 (Azat Khuzhin).
  • La compatibilidad con los lenguajes de consulta alternativos PRQL y KQL se marcó como Experimental. Para usarlos, especifique los ajustes allow_experimental_prql_dialect = 1 y allow_experimental_kusto_dialect = 1. #74224 (Robert Schulze).
  • Se permite devolver el tipo Enum predeterminado en más funciones de agregación. #74272 (Raúl Marín).
  • En OPTIMIZE TABLE, ahora se puede especificar la palabra clave FORCE como alternativa a la palabra clave FINAL existente. #74342 (Robert Schulze).
  • Se añade la métrica IsServerShuttingDown, necesaria para activar una alerta cuando el apagado del servidor tarda demasiado. #74429 (Miсhael Stetsyuk).
  • Se añadieron a EXPLAIN los nombres de las tablas Iceberg. #74485 (alekseev-maksim).
  • Se proporciona un mejor mensaje de error al usar RECURSIVE CTE con el analizador antiguo. #74523 (Raúl Marín).
  • Mostrar mensajes de error detallados en system.errors. #74574 (Vitaly Baranov).
  • Permitir usar una contraseña para la comunicación del cliente con clickhouse-keeper. Esta funcionalidad no es muy útil si se especifica una configuración SSL adecuada para el servidor y el cliente, pero aun así puede ser útil en algunos casos. La contraseña no puede tener más de 16 caracteres. No está relacionado con el modelo de autenticación de Keeper. #74673 (alesapin).
  • Añadir un código de error para el recargador de configuración. #74746 (Garrett Thomas).
  • Se añadió compatibilidad con direcciones IPv6 en las funciones de tabla y los motores de MySQL y PostgreSQL. #74796 (Mikhail Koviazin).
  • Se implementa la optimización de cortocircuito para divideDecimal. Corrige #74280. #74843 (Kevin Mingtarja).
  • Ahora los usuarios pueden especificarse en los scripts de inicio. #74894 (pufit).
  • Se añade compatibilidad con tokens SAS de Azure. #72959 (Azat Khuzhin).

Corrección de errores (fallo visible para el usuario en una versión estable oficial)

  • Establece el nivel de compresión de Parquet solo si el códec de compresión lo admite. #74659 (Arthur Passos).
  • Se corrigió una regresión que hacía que el uso de configuraciones regionales de collation con modificadores produjera un error. Por ejemplo, SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shifted ahora funciona. #73544 (Robert Schulze).
  • Se corrige un problema que impedía crear un nodo SEQUENTIAL con keeper-client. #64177 (Duc Canh Le).
  • Se corrigió el recuento incorrecto de caracteres en las funciones position. #71003 (思维).
  • Las operaciones RESTORE para entidades de acceso requerían más permisos de los necesarios debido a revocaciones parciales no contempladas. Este PR corrige el problema. Cierra #71853. #71958 (pufit).
  • Se evita la pausa tras ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE. Se recupera la configuración correcta para la planificación de tareas en segundo plano. #72024 (Aleksei Filatov).
  • Se corrige el manejo de las tuplas vacías en algunos formatos de entrada y salida (p. ej., Parquet, Arrow). #72616 (Michael Kolupaev).
  • Las sentencias GRANT SELECT/INSERT a nivel de columna en bases de datos/tablas con comodines ahora devuelven un error. #72646 (Johann Gan).
  • Corrige la situación en la que un usuario no puede ejecutar REVOKE ALL ON *.* debido a permisos implícitos en la entidad de acceso de destino. #72872 (pufit).
  • Corrige el formato de zonas horarias con desplazamiento positivo de la función escalar formatDateTime. #73091 (ollidraese).
  • Corrección para reflejar correctamente el puerto de origen cuando la conexión se realiza a través de PROXYv1 y auth_use_forwarded_address está activado; anteriormente se usaba incorrectamente el puerto del proxy. Se añade la función currentQueryID(). #73095 (Yakov Olkhovskiy).
  • Propagar la configuración de formato a NativeWriter en TCPHandler para que configuraciones como output_format_native_write_json_as_string se apliquen correctamente. #73179 (Pavel Kruglov).
  • Se corrige un bloqueo en StorageObjectStorageQueue. #73274 (Kseniia Sumarokova).
  • Se corrige un error poco frecuente en una vista materializada actualizable durante el apagado del servidor. #73323 (Michael Kolupaev).
  • El marcador %f de la función formatDateTime ahora genera, sin excepción, seis dígitos (de subsegundos). Esto hace que el comportamiento sea compatible con la función DATE_FORMAT de MySQL. El comportamiento anterior puede restaurarse usando la configuración formatdatetime_f_prints_scale_number_of_digits = 1. #73324 (ollidraese).
  • Se corrigió el filtrado por la columna _etag al leer desde el almacenamiento s3 y la función de tabla s3. #73353 (Anton Popov).
  • Se corrige el error Not-ready Set is passed as the second argument for function 'in' al usar IN (subquery) en la expresión JOIN ON con el analizador anterior. #73382 (Nikolai Kochetov).
  • Se corrigió la preparación para el squash en las columnas Dynamic y JSON. Anteriormente, en algunos casos se podían insertar tipos nuevos en variant compartido/datos compartidos incluso cuando no se había alcanzado el límite de tipos/rutas. #73388 (Pavel Kruglov).
  • Comprobar si hay valores de tamaño corruptos durante la decodificación binaria de tipos para evitar asignaciones demasiado grandes. #73390 (Pavel Kruglov).
  • Se corrigió un error lógico al leer en un clúster con una sola réplica y las réplicas en paralelo habilitadas. #73403 (Michael Kolupaev).
  • Se corrige ObjectStorageQueue con ZooKeeper y versiones anteriores de Keeper. #73420 (Antonio Andelic).
  • Implementa una corrección necesaria para habilitar de forma predeterminada el particionamiento de Hive. #73479 (Yarik Briukhovetskyi).
  • Se corrige una condición de carrera al crear un índice de similitud vectorial. #73517 (Antonio Andelic).
  • Corrige un fallo de segmentación cuando el origen del Diccionario contiene una función con datos incorrectos. #73535 (Yarik Briukhovetskyi).
  • Corrige los reintentos tras un insert fallido en el almacenamiento S3(Azure)Queue. Cierra #70951. #73546 (Kseniia Sumarokova).
  • Se corrigió un error en la función tupleElement que puede darse en algunos casos con tuplas que tienen elementos LowCardinality y la configuración optimize_functions_to_subcolumns habilitada. #73548 (Anton Popov).
  • Corrige el análisis de un glob de enum seguido de otro de rango. Corrige #73473. #73569 (Konstantin Bogdanov).
  • Se corrigió un problema por el que parallel_replicas_for_non_replicated_merge_tree se ignoraba en subconsultas de tablas no replicadas. #73584 (Igor Nikonov).
  • Corrección del std::logical&#95;error que se producía cuando no se podía programar la tarea. Detectado en pruebas de estrés. #73629 (Alexander Gololobov).
  • No interpretar las consultas en EXPLAIN SYNTAX para evitar errores lógicos debidos a una etapa de procesamiento incorrecta en las consultas distribuidas. Corrige #65205. #73634 (Dmitry Novik).
  • Corrige una posible inconsistencia de datos en una columna Dynamic. Corrige el posible error lógico Nested columns sizes are inconsistent with local_discriminators column size. #73644 (Pavel Kruglov).
  • Se corrigió NOT_FOUND_COLUMN_IN_BLOCK en consultas con FINAL y SAMPLE. Se corrigió un resultado incorrecto en consultas SELECT con FINAL de CollapsingMergeTree y se habilitaron optimizaciones de FINAL. #73682 (Anton Popov).
  • Se corrige un bloqueo en LIMIT BY COLUMNS. #73686 (Raúl Marín).
  • Se corrige el error que se producía cuando se forzaba el uso de la proyección normal y la consulta coincidía exactamente con la proyección definida, pero no se seleccionaba la proyección y, por lo tanto, se generaba un error. #73700 (Shichao Jin).
  • Corrige la deserialización de la estructura de Dynamic/Object. Podía provocar excepciones CANNOT_READ_ALL_DATA. #73767 (Pavel Kruglov).
  • Omitir metadata_version.txt al restaurar partes desde una copia de seguridad. #73768 (Vitaly Baranov).
  • Se corrige un fallo de segmentación al hacer CAST a Enum con LIKE. #73775 (zhanglistar).
  • Corrección de un problema por el que un bucket de S3 Express no funcionaba como disco. #73777 (Sameer Tamsekar).
  • Permitir la fusión de filas con valores no válidos en la columna de signo de las tablas CollapsingMergeTree. #73864 (Christoph Wurm).
  • Se corrige un error al consultar DDL con una réplica fuera de línea. #73876 (Tuan Pham Anh).
  • Corrige el fallo ocasional al comparar tipos map() debido a la posibilidad de crear Map sin nombrar explícitamente (‘keys’,‘values’) en su tupla anidada. #73878 (Yakov Olkhovskiy).
  • Ignorar las funciones de ventana al resolver la cláusula GROUP BY ALL. Corrección de #73501. #73916 (Dmitry Novik).
  • Corrige los privilegios implícitos (antes funcionaban como un comodín). #73932 (Azat Khuzhin).
  • Se corrige el elevado consumo de memoria durante la creación de Map anidados. #73982 (Pavel Kruglov).
  • Corrige el procesamiento de JSON anidado con claves vacías. #73993 (Pavel Kruglov).
  • Corrección: es posible que no se añada un alias a la proyección si otro alias hace referencia a él y se selecciona en orden inverso. #74033 (Yakov Olkhovskiy).
  • Ignorar los errores de «objeto no encontrado» de Azure durante la inicialización del disco plain_rewritable. #74059 (Julia Kartseva).
  • Corrige el comportamiento de any y anyLast con tipos enum y una tabla vacía. #74061 (Joanna Hulboj).
  • Corrige el caso en el que el usuario especifica argumentos por palabra clave en el motor de tabla Kafka. #74064 (Yarik Briukhovetskyi).
  • Se corrigió el cambio en la configuración de Storage S3Queue entre usar el prefijo “s3queue_” y no usarlo, y viceversa. #74075 (Kseniia Sumarokova).
  • Se añade una configuración allow_push_predicate_ast_for_distributed_subqueries. Esto añade push-down de predicados basado en AST para consultas distribuidas con el analizador. Esta es una solución temporal que usamos hasta que se admitan las consultas distribuidas con serialización del plan de consulta. Cierra #66878 #69472 #65638 #68030 #73718. #74085 (Nikolai Kochetov).
  • Corrige un problema por el que, después de #73095, puede aparecer un puerto en el campo forwarded_for, lo que impide resolver el nombre de host cuando el puerto va incluido. #74116 (Yakov Olkhovskiy).
  • Se corrigió el formato incorrecto en ALTER TABLE (DROP STATISTICS ...) (DROP STATISTICS ...). #74126 (Han Fei).
  • Corrección del error #66112. #74128 (Anton Ivashkin).
  • Ya no se puede usar Loop como motor de tabla en CREATE TABLE. Antes, esta combinación provocaba fallos de segmentación. #74137 (Yarik Briukhovetskyi).
  • Corrige un problema de seguridad para evitar la inyección SQL en las funciones de tabla de PostgreSQL y SQLite. #74144 (Pablo Marcos).
  • Soluciona el fallo al leer una subcolumna de una tabla comprimida del motor Memory. Corrige #74009. #74161 (Nikita Taranov).
  • Se corrigió un bucle infinito que ocurría al hacer consultas a system.detached_tables. #74190 (Konstantin Morozov).
  • Corrige un error lógico en s3queue al marcar el archivo como fallido. #74216 (Kseniia Sumarokova).
  • Se corrigieron las opciones de copia nativa (allow_s3_native_copy/allow_azure_native_copy) para RESTORE desde la copia de seguridad base. #74286 (Azat Khuzhin).
  • Se corrigió el problema por el que el número de tablas detached en la base de datos era un múltiplo de max_block_size. #74289 (Konstantin Morozov).
  • Se corrige la copia mediante ObjectStorage (es decir, S3) cuando las credenciales de origen y de destino son distintas. #74331 (Azat Khuzhin).
  • Se corrigió la detección de “use the Rewrite method in the JSON API” para la copia nativa en GCS. #74338 (Azat Khuzhin).
  • Corrige el cálculo incorrecto de BackgroundMergesAndMutationsPoolSize (era el doble del valor real). #74509 (alesapin).
  • Corrige el error que provocaba fugas de watches de Keeper al habilitar Cluster Discovery. #74521 (RinChanNOW).
  • Se corrigió el problema de alineación de memoria reportado por UBSan #74512. #74534 (Arthur Passos).
  • Se soluciona la limpieza concurrente de KeeperMap durante la creación de tablas. #74568 (Antonio Andelic).
  • No eliminar las columnas de proyección no utilizadas en las subconsultas cuando hay EXCEPT o INTERSECT, para preservar el resultado correcto de la consulta. Corrige #73930. Corrige #66465. #74577 (Dmitry Novik).
  • Se corrigieron las consultas INSERT SELECT entre tablas con columnas Tuple y con serialización dispersa habilitada. #74698 (Anton Popov).
  • La función right funciona de forma incorrecta con un desplazamiento negativo constante. #74701 (Daniil Ivanik).
  • Se corrige un fallo por el que la inserción de datos con gzip a veces fallaba debido a una descompresión defectuosa del lado del cliente. #74707 (siyuan).
  • Las revocaciones parciales de grants con comodines podrían eliminar más privilegios de los previstos. Cierra #74263. #74751 (pufit).
  • Corrección de Keeper: se corrige la lectura de las entradas del log desde disco. #74785 (Antonio Andelic).
  • Se corrigió la comprobación de permisos para SYSTEM REFRESH/START/STOP VIEW; ahora no es necesario tener este privilegio en *.* para ejecutar una consulta sobre una vista específica, solo se requieren permisos sobre esa vista. #74789 (Alexander Tokmakov).
  • La función hasColumnInTable no tiene en cuenta las columnas alias. Se corrige para que también funcione con columnas alias. #74841 (Bharat Nallan).
  • Corrige el error FILE_DOESNT_EXIST que se producía durante la fusión de partes de datos de una tabla con una columna vacía en Azure Blob Storage. #74892 (Julia Kartseva).
  • Corrige el nombre de la columna de la proyección al unir tablas temporales, cierra #68872. #74897 (Vladimir Cherkasov).

Mejora de compilación/pruebas/empaquetado

Última modificación el 10 de junio de 2026