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 VIEWque usanINcon 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 comoINVALID_JOIN_ON_EXPRESSIONdurante la ejecución de la consulta y, en algunos casos (como al hacer join con el almacenamientoJoin), podía provocar unLOGICAL_ERROR. #92371 (Vladimir Cherkasov). - Las subconsultas ya no se permiten en
ORDER BYni en otras expresiones clave de tabla. #96847 (Alexey Milovidov).
Cambios en los tipos de datos
- Se añadió compatibilidad con
Nullable(Tuple). Para habilitarla, establezcaallow_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
compatibilityen la versión anterior, o configure las opciones de MergeTreedynamic_serialization_version='v2'yobject_serialization_version='v2'. #92511 (Pavel Kruglov). SKIP REGEXPen 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
DATEde PostgreSQL ahora se infieren comoDate32en ClickHouse (anteriormente se inferían comoDate, lo que podía provocar un desbordamiento en valores fuera de su rango limitado). Ahora también se admite insertar valoresDate32de 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_QPLyZSTD_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 habilitarenable_deflate_qpl_codecoenable_zstd_qat_codec. #92150 (Robert Schulze). - Ya no se admite
INSERTen columnasALIASsimples (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
Lazyse ha eliminado y ya no está disponible. #93627 (Alexey Milovidov). - El modo
transposed_with_wide_viewdemetric_logse ha eliminado debido a un error que lo hacía inutilizable. Ya no es posible definirsystem.metric_logcon 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_dotallydictionary_use_async_executorse 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_finalse 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 en1habilita la funcionalidad de forma incondicional, y establecerlo en0remite al nuevo ajusteenable_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_finalahora está habilitado de forma predeterminada, lo que garantiza queROW POLICYrespeteFINAL, como hacía originalmente. Si antes dependía deoptimize_move_to_prewhere_if_final=1para aplicar políticas de fila antes deFINAL, useapply_row_policy_after_final=0en su lugar. #97279 (Nikolai Kochetov).
Cambios de seguridad y control de acceso
joinGet/joinGetOrNullahora aplican los privilegiosSELECTsobre la tabla Join subyacente. EjecutarjoinGet('db.table', 'column', key)requiere el privilegioSELECTtanto en las columnas clave como en la columna de atributo que se recupera. Las consultas sin estos privilegios fallarán conACCESS_DENIED. Para migrar, otorgue permisos medianteGRANT SELECT ON db.join_table TO userpara obtener acceso completo a la tabla, oGRANT SELECT(key_col, attr_col) ON db.join_table TO userpara acceso a nivel de columna. #94307 (Vladimir Cherkasov).- Las consultas
CREATE TABLE ... AS ...ahora requieren el privilegioSHOW COLUMNSen lugar deSHOW 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.s3queueahora essystem.s3queue_metadata_cacheysystem.azure_queueahora essystem.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
colorOKLABToSRGBycolorSRGBToOKLABpara 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
Variantmediante el nuevoFunctionVariantAdaptor. #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_functionspara 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.primesy la función de tablaprimes, que contiene números primos en orden ascendente. #92776 (Nihal Z. Miaji). - Se añadió la columna
filesasystem.parts, que muestra el número de archivos en cada parte de datos. #94337 (Match). - Se añadió la tabla
system.fail_pointspara 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 unStorageTableProxyligero 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
PREWHEREyPREWHEREmultietapa 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 insertahora funciona con vistas materializadas dependientes. Cuando se produce una colisión deblock_id, se filtra el bloque original para eliminar las filas asociadas alblock_iden conflicto, y las filas restantes se transforman mediante todas las consultas relevantes de las vistas materializadas. #89140 (Sema Checherinda). - Los
async insertsahora 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_versionpara 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 [...] CACHEcomo una alternativa más clara a la ya existenteSYSTEM 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 CLUSTERahora pueden ejecutarse en bases de datos Replicated cuando está habilitada la configuraciónignore_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_bytespara 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 enfalsepara 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_schedulerahora usamax_min_fairde forma predeterminada en lugar defair_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_levelylogger.shutdown_console_levelpara 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_Infoal endpoint/metricsde 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_runsyast_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
INno 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 = 1ahora se admite como alias deEXPLAIN indexes = 1. #92774 (Pranav Tiwari).- Se ha mejorado el pushdown de filtros para las funciones de tabla
numbersyprimes: ClickHouse ahora puede inferir límites de valor conservadores a partir de las condicionesWHEREpara 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
startsWithUTF8si el prefijo contiene únicamente caracteres ASCII. #97055 (vkcku). assumeNotNull,coalesceeifNullahora 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_downahora está habilitada por defecto. #89313 (Alexey Milovidov). - La optimización
enable_join_runtime_filtersahora 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
FINALestá 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 DATABASEahora 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 COLUMNse ejecuta rápidamente después de una mutaciónDROP COLUMN. #96713 (Alexey Milovidov). - Las expresiones
ALTERen conflicto conUPDATEyRENAME COLUMNahora 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
PREWHEREmuy selectivos. #97231 (Nikita Taranov). joinGetahora 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_codecen 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
StorageEmbeddedRocksDBahora 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 dedetached/(p. ej., partes con prefijosbroken-on-startounexpected) sin tener que renombrarlas manualmente en el sistema de archivos. #74816 (Anton Popov). min_free_disk_bytes_to_perform_insertahora funciona correctamente con volúmenes JBOD. #90878 (Aleksandr Musorin).max_parts_to_merge_at_onceahora 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 perfildefault. #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_layerspara evitar un consumo excesivo de memoria. #96478 (Nikita Taranov). - El índice de texto ahora es GA. #96794 (Robert Schulze).
QBitahora es GA. #95358 (Raufs Dunamalijevs).QBitahora 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) ensystem.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_locationno 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
PREWHEREpara 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 COLUMNpara 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_arnyaws_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-encryptionya no se propagan a las solicitudesHeadObject,UploadPartyCompleteMultipartUpload. #64577 (Francisco J. Jurado Moreno). - Ahora se puede especificar
storage_class_nameen las colecciones con nombre para el motor de tabla S3 y la función de tablas3. #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 valoresDate,DateTimeyTimecomo argumentos. #87845 (Yarik Briukhovetskyi).mapContainsKeyLikeymapContainsValueLikeahora pueden usar un índice de texto enmapKeys()omapValues(). #93049 (Michael Jarrett).flipCoordinatesahora admite el tipoGeometry. #93303 (Bharat Nallan).- Se eliminó el límite de 64 tokens para las funciones
hasAnyTokensyhasAllTokens. #95152 (Elmi Ahmadov). - Se añadió
distanceCosinecomo alias decosineDistance, en línea con otras funciones de distancia. #96065 (Raufs Dunamalijevs). - Se añadió la función
iifa ClickHouse KQL. #94790 (happyso). use_variant_as_common_typeahora está habilitado de forma predeterminada, lo que permite usar tipos incompatibles dentro deArray, consultasUNIONy ramasif/multiIf/case. #90677 (Alexey Milovidov).
Configuración y ajustes
use_skip_indexes_on_data_readahora 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 columnasDate,Date32,Time,Time64,DateTimeyDateTime64. #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_complexitypara 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_listpara limitar el trazado contrace_profile_eventa determinados nombres de evento. #92298 (Alexey Milovidov). - Se añadió la configuración
type_json_allow_duplicated_key_with_literal_and_nested_objectpara 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_party el ajuste a nivel de consultamax_dynamic_subcolumns_in_json_type_parsingpara limitar las subcolumnas dinámicas en las columnas JSON durante la fusión y el análisis. #94184 (Pavel Kruglov). - Se añadió
use_statisticscomo alias deallow_statistics_optimize, en línea conuse_primary_keyyuse_skip_indexes. #94366 (Robert Schulze). - Se habilitó
input_format_numbers_enum_on_conversion_erroren 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_mergeahora viene habilitado de forma predeterminada para la versión de compatibilidad 26.2 y posteriores. #95917 (Christoph Wurm).core_dump.size_limitahora 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
pathahora 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_reasonsasystem.mutationspara mejorar el diagnóstico. #92206 (Shaohua Wang). - Se añadió la columna
creation(implicit/explicit) asystem.data_skipping_indices. #92378 (Raúl Marín). - Las tareas en ejecución ahora se reflejan en
system.background_schedule_pooly en la tabla de log correspondiente. #92587 (Azat Khuzhin). - Se añadió la métrica
QueryNonInternalpara hacer un seguimiento del número de consultas no internas en ejecución, lo que ayuda a supervisar la concurrencia con respecto al límitemax_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_addressyconnection_portaquery_logpara 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_statsy el endpoint HTTP/jemalloc.htmlpara la visualización interactiva de las estadísticas del asignador de memoria jemalloc. #97077 (Antonio Andelic). - Se añadió la tabla
system.jemalloc_profile_textpara 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_idsasystem.part_logpara los eventosMUTATE_PARTyMUTATE_PART_START. #93811 (Shaohua Wang). - Las configuraciones globales anidadas del servidor (por ejemplo,
logger.level) ahora son parcialmente visibles ensystem.server_settings. #94001 (Hechem Selmi). view_duration_msahora 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_logahora está disponible para Azure Blob Storage, Local y HDFS. Se añadió la columnaerror_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,KeeperBatchSizeElementsyKeeperBatchSizeBytes. #92149 (Miсhael Stetsyuk). - Las extensiones de Keeper
CHECK_STATyTRY_REMOVEahora 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_dataywith_stata las solicitudesgetChildrende 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_datade 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_ratiopara 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 exceededsi 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
TupleoMapcomo JSON. #92864 (Michael Kolupaev). - El lector de Parquet ahora admite tuplas vacías. #92868 (Michael Kolupaev).
- El tipo
Dateahora se serializa como el tipo nativodate32de Arrow en los formatos Arrow/ArrowStream (anteriormenteuint16). El comportamiento anterior se puede restaurar con la configuraciónoutput_format_arrow_date_as_uint16. #96860 (Alexey Milovidov). - El formato de salida
Hashahora 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 enNULLen lugar de en una tupla de elementosNULL. #95525 (Nihal Z. Miaji). - El formateador SQL ahora genera
COMMENTantes deAS SELECTen lugar de ponerSELECTentre 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_targetspara controlar si se respaldan los datos de las vistas materializadas actualizables. Los destinos de las vistas materializadas actualizables con estrategia de actualizaciónAPPENDsiempre se incluyen en la copia de seguridad. #93658 (Julia Kartseva). - Se añadió compatibilidad con colecciones con nombre definidas en SQL en
BACKUP/RESTOREpara 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_deduplicatepara 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 yfunction_namees compatible conREMOVE. #93345 (Pablo Marcos). - Se añadió
SYSTEM NOTIFY FAILPOINTpara failpoints con pausa ySYSTEM WAIT FAILPOINTpara PAUSE/RESUME. #92368 (Shaohua Wang). - Los nombres de las funciones de C++ en
system.trace_log,system.symbolsy la funcióndemangleahora 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
MaterializedPostgreSQLsidropReplicationSlotlanza una excepción durante el desenrollado de la pila. #96871 (Alexey Milovidov). - Se corrigió la posible presencia de restos residuales cuando
CREATE TABLEfalla. #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
ONde JOIN para los joinsANY,SEMIyANTIcuando 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
ParallelHashJoinpara predicados complejos, controlado por la configuraciónparallel_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
LIMITyOFFSETfraccionarios. #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=,INyhas. 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 BYson constantes debido a las condiciones deWHERE, lo que permite lecturas eficientes en orden inverso. Esto beneficia a consultas multitenant comoWHERE tenant='42' ORDER BY tenant, event_time DESC. #94103 (matanper). - Para consultas
FINALque usan una condición de clave primaria seguida de índices de omisión, el pasoPrimaryKeyExpandahora 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
distinctJSONPathspara leer solo las rutas JSON de las partes de datos, en lugar de toda la columna JSON. #92196 (Pavel Kruglov). - Se optimizó
uniqExactcuando elementos idénticos suelen aparecer de forma consecutiva. #93268 (Alexey Milovidov). - Se optimizó
isValidASCIIpara valores de entrada compuestos únicamente por caracteres ASCII. #93347 (Robert Schulze). - Se aceleró
uniqen tipos numéricos agrupando inserciones en lotes cuando es posible (no NULL, sin-If, sinGROUP BY, sinIPv6niString). #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
INSERTy 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
sparseGramsal 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
INSERTal 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
minmaxen columnas de tiempo e índicesbloom_filteren las columnasquery_id/initial_query_idde las tablas de logs del sistema para acelerar el filtrado. #96712 (Alexey Milovidov). - Se evitó una regresión en el uso de memoria en
INSERTcuando la deduplicación no está habilitada. #96503 (Alexey Milovidov).
Optimización de memoria
- Se redujo la huella de memoria de
ASTLiteralal eliminar campos no utilizados cuando el resaltado y el análisis deVALUESno 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
CachedOnDiskReadBufferFromFileen aproximadamente 50 veces. #96098 (Azat Khuzhin). HashTable::resizeya 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
ReplicatedMergeTreecon 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
observeOperationsal cambiar a funciones hash más rápidas y contadores sin bloqueos. #95962 (Miсhael Stetsyuk).
Correcciones de errores
Todas las correcciones de errores (haga clic para expandir)
Todas las correcciones de errores (haga clic para expandir)
Correcciones de JOIN
- Se corrigió el error
INCOMPATIBLE_TYPE_OF_JOINen 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
JOINcon la cláusulaUSINGyjoin_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_ERRORcausado 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 != NULLparafull_sorting_joinen una columnaLowCardinality(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 JOINtení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íaILLEGAL_TYPE_OF_ARGUMENTen 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_BLOCKcuando 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
FilterStepno se añadiera correctamente cuando se aplicaba un runtime filter de join en la tablaMerge. #94021 (Alexander Gololobov). - Se corrigió la conversión de tipos al supertipo durante una operación JOIN del almacenamiento
Joincon la cláusulaUSING. #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
NULLen una tablaJoincon claveNullable(String). #96002 (Alexey Milovidov). - Se corrigió el error
NOT_SUPPORTEDal usar el algoritmo de joindirectcon 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
ONde 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
arrayJoinproducí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íanarrayJoin. #96989 (Alexey Milovidov). - Se corrigió
LOGICAL_ERRORcuandoarrayJoinen la cláusulaWHEREhací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 enanalyzer_compatibility_join_using_top_level_identifiercuando la columna deUSINGtenía tipos diferentes. #95808 (Vladimir Cherkasov). - Se corrigió un error lógico relacionado con
analyzer_compatibility_join_using_top_level_identifiery 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_optimizationpara funciones de ventana y múltiples argumentos. #92376 (Raúl Marín). - Se corrigió el formato inconsistente del AST de
arrayElementcon un literal negado. #92293 (Pavel Kruglov). - Se corrigió
NOT INcon 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 columnen la optimizaciónuse_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_lookupno 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/leadno funcionaban con consultas distribuidasremote(). #93858 (Nihal Z. Miaji). - Se corrigió un error en la lógica de omisión de datos al usar
not match(...)enWHERE, 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(...)onot CAST(...)enWHERE, 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 provocabaILLEGAL_COLUMNparahostName()al fusionar tablas locales y remotas/Distributed. #93286 (Jinlin). - Se corrigió el error
NO_SUCH_COLUMN_IN_TABLEen el motorMergeal usar tablas con alias. #92910 (Pavel Kruglov). - Se corrigió la consulta
SELECTcon un predicado sobre varias columnas, con índices de omisión con filtro bloom y condicionesORyNOT, 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_offsetal 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/OFFSETnegativo 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/OFFSETen consultas distribuidas. #96475 (Nihal Z. Miaji). - Se corrigió la función
IN, que devolvía resultados incorrectos con valoresNULLcuandotransform_null_inestaba habilitado. #95674 (Nihal Z. Miaji). - Se corrigió el fallo de
IN (col)al usar una sola referencia de columna, que producía el errorUNSUPPORTED_METHOD. #97646 (Alexey Milovidov). - Se corrigió la reescritura de
optimize_syntax_fuse_functionspara convertirsum/count/avgensumCount()cuando el argumento de agregación eraLowCardinality(Nullable). #96239 (Nihal Z. Miaji). - Se corrigió la poda incorrecta de particiones para las funciones
not INynot 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_ERRORen 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
SETTINGSpor subconsulta no se aplicaba a funciones de tabla comofileen 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_ARGUMENTSal consultar tablas con expresiones lambda dentro de columnas ALIAS mediante la función de tablamerge()con el analizador habilitado. #97551 (Alexey Milovidov). - Se corrigió un problema por el que
EXCEPT ALLyINTERSECT ALLignoraban la multiplicidad de las filas y se comportaban como sus equivalentesDISTINCT. #96876 (Alexey Milovidov). - Se corrigió un fallo de aserción en
WindowTransformcon un offsetPRECEDINGgrande. #96026 (Alexey Milovidov). - Se solucionó una excepción al usar funciones de ventana con
group_by_use_nulls = 1yCUBE/ROLLUP/GROUPING SETS. #96878 (Alexey Milovidov). - Se corrigió la interacción entre
GROUPING SETS,group_by_use_nullsyTupleconLowCardinality, que producía una estructura de bloque inesperada. #96358 (Alexey Milovidov). - Se corrigió un error lógico al usar
GROUP BY ... WITH ROLLUP/CUBEcuando las claves incluíanLowCardinality(Nullable(...))dentro deNullable(Tuple(...)). #97647 (Alexey Milovidov). - Se corrigió un error de aserción en
IfTransformStringsToEnumPasscuandoifotransformdevolvíaNullable(String). #97002 (Alexey Milovidov). - Se corrigió
ACCESS_DENIEDpara los usuarios sin permiso paraCREATE TEMPORARY TABLEcuandooptimize_inverse_dictionary_lookupreescribía los predicadosdictGet(...). #97484 (Nihal Z. Miaji). - Se corrigió una incompatibilidad de tipos en la función
ifentreUInt64eInt32en 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
DateTimeaDateTime64(p. ej., enCASE/if/multiIfcon distintos tiposDateTime). #96879 (Alexey Milovidov). - Se corrigió el uso de valores no inicializados en
formatDateTimecon especificadores de formato de ancho variable. #96133 (Alexey Milovidov). - Se solucionó
std::terminateenindexOfAssumeSortedal 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-orderutilizara políticas de filas. #97538 (Janos Benjamin Antal). - Se corrigió
LOGICAL_ERRORal usar columnas indexadas por texto con la cláusulaQUALIFY. #97313 (Alexey Milovidov). - Se corrigió un posible cierre inesperado cuando la cláusula
WHEREcontenía más de 32 expresiones conAND/OR. #97698 (Shankar Iyer). - Se corrigió la incompatibilidad en la estructura de bloques en la optimización
removeUnusedColumnsal usarindexHintcon expansión de asterisco en tablas conFINAL. #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.warningsno 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 transactional ejecutarATTACH AS REPLICATED. #91772 (Shaohua Wang). - Se corrigió un posible error
FILE_DOESNT_EXISTtras una mutación en una columna dispersa conratio_of_defaults_for_sparse_serialization=0.0. #92860 (Pavel Kruglov). - Se corrigió un posible error
FILE_DOESNT_EXISTtras una mutación en una columna dispersa cuandoratio_of_defaults_for_sparse_serializationse cambiaba a1.0medianteALTER. #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_BLOCKal 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_ERRORal restaurarReplicatedMergeTreecon 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
LowCardinalityen los resultados de expresiones SET cuando fue necesario durante la agregación TTL. #92971 (Seva Potapov). - Se solucionó
Cannot add action to empty ExpressionActionsChainparaALTER 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 USERal usarON 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 COLUMNcon í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 datosReplicated. #92418 (Kseniia Sumarokova). - Se corrigió una condición de carrera entre
REPLACE PARTITIONy 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 PARTITIONy las mutaciones en segundo plano que podía provocar la reaparición de datos antiguos. #97105 (Alexey Milovidov). - Se corrigieron las mutaciones atascadas cuando
PartCheckThreadvolvió a poner en cola unGET_PARTpara una parte ya mutada. #97162 (Alexey Milovidov). - Se corrigió el error por el que
ALTER TABLE DROP COLUMNfallaba 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_projectiontras 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_granularityyindex_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 offsetsal leer tablas con granularidad no adaptativa del índice usandoORDER 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 REPLICApodí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 enDatabaseReplicated. #97276 (Alexey Milovidov). - Se corrigió la excepción de
assert_castal generar estadísticas de columnas después de queALTER TABLE MODIFY COLUMNcambiara 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 messageal esperar un DDL distribuido y eliminar de forma concurrente la base de datos Replicated. #95664 (Alexander Tokmakov). - Se corrigió un error lógico en
KeyConditioncuando una tabla tenía una clave primaria Nullable y la consulta utilizabacoalescecon 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
tupleElementa arrays de JSON. #95647 (Pavel Kruglov). - Se corrigió la ejecución de
tupleElementsobre JSON con rutas anidadas que devolvía resultados incorrectos. #95907 (Pavel Kruglov). - Se corrigió un problema en
tupleElementque 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 prefijopath(incluso claves comopathpath), 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_objecta 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_discriminatorsdebido a una optimización incorrecta del filtrado in-place para columnas de tipo Variant. #96410 (Alexey Milovidov). - Se corrigió un fallo en
ifNullal usar un argumentoVariantenGROUP BY. #96790 (Alexey Milovidov). - Se corrigió un error lógico en
FunctionVariantAdaptorrelacionado con funciones que requieren argumentos constantes, comoarrayROCAUC. #97116 (Bharat Nallan). - Se corrigió
LOGICAL_ERRORenFunctionVariantAdaptorcuando una función devolvía el tipoNothing. #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_ERRORenconcatcuando un argumento incluía un tipoVariantconLowCardinalitydentro. #97654 (Alexey Milovidov). - Se corrigieron resultados incorrectos cuando las columnas
LowCardinalityse convertían aNullable. #96483 (Nihal Z. Miaji). - Se corrigió el manejo de los tipos
LowCardinality NullableenCASTcuandocast_keep_nullableestaba habilitado. #95747 (Alexey Milovidov). - Se corrigió la excepción
ColumnNullable is not compatible with originalal convertir tipos anidados complejos. #96924 (Alexey Milovidov). - Se corrigió
LOGICAL_ERRORal usarisNull/isNotNullen las subcolumnas de tiposNullable(Tuple(... Nullable(T) ...)). #97582 (Alexey Milovidov). - Se corrigió
LOGICAL_ERRORen la conversión de Array aQBit. #97413 (Alexey Milovidov). - Se corrigió
LOGICAL_ERRORal leer conjuntamente una columna dispersa y su subcolumna. #97515 (Pavel Kruglov). - Se corrigió
LOGICAL_ERRORal leer la subcolumna.sizede unNullable(String)disperso dentro de una Tuple con PREWHERE. #97264 (Alexey Milovidov). - Se corrigió un error de aserción en
SetyMergeTreeIndexSetal procesar columnas con subcolumnas internas dispersas. #97493 (Alexey Milovidov). - Se corrigió un posible error
SIZES_OF_COLUMNS_DOESNT_MATCHal ordenar una columna de tupla vacía. #92520 (Pavel Kruglov). - Se corrigieron errores en la decodificación de
DELTA_BYTE_ARRAYen 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
prewherese utilizaba en otra parte de la consulta. #90635 (Max Kainov). - Se corrigió
LOGICAL_ERRORen 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
ProtobufListdesde archivos vacíos, que producía registros fantasma en tablas vacías. #96007 (Alexey Milovidov). - Se corrigió una regresión en el códec
Gorillacuando 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,UUIDy otros tipos. #96017 (Alexey Milovidov). - Se corrigió el problema por el que los valores
FixedStringse escapaban incorrectamente en las consultas a SQLite y PostgreSQL. #96019 (Alexey Milovidov). - Se agregó la configuración
input_format_numbers_enum_on_conversion_errorpara 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,mapContainsKeyymapContainsValue, 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_v1con longitud de ngram > 8 que provocaban una excepción. #92672 (Robert Schulze). - Se corrigió un problema en el índice
ngram_bfcon datos no UTF-8 que provocaba una lectura de memoria no inicializada. #93663 (Alexey Milovidov). - Se corrigió
stack-use-after-scopeen 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_keydeshabilitado 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
INdeWHERE. #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ó
DateporDate32en 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_headerno válido que provocaba fallos ensystem.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
ReadBufferFromS3que 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
copyS3Filerelacionada con multipart_tags. #97227 (Azat Khuzhin). - Ejecutar una mutación
ALTER UPDATEno válida en tablas tipo archivo sobre almacenamiento de objetos (S3, Azure) ya no provocaba una desreferenciación denullptr. #96162 (Alexey Milovidov).
Correcciones de S3Queue
- Se solucionó el error
Failed to set file processing within 100 retriesen 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 COLUMNSal usar el motor de tablamerge. #93695 (János Benjamin Antal). - Se corrigió una vulnerabilidad por desbordamiento de enteros en la deserialización del estado de
groupConcatque 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::containsdevolví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
passwordde la función de tablaredisahora 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 objetosplain_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
StorageKeeperMapdebido a un error de uso tras liberar memoria. #97336 (Alexey Milovidov).
Correcciones de fallos y estabilidad
- Se corrigió un fallo al leer de una
Connectiondesconectada. #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
tokenscon 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 cancellationenestimateCompressionRatio(). #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
TraceSenderno se actualizaba, lo que provocaba flushes intercalados de distintos hilos. #93966 (Miсhael Stetsyuk). - Se almacenaron en
QueryPipelinepunteros compartidos aIStoragepara garantizar que los objetosIStorageno se destruyan mientrasPipelineExecutorsiga 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 WORKLOADcuando 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
ProcessListdebido 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_timeelevado. #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
clearCachescausado por la destrucción prematura de instantáneas de almacenamiento almacenadas en caché. #96995 (Alexey Milovidov). - Se corrigió
heap-use-after-freeenCREATE TABLEcon 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_calleddeDatabaseMaterializedPostgreSQL. #97554 (Alexey Milovidov). - Se corrigió una condición de carrera en la carga paralela del Diccionario
HASHEDpor 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::readBinarycuando 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
MaterializedPostgreSQLcuandodropReplicationSlotlanzaba 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 DATABASEpara la base de datos Backup. #92541 (Azat Khuzhin).
Otras correcciones de errores
- Se corrigió el manejo de arrays vacíos en
handleAllTokenspara las funcioneshasAllTokensyhasAnyTokens. #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_dateensystem.asynchronous_metric_log. #95947 (Raúl Marín). - Se corrigió un problema por el que
system.functionsmostraba una cadena vacía en lugar decategories = 'Internal'para las funciones internas. #97315 (Robert Schulze). - Se corrigió un posible error de lógica en el diccionario
ip_triecuando 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ó
filterPartsByVirtualColumnspara predicados siempre falsos. #97620 (Bharat Nallan). - Se corrigió un problema por el que
ColumnConstno se materializaba antes del squashing. #97019 (Hasyimi Bahrudin).