Saltar al contenido principal

Cambios incompatibles con versiones anteriores

Cambios en las consultas y la sintaxis

  • Se corrigió el formato inconsistente de las consultas causado por una sustitución incorrecta de alias. Nota: cuando el analyzer está deshabilitado, es posible que ciertas consultas CREATE VIEW que usan IN con una referencia a un alias dejen de procesarse. Para evitarlo, asegúrese de que el analyzer esté habilitado (está habilitado de forma predeterminada desde la versión 24.3). #82838 (Alexey Milovidov).
  • Una lista vacía de columnas en JOIN USING () ahora es un error de sintaxis. Anteriormente, esto se notificaba como INVALID_JOIN_ON_EXPRESSION durante la ejecución de la consulta y, en algunos casos (como al hacer join con el almacenamiento Join), podía provocar un LOGICAL_ERROR. #92371 (Vladimir Cherkasov).
  • Las subconsultas ya no se permiten en ORDER BY ni en otras expresiones clave de tabla. #96847 (Alexey Milovidov).

Cambios en los tipos de datos

  • Se añadió compatibilidad con Nullable(Tuple). Para habilitarla, establezca allow_experimental_nullable_tuple_type = 1. #89643 (Nihal Z. Miaji).
  • Los datos compartidos avanzados para el tipo JSON ahora están habilitados de forma predeterminada. No será posible volver a versiones anteriores a la 25.8, ya que esas versiones no pueden leer partes de datos escritas con el nuevo formato JSON. Para realizar actualizaciones seguras, establezca la configuración compatibility en la versión anterior, o configure las opciones de MergeTree dynamic_serialization_version='v2' y object_serialization_version='v2'. #92511 (Pavel Kruglov).
  • SKIP REGEXP en el tipo JSON ahora usa coincidencias parciales de forma predeterminada. #92847 (Pavel Kruglov).
  • Se corrigió un error lógico que se producía cuando había una incompatibilidad de tipos en Variant. #95811 (Bharat Nallan).
  • Las columnas DATE de PostgreSQL ahora se infieren como Date32 en ClickHouse (anteriormente se inferían como Date, lo que podía provocar un desbordamiento en valores fuera de su rango limitado). Ahora también se admite insertar valores Date32 de nuevo en PostgreSQL. #95999 (Alexey Milovidov).

Cambios en almacenamiento e índices

  • Se mejoró la estructura de almacenamiento del índice de texto invertido para hacer más eficientes las lecturas desde el almacenamiento de objetos, junto con un mejor rendimiento de merge en tablas con índices de texto invertido. Si usó el índice de texto experimental antes de la versión 25.12, debe eliminarlo antes de actualizar y volver a crearlo en la nueva versión. #91518 (Anton Popov).
  • El formato de almacenamiento de las estadísticas ha cambiado: ahora todas las estadísticas se almacenan en un único archivo. #93414 (Anton Popov).
  • Ahora se aplican secuencias de escape a los nombres de archivo de los índices para evitar partes dañadas. ClickHouse no podrá cargar índices con caracteres no ASCII en el nombre creados por versiones anteriores. Para ello, use la configuración de MergeTree escape_index_filenames. #94079 (Raúl Marín).

Características eliminadas

  • Se han eliminado los códecs DEFLATE_QPL y ZSTD_QAT. Convierta cualquier dato existente comprimido con estos códecs a otro códec antes de actualizar. Tenga en cuenta que, anteriormente, para usar estos códecs era necesario habilitar enable_deflate_qpl_codec o enable_zstd_qat_codec. #92150 (Robert Schulze).
  • Ya no se admite INSERT en columnas ALIAS simples (revierte #84154). Esta característica no funcionaba con formatos personalizados y no estaba controlada por ningún ajuste. #92849 (Azat Khuzhin).
  • El motor de base de datos Lazy se ha eliminado y ya no está disponible. #93627 (Alexey Milovidov).
  • El modo transposed_with_wide_view de metric_log se ha eliminado debido a un error que lo hacía inutilizable. Ya no es posible definir system.metric_log con este modo. #93867 (Alexey Milovidov).

Cambios en los ajustes y la configuración

  • Un nuevo ajuste ahora genera un error si un catálogo de lago de datos no tiene acceso al almacenamiento de objetos. #93606 (Konstantin Vedernikov).
  • La planificación de CPU para las cargas de trabajo ahora es expropiativa de forma predeterminada. Consulte la configuración del servidor cpu_slot_preemption. #94060 (Sergei Trifonov).
  • Los ajustes exact_rows_before_limit, rows_before_aggregation, cross_to_inner_join_rewrite, regexp_dict_allow_hyperscan, regexp_dict_flag_case_insensitive, regexp_dict_flag_dotall y dictionary_use_async_executor se han reclasificado de ajustes de formato a ajustes normales. Se trata principalmente de un cambio interno sin efectos visibles para el usuario, a menos que haya especificado alguno de ellos en una definición de motor de tabla de Iceberg, DeltaLake, Kafka, S3, S3Queue, Azure, Hive, RabbitMQ, Set, FileLog o NATS; en ese caso, esas definiciones ahora generarán un error en lugar de ignorarlas silenciosamente. #94106 (Robert Schulze).
  • La semántica de do_not_merge_across_partitions_select_final se ha simplificado. Anteriormente, la funcionalidad podía habilitarse automáticamente incluso cuando no se establecía explícitamente, lo que causaba confusión y problemas en producción. Ahora: establecerlo en 1 habilita la funcionalidad de forma incondicional, y establecerlo en 0 remite al nuevo ajuste enable_automatic_decision_for_merging_across_partitions_for_final (valor predeterminado: 1). #96110 (Nikita Taranov).
  • Se añadió la validación de esquema para S3. #96194 (Konstantin Vedernikov).
  • El ajuste apply_row_policy_after_final ahora está habilitado de forma predeterminada, lo que garantiza que ROW POLICY respete FINAL, como hacía originalmente. Si antes dependía de optimize_move_to_prewhere_if_final=1 para aplicar políticas de fila antes de FINAL, use apply_row_policy_after_final=0 en su lugar. #97279 (Nikolai Kochetov).

Cambios de seguridad y control de acceso

  • joinGet/joinGetOrNull ahora aplican los privilegios SELECT sobre la tabla Join subyacente. Ejecutar joinGet('db.table', 'column', key) requiere el privilegio SELECT tanto en las columnas clave como en la columna de atributo que se recupera. Las consultas sin estos privilegios fallarán con ACCESS_DENIED. Para migrar, otorgue permisos mediante GRANT SELECT ON db.join_table TO user para obtener acceso completo a la tabla, o GRANT SELECT(key_col, attr_col) ON db.join_table TO user para acceso a nivel de columna. #94307 (Vladimir Cherkasov).
  • Las consultas CREATE TABLE ... AS ... ahora requieren el privilegio SHOW COLUMNS en lugar de SHOW TABLES, que antes se comprobaba de forma incorrecta. #94556 (pufit).

Cambios en inserts y deduplicación

  • La deduplicación ahora está habilitada de forma predeterminada para todos los inserts. Antes estaba desactivada para los async inserts y las vistas materializadas, pero activada para los sync inserts. Para conservar el comportamiento anterior, establezca explícitamente deduplicate_insert='backward_compatible_choice' (y, de forma análoga, deduplicate_blocks_in_dependent_materialized_views). #95970 (Sema Checherinda).

Cambios en las tablas del sistema

  • Los metadatos en memoria de S3Queue y AzureQueue ahora son limitados. Las tablas del sistema se han renombrado: system.s3queue ahora es system.s3queue_metadata_cache y system.azure_queue ahora es system.azure_queue_metadata_cache. #95809 (Kseniia Sumarokova).

Otros cambios incompatibles

  • Se corrigieron las funciones del índice H3 que podían fallar o quedarse bloqueadas al llamarse con entradas no válidas. #93657 (Michael Kolupaev).

Nuevas características

Autenticación

  • Se añadió compatibilidad con contraseñas de un solo uso basadas en el tiempo (TOTP) como método de autenticación. #71273 (Vladimir Cherkasov).

Funciones

  • Se añadió la función reverseBySeparator, que invierte el orden de las subcadenas de una cadena separadas por un separador especificado. #91780 (Xuewei Wang).
  • Se añadieron las funciones colorOKLABToSRGB y colorSRGBToOKLAB para convertir entre los espacios de color sRGB y OKLAB. #93361 (Pranav Tiwari).
  • Se añadió la función cosineDistanceTransposed, que aproxima la distancia de coseno entre dos puntos. #93621 (Raufs Dunamalijevs).
  • Se añadió la función hash xxh3_128. #96055 (Raúl Marín).
  • Se añadió la función mergeTreeAnalyzeIndex() para analizar el uso de índices en MergeTree. #92954 (Azat Khuzhin).
  • Las funciones ahora admiten el tipo Variant mediante el nuevo FunctionVariantAdaptor. #90900 (Bharat Nallan).
  • Ahora, ciertas funciones pueden llamarse sin paréntesis en SQL. #94678 (Aly Kafoury).

Tablas del sistema

  • Se añadió la tabla system.user_defined_functions para supervisar el estado de carga y la configuración de las UDF. #90340 (Xu Jia).
  • Se añadió la tabla system.zookeeper_info. #90809 (Smita Kulkarni).
  • Se añadieron la tabla system.primes y la función de tabla primes, que contiene números primos en orden ascendente. #92776 (Nihal Z. Miaji).
  • Se añadió la columna files a system.parts, que muestra el número de archivos en cada parte de datos. #94337 (Match).
  • Se añadió la tabla system.fail_points para inspeccionar los failpoints existentes y comprobar si están habilitados. #96762 (Pedro Ferreira).

Motores de tabla y almacenamiento

  • Se añadió compatibilidad con índices de texto para columnas Array. #89895 (Jimmy Aguilar Mena).
  • Se añadió compatibilidad con el catálogo REST de Paimon. #92011 (JIaQi Tang).
  • Se añadió la función de tabla icebergLocalCluster. #93323 (Anton Ivashkin).
  • Se añadió la configuración de base de datos lazy_load_tables. Cuando está habilitada, las tablas no se cargan durante el inicio de la base de datos; en su lugar, se crea un StorageTableProxy ligero y el motor de tabla real se materializa en el primer acceso. #96283 (xiaohuanlin).
  • Se añadió compatibilidad con ZooKeeper auxiliar para DatabaseReplicated. #91683 (RinChanNOW).
  • Los archivos de datos y del sistema en caché ahora pueden dividirse en segmentos separados. #87834 (MikhailBurdukov).
  • Se añadió una nueva caché SLRU para los metadatos de Parquet para mejorar el rendimiento de lectura al evitar descargas redundantes de archivos. La caché puede eliminarse con SYSTEM DROP PARQUET METADATA CACHE. #89750 (Grant Holly).
  • Las tablas de lago de datos ahora admiten PREWHERE y PREWHERE multietapa en el lector de Parquet v3. #93542 (Konstantin Vedernikov).
  • Se añadió análisis distribuido de índices entre múltiples réplicas, beneficioso para el almacenamiento compartido y los grandes volúmenes de datos. #86786 (Azat Khuzhin).

Inserción y deduplicación

  • La deduplicación de async insert ahora funciona con vistas materializadas dependientes. Cuando se produce una colisión de block_id, se filtra el bloque original para eliminar las filas asociadas al block_id en conflicto, y las filas restantes se transforman mediante todas las consultas relevantes de las vistas materializadas. #89140 (Sema Checherinda).
  • Los async inserts ahora admiten quorum paralelo: los datos insertados se replican al quorum y, si se encuentran duplicados, la consulta espera hasta que los datos insertados previamente también se hayan replicado. #93356 (Sema Checherinda).
  • Se añadió la configuración del servidor insert_deduplication_version para habilitar la migración a un hash de deduplicación unificado. #95409 (Sema Checherinda).
  • Se inició la migración de los hash de deduplicación. #97562 (Sema Checherinda).

SQL y funciones de consulta

  • Se añadió la sintaxis SYSTEM CLEAR [...] CACHE como una alternativa más clara a la ya existente SYSTEM DROP [...] CACHE. La sintaxis anterior sigue estando disponible. #93727 (Pranav Tiwari).
  • Se añadió la consulta OPTIMIZE <table> DRY RUN PARTS <part names> para simular fusiones sin hacer commit de la parte resultante. Es útil para verificar la corrección de la fusión, reproducir errores relacionados con las fusiones y medir su rendimiento. #96122 (Anton Popov).
  • Las consultas DDL con ON CLUSTER ahora pueden ejecutarse en bases de datos Replicated cuando está habilitada la configuración ignore_on_cluster_for_replicated_database. Se ignorará el nombre del clúster. #92872 (Kirill).
  • Se introdujeron una nueva sintaxis y una nueva infraestructura para simplificar y ampliar la funcionalidad de índices de proyección. #91844 (Amos Bird).

Ajustes y configuración

  • Se añadió el ajuste max_insert_block_size_bytes para un control más preciso de la formación de bloques insertados. #92833 (Kirill Kopnev).
  • Se añadió el ajuste use_primary_key. Establézcalo en false para desactivar la poda de gránulos basada en la clave primaria. #93319 (Nihal Z. Miaji).
  • Se añadió el ajuste default_dictionary_database, que permite a ClickHouse resolver diccionarios externos referenciados sin un calificador de base de datos en una base de datos predeterminada especificada. Esto simplifica la migración de diccionarios globales definidos en XML a diccionarios por base de datos definidos en SQL. #91412 (Dmitrii Plotnikov).
  • Se añadió el ajuste check_named_collection_dependencies (habilitado de forma predeterminada) para evitar eliminar colecciones con nombre utilizadas por tablas. #96181 (Pablo Marcos).
  • Se añadió un planificador justo max-min para el control de concurrencia, que ofrece un reparto más equitativo en situaciones de alta sobresuscripción, cuando muchas consultas compiten por slots de CPU limitados. El ajuste del servidor concurrent_threads_scheduler ahora usa max_min_fair de forma predeterminada en lugar de fair_round_robin, por lo que las consultas de corta duración ya no se ven penalizadas por las de larga duración. #94732 #95300 (Sergei Trifonov).
  • Se añadieron las opciones de configuración logger.startup_console_level y logger.shutdown_console_level para ajustar temporalmente el nivel de registro de la consola durante el inicio y el apagado de ClickHouse, respectivamente. #95919 (Garrett Thomas).

Monitoreo

  • Se añadió una métrica ClickHouse_Info al endpoint /metrics de Prometheus con información sobre la versión, lo que permite crear gráficos para seguir información detallada de la versión a lo largo del tiempo. #91125 (Christoph Wurm).

Características experimentales

  • La búsqueda vectorial ahora puede distribuir la carga entre réplicas en un clúster, lo que permite admitir índices vectoriales de gran tamaño que superan la capacidad de memoria de una sola VM. #95876 (Shankar Iyer).
  • Se añadió un AST fuzzer en el servidor, controlado por los ajustes ast_fuzzer_runs y ast_fuzzer_any_query. Cuando está habilitado, el servidor ejecuta mutaciones aleatorias de cada consulta tras su ejecución normal y descarta los resultados. #97568 (Alexey Milovidov).

Mejoras

Consultas y SQL

  • Las subconsultas correlacionadas ahora admiten más motores de tabla y más tipos de fuentes de datos. #90175 (Dmitry Novik).
  • Ahora se admiten expresiones IN no constantes para escalares (p. ej., val1 NOT IN if(cond, val2, val3)). #93495 (Yarik Briukhovetskyi).
  • Se añadió compatibilidad con alias de tabla extendidos para JOINs (p. ej., SELECT * FROM (SELECT 1) AS t(a) JOIN (SELECT 1) AS u(b) ON a = b). #95331 (Yarik Briukhovetskyi).
  • EXPLAIN indices = 1 ahora se admite como alias de EXPLAIN indexes = 1. #92774 (Pranav Tiwari).
  • Se ha mejorado el pushdown de filtros para las funciones de tabla numbers y primes: ClickHouse ahora puede inferir límites de valor conservadores a partir de las condiciones WHERE para restringir la generación de secuencias y evitar escaneos sin límites. #96115 (Nihal Z. Miaji).
  • La optimización de conjuntos equivalentes ahora funciona a través de múltiples operaciones consecutivas de INNER JOIN, por lo que los filtros aplicados a cualquier tabla de la cadena se propagan automáticamente a todas las tablas relacionadas. #96596 (Vladimir Cherkasov).
  • Ahora se usan funciones de tabla de clúster automáticas para subconsultas individuales en FROM. #96332 (phulv94).
  • El índice de clave primaria ahora se utiliza al filtrar con startsWithUTF8 si el prefijo contiene únicamente caracteres ASCII. #97055 (vkcku).
  • assumeNotNull, coalesce e ifNull ahora permiten la poda de la clave primaria y del skip index para predicados de rango cuando las columnas clave están encapsuladas en estas funciones. #94754 (Nihal Z. Miaji).
  • Las columnas no utilizadas ahora también se eliminan del paso de lectura al leer desde MergeTree, lo que resulta especialmente útil cuando un filtro se inserta en PREWHERE. #89982 (János Benjamin Antal).
  • La optimización use_join_disjunctions_push_down ahora está habilitada por defecto. #89313 (Alexey Milovidov).
  • La optimización enable_join_runtime_filters ahora está activada de forma predeterminada. #89314 (Alexey Milovidov).
  • La sobrecarga del runtime filter de JOIN se reduce ahora al deshabilitar automáticamente los filtros cuando hay demasiados bits activados en el bloom filter o se filtran muy pocas filas. #91578 (Alexander Gololobov).
  • Se añadió la configuración use_hash_table_stats_for_join_reordering (habilitada de forma predeterminada) para controlar si se utilizan estadísticas del tamaño de la tabla hash en tiempo de ejecución para la reordenación de joins. #93912 (Vladimir Cherkasov).
  • El análisis de índices ahora se realiza una sola vez, independientemente de si la consulta se ejecuta localmente o con réplicas paralelas. #94854 (Nikita Taranov).
  • Si un índice de omisión en una consulta FINAL está sobre una columna que forma parte de la clave primaria, ahora se omite la comprobación adicional de intersección de la clave primaria en otras partes. #93899 (Shankar Iyer).
  • DROP DATABASE ahora elimina las tablas en el orden inverso de sus dependencias, lo que mejora la resistencia a fallos cuando la base de datos contiene tablas con dependencias de carga. #97057 (Alexey Milovidov).
  • La espera síncrona de las mutaciones ahora tiene en cuenta la cancelación de consultas y los límites de tiempo. #96756 (Alexey Milovidov).
  • Se evitó que reaparecieran datos eliminados si ADD COLUMN se ejecuta rápidamente después de una mutación DROP COLUMN. #96713 (Alexey Milovidov).
  • Las expresiones ALTER en conflicto con UPDATE y RENAME COLUMN ahora lanzan una excepción correcta en lugar de un error lógico. #96022 (Alexey Milovidov).
  • Ahora se recopilan estadísticas del número total estimado de filas y del NDV (número de valores distintos) para las columnas clave de agregación. #92812 (Alexander Gololobov).
  • Todas las réplicas ahora pueden apropiarse de rangos huérfanos durante la lectura con réplicas en paralelo, lo que mejora el balanceo de carga y reduce la latencia de cola. #91374 (zoomxi).
  • Mejora de la precisión de la estimación para las réplicas paralelas automáticas con filtros PREWHERE muy selectivos. #97231 (Nikita Taranov).
  • joinGet ahora admite tablas temporales. #92973 (Eduard Karacharov).
  • La agregación externa, la ordenación y el join ahora tienen en cuenta la configuración de consulta temporary_files_codec en todos los contextos. #92388 (Vladimir Cherkasov).
  • Las optimizaciones del plan de búsqueda por similitud vectorial ahora solo se aplican cuando existe un índice para la columna de búsqueda. #94998 (Eduard Karacharov).

Motores de tabla y almacenamiento

  • StorageEmbeddedRocksDB ahora admite varias columnas como clave primaria. #33917 (usurai).
  • Se añadió la sintaxis ALTER TABLE <table> ATTACH PART <part_name> FROM <directory_name>, que permite adjuntar partes desde subdirectorios arbitrarios de detached/ (p. ej., partes con prefijos broken-on-start o unexpected) sin tener que renombrarlas manualmente en el sistema de archivos. #74816 (Anton Popov).
  • min_free_disk_bytes_to_perform_insert ahora funciona correctamente con volúmenes JBOD. #90878 (Aleksandr Musorin).
  • max_parts_to_merge_at_once ahora se respeta durante las fusiones de eliminación de partes por TTL. #95315 (Kseniia Sumarokova).
  • Las operaciones en segundo plano (mutación, fusión) ahora pueden configurarse de forma independiente mediante un perfil background, en lugar de compartir la configuración con las consultas normales a través del perfil default. #93905 (Arsen Muk).
  • Se mejoró la lectura de subcolumnas con un cálculo correcto del tamaño, lo que reduce el uso de memoria y mejora la velocidad. #96251 (Pavel Kruglov).
  • Se limitó el número de flujos del pipeline generados con split_intersecting_parts_ranges_into_layers para evitar un consumo excesivo de memoria. #96478 (Nikita Taranov).
  • El índice de texto ahora es GA. #96794 (Robert Schulze).
  • QBit ahora es GA. #95358 (Raufs Dunamalijevs).
  • QBit ahora admite comparaciones de igualdad. #94078 (Raufs Dunamalijevs).
  • Al guardar el esquema de la tabla con enable_positional_arguments_for_projections, ahora se sustituyen las expresiones en lugar de los argumentos posicionales, lo que permite reiniciar el servidor con la configuración deshabilitada. #96372 (Alexey Milovidov).
  • En las bases de datos Replicated, el clúster en caché ya no se actualiza con cada consulta ficticia. #96897 (Tuan Pham Anh).
  • Se añadió la consulta SYSTEM RESET DDL WORKER [ON CLUSTER] para restablecer el estado de DDLWorker, útil para refrescar la actividad de las réplicas cuando se actualizan los ID de host. #93780 (Tuan Pham Anh).

Lagos de datos

  • Se añadió compatibilidad con vectores de eliminación en DeltaLake. #93852 (Kseniia Sumarokova).
  • Ahora los vectores de eliminación también son compatibles con deltaLakeCluster. #94365 (Kseniia Sumarokova).
  • DeltaLake ya está disponible en macOS. #95985 (Alexey Milovidov).
  • DeltaLake ahora obtiene los resultados de count() de los metadatos y muestra estadísticas correctas de la tabla (total de bytes/filas) en system.tables. #96190 (Kseniia Sumarokova).
  • Se omitieron lecturas de almacenamiento de objetos al consultar tablas DeltaLake desde system.tables. #95899 (Antonio Andelic).
  • Se añadió el comando SYSTEM RELOAD DELTA KERNEL TRACING <level> para depurar el registro de delta-kernel. #96763 (Kseniia Sumarokova).
  • La ubicación de los metadatos de la tabla Iceberg ahora se deduce automáticamente si metadata_location no se especifica en los metadatos de Glue. #91994 (Andrey Zvonov).
  • Las entradas del archivo manifest de Iceberg ahora analizan los límites inferior y superior de los nombres de archivos de eliminación por posición, lo que mejora la selección de archivos de datos. #93980 (Daniil Ivanik).
  • Se habilitó la optimización PREWHERE para tablas Iceberg. #95476 (Konstantin Vedernikov).
  • Los límites de hilos y memoria ahora se comparten entre los lectores de archivos de datos y de archivos de eliminación por posición en las tablas Iceberg. #94701 (Yang Jiang).
  • Se añadió compatibilidad con ALTER TABLE RENAME COLUMN para tablas Iceberg. #97455 (murphy-4o).
  • Se añadió compatibilidad con Google Cloud Storage para lagos de datos. #93866 (Konstantin Vedernikov).
  • Los tokens de acceso de S3 ahora se renuevan dinámicamente durante consultas largas con Unity Catalog. #95069 (Konstantin Vedernikov).
  • Se añadió acceso basado en roles a Glue catalog mediante los ajustes aws_role_arn y aws_role_session_name. #90825 (Antonio Andelic).

S3Queue

  • S3Queue ahora realiza un seguimiento del particionamiento de Hive en modo ordenado. #81040 (Anton Ivashkin).
  • Se refactorizó el procesamiento en modo ordenado de S3Queue con buckets, lo que reduce el número de solicitudes a Keeper y mejora el rendimiento. #92889 (Kseniia Sumarokova).
  • Se añadió soporte para un particionamiento más genérico en el modo ordenado de S3Queue. #94321 (Bharat Nallan).
  • Se añadió bucketing basado en la clave de partición para S3Queue en modo ordenado. #94698 (Bharat Nallan).
  • Compatibilidad de S3Queue con ZooKeeper auxiliar mediante la configuración keeper_path. #95203 (Diego Nieto).
  • El modo ordenado de S3(Azure)Queue ahora limpia los nodos fallidos mediante el seguimiento de límites. #94412 (Kseniia Sumarokova).

S3 y almacenamiento de objetos

  • Las cabeceras S3 x-amz-server-side-encryption ya no se propagan a las solicitudes HeadObject, UploadPart y CompleteMultipartUpload. #64577 (Francisco J. Jurado Moreno).
  • Ahora se puede especificar storage_class_name en las colecciones con nombre para el motor de tabla S3 y la función de tabla s3. #91926 (János Benjamin Antal).
  • Se corrigió la limitación de tasa en el endpoint de metadatos de EC2 al ejecutar muchas consultas S3 simultáneas con credenciales de perfil de instancia: ahora el proveedor de credenciales se almacena en caché y se comparte entre todas las consultas. #92891 (Sav).
  • Se añadió compatibilidad con MinIO al SDK de AWS S3 para C++, con correspondencia de códigos de error para errores específicos de MinIO, lo que mejora la fiabilidad de los clústeres de MinIO autogestionados. #93082 (XiaoBinMu).
  • Se mejoraron los mensajes de error de autenticación de S3 con sugerencias para comprobar las credenciales. #95648 (Gerald Latkovic).
  • Azure Blob Storage ahora recurre a una copia en modo lectura-escritura cuando la copia nativa falla con cualquier error (antes, solo con Unauthorized). #92888 (Smita Kulkarni).

Funciones

  • avg() ahora admite valores Date, DateTime y Time como argumentos. #87845 (Yarik Briukhovetskyi).
  • mapContainsKeyLike y mapContainsValueLike ahora pueden usar un índice de texto en mapKeys() o mapValues(). #93049 (Michael Jarrett).
  • flipCoordinates ahora admite el tipo Geometry. #93303 (Bharat Nallan).
  • Se eliminó el límite de 64 tokens para las funciones hasAnyTokens y hasAllTokens. #95152 (Elmi Ahmadov).
  • Se añadió distanceCosine como alias de cosineDistance, en línea con otras funciones de distancia. #96065 (Raufs Dunamalijevs).
  • Se añadió la función iif a ClickHouse KQL. #94790 (happyso).
  • use_variant_as_common_type ahora está habilitado de forma predeterminada, lo que permite usar tipos incompatibles dentro de Array, consultas UNION y ramas if/multiIf/case. #90677 (Alexey Milovidov).

Configuración y ajustes

  • use_skip_indexes_on_data_read ahora está activado de forma predeterminada. #93407 (Shankar Iyer).
  • Se añadió la configuración add_minmax_index_for_time_columns: al estar habilitada, crea automáticamente índices minmax para todas las columnas Date, Date32, Time, Time64, DateTime y DateTime64. #93355 (Michael Jarrett).
  • Se agregó la configuración materialize_statistics_on_merge (habilitada de forma predeterminada) para controlar si las estadísticas se materializan durante las fusiones. #93379 (Han Fei).
  • Se agregó la configuración input_format_binary_max_type_complexity para limitar la cantidad total de nodos de tipos que pueden decodificarse en formato binario, evitando payloads maliciosos. #92519 (Raufs Dunamalijevs).
  • Se añadió la configuración trace_profile_events_list para limitar el trazado con trace_profile_event a determinados nombres de evento. #92298 (Alexey Milovidov).
  • Se añadió la configuración type_json_allow_duplicated_key_with_literal_and_nested_object para permitir rutas duplicadas en JSON en las que una es un literal y otra, un objeto anidado, por compatibilidad con datos creados antes de que se aplicara la deduplicación de rutas. #93604 (Pavel Kruglov).
  • Se añadieron el ajuste de MergeTree merge_max_dynamic_subcolumns_in_compact_part y el ajuste a nivel de consulta max_dynamic_subcolumns_in_json_type_parsing para limitar las subcolumnas dinámicas en las columnas JSON durante la fusión y el análisis. #94184 (Pavel Kruglov).
  • Se añadió use_statistics como alias de allow_statistics_optimize, en línea con use_primary_key y use_skip_indexes. #94366 (Robert Schulze).
  • Se habilitó input_format_numbers_enum_on_conversion_error en la conversión de números a Enum para comprobar la existencia del elemento. #94384 (Elmi Ahmadov).
  • Se añadió un ajuste para generar una excepción cuando una tabla tiene políticas de filas pero ninguna se aplica al usuario actual, con el fin de detectar posibles errores de configuración. #95014 (Vitaly Baranov).
  • enable_max_bytes_limit_for_min_age_to_force_merge ahora viene habilitado de forma predeterminada para la versión de compatibilidad 26.2 y posteriores. #95917 (Christoph Wurm).
  • core_dump.size_limit ahora se puede recargar en caliente sin reiniciar el servidor. #96524 (Miсhael Stetsyuk).
  • Ahora se respetan las sobrescrituras desde la línea de comandos al recargar la configuración. #80295 (Alexey Milovidov).
  • Se añadió una estrategia de rotación combinada (tamaño + tiempo) para los logs del servidor. #87620 (Jianmei Zhang).
  • Ahora, el análisis distribuido de índices puede habilitarse según el número de partes (distributed_index_analysis_min_parts_to_activate) y el tamaño de los índices (distributed_index_analysis_min_indexes_size_to_activate). #95216 (Azat Khuzhin).
  • La caché de estadísticas ahora está habilitada de forma predeterminada, con un intervalo de actualización de 300 segundos. #95841 (Han Fei).
  • El parámetro de configuración path ahora se resuelve en relación con el directorio de trabajo al iniciarse, lo que evita que los directorios de datos se ubiquen en ubicaciones inusuales. #96305 (Alexey Milovidov).

Tablas del sistema y monitorización

  • Se añadió la columna parts_postpone_reasons a system.mutations para mejorar el diagnóstico. #92206 (Shaohua Wang).
  • Se añadió la columna creation (implicit/explicit) a system.data_skipping_indices. #92378 (Raúl Marín).
  • Las tareas en ejecución ahora se reflejan en system.background_schedule_pool y en la tabla de log correspondiente. #92587 (Azat Khuzhin).
  • Se añadió la métrica QueryNonInternal para hacer un seguimiento del número de consultas no internas en ejecución, lo que ayuda a supervisar la concurrencia con respecto al límite max_concurrent_queries. #94284 (Ashwath Singh).
  • Se añadió una métrica asíncrona para el tiempo transcurrido de la fusión en ejecución más larga. #94825 (Raúl Marín).
  • Se añadieron connection_address y connection_port a query_log para reflejar la conexión física (útil cuando se conecta a través de un proxy). #95471 (Yakov Olkhovskiy).
  • Se añadió más información a system.crash_log. #94112 (Miсhael Stetsyuk).
  • Se añadió el nombre del componente a system.aggregated_zookeeper_log. #95882 (Antonio Andelic).
  • Se añadió la tabla system.tokenizers, que muestra todos los tokenizadores disponibles. #96753 (Robert Schulze).
  • Se añadieron la tabla system.jemalloc_stats y el endpoint HTTP /jemalloc.html para la visualización interactiva de las estadísticas del asignador de memoria jemalloc. #97077 (Antonio Andelic).
  • Se añadió la tabla system.jemalloc_profile_text para leer y analizar perfiles de heap de jemalloc, con soporte para formatos de salida raw, simbolizados y collapsed. #97218 (Antonio Andelic).
  • Se añadió mutation_ids a system.part_log para los eventos MUTATE_PART y MUTATE_PART_START. #93811 (Shaohua Wang).
  • Las configuraciones globales anidadas del servidor (por ejemplo, logger.level) ahora son parcialmente visibles en system.server_settings. #94001 (Hechem Selmi).
  • view_duration_ms ahora muestra el tiempo durante el que un grupo estuvo activo, en lugar de la suma de las duraciones de los hilos. #94966 (Sema Checherinda).
  • system.blob_storage_log ahora está disponible para Azure Blob Storage, Local y HDFS. Se añadió la columna error_code. #93105 (Alexey Milovidov).
  • Las tareas en segundo plano más lentas que la media ahora se registran con un umbral configurable (background_schedule_pool_log.duration_threshold_milliseconds, 30 ms por defecto). #92965 (Azat Khuzhin).
  • Las contraseñas del almacenamiento URL ya no se muestran en el log de consultas. #93245 (Konstantin Vedernikov).

ClickHouse Keeper

  • Maneja correctamente los huecos en las entradas del log de Keeper si los logs están antes del último índice confirmado. #90403 (Antonio Andelic).
  • Se añadió trazabilidad de OpenTelemetry para las solicitudes de Keeper. #91332 (Miсhael Stetsyuk).
  • Se añadieron nuevas métricas de Keeper: KeeperChangelogWrittenBytes, KeeperChangelogFileSyncMicroseconds, KeeperSnapshotWrittenBytes, KeeperSnapshotFileSyncMicroseconds, KeeperBatchSizeElements y KeeperBatchSizeBytes. #92149 (Miсhael Stetsyuk).
  • Las extensiones de Keeper CHECK_STAT y TRY_REMOVE ahora están habilitadas de forma predeterminada. #93886 (Mikhail Artemenko).
  • Keeper ahora lanza una excepción en lugar de abortar cuando detecta una instantánea dañada o changelogs incoherentes, lo que requiere intervención manual para una recuperación más segura. #94168 (Antonio Andelic).
  • Se añadieron las extensiones with_data y with_stat a las solicitudes getChildren de Keeper, lo que permite obtener los nodos hijo junto con sus datos y estadísticas en una sola operación. #94826 (Nikolay Degterinsky).
  • Se añadió una comprobación para detectar una configuración incorrecta de Keeper que podría provocar fallos en el ensamblaje del clúster. #94682 (Konstantin Bogdanov).
  • Se añadió compatibilidad con la extensión with_data de Keeper para mejorar la obtención de tablas en Database Replicated. #96090 (Nikolay Degterinsky).
  • Ahora se pueden hacer inserciones en ZooKeeper auxiliar mediante system.zookeeper. #92092 (RinChanNOW).

Gestión de memoria

  • Se optimizó la reserva de espacio de la caché del sistema de archivos: los candidatos a expulsión ahora se recopilan sin mantener un bloqueo exclusivo. #82764 (Kseniia Sumarokova).
  • Se habilitaron lecturas en paralelo en el búfer de lectura de la caché del sistema de archivos para motores de tabla y funciones remotos. #71781 (Kseniia Sumarokova).
  • Se redujo el uso de memoria en sistemas no Linux al habilitar la purga inmediata de páginas sucias de jemalloc. #93360 (Eduard Karacharov).
  • La purga de páginas sucias de jemalloc ahora se ejecuta en un hilo separado del hilo principal de MemoryWorker. Se añadió la configuración memory_worker_purge_total_memory_threshold_ratio para purgar en función de la proporción de uso total de memoria. #94902 (Antonio Andelic).
  • El decaimiento de las páginas sucias de jemalloc ahora se desactiva dinámicamente cuando ClickHouse está sometido a una presión de memoria sostenida. #95145 (Antonio Andelic).
  • Se añadió una comprobación explícita del consumo de memoria antes de leer datos de MergeTree, con tamaños de cola del pool de hilos reducidos en función de la experiencia en producción. #94692 (Nikita Mikhaylov).
  • El límite total de memoria ahora se comprueba antes de la autenticación del usuario, y se lanza memory limit exceeded si se supera el límite. #95003 (Nikolai Kochetov).
  • Se corrigió una contabilización incorrecta de memoria en la caché de condiciones de la consulta. #95478 (Nikita Mikhaylov).
  • Se hizo más robusta la detección del uso de memoria de la consulta para el volcado a disco durante la agregación y la ordenación. #92500 (Azat Khuzhin).
  • El planificador ahora prioriza el hilo MemoryWorker en caso de inanición de CPU para proteger el proceso. #94864 (Nikita Mikhaylov).
  • Se corrigió un problema por el que ClickHouse no respetaba los límites de memoria en algunos casos al leer de una tabla. #93715 (Nikita Mikhaylov).

Formatos de datos

  • El lector de Parquet ahora permite leer columnas Tuple o Map como JSON. #92864 (Michael Kolupaev).
  • El lector de Parquet ahora admite tuplas vacías. #92868 (Michael Kolupaev).
  • El tipo Date ahora se serializa como el tipo nativo date32 de Arrow en los formatos Arrow/ArrowStream (anteriormente uint16). El comportamiento anterior se puede restaurar con la configuración output_format_arrow_date_as_uint16. #96860 (Alexey Milovidov).
  • El formato de salida Hash ahora es independiente del tamaño de los bloques. #94503 (Alexey Milovidov).
  • Los tipos simples en el formato Pretty JSON ya no se imprimen en líneas separadas. #93836 (Pavel Kruglov).
  • La inferencia de esquemas ahora respeta allow_experimental_nullable_tuple_type: cuando está habilitado, los objetos anidados ausentes pueden convertirse en NULL en lugar de en una tupla de elementos NULL. #95525 (Nihal Z. Miaji).
  • El formateador SQL ahora genera COMMENT antes de AS SELECT en lugar de poner SELECT entre paréntesis. #96293 (Alexey Milovidov).
  • Se optimizó la compresión de la lista de postings con simdcomp. #92871 (Peng Jian).

Copia de seguridad y restauración

  • Se añadió la configuración de copia de seguridad backup_data_from_refreshable_materialized_view_targets para controlar si se respaldan los datos de las vistas materializadas actualizables. Los destinos de las vistas materializadas actualizables con estrategia de actualización APPEND siempre se incluyen en la copia de seguridad. #93658 (Julia Kartseva).
  • Se añadió compatibilidad con colecciones con nombre definidas en SQL en BACKUP/RESTORE para S3 y Azure Blob Storage. #94605 (Pablo Marcos).

Colecciones con nombre y diccionarios

  • Ahora se permiten sobrescrituras de parámetros de colecciones con nombre en la table function de MongoDB. #89616 (vanchaklar).
  • Se habilitó el uso de colecciones con nombre para diccionarios y tablas de YTsaurus. #94582 (MikhailBurdukov).
  • Ahora se pueden pasar descripciones de columnas para fuentes de diccionario de tablas dinámicas de YTsaurus. #92391 (MikhailBurdukov).
  • Ahora se muestra el esquema de la vista parametrizada cuando se especifica de forma explícita. #90220 (Grigorii Sokolik).

Deduplicación

  • Se rediseñó el ajuste insert_select_deduplicate para añadir opciones de compatibilidad con versiones anteriores. #92951 (Sema Checherinda).
  • Ahora se permite la deduplicación con async inserts cuando intervienen vistas materializadas. #93957 (Sema Checherinda).

Otras mejoras

  • Se mejoró la experiencia de usuario de SYSTEM INSTRUMENT ADD/REMOVE: ahora se usan literales de cadena para los nombres de función, se parchean todas las funciones coincidentes y function_name es compatible con REMOVE. #93345 (Pablo Marcos).
  • Se añadió SYSTEM NOTIFY FAILPOINT para failpoints con pausa y SYSTEM WAIT FAILPOINT para PAUSE/RESUME. #92368 (Shaohua Wang).
  • Los nombres de las funciones de C++ en system.trace_log, system.symbols y la función demangle ahora se muestran correctamente. #93075 (Alexey Milovidov).
  • Los perfiles de jemalloc ahora se escriben con símbolos, lo que elimina la necesidad de un binario durante la generación del perfil de heap. #93099 (Azat Khuzhin).
  • Se corrigió un fallo al adjuntar una tabla a una base de datos MaterializedPostgreSQL si dropReplicationSlot lanza una excepción durante el desenrollado de la pila. #96871 (Alexey Milovidov).
  • Se corrigió la posible presencia de restos residuales cuando CREATE TABLE falla. #94174 (Azat Khuzhin).
  • Se corrigió el acceso a memoria no inicializada cuando se usa una clave privada TLS protegida con contraseña. #94182 (Konstantin Bogdanov).
  • Cuando alter table ... modify setting ... supera el tiempo de espera mientras adquiere un bloqueo, ahora devuelve un error de timeout en lugar de un error lógico. #93856 (Han Fei).
  • Se mejoró la interoperabilidad del profiler de CPU y en tiempo real con los timeouts del socket. #96601 (Sergei Trifonov).
  • Se habilitó el endurecimiento rápido de libcxx para los builds de release (principalmente comprobaciones de límites) sin impacto perceptible en el rendimiento. #94757 (Miсhael Stetsyuk).

Mejoras del rendimiento

Rendimiento de JOIN

  • Se aceleraron algunas operaciones de hash join mediante la implementación de despacho dinámico para ColumnVector::replicate. #79573 (Raúl Marín).
  • Ahora se hace pushdown de más filtros en los JOIN. #85556 (Nikita Taranov).
  • Se amplió el hacer pushdown de filtros desde las condiciones ON de JOIN para los joins ANY, SEMI y ANTI cuando el filtro usa entradas de un solo lado. #92584 (Dmitry Novik).
  • Ahora pueden usarse conjuntos equivalentes para hacer pushdown de filtros en SEMI JOIN. #92837 (Dmitry Novik).
  • Se paralelizó el procesamiento de filas no unidas en ParallelHashJoin para predicados complejos, controlado por la configuración parallel_non_joined_rows_processing (habilitada de forma predeterminada). #92068 (Yarik Briukhovetskyi).
  • Hash join ahora omite por completo la lectura del lado izquierdo cuando el lado derecho está vacío, lo que evita trabajo innecesario debido a filtros exigentes o agregación. #94062 (Alexander Gololobov).
  • Ahora se admiten JOIN runtime filters para los JOIN RIGHT OUTER. #96183 (Hechem Selmi).
  • La optimización de PREWHERE ahora se pospone hasta después de la optimización de JOIN runtime filter, lo que permite que los runtime filters también hagan pushdown a PREWHERE. #95838 (Alexander Gololobov).

Optimización de consultas

  • Se deshabilitó la optimización del orden de clasificación para las funciones de ventana cuando la clave de partición coincide con la clave de ordenación o es un prefijo de ella, lo que mejora el rendimiento de la ejecución en paralelo. #87299 (Nikita Taranov).
  • Ahora se hace pushdown de los filtros externos en las vistas, lo que permite aplicar PREWHERE tanto en nodos locales como remotos. #88316 (Igor Nikonov).
  • Se optimizaron el rendimiento y el uso de memoria de LIMIT y OFFSET fraccionarios. #91167 (Ahmed Gouda).
  • Los filtros constantes en columnas virtuales ya no se evalúan de forma redundante. #91588 (c-end).
  • Ahora puede usarse cualquier expresión determinista en la clave primaria (p. ej., ORDER BY cityHash64(user_id)) para la omisión de datos. ClickHouse aplica la expresión a las constantes de la consulta y usa el resultado para búsquedas en el índice de la clave primaria con =, IN y has. Para expresiones inyectivas, también se admiten formas negadas (!=, NOT IN, NOT has). #92952 (Nihal Z. Miaji).
  • La optimización de lectura en orden ahora reconoce cuándo las columnas de ORDER BY son constantes debido a las condiciones de WHERE, lo que permite lecturas eficientes en orden inverso. Esto beneficia a consultas multitenant como WHERE tenant='42' ORDER BY tenant, event_time DESC. #94103 (matanper).
  • Para consultas FINAL que usan una condición de clave primaria seguida de índices de omisión, el paso PrimaryKeyExpand ahora solo comprueba los rangos de clave primaria preseleccionados inicialmente. #94903 (Shankar Iyer).
  • La optimización de materialización diferida ahora se aplica a todas las ramas de una consulta UNION ALL, no solo a la primera, lo que reduce la E/S en consultas que combinan múltiples lecturas ordenadas y limitadas de distintas tablas MergeTree. #96832 (Federico Ginosa).

Rendimiento de funciones y agregaciones

  • La compilación JIT ahora abarca más funciones. #88770 (Alexey Milovidov).
  • Se optimizó la función de agregación distinctJSONPaths para leer solo las rutas JSON de las partes de datos, en lugar de toda la columna JSON. #92196 (Pavel Kruglov).
  • Se optimizó uniqExact cuando elementos idénticos suelen aparecer de forma consecutiva. #93268 (Alexey Milovidov).
  • Se optimizó isValidASCII para valores de entrada compuestos únicamente por caracteres ASCII. #93347 (Robert Schulze).
  • Se aceleró uniq en tipos numéricos agrupando inserciones en lotes cuando es posible (no NULL, sin -If, sin GROUP BY, sin IPv6 ni String). #95904 (Raúl Marín).

Rendimiento del almacenamiento y de E/S

  • Se corrigió el prefetcher de Parquet Reader V3 para que utilice una lógica de lectura aleatoria más rápida. #91435 (Arsen Muk).
  • Se mejoró el rendimiento de icebergCluster. #91537 (Yang Jiang).
  • Se redujo el uso de memoria en INSERT y merge para tablas muy anchas con partes Wide al habilitar búferes de escritura adaptativos. También se añadió compatibilidad con búferes de escritura adaptativos para discos cifrados. #92250 (Azat Khuzhin).
  • Se mejoró el rendimiento de la búsqueda de texto completo con el índice de texto y el tokenizer sparseGrams al reducir el número de tokens buscados. #93078 (Anton Popov).
  • Se aceleró la compresión del codec T64 mediante despacho dinámico en x86. #95881 (Raúl Marín).
  • Se aceleró la descompresión LZ4 de bloques de 32 bytes en x86. #96778 (Raúl Marín).
  • La optimización de lectura directa del índice de texto ahora funciona de forma parcial: las partes con un índice de texto materializado lo usarán, mientras que las partes sin él volverán a la expresión de filtro original. #96411 (Anton Popov).
  • Se optimizó el cálculo del skip index minmax durante INSERT al eliminar una copia de datos innecesaria y habilitar el cálculo vectorizado de mínimos y máximos para columnas numéricas. #97392 (Raúl Marín).
  • Se añadieron índices secundarios minmax en columnas de tiempo e índices bloom_filter en las columnas query_id/initial_query_id de las tablas de logs del sistema para acelerar el filtrado. #96712 (Alexey Milovidov).
  • Se evitó una regresión en el uso de memoria en INSERT cuando la deduplicación no está habilitada. #96503 (Alexey Milovidov).

Optimización de memoria

  • Se redujo la huella de memoria de ASTLiteral al eliminar campos no utilizados cuando el resaltado y el análisis de VALUES no están activos. #93974 (Ilya Yatsishin).
  • Se introdujo una clase AST especializada para Enum que almacena los parámetros de valor como pares de cadena/entero en lugar de hijos genéricos de ASTLiteral, lo que reduce el consumo de memoria. #94178 (Ilya Yatsishin).
  • Se optimizó el consumo de memoria de los objetos AST de tuplas con nombre almacenando los nombres de columna directamente como cadenas, en lugar de hacerlo en nodos literales genéricos del AST. #94704 (Ilya Yatsishin).
  • Se redujo el tamaño de la estructura CachedOnDiskReadBufferFromFile en aproximadamente 50 veces. #96098 (Azat Khuzhin).
  • HashTable::resize ya no copia datos antiguos cuando la tabla está vacía. #96180 (Raúl Marín).

Optimizaciones internas

  • Se adoptó el método “fastrange” (Daniel Lemire) para particionar los datos dentro del pipeline de consulta, lo que mejora la ordenación paralela y los JOINs. #93080 (Alexey Milovidov).
  • Se mejoró la desvirtualización con opciones adicionales del enlazador. #94737 (Nikita Taranov).
  • Se mejoró el rendimiento de la clonación de réplicas para tablas ReplicatedMergeTree con muchas partes agrupando en lotes las solicitudes a ZooKeeper. #94847 (c-end).
  • Se redujo en más de un 20 % el consumo de CPU del hilo de recepción de ZooKeeper en observeOperations al cambiar a funciones hash más rápidas y contadores sin bloqueos. #95962 (Miсhael Stetsyuk).

Correcciones de errores

Correcciones de JOIN

  • Se corrigió el error INCOMPATIBLE_TYPE_OF_JOIN en el almacenamiento Join cuando se aplicaba la optimización que convierte un join outer en inner. #84292 (Vladimir Cherkasov).
  • Se corrigió un error lógico en consultas con múltiples JOIN con la cláusula USING y join_use_nulls. #92251 (Vladimir Cherkasov).
  • Se corrigió un error lógico al reordenar join con join_use_nulls. #92289 (Vladimir Cherkasov).
  • Se corrigió un posible bloqueo con la configuración join_on_disk_max_files_to_merge. #92335 (Bharat Nallan).
  • Se corrigió LOGICAL_ERROR causado por una modificación no deseada del plan de consulta al convertir un outer join en un inner join. También se flexibilizaron los requisitos para aplicar la optimización cuando se usan funciones inyectivas en las claves de agregación durante los joins. #92503 (János Benjamin Antal).
  • Se corrigió un error lógico en múltiples joins con una condición constante y join_use_nulls. #92892 (Vladimir Cherkasov).
  • Se corrigió el caso NULL != NULL para full_sorting_join en una columna LowCardinality(Nullable(T)). #92924 (Vladimir Cherkasov).
  • Se corrigieron los resultados de la operación join cuando la clave de join del lado derecho era una columna dispersa. #93038 (Amos Bird).
  • Se corrigió un problema por el que los filtros de tiempo de ejecución funcionaban incorrectamente cuando LEFT ANTI JOIN tenía una poscondición adicional. #91824 (Alexander Gololobov).
  • Se corrigió un error lógico al usar filtros en tiempo de ejecución en una consulta con totales para la tabla derecha. #93330 (Alexander Gololobov).
  • Se corrigió un error lógico que, en algunos casos, se activaba cuando se añadían filtros de runtime para join al plan de consulta debido a la devolución incorrecta de columnas const duplicadas. #93144 (Alexander Gololobov).
  • Se corrigió la función __applyFilter, utilizada por los filtros de runtime de join, que devolvía ILLEGAL_TYPE_OF_ARGUMENT en algunos casos válidos. #93187 (Alexander Gololobov).
  • Se corrigió un problema por el que no se añadían filtros en tiempo de ejecución al hacer join con una tabla derecha ya rellenada. #93211 (Alexander Gololobov).
  • Se corrigió el error NOT_FOUND_COLUMN_IN_BLOCK cuando el filtro en tiempo de ejecución estaba habilitado y las tablas combinadas devolvían la misma columna varias veces. #93526 (Alexander Gololobov).
  • Se corrigió que FilterStep no se añadiera correctamente cuando se aplicaba un runtime filter de join en la tabla Merge. #94021 (Alexander Gololobov).
  • Se corrigió la conversión de tipos al supertipo durante una operación JOIN del almacenamiento Join con la cláusula USING. #94000 (Dmitry Novik).
  • Se corrigieron las consultas con réplicas paralelas y JOIN con una tabla que no es MergeTree. #93902 (Igor Nikonov).
  • Se corrigió una condición de carrera en la columna de join Nullable de los filtros en tiempo de ejecución. #95775 (Hechem Selmi).
  • Se corrigió un problema por el que una cadena vacía se convertía en NULL en una tabla Join con clave Nullable(String). #96002 (Alexey Milovidov).
  • Se corrigió el error NOT_SUPPORTED al usar el algoritmo de join direct con una tabla MergeTree vacía. #95935 (Vladimir Cherkasov).
  • Se corrigieron resultados incorrectos en consultas con JOINs externos combinados con varios INNER JOINs, causados por un reordenamiento ilegal de JOINs cuando la condición ON de un JOIN externo hacía referencia a columnas de varias tablas previamente unidas. #96193 (Vladimir Cherkasov).
  • Se corrigió una excepción de filtro en tiempo de ejecución para columnas Tuple con subcampos Nullable. #96509 (Alexey Milovidov).
  • Se corrigieron las consultas con CROSS JOIN y réplicas paralelas habilitadas que devolvían resultados incorrectos. #96848 (Igor Nikonov).
  • Se corrigió un problema por el que arrayJoin producía filas duplicadas cuando se usaba con INNER JOIN y la cláusula WHERE, causado por un push-down parcial de predicados que empujaba incorrectamente por debajo de un JOIN los filtros que contenían arrayJoin. #96989 (Alexey Milovidov).
  • Se corrigió LOGICAL_ERROR cuando arrayJoin en la cláusula WHERE hacía referencia a columnas de ambos lados de un JOIN. #97239 (Alexey Milovidov).
  • Se corrigió un error lógico al usar un comodín (*) dentro de una función lambda en la cláusula VALUES de un JOIN con USING. #95661 (Vladimir Cherkasov).
  • Se corrigió un posible error lógico en el matcher (*, table.*) y en analyzer_compatibility_join_using_top_level_identifier cuando la columna de USING tenía tipos diferentes. #95808 (Vladimir Cherkasov).
  • Se corrigió un error lógico relacionado con analyzer_compatibility_join_using_top_level_identifier y las columnas ALIAS. #97297 (Vladimir Cherkasov).
  • Se solucionó un bloqueo en el analizador antiguo al usar JOIN con alias duplicados. #96405 (Ilya Golshtein).

Correcciones de consultas y del analizador

  • Se corrigió un error por el que los controladores de consultas predefinidas interpretaban los espacios en blanco al final como datos durante las inserciones. #83604 (Fabian Ponce).
  • Se corrigió la agregación con proyección que producía una excepción después de ALTER que solo afectan a los metadatos, como la ampliación de elementos de Enum. #84143 (Alexey Milovidov).
  • Se corrigió la pasada count_distinct_optimization para funciones de ventana y múltiples argumentos. #92376 (Raúl Marín).
  • Se corrigió el formato inconsistente del AST de arrayElement con un literal negado. #92293 (Pavel Kruglov).
  • Se corrigió NOT IN con argumentos de tipo Array no constantes que devolvían valores incorrectos. #93314 (Yarik Briukhovetskyi).
  • Se corrigió un error en la comparación null-safe relacionado con el tipo Nothing. #91884 (Yarik Briukhovetskyi).
  • Se corrigió el error Not found column en la optimización use_top_k_dynamic_filtering. #93316 (Nikolai Kochetov).
  • Se corrigió la eliminación de columnas no utilizadas en las subconsultas en presencia de una subconsulta escalar correlacionada. #93273 (Dmitry Novik).
  • Se corrigió un problema por el que optimize_inverse_dictionary_lookup no funcionaba con consultas distribuidas cuando la clave era de un tipo entero con signo. #93848 (Nihal Z. Miaji).
  • Se corrigió un problema por el que lag/lead no funcionaban con consultas distribuidas remote(). #93858 (Nihal Z. Miaji).
  • Se corrigió un error en la lógica de omisión de datos al usar not match(...) en WHERE, que provocaba resultados incorrectos. #92726 (Nihal Z. Miaji).
  • Se corrigió un error en la lógica de omisión de datos cuando se usaba not materialize(...) o not CAST(...) en WHERE, que provocaba resultados incorrectos. #93017 (Nihal Z. Miaji).
  • Se corrigió un error lógico durante el análisis de índices al usar un array vacío en la función has. #92995 (Nihal Z. Miaji).
  • Se corrigió un error lógico en un caso poco frecuente en el que se usó una tupla vacía con una columna Map. #93814 (Nihal Z. Miaji).
  • Se corrigió el fallo en las consultas que usaban segmentación por PK con una condición falsa. #92815 (Yarik Briukhovetskyi).
  • Se corrigió la planificación de consultas del motor de tabla Merge, que provocaba ILLEGAL_COLUMN para hostName() al fusionar tablas locales y remotas/Distributed. #93286 (Jinlin).
  • Se corrigió el error NO_SUCH_COLUMN_IN_TABLE en el motor Merge al usar tablas con alias. #92910 (Pavel Kruglov).
  • Se corrigió la consulta SELECT con un predicado sobre varias columnas, con índices de omisión con filtro bloom y condiciones OR y NOT, que devolvía resultados inconsistentes. #94026 (Shankar Iyer).
  • Se corrigió un problema al aplicar la proyección cuando el filtro contenía subcolumnas. #93141 (Pavel Kruglov).
  • Se corrigió la corrupción de _part_offset al reconstruir las proyecciones durante los merges y se optimizó el procesamiento de proyecciones al evitar lecturas innecesarias. #93827 (Amos Bird).
  • Se evitó que distintas columnas interpoladas se fusionaran en una misma columna dentro de un bloque cuando, en la práctica, eran alias de la misma columna. #93197 (Yakov Olkhovskiy).
  • Se eliminaron las columnas no utilizadas cuando se reconstruyó la proyección durante la fusión, lo que redujo el uso de memoria y generó menos partes temporales. #93233 (Nikolai Kochetov).
  • Se corrigió un error lógico que se producía en algunos casos al usar LIMIT/OFFSET negativo en consultas distribuidas. #95357 (Nihal Z. Miaji).
  • Se corrigió un error lógico que se producía en algunos casos al usar valores fraccionarios de LIMIT/OFFSET en consultas distribuidas. #96475 (Nihal Z. Miaji).
  • Se corrigió la función IN, que devolvía resultados incorrectos con valores NULL cuando transform_null_in estaba habilitado. #95674 (Nihal Z. Miaji).
  • Se corrigió el fallo de IN (col) al usar una sola referencia de columna, que producía el error UNSUPPORTED_METHOD. #97646 (Alexey Milovidov).
  • Se corrigió la reescritura de optimize_syntax_fuse_functions para convertir sum/count/avg en sumCount() cuando el argumento de agregación era LowCardinality(Nullable). #96239 (Nihal Z. Miaji).
  • Se corrigió la poda incorrecta de particiones para las funciones not IN y not has. #96241 (Nihal Z. Miaji).
  • Se corrigió un error en el filtro prewhere causado por expresiones lambda en prewhere. #95395 (Xiaozhe Yu).
  • Se corrigió LOGICAL_ERROR en el analizador de consultas cuando se pasaba una expresión lambda donde se esperaba un valor concreto. #96892 (Alexey Milovidov).
  • Se corrigió una desreferenciación de puntero nulo en ciertas expresiones con funciones lambda. #96479 (Alexey Milovidov).
  • Se corrigió un problema por el que SETTINGS por subconsulta no se aplicaba a funciones de tabla como file en CTE y subconsultas. #96882 (Alexey Milovidov).
  • Se corrigió una colisión de hash en la caché de condiciones de consulta para constantes de CTE plegadas, que podía provocar resultados incorrectos en la consulta. #96172 (Alexey Milovidov).
  • Se corrigió el error BAD_ARGUMENTS al consultar tablas con expresiones lambda dentro de columnas ALIAS mediante la función de tabla merge() con el analizador habilitado. #97551 (Alexey Milovidov).
  • Se corrigió un problema por el que EXCEPT ALL y INTERSECT ALL ignoraban la multiplicidad de las filas y se comportaban como sus equivalentes DISTINCT. #96876 (Alexey Milovidov).
  • Se corrigió un fallo de aserción en WindowTransform con un offset PRECEDING grande. #96026 (Alexey Milovidov).
  • Se solucionó una excepción al usar funciones de ventana con group_by_use_nulls = 1 y CUBE/ROLLUP/GROUPING SETS. #96878 (Alexey Milovidov).
  • Se corrigió la interacción entre GROUPING SETS, group_by_use_nulls y Tuple con LowCardinality, que producía una estructura de bloque inesperada. #96358 (Alexey Milovidov).
  • Se corrigió un error lógico al usar GROUP BY ... WITH ROLLUP/CUBE cuando las claves incluían LowCardinality(Nullable(...)) dentro de Nullable(Tuple(...)). #97647 (Alexey Milovidov).
  • Se corrigió un error de aserción en IfTransformStringsToEnumPass cuando if o transform devolvía Nullable(String). #97002 (Alexey Milovidov).
  • Se corrigió ACCESS_DENIED para los usuarios sin permiso para CREATE TEMPORARY TABLE cuando optimize_inverse_dictionary_lookup reescribía los predicados dictGet(...). #97484 (Nihal Z. Miaji).
  • Se corrigió una incompatibilidad de tipos en la función if entre UInt64 e Int32 en un caso inusual de consultas distribuidas con PREWHERE e inferencia de tipos. #96012 (Alexey Milovidov).
  • Se corrigieron las consultas compiladas con JIT que involucraban valores de tipo Bool. #96013 (Alexey Milovidov).
  • Se corrigieron resultados incorrectos cuando las expresiones compiladas con JIT convertían DateTime a DateTime64 (p. ej., en CASE/if/multiIf con distintos tipos DateTime). #96879 (Alexey Milovidov).
  • Se corrigió el uso de valores no inicializados en formatDateTime con especificadores de formato de ancho variable. #96133 (Alexey Milovidov).
  • Se solucionó std::terminate en indexOfAssumeSorted al llamarse con tipos incompatibles. #96877 (Alexey Milovidov).
  • Las funciones de Geometry ahora aceptan subtipos de geometría individuales, además del tipo Variant Geometry. #97571 (Alexey Milovidov).
  • Se corrigieron los casos en que los índices afectaban a los resultados de las consultas con row policy/PREWHERE y FINAL. #97076 (Yarik Briukhovetskyi).
  • Se permitió que la optimización read-in-order utilizara políticas de filas. #97538 (Janos Benjamin Antal).
  • Se corrigió LOGICAL_ERROR al usar columnas indexadas por texto con la cláusula QUALIFY. #97313 (Alexey Milovidov).
  • Se corrigió un posible cierre inesperado cuando la cláusula WHERE contenía más de 32 expresiones con AND/OR. #97698 (Shankar Iyer).
  • Se corrigió la incompatibilidad en la estructura de bloques en la optimización removeUnusedColumns al usar indexHint con expansión de asterisco en tablas con FINAL. #97622 (Alexey Milovidov).
  • Se corrigió una inconsistencia de round-trip en el formateo del AST para literales de tupla con alias entre paréntesis. #97418 (Alexey Milovidov).
  • Se corrigió la inconsistencia en el formato del AST para NOT (1, 1, 1). #97653 (Alexey Milovidov).

Correcciones de MergeTree y almacenamiento

  • Ahora, en MergeTree, los nombres de archivo siempre se reemplazan por hash si el sistema de archivos no distingue entre mayúsculas y minúsculas. Anteriormente, en macOS, esto podía provocar corrupción de datos cuando los nombres de columna/subcolumna solo se diferenciaban por el uso de mayúsculas y minúsculas. #86559 (Pavel Kruglov).
  • Las vistas materializadas ahora usan la base de datos en la que se crearon como contexto de ejecución, lo que permite omitir la especificación explícita de la base de datos en la consulta SELECT de la vista. #88193 (Dmitry Kovalev).
  • Se añadió una comprobación exhaustiva de permisos durante la fase de creación para la consulta subyacente dentro de una vista materializada. #89180 (pufit).
  • Se corrigió un error lógico por el que una mutación sin transacción modificaba partes dentro de una transacción activa que se revertía. #90469 (Shaohua Wang).
  • Se corrigió un problema por el que system.warnings no se actualizaba correctamente después de convertir una base de datos ordinaria en una base de datos Atomic. #90473 (sdk2).
  • Se corrigió LOGICAL_ERROR: Storage does not support transaction al ejecutar ATTACH AS REPLICATED. #91772 (Shaohua Wang).
  • Se corrigió un posible error FILE_DOESNT_EXIST tras una mutación en una columna dispersa con ratio_of_defaults_for_sparse_serialization=0.0. #92860 (Pavel Kruglov).
  • Se corrigió un posible error FILE_DOESNT_EXIST tras una mutación en una columna dispersa cuando ratio_of_defaults_for_sparse_serialization se cambiaba a 1.0 mediante ALTER. #93016 (Pavel Kruglov).
  • Se corrigió un posible uso de partes obsoletas debido a una condición de carrera TOCTOU en las partes compartidas. #93022 (Azat Khuzhin).
  • Se heredó la información de serialización de las partes de origen durante la mutación en MergeTree, lo que corrige posibles resultados incorrectos en consultas sobre partes mutadas tras cambios en la serialización de tipos de datos. #92419 (Pavel Kruglov).
  • Se corrigió un posible conflicto entre una columna y una subcolumna con el mismo nombre que provocaba una serialización incorrecta y errores en las consultas. #92453 (Pavel Kruglov).
  • Se corrigió NOT_FOUND_COLUMN_IN_BLOCK al insertar en una tabla con una subcolumna en la expresión de partición. #92905 (Pavel Kruglov).
  • Se corrigió la posible ausencia de una subcolumna en MV al modificar la tabla de origen. #93276 (Pavel Kruglov).
  • Se corrigió LOGICAL_ERROR al restaurar ReplicatedMergeTree con una condición de carrera durante la deduplicación. #93612 (Pablo Marcos).
  • Se corrigió el uso de una columna dispersa en la actualización de TTL durante la deserialización directa, evitando el error Unexpected type of result TTL column. #93619 (Pavel Kruglov).
  • Se restauraron los wrappers de LowCardinality en los resultados de expresiones SET cuando fue necesario durante la agregación TTL. #92971 (Seva Potapov).
  • Se solucionó Cannot add action to empty ExpressionActionsChain para ALTER TABLE REWRITE PARTS. #92754 (Azat Khuzhin).
  • Se corrigió la sustitución de parámetros de consulta en los métodos de autenticación de CREATE USER al usar ON CLUSTER. #92777 (xiaohuanlin).
  • Ya no intenta eliminar directorios temporales al iniciar si una tabla MergeTree está en un disco de solo lectura. #92748 (Alexey Milovidov).
  • Se corrigió la materialización de los índices de omisión creados sobre subcolumnas. #93708 (Anton Popov).
  • Se corrigió CLEAR COLUMN con índices dependientes. #94057 (Raúl Marín).
  • Se corrigió el ATTACH de bases de datos Replicated cuando el host interserver cambiaba tras reiniciar. #93779 (Tuan Pham Anh).
  • Se corrigió un error lógico relacionado con CREATE TABLE ... AS urlCluster() y el motor de base de datos Replicated. #92418 (Kseniia Sumarokova).
  • Se corrigió una condición de carrera entre REPLACE PARTITION y las mutaciones en segundo plano, lo que podía hacer que fueran visibles tanto los datos antiguos como los nuevos. #96955 (Alexey Milovidov).
  • Se corrigió la condición de carrera restante entre REPLACE PARTITION y las mutaciones en segundo plano que podía provocar la reaparición de datos antiguos. #97105 (Alexey Milovidov).
  • Se corrigieron las mutaciones atascadas cuando PartCheckThread volvió a poner en cola un GET_PART para una parte ya mutada. #97162 (Alexey Milovidov).
  • Se corrigió el error por el que ALTER TABLE DROP COLUMN fallaba después de que se hubiera realizado previamente una actualización ligera en la misma columna. #96861 (Anton Popov).
  • Se corrigió una desreferenciación de puntero nulo al aplicar patch parts durante las actualizaciones ligeras. #97583 (Alexey Milovidov).
  • Las partes con proyecciones desconocidas ya no se marcan como perdidas de forma permanente. #95952 (Mikhail Artemenko).
  • Se corrigió un problema por el que CREATE TABLE ... CLONE AS ... ignoraba el calificador completo de la tabla de origen. #96415 (Hasyimi Bahrudin).
  • Se corrigió la regeneración implícita de índices en las tablas replicadas durante los cambios de metadatos. #96600 (Raúl Marín).
  • Se corrigieron los índices implícitos con columnas alias y se añadió una validación exhaustiva antes de crearlos. #97115 (Raúl Marín).
  • Se corrigió que min(timestamp) devolviera la época Unix (1970-01-01) mediante _minmax_count_projection tras una fusión de TTL cuando todas las filas se habían filtrado. #96703 (Raquel Barbadillo).
  • Se corrigió un problema en la combinación de use_const_adaptive_granularity y index_granularity_bytes (granularidad no adaptativa) que provocaba un cálculo incorrecto. #96143 (Alexey Milovidov).
  • Se corrigió la excepción Number of rows in lazy chunk does not match number of offsets al leer tablas con granularidad no adaptativa del índice usando ORDER BY ... LIMIT. #97270 (Alexey Milovidov).
  • Se corrigió una regresión en la replicación zero-copy por la que las partes compartidas podían eliminarse antes de que otras réplicas terminaran de descargarlas. #95597 (filimonov).
  • Se corrigió un problema por el que SYSTEM RESTART REPLICA podía hacer que se perdiera una tabla de la base de datos cuando la recreación de la tabla fallaba con una excepción no relacionada con ZooKeeper, lo que provocaba discrepancias en el digest de metadatos en DatabaseReplicated. #97276 (Alexey Milovidov).
  • Se corrigió la excepción de assert_cast al generar estadísticas de columnas después de que ALTER TABLE MODIFY COLUMN cambiara el tipo de la columna. #97027 (Alexey Milovidov).
  • Cuando una tabla no tiene estadísticas definidas, ClickHouse deja de intentar cargarlas, lo que evita una sobrecarga innecesaria. #96233 (Han Fei).
  • Se corrigió el fallo lógico There was an error: Cannot obtain error message al esperar un DDL distribuido y eliminar de forma concurrente la base de datos Replicated. #95664 (Alexander Tokmakov).
  • Se corrigió un error lógico en KeyCondition cuando una tabla tenía una clave primaria Nullable y la consulta utilizaba coalesce con un primer argumento constante. #96340 (Alexey Milovidov).

Correcciones de tipos de datos y serialización

  • Se corrigió un posible error al leer la subcolumna de tamaño de los tipos Dynamic/JSON. #95573 (Pavel Kruglov).
  • Se corrigió un fallo al aplicar tupleElement a arrays de JSON. #95647 (Pavel Kruglov).
  • Se corrigió la ejecución de tupleElement sobre JSON con rutas anidadas que devolvía resultados incorrectos. #95907 (Pavel Kruglov).
  • Se corrigió un problema en tupleElement que provocaba una excepción con JSON en rutas con indicaciones de tipo. #97728 (Pavel Kruglov).
  • Se corrigió el manejo de las rutas omitidas en el tipo de datos JSON: anteriormente, JSON(SKIP path) omitía todas las claves con el prefijo path (incluso claves como pathpath), lo que podía provocar pérdida de datos. Ahora solo se omite la clave exacta. #95948 (Pavel Kruglov).
  • Se corrigió un problema al aplicar type_json_allow_duplicated_key_with_literal_and_nested_object a las rutas tipadas en JSON. #97422 (Pavel Kruglov).
  • Se corrigió la comprobación de rutas tipadas incompatibles en el tipo JSON. #92539 (Pavel Kruglov).
  • Se corrigió la creación de la indicación de tipo para la ruta ‘skip’ en JSON. #92842 (Pavel Kruglov).
  • Se corrigió la resolución dinámica de subcolumnas en los alias de columna del analizador. #92583 (Pavel Kruglov).
  • Se corrigió el error Nested columns sizes are inconsistent with local_discriminators debido a una optimización incorrecta del filtrado in-place para columnas de tipo Variant. #96410 (Alexey Milovidov).
  • Se corrigió un fallo en ifNull al usar un argumento Variant en GROUP BY. #96790 (Alexey Milovidov).
  • Se corrigió un error lógico en FunctionVariantAdaptor relacionado con funciones que requieren argumentos constantes, como arrayROCAUC. #97116 (Bharat Nallan).
  • Se corrigió LOGICAL_ERROR en FunctionVariantAdaptor cuando una función devolvía el tipo Nothing. #97213 (Alexey Milovidov).
  • Se corrigió una excepción lógica al comparar NULL con una columna de tipo Variant que contiene tipos LowCardinality. #97379 (Alexey Milovidov).
  • Se corrigió LOGICAL_ERROR en concat cuando un argumento incluía un tipo Variant con LowCardinality dentro. #97654 (Alexey Milovidov).
  • Se corrigieron resultados incorrectos cuando las columnas LowCardinality se convertían a Nullable. #96483 (Nihal Z. Miaji).
  • Se corrigió el manejo de los tipos LowCardinality Nullable en CAST cuando cast_keep_nullable estaba habilitado. #95747 (Alexey Milovidov).
  • Se corrigió la excepción ColumnNullable is not compatible with original al convertir tipos anidados complejos. #96924 (Alexey Milovidov).
  • Se corrigió LOGICAL_ERROR al usar isNull/isNotNull en las subcolumnas de tipos Nullable(Tuple(... Nullable(T) ...)). #97582 (Alexey Milovidov).
  • Se corrigió LOGICAL_ERROR en la conversión de Array a QBit. #97413 (Alexey Milovidov).
  • Se corrigió LOGICAL_ERROR al leer conjuntamente una columna dispersa y su subcolumna. #97515 (Pavel Kruglov).
  • Se corrigió LOGICAL_ERROR al leer la subcolumna .size de un Nullable(String) disperso dentro de una Tuple con PREWHERE. #97264 (Alexey Milovidov).
  • Se corrigió un error de aserción en Set y MergeTreeIndexSet al procesar columnas con subcolumnas internas dispersas. #97493 (Alexey Milovidov).
  • Se corrigió un posible error SIZES_OF_COLUMNS_DOESNT_MATCH al ordenar una columna de tupla vacía. #92520 (Pavel Kruglov).
  • Se corrigieron errores en la decodificación de DELTA_BYTE_ARRAY en el lector nativo de Parquet que afectaban a datos de tipo cadena muy repetitivos. #91929 (Daniel Muino).
  • Se corrigió un error de aserción al leer un archivo Parquet cuando una parte de una expresión prewhere se utilizaba en otra parte de la consulta. #90635 (Max Kainov).
  • Se corrigió LOGICAL_ERROR en el lector nativo de Parquet V3 cuando la columna del filtro PREWHERE contenía valores UInt8 no booleanos. #96594 (Alexey Milovidov).
  • Se corrigió la inferencia de esquema de Parquet en el lector anterior cuando una columna JSON estaba después de una columna Tuple. #92867 (Michael Kolupaev).
  • Se corrigió un problema por el que el esquema se almacenaba en caché para todos los archivos en lugar de solo para el archivo inferido durante la inferencia de esquema con glob. #92006 (Pavel Kruglov).
  • Se corrigió la lectura del formato ProtobufList desde archivos vacíos, que producía registros fantasma en tablas vacías. #96007 (Alexey Milovidov).
  • Se corrigió una regresión en el códec Gorilla cuando un tamaño especificado explícitamente no coincidía con el tamaño del tipo de datos. #96118 (Alexey Milovidov).
  • El motor PostgreSQL ahora puede leer correctamente BOOLEAN[]. #96006 (Alexey Milovidov).
  • Se corrigió un error lógico al leer una columna UUID a partir de una columna TEXT de SQLite. #96016 (Alexey Milovidov).
  • Se corrigió la conversión de tipos en el motor SQLite para DateTime, Date, UUID y otros tipos. #96017 (Alexey Milovidov).
  • Se corrigió el problema por el que los valores FixedString se escapaban incorrectamente en las consultas a SQLite y PostgreSQL. #96019 (Alexey Milovidov).
  • Se agregó la configuración input_format_numbers_enum_on_conversion_error para la conversión de Numbers a Enums. #56240 (Nikolay Degterinsky).

Correcciones de text index y skip index

  • La creación y materialización de índices de texto en tablas con partes de más de 4.294.967.295 filas se ha deshabilitado temporalmente para evitar resultados incorrectos en las consultas. #92644 (Anton Popov).
  • Se corrigieron varios bloqueos durante las fusiones de índices de texto en tablas MergeTree. #92925 (Anton Popov).
  • Se corrigieron las fusiones de índices de texto basados en expresiones complejas (como concat(col1, col2)). #93073 (Anton Popov).
  • Se corrigió el análisis de índices de texto en columnas de tipo array cuando el índice no contenía ningún token. #93457 (Anton Popov).
  • Se corrigió la recreación de los índices de texto creados sobre subcolumnas. #93326 (Anton Popov).
  • Se corrigió la lectura directa desde el índice de texto para consultas de búsqueda duplicadas. #93516 (Anton Popov).
  • Se corrigieron inconsistencias en el análisis del índice de texto para las funciones has, mapContainsKey y mapContainsValue, que podían devolver resultados diferentes según se utilizara o no un índice de texto. #93578 (Anton Popov).
  • Se corrigió el cálculo de los tamaños sin comprimir de los índices de texto en system.parts. #92832 (Anton Popov).
  • Se corrigieron los índices ngrambf_v1 con longitud de ngram > 8 que provocaban una excepción. #92672 (Robert Schulze).
  • Se corrigió un problema en el índice ngram_bf con datos no UTF-8 que provocaba una lectura de memoria no inicializada. #93663 (Alexey Milovidov).
  • Se corrigió stack-use-after-scope en el índice de similitud de vectores. #96259 (Alexey Milovidov).
  • Se corrigió un error lógico por el que una expresión de índice de omisión producía una columna constante. #96880 (Alexey Milovidov).
  • Se corrigió la creación de una tabla con una expresión vacía () como índice, que provocaba un acceso inválido a memoria. #96363 (Alexey Milovidov).
  • Se corrigió un error de use-after-free en el análisis de índices con use_primary_key deshabilitado y un número muy elevado de disyunciones. #96112 (Alexey Milovidov).
  • Se corrigió el uso del índice primario en las actualizaciones ligeras con subconsultas en la cláusula IN de WHERE. #92838 (Anton Popov).
  • Se utilizó el código de error correcto al validar el índice hypothesis. #92559 (Raúl Marín).

Correcciones en el lago de datos

  • Se corrigió un fallo en un clúster de un solo nodo al leer desde Iceberg en modo split-by-buckets. #91553 (Konstantin Vedernikov).
  • Se corrigió la tupla de ORDER BY en Iceberg. #93225 (Konstantin Vedernikov).
  • Se corrigió la compatibilidad con las credenciales proporcionadas por Azure ADLS Gen2 en DataLakeCatalog: se interpretan las claves adls.sas-token.* de los catálogos REST de Iceberg y se corrige el análisis de las URL ABFSS. #93477 (Karun Anantharaman).
  • Se sustituyó Date por Date32 en Iceberg. #95322 (Konstantin Vedernikov).
  • Se corrigió un fallo relacionado con ORDER BY en Iceberg. #96484 (Konstantin Vedernikov).
  • Se corrigió el particionado de Iceberg. #96620 (Konstantin Vedernikov).
  • Se corrigieron los límites incorrectos de los archivos de datos cuando la referencia de eliminación por posición era nula en las entradas del manifiesto de Iceberg. #96061 (Daniil Ivanik).
  • Se añadieron más comprobaciones para validar la configuración del archivo de metadatos raíz en Iceberg. #96754 (Daniil Ivanik).
  • Las credenciales ya no quedan registradas en los catálogos Iceberg. #96831 (Konstantin Vedernikov).
  • Se corrigió la compactación de los datos particionados de Delta Lake. #95773 (Kseniia Sumarokova).
  • Se corrigió el catálogo RESTful de data lake con un auth_header no válido que provocaba fallos en system.tables. #96680 (Han Fei).

Correcciones de S3/Azure/almacenamiento de objetos

  • Se corrigió el almacenamiento en caché de la clave de partición en el motor de tabla S3 cuando había funciones no deterministas. #92844 (Miсhael Stetsyuk).
  • Se corrigió un fallo de aserción en ReadBufferFromS3 que ocurría cuando la caché estaba habilitada. #93809 (Kseniia Sumarokova).
  • Se solucionó un posible error en el hilo de limpieza de DiskObjectStorage. #87411 (Kseniia Sumarokova).
  • Se solucionaron posibles interbloqueos en DiskObjectStorageTransaction. #93810 (Kseniia Sumarokova).
  • Se corrigieron posibles fallos del hilo de limpieza de DiskObjectStorage cuando se acumulaban muchos errores. #94048 (Kseniia Sumarokova).
  • Se corrigió una condición de carrera en copyS3File relacionada con multipart_tags. #97227 (Azat Khuzhin).
  • Ejecutar una mutación ALTER UPDATE no válida en tablas tipo archivo sobre almacenamiento de objetos (S3, Azure) ya no provocaba una desreferenciación de nullptr. #96162 (Alexey Milovidov).

Correcciones de S3Queue

  • Se solucionó el error Failed to set file processing within 100 retries en el modo ordenado de S3Queue (ahora es una advertencia). #92814 (Kseniia Sumarokova).
  • Se corrigió un fallo en la configuración de S3Queue s3queue_migrate_old_metadata_to_buckets. #93232 (Kseniia Sumarokova).
  • Se corrigieron los metadatos de los motores S3Queue/AzureQueue. #90498 (Kseniia Sumarokova).
  • Se corrigió una condición de carrera en el almacenamiento S3Queue/AzureQueue. #95385 (Kseniia Sumarokova).
  • Se corrigió la deduplicación de la ingesta en streaming desde el motor S3Queue/AzureQueue. #95467 (Kseniia Sumarokova).

Correcciones de seguridad y control de acceso

  • Se corrigió la comprobación de acceso que faltaba en SYSTEM SYNC FILE CACHE. #92372 (Kseniia Sumarokova).
  • Se corrigió una lógica incorrecta en las comprobaciones de grants de acceso para los grants con comodines, que resultaba demasiado restrictiva. #92725 (pufit).
  • Se evitó que los usuarios obtuvieran la lista de columnas de una tabla sin el permiso SHOW COLUMNS al usar el motor de tabla merge. #93695 (János Benjamin Antal).
  • Se corrigió una vulnerabilidad por desbordamiento de enteros en la deserialización del estado de groupConcat que podía provocar problemas de seguridad de la memoria. #93426 (Raufs Dunamalijevs).
  • Se validó que el tamaño del búfer descomprimido fuera el esperado. #93690 (Raúl Marín).
  • Se corrigió la revocación de roles predeterminados. #96103 (Vitaly Baranov).
  • Se corrigió un problema por el que AccessRights::contains devolvía resultados incorrectos con revocaciones parciales. #96170 (pufit).
  • Se corrigió la actualización de las políticas de filas asignadas al usuario inicial en las consultas distribuidas. #95469 (Vitaly Baranov).
  • El argumento password de la función de tabla redis ahora aparece enmascarado en los logs y las tablas del sistema. #95325 (Janos Benjamin Antal).
  • Se solucionó una fuga de memoria en los objetos BIO al leer certificados X509. #96885 (Alexey Milovidov).
  • Se validó la versión witness en Bech32 para evitar un desbordamiento de búfer. #96671 (Raúl Marín).
  • Se corrigió la lentitud al consultar tablas del sistema con un usuario que tenía permisos limitados en muchas bases de datos. #95874 (pufit).

Correcciones de backup y restauración

  • Se corrigió el error Couldn't pack tar archive: Failed to write all bytes, causado por un encabezado de tamaño incorrecto para una entrada del archivo. #92122 (Julia Kartseva).
  • Se corrigió una caída del servidor cuando muchas copias de seguridad simultáneas entraban en conflicto al usar los mismos archivos. #93659 (Alexey Milovidov).
  • Se corrigió el desbordamiento de pila al crear copias de seguridad basadas en archivos comprimidos (.zip, .tzst) en un disco de almacenamiento de objetos plain_rewritable. #96872 (Alexey Milovidov).
  • Se corrigió una caída del servidor cuando la copia de seguridad fallaba debido a un disco lleno u otros errores de E/S. #96873 (Alexey Milovidov).
  • Se corrigió un fallo de segmentación en la copia de seguridad de StorageKeeperMap debido a un error de uso tras liberar memoria. #97336 (Alexey Milovidov).

Correcciones de fallos y estabilidad

  • Se corrigió un fallo al leer de una Connection desconectada. #92807 (Raufs Dunamalijevs).
  • Se corrigió un posible bloqueo al usar la función tokens() con un segundo argumento NULL. #92586 (Raúl Marín).
  • Se corrigió un bloqueo del servidor cuando se llamaba a tokens con parámetros no constantes del tokenizador. #93383 (Robert Schulze).
  • Se corrigió un posible bloqueo causado por la mutación in situ de las columnas const subyacentes de PREWHERE durante la reducción o el filtrado concurrentes de columnas. #92588 (Arsen Muk).
  • Se corrigió un posible bloqueo al finalizar el pool de programación en segundo plano, que podía hacer que el servidor se bloqueara al apagarse. #93008 (Azat Khuzhin).
  • Se corrigió un problema por el que las conexiones quedaban en un estado incorrecto tras la cancelación preliminar de consultas distribuidas. #93029 (Azat Khuzhin).
  • Se corrigió un posible Cannot finalize buffer after cancellation en estimateCompressionRatio(). #93068 (Azat Khuzhin).
  • Se aseguró que ZooKeeper se finalizara al apagarse para corregir posibles bloqueos. #93602 (Azat Khuzhin).
  • Se corrigió una excepción no capturada durante la recarga en segundo plano de named collections con almacenamiento en ZooKeeper. #92717 (Kseniia Sumarokova).
  • Se corrigió el uso de un valor sin inicializar en ReadWriteBufferFromHTTP. #94058 (Alexey Milovidov).
  • Se corrigió un problema por el que el tamaño del búfer de TraceSender no se actualizaba, lo que provocaba flushes intercalados de distintos hilos. #93966 (Miсhael Stetsyuk).
  • Se almacenaron en QueryPipeline punteros compartidos a IStorage para garantizar que los objetos IStorage no se destruyan mientras PipelineExecutor siga activo. #93746 (Miсhael Stetsyuk).
  • Se corrigió un posible bloqueo en las consultas distribuidas en caso de cancelación. #95466 (Aleksandr Musorin).
  • Se corrigió un fallo en DROP WORKLOAD cuando se ejecutaba de forma concurrente con consultas. #95856 (Alexey Milovidov).
  • Se corrigió una condición de carrera de datos en DROP WORKLOAD. #96614 (Sergei Trifonov).
  • Se corrigieron varios fallos críticos relacionados con el uso de ThreadPoolCallbackRunnerLocal. #95818 (Raúl Marín).
  • Se corrigió un posible interbloqueo en ProcessList debido a una inversión de bloqueos cuando se activó el overcommit tracker de memoria. #96182 (Antonio Andelic).
  • Se corrigió un livelock en el hilo de verificación de cancelación para consultas con un max_execution_time elevado. #96450 (Sergei Trifonov).
  • Se corrigió el bloqueo del hilo de purga de MemoryWorker debido a una condición de carrera. #96819 (Antonio Andelic).
  • Se corrigió un bloqueo en clearCaches causado por la destrucción prematura de instantáneas de almacenamiento almacenadas en caché. #96995 (Alexey Milovidov).
  • Se corrigió heap-use-after-free en CREATE TABLE con restricciones. #96669 (Nikita Taranov).
  • Se corrigió un posible error de tipo use-after-free en StorageKafka2. #97520 (Bharat Nallan).
  • Se corrigió una condición de carrera en shutdown_called de DatabaseMaterializedPostgreSQL. #97554 (Alexey Milovidov).
  • Se corrigió una condición de carrera en la carga paralela del Diccionario HASHED por segmentos, que podía provocar que no se cargaran algunas filas. #96953 (Alexey Milovidov).
  • Se corrigió un interbloqueo en los diccionarios cuando un diccionario hacía referencia a una tabla Merge que, a su vez, hacía referencia a él de forma recursiva. #96120 (Alexey Milovidov).
  • Se corrigió un acceso fuera de límites en BaseSettings::readBinary cuando un servidor más reciente enviaba un ajuste desconocido durante la deserialización del plan de consulta. #97585 (Michael Stetsyuk).
  • Se corrigió un fallo al adjuntar una tabla a una base de datos MaterializedPostgreSQL cuando dropReplicationSlot lanzaba una excepción durante el desenrollado de la pila de llamadas. #96871 (Alexey Milovidov).
  • Se liberó el flujo de solicitudes en insert select para evitar que se cerrara la conexión HTTP. #92175 (Sema Checherinda).
  • Se corrigió un interbloqueo al ejecutar SHOW CREATE DATABASE para la base de datos Backup. #92541 (Azat Khuzhin).

Otras correcciones de errores

  • Se corrigió el manejo de arrays vacíos en handleAllTokens para las funciones hasAllTokens y hasAnyTokens. #93328 (Anton Popov).
  • Período fijo para los profilers globales: se utilizaba un valor truncado en lugar del valor configurado, lo que provocaba despertares más frecuentes. #96048 (Antonio Andelic).
  • Se corrigió event_date en system.asynchronous_metric_log. #95947 (Raúl Marín).
  • Se corrigió un problema por el que system.functions mostraba una cadena vacía en lugar de categories = 'Internal' para las funciones internas. #97315 (Robert Schulze).
  • Se corrigió un posible error de lógica en el diccionario ip_trie cuando el tipo de clave no era String. #97555 (Bharat Nallan).
  • Se corrigió la depuración de UDF habilitando la captura de stderr en system.query_log.exception. #92209 (Xu Jia).
  • Se corrigió filterPartsByVirtualColumns para predicados siempre falsos. #97620 (Bharat Nallan).
  • Se corrigió un problema por el que ColumnConst no se materializaba antes del squashing. #97019 (Hasyimi Bahrudin).
Última modificación el 10 de junio de 2026