Saltar al contenido principal

Cambios incompatibles con versiones anteriores

Cambios en los tipos de datos

  • Se introduce el tipo Geometry. Admite la lectura de los formatos WKB y WKT. En versiones anteriores, el tipo Geometry era un alias de String, pero ahora es un tipo con todas las funcionalidades. #83344 (Konstantin Vedernikov).
  • Se elimina el tipo Object, ya obsoleto. #85718 (Pavel Kruglov).
  • Se escapan los nombres de archivo creados para las subcolumnas del tipo Variant en la parte Wide de las 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 zona horaria específica que contiene \). El escape puede deshabilitarse cambiando el SETTING de MergeTree escape_variant_subcolumn_filenames (para mantener la compatibilidad, desactive este SETTING en la configuración de MergeTree o establezca el SETTING compatibility en la versión anterior antes de la actualización). Resuelve #69590. #87300 (Pavel Kruglov).

Cambios en consultas y funciones

  • ALTER MODIFY COLUMN ahora requiere un DEFAULT explícito al convertir columnas Nullable a tipos no Nullable. Anteriormente, estos ALTER podían quedarse bloqueados con errores de cannot convert null to not null; ahora los NULL se sustituyen por la expresión por defecto de la columna. Resuelve #5985. #84770 (Vladimir Cherkasov).
  • Se eliminan los ajustes allow_not_comparable_types_in_order_by/allow_not_comparable_types_in_comparison_functions. Permitir tipos no comparables en ORDER BY o en funciones de comparación puede provocar errores lógicos y resultados inesperados. Resuelve #90028. #90527 (Pavel Kruglov).
  • Se corrigen las funciones bitShiftLeft y bitShiftRight para que devuelvan 0 o un valor vacío en caso de un desplazamiento exactamente igual al tamaño del tipo. #91943 (Pablo Marcos).
  • El tokenizer Ngram ya no devolverá ngrams de longitud inferior a la N con la que se configuró. La búsqueda de texto no devolverá filas cuando los tokens de búsqueda estén vacíos. #89757 (George Larionov).

Cambios en el almacenamiento y los índices

  • Se elimina la funcionalidad obsoleta LIVE VIEW. Si usa LIVE VIEW, no será posible actualizar a la nueva versión. #88706 (Alexey Milovidov).
  • Se prohíbe crear varios discos plain-rewritable sobre la ruta compartida de almacenamiento de objetos, ya que esto puede provocar un comportamiento no definido debido a colisiones entre distintas transacciones de almacenamiento de metadatos. #89038 (Mikhail Artemenko).
  • Ahora está prohibido crear tablas MergeTree especiales (como ReplacingMergeTree, CollapsingMergeTree, etc.) con una clave ORDER BY vacía, ya que el comportamiento de merge en estas tablas no está definido. Si aun así necesita crear una tabla de este tipo, habilite el SETTING allow_suspicious_primary_key. #91569 (Anton Popov).
  • Varias correcciones relacionadas con índices implícitos. El esquema mostrado o almacenado (metadatos de Keeper) no incluirá índices implícitos, como los creados por los SETTINGS add_minmax_index_for_numeric_columns o add_minmax_index_for_string_columns. Esto podría provocar errores de metadatos cuando se crea o actualiza una tabla ReplicatedMergeTree en una versión más reciente mientras existe una réplica en una versión anterior. #91429 (Raúl Marín).

Cambios en los SETTINGS y la configuración

  • Añade compatibilidad con el etiquetado de excepciones en la respuesta de resultados HTTP para que los clientes puedan analizar las excepciones de forma más fiable. Resuelve #75175. El SETTING http_write_exception_in_output_format está deshabilitado de forma predeterminada para mantener la coherencia entre formatos. #88818 (Kaviraj Kanagaraj).
  • Corrige la precedencia de los SETTINGS SASL del motor Kafka. Los SETTINGS SASL a nivel de tabla especificados en las consultas CREATE TABLE ahora sobrescriben correctamente los SETTINGS específicos del consumidor/productor procedentes de los archivos de configuración. #89401 (János Benjamin Antal).
  • Se cambiaron de nombre los parámetros de configuración de ACME refresh_certificates_task_interval a refresh_certificates_task_interval_seconds y refresh_certificates_before a refresh_certificates_before_seconds. El parámetro refresh_certificates_task_interval_seconds ahora espera un valor en segundos. #92211 (Konstantin Bogdanov).
  • Marca como cambio no retrocompatible la desactivación de los argumentos posicionales en las proyecciones. Además, introduce el SETTING enable_positional_arguments_for_projections para permitir una actualización segura del clúster de ClickHouse cuando haya argumentos posicionales en las proyecciones. #92007 (Dmitry Novik).

Cambios del cliente

  • Se actualizó clickhouse-client para que devuelva un código de salida distinto de cero (159 - TIMEOUT_EXCEEDED) cuando una consulta supera el tiempo de espera debido a receive_timeout. Anteriormente, los timeouts devolvían el código de salida 0 (éxito), lo que dificultaba que los scripts y los procesos automatizados detectaran fallos por timeout. #91432 (Sav).

Cambios en el formato de las estadísticas

  • Al alterar una columna de String a Nullable(String), no se realizará ninguna mutación de los datos. Pero en el caso de la función de agregación uniq, se utiliza una estructura de datos diferente: para una columna Nullable, se usará AggregateFunctionNull con un agregador uniq anidado. AggregateFunctionNull serializará una marca bool adicional. Esto hará que el archivo de estadísticas sea incompatible. El formato de las estadísticas ha cambiado; el servidor fallará si tenemos estadísticas con el formato antiguo. Para evitar una excepción, ejecute ALTER TABLE [db.]table MATERIALIZE STATISTICS ALL para regenerar las estadísticas. #90311 (Han Fei).

Otros cambios incompatibles

  • Corrige Fatal al comprimir datos cuyo tamaño no está alineado con el tamaño del elemento (en el codec T64). Resuelve #89282. #89432 (yanglongwei).

Nuevas características

Funciones

  • Se añadió la nueva instrucción SQL EXECUTE AS para admitir la suplantación de usuarios. Resuelve #39048. #70775 (Shankar).
  • Se añadió la función flipCoordinates, que desempaqueta el número requerido de dimensiones de un array e intercambia punteros dentro de la columna Tuple. Resuelve #79469. #79634 (Sachin Kumar Singh).
  • Se mejoró el operador IS NOT DISTINCT FROM (<=>): se añadió compatibilidad con su inverso, IS DISTINCT FROM, y con operandos numéricos compatibles de distintos tipos (p. ej., Nullable(UInt32) y Nullable(Int64)). #87581 (yanglongwei).
  • Se añadió compatibilidad con la función de ventana cume_dist. Corrige #86920. #88102 (Manuel).
  • Funciones para calcular el área y el perímetro del tipo Geometry. #89047 (Konstantin Vedernikov).
  • Se implementó la función dictGetKeys, que devuelve las claves del diccionario cuyo atributo es igual al valor especificado. Usa una caché de búsqueda inversa por consulta, ajustada mediante el SETTING max_reverse_dictionary_lookup_cache_size_bytes, para acelerar búsquedas repetidas. #89197 (Nihal Z. Miaji).
  • Se añadió compatibilidad con arrayRemove(arr, elem) para eliminar del array arr todos los elementos iguales a elem. Resuelve #52099. #89585 (tiwarysaurav).
  • Se introduce la función escalar midpoint, que calcula el promedio. Resuelve #89029. #89679 (simonmichal).
  • Ahora puede recuperar tanto el argumento como su correspondiente valor mínimo o máximo usando las nuevas funciones argAndMin y argAndMax. #89884 (AbdAlRahman Gad).
  • Se añadió la función SQL HMAC(algorithm, message, key) como parte de #73900 y #38775. #90837 (Mikhail f. Shiryaev).
  • Se añadió compatibilidad para que la función has() use 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).

Tablas del sistema

  • Se añade la tabla del sistema system.unicode, que contiene una lista de caracteres Unicode y sus propiedades. Cierra #80055. #80857 (wxybear).
  • Se añadió una nueva tabla del sistema shared_merge_tree_condemned_parts, similar a shared_merge_tree_outdated_parts, que enumera las partes condenadas a punto de ser eliminadas por PartsKillerThread. (Smita Kulkarni).

Motores de tabla y almacenamiento

  • Se admite parte de la API HTTP Query de Prometheus. Para habilitarla, agregue una regla de tipo query_api en la sección <prometheus> del archivo de configuración. Los handlers admitidos son /api/v1/query_range y /api/v1/query. #86132 (Nikita Mikhaylov).
  • Ahora los usuarios pueden configurar las tablas S3/Azure Queue para mover o etiquetar archivos procesados, además de las opciones ya existentes para conservarlos o eliminarlos. Resuelve #72944. #86907 (Murat Khairulin).
  • Se agrega un nuevo SETTING de MergeTree, merge_max_dynamic_subcolumns_in_wide_part, para limitar el número de subcolumnas dinámicas en la parte Wide tras la fusión, independientemente de los parámetros especificados en el tipo de dato. #87646 (Pavel Kruglov).
  • Integración con el catálogo Microsoft OneLake. #89366 (Konstantin Vedernikov).
  • Se admite la sintaxis CREATE OR REPLACE para tablas temporales. Cierra #35888. #89450 (Aleksandr Musorin).
  • Se admite join direct (nested loop) para tablas MergeTree. Para usarlo, especifíquelo como única opción en el SETTING: join_algorithm = 'direct'. #89920 (Vladimir Cherkasov).
  • Este PR introduce ajustes a nivel de proyección, expuestas mediante la nueva cláusula WITH SETTINGS en ALTER TABLE ... ADD PROJECTION. Estos ajustes permiten que las proyecciones hagan sobrescritura de ciertos parámetros de almacenamiento de MergeTree (p. ej., index_granularity, index_granularity_bytes) por proyección. #90158 (Amos Bird).

Iceberg y lagos de datos

Funcionalidades de SQL y consultas

  • Se añade la opción allow_reentry a la función de agregación windowFunnel. Cuando se habilita con strict_order, ignora los eventos que no respetan 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 subestimar las tasas de conversión. #86916 (Lee ChaeRok).
  • Ahora el usuario puede añadir un nuevo argumento preprocessor al crear índices de texto. El argumento es una expresión arbitraria que transforma cada documento antes de la tokenización. #88272 (Jimmy Aguilar Mena).
  • Se añade compatibilidad con LIMIT y OFFSET fraccionarios para seleccionar una fracción de una tabla. Cierra #81892. #88755 (Ahmed Gouda).
  • Se añade el SETTING into_outfile_create_parent_directories para crear automáticamente los directorios padre de INTO OUTFILE, evitando errores cuando las rutas de salida no existen. Resuelve #88610. #88795 (Saksham).
  • Se añade el SETTING type_json_skip_invalid_typed_paths para deshabilitar excepciones en inserciones o 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, usa el valor null/cero de la ruta tipada. Cierra #86917. #89886 (Max Justus Spransy).

Funciones del cliente y de la CLI

  • El cliente de la CLI ahora puede suprimir el mensaje ‘ClickHouse server version is older than ClickHouse client. It may indicate that the server is out of date and can be upgraded.’ especificando --no-server-client-version-message o false. #87784 (Larry Snizek).
  • Ahora se puede acceder a instancias de ClickHouse Cloud con credenciales de Cloud mediante --login. #89261 (Krishna Mannem).
  • La interfaz web ahora ofrece un botón de descarga. Descarga el resultado completo aunque la interfaz solo muestre una parte. #89768 (Alexey Milovidov).

Configuración y supervisión del servidor

  • Añade un campo memory_usage a X-ClickHouse-Progress y X-ClickHouse-Summary. Esto puede usarse para recopilar en tiempo real, en el cliente, el uso de memoria de las consultas. #88393 (Christoph Wurm).
  • Se añadió el SETTING send_profile_events, que permite a los clientes reducir el tráfico de red cuando no se usan los eventos de perfil. #89588 (Kaviraj Kanagaraj).

Keeper

Formatos de entrada y salida

  • Se implementa el nuevo formato de entrada y salida Buffers. Este formato es similar a Native; sin embargo, a diferencia de Native, no almacena nombres de columnas, tipos de columnas ni metadatos adicionales. Cierra #84017. #91156 (Nihal Z. Miaji).
  • Se añade el SETTING arrow_flight_request_descriptor_type para dar soporte a Dremio y otros servidores Arrow Flight que requieren descriptores en formato de comando. Corrige #89523. #89826 (Shreyas Ganesh).
  • Se añade el SETTING kafka_schema_registry_skip_bytes al motor de tabla Kafka para omitir bytes de la cabecera del envoltorio (por ejemplo, el prefijo de 19 bytes de AWS Glue Schema Registry) antes de analizar la carga útil del mensaje. #89621 (Taras Polishchuk).

Otras características nuevas

  • Añade el SETTING max_streams_for_files_processing_in_cluster_functions para controlar el número de flujos de lectura paralela de archivos en las funciones de tabla cluster. Cierra #90223. #91323 (Pavel Kruglov).
  • Permite desactivar, por consulta, la descarga en segundo plano de datos de partes cercanas. Corrige #89524. #89668 (tanner-bruce).
  • Añade soporte experimental para e2k (Elbrus-2000) como nueva plataforma para ClickHouse. #90159 (Ramil Sattarov).

Características experimentales

  • Se añade compatibilidad para recuperar certificados TLS desde proveedores de ACME, RFC 8555. #66315 (Konstantin Bogdanov).
  • Se introduce una nueva lógica para ejecutar automáticamente consultas mediante réplicas paralelas, controlada por el SETTING automatic_parallel_replicas_mode. #87541 (Nikita Taranov).
  • La búsqueda de texto completo está ahora en vista previa privada (tras haber estado previamente en fase experimental). #88928 (Robert Schulze).
  • Alias pasa a ser experimental; puede habilitarse con allow_experimental_alias_table_engine=1. #89712 (Kai Zhu).

Mejoras de rendimiento

Ejecución y optimización de consultas

  • Hace que las consultas fallen rápidamente al alcanzar los límites de filas. Resuelve #61872. #62804 (Sean Haynes).
  • Añade una optimización para eliminar las columnas no utilizadas en los planes de consulta. Resuelve #75152. #76487 (János Benjamin Antal).
  • Optimización para valores grandes en ConstantNode. Cierra #72880. #81104 (Yakov Olkhovskiy).
  • Precarga las claves durante la iteración de la tabla hash para minimizar los fallos de caché. #84708 (lgbo).
  • 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).
  • Implementa la replicación diferida de columnas en JOIN y ARRAY JOIN. Evita convertir representaciones especiales de columnas como Sparse y Replicated en columnas completas en algunos formatos de salida. Esto evita copias innecesarias de datos en memoria. #88752 (Pavel Kruglov).
  • Usa 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 evitar inicializar innecesariamente a cero la columna de resultados. #90449 (Raúl Marín).
  • Acelera la descompresión de T64 mediante despacho dinámico. #90610 (Raúl Marín).
  • Acelera la conversión de columnas a bool (en las cláusulas WHERE) mediante despacho dinámico. #91203 (Raúl Marín).
  • Acelera la ordenación de un único bloque numérico mediante despacho dinámico. #91213 (Raúl Marín).

Optimizaciones de JOIN

  • Los RIGHT y FULL JOIN ahora usan ConcurrentHashJoin; esto significa que estos tipos de JOIN ahora se ejecutan con un mayor grado de paralelismo. Mejora diversos casos de RIGHTyFULL JOIN` hasta 2 veces. Resuelve #78027. #78462 (Yarik Briukhovetskyi).
  • Se permite reescribir ANY LEFT JOIN o ANY RIGHT JOIN como ALL INNER JOIN en algunos casos. #89403 (Dmitry Novik).
  • Se admiten filtros de runtime de JOIN para ANTI JOIN. Además, se ha refactorizado la implementación de los filtros de runtime para reducir la contención de bloqueos. #89710 (Dmitry Novik).
  • Se admite seguir leyendo en orden desde la tabla izquierda en operaciones LEFT/INNER JOIN, lo que puede aprovecharse en pasos posteriores. #89815 (Vladimir Cherkasov).

Optimizations de MergeTree y almacenamiento

  • Consultas SELECT hasta 8 veces más rápidas con una poda de particiones intensa en tablas con más de 10 mil partes. #85535 (James Morrison).
  • Cuando una consulta usa un mapa hash fijo para el estado de agregación (GROUP BY sobre un entero pequeño), ClickHouse fusiona el estado de agregación en paralelo para acelerar la consulta. Resuelve #63666. #87366 (Jianfei Hu).
  • Parquet reader v3 está habilitado de forma predeterminada. #88827 (Michael Kolupaev).
  • Las consultas ahora pueden beneficiarse de optimize_read_in_order y query_plan_optimize_lazy_materialization simultáneamente. Resuelve #88767. #88866 (Manuel).
  • Usar una proyección agregada para consultas con DISTINCT. Cierra #86925. #88894 (Nihal Z. Miaji).
  • Ejecutar la transformación LIMIT BY en streaming cuando el orden de clasificación de entrada coincida con las claves de LIMIT BY. #88969 (Eduard Karacharov).
  • Se agregó compatibilidad con serialización dispersa para columnas de tipo Nullable. #88999 (Amos Bird).
  • Optimizar el filtrado in-place del lector de MergeTree. Resuelve #87119. #90630 (Xiaozhe Yu).
  • Introducir una heurística adicional para reducir la amplitud de las combinaciones de merge seleccionadas. #91163 (Mikhail Artemenko).

Optimizaciones de índices y búsqueda de texto

  • ClickHouse ahora usa skip indexes para realizar análisis de índices en cláusulas WHERE con condiciones de filtro combinadas con AND y OR. Anteriormente, la cláusula WHERE debía ser una conjunción (AND) de condiciones de filtro para poder usar skip indexes. Un nuevo SETTING, use_skip_indexes_for_disjunctions (predeterminada: activada), controla esta funcionalidad. #87781 (Shankar Iyer).
  • Se mejoró el rendimiento del filtrado para predicados con funciones como like, equals, has y otras, aprovechando un filtro preliminar adicional construido a partir del índice de texto. Esta optimización se habilita mediante el SETTING query_plan_text_index_add_hint. #88550 (Anton Popov).
  • 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 búsqueda binaria. #88786 (Elmi Ahmadov).
  • Dado que las posting lists son las de mayor tamaño de datos, almacenarlas en caché mejora el rendimiento en ejecuciones consecutivas. #88912 (Elmi Ahmadov).
  • Se optimizan las búsquedas inversas repetidas en diccionarios mediante búsquedas más rápidas en un conjunto precalculado de posibles valores de clave. Cierra #7968. #88971 (Nihal Z. Miaji).
  • Se optimizan las consultas ORDER BY...LIMIT N mediante el uso de skip index y un filtro de umbral dinámico para reducir significativamente las filas procesadas. #89835 (Shankar Iyer).
  • Los usuarios deberían notar una menor latencia en el análisis de índices cuando hay índices minmax grandes (millones de gránulos). #90428 (Shankar Iyer).

Optimizaciones de agregación

  • Optimiza AggregateFunctionHistogram al ordenar solo la parte final del array de puntos y omitir la ordenación en entradas monotónicas, lo que logra una aceleración de ~10 %. #85760 (MakarDev).
  • Acelera ligeramente algunas operaciones de countDistinct al reducir la sobrecarga de HashSetTable::merge. #89727 (Raúl Marín).
  • Mejora el rendimiento y el comportamiento de topK. #90091 (Raúl Marín).
  • Mejora el rendimiento de las operaciones de comparación de Decimal. Resuelve #28192. #90153 (Konstantin Bogdanov).

Optimizaciones de S3 y de copias de seguridad

  • S3 particiona internamente los objetos en función de los prefijos del nombre de clave y escala automáticamente para admitir altas tasas de solicitudes por partición. Este cambio introduce dos nuevos ajustes 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. #88418 (Julia Kartseva).
  • Mejora el rendimiento de las consultas en tablas de S3 creadas con un glob pattern al aplicar pushdown a los valores de filtro de _path, lo que permite evitar operaciones de listado en S3. Se controla mediante el ajuste s3_path_filter_limit. #91165 (Eduard Karacharov).

Optimizaciones del lago de datos

  • Ejecución distribuida: mejor división de las tareas por ID de grupos de filas, no por archivos. #87508 (Konstantin Vedernikov).
  • Se admite la poda de particiones para las funciones de Paimon. #90253 (JIaQi Tang).

Mejoras

Optimización y ejecución de consultas

  • Permitir FETCH PARTITION cuando haya discos dañados en tablas MergeTree replicadas. #58663 (Duc Canh Le).
  • Se añade la función h3PolygonToCells, que permite rellenar geometrías con hexágonos H3. Resuelve #33991. #66262 (Zacharias Knudsen).
  • Todas las consultas DDL ON CLUSTER ahora se ejecutan con el contexto del usuario de la consulta original para validar mejor el acceso. #71334 (pufit).
  • Se añadió paralelismo a las consultas ALTER TABLE ... FREEZE. #71743 (Kirill).
  • Permite usar segundos argumentos no constantes con IN. También admite una Tuple como segundo argumento. #77906 (Yarik Briukhovetskyi).
  • Este PR permite usar proyecciones normales como un índice secundario. Cuando está habilitado, ciertos predicados de la consulta pueden usarse para leer de partes de proyección y generar bitmaps para filtrar filas de forma eficiente durante la etapa PREWHERE. #81021 (Amos Bird).
  • Se habilita enable_shared_storage_snapshot_in_query de forma predeterminada para ofrecer mayores garantías de consistencia. #82634 (Alexey Milovidov).
  • UNION debería unificar los types con Variant si es necesario. Resuelve #82772. #83246 (Mithun p).
  • Registrar las consultas internas (las que ejecutan internamente los diccionarios, las vistas materializadas actualizables, etc.) y añadir la nueva columna is_internal a system.query_log. #83277 (Miсhael Stetsyuk).
  • Permite INSERT en columnas ALIAS (columnas que simplemente hacen referencia a una columna física sin ninguna expresión). Cierra #80060. #84154 (Shaurya Mohan).
  • Se pueden ver una barra de progreso, logs y estadísticas de rendimiento de las consultas CREATE OR REPLACE TABLE con SELECT en clickhouse-client. Resuelve #38416. #87247 (Diskein).
  • Compatibilidad con los tipos JSON y Dynamic en las funciones hash. Resuelve #87734. #87791 (Pavel Kruglov).
  • El valor predeterminado de query_plan_optimize_join_order_limit pasa a ser 10. #89312 (Alexey Milovidov).
  • La optimización enable_lazy_columns_replication ahora viene habilitada de forma predeterminada, lo que reducirá el uso de memoria en los joins. #89316 (Alexey Milovidov).
  • Se habilita la configuración allow_statistics_optimize de forma predeterminada, para que el optimizador de JOINs use estadísticas de columna. #89332 (Alexey Milovidov).
  • Se habilita create_table_empty_primary_key_by_default de forma predeterminada. Esto mejora la usabilidad. #89333 (Alexey Milovidov).
  • La configuración enable_time_time64_type ahora viene habilitada de forma predeterminada. #89345 (Yarik Briukhovetskyi).
  • Se habilita de forma predeterminada la configuración allow_special_serialization_kinds_in_output_formats. #89402 (Pavel Kruglov).
  • Se ignora ON CLUSTER en las consultas ejecutadas mediante Shared Catalog. (Nikolay Degterinsky).
  • Se añade compatibilidad con ALTER DATABASE MODIFY COMMENT en Shared Catalog. (Nikolay Degterinsky).
  • Soporte para CREATE OR REPLACE con SharedSet/SharedJoin en bases de datos Shared. (Tuan Pham Anh).
  • Evita tener que esperar a otras consultas al ejecutar SYNC REPLICA en SharedMergeTree. (Raúl Marín).

Mejoras en Storage y MergeTree

  • Añade una nueva columna virtual _tags (Map(String, String)) con todas las etiquetas asociadas al blob en S3. Resuelve #72945. #77773 (Zicong Qu).
  • Añade un mensaje de error que indica que la parte fue deduplicada. #80264 (Aleksandr Musorin).
  • Usa OpenSSL 3.5.4. #81389 (Konstantin Bogdanov).
  • Añade caché para la autenticación bcrypt. #87115 (Nikolay Degterinsky).
  • Las marcas temporales de Parquet sin zona horaria (isAdjustedToUTC=false) ahora se leen como DateTime64(…, ‘UTC’) en lugar de DateTime64(…). #87872 (Michael Kolupaev).
  • Los roles definidos en SQL ahora pueden concederse a usuarios definidos en users.xml. #88139 (c-end).
  • Si un skip index usado en una consulta FINAL está en una columna que forma parte de la clave primaria, el paso adicional para comprobar la intersección de la clave primaria en otras partes es innecesario y ahora ya no se realiza. Resuelve #85897. #88368 (Shankar Iyer).
  • Permite insertar en tablas remotas y de lago de datos cuando disable_insertion_and_mutation está habilitado. #88549 (Alexander Tokmakov).
  • Almacena en caché las estadísticas a nivel de tabla y añade dos ajustes: el ajuste de MergeTree refresh_statistics_interval y el ajuste de sesión use_statistics_cache. #88670 (Han Fei).
  • Añade un ajuste de MergeTree alter_column_secondary_index_mode para controlar qué hacer con los índices durante las mutaciones. Posibles valores: throw, drop, rebuild y compatibility. Cierra #77797. #89335 (Raúl Marín).
  • Introduce una caché por tabla de ColumnsDescription para partes, lo que reduce el uso de memoria cuando las tablas contienen muchas partes y muchas columnas. #89352 (Azat Khuzhin).

Tablas del sistema y monitorización

  • Añade varias métricas de histograma para el servidor y Keeper para instrumentar la duración de las etapas de ejecución de las solicitudes de Keeper. #88158 (Miсhael Stetsyuk).
  • Añade una nueva columna statistics en system.columns, que indica los tipos de estadísticas generadas para esta tabla. #89086 (Han Fei).
  • La interfaz HTTP proporcionará los headers Age y Expires cuando se use la caché de resultados de consultas. Introduce nuevos eventos de perfil: QueryCacheAgeSeconds, QueryCacheReadRows, QueryCacheReadBytes, QueryCacheWrittenRows, QueryCacheWrittenBytes. #89759 (Alexey Milovidov).
  • Muestra las propiedades de la tabla en la UI web. Al hacer clic en el número de filas o bytes, se abrirá una consulta de system.tables. #89771 (Alexey Milovidov).
  • Se añadieron los campos last_error_time, last_error_message, last_error_query_id y last_error_trace a la tabla system.error_log. #89879 (Narasimha Pakeer).
  • Almacena los IDs de bloques de deduplicación en system.part_logs. #89928 (Sema Checherinda).
  • Se cambió el valor predeterminado de la configuración check_query_single_value_result de true a false. Esto hace que CHECK TABLE devuelva resultados detallados por parte en lugar de un resultado agregado. #90150 (Robert Schulze).
  • Añade una nueva columna parts_in_progress_names a system.mutations para mejorar el diagnóstico. #90155 (Shaohua Wang).
  • Introduce system.background_schedule_pool{,_log} para mejorar la introspección de los trabajos en segundo plano. #91157 (Azat Khuzhin).
  • Añade los eventos de perfil FailedInitialQuery y FailedInitialSelectQuery. #91172 (RinChanNOW).
  • Añade tres columnas en system.tables para métricas de partes huérfanas. (Han Fei).
  • Expone el valor de distributed_cache_client.connection_pool_size como una métrica. (Francesco Ciocchetti).

Mejoras del cliente y la UI

  • Ahora el usuario puede cancelar la consulta pulsando Ctrl-C cuando el paginador está activo. Resuelve #80778. #88935 (Grigorii Sokolik).
  • La UI web mostrará barras en la tabla incluso cuando los valores sean negativos. #89016 (Alexey Milovidov).
  • Las consultas que empiezan con espacios en blanco ya no se guardan en el historial. #89116 (Konstantin Bogdanov).
  • clickhouse-client y clickhouse-local, en modo interactivo, resaltarán en la línea de comandos los identificadores que tengan el mismo nombre que el identificador actual bajo el cursor. #89689 (Alexey Milovidov).
  • El redimensionador del área de texto de consulta en la UI web ahora ocupa todo el ancho. #89457 (Alexey Milovidov).
  • Las indicaciones de tipo en la UI web ya no se desbordan sobre el encabezado de la tabla. #89753 (Alexey Milovidov).
  • Ahora puedes comentar o descomentar rápidamente las líneas seleccionadas en el editor de consultas de la UI web con Ctrl+/ (o Cmd+/ en Mac). #91160 (Samuel K.).
  • Se añade compatibilidad para cargar la configuración de ClickHouse Client desde las rutas de XDG Base Directory. Resuelve #89882. #90306 (Wujun Jiang).

Mejoras en S3 y el almacenamiento en la nube

  • Permitir usar automáticamente las regiones opt-in de AWS para S3 cuando la región no se especifica en el endpoint. #88930 (Andrey Zvonov).
  • Establecer s3_retry_attempts en 500 de forma predeterminada para 25.6 para garantizar que las copias de seguridad se completen correctamente cuando haya una repartición en S3. #89051 (Nikita Mikhaylov).
  • Almacenar en caché las credenciales de S3 al interactuar con el endpoint de STS para poder reutilizarlas en distintas llamadas a funciones. #89734 (Antonio Andelic).
  • Ahora las URLs prefirmadas funcionan con S3. Cierra #65032. #90827 (Yarik Briukhovetskyi).

Mejoras en los lagos de datos

  • Soporte para leer DeltaLake CDF mediante la función de tabla deltaLake con los ajustes delta_lake_snapshot_start_version, delta_lake_snapshot_end_version. #90431 (Kseniia Sumarokova).
  • Soporte para ajustes de almacenamiento en insert en la función de tabla, para mantener la coherencia con select. Cierra #89386. #91707 (Kseniia Sumarokova).
  • Generar un error de “not implemented” para la consulta TRUNCATE en lagos de datos en lugar de no hacer nada en silencio. Cierra #86604. #91713 (Kseniia Sumarokova).

Mejoras de Kafka

  • Los ajustes kafka_compression_codec y kafka_compression_level ahora pueden utilizarse para especificar la compresión de los productores de Kafka. #89073 (János Benjamin Antal).
  • Se añade kafka_consumer_reschedule_ms como un ajuste configurable del engine de tabla Kafka. Resuelve #89204. #90112 (Jeremy Aguilon).

Mejoras de Keeper

  • Se añade 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 comprobación en el servidor de Keeper durante el handshake para rechazar clientes cuando last_zxid_seen (provided by the client) > last_processed_zxid. #90016 (Miсhael Stetsyuk).
  • Se usa un límite de nodos más bajo para la solicitud RemoveRecursive de Keeper durante la limpieza de S3Queue. #90201 (Antonio Andelic).

Mejoras en los formatos de entrada/salida

  • Se añadió compatibilidad con UUID en Parquet cuando está representado por FixedString(16) con el tipo lógico UUID. #74484 (alekseev-maksim).
  • Se añadió compatibilidad con Array de String como entrada para las funciones hasAnyTokens o hasAllTokens. #89124 (Elmi Ahmadov).
  • En el formato Pretty, las named tuples ahora se muestran como Pretty JSON. Esto resuelve #65022. #91779 (Mostafa Mohamed Salah).
  • Se añadió un límite de tamaño para los mensajes CapnProto. Puede cambiarse con format_capn_proto_max_message_size. #91888 (Antonio Andelic).

Mejoras del índice de texto

  • El índice de texto ahora funciona con tablas ReplacingMergeTree. #90908 (Elmi Ahmadov).
  • Se habilitó el uso del índice invertido en PREWHERE. Resuelve #89975. #89977 (Peng Jian).
  • El tokenizador de ngrams ahora puede generarse con ngram_length = 1. #91529 (George Larionov).
  • Se introdujo una caché para el header deserializado del índice de texto a fin de reducir I/O y mejorar el rendimiento de las consultas. #89513 (Elmi Ahmadov).

Otras mejoras

  • Se corrigió la deserialización binaria de Array y Map para que use la configuración max_binary_array_size en lugar de max_binary_string_size al validar los límites de tamaño. #88744 (Raufs Dunamalijevs).
  • Si la memoria del sistema es inferior a 5 GB, no se bloquea con mlock el ejecutable de forma predeterminada. #89751 (Alexey Milovidov).
  • Reduce el uso de memoria durante las merges en la tabla system.metric_log al establecer min_bytes_for_wide_part y vertical_merge_algorithm_min_bytes_to_activate en 128 MB. #89811 (filimonov).
  • Reintenta los errores de red cuando la biblioteca S3 analiza la respuesta XML. #90216 (Sema Checherinda).
  • Actualiza los mensajes de advertencia al acercarse a los límites de guardrails: muestra los valores actuales y los valores de throw. #90438 (Nikita Fomichev).
  • Transmite fragmentos en la tabla system.filesystem_cache en lugar de crear un único fragmento con todo el estado de la caché. #90508 (Kseniia Sumarokova).
  • Las entradas de la caché del índice de similitud vectorial ahora se eliminan cuando las partes de la tabla se eliminan o se reemplazan por partes más recientes. #90750 (Shankar Iyer).
  • Evita exponer la versión del servidor de ClickHouse en las respuestas de error HTTP devueltas antes de la autenticación. #91003 (filimonov).
  • Se agregaron las nuevas configuraciones apply_row_policy_after_final y apply_prewhere_after_final para permitir aplicar políticas de fila y condiciones PREWHERE después del procesamiento de FINAL. Corrige #90986. #91065 (Yarik Briukhovetskyi).
  • Se admite el tipo JSON en tupleElement. Cierra #81630. #91327 (Pavel Kruglov).
  • Se admiten índices negativos para acceder a elementos de tuplas (p. ej., tuple.-1). #91665 (Amos Bird).
  • Permite la conversión implícita de tipos al convertir Array a QBit. #91846 (Raufs Dunamalijevs).
  • Añade una nueva columna, elapsed_time_microseconds, a system.blob_storage_log. #92322 (Alexey Milovidov).
  • Añade una nueva configuración, database_shared_drop_table_delay_seconds, que permite a los usuarios controlar el retraso de eliminación de tablas en la base de datos Shared. (Nikolay Degterinsky).
  • Carga de forma diferida las claves cifradas para las colecciones con nombre. (Pablo Marcos).
  • Permite deshabilitar la caché de clientes por búfer para distributed cache. (Kseniia Sumarokova).
  • Añade un límite compartido para las conexiones de distributed cache. (Kseniia Sumarokova).

Correcciones de errores

Esta sección incluye una selección de correcciones de errores importantes. Para consultar la lista completa de todas las correcciones de errores de esta versión, consulte el registro de cambios completo

Correcciones en la ejecución de consultas

  • Corrige el valor incorrecto de rows_before_limit_at_least cuando intervienen varios segmentos remotos en una agregación distribuida con fusión. #63511 (Amos Bird).
  • Corrige la aparición de 0 rows in set después de la consulta INSERT INTO ... SELECT. Cierra #47800. #79462 (Engel Danila).
  • Corrige multiIf con argumentos constantes y evaluación de cortocircuito. Cierra #72714. #84546 (Yakov Olkhovskiy).
  • Corrige un LogicalError al seleccionar desde una tabla con una restricción de subconsulta. Resuelve #84190. #85575 (Pervakov Grigorii).
  • Corrige un error lógico en la reordenación de cross join cuando query_plan_optimize_join_order_limit > 1. Cierra #89409. #88286 (Vladimir Cherkasov).
  • Corrige resultados incorrectos de JOIN al usar condiciones OR con claves únicas en la tabla derecha. Resuelve #89391. #89512 (Vladimir Cherkasov).
  • Corrige un error lógico en full_sorting_merge join con columnas duplicadas. Resuelve #86957. #89495 (Vladimir Cherkasov).
  • Corrige el posible error ‘Invalid number of rows in Chunk’ en JOIN con columnas duplicadas. Resuelve #89411. #90053 (Vladimir Cherkasov).
  • Corrige un problema de datos duplicados en RIGHT JOIN con una tabla distribuida cuando las réplicas paralelas están habilitadas. #90806 (zoomxi).
  • Corrige un error lógico con join_use_nulls y varios JOIN junto con cross join. #91853 (Vladimir Cherkasov).

Correcciones de tipos de datos y JSON

  • Corrige, en algunos casos, la lectura de subcolumnas desde una columna con un punto en el nombre. Resuelve #81261, #82058, #88169. #87205 (Pavel Kruglov).
  • Corrige la lectura de un array mixto de Floats y Bools en JSON. Antes, insertar estos datos provocaba una excepción. #88008 (Pavel Kruglov).
  • Corrige la conversión de LowCardinality(Nullable(T)) a Dynamic. #86365 (Pavel Kruglov).
  • Corrige un posible error lógico durante la lectura de paths y sus subcolumnas en la serialización avanzada de datos compartidos de JSON. Cierra #89805. #89819 (Pavel Kruglov).
  • Corrige un posible desbordamiento de pila en la deserialización binaria de tipos de datos. Cierra #88710. #89822 (Pavel Kruglov).
  • Corrige un posible estado inconsistente de los datos compartidos y los paths dinámicos en JSON que podía provocar errores lógicos y resultados inesperados. #90816 (Pavel Kruglov).
  • Corrige la fusión de columnas JSON en Summing/Aggregating/Coalescing MergeTree. #91151 (Pavel Kruglov).

Correcciones de MergeTree y almacenamiento

  • Se corrigieron varios problemas causados por la eliminación prematura de columnas en TTL. Resuelve #88002. #88860 (Amos Bird).
  • Se corrige un resultado incorrecto de min(PK)/max(PK) cuando la PK está en orden inverso. Esto corrige #83619. #88796 (Amos Bird).
  • Se corrigió una segmentación incorrecta en la optimización de JOIN cuando la clave primaria está ordenada de forma descendente. Resuelve #88512. #88794 (Amos Bird).
  • Se corrige una condición de carrera en la ruta de lectura del índice de proyección. Resuelve #89497. #89762 (Peng Jian).
  • Se corrigió el manejo incorrecto de merge de partes vaciadas por TTL con proyecciones no vacías al usar deduplicate_merge_projection_mode='ignore'. Resuelve #89430. #89458 (Amos Bird).
  • Se corrige el error TOO_MANY_MARKS, que podía producirse después de algunas consultas ALTER para partes compactas. #91980 (alesapin).

Correcciones de Parquet y de formato

  • Se corrigió un fallo de segmentación en el lector de Parquet cuando input_format_parquet_local_file_min_bytes_for_seek se establece en 0. Resuelve #78456. #88784 (Animesh).
  • En el escritor de Parquet, la cadena created_by ahora se emite con el formato correcto. #87735 (Michael Kolupaev).
  • Se corrigió un problema por el que la escritura en Parquet no conservaba el orden original al usar escritura de un solo hilo con el escritor nativo. #90126 (Arthur Passos).
  • Se corrigió un error en el lector de ORC al leer columnas de cadena codificadas con DICTIONARY_V2 y que contienen solo valores NULL. #91889 (Peng Jian).
  • Se corrigió un desbordamiento al leer desde el formato ORC en los tipos Date y DateTime64. Cierra #70976. #91572 (Yarik Briukhovetskyi).

Correcciones de Iceberg y del lago de datos

  • Se corrige el protocolo de icebergS3Cluster. Se añade compatibilidad con la evolución del esquema y con las eliminaciones posicionales y por igualdad en la función de clúster de Iceberg. Resuelve #88287. #88919 (Yang Jiang).
  • Se corrige una JSON Exception en una tabla Iceberg con una columna timestamp al usar Glue catalog. Resuelve #90210. #90209 (Alsu Giliazova).
  • Ahora ClickHouse no usará la optimización de lectura en orden para Iceberg si no se especifica el orden de clasificación en los archivos manifest. Corrige #89178. #90304 (alesapin).

Correcciones de funciones

  • 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 cierra #88913. #88914 (Alexey Milovidov).
  • Corrige el cálculo de phi-cuadrado, que provocaba resultados incorrectos en cramersV, cramersVBiasCorrected, theilsU y contingency. #87831 (Nihal Z. Miaji).
  • Corrige top_k para que respete el parámetro de umbral cuando se llama con un solo argumento. Cierra #88757. #88867 (Manuel).
  • Corrige el truncamiento de los argumentos de countIf(*). Cierra #89372. #89373 (Manuel).
  • Corrige que las funciones trim, ltrim y rtrim no funcionen con dos argumentos. Cierra #90170. #90305 (Nihal Z. Miaji).
  • Corrige que la función arrayFilter no funcione al usar un array vacío y la función isNull. Cierra #73849. #91105 (Nihal Z. Miaji).

Correcciones de memoria y fallos

  • Corrige un posible fallo durante una consulta remota con ARRAY JOIN dentro de IN y con la opción enable_lazy_columns_replication habilitada. Resuelve #90361. #89997 (Pavel Kruglov).
  • Se corrigió un fallo durante el apagado limpio del servidor debido a un orden de destrucción incorrecto. Resuelve #82420. #90076 (Nikita Mikhaylov).
  • Corrige un fallo cuando el estado de una función de agregación contiene un valor serializado de una columna LowCardinality(String). #89550 (Pavel Kruglov).
  • Corrige un fallo en StorageDistributed al analizar nombres de directorio de segmento malformados. #90243 (Aleksandr Musorin).
  • Se corrigieron errores espurios de límite de memoria cuando la caché de páginas en espacio de usuario está habilitada. #91361 (Michael Kolupaev).
  • Corrige un posible fallo en funciones de agregación después de MEMORY_LIMIT_EXCEEDED. #92390 (Azat Khuzhin).
  • Se mejoró el seguimiento de memoria en la generación de resultados de hash joins. #89560 (Azat Khuzhin).

Correcciones de seguridad y acceso

  • Corrige el error ACCESS_ENTITY_NOT_FOUND al intentar ejecutar clusterAllReplicas desde un usuario con un rol que no existe. Resuelve #87670. #89068 (pufit).
  • Corrige la validación de acceso para las consultas ALTER UPDATE cuando se usa la función de tabla remote con localhost como host de destino. #90761 (pufit).
  • Corrige la comprobación de permisos con comodín en la revocación parcial. #90922 (pufit).
  • Corrige el manejo de permisos globales con revocaciones mediante comodín. #90928 (pufit).

Correcciones de la base de datos Replicated

  • 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; ya está corregido. #88671 (Alexander Tokmakov).
  • Se corrige un error de use-after-free en Distributed debido a una condición de carrera entre el apagado y los INSERT en segundo plano. Resuelve #88640. #89136 (Azat Khuzhin).
  • Vista materializada actualizable: se corrige un fallo poco frecuente del servidor si la tabla de origen se eliminaba por completo durante una actualización. #89203 (Michael Kolupaev).

Correcciones de Keeper

  • Se corrige 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).

Otras correcciones destacadas

  • Se corrigió la degradación del rendimiento en el análisis de los índices de omisión de datos. #89004 (Anton Popov).
  • Se corrige la incompatibilidad con el particionado de Hive que impedía una actualización sin problemas en 25.8. #90202 (Kseniia Sumarokova).
  • Se corrige la consulta WITH FILL infinita con nan/inf. Resuelve #69261. #90255 (Konstantin Bogdanov).
  • Time y Time64 ahora deberían tener en cuenta correctamente las zonas horarias al convertir desde DateTime y DateTime64. Cierra #89896. #90310 (Yarik Briukhovetskyi).
  • Se corrigieron posibles resultados incorrectos en consultas SELECT tras actualizaciones ligeras cuando la caché de condiciones de consulta estaba habilitada. Corrige #90176. #90204 (Anton Popov).
  • Se corrige la compatibilidad de la serialización en memoria del estado de agregación String. #90880 (Antonio Andelic).
  • Corrige la agregación de SummingMergeTree en columnas Nested LowCardinality. #90927 (Ivan Babrou).
  • Se corrige el fallo por el que system.view_refreshes devolvía el error No macro 'replica' in config. #92203 (Michael Kolupaev).
  • Corrige la replicación de una operación ALTER que añade indirectamente una columna a una MV con Shared Catalog. (Nikolay Degterinsky).
  • Corrige el bloqueo en la aplicación del estado de Shared Catalog provocado por un commit fallido de MV. (Nikolay Degterinsky).
  • Corrige la comprobación de restricciones de configuración en ALTERs sobre réplicas secundarias con Shared Catalog. (Nikolay Degterinsky).
  • Conservar el comentario de la base de datos durante la migración de SharedCatalog. (Alexander Tokmakov).
  • Se corrigió un problema por el que se reemplazaban vistas materializadas en réplicas secundarias de Shared Catalog. (Nikolay Degterinsky).
  • Se corrigieron los contadores de system.distributed&#95;cache&#95;usage. (Kseniia Sumarokova).
  • Corrige el DROP bloqueado de una tabla que no pudo crearse debido a una excepción ILLEGAL_COLUMN en Shared Catalog. (Nikolay Degterinsky).
  • Deshabilitar CREATE OR REPLACE para SharedSet/SharedJoin en bases de datos Replicated. (Tuan Pham Anh).
  • Se solucionan las excepciones UNFINISHED en las actualizaciones de RMV con la base de datos Shared. (Nikolay Degterinsky).
  • Se corrige un cierre inesperado con TABLE_ALREADY_EXISTS en bases de datos Shared. (Nikolay Degterinsky).
  • Se corrige la migración de tablas con consultas CREATE defectuosas en el Shared Catalog. (Nikolay Degterinsky).
  • Usa siempre partes virtuales en memoria en getStatus. (Mikhail Artemenko).
  • Se añaden reintentos a la aplicación del estado del catálogo compartido durante el inicio. (Nikolay Degterinsky).
  • Corrección del problema por el que DROP DATABASE se quedaba bloqueado tras una excepción durante la creación de la tabla. (Nikolay Degterinsky).
  • Corrige un error lógico en la caché distribuida. (Kseniia Sumarokova).
  • Se corrige un mensaje de error incorrecto en la caché distribuida. (Kseniia Sumarokova).
  • Se corrigió LOGICAL_ERROR en ~TemporaryLockForUUIDDirectory de Shared Catalog. (Nikolay Degterinsky).
  • Se corrigió la caché de metadatos, que devolvía dependencias incorrectas después de cambiar el nombre de una base de datos. (Nikolay Degterinsky).
  • Shared Catalog: Soluciona un caso de DROP de tablas grandes en réplicas secundarias. (Raúl Marín).
  • Distributed cache corrige un error lógico en processWriteRequest. (Kseniia Sumarokova).
  • Eliminar las comprobaciones de los ALTER de MV en réplicas secundarias. (Nikolay Degterinsky).
Última modificación el 10 de junio de 2026