Tabla de contenidos
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
StringaNullable(String), no realizaremos ninguna mutación de los datos. Sin embargo, para la función de agregadouniq, se utiliza una estructura de datos distinta: para una columna nullable, se usaráAggregateFunctionNullcon un agregadoruniqanidado.AggregateFunctionNullserializará 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 ejecutarALTER TABLE table MATERIALIZE STATISTICS ALLpara 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 enORDER BYo 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_resultdetrueafalse. Esto hace queCHECK TABLEdevuelva 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_columnsoadd_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-clientpara que devuelva un código de salida distinto de cero (159 - TIMEOUT_EXCEEDED) cuando una consulta agote el tiempo de espera debido areceive_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(comoReplacingMergeTree,CollapsingMergeTree, etc.) con una claveORDER BYvací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ónallow_suspicious_primary_key. #91569 (Anton Popov). - Se corrigen las funciones
bitShiftLeftybitShiftRightpara 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_projectionspara 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
compatibilityen la versión anterior o configurar los ajustes de MergeTreedynamic_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ónafter_processing). El valor predeterminado esfalse; 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ónmax_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_pathspara 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 BYen la operaciónCREATEpara Iceberg, además de la ordenación enINSERT. Resuelve #89916. #90141 (Konstantin Vedernikov). - Se introducen ajustes a nivel de proyección, expuestos mediante la nueva cláusula
WITH SETTINGSenALTER 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
hasutilice 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 aNative; sin embargo, a diferencia deNative, 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_functionspara 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_reentrya la función de agregaciónwindowFunnel. 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_modepara 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
TimeyTime64ya están listos para su uso en producción, la configuraciónenable_time_time64_typeahora está habilitada de forma predeterminada. #89345 (Yarik Briukhovetskyi). - Se admite la lectura del CDF de DeltaLake mediante la función de tabla
deltaLakecon los ajustesdelta_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 mediantedelta.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_formatpara mejorar las consultasINSERTen tablas con columnasAggregateFunction, permitiendo insertar datos como estado serializado, valores sin procesar o arrays. #88088 (Punith Nandyappa Subashchandra).
Mejora del rendimiento
- Optimiza las consultas
ORDER BY...LIMIT Nusando 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
ANDyOR. Anteriormente, la cláusula WHERE debía ser una conjunción (AND) de condiciones de filtrado para poder utilizar skip indexes. Una nueva configuraciónuse_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 ajusteread_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
minmaxgrandes (millones de gránulos). #90428 (Shankar Iyer). - Implementa un algoritmo sencillo de reordenación de
JOINcon DPsize paraINNER 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
histogramordenando 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,hasy otras, aprovechando un filtro preliminar adicional construido a partir del índice de texto. Esta optimización se habilita mediante la configuraciónquery_plan_text_index_add_hint. También se mejoró el uso del índice de texto para columnas del tipo de datosMap. #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
T64mediante 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óns3_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_limitse ha cambiado a10. #89312 (Alexey Milovidov). - Se habilita la configuración
allow_statistics_optimizede 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) estableciendomin_bytes_for_wide_partyvertical_merge_algorithm_min_bytes_to_activateen 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_finalque 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_idylast_error_tracea la tablasystem.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-messageofalse. #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
dependenciesymissing_dependenciesasystem.kafka_consumerspara indicar las tablas de destino de las vistas materializadas de las tablas de Kafka. Se añadió el contadorKafkaMVNotReady. #85346 (Ilya Golshtein). - Ahora, las expresiones por defecto de la tabla funcionan correctamente en las inserciones que usan
remotey 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-rewritabletiene su propia implementación y estructura. No lo basemos en discosplainnormales. #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_mscomo una configuración ajustable del motor de tablaKafkapara ajustar cuánto tiempo duermen los consumidores mientras esperan nuevos datos. Resuelve #89204. #90112 (Jeremy Aguilon). - Añade una nueva columna
parts_in_progress_namesasystem.mutationspara 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_cacheen 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_REACHEDcuando se alcance elhard_limitde las conexiones de los clientes HTTP. Está configurado en20000para 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+/(oCmd+/en Mac), lo que facilita desactivar temporalmente partes de la consulta mientras realiza pruebas. #91160 (Samuel K.). - Añade
system.completionsa la lista de tablas accesibles en todo momento. #91166 (Yakov Olkhovskiy). - Se añaden los eventos de perfil
FailedInitialQueryyFailedInitialSelectQuery. #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_poolen lugar de usar incondicionalmente el grupo de hilos. #91208 (Raufs Dunamalijevs). - Se añadió compatibilidad con el tipo
JSONentupleElement. 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 paraSELECT. 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 enINSERT 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 consultaSELECTestuviera ordenado. En realidad, resultó que en el caso general es realmente difícil de comprobar, pero el caso sencillo conORDER BY ALLes 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 porqueSELECTdevuelve datos distintos. #91830 (Sema Checherinda). - Permitir la conversión implícita de tipos al convertir
ArrayaQBit. Los arrays de enteros y de coma flotante ahora pueden insertarse directamente en columnasQBitsin conversiones de tipo explícitas. #91846 (Raufs Dunamalijevs). - Se añade un límite al tamaño de los mensajes
CapnProto. Puede cambiarse conformat_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/MarkCacheMissestambién se actualizaban para las fusiones; este PR revierte ese comportamiento). #91910 (Azat Khuzhin). - Se corrige que
client_info.interfacese configure comoTCPpara las conexiones locales. #91933 (Konstantin Bogdanov). - El parámetro
refresh_certificates_task_intervalde la configuración del cliente ACME ahora espera un valor expresado en segundos. #92211 (Konstantin Bogdanov). - Registrar en
system.part_loglos eventos de partes desystem.*_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
TimeyTime64. Resuelve #84544. #84715 (Yarik Briukhovetskyi). - Inicializar
DNSResolverantes 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
JOINcuando 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 getque se producía durante el análisis del índiceSetcuando el predicado contenía la constanteNULL. 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
theilsUycontingencyque 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 JOINdentro deINy con la configuraciónenable_lazy_columns_replicationactivada. Resuelve #90361. #89997 (Pavel Kruglov). - Se corrige un posible error lógico al usar
analyzer_compatibility_join_using_top_level_identifiercon 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 tablasystem.dead_letter_queueno 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: Replicateddurante la inserción al usarARRAY JOINcon la configuraciónenable_lazy_columns_replicationhabilitada. #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
numberscuando 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 schemadurante 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/infyWITH 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_orderde 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_pathpara 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
L2DistanceTransposedque provocaba cierres inesperados cuando el argumentoprecisionsuperaba el rango válido. Cierra #90401. #90405 (Raufs Dunamalijevs). - Corrige un posible error lógico en
arrayUnioncon el argumentoArray(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
KeyValuePairExtractorestá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
L2DistanceTransposedal usar vectores de referencia de tipo array (que, de forma predeterminada, sonArray(Float64))) con columnasQBitde tipos de elemento distintos deFloat64(Float32,BFloat16). La función ahora convierte automáticamente el vector de referencia para que coincida con el tipo de elemento deQBit. Resuelve #89976. #90485 (Raufs Dunamalijevs). - Corrige un error por el cual
toDateTimeOrNullcon 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 formatoArrow. 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
markReplicasActivecuando 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 enDDLTask. EnDDLWorker::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
concatWithSeparatoral 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 BYconGROUP BYpara que devuelva el errorNOT_AN_AGGREGATEcorrecto en lugar deNOT_FOUND_COLUMN_IN_BLOCKcuandoLIMIT BYusa columnas que no están enGROUP BY. Cierra #89713. #90665 (xiaohuanlin). - Corrige errores de conversión de tipos al usar columnas
LowCardinalityen 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 UPDATEcuando se usa una función de tablaremoteconlocalhostcomo host de destino. #90761 (pufit). - Corregidos los secretos ocultos de las named collections para que dependan de
display_secrets_in_show_and_selectyformat_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 enMergeTreeReadPoolParallelReplicas, 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
SummingMergeTreeen columnasNestedLowCardinality. #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_partsdeshabilitado. #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
arrayFilterno funcionaba al usar un array vacío y la funciónisNull. Cierra #73849. #91105 (Nihal Z. Miaji). - Corrige un error lógico en
ARRAY JOINcuando 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
serializeydeserializetendrí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
dictGetDescendantsprovocado porNULLcuando el tipo de diccionario admite jerarquía, pero ninguna columna esHIERARCHICAL. Cierra #92026. Cierra #92121. #91420 (Nihal Z. Miaji). - Se corrige un fallo en la función
INcuando 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
QBitque fallaba con parámetros de consulta comoSET 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
L2DistanceTransposeddevolví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_ERRORdurante 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_nullsy 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
ALTERsobre 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
readWKTyreadWKB, 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_refreshesque producía el errorNo 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 yremote_serverstiene 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_sizeestablecido en0podí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
Nothingen los argumentos de la funcióncaseWithExpression. 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
- Usar
clang-21en CI. #87074 (Konstantin Bogdanov). - Evitar las descargas desde cmake durante la compilación cruzada. #90506 (Raúl Marín).
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 usaLIVE VIEW, no será posible actualizar a la nueva versión. #88706 (Alexey Milovidov). - En versiones anteriores, el tipo
Geometryera un alias deString, pero ahora es un tipo plenamente funcional. #83344 (scanhex12). - Se escapan los nombres de archivo creados para las subcolumnas del tipo
Varianten 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 MergeTreeescape_variant_subcolumn_filenames(para mantener la compatibilidad, desactive esta configuración en la configuración de MergeTree o establezca la configuracióncompatibilityen la versión anterior antes de actualizar). Resuelve #69590. #87300 (Pavel Kruglov). - Se habilita el formato de serialización
with_size_streampara el tipo de datosStringde 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, configureserialization_info_versioncomobasicystring_serialization_versioncomosingle_streamen la secciónmerge_treede 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_formatestá 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-rewritablesobre 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 = 0para 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 formatosWKByWKTpara este tipo. En versiones anteriores, el tipoGeometryera un alias deString, pero ahora es un tipo completo. #83344 (scanhex12). - Se añadió la nueva sentencia SQL
EXECUTE ASpara permitir la suplantación de usuarios. Resuelve #39048. #70775 (Shankar). - Agregar la función
naiveBayesClassifierpara clasificar texto mediante Naive Bayes a partir de ngrams. #88677 (Nihal Z. Miaji). - Se agrega soporte para
LIMITyOFFSETfraccionarios 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_partpara 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
preprocessoren 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_usageaX-ClickHouse-ProgressyX-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_directoriespara crear automáticamente los directorios padre deINTO 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 REPLACEpara tablas temporales. Cierra #35888. #89450 (Aleksandr Musorin). - Se añade compatibilidad con
arrayRemovepara eliminar del arrayarrtodos los elementos iguales aelem. Esto solo es necesario por compatibilidad con Postgres, ya que ClickHouse ya dispone de la función mucho más potentearrayFilter. 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_typepara admitir Dremio y otros servidores de Arrow Flight que requieren descriptores de tipo comando. Implementa #89523. #89826 (Shreyas Ganesh). - Nuevas funciones de agregación
argAndMinyargAndMaxque 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_bytesal 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_apien la sección<prometheus>del archivo de configuración. Los handlers compatibles son/api/v1/query_rangey/api/v1/query. #86132 (Nikita Mikhaylov). - La búsqueda de texto completo ahora está en beta (antes estaba en fase experimental). #88928 (Robert Schulze).
Aliaspasa a experimental y puede habilitarse conallow_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
RIGHTyFULLJOIN ahora usan ConcurrentHashJoin; esto significa que estos tipos de JOIN ahora se ejecutan con un mayor grado de paralelismo. Mejora varios casos deRIGHTyFULLJOIN 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
SELECThasta 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
SELECTsobre_part_offsety unORDER BYdistinto) 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 =
abcd1234ef567890abcd1234ef567890ydata_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_orderyquery_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 listspara mejorar el rendimiento en ejecuciones sucesivas. #88912 (Elmi Ahmadov). - Ejecutar la transformación
streamingde LIMIT BY cuando el orden de entrada coincida con las claves de LIMIT BY. #88969 (Eduard Karacharov). - Se permite reescribir
ANY LEFT JOINoANY RIGHT JOINcomoALL INNER JOINen 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
uniqExactal 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
FINALestá 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_replicationahora es la predeterminada, lo que reducirá el uso de memoria en los joins. #89316 (Alexey Milovidov). - Se introduce una caché por tabla de
ColumnsDescriptionpara 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
Variantsi es necesario cuandouse_variant_as_common_typeestá 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_internalasystem.query_log. #83277 (Miсhael Stetsyuk). - Operador
IS NOT DISTINCT FROM(<=>) mejorado: se añadió compatibilidad con el inversoIS DISTINCT FROM, así como con operandos numéricos compatibles de distintos tipos (p. ej.,Nullable(UInt32)yNullable(Int64)). Resuelve #86763. #87581 (yanglongwei). clickhouse-clientyclickhouse-localen 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
AgeyExpirescuando se utilice la caché de resultados de consultas. La presencia del encabezadoAgeindica si el resultado proviene de la caché, mientras queExpirestambié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_mutationestá 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_queryde 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 PARTITIONcuando 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 CLUSTERahora 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
UUIDenParquetcuando está representado medianteFixedString(16)con el tipo lógicoUUID. #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 TABLEconSELECTen clickhouse-client. Esta consulta ya no provocará un timeout, incluso si elSELECTtarda bastante tiempo. Resuelve #38416. #87247 (Diskein). - Se añade compatibilidad con los tipos
JSONyDynamicen 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_headersa la consultaEXPLAINpara 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_intervalindica el intervalo de actualización de la caché de estadísticas; 0 significa que no se creará ninguna caché. El ajuste de sesiónuse_statistics_cacheindica 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
ArrayyMappara usar la configuraciónmax_binary_array_sizeen lugar demax_binary_string_sizeal comprobar los límites de tamaño. Esto garantiza que se apliquen los límites correctos al leer en formatoRowBinary. #88744 (Raufs Dunamalijevs). - Se introdujo una clase
LockGuardWithStopWatchy 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 deMergeMutateSelectedEntryal métodofinalizepara evitar mantener el bloqueo en el ejecutorMergeTreeBackgrounddurante 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_nodespara reducir la cantidad de metadatos queSharedMergeTreealmacena en Keeper. #89036 (Alexander Tokmakov). - Hacer que
S3Queuerespete la opción de configuración del servidordisable_insertion_and_mutation. #89048 (Raúl Marín). - Establecer
s3_retry_attemptsen 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_codecykafka_compression_levelpara especificar la compresión para los productores de Kafka en ambos motores Kafka. #89073 (János Benjamin Antal). - Añade una nueva columna
statisticsensystem.columnsque 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
hasAnyTokensohasAllTokens. #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_defaultde forma predeterminada. Esto mejora la usabilidad. #89333 (Alexey Milovidov). - Corrige un error en el código del motor de base de datos
Backupque podía generar una consulta no válida conSHOW CREATE DATABASEo al consultarengine_fullensystem.databases. Cierra #89477. #89341 (Alexey Milovidov). - En versiones anteriores, la configuración
create_table_empty_primary_key_by_defaultno surtía efecto cuando no se especificaba el motor de la tabla en la consulta CREATE TABLE. #89342 (Alexey Milovidov). - Actualiza
chdiga 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) ensystem.asynchronous_metrics. Ejecuta las consultasSYSTEMsobre las cachés del sistema de archivos solo una vez. Vista Atomic para cachés que apuntan a la misma ruta ensystem.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
mlockde 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_windowpara 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_batchde 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 LOGSespere 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_leastcuando 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 settras la consultaINSERT INTO ... SELECT. Cierra #47800. #79462 (Engel Danila).
Corrección de errores (fallo visible para el usuario en una versión estable oficial)
- Corrige
multiIfcon 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_bycon el formato correcto, por ejemplo,ClickHouse version 25.10.1 (build 5b1dfb14925db8901a4e9202cd5d63c11ecfbb9f)en lugar deClickHouse 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,theilsUycontingency. #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 joincuando 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_kpara 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 medianteALTER). 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>:defineral crear una vista con SQL SECURITY DEFINER. #88968 (pufit). - Se corrigió
LOGICAL_ERRORenL2DistanceTransposed(vec1, vec2, p), donde la optimización para la lectura parcial deQBiteliminó incorrectamenteNullabledel tipo de retorno cuandoperaNullable. #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
pera 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
mergeen partes vaciadas por TTL con proyecciones no vacías al usardeduplicate_merge_projection_mode='ignore'. Resuelve #89430. #89458 (Amos Bird). - Corrige un error lógico en el
joinfull_sorting_mergecon 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 JOINen el lado derecho de un JOIN con la configuraciónenable_lazy_columns_replicationactivada. #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,hasAllTokensytokenscon el tokenizadorsparseGrams. 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 JOINen una columna Map conenable_lazy_columns_replicationactivado. 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 BYindependientemente deoptimize_injective_functions_in_group_byen 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 mutatellamaba acancelen 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 demerge mutate. #89875 (Mikhail Artemenko). - Corrige un error lógico relacionado con una tupla vacía en la función
reversey enCAST. 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 COLUMNSySHOW 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 JOINdentro deINy con la opciónenable_lazy_columns_replicationhabilitada. 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
BSONEachRowyMsgPack. 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: Replicateddurante la inserción al usarARRAY JOINcon la configuraciónenable_lazy_columns_replicationhabilitada. #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
numberscuando 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 schemadurante la actualización). #90202 (Kseniia Sumarokova). - Se corrigieron posibles resultados incorrectos en consultas tras actualizaciones ligeras en consultas
SELECTcon 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_MISMATCHe 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,ltrimyrtrim, 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
L2DistanceTransposedque 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
L2DistanceTransposedal usar vectores de referencia de tipo array (que por defecto usanArray(Float64))) con columnasQBitcuyos tipos de elemento no sonFloat64(Float32,BFloat16). La función ahora convierte automáticamente el vector de referencia para que coincida con el tipo de elemento deQBit. 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
CoalescingMergeTreepara tiposTuple. #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
FindPackageen 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_nullablepara que respete la información de los metadatos de Parquet/ORC/Arrow sobre si las columnas sonNullable, en lugar de hacer que todo seaNullable. 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 únicamentelog_commenten una consulta ya no provocará un fallo de caché. Existe una pequeña posibilidad de que algunos usuarios segmentaran intencionadamente su caché variandolog_comment. Este cambio modifica ese comportamiento y, por tanto, no es retrocompatible. Utilice la opciónquery_cache_tagpara 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,formatQueryy 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
Dynamicen las claves deJOIN. Esto puede dar lugar a resultados inesperados cuando se compara un valor de tipoDynamiccon uno de un tipo distinto deDynamic. Es preferible convertir la columnaDynamical tipo requerido. #86358 (Pavel Kruglov). - La opción del servidor
storage_metadata_write_full_object_keyestá 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_secondsde 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_stepaquery_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
searchAnyysearchAllcomohasAnyTokensyhasAllTokenspara mantener una mayor coherencia con la función existentehasToken. #88109 (Robert Schulze). - Elimina
cache_hits_thresholdde 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_insertymin_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 parabackground mergesy 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 comoquery_logsigan 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 demin_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_replicationen 0 antes de la actualización y habilitarlo una vez finalizada. #88515 (Antonio Andelic).
Nueva funcionalidad
- Se añade compatibilidad con
LIMITnegativo yOFFSETnegativo. Cierra #28913. #88411 (Nihal Z. Miaji). - El motor
Aliascrea 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 tablaauto_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
convpara convertir números entre bases; actualmente admite bases de2-36. #83058 (hp). - Se añadió compatibilidad con la sintaxis
LIMIT BY ALL. Al igual queGROUP BY ALLyORDER BY ALL,LIMIT BY ALLse 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 ALLes equivalente aSELECT 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
quantilePrometheusHistogramacepta 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ónhistogram_quantilede 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, comouse_const_adaptive_granularity, solo se aplican a las partes nuevas). #87774 (Azat Khuzhin). - Se añade el comando
SYSTEM RECONNECT ZOOKEEPERpara 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_warnymax_named_collection_num_to_throw. Se añade la nueva métricaNamedCollectiony el errorTOO_MANY_NAMED_COLLECTIONS. #87343 (Pablo Marcos). - Se añadieron variantes optimizadas que no distinguen entre mayúsculas y minúsculas de las funciones
startsWithyendsWith:startsWithCaseInsensitive,endsWithCaseInsensitive,startsWithCaseInsensitiveUTF8yendsWithCaseInsensitiveUTF8. #87374 (Guang Zhao). - Añade una forma de definir
WORKLOADyRESOURCEen 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_partque 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-cprymv-mvren 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ónL2DistanceTransposed, 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
searchAllysearchAnyahora 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
.sizepara 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
selectde una tabla AggregatingMergeTree con FINAL cuando la tabla tiene columnas de tipoSimpleAggregateFunction(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 yn2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE'para n2. #84735 (Yarik Briukhovetskyi). - Mejora el rendimiento de
LIKEcon un prefijo o sufijo al usar la nueva configuración predeterminadaoptimize_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_rowpara 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
JoinOptimizeMicrosecondsyQueryPlanOptimizeMicroseconds. #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
FINALen una tablaReplacingMergeTreecon la columnais_deletedahora se ejecuta más rápido gracias a una mejor paralelización de dos optimizaciones existentes: 1. la optimizacióndo_not_merge_across_partitions_select_finalpara las particiones de la tabla que tienen solo unpart; 2. dividir otros rangos seleccionados de la tabla enintersecting / 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.tablesal filtrar poruuid(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,hasAllTokensyhasAnyTokens. #88416 (Anton Popov). - Se aplicó inline a
AddedColumns::appendFromBlockpara 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.completionsen 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_compressionpara controlar la compresión del diccionario. De forma predeterminada, está habilitado para usar la compresiónfront-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_viewsymin_insert_block_size_bytes_for_materialized_views. Anteriormente, siparallel_view_processingestaba 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_sizepara controlar el tamaño del búfer de escritura de archivos temporales. * Optimiza el consumo de memoria de la operaciónscatter(usada, por ejemplo, en grace hash join) para columnasLowCardinality. #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
generateSerialIDadmite un argumento no constante que contiene el nombre de la serie. Cierra #83750. #88270 (Alexey Milovidov). - Se añadió el parámetro opcional
start_valuea la funcióngenerateSerialIDpara especificar valores iniciales personalizados para nuevas series. #88085 (Manuel). - Se agregó la opción
--semicolons_inlineenclickhouse-formatpara 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).
mannWhitneyUTestya 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
LowCardinalityen 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: deferademás deExpect: 100-continue, ClickHouse no envía una respuesta100 Continueal 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_errorde forma predeterminada. #87198 (Nikita Mikhaylov). - Renombrar la función de tabla
arrowflightaarrowFlight. #87249 (Vitaly Baranov). - Se actualizó
clickhouse-benchmarkpara aceptar-en lugar de_en sus opciones de la CLI. #87251 (Ahmed Gouda). - Realizar de forma síncrona el vaciado en
system.crash_logdurante el manejo de señales. #87253 (Miсhael Stetsyuk). - Se añadió la configuración
inject_random_order_for_select_without_order_by, que agregaORDER BY rand()a las consultasSELECTde nivel superior sin cláusulaORDER BY. #87261 (Rui Zhang). - Mejora el mensaje de error de
joinGetpara que indique correctamente que la cantidad dejoin_keysno coincide con la cantidad deright_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 desactivarTCP_NODELAYen Keeper. #87363 (Copilot). - Se admite
--connectionenclickhouse-benchmarks. Funciona igual que enclickhouse-client: puede especificar conexiones predefinidas en elconfig.xml/config.yamldel cliente, en la rutaconnections_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-certificateenclickhouse-benchmark. #87370 (Azat Khuzhin). - Ahora la configuración
max_insert_threadsse aplicará a las tablas Iceberg. #87407 (alesapin). - Añadir histogramas y métricas dimensionales a
PrometheusMetricsWriter. De este modo,PrometheusRequestHandlertendrá 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
hasTokenahora 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
ArrayyMap(mapKeysymapValues). Las funciones compatibles sonmapContainsKeyyhas. #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_rowsymax_joined_block_size_bytesdurante la serialización del plan de consulta con la opción experimentalmake_distributed_plan. #87675 (Vladimir Cherkasov). - La configuración
enable_http_compressionpasa 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, comobzip2, 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 solicitargzip, que no está mal, pero es subóptimo en comparación conzstd. 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
fromytoa 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ónmax_request_size, igual quejute.maxbufferparaZooKeeper, desactivada de forma predeterminada por compatibilidad con versiones anteriores; se activará en las próximas versiones). #87952 (Azat Khuzhin). - Hacer que
clickhouse-benchmarkya 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_logestá 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
Replicatedsin 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) yhasAllTokens(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
lagahora no distingue entre mayúsculas y minúsculas para mantener la compatibilidad con MySQL. #88322 (Lonny Kapelushnik). - Se permite iniciar
clickhouse-localdesde el directorioclickhouse-server. En versiones anteriores, producía el errorCannot 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
JSONahora se muestran con un formato legible al usar el formatoVertical. 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-historyse 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-keeperpara 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}ymakeDateTime64. 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ía1968-12-31 23:59:59.532en lugar de1969-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 NULLen columnas Nullable enOUTER JOINconoptimize_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
toDateytoDate32tengan 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_variantsen la caché de inferencia de esquemas. #87180 (Pavel Kruglov). - Hacer que
pathStartsWithcoincida solo con rutas bajo el prefijo. #87181 (Raúl Marín). - Se corrigieron errores lógicos en la columna virtual
_row_numbery en las eliminaciones por posición de Iceberg. #87220 (Michael Kolupaev). - Se corrigió
LOGICAL_ERROR“Too large size passed to allocator” enJOINdebido 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 foundparas3_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_timeouten 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
MergesobreDistributed. #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/timestamptzen 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 SELECTcon 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_timezoneen 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 pushdownenPASTE JOINporque 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
MergeTreecon la columnaTTLconfigurada. #88095 (Anton Popov). - Se corrigió una posible excepción no capturada al leer
system.tablescon bases de datos externas (PostgreSQL/SQLite/…) adjuntas que contienen tablas no válidas. #88105 (Azat Khuzhin). - Se corrigió un cierre inesperado en las funciones
mortonEncodeyhilbertEncodeal llamarlas con un argumento de tupla vacío. #88110 (xiaohuanlin). - Ahora las consultas
ON CLUSTERtardará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.pathmodificados durante la ejecución, no solo el de la raíz. #88198 (Mikhail Artemenko). - Se corrigió la propagación de la bandera
is_sharedenColumnLowCardinality. Esto puede dar lugar a un resultado incorrecto en unGROUP BYsi se inserta un valor nuevo en una columna después de que los valores hash ya se hayan precalculado y almacenado en caché en elReverseIndex. #88213 (Nikita Taranov). - Corrige el ajuste de workload
max_cpu_share. Ahora puede usarse sin tener configurado el ajuste de workloadmax_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.projectionsysystem.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_tablesse 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 ... COMMENTpara 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_modese establece enany. #88440 (Eduard Karacharov). - Se corrige el error “columna no encontrada” al usar
query_plan_use_logical_join_step=0con 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 nodonum_hostsse 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
accurateCastal 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-rewritablepara 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_readyuse_query_condition_cachehabilitadas). #88660 (Anton Popov). - Una excepción
Poco::TimeoutExceptionlanzada desdePoco::Net::HTTPChunkedStreamBuf::readFromDeviceprovoca 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_logen 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_kpara 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>:defineral crear una vista con SQL SECURITY DEFINER. #88968 (pufit). - Retroportado en #89058: Se corrigió
LOGICAL_ERRORenL2DistanceTransposed(vec1, vec2, p), donde la optimización para la lectura parcial deQBiteliminaba incorrectamenteNullabledel tipo de retorno cuandoperaNullable. #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_HIGHERsiSpeculative Store Bypass Safeno 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 queriesSYSTEM ENABLE/DISABLE FAILPOINTdevuelven un errorSUPPORT_IS_DISABLEDen 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 ... USINGpara 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 comot1.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_streamynats_consumerdel 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
S3y a la función de tablas3llamadostorage_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 UPDATEpara el motor de tablas Iceberg. #86059 (scanhex12).- Se añade la tabla del sistema
iceberg_metadata_logpara obtener archivos de metadatos de Iceberg durante las sentencias SELECT. #86152 (scanhex12). - Las tablas
IcebergyDeltaLakeadmiten una configuración personalizada del disco mediante la opcióndiskdel nivel de almacenamiento. #86778 (scanhex12). - Compatibilidad con Azure para discos de lago de datos. #87173 (scanhex12).
- Se admite el catálogo
Unitysobre Azure blob storage. #80013 (Smita Kulkarni). - Se admiten más formatos (
ORC,Avro) en las escrituras deIceberg. Esto cierra #86179. #87277 (scanhex12). - Se añade una nueva tabla del sistema
database_replicascon 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.shutdownLevelpermiten anular el nivel de registro durante el arranque y el apagado de ClickHouse, respectivamente. #85967 (Lennard Eijsackers). - Funciones de agregado
timeSeriesChangesToGridytimeSeriesResetsToGrid. Se comportan de forma similar atimeSeriesRateToGrid, aceptando parámetros para la marca de tiempo de inicio, la marca de tiempo de fin,stepy 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. Calculanchanges/resetsde 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 esArray(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
oneofen las entradasProtobuf. Se puede usar una columna especial para indicar la presencia de una de las alternativas deoneof. Si un mensaje contiene oneof y se estableceinput_format_protobuf_oneof_presence, ClickHouse rellena la columna que indica qué campo deoneofse 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 ensystem.trace_logcon el tipoJemallocSampleal habilitar la configuraciónjemalloc_collect_global_profile_samples_in_trace_log. Ahora el perfilado de jemalloc puede habilitarse de forma independiente para cada consulta mediante el ajustejemalloc_enable_profiler. El almacenamiento de muestras ensystem.trace_logpuede controlarse por consulta mediante el ajustejemalloc_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 = 1yquery_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 estableciendoSET query_plan_use_new_logical_join_step = 0e 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áusulaOUTER JOIN ... USINGpara que sea más consistente: anteriormente, al seleccionar tanto la columna USING como columnas calificadas (a, t1.a, t2.a) en unOUTER JOIN, la columna USING se resolvía incorrectamente comot1.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 SELECTdistribuido en lagos de datos. #86783 (scanhex12).- Se mejora la optimización de PREWHERE para condiciones como
func(primary_column) = 'xx'ycolumn in (xxx). #85529 (李扬). - Se implementó la reescritura de JOIN: 1. Se convierten
LEFT ANY JOINyRIGHT ANY JOINen JOINSEMI/ANTIsi 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 convierteFULL ALL JOINenLEFT ALLoRIGHT ALLJOIN 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
HashJoinen casos de joinLEFT/RIGHTcon 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
MarkRangesmediante el uso dedevectoren lugar dedeque). #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_fileyiceberg_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_fileydelta_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 conALTER TABLE MODIFY SETTING). #85995 (Kseniia Sumarokova). - Puedes usar parámetros de consulta después de
TOal 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 adeltaLakeAzurepara el modo de clúster) y la funcióndeltaLakeS3Cluster(alias dedeltaLakeCluster). Resuelve #85358. #85547 (Smita Kulkarni). - Se aplica la configuración
azure_max_single_part_copy_sizea 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_errora los discos S3 y le cambia el nombre por el más generals3_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) enhttp_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_EXCEEDEDoKEEPER_EXCEPTION) y errores no transitorios. #86202 (Miсhael Stetsyuk). - Se permite omitir la función
identityen 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.channelen uno desyslog/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 REPLICAen 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 (
QueriesMemoryUsageyQueriesPeakMemoryUsage). #86669 (Azat Khuzhin). - Puede usar la opción
clickhouse-benchmark --precisepara 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 deEXPLAIN. Se añadió el ajustequery_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 recopilaSigQde/proc/self/statuspara introspección (siProcessSignalQueueSizeestá cerca deProcessSignalQueueLimit, es probable que obtenga erroresCANNOT_CREATE_TIMER). #86760 (Azat Khuzhin). - Mejora del rendimiento de la solicitud
RemoveRecursiveen Keeper. #86789 (Antonio Andelic). - Eliminar los espacios en blanco adicionales en
PrettyJSONEachRowal generar la salida del tipo JSON. #86819 (Pavel Kruglov). - Ahora se escriben los tamaños de los blobs de
prefix.pathal 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_methodno corresponde a un codec genérico compatible. #87097 (Robert Schulze). - La tabla del sistema
system.query_cacheahora 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 quesystem.query_cachedevuelve textos de las consultas. Esto hace que el comportamiento de la tabla del sistema sea más similar al desystem.query_log. #87104 (Robert Schulze). - Se habilitó la evaluación de cortocircuito para la función
parseDateTime. #87184 (Pavel Kruglov). - Agrega una nueva columna
statisticsasystem.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 servidorbackground_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).
-
- 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
alterde 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
NonZeroUInt64paralogs_to_keepen DatabaseReplicatedSettings. #86142 (Tuan Pham Anh). - Se producía una excepción al ejecutar una consulta
FINALcon un índice de omisión si la tabla (por ejemplo,ReplacingMergeTree) se había creado con la configuraciónindex_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.xmlal 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 resourceal 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
MergesMutationsMemoryTrackingprovocada por las tablasBuffery corregirquery_views_logpara la ingesta en streaming desdeKafka(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_headerestá 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
searchAnyysearchAll, cuando se llaman con patrones de búsqueda vacíos, ahora devuelventrue(es decir, “coinciden con todo”). Antes devolvíanfalse. (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_sizeestaba 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_hostpara ArrowFlight. #86664 (Vitaly Baranov). - Se corrige el cierre del
handlerdeArrowFlight. 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 conPARTITION 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_queueen 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
TTLconWHERE. #86965 (Anton Popov). - Se corrigió un posible error en el resultado de la función
uniqExactcon los modificadoresROLLUPyCUBE. #87014 (Nikita Taranov). - Se corrige la resolución del esquema de la tabla con la función de tabla
url()cuando la configuraciónparallel_replicas_for_cluster_functionsse 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
EXISTSno correlacionado. Se rompía conexecute_exists_as_scalar_subquery=1, que se introdujo en https://github.com/ClickHouse/ClickHouse/pull/85481 y afecta a25.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
- Se corrige la compatibilidad con abseil-cpp 20250814.0, https://github.com/abseil/abseil-cpp/issues/1923. #85970 (Yuriy Chernyshov).
- La compilación del lexer WASM independiente se deja detrás de una bandera. #86505 (Konstantin Bogdanov).
- Se corrige la compilación de crc32c en CPU ARM antiguas sin soporte para la instrucción
vmull_p64. #86521 (Pablo Marcos). - Se usa
openldap2.6.10. #86623 (Konstantin Bogdanov). - No se intenta interceptar
memalignen Darwin. #86769 (Konstantin Bogdanov). - Se usa
krb51.22.1-final. #86836 (Konstantin Bogdanov). - Se corrige la extracción de los nombres de los crates de Rust en
list-licenses.sh. #87305 (Konstantin Bogdanov).
Versión 25.8 LTS de ClickHouse, 2025-08-28
Cambio incompatible con versiones anteriores
- Inferir
Array(Dynamic)en lugar deTuplesin nombre para arrays de valores con distintos tipos en JSON. Para usar el comportamiento anterior, deshabilite la configuracióninput_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
EnumcomoBYTE_ARRAYcon tipo lógicoENUMen 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_schedulereraround_robin, que resultó ser poco equitativo cuando había un gran número de consultas de un solo hilo (p. ej., INSERTs). Este cambio establecefair_round_robincomo 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,deltaLakeAzureeicebergAzurese han actualizado para validar correctamente los permisosAZURE. 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 funcionesicebergLocalydeltaLakeLocalahora también aplican comprobaciones del permisoFILE. #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ónpromql_table_name='X'y ejecute consultas comorate(ClickHouseProfileEvents_ReadCompressedBytes[1m])[5m:1m]. Además, puede encapsular la consulta PromQL en SQL:SELECT * FROM prometheusQuery('up', ...);. Por ahora solo se admiten las funcionesrate,deltaeincrease. 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 motorMerge), 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 tablepara 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_versionpara permitir leer una versión específica de una instantánea en el motor de tablaDeltaLake. #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_multiplierquedó 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
s3os3Cluster, 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_logpara almacenar información histórica sobre las conexiones de ZooKeeper. #79494 (János Benjamin Antal). - La configuración del servidor
cpu_slot_preemptionhabilita 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_shareymax_burst_cpu_seconds. Más detalles: https://clickhouse.com/docs/operations/workload-scheduling#cpu_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 deJSONExtract). #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)devuelve2025-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
dateTimeToUUIDv7para convertir un valor de tipo DateTime en un UUIDv7. Ejemplo de uso:SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56'))devuelve0198af18-8320-7a7d-abd3-358db23b9d5c. #84319 (samradovich). - Funciones de agregación
timeSeriesDerivToGridytimeSeriesPredictLinearToGridpara 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; calculanderivypredict_linearal 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ó
Hashcomo 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 Hashdevuelvee5f9e676db098fdb9530d2059d8c23ef. #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-concurrencya la herramientaclickhouse-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
pushdownde filtros a nivel de página y PREWHERE. Actualmente está en fase experimental. Use la configuracióninput_format_parquet_use_native_reader_v3para 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
Curlanterior configurandoazure_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
ALLLEFT/INNERJOINs se convertirán automáticamente enRightAnysi 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 demax_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 areplaceRegexpAll,replaceRegexpOneyextracten formas más simples y eficientes cuando detecta patrones específicos de expresiones regulares. (incidencia #81981). #81992 (Amos Bird). - Se procesa
max_joined_block_rowsfuera 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
DISTINCTse ejecuten en tiempo lineal y corregir un error ensumDistinct. 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=64para 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), dondecolumnno es de tipoArray. Esto mejora el rendimiento de esas consultas y las hace tan eficientes como el operadorIN. #83945 (Doron David). - Reduce las llamadas innecesarias a memcpy en CompressedReadBufferBase::readCompressedData. #83986 (Raúl Marín).
- Optimiza
largestTriangleThreeBucketseliminando 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
structureToProtobufSchemaystructureToCapnProtoSchemano 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 (comologTrace,demangle,extractURLParameter,toStringCutToZeroyencrypt/decrypt). La disposición del Diccionarioregexp_treeno admitía procesar cadenas con bytes cero. La funciónformatRowNoNewline, cuando se llamaba con el formatoValueso 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ónstemcontenía un error de seguridad ante excepciones que, en un caso muy poco frecuente, podía provocar una fuga de memoria. La funcióninitcapfuncionaba incorrectamente para argumentosFixedString: 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 ApacheORC, que podía provocar la exposición de memoria no inicializada. Se cambió el comportamiento de la funciónreplaceRegexpAlly 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 debyteSizepara 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 almacenamientoDeltaLake. #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_rowparaWHERE. Permite omitir la lectura de más partes en consultas con filtros que no se han trasladado por completo aPREWHERE. #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
EXISTSno 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 ajusteexecute_exists_as_scalar_subquery=1. #85481 (Nikolai Kochetov).
Mejora
- Se añaden opciones de configuración
database_replicatedque 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.jsoncomprimido mediante la configuracióniceberg_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.txta 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 ensystem.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_serverymax_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 argumentoaddress_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=0y 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
insertde las vistas materializadas a nivel de tabla deS3Queue. Se añadieron nuevas configuraciones a nivel deS3Queue:min_insert_block_size_rows_for_materialized_viewsymin_insert_block_size_bytes_for_materialized_views. De forma predeterminada, se usarán las configuraciones del perfil, y las configuraciones a nivel deS3Queuelas 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 consultaALTER UPDATEoALTER DELETE. #83978 (Anton Popov). - Usa información de cgroup (si aplica, es decir, si
memory_worker_use_cgroupy 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
Prettypara númerosNullable. #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 predeterminadologs_to_keeppara 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_keyspara 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_loggingpara 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 nombresOS<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_recoveryde 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_factorpara 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 INsobre 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_acla 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.columnsahora ofrececolumncomo alias de la columna existentename. #84695 (Yunchi Pang). - Nueva opción de configuración de MergeTree
search_orphaned_parts_drivespara 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_decryptahora 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-formatpara aceptar--highlightcomo alias de--hilite. - Se actualizóclickhouse-clientpara aceptar--hilitecomo alias de--highlight. - Se actualizó la documentación declickhouse-formatpara 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_errorpara reducir la presión sobre S3 durante tormentas de reintentos provocadas por errores comoSlowDown, 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_thresholdykeeper_server.coordination_settings.commit_logs_cache_entry_count_threshold. #84877 (Antonio Andelic). - Se permite usar
simdjsonen arquitecturas no compatibles (antes provocaba erroresCANNOT_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
editorenpath, actualiza a 25.8.1. #85341 (Azat Khuzhin). - Añadir
partition_columns_in_data_fileque faltaba a la configuración de Azure. #85373 (Arthur Passos). - Permitir un paso de cero en las funciones
timeSeries*ToGridEsto 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 JOINcon 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
parameterasystem.grantspara indicar el tipo de origen enGRANT READ/WRITEy el motor de tabla enGRANT 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_functionsestá 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 (ajusteuse_query_condition_cache). #83445 (LB7666). - Históricamente, la función
gcsno requería ningún permiso de acceso para usarse. Ahora comprobará el permisoGRANT READ ON S3para 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=1oadd_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 tablaremotecon 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 desdeMergeTreePrefetchedReadPool). #83999 (Azat Khuzhin). - Corrige un error poco frecuente por el que la consulta
MATERIALIZE COLUMNpodía provocar archivos inesperados enchecksums.txty acabar dejando partes de datos en estado detached. #84007 (alesapin). - Corrige el error lógico
Expected single dictionary argument for functional hacer un JOIN con una condición de desigualdad cuando una de las columnas esLowCardinalityy 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
WINDOWno 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_ERRORen 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
setno tenían en cuenta las columnasNullableal 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
DoubleDeltaahora solo puede aplicarse a columnas de tipo numérico. En particular, las columnasFixedStringya no pueden comprimirse conDoubleDelta. (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
zoutofmemorysea 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_passwordintentaba iniciar sesión después de cambiar a 0 la configuración del servidorallow_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 SELECTdistribuido en paralelo conLIMIT, 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
falseel valor deallow_experimental_delta_kernel_rsen 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 = 0provocaba 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_DATAal 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
ngramyno_opya 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
ReplacingMergeTreeyCollapsingMergeTree. #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
ReplicatedMergeTreecreadas en servidores con una versión inferior a la 25.7. #84933 (Anton Popov). - Se corrigieron las actualizaciones ligeras en tablas con motor
MergeTreesin replicación después de ejecutar una consultaALTER 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
selecty 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 SetparaIN (subquery)dentro de la configuraciónadditional_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ónShutdown 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-kerneldeshabilitado en el motorDeltaLake. 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_offseten proyecciones en las versiones hasta que se estabilice. #85372 (Sema Checherinda). - Se corrigen un fallo y la corrupción de datos durante
ALTER UPDATEen 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_slow_all_threads_after_network_errorobackup_slow_all_threads_after_retryable_s3_errorsea 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_commentoinsert_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
JSONExtractal 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_ERRORal usarCOMMENT COLUMN IF EXISTSen la misma instrucciónALTERdespués deDROP COLUMN. La cláusulaIF EXISTSahora omite correctamente la operaciónCOMMENTcuando 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_depthcomo indicador de *la función Cluster era incorrecto y podía provocar duplicación de datos; useclient_info.collaborate_with_initiatoren 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
WITHparaINSERT SELECTdistribuido en paralelo con la tabla de destinoDistributed. Antes, la consulta podía generar un errorUnknown expression identifier. #85811 (Nikolai Kochetov). - Se enmascaran las credenciales para
deltaLakeAzure,deltaLakeCluster,icebergS3ClustereicebergAzureCluster. #85889 (Julian Maicher). - Corrige un error lógico al intentar
CREATE ... AS (SELECT * FROM s3Cluster(...))conDatabaseReplicated. #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_FOUNDal restaurar una tablaMemoryvací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
- Usar discos cifrados para las pruebas con S3 de forma predeterminada. #59898 (Nikita Mikhaylov).
- Usar el binario
clickhouseen las pruebas de integración para obtener símbolos de depuración sin eliminar. #83779 (Mikhail f. Shiryaev). - Se actualizó libxml2 interna de 2.14.4 a 2.14.5. #84230 (Robert Schulze).
- Se actualizó curl interno de 8.14.0 a 8.15.0. #84231 (Robert Schulze).
- Ahora usamos menos memoria para las cachés en CI y tenemos mejores pruebas de expulsión. #84676 (alesapin).
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 unquoting_characteral leer una clave o un valor sin comillas. El valor puede ser uno de los siguientes:invalid,acceptopromote.invaliddescartará la clave y volverá al estado de espera de clave.acceptlo tratará como parte de la clave.promotedescartará 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óncount_matches_stop_at_empty_match. #81676 (Elmi Ahmadov). - Se usan limitadores de todo el servidor para operaciones locales (
max_local_read_bandwidth_for_serverymax_local_write_bandwidth_for_server) y remotas (max_remote_read_network_bandwidth_for_serverymax_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_serverymax_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 estrue. Si se establece entrue, aumenta el rendimiento del procesamiento de archivos comprimidos en las funciones de clúster. Debe establecerse enfalsepor 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 REPLICASprovocaba 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: ahoraSYSTEM RESTART REPLICASsolo reiniciará réplicas en las bases de datos donde tenga permiso paraSHOW 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 estableciendolightweight_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.jsoncomprimidos para Iceberg. Corrige #70874. #81451 (alesapin). - Compatibilidad con
TimestampTZen 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,
READyWRITE, 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 permisosREADyWRITEpara Sources, por ejemplo:GRANT READ ON * TO user,GRANT WRITE ON S3 TO user. La funcionalidad se controla mediante la configuraciónaccess_control_improvements.enable_read_write_grantsy 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 errorSERVER_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
polygonsIntersectCartesianypolygonsIntersectSphericalpara comprobar si dos polígonos se intersecan. #81882 (Paul Lamb). - Se admite la columna virtual
_part_granule_offseten 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
colorSRGBToOkLCHycolorOkLCHToSRGBpara convertir colores entre los espacios de color sRGB y OkLCH. #83679 (Fgrtue). - Se permiten parámetros en las consultas
CREATE USERpara los nombres de usuario. #81387 (Diskein). - La tabla
system.formatsahora 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
searchAnyysearchAll, 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
texta 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_metadatarelacionada 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ó
StorageKafka2ensystem.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 noNullable, 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
HashJoinal eliminar el bucle adicional sobre las tablas hash en el caso habitual de una sola columna de clave; además, se eliminaron las comprobaciones denull_mapyjoin_maskcuando siempre sontrue/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_seekenfilterPartsByQueryConditionCachepara 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
RedisyKeeperMap. #81833 (Pervakov Grigorii). - Se añade la nueva configuración
min_joined_block_size_rows(análoga amin_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 PARTITIONya 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 JOINsi la opciónquery_plan_correlated_subqueries_use_substitutionestá 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_mapyJoinMaskde #82308 también se aplicaron al caso de JOIN con múltiples disyunciones. Además, se optimizó la estructura de datosKnownRowsHolder. #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
HashJoinusa el modo de salidalazy. 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
ProtobufSingleal 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_errorestá 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-formaty en el eco declickhouse-client, pero ahora también se hace en el prompt de comandos. #82871 (Alexey Milovidov). - El resaltado en
clickhouse-formaty 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_rewritablepara los metadatos de la base de datos. Implemente los métodosmoveFileyreplaceFileenplain_rewritablepara que pueda usarse como disco de base de datos. #79424 (Tuan Pham Anh). - Se permiten copias de seguridad de las bases de datos
PostgreSQL,MySQLyDataLake. 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_conditionse 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,MarkCacheEvictedFilespara hacer un seguimiento de las expulsiones de la caché de marcas. (issue #60989). #80799 (Shivji Kumar Jha). - Se admite escribir
enumde 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 APIExpressionVisitorque 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, esteExpressionVisitortambié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 tablaDeltaLakeCluster(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_usersymax_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 COLUMNsi 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_serverymax_local_write_bandwidth_for_serveren caliente, sin reiniciar el servidor. #82083 (Kai Zhu). - Se agregó compatibilidad para borrar todas las advertencias de la tabla
system.warningsmedianteTRUNCATE 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
reinterpretahora admite la conversión aArray(T), dondeTes 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::needUsedFlagsForPerRightTableRowdevuelva 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ónkeeper_pathdel 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-serversin 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 aIDatabase::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 aIDatabase::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
naneinfconNumericIndexedVector. Corrige #82239 y algo más. #82681 (Raufs Dunamalijevs). - No omita los valores cero en los formatos de las cabeceras
X-ClickHouse-ProgressyX-ClickHouse-Summary. #82727 (Nikita Mikhaylov). - Mejora de Keeper: admite permissions específicos para la ACL world:anyone. #82755 (Antonio Andelic).
- No permitir
RENAME COLUMNniDROP COLUMNen columnas enumeradas explícitamente para sumar en SummingMergeTree. Cierra #81836. #82821 (Alexey Milovidov). - Se mejora la precisión de la conversión de
DecimalaFloat32. Se implementa la conversión deDecimalaBFloat16. Cierra #82660. #82823 (Alexey Milovidov). - Las barras de desplazamiento de la interfaz web se verán un poco mejor. #82869 (Alexey Milovidov).
clickhouse-servercon 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_timeycommit_idasystem.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, llamadafailed_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/blockexiste 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
TimeyTime64en formatoMM:SS,M:SS,SSoS. #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 amax_replication_lag_to_enqueue. Esto debería ayudar a evitarDDL task is not finished on some hostscuando 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 consultaSYSTEM SYNC DATABASE REPLICA STRICT, que espera a que el log de replicación quede por debajo demax_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,
getStatuslanza una excepciónErrorCodes::ABORTED. Anteriormente, esto hacía fallar la consultaSELECT. Ahora capturamos las excepcionesErrorCodes::ABORTEDy, 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 depart_logpara las entradasMergeParts. #83460 (Vladimir Cherkasov). - Se habilitan de forma predeterminada las banderas de funcionalidad
create_if_not_exists,check_not_existsyremove_recursiveen 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/Date32como enteros en los formatos de entradaJSON. #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
--reconnectenclickhouse-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 contadorrows_before_limit_at_leastahora 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
loopcuando se usa con la familia de funcionesremote. Se garantiza que se respete la cláusula LIMIT enloop(remote(...)). #80299 (Julia Kartseva). - Se corrige el comportamiento incorrecto de las funciones
to_utc_timestampyfrom_utc_timestampal 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 fueraWHERE key IN (...). #81255 (Michael Kolupaev). - Se corrigió un posible bloqueo en
Aggregatoren caso de que se produjera una excepción durante la fusión. #81450 (Nikita Taranov). - Se corrigió
InterpreterInsertQuery::extendQueryLogElemImplpara 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
INcontransform_null_in=1cuando hay unNULLen el argumento izquierdo y un resultado de subconsulta noNullable. #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
MongoDBpodían incluir un componente de ruta en el argumentohost:port, que se ignoraba sin avisar. La integración deMongoDBrechaza cargar dichas tablas. Con esta corrección, permitimos cargar esas tablas e ignorar el componente de ruta si el motorMongoDBtiene 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 tablamongo, ni tampoco a las fuentes de diccionario ni a las colecciones con nombre. #81942 (Vladimir Cherkasov). - Se corrigió un posible fallo en
Aggregatoren 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) dehoststieneid == DROPPED_MARKy no hay otros elementos para el mismo segmento, el primer elemento deshardsserá un vector vacío, lo que provocastd::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 columnen consultas conarrayJoinen la condiciónWHEREeIndexSet. #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,numericIndexedVectorPointwiseDivideque 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_syasynchronous_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
NULLen la funciónCASE. #82436 (Yarik Briukhovetskyi). - Corrige las condiciones de carrera en el cliente (al no usar un contexto global) y las anulaciones de
session_timezone(anteriormente, sisession_timezonese establecía, por ejemplo, enusers.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 deusers.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_ida 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_sizeen cero para garantizar que las operaciones del servidor no se bloqueen. #82532 (Bharat Nallan). - Se corrige
LOGICAL_ERRORdurante 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
mergeTreeProjectioncuandoenable_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/groupArrayLasten 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
Memoryvacía, que provocaba que la restauración de la copia de seguridad fallara con el errorBACKUP_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_ptrenTransactionLog::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 motorMergeTreeo 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
formatDateTimecuando el formateador%fse 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
Timenegativos 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_requestpara 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_SUBQUERIEScuando 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
watchcuando 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 prefijoCache). #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.ubuntude 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
busyboxy herramientas de instalación enclickhouse/clickhouse-servery en las imágenes oficiales declickhouse. #83735 (Mikhail f. Shiryaev). - Se añadió compatibilidad con la variable de entorno
CLICKHOUSE_HOSTpara especificar el host del servidor de ClickHouse, en consonancia con las variables de entorno existentesCLICKHOUSE_USERyCLICKHOUSE_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
countMatchesdejaba de contar en la primera coincidencia vacía, incluso si el patrón la aceptaba. Para solucionar este problema,countMatchesahora 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 ajustecount_matches_stop_at_empty_match. #81676 (Elmi Ahmadov). - Menor: Se fuerza a que los ajustes del servidor
backup_threadsyrestore_threadssean distintos de cero. #80224 (Raúl Marín). - Menor: Se corrigió
bitNotpara queStringdevuelva 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) yTime64([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 existentetoTime. La configuraciónuse_legacy_to_timese 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
diskpara los motores de base de datosAtomicyOrdinary, 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 - calculardelta,rate,ideltaeirateal estilo de PromQL. #80590 (Alexander Gololobov). - Se añaden las funciones
mapContainsValuesLike/mapContainsValues/mapExtractValuesLikepara filtrar valores demap, 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_querypara 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
JSONenParquety la lectura directa de columnasJSONdesdeParquet. #79649 (Nihal Z. Miaji). - Se añade compatibilidad con
MultiPolygonenpointInPolygon. #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_modeque 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
bech32Encodeybech32Decodepara 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,arrayLastyarrayLastIndexdescartará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 nameen lugar deUSE name. #81307 (Yarik Briukhovetskyi). - Se añadió una nueva tabla del sistema
system.codecspara consultar los codecs disponibles. (issue #81525). #81600 (Jimmy Aguilar Mena). - Se añaden las funciones de ventana
lagylead. Cierra #9887. #82108 (Dmitry Novik). - La función
tokensahora admite un nuevo tokenizador llamadosplit, ideal para logs. #80195 (Robert Schulze). - Se añadió compatibilidad con el argumento
--databaseenclickhouse-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
Kafka2usando 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 deall_topic_partitions / active_replicas_countbloqueos permanentes en la réplica (dondeall_topic_partitionses el número total de particiones yactive_replicas_countes 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
tokenizerobligatorio y dos opcionales:max_rows_per_postings_listyngram_size. #80262 (Elmi Ahmadov). - Anteriormente, el almacenamiento
packedno era compatible con el full-text index, porque el id del segmento se actualizaba sobre la marcha leyendo y escribiendo el archivo.gin_siden disco. En el caso del almacenamientopacked, 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 llamarsetext. Los índices existentes de tipoginseguirán pudiendo cargarse, pero lanzarán una excepción (sugiriendo índicestexten 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é
SLRUen 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::mergecuando 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 alhash joinen 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 tablasKafka). #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
toFixedStringcuando 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 configuracionesconnect_timeout_with_failover_ms/connect_timeout_with_failover_secure_mscomo 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,
mkdirse 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] INa la cláusulaPREWHEREcuando corresponda. #79996 (Eduard Karacharov).
Mejora
EXPLAIN SYNTAXahora usa un nuevo analizador. Devuelve un AST construido a partir del árbol de la consulta. Se añadió la opciónquery_tree_passespara 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
S3tras el errorAuthenticationRequired. #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
_timeen el motorS3Queue,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-clientylocaltambién aceptan parámetros de consulta en la formaparam-<name>(guion), además deparam_<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_errorparastartup_scripts: cuandothrow_on_errorestrue, el servidor no se iniciará a menos que todas las consultas se completen correctamente. De forma predeterminada,throw_on_erroresfalse, lo que mantiene el comportamiento anterior. #79732 (Aleksandr Musorin). - Se permite añadir
http_response_headersenhttp_handlersde cualquier tipo. #79975 (Andrey Zvonov). - La función
reverseahora admite el tipo de datosTuple. Cierra #80053. #80083 (flynn). - Se resuelve #75817: ahora se permite obtener datos de
auxiliary_zookeepersdesde la tablasystem.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_nullsyany_respect_nullscomoSimpleAggregateFunction. #80219 (Diskein). - Eliminar la llamada innecesaria a
adjustCreateQueryForBackuppara las bases de datos Replicated. #80282 (Vitaly Baranov). - Permitir opciones adicionales (que van después de
--, como-- --config.value='abc') enclickhouse-localsin 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
explaindel 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_rewritablecon 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 UNFREEZEno 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:
IndexBinarySearchAlgorithmyIndexGenericExclusionSearchAlgorithm. #80679 (Pablo Marcos). - No emitir advertencias en los logs sobre
MADV_POPULATE_WRITEno compatible en kernels antiguos (para evitar ensuciar los logs). #80704 (Robert Schulze). - Se añadió compatibilidad con
Date32yDateTime64en las expresionesTTL. #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 EXISTSaSYSTEM 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
EXPLAINal 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_aliasse 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_historymuestra el historial de bases de datos de catálogo, como glue o iceberg rest. Además, se renombraron las columnastable_nameydatabase_nameatableydatabaseensystem.iceberg_historypara mayor coherencia. #80975 (alesapin). - Se permite el modo de solo lectura para la table function
merge, por lo que no se requiere el privilegioCREATE TEMPORARY TABLEpara 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 incompletasystem.asynchronouse_metrics). Se añade el tamaño de las cachés en memoria (en bytes) adashboard.html.VectorSimilarityIndexCacheSize/IcebergMetadataFilesCacheSizese han renombrado aVectorSimilarityIndexCacheBytes/IcebergMetadataFilesCacheBytes. #81023 (Azat Khuzhin). - Ignorar las bases de datos con motores que no pueden contener tablas
RocksDBal leer desystem.rocksdb. #81083 (Pervakov Grigorii). - Se permite
filesystem_cachesynamed_collectionsen el archivo de configuración declickhouse-local. #81105 (Alexey Milovidov). - Se corrige el resaltado de
PARTITION BYen instruccionesINSERT. En versiones anteriores,PARTITION BYno se resaltaba como palabra clave. #81106 (Alexey Milovidov). - Dos pequeñas mejoras en la Web UI: - gestionar correctamente las consultas sin salida, como
CREATEeINSERT(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
MemoryResidentWithoutPageCacheproporciona 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 aMemoryResident. #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_finalyuse_skip_indexes_if_final_exact_modeahora tienenTruecomo valor predeterminado. Las consultas con la cláusulaFINALahora 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 estableceruse_skip_indexes_if_final_exact_modeen 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_stricten las comprobaciones de monotonicidad de las funciones de conversión. Actualmente, algunas funciones de conversión, comotoFloat64(UInt32)ytoDate(UInt8), devuelven incorrectamenteis_strictcon el valor false cuando deberían devolver true. #81359 (zoomxi). - Al comprobar si una
KeyConditioncoincide con un rango continuo, si la clave está envuelta en una cadena no estricta de funciones, es posible que unConstraint::POINTdeba convertirse en unConstraint::RANGE. Por ejemplo:toDate(event_time) = '2025-06-03'implica un rango paraevent_time: [‘2025-06-03 00:00:00’, ‘2025-06-04 00:00:00’). Este PR corrige este comportamiento. #81400 (zoomxi). - Los alias
clickhouse/chinvocaránclickhouse-clienten lugar declickhouse-localsi se especifica--hosto--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_subqueriesestá 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
currentDatabaseen seccionesCONSTRAINTde consultasON CLUSTERCierra #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 tiposDynamic/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
readonlyen el almacenamiento de objetosazure_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_functionsde la tablasystem.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
countpara 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
DateTimecon zona horaria en las tablasStripeLog. 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_BLOCKcausado por la optimización de filter-push-down del sep lógico de JOIN cuando la expresiónONno 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
shardNumen las tablas distribuidas conjoin_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 DICTIONARYfallaba conCANNOT_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
enumde 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_ntzpara Unity Catalog. Corrige #79535 y #79875. #80740 (alesapin). - Se corrige el error
THERE_IS_NO_COLUMNen consultas distribuidas conIN 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ónpredicate-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 existen 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_functionsoused_sql_user_defined_functions, si la UDF se utilizó en la consulta. #81101 (Kyamran). - Se corrigieron errores
Too large size ... passed to allocatoro posibles bloqueos en las inserciones mediante el protocolo HTTP con formatos de texto (JSON,Values, …) y con camposEnumomitidos. #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 identifierendistributed_product_mode_local=localcon 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-localal 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
Clusterde lago de datos (deltaLakeCluster,icebergCluster, etc.): (1) se corrige un posible error de segmentación enDataLakeConfigurational usar la funciónClustercon 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
Aggregatoren 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
Npyque se producía al escribir en una tabla con el motorURL. 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ó
DatabaseReplicatedparadatabase_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 partduranteATTACHaReplicatedMergeTree. #81647 (Azat Khuzhin). - La configuración de la consulta
use_iceberg_partition_pruningno 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_sizea fin de garantizar que no sea cero. #81693 (Bharat Nallan). - Corrige problemas con
clickhouse-localrelacionados con consultasDROP VIEWbloqueadas. #81705 (Bharat Nallan). - Se corrige el JOIN de StorageRedis en algunos casos. #81736 (Pervakov Grigorii).
- Se corrige un fallo en
ConcurrentHashJoinconUSING ()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
MongoDBpodían incluir un componente de ruta en el argumentohost:port, que se ignoraba silenciosamente. La integración deMongoDBse negaba a cargar esas tablas. Con esta corrección, permitimos cargar esas tablas e ignorar el componente de ruta si el motorMongoDBtiene 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 tablamongo, ni tampoco a las fuentes de diccionario ni a las colecciones con nombre. #81942 (Vladimir Cherkasov). - Se corrigió un posible fallo en
Aggregatoren 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 pesosUInt32eInt32. 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
- Usa
postgres16.9. #81437 (Konstantin Bogdanov). - Se usa
openssl3.2.4. #81438 (Konstantin Bogdanov). - Se usa
abseil-cpp2025-01-27. #81440 (Konstantin Bogdanov). - Se usa
mongo-c-driver1.30.4. #81449 (Konstantin Bogdanov). - Usa
krb51.21.3-final. #81453 (Konstantin Bogdanov). - Usar
orc2.1.2. #81455 (Konstantin Bogdanov). - Usa
grpc1.73.0. #81629 (Konstantin Bogdanov). - Usar
delta-kernel-rsv0.12.1. #81707 (Konstantin Bogdanov). - Se actualiza
c-aresav1.34.5. #81159 (Konstantin Bogdanov). - Actualiza
curla la versión 8.14 para corregir CVE-2025-5025 y CVE-2025-4947. #81171 (larryluogit). - Actualiza
libarchivea la versión 3.7.9 para corregir: CVE-2024-20696 CVE-2025-25724 CVE-2024-48958 CVE-2024-57970 CVE-2025-1632 CVE-2024-48957 CVE-2024-48615. #81174 (larryluogit). - Se actualiza
libxml2a 2.14.3. #81187 (larryluogit). - Evite copiar el código fuente vendorizado de Rust a
CARGO_HOME. #79560 (Konstantin Bogdanov). - Eliminar la dependencia de la biblioteca Sentry reemplazándola por nuestro propio endpoint. #80236 (Alexey Milovidov).
- Actualización de las dependencias de Python en las imágenes de CI para corregir las alertas de Dependabot. #80658 (Raúl Marín).
- Reintentar la lectura de la marca de parada del DDL replicado desde Keeper al inicio para que las pruebas sean más robustas cuando la inyección de fallos está habilitada en Keeper. #80964 (Alexander Gololobov).
- Usa HTTPS para la URL del archivo de Ubuntu. #81016 (Raúl Marín).
- Se actualizaron las dependencias de Python en las imágenes de prueba. #81042 (dependabot[bot]).
- Se añade
flake.nixpara compilaciones de Nix. #81463 (Konstantin Bogdanov). - Soluciona que
delta-kernel-rsrequiera acceso a la red durante la compilación. Cierra #80609. #81602 (Konstantin Bogdanov). Lee el artículo A Year of Rust in ClickHouse.
Versión de ClickHouse 25.5, 2025-05-22
Cambio incompatible con versiones anteriores
- La función
geoToH3ahora 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óngeotoh3_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 predeterminadofalse, 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
annoyyusearch. 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 índicesannoyyusearch, 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-rsdel almacenamientoDeltaLake. #79541 (Kseniia Sumarokova). - Si la lectura desde una
URLimplica varios redireccionamientos, la configuraciónenable_url_encodingse aplica correctamente en todos los redireccionamientos de la cadena. #79563 (Shankar Iyer). El valor predeterminado de la configuraciónenble_url_encodingahora esfalse. #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,sparseGramsUTF8para 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 unFROM tableimplícito cuando hay datos de entrada que procesar. Esto resuelve #65023. También se habilitó la inferencia de formato enclickhouse-localsi no se especifica--input-formaty se procesa un archivo regular. #79085 (Alexey Milovidov).- Añade las funciones
stringBytesUniqystringBytesEntropypara 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
getServerSettingygetMergeTreeSetting. Cierra #78318. #78439 (NamNguyenHoai). - Se añade la nueva configuración
iceberg_enable_version_hintpara aprovechar el archivoversion-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_offseten tablas de la familiaMergeTree. 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,positiveModuloOrNullpara 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
icebergHashyicebergBucket. Se admite la poda de archivos de datos en tablasIcebergparticionadas con la transformaciónbucket. #79262 (Daniil Ivanik).
Funcionalidad experimental
- Nuevos data types
Time/Time64:Time(HHH:MM:SS) yTime64(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_textpasaron a llamarsegin. Esto sigue la terminología más conocida de PostgreSQL y otras bases de datos. Los índices existentes de tipofull_textseguirán pudiéndose cargar, pero lanzarán una excepción (sugiriendo índicesginen 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 tablaReplacingMergeTreetiene 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/AzureQueueal permitir realizarINSERTde datos en paralelo (se puede habilitar con la configuración dequeueparallel_inserts=true). Anteriormente, S3Queue/AzureQueue solo podía ejecutar en paralelo la primera parte del pipeline (descarga y análisis);INSERTera monohilo. Y losINSERTson casi siempre el cuello de botella. Ahora escalará casi linealmente conprocessing_threads_num. #77671 (Azat Khuzhin).max_processed_files_before_commitmás equitativo en S3Queue/AzureQueue. #79363 (Azat Khuzhin). - Se introdujo un umbral (controlado por la configuración
parallel_hash_join_threshold) para volver al algoritmohashcuando 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
uniqExactdurante 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
uniqExactpara 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 SELECTdistribuido con réplicas paralelas. #79441 (Azat Khuzhin). - Evita que
LogSeriesLimiterhaga 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_downentruede 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 ... DELETEpara 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_bytespara 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
FiberStackdemmapaaligned_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
isIPAddressInRangepara los tipos de datosString,IPv4,IPv6,Nullable(String),Nullable(IPv4)yNullable(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_offseten 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_queryysource) asystem.named_collections. Cierra #78179. #78582 (MikhailBurdukov). - Se añadió un nuevo campo
conditiona la tabla del sistemasystem.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
DateTime64con 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
Varianten el formato Values mediante una mejor conversión de valores. #78923 (Pavel Kruglov). - La función
tokensse amplió para aceptar un argumento adicional “tokenizer”, además de otros argumentos específicos del tokenizador. #79001 (Elmi Ahmadov). - La sentencia
SHOW CLUSTERahora expande las macros (si existen) en su argumento. #79006 (arf42). - Las funciones hash ahora admiten
NULLdentro 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:
ParquetReadRowGroupsyParquetPrunedRowGroupspara perfilar la poda del índice de Parquet. #79180 (flynn). - Se admite
ALTERen 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_syntaxse 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 virtualcache. 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ónreconnectpara que admita 0, 1 o N como valores de reconexión, según corresponda. #79465 (Sachin Kumar Singh). - Permitir
ALTER TABLE ... MOVE|REPLACE PARTITIONpara tablas en discosplain_rewritabledistintos. #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.functionsahora 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 campois_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 modificadorEXCEPT. 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
JSONmediante 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-benchmarkmostrará 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
SELECTdurante la creación deVIEWcon el analizador habilitado. Cierra #75956. #76356 (Dmitry Novik). - Se corrige la aplicación de
async_insertdesde el servidor (medianteapply_settings_from_server) (anteriormente provocaba errores deUnknown packet 11 from serveren 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 mismatchal hacerINSERT SELECTen una función de tabla con inferencia de esquema siSELECTtiene 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
indebe sustituirse porglobalIn. #78749 (Yakov Olkhovskiy). - Se corrigieron varios tipos de consultas
SELECTque leen de tablas con engineMongoDBo la table functionmongodb: consultas con conversión implícita de un valor constante en la cláusulaWHERE(p. ej.,WHERE datetime = '2025-03-10 00:00:00'); consultas conLIMITyGROUP 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
prewhereen 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_cacheahora rechazan los parámetrosblock_sizeywrite_buffer_sizecuando 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 enINes 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 mismatchen 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_requestsyallow_experimental_parallel_reading_from_replicasambos 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
formatDateTimesi un formateador de tamaño variable (p. ej.,%W, es decir, el día de la semanaMonday,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 estadounidense05/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
%een la función SQLparseDateTimeahora 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ónparsedatetime_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
SELECTensystem.workloads. #78743 (Sergei Trifonov). - Corrección: materialización diferida en consultas distribuidas. #78815 (Igor Nikonov).
- Se corrige la conversión de
Array(Bool)aArray(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
AggregatingSortedAlgorithmySummingSortedAlgorithm. #79056 (Nikita Taranov). enable_user_name_access_typeno debe afectar al tipo de accesoDEFINER. #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
- Hacer posible reutilizar el binario
chcacheya compilado en lugar de reconstruirlo siempre. #78851 (János Benjamin Antal). - Añadir espera de pausa para NATS. #78987 (Dmitry Novikov).
- Corrección de la publicación incorrecta de una compilación ARM como amd64compat. #79122 (Alexander Gololobov).
- Usar código ensamblador generado de antemano para OpenSSL. #79386 (Konstantin Bogdanov).
- Correcciones para permitir la compilación con
clang20. #79588 (Konstantin Bogdanov). chcache: soporte de almacenamiento en caché en Rust. #78691 (Konstantin Bogdanov).- Añadir información de desenrollado para los archivos ensambladores de
zstd. #79288 (Michael Kolupaev).
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_selectesfalse. #74481 (Christoph Wurm). - Se corrigen los casos en los que
dateTruncse usa con argumentos Date/DateTime negativos. #77622 (Yarik Briukhovetskyi). - Se ha eliminado la integración heredada de
MongoDB. La configuración del servidoruse_legacy_mongodb_integrationha quedado obsoleta y ahora no hace nada. #77895 (Robert Schulze). - Se mejora la validación de
SummingMergeTreepara 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-localconservará 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á entremin_os_cpu_wait_time_ratio_to_throwymax_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 tablasIceberga 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 ymetadata.jsonpara acelerar las consultas. #77156 (Han Fei). - Se añade compatibilidad con el motor de tabla
DeltaLakepara 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_sizeyvector_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
MergeTreede 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
SASLy las credenciales al motor de tablaKafka. 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_codecpara 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_hosta 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, ensystem.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-256en el protocolo de compatibilidad con PostgreSQL. #76839 (scanhex12). - Se añaden las funciones
arrayLevenshteinDistance,arrayLevenshteinDistanceWeightedyarraySimilarity. #77187 (Mikhail f. Shiryaev). - La configuración
parallel_distributed_insert_selectse aplica aINSERT SELECTenReplicatedMergeTree(anteriormente requería tablasDistribued). #78041 (Igor Nikonov). - Se introduce la función
toInterval. Esta función acepta 2 argumentos (valor y unidad) y convierte el valor en un tipoIntervalespecífico. #78723 (Andrew Davis). - Se añaden varias formas prácticas de resolver el archivo raíz
metadata.jsonen 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
EXISTSen la cláusulaWHERE. Cierra #72459. #76078 (Dmitry Novik). - Se añadieron las funciones
sparseGramsysparseGramsHashescon 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
Icebergbasada 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 concount()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_sizecuando 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
getindividuales, que podrían haber causado una carga significativa en Keeper al aumentar el número de réplicas, en los casos en quemultiReadestá 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
s3Clusterpara 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(...))comocountIfsi se requiere una conversión de tipo. Cierra #78564. #78565 (李扬). - La función
hasAllahora puede aprovechar los índices de omisión para texto completotokenbf_v1yngrambf_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_typepara la tablasystem.metric_logcon 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 asystem.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 esquematransposed, pero también introduce una vista con esquemawideque traduce las consultas a la tabla subyacente. Entransposed_with_wide_viewno se admite resolución de subsegundos en la vista;event_time_microsecondses 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 tablaDistributedutilizará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
JSONy 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_msymax_postpone_time_for_failed_replicated_tasks_ms, que son similares amax_postpone_time_for_failed_mutations_ms. #74576 (MikhailBurdukov). - Agregar
query_idasystem.errors. Cierra #75815. #76581 (Vladimir Baikov). - Se añade compatibilidad para convertir
UInt128enIPv6. Esto permite la operaciónbitAndy las operaciones aritméticas conIPv6, así como la conversión de nuevo aIPv6. Cierra #76752. Esto también permite convertir de nuevo aIPv6el resultado de la operaciónbitAndsobreIPv6. Véase también #57707. #76928 (Muzammil Abdul Rehman). - No se interpretan de forma predeterminada los valores especiales de
Boolen formatos de texto dentro del tipoVariant. Se puede habilitar con la configuraciónallow_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 delibrdkafka(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_preadpara habilitar o deshabilitarpreadenHDFS. #77885 (kevinyhzou). - Añadir eventos de perfil para el número de solicitudes
multide lectura y escritura de ZooKeeper. #77888 (JackyWoo). - Permitir crear e insertar en tablas temporales cuando
disable_insertion_and_mutationestá 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
MergeTreese realizará en el orden de sus bloques, lo que es importante para algoritmos especiales de combinación, comoReplacingMergeTree. Esto cierra #71009. #77976 (Alexey Milovidov). - Las reglas de enmascaramiento de consultas ahora pueden lanzar un
LOGICAL_ERRORsi 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_columnainformation_schema.tablespara mejorar la compatibilidad con MySQL. #78119 (Paweł Zakrzewski). - Se introducen dos nuevas métricas:
TotalMergeFailuresyNonAbortedMergeFailures. 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,BlockQueueTimeyBlockReadTime(antes del cambio, se informaba incorrectamente que 1 segundo era 0.001). #78211 (filimonov). - Se respeta el límite de
loading_retriespara 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_envyfrom_zkpara discos de runtime. Cierra #78177. #78470 (Kseniia Sumarokova). - Añade una advertencia dinámica a la tabla
system.warningspara las mutaciones de larga duración. #78658 (Bharat Nallan). - Se añadió el campo
conditiona la tabla del sistemasystem.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
INparaBFloat16(es decir,SELECT toBFloat16(1) IN [1, 2, 3];ahora devuelve1). Cierra #78754. #78839 (Raufs Dunamalijevs). - No compruebe las partes de
MergeTreeen otros discos si se establecedisk = .... #78855 (Azat Khuzhin). - Registrar los tipos de datos de
used_data_type_familiesensystem.query_logcon 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)duranteDETACH 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_sessionno surtía efecto, lo que hacía que las sesiones con nombre solo se cerraran después desession_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
FileLogvacío mediante la función de tablamerge, cierra #75575. #77441 (Vladimir Cherkasov). - Usar la configuración de formato predeterminada en la serialización
Dynamicde 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
NaNenargMin/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
toStartOfIntervalcuando el argumento de origen es cero. #78096 (Yarik Briukhovetskyi). - Se prohíbe especificar un parámetro de consulta
session_idvacío en la interfaz HTTP. #78098 (Alexey Katsman). - Se corrige una sobrescritura de metadatos en la base de datos
Replicatedque podría haberse producido debido a una consultaRENAMEejecutada justo después de una consultaALTER. #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 consultasRENAME DATABASEoDROP TABLE. #78126 (Nikolay Degterinsky). - Corrección de las comprobaciones por demasiadas tablas en la base de datos
Replicatedtras #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 deReplicatedMergeTreeoKeeperMap. #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 errorBAD_ARGUMENTScuando el argumentomax_sizetiene 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_settingsdevolviera siemprefalse. #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
mapFromArrayscuando el array de claves es de tipoLowCardinality(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_mutationde una réplica sea true. Una tarea implica alguna inserción y fallará sidisable_insertion_and_mutationes true. #78277 (Xu Jia). - Validar el acceso a las tablas subyacentes del motor
Merge. #78339 (Pervakov Grigorii). - El modificador
FINALpuede omitirse al consultar una tablaDistributed. #78428 (Yakov Olkhovskiy). bitmapMindevuelve 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_efficientestá 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
-Clusterfallaban 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
DeltaLakecon 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
SELECTque leen de tablas con motorMongoDBo la función de tablamongodb: consultas con conversión implícita de un valor constante en la cláusulaWHERE(p. ej.,WHERE datetime = '2025-03-10 00:00:00'); consultas conLIMITyGROUP 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
StorageDistributedal usar funciones de tabla distintas deview. Cierra #78464. #78828 (Konstantin Bogdanov). - Corrige la consistencia del formato de
tupleElement(*, 1). Cierra #78639. #78832 (Konstantin Bogdanov). - Los diccionarios de tipo
ssd_cacheahora rechazan los parámetrosblock_sizeywrite_buffer_sizecuando 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
DateTimeno válidos en formatoCSV. #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
- Se prohíbe truncar bases de datos Replicated. #76651 (Bharat Nallan).
- Se revierte la caché del índice de omisión. #77447 (Nikita Mikhaylov).
Nueva funcionalidad
- El tipo de datos
JSONestá listo para su uso en producción. Consulta https://jsonbench.com/. Los tipos de datosDynamicyVariantestá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 enround_robin(comportamiento anterior) ofair_round_robinpara 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_pathde 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,toYearNumSinceEpochytoMonthNumSinceEpoch. Se admite la transformacióntruncateen la poda de particiones del motorIceberg. #77403 (alesapin). - Soporte para los tipos de datos
LowCardinality(Decimal)#72256. #72833 (zhanglistar). - Los eventos de perfil
FilterTransformPassedRowsyFilterTransformPassedBytesmostrará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 desystem.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_sizecuando la caché se use de forma pasiva, como en las fusiones. #77898 (Kseniia Sumarokova). - Aplicar el atributo
preserve_mosten 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
TRUNCATEconINTO OUTFILE. Resuelve #70323. #77181 (Onkar Deshpande). - Ya no es posible usar
NaNoinfcomo 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
analyzerestá deshabilitado, independientemente de la configuración decompatibility. Aun así, es posible cambiar este comportamiento estableciendo explícitamenteparallel_replicas_only_with_analyzerenfalse. #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.warningsy 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 operacionesDROPdeben 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=Kafkaya 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 trassession_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_settingsosettingstienen una columna con el valordefault, lo cual resulta conveniente. Añádalas amerge_tree_settingsyreplicated_merge_tree_settings. #76942 (Diego Nieto). - Se añadió
ProfileEvents::QueryPreempted, que sigue una lógica similar aCurrentMetrics::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_copyahora 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
toDateTimecuandodate_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
RENAMEyRESTART REPLICA; en caso de unRENAMEconcurrente conSYSTEM RESTART REPLICA, podrías acabar reiniciando la réplica equivocada o incluso dejando una de las tablas en el estadoTable 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_flagen 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
defaultProfilesdentro 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 blockdespué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_ERRORque 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,
multiIfpodí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
SELECTfallaban. #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 correctamentetrue(antes devolvíafalse). Esto hace que el comportamiento sea consistente conFloat32yFloat64. #77290 (Shankar Iyer). - Corrige una posible referencia incorrecta a la variable
key_indexsin 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), dondeaes 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_insertconinput. #77340 (Azat Khuzhin). - Corrección:
WITH FILLpuede 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
defaultRolesdentro de una proyección. Como continuación de #76627. #77667 (pufit). - Los segundos argumentos de tipo
Nullablepara la funciónarrayResizeya no se permiten. Anteriormente, conNullablecomo 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
clickhouse-odbc-bridgeyclickhouse-library-bridgese han trasladado a un repository independiente: https://github.com/ClickHouse/odbc-bridge/. #76225 (Alexey Milovidov).- Se corrige la compilación cruzada de Rust y se permite deshabilitar Rust por completo. #76921 (Raúl Marín).
Versión 25.2 de ClickHouse, 2025-02-27
Cambio incompatible con versiones anteriores
- Se habilita completamente
async_load_databasesde forma predeterminada (incluso para aquellas instalaciones que no actualicenconfig.xml). #74772 (Azat Khuzhin). - Se añaden los formatos
JSONCompactEachRowWithProgressyJSONCompactStringsEachRowWithProgress. Continuación de #69989.JSONCompactWithNamesyJSONCompactWithNamesAndTypesya 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_parenthesesa 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_parsingya 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 resultsignifica «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
Kafkapara 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 tabley alrededor de 10 veces en consultas comoSELECT data FROM table LIMIT 10. #74827 (Pavel Kruglov). - Se corrigió una contención innecesaria en
parallel_hashcuandomax_rows_in_join = max_bytes_in_join = 0. #75155 (Nikita Taranov). - Se corrigió la doble preasignación en
ConcurrentHashJoinen 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_partsenMATERIALIZE 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 > 5donde data = [1, 2, 4, 5]. #71383 (Arthur Passos). - Las consultas pasadas al almacenamiento
Executableya 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
indexHintaPREWHERE. #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_logahora 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_serveymax_remote_write_network_bandwidth_for_serveren 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 ...conKILL QUERYy también automáticamente por un timeout (max_execution_time). #75016 (Kirill). - Se agregó compatibilidad con
groupUniqArrayArrayMapcomoSimpleAggregateFunction. #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,18446744073709551615para un argumento demasiado grande y lanzan una excepción si esnan. #75312 (Vitaly Baranov).- Soporte nativo de
s3.endpointdesde la configuración del catálogo enDatabaseIceberg. Cierra #74558. #75375 (Kseniia Sumarokova). - No fallar de forma silenciosa si un usuario que ejecuta
SYSTEM DROP REPLICAno 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 deusers.xmldel 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_trackerpara 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_hashasystem.processes. Nota: aunque puede calcularse fácilmente sobre la marcha con la funciónnormalizedQueryHash, esto es necesario para preparar cambios posteriores. #75756 (Alexey Milovidov). - Consultar
system.tablesno generará una excepción aunque exista una tablaMergecreada sobre una base de datos que ya no existe. Se elimina el métodogetTotalRowsde las tablasHiveporque 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/handleen las funciones de tabla dePostgreSQLoMySQL. 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ónworkloadse establece con un valor desconocido: permitir acceso ilimitado (opción predeterminada) o devolver un errorRESOURCE_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
getSubcolumnenARRAY JOINsi 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_rowsde 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 (
int64para los tipos enteros yfloat64para 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 consultaselect * from a where -x = -42;, dondexes 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 SELECTen la Interfaz de PostgreSQL en macOS (problema #72938). #74231 (Artem Yurov). - Se corrigió
max_log_ptrno 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_privilegesymissing_privilegesque faltaban enquery_logpara las operaciones BACKUP y RESTORE. #74887 (Alexey Katsman). - Renueva el ticket krb de HDFS si se produce un error de SASL durante una solicitud
selecta 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...condatabase_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,MapyNullable(..)con la configuraciónoptimize_function_to_subcolumnshabilitada. Anteriormente, los índices de estas columnas podían ignorarse. #75081 (Anton Popov). - Desactive
flatten_nestedal 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 ONcon comparación null-safe, comoIS 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
BFloat16como 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
HAVINGse empuja hacia abajo con réplicas en paralelo. #75363 (Vladimir Cherkasov). - Ocultar información sensible en las
table functionsicebergS3,icebergAzurey en los motores de tabla. #75378 (Kseniia Sumarokova). - La función
TRIMcon 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 sizesal 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_errorscuando 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
MergeTreedespués de múltiples consultasRENAMEasíncronas (conalter_sync = 0) entre columnas con tipos diferentes. #75693 (Anton Popov). - Se corrige el error
Block structure mismatch in QueryPipeline streamque se producía en algunas consultas conUNION 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_DATAdurante 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 JOINen 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 hashcomo algoritmo de join en la v24.12. Esto significa que ClickHouse seguirá realizando el join connon-parallel hashsi 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-bridgepermite 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,
JSONEachRowde 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 bibliotecaPoco::JSONsea 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ónenable_job_stack_traceno 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 RENAMErequería el privilegioCREATE 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
ALTERcon la base de datos Memory. #76359 (Azat Khuzhin). - Corrige un error lógico en el análisis de índices si la condición de
WHEREcontiene la funciónpointInPolygon. #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--usersaclickhouse-extract-from-configpara obtener valores deusers.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
JSONEachRowWithProgressescribirá 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
Mergeunificará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, establezcamerge_table_max_tables_to_look_for_schema_inferenceen1ocompatibilityen24.12o 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.
DateTimepasa a serDateTime64(3)(antes:UInt32); la configuraciónoutput_format_parquet_datetime_as_uint32restaura el comportamiento anterior.Datepasa a serDate32(antes:UInt16). #70950 (Michael Kolupaev). - Ya no se permiten de forma predeterminada tipos no comparables (como
JSON/Object/AggregateFunction) enORDER BYni en las funciones de comparaciónless/greater/equal/etc. #73276 (Pavel Kruglov). - El engine de base de datos obsoleto
MaterializedMySQLse ha eliminado y ya no está disponible. #73879 (Alexey Milovidov). - El origen de diccionario
mysqlya no ejecuta la consultaSHOW 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 TABLEahora requieren un permisoCHECKindependiente. En versiones anteriores, bastaba con tener el permisoSHOW TABLESpara ejecutar estas consultas. Pero una consultaCHECK TABLEpuede ser costosa, y los límites habituales de complejidad de consulta para las consultasSELECTno 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ónh3togeo_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_integrationen 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
SELECTinmediatamente después de enviarlas. Se puede habilitar mediante la configuraciónapply_mutations_on_fly. #74877 (Anton Popov). - Se implementa la poda de particiones en tablas
Icebergpara 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_FLOATdesdeApache Arrow/Parquet/ORC(se leen comoFloat32). Esto cierra #72960. Ten en cuenta que el half float IEEE-754 no es lo mismo queBFloat16. Cierra #73835. #73836 (Alexey Milovidov). - La tabla
system.trace_logcontendrá dos nuevas columnas,symbolsylines, 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 servidorsymbolizedentro detrace_logy 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 queryNpara 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_sizeyskipping_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) yadd_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_numberyscript_line_numberasystem.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 valoresDateTime64, así como conDateTime. #74482 (Li Yin).
Características experimentales
- El tipo de dato
BFloat16ya está listo para producción. #73840 (Alexey Milovidov).
Mejora del rendimiento
- Se optimizó la función
indexHint. Ahora, las columnas que solo se usan como argumentos de la funciónindexHintno se leen de la tabla. #74314 (Anton Popov). Si la funciónindexHintes 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_rowspara el algoritmo JOINparallel_hash. Ayuda a evitar un aumento del consumo de memoria en comparación con el algoritmohash. #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_hashla 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_insertestá habilitado. Esto permite usar varias optimizaciones de consultas conFINALpara 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
arrayROCAUCyarrayAUCPRcalculen 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
maskedExecutea 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/FileLogpara 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 (medianteALTER 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
1000ré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_partitioningde 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_printpara 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-clientyclickhouse-localdetectará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_toyoutput_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
Prettysean 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ónoutput_format_pretty_squash_consecutive_ms(50 ms de forma predeterminada) youtput_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
Verticalcuando la salida se envía a un terminal. Esto puede desactivarse con la configuraciónoutput_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
JSONEachRowWithProgressincluirá eventos con metadatos, así como totales y extremos. También incluyerows_before_limit_at_leastyrows_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óninteractive_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_secondsymin_age_to_force_merge_on_partition_onlyestá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
orccon una zona horaria personalizada, en lugar de usar siempre la zona horariaGMT. #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
namepara la columnametricensystem.asynchronous_metrics. #71164 (megao). - Históricamente, por alguna razón, la consulta
ALTER TABLE MOVE PARTITION TO TABLEcomprobaba los permisosSELECTyALTER DELETEen lugar del permiso específicoALTER_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 concedidoSELECTyALTER 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_ROLEde 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_nameasystem.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_sortpasa 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 quemax_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_loadywait_dictionaries_load_at_startupasystem.server_settings. #72664 (Christoph Wurm). - Añade la opción
max_backup_bandwidtha la lista de opciones que se pueden especificar como parte de las consultasBACKUP/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 funcionesleastygreatesttratan los argumentosNULLdevolviendoNULLincondicionalmente (si estrue) o ignorándolos (si esfalse). #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 alsystem.s3queueexistente. #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-disksreportados 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_levelen la salida Parquet. #73651 (Arthur Passos). - Permite leer
fixed_size_listde Apache Arrow como unArrayen 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) yNull(no conserva los backups en ningún sitio), pensado para pruebas. #73690 (Vitaly Baranov). concurrent_threads_soft_limit_numyconcurrent_threads_soft_limit_num_ratio_to_coresahora se pueden cambiar sin reiniciar el servidor. #73713 (Sergei Trifonov).- Se añadió compatibilidad con tipos numéricos extendidos (
Decimal, enteros grandes) en las funcionesformatReadable. #73765 (Raúl Marín). - Soporte de TLS para la compatibilidad con el protocolo wire de Postgres. #73812 (scanhex12).
- La función
isIPv4Stringdevolví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_opearatorspara validar los literales deenumen operadores comoINyNOT INcon respecto al tipoenum, y lanzar una excepción si el literal no es un valorenumvá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
distributedparaEXPLAIN PLAN.Ahora,EXPLAIN distributed=1 ...añade el plan remoto a los pasosReadFromParallelRemote*. #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_enginedespués de crear la tabla. #74014 (Christoph Wurm). - Compatibilidad con subcolumnas en la consulta
selectde 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 = 1yallow_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 claveFORCEcomo alternativa a la palabra claveFINALexistente. #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-shiftedahora 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
RESTOREpara 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_addressestá activado; anteriormente se usaba incorrectamente el puerto del proxy. Se añade la funcióncurrentQueryID(). #73095 (Yakov Olkhovskiy). - Propagar la configuración de formato a NativeWriter en TCPHandler para que configuraciones como
output_format_native_write_json_as_stringse 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
%fde la funciónformatDateTimeahora genera, sin excepción, seis dígitos (de subsegundos). Esto hace que el comportamiento sea compatible con la funciónDATE_FORMATde MySQL. El comportamiento anterior puede restaurarse usando la configuraciónformatdatetime_f_prints_scale_number_of_digits = 1. #73324 (ollidraese). - Se corrigió el filtrado por la columna
_etagal leer desde el almacenamientos3y la función de tablas3. #73353 (Anton Popov). - Se corrige el error
Not-ready Set is passed as the second argument for function 'in'al usarIN (subquery)en la expresiónJOIN ONcon 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
tupleElementque puede darse en algunos casos con tuplas que tienen elementosLowCardinalityy la configuraciónoptimize_functions_to_subcolumnshabilitada. #73548 (Anton Popov). - Corrige el análisis de un glob de
enumseguido 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_errorque 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 SYNTAXpara 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_BLOCKen consultas conFINALySAMPLE. Se corrigió un resultado incorrecto en consultasSELECTconFINALdeCollapsingMergeTreey se habilitaron optimizaciones deFINAL. #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.txtal 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 crearMapsin 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
anyyanyLastcon tiposenumy 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
S3Queueentre 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
Loopcomo motor de tabla enCREATE 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) paraRESTOREdesde 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
EXCEPToINTERSECT, para preservar el resultado correcto de la consulta. Corrige #73930. Corrige #66465. #74577 (Dmitry Novik). - Se corrigieron las consultas
INSERT SELECTentre tablas con columnasTupley con serialización dispersa habilitada. #74698 (Anton Popov). - La función
rightfunciona 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
hasColumnInTableno 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
- El script de instalación universal ofrecerá la instalación incluso en macOS. #74339 (Alexey Milovidov).