Cambios incompatibles con versiones anteriores
- Las funciones
greatestyleastahora ignoran los valores de entrada NULL, mientras que antes devolvían NULL si uno de los argumentos era NULL. Por ejemplo,SELECT greatest(1, 2, NULL)ahora devuelve 2. Esto hace que su comportamiento sea compatible con PostgreSQL. #65519 (kevinyhzou). - Ya no se permiten tipos Variant/Dynamic en ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY de forma predeterminada, porque pueden dar lugar a resultados inesperados. #69731 (Pavel Kruglov).
- Se eliminan las tablas del sistema
generate_seriesygenerateSeries. Se añadieron por error aquí: #59390. #71091 (Alexey Milovidov). - Se elimina
StorageExternalDistributed. Cierra #70600. #71176 (flynn). - La configuración del servidor (users.xml) ahora también se aplica al cliente. Esto es útil para configuraciones de formato, por ejemplo,
date_time_output_format. #71178 (Michael Kolupaev). - Se corrige un posible error
No such file or directorydebido a símbolos especiales sin escape en archivos de subcolumnas JSON. #71182 (Pavel Kruglov). - Los motores de tabla Kafka, NATS y RabbitMQ ahora están cubiertos por sus propios grants en la jerarquía
SOURCES. Añada grants a cualquier usuario de base de datos no predeterminado que cree tablas con estos tipos de motor. #71250 (Christoph Wurm). - Se comprueba la consulta completa de la mutación antes de ejecutarla (incluidas las subconsultas). Esto evita ejecutar accidentalmente una consulta no válida y acumular mutaciones inservibles que bloquean mutaciones válidas. #71300 (Christoph Wurm).
- Se cambia el nombre de la configuración de la caché del sistema de archivos
skip_download_if_exceeds_query_cacheafilesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit. #71578 (Kseniia Sumarokova). - Se prohíben los tipos Dynamic/Variant en las funciones min/max para evitar confusiones. #71761 (Pavel Kruglov).
- Se elimina la compatibilidad con
Enum, así como con los argumentosUInt128yUInt256endeltaSumTimestamp. También se elimina la compatibilidad conInt8,UInt8,Int16yUInt16en el segundo argumento (“timestamp”) dedeltaSumTimestamp. #71790 (Alexey Milovidov). - Se añadió validación de la consulta de origen cuando ClickHouse se usa como origen para un Diccionario. #72548 (Alexey Katsman).
Nuevas características
- Se implementa el comando SYSTEM LOAD PRIMARY KEY para cargar los índices primarios de todas las partes de una tabla especificada, o de todas las tablas si no se especifica ninguna. Esto será útil para benchmarks y para evitar latencia adicional durante la ejecución de consultas. #66252 (ZAWA_ll).
- Se añadió la instrucción
SYSTEM LOAD PRIMARY KEYpara cargar los índices primarios de todas las partes de una tabla determinada, o de todas las tablas si no se especifica ninguna. Esto puede ser útil para benchmarking y para evitar latencia adicional durante la ejecución de consultas. #67733 (ZAWA_ll). - Añade la consulta
CHECK GRANTpara comprobar si el usuario o rol actual tiene concedido el privilegio específico y si la tabla o columna correspondiente existe en memoria. #68885 (Unalian). - Se añadió sintaxis SQL para la gestión de cargas de trabajo y recursos. Consulte la documentación. #69187 (Sergei Trifonov).
- El formato de almacenamiento de datos Iceberg ofrece amplias opciones para modificar el esquema de una tabla. En esta pull request, se ha implementado la lectura de una tabla en formato Iceberg con cambios en el orden de las columnas, los nombres de las columnas y las extensiones simples de tipos. #69445 (Daniil Ivanik).
- Permitir que cada método de autenticación tenga su propia fecha de vencimiento; eliminar la fecha de vencimiento de la entidad de usuario. #70090 (Arthur Passos).
- Envía roles de usuario externos desde el nodo que origina la consulta a otros nodos del clúster. Útil cuando solo ese nodo tiene acceso al autenticador externo (como LDAP). #70332 (Andrey Zvonov).
- Se permite
alterde String a JSON. Este PR también cambia la serialización de los tipos JSON y Dynamic a la nueva versión V2. La versión anterior V1 todavía puede usarse habilitando la opciónmerge_tree_use_v1_object_and_dynamic_serialization(puede usarse durante la actualización para poder revertir la versión sin problemas). #70442 (Pavel Kruglov). - Se agregó la función
toUnixTimestamp64Second, que convierte unDateTime64en un valorInt64con precisión fija de segundos, de modo que se pueda devolver un valor negativo si la fecha es anterior a las 00:00:00 UTC del jueves 1 de enero de 1970. #70597 (zhanglistar). - Añade la nueva configuración
enforce_index_structure_match_on_partition_manipulationpara permitir ATTACH cuando las proyecciones y los índices secundarios de la tabla de origen sean un subconjunto de los de la tabla de destino. Cierra #70602. #70603 (zwy991114). - La salida de la función
castdifiere de la de Apache Spark, lo que provoca diferencias en el proyecto Gluten; véase https://github.com/apache/incubator-gluten/issues/7602. Este PR añade una función de compatibilidad para el formato de salida de texto de Spark, desactivada de forma predeterminada. #70957 (zhanglistar). - Se añadió un nuevo tipo de header para endpoints de S3 para la autenticación de usuarios (
access_header). Esto permite obtener un header de acceso con la prioridad más baja, que se sobrescribirá conaccess_key_iddesde cualquier otra fuente (por ejemplo, un esquema de tabla o una colección nombrada). #71011 (MikhailBurdukov). - Implementación inicial de los niveles de configuración. #71145 (Raúl Marín).
- Se añadió soporte para la cláusula staleness en el operador ORDER BY WITH FILL. #71151 (Mikhail Artemenko).
- Implementar un CAST simple de Map/Tuple/Object al nuevo JSON mediante serialización/deserialización a partir de una cadena JSON. #71320 (Pavel Kruglov).
- Se añadieron alias
anyRespectNulls,firstValueRespectNullsyanyValueRespectNullspara la función de agregaciónany. También se añadieron aliasanyLastRespectNullsylastValueRespectNullspara la función de agregaciónanyLast. Esto permite usar una sintaxis más natural basada únicamente en camel case, en lugar de una sintaxis mixta de camel case y guiones bajos; por ejemplo:SELECT anyLastRespectNullsStateIfen lugar deanyLast_respect_nullsStateIf. #71403 (Peter Nguyen). - Se añadió el parámetro de configuración
date_time_utc, que permite que el formato de los registros JSON admita fechas y horas UTC en formato RFC 3339/ISO8601. #71560 (Ali). - Se añadió una opción para seleccionar qué lado del join actuará como tabla interna (build) en el plan de consulta. Esto se controla con
query_plan_join_swap_table, que puede establecerse enauto. En este modo, ClickHouse intentará elegir la tabla con el menor número de filas. #71577 (Vladimir Cherkasov). - Se optimizó el uso de memoria para los valores de granularidad del índice cuando la granularidad es constante para la parte. Se añadió la posibilidad de seleccionar siempre una granularidad constante para la parte (ajuste
use_const_adaptive_granularity), lo que ayuda a garantizar que su uso de memoria esté siempre optimizado. Esto resulta útil en workloads grandes (billones de filas en almacenamiento compartido) para evitar el crecimiento constante del uso de memoria provocado por los metadatos (valores de granularidad del índice) de las partes de datos. #71786 (Anton Popov). - Se implementa
allowed_feature_tiercomo un interruptor global para deshabilitar todas las funciones experimentales y beta. #71841 (Raúl Marín). - Se añaden las funciones de tabla
iceberg[S3;HDFS;Azure]Cluster,deltaLakeClusteryhudiCluster. #72045 (Mikhail Artemenko). - Se añade la sintaxis
ALTER USER {ADD|MODIFY|DROP SETTING},ALTER USER {ADD|DROP PROFILE}, y lo mismo paraALTER ROLEyALTER PROFILE. #72050 (pufit). - Se añadió la función
arrayPrAUC, que calcula el AUC (área bajo la curva) de la curva de precisión y exhaustividad. #72073 (Emmanuel). - Se agregó una caché para el índice primario de las tablas
MergeTree(puede habilitarse con el ajuste de tablause_primary_key_cache). Si la carga diferida y la caché están habilitadas para el índice primario, este se cargará en la caché bajo demanda (de forma similar a la caché de marcas) en lugar de mantenerse en memoria de forma permanente. Se agregó el precalentamiento del índice primario en inserts/merges/fetches de partes de datos y al reiniciar la tabla (puede habilitarse con el ajusteprewarm_primary_key_cache). #72102 (Anton Popov). - Se añade la función indexOfAssumeSorted para tipos Array. Optimiza la búsqueda en el caso de un Array ordenado de forma no decreciente. #72517 (Eric Kurbanov).
- Permite usar un delimitador como segundo argumento opcional de la función de agregación
groupConcat. #72540 (Yarik Briukhovetskyi). - Una nueva opción de configuración,
http_response_headers, que permite personalizar los encabezados de respuesta HTTP. Por ejemplo, puede indicarle al navegador que renderice una imagen almacenada en la base de datos. Esto cierra #59620. #72656 (Alexey Milovidov). - Añade la función
fromUnixTimestamp64Second, que convierte un valor de timestamp Unix de tipo Int64 en un DateTime64. #73146 (Robert Schulze).
Mejoras de rendimiento
- Agrega 2 nuevas configuraciones
short_circuit_function_evaluation_for_nullsyshort_circuit_function_evaluation_for_nulls_thresholdque permiten ejecutar funciones sobre columnasNullablecon evaluación de cortocircuito cuando la proporción de valores NULL en el bloque de datos supera el umbral especificado. Esto significa que la función se ejecutará solo en las filas con valores no nulos. Se aplica solo a las funciones que devuelven un valor NULL para las filas en las que al menos un argumento es NULL. #60129 (李扬). - Se reduce el uso de memoria de
clickhouse disks remove --recursiveen discos de almacenamiento de objetos. #67323 (Kirill). - Ahora ya no se copiarán las columnas de los bloques de entrada para
join_algorithm='parallel_hash'al distribuirlas entre hilos para su procesamiento en paralelo. #67782 (Nikita Taranov). - Se habilita la compilación JIT para más expresiones:
abs/bitCount/sign/modulo/pmod/isNull/isNotNull/assumeNotNull/to(U)Int*/toFloat*, funciones de comparación (=,<,>,>=,<=) y funciones lógicas (and,or). #70598 (李扬). - Ahora se usará el algoritmo
parallel_hash(si corresponde) cuando la configuraciónjoin_algorithmesté establecida endefault. Las dos alternativas anteriores (directyhash) seguirán considerándose cuando no se pueda usarparallel_hash. #70788 (Nikita Taranov). - Se optimizó el algoritmo de fusión
Replacingpara partes no superpuestas. #70977 (Anton Popov). - No enumerar las partes detached de los discos readonly y de escritura única en las métricas y en system.detached_parts. #71086 (Alexey Milovidov).
- No calcular las métricas asíncronas pesadas de forma predeterminada. La funcionalidad se introdujo en #40332, pero no conviene tener una tarea pesada en segundo plano cuando solo la necesita un único cliente. #71087 (Alexey Milovidov).
- Mejora el rendimiento y la precisión del intervalo de recopilación de system.query_metric_log al reducir la sección crítica. #71473 (Pablo Marcos).
- Se añade una opción para extraer expresiones comunes de las cláusulas
WHEREyONcon el fin de reducir el número de tablas hash utilizadas durante los JOIN. Se puede habilitar conoptimize_extract_common_expressions = 1. #71537 (János Benjamin Antal). - Permite usar índices en consultas
SELECTconLowCardinality(String). #71598 (Yarik Briukhovetskyi). - Durante la ejecución de consultas con réplicas paralelas y el plan local habilitado, se omite en los workers el análisis de índices de omisión. El coordinador elegirá los rangos que deben leer los workers en función del análisis de índices realizado por su parte (en el iniciador de la consulta). #72109 (Igor Nikonov).
- Se restablece la optimización para leer subcolumnas de una única columna en partes compactas de https://github.com/ClickHouse/ClickHouse/pull/57631. Se eliminó accidentalmente. #72285 (Pavel Kruglov).
- Se acelera la ordenación de columnas
LowCardinality(String)mediante la desvirtualización de llamadas en el comparador. #72337 (Alexander Gololobov). - Se optimiza la función argMin/Max para algunos tipos de datos simples. #72350 (alesapin).
- Optimiza el bloqueo en el memory tracker mediante bloqueos compartidos para reducir la contención. #72375 (Jiebin Sun).
- Se añade una nueva configuración,
use_async_executor_for_materialized_views. Utiliza la ejecución asíncrona y, potencialmente, multihilo de la consulta de la vista materializada; puede acelerar el procesamiento de vistas durante INSERT, pero también consumir más memoria. #72497 (alesapin). - Los valores predeterminados de los ajustes
max_size_to_preallocate_for_aggregation,max_size_to_preallocate_for_joinsse aumentaron aún más hasta10^12, por lo que la optimización se aplicará en un mayor número de casos. #72555 (Nikita Taranov). - Se mejoró el rendimiento de la deserialización de los estados de las funciones de agregación (en el tipo de dato
AggregateFunctiony en las consultas distribuidas). También se mejoró ligeramente el rendimiento del análisis del formatoRowBinary. #72818 (Anton Popov).
Mejora
- Las funciones de orden superior con arrays constantes y argumentos capturados constantes devolverán valores constantes. #58400 (Alexey Milovidov).
- Optimización de lectura en orden mediante la generación de filas virtuales, para que se lean menos datos durante el merge sort; especialmente útil cuando existen múltiples partes. #62125 (Shichao Jin).
- Los nombres de los pasos del plan de ejecución de la consulta (
EXPLAIN PLAN json=1) y los nombres de los procesadores del pipeline (EXPLAIN PIPELINE compact=0,graph=1) ahora tienen un identificador único como sufijo. Esto permite relacionar la salida del profiler de los procesadores y las trazas de OpenTelemetry con la salida de EXPLAIN. #63518 (qhsong). - Se añadió la opción de comprobar que el objeto exista después de escribirlo en Azure Blob Storage; esto se controla mediante la configuración
check_objects_after_upload. #64847 (Smita Kulkarni). - Corregir la lógica de use-after-dtor en destroyElements de HashTable. #65279 (cangyin).
- Usar la base de datos
Atomicde forma predeterminada enclickhouse-local. Resuelve los puntos 1 y 5 de #50647. Cierra #44817. #68024 (Alexey Milovidov). - El búfer de escritura debe cancelarse o finalizarse explícitamente. Las excepciones interrumpen el protocolo HTTP para notificar al cliente de un error. #68800 (Sema Checherinda).
- Informar sobre los hosts de DDLWorker en ejecución creando replica_dir y marcando las réplicas como activas en DDLWorker. #69658 (Tuan Pham Anh).
-
- Refactorización de
DDLQueryStatusSource: - Cambiar el nombre deDDLQueryStatusSourceaDistributedQueryStatusSourcey convertirla en una clase base - Crear dos subclases,DDLOnClusterQueryStatusSourceyReplicatedDatabaseQueryStatusSource, derivadas deDDLQueryStatusSource, para consultar respectivamente el estado de las tareas DDL deDDL On Cluster y de las bases de datos Replicated. 2. Añadir compatibilidad para dejar de esperar a hosts sin conexión enDDLOnClusterQueryStatusSource`. #69660 (Tuan Pham Anh).
- Refactorización de
- Se añade una nueva lógica de cancelación:
CancellationCheckercomprueba los tiempos de espera de cada consulta iniciada y las detiene cuando se alcanza el tiempo límite. #69880 (Yarik Briukhovetskyi). - Se eliminó la configuración
allow_experimental_join_condition, lo que permite las condiciones no equi de forma predeterminada. #69910 (Vladimir Cherkasov). - Se habilita
parallel_replicas_local_plande forma predeterminada. La creación de un plan local completo en el iniciador de la consulta mejora el rendimiento de las réplicas paralelas con un menor consumo de recursos y ofrece más posibilidades de aplicar optimizaciones de consultas. #70171 (Igor Nikonov). - Se añade la posibilidad de configurar usuario/contraseña en http_handlers (para
dynamic_query_handler/predefined_query_handler). #70725 (Azat Khuzhin). - Se admite
ALTER TABLE ... MODIFY/RESET SETTING ...para ciertas configuraciones del almacenamiento S3Queue. #70811 (Kseniia Sumarokova). - No llame a la API de almacenamiento de objetos al listar directorios, ya que puede resultar poco rentable. En su lugar, almacene la lista de nombres de archivo en memoria. Como contrapartida, aumentan el tiempo de carga inicial y la memoria necesaria para almacenar los nombres de archivo. #70823 (Julia Kartseva).
- Se añadió el parámetro
--threadsaclickhouse-compressor, lo que permite comprimir datos en paralelo. #70860 (Alexey Milovidov). - Hacer configurable el tamaño del historial del cliente Replxx. #71014 (Jiří Kozlovský).
- Se añadió una configuración
prewarm_mark_cacheque permite cargar las marcas en la caché de marcas durante las inserciones, las fusiones, la obtención de partes y al arrancar la tabla. #71053 (Anton Popov). - Soporte para booleanos en el lector nativo de Parquet. #71055 (Arthur Passos).
- Reintentar ante más errores al interactuar con S3, como “Malformed message”. #71088 (Alexey Milovidov).
- Se reduce el nivel de log de algunos mensajes sobre S3. #71090 (Alexey Milovidov).
- Permite escribir archivos HDFS con espacios. #71105 (exmy).
system.session_logestá bastante correcto. Con esto se cierra #51760. #71150 (Alexey Milovidov).- Corrige los
joins RIGHT/FULLen consultas con réplicas paralelas. Ahora, losjoins RIGHTpueden ejecutarse con réplicas paralelas (la lectura de la tabla derecha se distribuye). Losjoins FULLno pueden paralelizarse entre nodos y se ejecutan localmente. #71162 (Igor Nikonov). - Se añadieron opciones de configuración que limitan el número de tablas replicadas, diccionarios y vistas. #71179 (Kirill).
- Corrige #71227. #71286 (Arthur Passos).
- Volcado automático a disco de
GROUP BY/ORDER BYsegún el uso de memoria del servidor/usuario. Se controla con los ajustes de la consultamax_bytes_ratio_before_external_group_by/max_bytes_ratio_before_external_sort. #71406 (Azat Khuzhin). - Añade los dashboards por host
Overview (host)yCloud overview (host)al dashboard avanzado. #71422 (alesapin). - La función
translateahora permite eliminar caracteres si el argumentofromcontiene más caracteres que el argumentoto. Ejemplo:SELECT translate('clickhouse', 'clickhouse', 'CLICK')ahora devuelveCLICK. #71441 (shuai.xu). - Se añadieron las nuevas funciones
parseDateTime64,parseDateTime64OrNullyparseDateTime64OrZero. A diferencia de la función existenteparseDateTime(y sus variantes), devuelven un valor de tipoDateTime64en lugar deDateTime. #71581 (kevinyhzou). - Reducir en memoria el tamaño del array index_granularity para disminuir el consumo de memoria de la familia de motores de tabla MergeTree. #71595 (alesapin).
- Las aplicaciones de línea de comandos resaltarán la sintaxis incluso en sentencias múltiples. #71622 (Alexey Milovidov).
- Las aplicaciones de línea de comandos devolverán códigos de salida distintos de cero cuando se produzcan errores. En versiones anteriores, la aplicación
disksdevolvía cero en caso de error, y otras aplicaciones devolvían cero para los errores 256 (PARTITION_ALREADY_EXISTS) y 512 (SET_NON_GRANTED_ROLE). #71623 (Alexey Milovidov). - El formato
Vertical(que también se activa cuando terminas tu consulta con\G) incorpora las características de los formatos Pretty, como: - resaltar los grupos de miles en los números; - mostrar una indicación legible para el número. #71630 (Alexey Milovidov). - Permite deshabilitar el aumento del búfer en memoria para la caché del sistema de archivos mediante la configuración
filesystem_cache_prefer_bigger_buffer_size. #71640 (Kseniia Sumarokova). - Se añade una configuración independiente,
background_download_max_file_segment_size, para el tamaño máximo de los segmentos de archivo en las descargas en segundo plano de la caché del sistema de archivos. #71648 (Kseniia Sumarokova). - Cambia el valor por defecto de
enable_http_compressionde 0 a 1. Cierra #71591. #71774 (Peter Nguyen). - Se admite ALTER de Object a JSON. #71784 (Pavel Kruglov).
- Análisis del tipo JSON ligeramente mejorado: si el bloque actual para la ruta JSON contiene valores de varios tipos, se intentará elegir el tipo más adecuado probando los tipos en un orden especial de best effort. #71785 (Pavel Kruglov).
- Anteriormente, al leer desde
system.asynchronous_metrics, había que esperar a que terminara la actualización concurrente. Esto puede llevar mucho tiempo si el sistema está sometido a una carga elevada. Con este cambio, siempre se pueden leer los valores recopilados previamente. #71798 (Alexander Gololobov). - Se establecieron
polling_max_timeout_msen 10 minutos ypolling_backoff_msen 30 segundos. #71817 (Kseniia Sumarokova). - Consultas como ‘SELECT - FROM t LIMIT 1’ solían cargar los índices de las partes aunque no se utilizaran. #71866 (Alexander Gololobov).
- Allow_reorder_prewhere_conditions está activado de forma predeterminada con la configuración de compatibilidad anterior. #71867 (Raúl Marín).
- No se incremente el contador
ILLEGAL_TYPE_OF_ARGUMENTen la tablasystem.errorscuando se utilice la funciónbitmapTransformy los tipos de argumento sean válidos. #71971 (Dmitry Novik). - Al recuperar datos directamente de un Diccionario mediante el almacenamiento Dictionary, la función de tabla
dictionaryo unSELECTdirecto sobre el propio diccionario, ahora basta con tener el permisoSELECTo el permisodictGetpara el diccionario. Esto se alinea con intentos anteriores de evitar la elusión de las ACL: https://github.com/ClickHouse/ClickHouse/pull/57362 y https://github.com/ClickHouse/ClickHouse/pull/65359. También hace que este último sea retrocompatible. #72051 (Nikita Mikhaylov). - En la página HTML del panel avanzado se añadió un selector desplegable para seleccionar el panel desde la tabla
system.dashboards. #72081 (Sergei Trifonov). - Respetar
prefer_locahost_replicaal generar el plan paraINSERT ... SELECTdistribuido. #72190 (filimonov). - El problema se describe aquí. Azure Iceberg Writer crea archivos de metadatos de Iceberg (así como archivos de manifiesto) que no cumplen las especificaciones. En este PR añadí un intento de leer metadatos del formato Iceberg v1 con el lector v2 (ya que los escriben de esta forma), y agregué un error para cuando no se crean los campos correspondientes en un archivo de manifiesto. #72277 (Daniil Ivanik).
- Los tipos JSON/Dynamic/Variant pasan de experimentales a beta. #72294 (Pavel Kruglov).
- Ahora se permite
CREATE MATERIALIZED VIEWconUNION [ALL]en la consulta. El comportamiento es el mismo que en una vista materializada conJOIN: *solo la primera tabla de la expresiónSELECTactuará como desencadenante de la inserción- , todas las demás tablas se ignorarán. #72347 (alesapin). - Acelera las inserciones en MergeTree cuando hay un único valor de la clave de partición dentro del lote insertado. #72348 (alesapin).
- Se añadió la nueva métrica MergeTreeIndexGranularityInternalArraysTotalSize a system.metrics. Esta métrica es necesaria para encontrar las instancias con conjuntos de datos muy grandes que son susceptibles al problema de alto uso de memoria. #72490 (Miсhael Stetsyuk).
- Ahora se reconocen todas las variantes de la palabra
Nullcuando la consulta usaFormat Null. Antes, otras formas (p. ej.,NULL) no provocaban que se lanzaran excepciones, pero al mismo tiempo el formatoNullen realidad no se usaba en esos casos. #72658 (Nikita Taranov). - Se permiten valores desconocidos en Set que no están presentes en Enum. Se corrige #72662. #72686 (zhanglistar).
- Se añade total_bytes_with_inactive a system.tables para contabilizar los bytes totales de las partes inactivas. #72690 (Kai Zhu).
- Añadir MergeTreeSettings a system.settings_changes. #72694 (Raúl Marín).
- Se admite el operador de búsqueda de cadenas (p. ej., like) para el tipo de datos Enum; se corrige #72661. #72732 (zhanglistar).
- Se admite el tipo JSON en la función notEmpty. #72741 (Pavel Kruglov).
- Compatibilidad con el análisis del error
AuthenticationRequiredde GCS S3. #72753 (Vitaly Baranov). - Se admite el tipo Dynamic en las funciones ifNull y coalesce. #72772 (Pavel Kruglov).
- Se añadieron los eventos de perfil
JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCount. #72842 (Vladimir Cherkasov). - Compatibilidad con Dynamic en las funciones toFloat64/touInt32/etc. #72989 (Pavel Kruglov).
Corrección de errores (mal funcionamiento visible para el usuario en una versión estable oficial)
- Las partes deduplicadas durante la consulta
ATTACH PARTya no quedan bloqueadas con el prefijoattaching_. #65636 (Kirill). - Corrección del error por el que dateTime64 perdía precisión en la función
IN. #67230 (Yarik Briukhovetskyi). - Se corrige un posible error lógico al usar funciones con
IGNORE/RESPECT NULLSenORDER BY ... WITH FILL; se cierra #57609. #68234 (Vladimir Cherkasov). - Se corrigieron errores lógicos poco frecuentes en las inserciones asíncronas con formato
Nativecuando se alcanzaba el límite de memoria. #68965 (Anton Popov). - Se corrigió COMMENT en CREATE TABLE para la columna EPHEMERAL. #70458 (Yakov Olkhovskiy).
- Se corrige un error lógico en JSONExtract con LowCardinality(Nullable). #70549 (Pavel Kruglov).
- Corrige el comportamiento cuando el nombre de la tabla es demasiado largo. #70810 (Yarik Briukhovetskyi).
- Se agregó la posibilidad de sobrescribir
Content-Typecon los headers del usuario en el motor URL. #70859 (Artem Iurin). - Se corrigió el error lógico en
StorageS3Queue“No se puede crear un nodo persistente en /processed porque ya existe”. #70984 (Kseniia Sumarokova). - Corrige el error por el que no se tenía en cuenta la columna _row_exists en la opción de reconstrucción de la eliminación ligera de proyecciones. #71089 (Shichao Jin).
- Corrige el valor incorrecto en system.query_metric_log debido a una condición de carrera inesperada. #71124 (Pablo Marcos).
- Corrige la discrepancia en el nombre de la función de agregación quantileExactWeightedInterpolated. El error se introdujo en https://github.com/ClickHouse/ClickHouse/pull/69619. cc @Algunenano. #71168 (李扬).
- Soluciona la excepción bad_weak_ptr con Dynamic al comparar funciones. #71183 (Pavel Kruglov).
- No elimine un blob cuando haya nodos que lo estén usando en ReplicatedMergeTree con replicación zero-copy. #71186 (Antonio Andelic).
- Se corrige un problema por el que se ignoraba la configuración de formato en Native format mediante HTTP y Async Inserts. #71193 (Pavel Kruglov).
- Las consultas SELECT ejecutadas con la configuración
use_query_cache = 1ya no se rechazan si el nombre de una tabla del sistema aparece como una cadena literal; por ejemplo,SELECT - FROM users WHERE name = 'system.metrics' SETTINGS use_query_cache = true;ahora funciona. #71254 (Robert Schulze). - Corrige un error que provocaba un aumento del uso de memoria cuando enable_filesystem_cache=1, pero el disco de la configuración de almacenamiento no tenía ninguna configuración de caché. #71261 (Kseniia Sumarokova).
- Corrige el posible error “Cannot read all data” durante la deserialización del diccionario LowCardinality de una columna Dynamic. #71299 (Pavel Kruglov).
- Se corrige la limpieza incompleta del formato de salida paralelo en el cliente. #71304 (Raúl Marín).
- Se añadió el desescapado que faltaba en named collections. Sin esta corrección, clickhouse-server no puede iniciarse. #71308 (MikhailBurdukov).
- Corrige las inserciones asíncronas con bloques vacíos mediante el protocolo nativo. #71312 (Anton Popov).
- Corregir el formato incoherente del AST al conceder permisos con comodines erróneos #71309. #71332 (pufit).
- Verificación de tipos sospechosos y experimentales en las indicaciones de tipo de JSON. #71369 (Pavel Kruglov).
- Se corrige el error «Invalid number of rows in Chunk with Variant column». #71388 (Pavel Kruglov).
- Se corrige un fallo en la función de tabla
mongodbal pasar argumentos incorrectos (p. ej.,NULL). #71426 (Vladimir Cherkasov). - Se corrige un cierre inesperado con optimize_rewrite_array_exists_to_has. #71432 (Raúl Marín).
- Se corrige el error NoSuchKey durante la reversión de la transacción cuando no se puede crear un directorio para el disco palin_rewritable. #71439 (Julia Kartseva).
- Se corrigió el uso de la configuración
max_insert_delayed_streams_for_parallel_writeen los inserts. Anteriormente funcionaba de forma incorrecta, lo que podía provocar un elevado consumo de memoria en inserts que escriben datos en varias particiones. #71474 (Anton Popov). - Corrige el posible error
Argument for function must be constant(analizador antiguo) en los casos en quearrayJoinpuede aparecer aparentemente en la condiciónWHERE. Regresión después de https://github.com/ClickHouse/ClickHouse/pull/65414. #71476 (Nikolai Kochetov). - Se evita un fallo en SortCursor con 0 columnas (analizador antiguo). #71494 (Raúl Marín).
- Se corrige el error de date32 fuera de rango causado por datos ORC sin inicializar. Para obtener más detalles, consulta https://github.com/apache/incubator-gluten/issues/7823. #71500 (李扬).
- Se corrige el cálculo del tamaño de la columna en la parte wide para los tipos Dynamic y JSON. #71526 (Pavel Kruglov).
- Corrección del Analyzer cuando una consulta dentro de una vista materializada usa IN con una CTE. Cierra #65598. #71538 (Maksim Kita).
- Devuelve 0 o el carácter predeterminado, en lugar de generar un error, en las funciones bitShift cuando se superan los límites. #71580 (Pablo Marcos).
- Corrige las caídas del servidor al usar una vista materializada con ciertos motores. #71593 (Pervakov Grigorii).
- ARRAY JOIN con una estructura de datos anidada, que contiene un alias de un array constante, provocaba la desreferenciación de un puntero nulo. Esto cierra #71677. #71678 (Alexey Milovidov).
- Corrige LOGICAL_ERROR al hacer ALTER con una tupla vacía. Esto soluciona #71647. #71679 (Amos Bird).
- No transforme el conjunto constante en predicados sobre columnas de partición cuando se use el operador NOT IN. #71695 (Eduard Karacharov).
- Se corrige CAST de LowCardinality(Nullable) a Dynamic. Anteriormente, esto podía provocar el error
Bad cast from type DB::ColumnVector<int> to DB::ColumnNullable. #71742 (Pavel Kruglov). - Se corrige una excepción de
toDayOfWeeken la condiciónWHEREcon una clave primaria de tipoDateTime64. #71849 (Yakov Olkhovskiy). - Se corrigió el relleno de valores predeterminados tras el análisis en columnas dispersas. #71854 (Anton Popov).
- Corrige un error de la función GROUPING cuando la entrada es un ALIAS en una tabla distribuida, cierra #68602. #71855 (Vladimir Cherkasov).
- Se corrigieron las sentencias SELECT que usan la cláusula
WITH TIESy que podrían no devolver suficientes filas. #71886 (wxybear). - Se corrige una excepción de TOO_LARGE_ARRAY_SIZE causada al interpretar erróneamente que una columna evaluada con arrayWithConstant supera el límite de tamaño del array. #71894 (Udi).
clickhouse-benchmarkmostraba métricas incorrectas para consultas que tardaban más de un segundo. #71898 (Alexey Milovidov).- Se corrige una condición de carrera entre el indicador de progreso y la tabla de progreso en clickhouse-client. Este problema se manifiesta cuando se usa FROM INFILE. Se interceptan las pulsaciones de teclas durante las consultas INSERT para alternar la visualización de la tabla de progreso. #71901 (Julia Kartseva).
- Corregida la serialización de los valores Dynamic en los formatos JSON Pretty. #71923 (Pavel Kruglov).
- Se corrige la columna rows_processed de system.s3/azure_queue_log, que estaba rota en la versión 24.6. Cierra #69975. #71946 (Kseniia Sumarokova).
- Se corrigió el caso en el que las funciones
s3/s3Clusterpodían devolver un resultado incompleto o lanzar una excepción. Esto ocurría al usar un patrón glob en el URI de s3 (comopattern/*) y cuando existía un objeto vacío con la clavepattern/(S3 Console crea automáticamente este tipo de objetos). Además, el valor predeterminado de la configuracións3_skip_empty_filescambió defalseatrue. #71947 (Nikita Taranov). - Corrige un fallo en el resaltado de sintaxis de clickhouse-client. Cierra #71864. #71949 (Nikolay Degterinsky).
- Corrige el error
Illegal typeen tablasMergeTreecon una función binaria monótona enORDER BYcuando el primer argumento es constante. Corrige #71941. #71966 (Nikolai Kochetov). - Permitir solo consultas SELECT en EXPLAIN AST cuando se usa dentro de una subconsulta. Otros tipos de consultas provocan un error lógico: ‘Bad cast from type DB::ASTCreateQuery to DB::ASTSelectWithUnionQuery’ o
Inconsistent AST formatting. #71982 (Pavel Kruglov). - Al insertar un registro con
clickhouse-client, el cliente lee las descripciones de las columnas desde el servidor. Pero había un error: las escribíamos en un orden incorrecto; debería ser [statistics, ttl, settings]. #71991 (Han Fei). - Se corrige el formato de los comandos ALTER
MOVE PARTITION ... TO TABLE ...cuandoformat_alter_commands_with_parenthesesestá habilitado. #72080 (János Benjamin Antal). - Se añade el nombre del formato inferido a la consulta CREATE en los motores File/S3/URL/HDFS/Azure. Anteriormente, el nombre del formato se infería cada vez que se reiniciaba el servidor y, si se eliminaban los archivos de datos especificados, esto provocaba errores durante el arranque del servidor. #72108 (Pavel Kruglov).
- Se corrigió un error por el que
min_age_to_force_merge_on_partition_onlyse quedaba atascado al intentar fusionar repetidamente la misma partición, que ya se había fusionado en una sola parte, y no fusionaba las particiones que tenían varias partes. #72209 (Christoph Wurm). - Se corrigió un bloqueo en
SimpleSquashingChunksTransformque se producía en casos poco frecuentes al procesar columnas dispersas. #72226 (Vladimir Cherkasov). - Se corrigió una condición de carrera en
GraceHashJoindebido a la cual podían faltar algunas filas en el resultado del join. #72233 (Nikita Taranov). - Se corrigieron las consultas
ALTER DELETEcon la columna materializada_block_number(si la configuraciónenable_block_number_columnestá activada). #72261 (Anton Popov). - Se corrigió una condición de carrera de datos al llamar a
ColumnDynamic::dumpStructure()de forma concurrente, por ejemplo, en el constructor deConcurrentHashJoin. #72278 (Nikita Taranov). - Se corrige un posible
LOGICAL_ERRORcon columnas duplicadas enORDER BY ... WITH FILL. #72387 (Vladimir Cherkasov). - Se corrigieron incompatibilidades de tipos en varios casos tras aplicar
optimize_functions_to_subcolumns. #72394 (Anton Popov). - Se corrige un fallo en el análisis de las consultas
BACKUP DATABASE db EXCEPT TABLES db.table. #72429 (Konstantin Bogdanov). - No permitir crear un Variant vacío. #72454 (Pavel Kruglov).
- Se corrige el formato incorrecto de
result_part_pathensystem.merges. #72567 (Konstantin Bogdanov). - Se corrige el análisis de un glob con un solo elemento. #72572 (Konstantin Bogdanov).
- Se corrige la generación de consultas para el servidor follower en caso de una consulta distribuida con ARRAY JOIN. Corrige #69276. #72608 (Dmitry Novik).
- Se corrige un error que hacía que DateTime64 en DateTime64 no devolviera nada. #72640 (Yarik Briukhovetskyi).
- Corrige el error “No such key” en el modo Unordered de S3Queue cuando la configuración
tracked_files_limites menor que la tasa de aparición de archivos en S3. #72738 (Kseniia Sumarokova). - Descartar la mark cache puede llevar un tiempo considerable si es grande. Si mantenemos el mutex de Context durante este proceso, se bloquean muchas otras actividades; ni siquiera se pueden establecer nuevas conexiones de cliente hasta que se libere. Y, en realidad, no es necesario mantener este mutex para la sincronización; basta con tener una referencia local a la caché mediante shared ptr. #72749 (Alexander Gololobov).
- La caché de PK estaba subestimando en gran medida su tamaño en una de las instancias de prueba. En particular, las columnas LowCardinality no incluían el tamaño del diccionario. La solución es usar column->allocatedBytes() más algunas estimaciones adicionales de sobrecarga para el tamaño de la entrada de caché. #72750 (Alexander Gololobov).
- Se corrigió la excepción lanzada en RemoteQueryExecutor cuando el usuario no existe localmente. #72759 (Andrey Zvonov).
- Se corrigieron las mutaciones con la columna materializada
_block_number(si está habilitada la configuraciónenable_block_number_column). #72854 (Anton Popov). - Se corrigió la copia de seguridad/restauración con un disco regrabable simple en caso de que haya archivos vacíos en la copia de seguridad. #72858 (Kseniia Sumarokova).
- Cancelar correctamente las inserciones en DistributedAsyncInsertDirectoryQueue. #72885 (Antonio Andelic).
- Se corrigió un fallo al analizar datos incorrectos en columnas dispersas (puede ocurrir con la configuración
enable_parsing_to_custom_serializationhabilitada). #72891 (Anton Popov). - Se corrige un posible bloqueo durante la restauración de una copia de seguridad. #72947 (Kseniia Sumarokova).
- Se corrigió un error en el método
parallel_hashde JOIN que podía aparecer cuando la consulta incluía una condición compleja en la cláusulaONcon filtros de desigualdad. #72993 (Nikita Taranov). - Use la configuración predeterminada de formato durante el análisis de JSON para evitar errores de deserialización. #73043 (Pavel Kruglov).
- Se corrige un fallo en transacciones con almacenamiento no admitido. #73045 (Raúl Marín).
- Se comprueban las claves JSON duplicadas durante el análisis de Tuple. Anteriormente, esto podía provocar el error lógico
Invalid number of rows in Chunkdurante el análisis. #73082 (Pavel Kruglov).