Cambio incompatible con versiones anteriores
- Se ha rediseñado el procesamiento paralelo en el modo
Ordereddel almacenamientoS3Queue. Este PR introduce una incompatibilidad con versiones anteriores en el modoOrderedsi usabas las configuracioness3queue_processing_threads_numos3queue_total_shards_num. La configuracións3queue_total_shards_numse ha eliminado; antes solo se podía usar cons3queue_allow_experimental_sharded_mode, que ahora está en desuso. Se ha añadido una nueva configuración:s3queue_buckets. #64349 (Kseniia Sumarokova). - Se añadieron nuevas funciones
snowflakeIDToDateTime,snowflakeIDToDateTime64,dateTimeToSnowflakeIDydateTime64ToSnowflakeID. A diferencia de las funciones existentessnowflakeToDateTime,snowflakeToDateTime64,dateTimeToSnowflakeydateTime64ToSnowflake, las nuevas funciones son compatibles con la funcióngenerateSnowflakeID; es decir, aceptan los Snowflake ID generados porgenerateSnowflakeIDy producen Snowflake ID del mismo tipo quegenerateSnowflakeID(es decir,UInt64). Además, estas nuevas funciones usan de forma predeterminada la época UNIX (es decir, 1970-01-01), igual quegenerateSnowflakeID. Si es necesario, se puede pasar una época distinta, por ejemplo, la época de Twitter/X del 2010-11-04, es decir, 1288834974657 ms desde la época UNIX. Las antiguas funciones de conversión están en desuso y se eliminarán tras un período de transición; si aun así necesitas usarlas, habilita la configuraciónallow_deprecated_snowflake_conversion_functions. #64948 (Robert Schulze).
Nueva funcionalidad
- Compatibilidad con tuplas vacías. #55061 (Amos Bird).
- Se añadieron funciones de codificación y decodificación de la curva de Hilbert. #60156 (Artem Mustafin).
- Se añadió compatibilidad con el análisis de índices sobre
hilbertEncode. #64662 (Artem Mustafin). - Se añadió compatibilidad para leer geometría
LINESTRINGen formato WKT con la funciónreadWKTLineString. #62519 (Nikita Mikhaylov). - Se añadió la nueva función SQL
generateSnowflakeIDpara generar Snowflake ID al estilo de Twitter. #63577 (Danila Puzov). - Se añadió compatibilidad para comparar los tipos
IPv4yIPv6mediante el operador=. #64292 (Francisco J. Jurado Moreno). - Compatibilidad con argumentos Decimal en funciones matemáticas binarias (pow, atan2, max2, min2, hypot). #64582 (Mikhail Gorshkov).
- Se añadieron las funciones SQL
parseReadableSize(junto con las variantesOrNullyOrZero). #64742 (Francisco J. Jurado Moreno). - Se añadió la columna virtual
_timea almacenamientos similares a archivos (s3/file/hdfs/url/azureBlobStorage). #64947 (Ilya Golshtein). - Se introdujeron las nuevas funciones
base64URLEncode,base64URLDecodeytryBase64URLDecode. #64991 (Mikhail Gorshkov). - Se añadió la nueva función
editDistanceUTF8, que calcula la distancia de edición entre dos cadenas UTF-8. #65269 (LiuNeng). - Se añadió la configuración
http_response_headerspara admitir encabezados de respuesta personalizados en handlers HTTP personalizados. #63562 (Grigorii). - Se añadió una nueva función de tabla
looppara permitir devolver resultados de consultas en un bucle infinito. #63452 (Sariel). Esto es útil para pruebas. - Se introdujeron dos columnas adicionales en
system.query_log:used_privilegesymissing_privileges.used_privilegesse rellena con los privilegios que se comprobaron durante la ejecución de la consulta, ymissing_privilegescontiene los privilegios necesarios que faltan. #64597 (Alexey Katsman). - Se añadió la configuración
output_format_pretty_display_footer_column_names, que, cuando está habilitada, muestra los nombres de las columnas al final de la tabla en tablas largas (50 filas de forma predeterminada); el valor de umbral para el número mínimo de filas se controla conoutput_format_pretty_display_footer_column_names_min_rows. #65144 (Shaun Struwig).
Mejora del rendimiento
- Soluciona la regresión de rendimiento en cross join introducida en #60459 (24.5). #65243 (Nikita Taranov).
- Mejora la visibilidad de los reenvíos en io_uring. Se cambia el nombre del evento de perfil IOUringSQEsResubmits -> IOUringSQEsResubmitsAsync y se añade uno nuevo, IOUringSQEsResubmitsSync. #63699 (Tomer Shafir).
- Introducir aserciones para verificar que todas las funciones se invoquen con columnas del tamaño correcto. #63723 (Raúl Marín).
- Añade la posibilidad de reordenar filas durante la inserción para optimizar el tamaño sin alterar el orden establecido por
PRIMARY KEY. Se controla mediante la configuraciónoptimize_row_order(desactivada de forma predeterminada). #63578 (Igor Markelov). - Se añade un lector nativo de Parquet, que puede leer datos binarios Parquet directamente en columnas de ClickHouse. Está controlado por la configuración
input_format_parquet_use_native_reader(deshabilitada de forma predeterminada). #60361 (ZhiHong Zhang). - Se añadió compatibilidad con la optimización parcial del conteo trivial cuando el filtro de la consulta puede seleccionar rangos exactos de las tablas MergeTree. #60463 (Amos Bird).
- Reduce el uso máximo de memoria de los
INSERTmultihilo al agrupar fragmentos de varios hilos en una sola transformación. #61047 (Yarik Briukhovetskyi). - Se reduce el uso de memoria al usar el almacenamiento de objetos de Azure con una asignación fija de memoria, lo que evita asignar un búfer adicional. #63160 (SmitaRKulkarni).
- Reduce la cantidad de llamadas a funciones virtuales en
ColumnNullable::size. #60556 (HappenLee). - Se acelera
splitByRegexpcuando el argumento de expresión regular es de un solo carácter. #62696 (Robert Schulze). - Se acelera la agregación con claves de 8 y 16 bits al realizar un seguimiento de las claves mínima y máxima utilizadas. Esto permite reducir el número de celdas que es necesario verificar. #62746 (Jiebin Sun).
- Se optimiza el operador IN cuando el lado izquierdo es
LowCardinalityy el derecho es un conjunto de constantes. #64060 (Zhiguo Zhou). - Usa un pool de hilos para inicializar y destruir tablas hash dentro de
ConcurrentHashJoin. #64241 (Nikita Taranov). - Se optimizaron las fusiones verticales en tablas con columnas dispersas. #64311 (Anton Popov).
- Se habilitaron las precargas de datos desde el sistema de archivos remoto durante las fusiones verticales. Esto mejora la latencia de las fusiones verticales en tablas con datos almacenados en el sistema de archivos remoto. #64314 (Anton Popov).
- Se reducen las llamadas redundantes a
isDefaultenColumnSparse::filterpara mejorar el rendimiento. #64426 (Jiebin Sun). - Se aceleran los comandos
find_super_nodesyfind_big_familyde keeper-client mediante múltiples solicitudes asíncronas a getChildren. #64628 (Alexander Gololobov). - Mejora de la función
least/greatestpara argumentos numéricos de tipo Nullable. #64668 (KevinyhZou). - Permite fusionar dos pasos de filtrado consecutivos de un plan de consulta. Esto mejora la optimización de la propagación descendente de filtros si la condición de filtrado puede trasladarse hacia abajo desde el paso superior. #64760 (Nikolai Kochetov).
- Se elimina una optimización incorrecta en la implementación vertical de FINAL y se vuelve a habilitar de forma predeterminada el algoritmo vertical de FINAL. #64783 (Duc Canh Le).
- Se eliminan los nodos ALIAS de la expresión de filtro. Esto mejora ligeramente el rendimiento de las consultas con
PREWHERE(con el nuevo analizador). #64793 (Nikolai Kochetov). - Se vuelve a habilitar la caché de sesiones de OpenSSL. #65111 (Robert Schulze).
- Se añadieron ajustes para desactivar la materialización de índices de omisión y estadísticas durante las inserciones (
materialize_skip_indexes_on_insertymaterialize_statistics_on_insert). #64391 (Anton Popov). - Se utiliza el tamaño de memoria asignada para calcular el tamaño del grupo de filas y reducir el pico de memoria del escritor de Parquet en modo monohilo. #64424 (LiuNeng).
- Se mejora el iterador de la columna dispersa para reducir las llamadas a
size. #64497 (Jiebin Sun). - Actualizar la condición para que use una copia del lado del servidor para las copias de seguridad en Azure Blob Storage. #64518 (SmitaRKulkarni).
- Se optimizó el uso de memoria de las fusiones verticales en tablas con un gran número de índices de omisión. #64580 (Anton Popov).
Mejora
- Se restableció el comportamiento con el que ClickHouse funciona e interpreta Tuples en formato CSV. Este cambio revierte en la práctica ClickHouse/ClickHouse#60994 y lo deja disponible solo con algunas opciones de configuración: output_format_csv_serialize_tuple_into_separate_columns, input_format_csv_deserialize_separate_columns_into_tuple y input_format_csv_try_infer_strings_from_quoted_tuples. #65170 (Nikita Mikhaylov).
SHOW CREATE TABLEejecutado sobre las tablas del sistema ahora mostrará el comentario, muy útil y específico de cada tabla, que explica por qué esa tabla es necesaria. #63788 (Nikita Mikhaylov).- El segundo argumento (escala) de las funciones
round(),roundBankers(),floor(),ceil()ytrunc()ahora ya no tiene que ser constante. #64798 (Mikhail Gorshkov). - Evita un posible interbloqueo durante el análisis de índices de MergeTree al planificar hilos en un servicio saturado. #59427 (Sean Haynes).
- Varias correcciones menores para casos extremos en el soporte de proxy de S3 y la tunelización. #63427 (Arthur Passos).
- Añade métricas para hacer seguimiento del número de directorios creados y eliminados por el almacenamiento de metadatos
plain_rewritable, y del número de entradas en el mapa en memoria de local a remoto. #64175 (Julia Kartseva). - La caché de consultas ahora trata como distintas las consultas idénticas con configuraciones diferentes. Esto aumenta la robustez en los casos en que diferentes configuraciones (p. ej.,
limitoadditional_table_filters) afectarían al resultado de la consulta. #64205 (Robert Schulze). - Se añadió compatibilidad con el código de error no estándar
QpsLimitExceededen el almacenamiento de objetos como error reintentable. #64225 (Sema Checherinda). - Se añadió una nueva configuración
input_format_parquet_prefer_block_bytespara controlar la media de bytes del bloque de salida, y se modificó el valor predeterminado deinput_format_parquet_max_block_sizea 65409. #64427 (LiuNeng). - Los ajustes de la configuración del usuario no afectan a los merges ni a las mutaciones de
MergeTreesobre almacenamiento de objetos. #64456 (alesapin). - Se admite el código de error no estándar
TotalQpsLimitExceededen el almacenamiento de objetos como error reintentable. #64520 (Sema Checherinda). - Se actualizó el Dashboard avanzado en las versiones de código abierto y de ClickHouse Cloud para incluir un gráfico de ‘Máximo de conexiones de red simultáneas’. #64610 (Thom O’Connor).
- Mejora del informe de progreso sobre
zeros_mtygenerateRandom. #64804 (Raúl Marín). - Se añadió una métrica asíncrona
jemalloc.profile.activepara indicar si el muestreo está activo en ese momento. Este es un mecanismo de activación adicional a prof.active; ambos deben estar activos para que el hilo que realiza la llamada pueda efectuar el muestreo. #64842 (Unalian). - Se quitó la marca de importante de
allow_experimental_join_condition. Esta marca puede haber impedido que las consultas distribuidas en un clúster con versiones mixtas se ejecutaran correctamente. #65008 (Nikita Mikhaylov). - Se añadieron métricas asíncronas del servidor
DiskGetObjectThrottler*yDiskGetObjectThrottler*que reflejan el límite de solicitudes por segundo definido con la configuración del discos3_max_get_rpsys3_max_put_rps, así como el número de solicitudes disponible en ese momento que podría enviarse sin superar el límite de throttling del disco. Las métricas se definen para cada disco que tenga un límite configurado. #65050 (Sergei Trifonov). - Añade una validación al crear un usuario con
bcrypt_hash. #65242 (Raúl Marín). - Agregar eventos de perfil para la cantidad de filas leídas durante/después de
PREWHERE. #64198 (Nikita Taranov). - Mostrar la consulta en
EXPLAIN PLANcon réplicas paralelas. #64298 (vdimir). - Se cambia el nombre de
allow_deprecated_functionsaallow_deprecated_error_prone_window_functions. #64358 (Raúl Marín). - Se respeta también la configuración
max_read_buffer_sizepara los descriptores de archivo en la función de tablafile. #64532 (Azat Khuzhin). - Deshabilitar las transacciones para los almacenamientos no compatibles, incluso para las vistas materializadas. #64918 (alesapin).
- Se prohíbe la cláusula
QUALIFYen el analizador antiguo. El analizador antiguo ignorabaQUALIFY, por lo que podía provocar una eliminación inesperada de datos en las mutaciones. #65356 (Dmitry Novik).
Corrección de errores (mal funcionamiento visible para el usuario en una versión estable oficial)
- Se corrigió un problema por el que el índice de omisión ‘set’ no funcionaba con IN e indexHint(). #62083 (Michael Kolupaev).
- Se corrigen las consultas con FINAL que dan resultados incorrectos cuando la tabla no utiliza granularidad adaptativa. #62432 (Duc Canh Le).
- Se admite ejecutar funciones al asignar el valor de una vista parametrizada. #63502 (SmitaRKulkarni).
- Se corrigió el seguimiento del uso de memoria de Parquet. #63584 (Michael Kolupaev).
- Se corrige un caso poco frecuente en el que faltaban datos en el resultado de una consulta distribuida. #63691 (vdimir).
- Se corrigió la lectura de columnas de tipo Tuple(Map(LowCardinality(String), String), …). #63956 (Anton Popov).
- Corrige la resolución del matcher COLUMNS sin calificar. Conserva el orden de las columnas de entrada y prohíbe el uso de identificadores desconocidos. #63962 (Dmitry Novik).
- Se corrige un error con alias cíclicos de distinto tipo (expresión y función). #63993 (Nikolai Kochetov).
- Esta corrección usará un contexto redefinido correctamente con el definidor adecuado para cada vista individual del pipeline de consulta. #64079 (pufit).
- Corrección en el analyzer: se corrige el error “columna no encontrada” al usar INTERPOLATE. #64096 (Yakov Olkhovskiy).
- Evitar LOGICAL_ERROR al ejecutar CREATE TABLE como MaterializedView. #64174 (Raúl Marín).
- La caché de consultas ahora considera como distintas dos consultas idénticas sobre bases de datos diferentes. El comportamiento anterior podía usarse para eludir la falta de privilegios de lectura sobre una tabla. #64199 (Robert Schulze).
- Corrige una posible finalización por una excepción no capturada en ~WriteBufferFromFileDescriptor en StatusFile. #64206 (Kruglov Pavel).
- Se corrige el error de alias duplicado en consultas distribuidas con ARRAY JOIN. #64226 (Nikolai Kochetov).
- Se corrige el comportamiento inesperado de accurateCast al convertir de cadena a entero. #64255 (wudidapaopao).
- Se corrigió la simplificación de CNF en caso de que algún grupo OR contenga átomos mutuamente excluyentes. #64256 (Eduard Karacharov).
- Se corrige la validación del tamaño del Query Tree. #64377 (Dmitry Novik).
- Corregir error lógico: conversión no válida en la tabla Buffer con PREWHERE. #64388 (Nikolai Kochetov).
- Se corrigieron las consultas
CREATE TABLE ASpara tablas con expresiones por defecto. #64455 (Anton Popov). - Se corrigió el comportamiento de optimize_read_in_order para ORDER BY … NULLS FIRST / LAST en tablas con claves Nullable. #64483 (Eduard Karacharov).
- Se corrigieron los errores Expression nodes list expected 1 projection names y Unknown expression or identifier en consultas con alias de GLOBAL IN.. #64517 (Nikolai Kochetov).
- Se corrige un error: no se puede encontrar la columna en consultas distribuidas con un CTE constante en la clave de GROUP BY. #64519 (Nikolai Kochetov).
- Se corrige la salida de la función formatDateTimeInJodaSyntax cuando un formatter genera un número impar de caracteres y el último carácter es 0. Por ejemplo, SELECT formatDateTimeInJodaSyntax(toDate(‘2012-05-29’), ‘D’) ahora devuelve correctamente 150 en lugar de 15. #64614 (LiuNeng).
- No reescribir la agregación si ya se utiliza el combinador -If. #64638 (Dmitry Novik).
- Corrige la inferencia de tipos de
float(en caso de que el búfer sea pequeño, p. ej., —max_read_buffer_size 1). #64641 (Azat Khuzhin). - Corrige un error que podía hacer que los TTL con expresiones no funcionaran. #64694 (alesapin).
- Se corrige el problema por el que se eliminaban las expresiones WHERE y PREWHERE, que siempre son verdaderas (para el nuevo analizador). #64695 (Nikolai Kochetov).
- Se corrigió la eliminación excesiva de partes por parte de índices de texto basados en tokens (ngrambf , full_text) al filtrar según el resultado de startsWith, endsWith, match y multiSearchAny. #64720 (Eduard Karacharov).
- Corrige el comportamiento incorrecto de la secuencia de escape ANSI CSI en la función UTF8::computeWidth. #64756 (Shaun Struwig).
- Se corrige un caso de eliminación incorrecta de ORDER BY / LIMIT BY en subconsultas. #64766 (Raúl Marín).
- Corrección (experimental) de join desigual con subconsultas para sets presentes en las condiciones mixtas de join. #64775 (lgbo).
- Se corrige un fallo en una caché local sobre un disco plain_rewritable. #64778 (Julia Kartseva).
- Se corrige el error “Cannot find column” en una consulta distribuida con ARRAY JOIN sobre una columna Nested. Corrige #64755. #64801 (Nikolai Kochetov).
- Corregir la fuga de memoria en la política de caché SLRU. #64803 (Kseniia Sumarokova).
- Se corrigió un posible seguimiento de memoria incorrecto en varios tipos de consultas: consultas que leen datos desde S3, consultas mediante el protocolo HTTP e inserciones asíncronas. #64844 (Anton Popov).
- Corrige el error de incompatibilidad en la estructura de Block en las consultas que leen con PREWHERE desde la vista materializada cuando la vista materializada tiene columnas de tipos distintos a los de la tabla de origen. Corrige #64611. #64855 (Nikolai Kochetov).
- Corrige un fallo poco frecuente cuando la tabla tiene TTL con subconsulta + base de datos replicada + réplicas en paralelo + analyzer. Es muy poco frecuente, pero por favor no uses TTL con subconsultas. #64858 (alesapin).
- Se corrige la consulta ALTER MODIFY COMMENT que no funcionaba para las VIEW parametrizadas en ClickHouse/ClickHouse#54211. #65031 (Nikolay Degterinsky).
- Se corrige
host_iden DatabaseReplicated cuando el parámetrocluster_secure_connectionestá habilitado. Anteriormente, todas las conexiones dentro del clúster creadas por DatabaseReplicated no eran seguras, aunque el parámetro estuviera habilitado. #65054 (Nikolay Degterinsky). - Corrección del error «Set no listo» tras la optimización de PREWHERE para StorageMerge. #65057 (Nikolai Kochetov).
- Evita escribir en un búfer finalizado en almacenamientos de tipo File. #65063 (Kruglov Pavel).
- Se corrige la posible duración infinita de una consulta en caso de alias cíclicos. Corrige #64849. #65081 (Nikolai Kochetov).
- Corrige el error «Unknown expression identifier» en las consultas remotas con INTERPOLATE (alias) (nuevo analizador). Corrige #64636. #65090 (Nikolai Kochetov).
- Se corrige la extracción de operaciones aritméticas fuera de la agregación. En el nuevo analizador, la optimización solo se aplicaba una vez. #65104 (Dmitry Novik).
- Se corrige la reescritura de los nombres de las funciones de agregación en el nuevo analizador. #65110 (Dmitry Novik).
- Responder con 5xx en lugar de 200 OK en caso de timeout de recepción al leer (partes del) cuerpo de la solicitud desde el socket del cliente. #65118 (Julian Maicher).
- Corregido un posible cierre inesperado en las hedged requests. #65206 (Azat Khuzhin).
- Se corrige el error en la evaluación de cortocircuito de los diccionarios Hashed y Hashed_Array, que podía leer un número sin inicializar y provocar varios errores. #65256 (jsc0218).
- Este PR garantiza que el tipo de la constante (el segundo parámetro del operador IN) sea siempre visible durante el proceso de conversión de tipos del operador IN. De lo contrario, la pérdida de información de tipo puede hacer que algunas conversiones fallen, como la conversión de DateTime a Date. corrige (#64487). #65315 (pn).