Saltar al contenido principal

Tabla de contenidos

Lanzamiento de ClickHouse v23.12, 2023-12-28
Lanzamiento de ClickHouse v23.11, 2023-12-06
Lanzamiento de ClickHouse v23.10, 2023-11-02
Lanzamiento de ClickHouse v23.9, 2023-09-28
Lanzamiento de ClickHouse v23.8 LTS, 2023-08-31
Lanzamiento de ClickHouse v23.7, 2023-07-27
Lanzamiento de ClickHouse v23.6, 2023-06-30
Lanzamiento de ClickHouse v23.5, 2023-06-08
Lanzamiento de ClickHouse v23.4, 2023-04-26
Lanzamiento de ClickHouse v23.3 LTS, 2023-03-30
Lanzamiento de ClickHouse v23.2, 2023-02-23
Lanzamiento de ClickHouse v23.1, 2023-01-25
Registro de cambios de 2022

Lanzamiento de ClickHouse 23.12, 2023-12-28. Presentación, Vídeo

Cambio incompatible con versiones anteriores

  • Corrige la comprobación de funciones no deterministas en expresiones TTL. Anteriormente, en algunos casos era posible crear una expresión TTL con funciones no deterministas, lo que podía provocar un comportamiento indefinido más adelante. Esto corrige #37250. De forma predeterminada, no se permiten expresiones TTL que no dependan de ninguna columna de una tabla. Puede volver a permitirse con SET allow_suspicious_ttl_expressions = 1 o SET compatibility = '23.11'. Cierra #37286. #51858 (Alexey Milovidov).
  • La configuración de MergeTree clean_deleted_rows está obsoleta y ya no tiene ningún efecto. La palabra clave CLEANUP para OPTIMIZE no está permitida de forma predeterminada (puede habilitarse con la configuración allow_experimental_replacing_merge_with_cleanup). #58267 (Alexander Tokmakov). Esto corrige #57930. Esto cierra #54988. Esto cierra #54570. Esto cierra #50346. Esto cierra #47579. Esta funcionalidad debe eliminarse porque no es adecuada. Debemos eliminarla lo antes posible, porque no hay otra opción. #57932 (Alexey Milovidov).

Nueva funcionalidad

  • Se implementan vistas materializadas actualizables, solicitadas en #33919. #56946 (Michael Kolupaev, Michael Guzov).
  • Se introduce PASTE JOIN, que permite a los usuarios unir tablas sin la cláusula ON, simplemente por número de fila. Ejemplo: SELECT * FROM (SELECT number AS a FROM numbers(2)) AS t1 PASTE JOIN (SELECT number AS a FROM numbers(2) ORDER BY a DESC) AS t2. #57995 (Yarik Briukhovetskyi).
  • La cláusula ORDER BY ahora admite especificar ALL, lo que significa que ClickHouse ordena por todas las columnas de la cláusula SELECT. Ejemplo: SELECT col1, col2 FROM tab WHERE [...] ORDER BY ALL. #57875 (zhongyuankai).
  • Se añadió un nuevo comando de mutación ALTER TABLE <table> APPLY DELETED MASK, que permite forzar la aplicación de la máscara generada por la eliminación ligera y eliminar del disco las filas marcadas como eliminadas. #57433 (Anton Popov).
  • El manejador /binary abre un visor de los símbolos del binario de ClickHouse. #58211 (Alexey Milovidov).
  • Se añadió una nueva función SQL, sqid, para generar Sqids (https://sqids.org/); ejemplo: SELECT sqid(125, 126). #57512 (Robert Schulze).
  • Se añade una nueva función seriesPeriodDetectFFT para detectar el período de una serie mediante FFT. #57574 (Bhavna Jindal).
  • Se añade un endpoint HTTP para comprobar si Keeper está listo para aceptar tráfico. #55876 (Konstantin Bogdanov).
  • Añade el modo ‘union’ para la inferencia de esquemas. En este modo, el esquema de la tabla resultante es la unión de los esquemas de todos los archivos (es decir, el esquema se infiere para cada archivo). El modo de inferencia de esquemas se controla mediante la configuración schema_inference_mode, con dos valores posibles: default y union. Cierra #55428. #55892 (Kruglov Pavel).
  • Se añade la nueva configuración input_format_csv_try_infer_numbers_from_strings, que permite inferir números a partir de cadenas en formato CSV. Cierra #56455. #56859 (Kruglov Pavel).
  • Cuando el número de bases de datos o tablas supera un umbral configurable, se muestra una advertencia al usuario. #57375 (凌涛).
  • El diccionario con layout HASHED_ARRAY (y COMPLEX_KEY_HASHED_ARRAY) admite SHARDS, de forma similar a HASHED. #57544 (vdimir).
  • Se añaden métricas asíncronas para el total de bytes de la clave primaria y el total de bytes de la clave primaria asignados en memoria. #57551 (Bharat Nallan).
  • Se añadió la función SHA512_256. #57645 (Bharat Nallan).
  • Se añade FORMAT_BYTES como alias de formatReadableSize. #57592 (Bharat Nallan).
  • Permitir pasar un token de sesión opcional a la función de tabla s3. #57850 (Shani Elharrar).
  • Se incorpora una nueva configuración http_make_head_request. Si está desactivada, el motor de tabla URL no realizará una solicitud HEAD para determinar el tamaño del archivo. Esto es necesario para admitir servidores HTTP ineficientes, mal configurados o incapaces de hacerlo. #54602 (Fionera).
  • Ahora es posible hacer referencia a una columna ALIAS en las definiciones de índices (que no son de clave primaria) (issue #55650). Ejemplo: CREATE TABLE tab(col UInt32, col_alias ALIAS col + 1, INDEX idx (col_alias) TYPE minmax) ENGINE = MergeTree ORDER BY col;. #57546 (Robert Schulze).
  • Se añadió un nuevo ajuste readonly que puede usarse para indicar que un disco S3 es de solo lectura. Puede ser útil para crear una tabla en un disco de tipo s3_plain y, al mismo tiempo, tener acceso de solo lectura al bucket subyacente de S3. #57977 (Pengyuan Bian).
  • El análisis de la clave primaria en las tablas MergeTree ahora también se aplicará a los predicados que incluyan la columna virtual _part_offset (opcionalmente junto con _part). Esta funcionalidad puede servir como una clase especial de índice secundario. #58224 (Amos Bird).

Mejora del rendimiento

  • Extrae rangos de partes no superpuestas de una tabla MergeTree durante el procesamiento de FINAL. De este modo, podemos evitar la lógica adicional de FINAL para estos rangos de partes no superpuestas. En caso de que la cantidad de valores duplicados con la misma clave primaria sea baja, el rendimiento será casi el mismo que sin FINAL. Mejora el rendimiento de lectura de MergeTree FINAL cuando está configurado el ajuste do_not_merge_across_partitions_select_final. #58120 (Maksim Kita).
  • Se habilitó la copia entre discos de S3 mediante una copia del lado del servidor de S3, en lugar de copiar a través del búfer. Mejora las operaciones BACKUP/RESTORE y el comando clickhouse-disks copy. #56744 (MikhailBurdukov).
  • Hash JOIN respeta la configuración max_joined_block_size_rows y no genera bloques grandes para ALL JOIN. #56996 (vdimir).
  • Liberar antes la memoria para la agregación. Esto puede evitar una agregación externa innecesaria. #57691 (Nikolai Kochetov).
  • Mejora del rendimiento de la serialización de cadenas. #57717 (Maksim Kita).
  • Se admite la optimización trivial de conteo para tablas con motor Merge. #57867 (skyoct).
  • Se optimizó la agregación en algunos casos. #57872 (Anton Popov).
  • La función hasAny ahora puede aprovechar los índices de omisión de texto completo. #57878 (Jpnock).
  • Se optimizaron la función if(cond, then, else) (y su alias cond ? then : else) para usar evaluación sin bifurcaciones. #57885 (zhanglistar).
  • MergeTree determina automáticamente la configuración do_not_merge_across_partitions_select_final si la expresión de la clave de partición contiene solo columnas de la expresión de clave primaria. #58218 (Maksim Kita).
  • Se aceleran MIN y MAX para tipos nativos. #58231 (Raúl Marín).
  • Implementación de la política de caché SLRU para la caché del sistema de archivos. #57076 (Kseniia Sumarokova).
  • El límite del número de conexiones por endpoint para los fetches en segundo plano se aumentó de 15 al valor de la configuración background_fetches_pool_size. - La configuración de nivel MergeTree replicated_max_parallel_fetches_for_host quedó obsoleta - Las configuraciones de nivel MergeTree replicated_fetches_http_connection_timeout, replicated_fetches_http_send_timeout y replicated_fetches_http_receive_timeout se trasladaron al nivel de servidor. - La configuración keep_alive_timeout se añadió a la lista de configuraciones de nivel de servidor. #57523 (Nikita Mikhaylov).
  • Hacer que las consultas a system.filesystem_cache consuman menos memoria. #57687 (Kseniia Sumarokova).
  • Reducir el uso de memoria en la deserialización de cadenas. #57787 (Maksim Kita).
  • Constructor más eficiente para Enum: tiene sentido cuando Enum tiene una gran cantidad de valores. #57887 (Duc Canh Le).
  • Mejora en la lectura desde la caché del sistema de archivos: usar siempre el método pread. #57970 (Nikita Taranov).
  • Se añade una optimización para la cadena AND notEquals en el optimizador de expresiones lógicas. Esta optimización solo está disponible con el Analizador experimental habilitado. #58214 (Kevin Mingtarja).

Mejora

  • Soporte para el límite flexible de memoria en Keeper. Rechazará solicitudes si el uso de memoria se acerca al máximo. #57271 (Han Fei). #57699 (Han Fei).
  • Se ha hecho que las inserciones en tablas distribuidas gestionen correctamente la configuración actualizada del clúster. Cuando la lista de nodos del clúster se actualice dinámicamente, el Directory Monitor de la tabla distribuida la actualizará. #42826 (zhongyuankai).
  • No permitir la creación de una tabla replicada con parámetros de merge incoherentes. #56833 (Duc Canh Le).
  • Mostrar el tamaño sin comprimir en system.tables. #56618. #57186 (Chen Lixiang).
  • Añade skip_unavailable_shards como una configuración para las tablas Distributed, similar a la correspondiente configuración a nivel de consulta. Cierra #43666. #57218 (Gagan Goel).
  • La función substring (alias: substr, mid) ahora también puede usarse con tipos Enum. Antes, el primer argumento de la función tenía que ser un valor de tipo String o FixedString. Esto mejora la compatibilidad con herramientas de terceros como Tableau mediante la interfaz MySQL. #57277 (Serge Klochkov).
  • La función format ahora admite tipos de argumentos arbitrarios (en lugar de solo argumentos String y FixedString). Esto es importante para poder calcular SELECT format('The {0} to all questions is {1}', 'answer', 42). #57549 (Robert Schulze).
  • Permite usar la función date_trunc con un primer argumento que no distingue entre mayúsculas y minúsculas. Ahora se admiten ambas variantes: SELECT date_trunc('day', now()) y SELECT date_trunc('DAY', now()). #57624 (Yarik Briukhovetskyi).
  • Sugerencias más útiles cuando una tabla no existe. #57342 (Bharat Nallan).
  • Permite sobrescribir las configuraciones del servidor max_partition_size_to_drop y max_table_size_to_drop durante la consulta. #57452 (Jordi Villar).
  • Mejora ligera en la inferencia de tuplas sin nombre en formatos JSON. #57751 (Kruglov Pavel).
  • Añadir compatibilidad con el indicador de solo lectura al conectarse a Keeper (corrige #53749). #57479 (Mikhail Koviazin).
  • Corrige posibles envíos distribuidos atascados debido a “No such file or directory” (durante la recuperación de un lote desde disco). Corrige posibles problemas con error_count de system.distribution_queue (en caso de que distributed_directory_monitor_max_sleep_time_ms sea > 5 min). Introduce un evento de perfil para rastrear fallos de INSERT asíncrono: DistributedAsyncInsertionFailures. #57480 (Azat Khuzhin).
  • Se añade compatibilidad con columnas generadas y valores predeterminados de columnas de PostgreSQL en MaterializedPostgreSQL (funcionalidad experimental). Cierra #40449. #57568 (Kseniia Sumarokova).
  • Permite aplicar algunos cambios de configuración de la caché del sistema de archivos sin reiniciar el servidor. #57578 (Kseniia Sumarokova).
  • Manejo correcto de la estructura de una tabla de PostgreSQL con un array vacío. #57618 (Mike Kot).
  • Expone como métrica ClickHouseErrorMetric_ALL el número total de errores ocurridos desde el último reinicio del servidor. #57627 (Nikita Mikhaylov).
  • Permitir nodos en el archivo de configuración con referencias from_env/from_zk y elementos no vacíos con replace=1. #57628 (Azat Khuzhin).
  • Una función de tabla fuzzJSON que permite generar una gran cantidad de JSON malformado para pruebas de fuzzing. #57646 (Julia Kartseva).
  • Se permite la conversión de IPv6 a UInt128 y la aritmética binaria. #57707 (Yakov Olkhovskiy).
  • Se añade un ajuste para async inserts deduplication cache - cuánto tiempo se espera antes de actualizar la caché. Se depreca el ajuste async_block_ids_cache_min_update_interval_ms. Ahora la caché se actualiza solo en caso de conflictos. #57743 (alesapin).
  • La función sleep() ahora puede cancelarse con KILL QUERY. #57746 (Vitaly Baranov).
  • Prohíbe las consultas CREATE TABLE ... AS SELECT para los motores de tabla Replicated en la base de datos experimental Replicated, ya que no son compatibles. Referencia #35408. #57796 (Nikolay Degterinsky).
  • Se corrigió y mejoró la transformación de consultas para bases de datos externas a fin de obtener recursivamente todos los predicados compatibles. #57888 (flynn).
  • Se admite la recarga dinámica del tamaño de la caché del filesystem. Cierra #57866. #57897 (Kseniia Sumarokova).
  • Admite correctamente system.stack_trace para hilos con SIGRTMIN bloqueado (estos hilos pueden existir en bibliotecas externas de baja calidad, como Apache rdkafka). #57907 (Azat Khuzhin). Y además envía la señal a los hilos solo si no está bloqueada, para evitar esperar storage_system_stack_trace_pipe_read_timeout_ms cuando no tiene ningún sentido. #58136 (Azat Khuzhin).
  • Se toleran fallos de Keeper en la comprobación de la inserción con cuórum. #57986 (Raúl Marín).
  • Se añadió el RSS máximo/pico (MemoryResidentMax) a system.asynchronous_metrics. #58095 (Azat Khuzhin).
  • Este PR permite usar enlaces de estilo S3 (https:// y s3://) sin especificar la región aunque no sea la predeterminada. También detecta la región correcta si el usuario indicó una incorrecta. #58148 (Yarik Briukhovetskyi).
  • clickhouse-format --obfuscate reconocerá Settings, MergeTreeSettings y las zonas horarias, y conservará sus nombres sin cambios. #58179 (Alexey Milovidov).
  • Se añadió la función explícita finalize() en ZipArchiveWriter. Se simplificó el código excesivamente complejo de ZipArchiveWriter. Esto corrige #58074. #58202 (Vitaly Baranov).
  • Hacer que las cachés con la misma ruta usen los mismos objetos de caché. Este comportamiento ya existía, pero dejó de funcionar en la versión 23.4. Si dichas cachés con la misma ruta tienen un conjunto distinto de configuraciones de caché, se lanzará una excepción indicando que esto no está permitido. #58264 (Kseniia Sumarokova).
  • Réplicas paralelas (función experimental): ajustes más intuitivos #57542 (Igor Nikonov).
  • Réplicas paralelas (funcionalidad experimental): mejora en la gestión de las respuestas a los anuncios #57749 (Igor Nikonov).
  • Réplicas paralelas (característica experimental): respetan mejor min_number_of_marks en ParallelReplicasReadingCoordinator #57763 (Nikita Taranov).
  • Réplicas paralelas (función experimental): desactivar las réplicas paralelas con IN (subconsulta) #58133 (Igor Nikonov).
  • Réplicas paralelas (característica experimental): se añade el evento de perfil ‘ParallelReplicasUsedCount’ #58173 (Igor Nikonov).
  • Las solicitudes que no sean POST, como HEAD, serán de solo lectura, al igual que GET. #58060 (San).
  • Se añade la columna bytes_uncompressed a system.part_log #58167 (Jordi Villar).
  • Añadido el nombre de la copia de seguridad base a las tablas system.backups y system.backup_log #58178 (Pradeep Chhetri).
  • Se añadió compatibilidad con la especificación de parámetros de consulta en la línea de comandos en clickhouse-local #58210 (Pradeep Chhetri).

Mejora de compilación, pruebas y empaquetado

  • Aleatorización de más ajustes #39663 (Anton Popov).
  • Aleatorización de optimizaciones deshabilitadas en CI #57315 (Raúl Marín).
  • Permitir el uso de motores de tabla y funciones relacionados con Azure en macOS. #51866 (Alexey Milovidov).
  • ClickHouse Fast Test ahora usa Musl en lugar de GLibc. #57711 (Alexey Milovidov). La compilación totalmente estática con Musl está disponible para su descarga desde CI.
  • Ejecutar ClickBench para cada commit. Esto cierra #57708. #57712 (Alexey Milovidov).
  • Eliminar el uso de la perjudicial función select de C/POSIX en bibliotecas externas. #57467 (Igor Nikonov).
  • Los ajustes disponibles solo en ClickHouse Cloud también estarán presentes en la compilación de código abierto de ClickHouse por comodidad. #57638 (Nikita Mikhaylov).

Corrección de errores (mal funcionamiento visible para el usuario en una versión estable oficial)

  • Se corrigió una posible alteración del orden de ordenación en TTL GROUP BY #49103 (Nikita Mikhaylov).
  • Corrección: en la estrategia de buckets divididos de lttb, el primer y el último bucket deben contener solo un punto #57003 (FFish).
  • Corregido un posible interbloqueo en el formato Template durante la sincronización tras un error #57004 (Kruglov Pavel).
  • Se corrige la detención prematura durante el análisis de un archivo al omitir una gran cantidad de errores #57006 (Kruglov Pavel).
  • Evitar la omisión de las ACL del diccionario mediante la función de tabla dictionary #57362 (Salvatore Mesoraca).
  • Se corrigió otro caso de error de “Set no preparado” detectado por Fuzzer. #57423 (Nikolai Kochetov).
  • Se solucionan varios problemas relacionados con el uso de array_ndims en PostgreSQL. #57436 (Ryan Jacobs).
  • Corregida la inconsistencia de RWLock tras un timeout del bloqueo de escritura #57454 (Vitaly Baranov). Corregida la inconsistencia de RWLock tras un timeout del bloqueo de escritura (de nuevo) #57733 (Vitaly Baranov).
  • Corrección: no excluir la columna efímera al construir la cadena de inserción en vistas #57461 (Yakov Olkhovskiy).
  • MaterializedPostgreSQL (problema experimental): se corrige el problema #41922 y se añade una prueba para #41923 #57515 (Kseniia Sumarokova).
  • Ignorar la cláusula ON CLUSTER en las consultas GRANT/REVOKE para la gestión de entidades de acceso replicadas. #57538 (MikhailBurdukov).
  • Se corrige un fallo en clickhouse-local #57553 (Nikolay Degterinsky).
  • Corrección de Hash JOIN. #57564 (vdimir).
  • Se corrige un posible error en el origen PostgreSQL #57567 (Kseniia Sumarokova).
  • Se corrige el ajuste de tipos en Hash JOIN para LowCardinality anidado. #57614 (vdimir).
  • Evita que system.stack_trace se bloquee al impedir correctamente su lectura en paralelo. #57641 (Azat Khuzhin).
  • Se corrige un error en la agregación de columnas dispersas con any(...) RESPECT NULL #57710 (Azat Khuzhin).
  • Corrige el análisis sintáctico de operadores unarios #57713 (Nikolay Degterinsky).
  • Se corrige la carga de dependencias del motor de tabla experimental MaterializedPostgreSQL. #57754 (Kseniia Sumarokova).
  • Se corrigen los reintentos en nodos desconectados para BACKUP/RESTORE ON CLUSTER #57764 (Vitaly Baranov).
  • Se corrigió el resultado de la agregación externa en caso de una proyección parcialmente materializada #57790 (Anton Popov).
  • Se corrige el merge en funciones de agregación con el combinador *Map #57795 (Anton Popov).
  • Deshabilitar system.kafka_consumers porque contiene un error. #57822 (Azat Khuzhin).
  • Se corrige el soporte de claves LowCardinality en Merge JOIN. #57827 (vdimir).
  • Una corrección de InterpreterCreateQuery relacionada con el bloque sample. #57855 (Maksim Kita).
  • Se ignoraba addresses_expr en las colecciones con nombre de PostgreSQL. #57874 (joelynch).
  • Se corrigió un acceso inválido a memoria en BLAKE3 (Rust) #57876 (Raúl Marín). Después, se reescribió de Rust a C++ para mejorar la seguridad de la memoria. #57994 (Raúl Marín).
  • Normalización de nombres de funciones en CREATE INDEX #57906 (Alexander Tokmakov).
  • Se corrigió el manejo de las réplicas no disponibles antes de que se produjera la primera solicitud #57933 (Nikita Taranov).
  • Corregir la clasificación incorrecta de los alias literales #57988 (Chen768959).
  • Se corrige el preprocesamiento no válido en Keeper #58069 (Antonio Andelic).
  • Se corrige un desbordamiento de enteros en la biblioteca Poco, relacionado con UTF32Encoding #58073 (Andrey Fedotov).
  • Corrige las réplicas paralelas (funcionalidad experimental) en presencia de una subconsulta escalar con un valor entero de gran tamaño #58118 (Alexey Milovidov).
  • Se corrige accurateCastOrNull para DateTime fuera de rango #58139 (Andrey Zvonov).
  • Se corrigió un posible error PARAMETER_OUT_OF_BOUND durante la lectura de subcolumnas desde una parte wide en MergeTree #58175 (Kruglov Pavel).
  • Se corrige una ralentización en CREATE VIEW con un número enorme de subconsultas #58220 (Tao Wang).
  • Se corrige el parsing paralelo de JSONCompactEachRow #58181 (Alexey Milovidov). #58250 (Kruglov Pavel).

Lanzamiento de ClickHouse 23.11, 2023-12-06. Presentación, Vídeo

Cambio incompatible con versiones anteriores

  • El archivo de configuración del servidor de ClickHouse predeterminado ahora tiene habilitados access_management (gestión de usuarios mediante consultas SQL) y named_collection_control (gestión de named collection mediante consultas SQL) para el usuario default. Esto cierra #56482. #56619 (Alexey Milovidov).
  • Varias mejoras para RESPECT NULLS/IGNORE NULLS en funciones de ventana. Si las usa como funciones de agregación y almacena los estados de agregación de funciones con estos modificadores, podrían volverse incompatibles. #57189 (Raúl Marín).
  • Se elimina la optimización optimize_move_functions_out_of_any. #57190 (Raúl Marín).
  • Los Formatter %l/%k/%c de la función parseDateTime ahora pueden analizar horas/meses sin ceros a la izquierda; por ejemplo, select parseDateTime('2023-11-26 8:14', '%F %k:%i') ahora funciona. Establezca parsedatetime_parse_without_leading_zeros = 0 para restaurar el comportamiento anterior, que requería dos dígitos. La función formatDateTime ahora también puede imprimir horas/meses sin ceros a la izquierda. Esto se controla con la configuración formatdatetime_format_without_leading_zeros, pero está desactivado de forma predeterminada para no romper los casos de uso existentes. #55872 (Azat Khuzhin).
  • Ya no se puede usar la función de agregación avgWeighted con argumentos de tipo Decimal. Solución alternativa: convierta los argumentos a Float64. Esto cierra #43928. Esto cierra #31768. Esto cierra #56435. Si ha usado esta función dentro de vistas materializadas o proyecciones con argumentos Decimal, póngase en contacto con support@clickhouse.com. Se corrigió un error en la función de agregación sumMap y pasó a ser aproximadamente entre 1.5 y 2 veces más lenta. No importa porque la función es basura de todos modos. Esto cierra #54955. Esto cierra #53134. Esto cierra #55148. Se corrige un error en la función groupArraySample: usaba la misma random seed en caso de que se generara más de un estado de agregación en una consulta. #56350 (Alexey Milovidov).

Nueva funcionalidad

  • Se añadió la configuración del servidor async_load_databases para la carga asíncrona de bases de datos y tablas. Acelera el tiempo de arranque del servidor. Se aplica a las bases de datos con motores Ordinary, Atomic y Replicated. Sus tablas cargan los metadatos de forma asíncrona. Una consulta a una tabla aumenta la prioridad de la tarea de carga y espera a que esta finalice. Se añadió una nueva tabla system.asynchronous_loader para la introspección. #49351 (Sergei Trifonov).
  • Se añadió la tabla del sistema blob_storage_log. Permite auditar todos los datos escritos en S3 y otros sistemas de almacenamiento de objetos. #52918 (vdimir).
  • Usa estadísticas para ordenar mejor las condiciones de prewhere. #53240 (Han Fei).
  • Se añadió compatibilidad con la compresión en el protocolo de Keeper. Puede habilitarse en ClickHouse mediante la opción use_compression dentro de la sección zookeeper. Ten en cuenta que solo ClickHouse Keeper admite compresión, mientras que Apache ZooKeeper no. Resuelve #49507. #54957 (SmitaRKulkarni).
  • Se incorpora la funcionalidad storage_metadata_write_full_object_key. Si se establece en true, los archivos de metadatos se escriben en el nuevo formato. Con este formato, ClickHouse almacena la clave completa del objeto remoto en el archivo de metadatos, lo que permite una mayor flexibilidad y optimización. #55566 (Sema Checherinda).
  • Añade nuevas opciones de configuración y sintaxis para evitar que se sobrescriban los campos de las colecciones con nombre. Esto tiene como objetivo impedir que un usuario malicioso obtenga acceso no autorizado a secretos. #55782 (Salvatore Mesoraca).
  • Añadir la columna hostname a todas las tablas de log del sistema: es útil si las tablas del sistema son replicadas, compartidas o distribuidas. #55894 (Bharat Nallan).
  • Se añade la consulta CHECK ALL TABLES. #56022 (vdimir).
  • Se añadió la función fromDaysSinceYearZero, similar a FROM_DAYS de MySQL. P. ej., SELECT fromDaysSinceYearZero(739136) devuelve 2023-09-08. #56088 (Joanna Hulboj).
  • Se añade una herramienta externa en Python para ver copias de seguridad y extraer información de ellas sin usar ClickHouse. #56268 (Vitaly Baranov).
  • Se implementa una nueva configuración llamada preferred_optimize_projection_name. Si se establece en una cadena no vacía, se utilizará la proyección especificada, si es posible, en lugar de elegir entre todas las candidatas. #56309 (Yarik Briukhovetskyi).
  • Agregar un comando de 4 letras para ceder/abandonar el liderazgo (https://github.com/ClickHouse/ClickHouse/issues/56352). #56354 (Pradeep Chhetri). #56620 (Pradeep Chhetri).
  • Se añadió una nueva función SQL, arrayRandomSample(arr, k), que devuelve una muestra de k elementos del array de entrada. Antes, una funcionalidad similar solo podía lograrse con una sintaxis menos práctica, p. ej., SELECT arrayReduce('groupArraySample(3)', range(10)). #56416 (Robert Schulze).
  • Se añadió compatibilidad con datos del tipo Float16 para su uso en archivos .npy. Cierra #56344. #56424 (Yarik Briukhovetskyi).
  • Se añadió la vista del sistema information_schema.statistics para mejorar la compatibilidad con Tableau Online. #56425 (Serge Klochkov).
  • Se añade la tabla system.symbols, útil para la introspección del binario. #56548 (Alexey Milovidov).
  • Paneles configurables. Las consultas de los gráficos ahora se obtienen mediante una consulta, que de forma predeterminada usa una nueva tabla system.dashboards. #56771 (Sergei Trifonov).
  • Se incorpora la table function fileCluster; resulta útil si monta un filesystem compartido (NFS y similares) en el directorio user_files. #56868 (Andrey Zvonov).
  • Se añade la columna virtual _size con el tamaño del archivo en bytes a los motores s3/file/hdfs/url/azureBlobStorage. #57126 (Kruglov Pavel).
  • Expone en el endpoint de Prometheus el número de errores de cada código de error producidos en un servidor desde el último reinicio. #57209 (Nikita Mikhaylov).
  • ClickHouse Keeper informa de la zona de disponibilidad en la que se está ejecutando en la ruta /keeper/availability-zone. Esto se puede configurar mediante <availability_zone><value>us-west-1a</value></availability_zone>. #56715 (Jianfei Hu).
  • Hacer que ALTER materialized_view MODIFY QUERY deje de ser experimental y deprecar la configuración allow_experimental_alter_materialized_view_structure. Corrige #15206. #57311 (alesapin).
  • La opción join_algorithm respeta el orden especificado #51745 (vdimir).
  • Se añadió compatibilidad con los tipos bien conocidos de Protobuf en el formato Protobuf. #56741 (János Benjamin Antal).

Mejora del rendimiento

  • Tiempos de espera adaptativos para interactuar con S3. El primer intento se realiza con tiempos de espera de envío y recepción reducidos. #56314 (Sema Checherinda).
  • Aumenta el valor predeterminado de max_concurrent_queries de 100 a 1000. Esto tiene sentido cuando hay una gran cantidad de clientes conectados que envían o reciben datos lentamente, por lo que el servidor no está limitado por la CPU, o cuando el número de núcleos de CPU es mayor que 100. Además, habilita el control de concurrencia de forma predeterminada y establece el número total deseado de hilos de procesamiento de consultas en el doble del número de núcleos de CPU. Esto mejora el rendimiento en escenarios con un número muy elevado de consultas concurrentes. #46927 (Alexey Milovidov).
  • Se admite la evaluación paralela de las funciones de ventana. Corrige #34688. #39631 (Dmitry Novik).
  • El table engine Numbers (de la tabla system.numbers) ahora analiza la condición para generar el subconjunto de datos necesario, como si fuera el índice de la tabla. #50909 (JackyWoo).
  • Se mejoró el rendimiento del filtrado con la condición IN (...) para el motor de tabla Merge. #54905 (Nikita Taranov).
  • Una mejora que se produce cuando la caché del sistema de archivos está llena y se realizan lecturas de gran tamaño. #55158 (Kseniia Sumarokova).
  • Se agregó la posibilidad de deshabilitar los checksums para S3 a fin de evitar recorrer el archivo en exceso (esto se controla mediante la opción s3_disable_checksum). #55559 (Azat Khuzhin).
  • Ahora leemos de forma síncrona desde tablas remotas cuando los datos están en la caché de páginas (como hacemos con las tablas locales). Es más rápido, no requiere sincronización dentro del pool de hilos, no vacila al hacer seek en el sistema de archivos local y reduce el tiempo de espera de la CPU. #55841 (Nikita Taranov).
  • Optimización al obtener valores de map, arrayElement. Aportará una mejora de velocidad de alrededor del 30 %. - reducir la memoria reservada - reducir la llamada a resize. #55957 (lgbo).
  • Optimización del filtrado en varias etapas con AVX-512. Los experimentos de rendimiento del conjunto de datos OnTime en el dispositivo ICX (CPU Intel Xeon Platinum 8380, 80 núcleos, 160 hilos) muestran que este cambio podría aportar mejoras del 7,4 %, 5,9 %, 4,7 %, 3,0 % y 4,6 % al QPS de las consultas Q2, Q3, Q4, Q5 y Q6, respectivamente, sin afectar a las demás. #56079 (Zhiguo Zhou).
  • Limita el número de hilos ocupados dentro del perfilador de consultas. Si hay más, omitirán el perfilado. #56105 (Alexey Milovidov).
  • Reducir el número de llamadas a funciones virtuales en las funciones de ventana. #56120 (Maksim Kita).
  • Permitir la poda recursiva de campos de Tuple en el formato ORC para acelerar el escaneo. #56122 (李扬).
  • Optimización del conteo trivial para el formato de datos Npy: consultas como select count() from 'data.npy' funcionarán mucho más rápido gracias al almacenamiento en caché de los resultados. #56304 (Yarik Briukhovetskyi).
  • Las consultas con agregación y un gran número de streams usarán menos memoria durante la construcción del plan. #57074 (Alexey Milovidov).
  • Mejora el rendimiento de la ejecución de consultas en casos de uso con muchos usuarios y consultas muy concurrentes (>2000 QPS) al optimizar el acceso a ProcessList. #57106 (Andrej Hoos).
  • Mejora menor en ARRAY JOIN: reutiliza algunos resultados intermedios. #57183 (李扬).
  • En algunos casos, el desenrollado de la pila era lento. Ya no. #57221 (Alexey Milovidov).
  • Ahora usamos el pool de lectura predeterminado para leer desde almacenamiento externo cuando max_streams = 1. Esto resulta beneficioso cuando están habilitadas las operaciones de prefetch de lectura. #57334 (Nikita Taranov).
  • Mejora de Keeper: se optimiza el uso de memoria durante el arranque al retrasar el preprocesamiento del log. #55660 (Antonio Andelic).
  • Se mejoró el rendimiento de la coincidencia de patrones glob para los almacenamientos File y HDFS. #56141 (Andrey Zvonov).
  • Las posting lists de los índices experimentales de texto completo ahora se comprimen, lo que reduce su tamaño entre un 10 y un 30 %. #56226 (Harry Lee).
  • Paralelización de BackupEntriesCollector en las copias de seguridad. #56312 (Kseniia Sumarokova).

Mejora

  • Añade una nueva configuración de MergeTree, add_implicit_sign_column_constraint_for_collapsing_engine (desactivada de forma predeterminada). Cuando se habilita, añade una restricción CHECK implícita para las tablas CollapsingMergeTree que limita el valor de la columna Sign a -1 o 1 únicamente. #56701. #56986 (Kevin Mingtarja).
  • Se permite agregar un nuevo disco a la configuración de almacenamiento sin reiniciar. #56367 (Duc Canh Le).
  • Se admite crear y materializar un índice en la misma consulta ALTER, así como usar “modify TTL” y “materialize TTL” en la misma consulta. Cierra #55651. #56331 (flynn).
  • Se añadió una nueva función de tabla llamada fuzzJSON con filas que contienen versiones alteradas de la cadena JSON de origen con variaciones aleatorias. #56490 (Julia Kartseva).
  • El engine Merge filtra los registros según las políticas de fila de las tablas subyacentes, por lo que no es necesario crear otra política de fila en una tabla Merge. #50209 (Ilya Golshtein).
  • Se añade la configuración max_execution_time_leaf para limitar el tiempo de ejecución en el segmento de una consulta distribuida, y timeout_overflow_mode_leaf para controlar el comportamiento si se produce un timeout. #51823 (Duc Canh Le).
  • Se agregó una configuración de ClickHouse para deshabilitar la tunelización de solicitudes HTTPS a través de un proxy HTTP. #55033 (Arthur Passos).
  • Establezca background_fetches_pool_size en 16 y background&#95;schedule&#95;pool&#95;size en 512, lo que resulta más adecuado para entornos de producción con inserciones pequeñas frecuentes. #54327 (Denny Crane).
  • Al leer datos de un archivo en formato CSV, si al final de una línea aparece \r y no va seguido de \n, se producirá la siguiente excepción: Cannot parse CSV format: found \r (CR) not followed by \n (LF). Line must end by \n (LF) or \r\n (CR LF) or \n\r. En ClickHouse, el final de línea en CSV debe ser \n, \r\n o \n\r, por lo que \r debe ir seguido de \n. Sin embargo, en algunas situaciones, los datos de entrada CSV pueden ser anómalos; por ejemplo, como se muestra arriba, \r aparece al final de la línea. #54340 (KevinyhZou).
  • Se actualizó la biblioteca Arrow a release-13.0.0, que admite nuevas codificaciones. Cierra #44505. #54800 (Kruglov Pavel).
  • Mejora el rendimiento de las consultas ON CLUSTER al eliminar las costosas llamadas al sistema para obtener todas las interfaces de red al buscar la dirección IP local en la lista de hosts de la entrada DDL. #54909 (Duc Canh Le).
  • Se corrigió el cómputo de la memoria asignada antes de asociar un hilo a una consulta o a un usuario. #56089 (Nikita Taranov).
  • Se agregó compatibilidad con LARGE_LIST en los formatos Apache Arrow. #56118 (edef).
  • Permitir la compactación manual de EmbeddedRocksDB con la consulta OPTIMIZE. #56225 (Azat Khuzhin).
  • Se añadió la posibilidad de especificar BlockBasedTableOptions para las tablas EmbeddedRocksDB. #56264 (Azat Khuzhin).
  • SHOW COLUMNS ahora muestra el nombre del tipo de datos equivalente de MySQL cuando la conexión se realiza a través del protocolo MySQL. Anteriormente, esto ocurría al establecer use_mysql_types_in_show_columns = 1. La configuración se mantiene, pero queda obsoleta. #56277 (Robert Schulze).
  • Se corrigió un posible error The local set of parts of table doesn't look like the set of parts in ZooKeeper si el servidor se reiniciaba inmediatamente después de TRUNCATE o DROP PARTITION. #56282 (Alexander Tokmakov).
  • Se corrigió el manejo de las query strings no constantes en las funciones formatQuery/ formatQuerySingleLine. También se añadieron variantes OrNull de ambas funciones que devuelven NULL cuando no se puede analizar una consulta, en lugar de generar una excepción. #56327 (Robert Schulze).
  • Permitir la copia de seguridad de una vista materializada con la tabla interna eliminada, en lugar de que falle la copia de seguridad. #56387 (Kseniia Sumarokova).
  • Las consultas a system.replicas generan solicitudes a ZooKeeper cuando se consultan determinadas columnas. Cuando hay miles de tablas, estas solicitudes pueden suponer una carga considerable para ZooKeeper. Si hay varias consultas simultáneas a system.replicas, se repiten las mismas solicitudes varias veces. El cambio consiste en “deduplicar” las solicitudes de las consultas concurrentes. #56420 (Alexander Gololobov).
  • Se corrigió la traducción a una consulta compatible con MySQL para acceder a bases de datos externas. #56456 (flynn).
  • Se añadió compatibilidad para realizar copias de seguridad y restaurar tablas con el motor KeeperMap. #56460 (Antonio Andelic).
  • La respuesta 404 para CompleteMultipartUpload debe volver a verificarse. La operación podría haberse realizado en el servidor incluso si el cliente sufrió un timeout u otros errores de red. El siguiente reintento de CompleteMultipartUpload recibe una respuesta 404. Si la clave del objeto existe, esa operación se considera correcta. #56475 (Sema Checherinda).
  • Se habilita de forma predeterminada el método HTTP OPTIONS, lo que simplifica las solicitudes a ClickHouse desde un navegador web. #56483 (Alexey Milovidov).
  • El valor de dns_max_consecutive_failures se cambió por error en #46550; este cambio se ha revertido y ajustado a un valor más adecuado. Además, se aumentó el timeout de keep-alive de HTTP a un valor razonable para producción. #56485 (Alexey Milovidov).
  • Carga diferida de copias de seguridad base (una copia de seguridad base no se cargará hasta que sea necesaria). También se añaden algunos mensajes de registro y eventos de perfil para las copias de seguridad. #56516 (Vitaly Baranov).
  • La configuración query_cache_store_results_of_queries_with_nondeterministic_functions (con los valores false o true) se marcó como obsoleta. Fue reemplazada por la configuración query_cache_nondeterministic_function_handling, una enumeración de tres valores que controla cómo la caché de consultas maneja las consultas con funciones no deterministas: a) lanzar una excepción (comportamiento predeterminado), b) guardar el resultado de la consulta no determinista en cualquier caso, o c) ignorar, es decir, no lanzar una excepción ni almacenar en caché el resultado. #56519 (Robert Schulze).
  • Reescritura de igualdad con comprobación is null en la cláusula JOIN ON. Solo para el analizador experimental. #56538 (vdimir).
  • La funciónconcat ahora admite tipos de argumentos arbitrarios (en lugar de admitir solo argumentos String y FixedString). Esto hace que se comporte de forma más similar a la implementación de concat de MySQL. Por ejemplo, SELECT concat('ab', 42) ahora devuelve ab42. #56540 (Serge Klochkov).
  • Permite obtener la configuración de caché desde la sección ‘named_collection’ de la configuración o desde named collections creadas con SQL. #56541 (Kseniia Sumarokova).
  • Motor de base de datos PostgreSQL: Hacer que la eliminación de tablas obsoletas sea menos agresiva si falla la conexión con Postgres. #56609 (jsc0218).
  • Tardaba demasiado en conectarse a PG cuando la URL no era correcta, por lo que la consulta correspondiente se quedaba bloqueada y acababa cancelándose. #56648 (jsc0218).
  • Mejora en Keeper: deshabilitar los logs comprimidos de forma predeterminada. #56763 (Antonio Andelic).
  • Agregar la opción de configuración wait_dictionaries_load_at_startup. #56782 (Vitaly Baranov).
  • Existía una posible vulnerabilidad en versiones anteriores de ClickHouse: si un usuario se había conectado e intentaba autenticarse sin éxito con el método “interserver secret”, el servidor no cerraba la conexión de inmediato, sino que seguía recibiendo e ignorando los paquetes restantes del cliente. Aunque estos paquetes se ignoran, se siguen procesando y, si usan un método de compresión con otra vulnerabilidad conocida, esto permitiría explotarla sin autenticación. Este problema se descubrió a través del programa Bug Bounty de ClickHouse por https://twitter.com/malacupa. #56794 (Alexey Milovidov).
  • La obtención de una parte espera a que esa parte esté completamente confirmada en la réplica remota. Es mejor no enviar la parte en estado PreActive. En el caso de zero copy, esta restricción es obligatoria. #56808 (Sema Checherinda).
  • Se corrigió un posible error de conversión en la replicación lógica de PostgreSQL al usar MaterializedPostgreSQL experimental. #53721 (takakawa).
  • Implementa la configuración a nivel de usuario alter_move_to_space_execute_async, que permite ejecutar de forma asíncrona las consultas ALTER TABLE ... MOVE PARTITION|PART TO DISK|VOLUME. El tamaño del pool para las ejecuciones en segundo plano se controla mediante background_move_pool_size. El comportamiento predeterminado es la ejecución síncrona. Corrige #47643. #56809 (alesapin).
  • Se puede filtrar por motor al escanear system.tables, lo que evita conexiones innecesarias (potencialmente lentas). #56813 (jsc0218).
  • Mostrar total_bytes y total_rows en las tablas del sistema para el almacenamiento de RocksDB. #56816 (Aleksandr Musorin).
  • Se permiten comandos básicos en ALTER para tablas TEMPORARY. #56892 (Sergey).
  • Compresión LZ4. Búfer para el bloque comprimido en el caso poco frecuente en que la capacidad del búfer de salida no sea suficiente para escribir el bloque comprimido directamente en el búfer de out. #56938 (Sema Checherinda).
  • Se añaden métricas para el número de trabajos en cola, lo que resulta útil para el pool de hilos de IO. #56958 (Alexey Milovidov).
  • Se agregó un ajuste para el motor de tabla PostgreSQL en el archivo de configuración. Se añadió una comprobación para este ajuste. Se añadió documentación sobre el ajuste adicional. #56959 (Peignon Melvyn).
  • La función concat ahora puede llamarse con un solo argumento, por ejemplo, SELECT concat('abc'). Esto hace que su comportamiento sea más consistente con la implementación de concat de MySQL. #57000 (Serge Klochkov).
  • Firma todas las cabeceras x-amz-*, tal como exige la documentación de AWS S3. #57001 (Arthur Passos).
  • La función fromDaysSinceYearZero (alias: FROM_DAYS) ahora puede usarse con tipos enteros con y sin signo (anteriormente, debía ser un entero sin signo). Esto mejora la compatibilidad con herramientas de terceros como Tableau Online. #57002 (Serge Klochkov).
  • Se añadió system.s3queue_log a la configuración predeterminada. #57036 (Kseniia Sumarokova).
  • Cambiar el valor predeterminado de wait_dictionaries_load_at_startup a true y usar esta configuración solo si dictionaries_lazy_load es false. #57133 (Vitaly Baranov).
  • Comprobar el tipo de origen del diccionario al crearlo, incluso si dictionaries_lazy_load está activado. #57134 (Vitaly Baranov).
  • Las optimizaciones a nivel de plan ahora se pueden habilitar o deshabilitar de forma individual. Antes, solo era posible deshabilitarlas todas. La configuración que antes cumplía esa función (query_plan_enable_optimizations) se conserva y todavía puede usarse para deshabilitar todas las optimizaciones. #57152 (Robert Schulze).
  • El código de salida del servidor coincidirá con el código de excepción. Por ejemplo, si el servidor no puede iniciarse debido al límite de memoria, finalizará con el código 241 = MEMORY_LIMIT_EXCEEDED. En versiones anteriores, el código de salida de las excepciones siempre era 70 = Poco::Util::ExitCode::EXIT_SOFTWARE. #57153 (Alexey Milovidov).
  • No aplicar demangling ni simbolizar los frames de pila de la cabecera de C++ functional. #57201 (Mike Kot).
  • La página /dashboard del servidor HTTP ahora admite gráficos con varias líneas. #57236 (Sergei Trifonov).
  • La opción de línea de comandos max_memory_usage_in_client admite una cadena con un sufijo (K, M, G, etc.). Cierra #56879. #57273 (Yarik Briukhovetskyi).
  • Se actualizó Intel QPL (usado por el códec DEFLATE_QPL) de v1.2.0 a v1.3.1. También se corrigió un error en el caso de BOF (Block On Fault) = 0, y se modificó para gestionar los fallos de página recurriendo a la ruta de software. #57291 (jasperzhu).
  • Aumenta el valor predeterminado de replicated_deduplication_window en la configuración de MergeTree de 100 a 1k. #57335 (sichenzhao).
  • Reduce el uso de INCONSISTENT_METADATA_FOR_BACKUP. Si es posible, se prefiere continuar el escaneo en lugar de detenerlo y reiniciar el escaneo de la copia de seguridad desde el principio. #57385 (Vitaly Baranov).

Mejora de compilación, pruebas y empaquetado

  • Añadir una prueba de SQLLogic. #56078 (Han Fei).
  • Hacer que clickhouse-local y clickhouse-client estén disponibles con nombres cortos (ch, chl, chc) para mejorar la usabilidad. #56634 (Alexey Milovidov).
  • Se optimizó aún más el tamaño de la compilación eliminando código no utilizado de bibliotecas externas. #56786 (Alexey Milovidov).
  • Añadir una comprobación automática para asegurar que no haya unidades de traducción grandes. #56559 (Alexey Milovidov).
  • Reducir el tamaño de la distribución de binario único. Esto cierra #55181. #56617 (Alexey Milovidov).
  • La información sobre el tamaño de cada unidad de traducción y archivo binario después de cada compilación se enviará a la base de datos de CI en ClickHouse Cloud. Esto cierra #56107. #56636 (Alexey Milovidov).
  • Ciertos archivos de la biblioteca “Apache Arrow” (que usamos solo para aspectos no esenciales, como el análisis del formato Arrow) se recompilaban constantemente sin tener en cuenta la caché de compilación. Esto ya se ha corregido. #56657 (Alexey Milovidov).
  • Evitar la recompilación de unidades de traducción que dependen del archivo fuente autogenerado sobre la versión. #56660 (Alexey Milovidov).
  • Los datos de tracing de las invocaciones del enlazador se enviarán a la base de datos de CI en ClickHouse Cloud. #56725 (Alexey Milovidov).
  • Usar símbolos de depuración DWARF 5 para el binario clickhouse (anteriormente era DWARF 4). #56770 (Michael Kolupaev).
  • Añadir una nueva opción de compilación SANITIZE_COVERAGE. Si está habilitada, el código se instrumenta para rastrear la cobertura. La información recopilada está disponible dentro de ClickHouse mediante: (1) una nueva función coverage que devuelve un array de direcciones únicas del código encontradas desde el reinicio anterior de la cobertura; (2) la consulta SYSTEM RESET COVERAGE, que restablece los datos acumulados. Esto nos permite comparar la cobertura de distintas pruebas, incluida la cobertura diferencial de código. Continuación de #20539. #56102 (Alexey Milovidov).
  • Es posible que algunos frames de la pila no se resuelvan al recopilar las pilas. En esos casos, la dirección sin procesar puede resultar útil. #56267 (Alexander Gololobov).
  • Añadir una opción para deshabilitar libssh. #56333 (Alexey Milovidov).
  • Habilitar temporary_data_in_cache en las pruebas de S3 en CI. #48425 (vdimir).
  • Establecer el uso máximo de memoria para clickhouse-client (1G) en CI. #56873 (Nikita Mikhaylov).

corrección de errores (mal funcionamiento visible para el usuario en una versión estable oficial)

Lanzamiento de ClickHouse 23.10, 2023-11-02. Presentación, Video

Cambio incompatible con versiones anteriores

  • Ya no existe una opción para eliminar automáticamente las partes de datos dañadas. Esto cierra #55174. #55184 (Alexey Milovidov). #55557 (Jihyuk Bok).
  • Las partes de datos obsoletas en memoria ya no pueden leerse desde el write-ahead log. Si configuró partes en memoria anteriormente, deben eliminarse antes de la actualización. #55186 (Alexey Milovidov).
  • Se elimina la integración con Meilisearch. Motivo: solo era compatible con la antigua versión 0.18. La versión reciente de Meilisearch cambió el protocolo y ya no funciona. Nota: agradeceríamos su ayuda para recuperarla. #55189 (Alexey Milovidov).
  • Se cambia el nombre del concepto de monitor de directorio a INSERT en segundo plano. Todas las opciones de configuración *directory_monitor* pasaron a llamarse distributed_background_insert*. La compatibilidad con versiones anteriores debería mantenerse (ya que las opciones de configuración antiguas se añadieron como alias). #55978 (Azat Khuzhin).
  • No interprete send_timeout, establecido del lado del cliente, como receive_timeout del lado del servidor, ni viceversa. #56035 (Azat Khuzhin).
  • La comparación de intervalos de tiempo con distintas unidades generará una excepción. Esto cierra #55942. Es posible que en ocasiones haya dependido del comportamiento anterior, en el que se comparaban los valores numéricos subyacentes sin tener en cuenta las unidades. #56090 (Alexey Milovidov).
  • Se reescribió por completo el motor de tabla experimental S3Queue: se cambió la forma en que se mantiene la información en ZooKeeper, lo que permite reducir las solicitudes a ZooKeeper; se añadió almacenamiento en caché del estado de ZooKeeper en los casos en que sabemos que ese estado no cambiará; se mejoró el proceso de sondeo desde S3 para que sea menos agresivo; se cambió la forma en que se mantienen el TTL y el valor máximo configurados para los archivos rastreados, y ahora es un proceso en segundo plano. Se añadieron las tablas system.s3queue y system.s3queue_log. Cierra #54998. #54422 (Kseniia Sumarokova).
  • Las rutas arbitrarias en el endpoint HTTP ya no se interpretan como una solicitud al endpoint /query. #55521 (Konstantin Bogdanov).

Nueva funcionalidad

  • Se añade la función arrayFold(accumulator, x1, ..., xn -> expression, initial, array1, ..., arrayn), que aplica una función lambda a varios arrays de la misma cardinalidad y acumula el resultado en un acumulador. #49794 (Lirikl).
  • Compatibilidad con el formato Npy. SELECT * FROM file('example_array.npy', Npy). #55982 (Yarik Briukhovetskyi).
  • Si una tabla tiene una curva de llenado del espacio en su clave, p. ej., ORDER BY mortonEncode(x, y), las condiciones de sus argumentos, p. ej., x >= 10 AND x <= 20 AND y >= 20 AND y <= 30, pueden utilizarse para la indexación. Se añade el ajuste analyze_index_with_space_filling_curves para habilitar o deshabilitar este análisis. Esto cierra #41195. Continuación de #4538. Continuación de #6286. Continuación de #28130. Continuación de #41753. #55642 (Alexey Milovidov).
  • Un nuevo ajuste llamado force_optimize_projection_name toma el nombre de una proyección como argumento. Si su valor se establece como una cadena no vacía, ClickHouse comprueba que esta proyección se utilice en la consulta al menos una vez. Cierra #55331. #56134 (Yarik Briukhovetskyi).
  • Se admiten inserciones asíncronas con datos externos a través del protocolo nativo. Antes solo funcionaba si los datos se incluían directamente en la consulta. #54730 (Anton Popov).
  • Se añadió la función de agregación lttb, que utiliza el algoritmo Largest-Triangle-Three-Buckets para reducir la resolución de los datos con fines de visualización. #53145 (Sinan).
  • La consultaCHECK TABLE ofrece mejor rendimiento y usabilidad (envía actualizaciones de progreso, se puede cancelar). Permite comprobar una parte concreta con CHECK TABLE ... PART 'part_name'. #53404 (vdimir).
  • Se añadió la función jsonMergePatch. Al trabajar con datos JSON en forma de cadenas, permite combinar estas cadenas (de objetos JSON) para formar una sola cadena que contiene un único objeto JSON. #54364 (Memo).
  • La segunda parte de la compatibilidad con el dialecto de Kusto Query Language. Se ha integrado la implementación de la Fase 1 . #42510 (larryluogit).
  • Se añadió una nueva función SQL, arrayRandomSample(arr, k), que devuelve una muestra de k elementos del array de entrada. Anteriormente, solo se podía conseguir una funcionalidad similar con una sintaxis menos práctica, p. ej. “SELECT arrayReduce(‘groupArraySample(3)’, range(10))”. #54391 (itayisraelov).
  • Se introducen los combinadores de agregación -ArgMin/-ArgMax, que permiten agregar solo según los valores mínimos o máximos. Puede encontrarse un caso de uso en #54818. Este PR también reorganiza los combinadores en una carpeta específica. #54947 (Amos Bird).
  • Se permite eliminar la caché de esquemas del formato Protobuf con SYSTEM DROP SCHEMA FORMAT CACHE [FOR Protobuf]. #55064 (Aleksandr Musorin).
  • Se añade un autenticador HTTP Basic externo. #55199 (Aleksei Filatov).
  • Se añadió la función byteSwap, que invierte el orden de los bytes de los enteros sin signo. Esto resulta especialmente útil para invertir valores de tipos que se representan internamente como enteros sin signo, como IPv4. #55211 (Priyansh Agrawal).
  • Se añadió la función formatQuery, que devuelve una versión con formato (posiblemente en varias líneas) de una cadena de consulta SQL. También se añadió la función formatQuerySingleLine, que hace lo mismo, pero la cadena devuelta no contendrá saltos de línea. #55239 (Salvatore Mesoraca).
  • Se añadió el formato de entrada DWARF, que lee símbolos de depuración de un archivo ELF ejecutable, biblioteca u objeto. #55450 (Michael Kolupaev).
  • Permite guardar registros sin analizar y errores en los motores RabbitMQ, NATS y FileLog. Añade las columnas virtuales _error y _raw_message (para NATS y RabbitMQ) y _raw_record (para FileLog), que se rellenan cuando ClickHouse no puede analizar un registro nuevo. El comportamiento se controla mediante los ajustes de almacenamiento nats_handle_error_mode para NATS, rabbitmq_handle_error_mode para RabbitMQ y handle_error_mode para FileLog, de forma similar a kafka_handle_error_mode. Si se establece en default, se lanzará una excepción cuando ClickHouse no pueda analizar un registro; si se establece en stream, el error y el registro sin procesar se guardarán en las columnas virtuales. Cierra #36035. #55477 (Kruglov Pavel).
  • Mejora del cliente de Keeper: se añade el comando get_all_children_number command, que devuelve el número total de nodos hijo bajo una ruta específica. #55485 (guoxiaolong).
  • Mejora del cliente de Keeper: se añade el comando get_direct_children_number, que devuelve el número de nodos hijo directos de una ruta. #55898 (xuzifu666).
  • Se añade la instrucción SHOW SETTING setting_name, que es una versión más sencilla de la instrucción existente SHOW SETTINGS. #55979 (Maksim Kita).
  • Se añadieron los campos substreams y filenames a la tabla system.parts_columns. #55108 (Anton Popov).
  • Se añade soporte para la consulta SHOW MERGES. #55815 (megao).
  • Se introduce la configuración create_table_empty_primary_key_by_default para usar ORDER BY () de forma predeterminada. #55899 (Srikanth Chekuri).

Mejora del rendimiento

  • Añade la opción query_plan_preserve_num_streams_after_window_functions para conservar el número de flujos tras evaluar las funciones de ventana y permitir el procesamiento paralelo de flujos. #50771 (frinkr).
  • Liberar más flujos cuando los datos son pequeños. #53867 (Jiebin Sun).
  • Optimización de RoaringBitmaps antes de la serialización. #55044 (UnamedRus).
  • Las posting lists de los índices invertidos ahora están optimizadas para usar la representación más pequeña posible para los bitmaps internos. Dependiendo de lo repetitivos que sean los datos, esto puede reducir significativamente el consumo de espacio de los índices invertidos. #55069 (Harry Lee).
  • Se corrige la contención en el bloqueo de Context, lo que mejora significativamente el rendimiento de muchas consultas concurrentes de corta duración. #55121 (Maksim Kita).
  • Se mejoró en un 30 % el rendimiento de la creación de índices invertidos. Esto se logró al sustituir std::unordered_map por absl::flat_hash_map. #55210 (Harry Lee).
  • Soporte para pushdown de filtros ORC (a nivel de grupo de filas). #55330 (李扬).
  • Mejorar el rendimiento de la agregación externa cuando hay muchos archivos temporales. #55489 (Maksim Kita).
  • Se establece de forma predeterminada un tamaño razonable para la caché de marks de los índices secundarios para evitar cargar los marks repetidamente. #55654 (Alexey Milovidov).
  • Se evita la reconstrucción innecesaria de los gránulos de índice al leer índices de omisión. Esto soluciona #55653. #55683 (Amos Bird).
  • Se almacena en caché la función CAST en el conjunto durante la ejecución para mejorar el rendimiento de la función IN cuando el tipo de elemento del conjunto no coincide exactamente con el tipo de la columna. #55712 (Duc Canh Le).
  • Mejora del rendimiento de ColumnVector::insertMany y ColumnVector::insertManyFrom. #55714 (frinkr).
  • Se optimizaron las operaciones de acceso por subíndice en Map al predecir la posición de la clave de la siguiente fila y reducir las comparaciones. #55929 (lgbo).
  • Se añadió compatibilidad con la poda de campos de estructuras en Parquet (en versiones anteriores no funcionaba en algunos casos). #56117 (lgbo).
  • Se añade la posibilidad de ajustar el número de réplicas paralelas utilizadas en la ejecución de una consulta en función de la estimación de las filas que se van a leer. #51692 (Raúl Marín).
  • Se optimizó el consumo de memoria de la agregación externa cuando se generaban muchos archivos temporales. #54798 (Nikita Taranov).
  • Las consultas distribuidas ejecutadas en modo async_socket_for_remote (predeterminado) ahora respetan el límite de max_threads. Anteriormente, algunas consultas podían crear un número excesivo de hilos (hasta max_distributed_connections), lo que provocaba problemas de rendimiento en el servidor. #53504 (filimonov).
  • Almacenamiento en caché de entradas omitibles al ejecutar DDL desde la cola de DDL distribuido de ZooKeeper. #54828 (Duc Canh Le).
  • Los índices invertidos experimentales no almacenan tokens con demasiadas coincidencias (es decir, IDs de fila en la posting list). Esto ahorra espacio y evita búsquedas ineficaces en el índice cuando los escaneos secuenciales serían igual de rápidos o más rápidos. Las heurísticas anteriores (el parámetro density pasado a la definición del índice) que controlaban cuándo no se almacenaban los tokens eran demasiado confusas para los usuarios. Se introduce una heurística mucho más simple basada en el parámetro max_rows_per_postings_list (valor predeterminado: 64k), que controla directamente el número máximo permitido de IDs de fila en una postings list. #55616 (Harry Lee).
  • Mejora el rendimiento de escritura de las tablas EmbeddedRocksDB. #55732 (Duc Canh Le).
  • Se mejoró la resiliencia general de ClickHouse cuando hay muchas partes dentro de una partición (más de 1000). Esto podría reducir la cantidad de errores TOO_MANY_PARTS. #55526 (Nikita Mikhaylov).
  • Se redujo el consumo de memoria durante la carga de diccionarios jerárquicos. #55838 (Nikita Taranov).
  • Todos los diccionarios admiten el ajuste dictionary_use_async_executor. #55839 (vdimir).
  • Evita el uso excesivo de memoria al deserializar AggregateFunctionTopKGenericData. #55947 (Raúl Marín).
  • En un Keeper con muchos watches, los hilos de AsyncMetrics pueden consumir el 100 % de la CPU durante un tiempo considerable en DB::KeeperStorage::getSessionsWithWatchesCount. La corrección consiste en evitar recorrer los grandes conjuntos watches y list_watches. #56054 (Alexander Gololobov).
  • Se agregó la configuración optimize_trivial_approximate_count_query para usar la aproximación de count en el motor de almacenamiento EmbeddedRocksDB. Se habilitó el conteo trivial para StorageJoin. #55806 (Duc Canh Le).

Mejora

  • Las funciones toDayOfWeek (alias de MySQL: DAYOFWEEK), toYearWeek (YEARWEEK) y toWeek (WEEK) ahora admiten argumentos de tipo String. Esto hace que su comportamiento sea coherente con el de MySQL. #55589 (Robert Schulze).
  • Se introdujo la configuración date_time_overflow_behavior con los valores posibles ignore, throw, saturate, que controla el comportamiento ante desbordamientos al convertir de Date, Date32, DateTime64, Integer o Float a Date, Date32, DateTime o DateTime64. #55696 (Andrey Zvonov).
  • Implementa la compatibilidad con parámetros de consulta en ALTER TABLE ... ACTION PARTITION [ID] {parameter_name:ParameterType}. Fusiona #49516. Cierra #49449. #55604 (alesapin).
  • Mostrar los ID de los procesadores de forma más legible en EXPLAIN. #48852 (Vlad Seliverstov).
  • Se rechazará al crear un diccionario directo con un campo lifetime (ya que lifetime no tiene sentido para los diccionarios directos). Correcciones: #27861. #49043 (Rory Crispin).
  • Se permiten parámetros en consultas con particiones, como ALTER TABLE t DROP PARTITION. Cierra #49449. #49516 (Nikolay Degterinsky).
  • Se agregó una nueva columna xid a system.zookeeper_connection. #50702 (helifu).
  • Mostrar los ajustes correctos del servidor en system.server_settings tras recargar la configuración. #53774 (helifu).
  • Se añadió compatibilidad con el carácter de signo menos matemático en las consultas, igual que con -. #54100 (Alexey Milovidov).
  • Añade grupos de réplicas al motor de base de datos experimental Replicated. Cierra #53620. #54421 (Nikolay Degterinsky).
  • Es mejor reintentar los errores recuperables de S3 que hacer fallar por completo la consulta. Se establece de forma predeterminada un valor mayor para s3_retry_attempts. #54770 (Sema Checherinda).
  • Se añade el modo de balanceo de carga hostname_levenshtein_distance. #54826 (JackyWoo).
  • Mejora al ocultar secretos en los logs. #55089 (Vitaly Baranov).
  • Por ahora, el análisis de proyecciones se realizará únicamente a partir del plan de consulta. La configuración query_plan_optimize_projection quedó obsoleta (estaba habilitada de forma predeterminada desde hace mucho tiempo). #55112 (Nikita Mikhaylov).
  • Cuando la función untuple se invoca ahora sobre una tupla con elementos con nombre y además tiene su propio alias (p. ej., select untuple(tuple(1)::Tuple(element_alias Int)) AS untuple_alias), el nombre de la columna resultante se genera ahora a partir del alias de untuple y del alias del elemento de la tupla (en el ejemplo: “untuple_alias.element_alias”). #55123 (garcher22).
  • Se añadió la configuración describe_include_virtual_columns, que permite incluir las columnas virtuales de la tabla en el resultado de la consulta DESCRIBE. Se añadió la configuración describe_compact_output. Si se establece en true, la consulta DESCRIBE devuelve solo los nombres y los tipos de las columnas, sin información adicional. #55129 (Anton Popov).
  • A veces, OPTIMIZE con optimize_throw_if_noop=1 puede fallar con el error unknown reason cuando la causa real es que hay proyecciones distintas en diferentes partes. Este comportamiento ya se ha corregido. #55130 (Nikita Mikhaylov).
  • Permite tener varias tablas MaterializedPostgreSQL que sigan la misma tabla de Postgres. De forma predeterminada, este comportamiento no está activado (por compatibilidad, ya que es un cambio incompatible con versiones anteriores), pero puede habilitarse con la configuración materialized_postgresql_use_unique_replication_consumer_identifier. Cierra #54918. #55145 (Kseniia Sumarokova).
  • Permitir analizar DateTime64 y DateTime negativos con parte fraccionaria a partir de cadenas cortas. #55146 (Andrey Zvonov).
  • Para mejorar la compatibilidad con MySQL, 1. information_schema.tables ahora incluye el nuevo campo table_rows y 2. information_schema.columns ahora incluye el nuevo campo extra. #55215 (Robert Schulze).
  • Clickhouse-client no mostrará “0 rows in set” si es cero y se produjo una excepción. #55240 (Salvatore Mesoraca).
  • Admite renombrar una tabla sin la palabra clave TABLE, como en RENAME db.t1 to db.t2. #55373 (凌涛).
  • Se añade internal_replication a system.clusters. #55377 (Konstantin Morozov).
  • Seleccionar el resolvedor de proxy remoto según el protocolo de la solicitud, añadir documentación sobre la funcionalidad de proxy y eliminar DB::ProxyConfiguration::Protocol::ANY. #55430 (Arthur Passos).
  • Evitar reintentar operaciones de Keeper en INSERT tras cerrar la tabla. #55519 (Azat Khuzhin).
  • SHOW COLUMNS ahora informa correctamente el tipo FixedString como BLOB si la configuración use_mysql_types_in_show_columns está activada. También se añadieron dos nuevas opciones de configuración, mysql_map_string_to_text_in_show_columns y mysql_map_fixed_string_to_text_in_show_columns, para cambiar la salida de los tipos String y FixedString a TEXT o BLOB. #55617 (Serge Klochkov).
  • Durante el arranque de las tablas ReplicatedMergeTree, el servidor ClickHouse comprueba el conjunto de partes para detectar partes inesperadas (existen localmente, pero no en ZooKeeper). Todas las partes inesperadas se mueven al directorio detached y, en su lugar, el servidor intenta restaurar algunas partes ancestro (cubiertas). Ahora el servidor intenta restaurar los ancestros más cercanos en lugar de partes cubiertas aleatorias. #55645 (alesapin).
  • El dashboard avanzado ahora permite arrastrar gráficos en dispositivos táctiles. Esto cierra #54206. #55649 (Alexey Milovidov).
  • Usa el formato predeterminado de la consulta, si se ha declarado, al devolver una excepción con http_write_exception_in_output_format. #55739 (Raúl Marín).
  • Mejorar el mensaje para problemas comunes de MATERIALIZED VIEW. #55826 (Raúl Marín).
  • Si eliminaste la base de datos actual, aún podrás ejecutar algunas consultas en clickhouse-local y cambiar a otra base de datos. Esto hace que el comportamiento sea consistente con clickhouse-client. Esto cierra #55834. #55853 (Alexey Milovidov).
  • Las funciones (add|subtract)(Year|Quarter|Month|Week|Day|Hour|Minute|Second|Millisecond|Microsecond|Nanosecond) ahora admiten argumentos de fecha codificados en cadenas, por ejemplo, SELECT addDays('2023-10-22', 1). Esto mejora la compatibilidad con MySQL y es necesario para Tableau Online. #55869 (Robert Schulze).
  • La configuración apply_deleted_mask, cuando está deshabilitada, permite leer filas marcadas como eliminadas por consultas DELETE de eliminación ligera. Esto es útil para la depuración. #55952 (Alexander Gololobov).
  • Permite omitir los valores null al serializar Tuple como objetos JSON, lo que permite mantener la compatibilidad con la función to_json de Spark y también resulta útil para gluten. #55956 (李扬).
  • Las funciones (add|sub)Date ahora admiten argumentos de fecha codificados en cadenas, p. ej., SELECT addDate('2023-10-22 11:12:13', INTERVAL 5 MINUTE). El mismo soporte para argumentos de fecha codificados en cadenas se ha añadido a los operadores de suma y resta, p. ej., SELECT '2023-10-23' + INTERVAL 1 DAY. Esto aumenta la compatibilidad con MySQL y es necesario para Tableau Online. #55960 (Robert Schulze).
  • Se permiten cadenas sin comillas con CR (\r) en formato CSV. Cierra #39930. #56046 (Kruglov Pavel).
  • Permitir ejecutar clickhouse-keeper con configuración integrada. #56086 (Maksim Kita).
  • Se estableció un límite para el valor máximo de configuración de queued.min.messages a fin de evitar problemas al empezar a recuperar datos con Kafka. #56121 (Stas Morozov).
  • Se corrigió un error tipográfico en la función SQL minSampleSizeContinous (renombrada como minSampleSizeContinuous). Se conserva el nombre anterior por compatibilidad con versiones anteriores. Esto cierra: #56139. #56143 (Dorota Szeremeta).
  • Imprime la ruta de las partes dañadas en el disco antes de apagar el servidor. Antes de este cambio, si una parte estaba corrupta en el disco y el servidor no podía iniciarse, era casi imposible saber qué parte estaba dañada. Esto se ha corregido. #56181 (Duc Canh Le).

Mejora de compilación, pruebas y empaquetado

  • Si la base de datos en Docker ya está inicializada, no es necesario volver a inicializarla en lanzamientos posteriores. Esto puede corregir el problema de reinicios infinitos del contenedor cuando la base de datos no se carga en 1000 intentos (relevante para bases de datos muy grandes y configuraciones multinodo). #50724 (Alexander Nikolaev).
  • El recurso con el código fuente, incluidos los submódulos, se compila en una tarea especial de compilación para Darwin. Puede usarse para compilar ClickHouse sin necesidad de hacer checkout de los submódulos. #51435 (Ilya Yatsishin).
  • Se producía un error al compilar ClickHouse con el conjunto de instrucciones AVX habilitado globalmente (lo cual no se recomienda). La razón es que snappy no habilita SNAPPY_HAVE_X86_CRC32. #55049 (monchickey).
  • Se resolvió un problema al iniciar clickhouse-keeper de forma independiente desde el paquete clickhouse-server. #55226 (Mikhail f. Shiryaev).
  • En las pruebas, la versión de RabbitMQ se actualizó a la 3.12.6. Se mejoró la recopilación de logs para las pruebas de RabbitMQ. #55424 (Ilya Yatsishin).
  • Se modificó la diferencia en el mensaje de error entre openssl y boringssl para corregir la prueba funcional. #55975 (MeenaRenganathan22).
  • Se usa el repositorio upstream para apache datasketches. #55787 (Nikita Taranov).

corrección de errores (mal funcionamiento visible para el usuario en una versión estable oficial)

  • Omitir la creación de enlaces físicos para archivos de índice invertido en mutaciones #47663 (cangyin).
  • Se corrigió un error en la función match (regex) por el que un patrón con alternancia producía una condición de clave incorrecta. Cierra #53222. #54696 (Yakov Olkhovskiy).
  • Corrige el error ‘Cannot find column’ en la optimización de lectura en orden con ARRAY JOIN #51746 (Nikolai Kochetov).
  • Se añadió compatibilidad en consultas con las subcolumnas experimentales Object(Nullable(json)) que faltaban. #54052 (zps).
  • Se vuelve a aplicar la corrección de accurateCastOrNull #54629 (Salvatore Mesoraca).
  • Se corrigió la detección de DEFAULT en columnas de una tabla Distributed creada sin AS #55060 (Vitaly Baranov).
  • Limpieza adecuada en caso de excepción en el constructor de ShellCommandSource #55103 (Alexander Gololobov).
  • Se corrigió un interbloqueo en la actualización del rol asignado por LDAP #55119 (Julian Maicher).
  • Suprimir la actualización de las estadísticas de errores para excepciones internas #55128 (Robert Schulze).
  • Se corrige un interbloqueo en las copias de seguridad #55132 (alesapin).
  • Se corrigió la recuperación de archivos Iceberg del almacenamiento #55144 (Kseniia Sumarokova).
  • Se corrigió la poda de particiones de columnas adicionales en Set. #55172 (Amos Bird).
  • Corregido el recálculo de los skip indexes en las consultas ALTER UPDATE cuando la tabla tiene granularidad adaptativa #55202 (Duc Canh Le).
  • Corrección de la descarga en segundo plano en fs cache #55252 (Kseniia Sumarokova).
  • Evita posibles fugas de memoria en los compresores si no se finaliza el búfer #55262 (Azat Khuzhin).
  • Corregida la ejecución de funciones en columnas dispersas #55275 (Azat Khuzhin).
  • Se corrigió la fusión incorrecta de Nested para SELECT FINAL FROM SummingMergeTree #55276 (Azat Khuzhin).
  • Se corrigió un error que impedía eliminar una partición detached de un MergeTree replicado sobre S3 sin zero copy #55309 (alesapin).
  • Se corrige un cierre inesperado en MergeSortingPartialResultTransform (debido a que no había fragmentos tras remerge) #55335 (Azat Khuzhin).
  • Se corrige una condición de carrera de datos en CreatingSetsTransform (en caso de errores) debida al lanzamiento de una excepción compartida #55338 (Azat Khuzhin).
  • Se corrigió la optimización de basura (hasta cierto punto) #55353 (Alexey Milovidov).
  • Se corrige una fuga en StorageHDFS #55370 (Azat Khuzhin).
  • Se corrige el análisis de arrays en el operador CAST #55417 (Anton Popov).
  • Se corrige el filtrado por columnas virtuales con el operador OR en la consulta #55418 (Azat Khuzhin).
  • Soluciona problemas de conexión con MongoDB #55419 (Nikolay Degterinsky).
  • Se corrige la representación de valores booleanos en la interfaz MySQL #55427 (Serge Klochkov).
  • Corregido el formato de DateTime en el protocolo de texto de MySQL y la notificación de tipos LowCardinality(Nullable(T)) #55479 (Serge Klochkov).
  • Hacer que use_mysql_types_in_show_columns solo afecte a SHOW COLUMNS #55481 (Robert Schulze).
  • Corregido el análisis incorrecto de DW_FORM_ref_addr en el simbolizador de pila, que a veces provocaba fallos #55483 (Michael Kolupaev).
  • Destruir la fibra en caso de que se produzca una excepción en cancelBefore de AsyncTaskExecutor #55516 (Kruglov Pavel).
  • Se corrige que los parámetros de consulta no funcionen con controladores HTTP personalizados #55521 (Konstantin Bogdanov).
  • Corrige la validación de datos no procesados en el formato Values #55527 (Azat Khuzhin).
  • Se corrigió ‘Invalid cursor state’ en ODBC al interactuar con MS SQL Server #55558 (vdimir).
  • Se corrigen el tiempo máximo de ejecución y el modo de desbordamiento ‘break’ #55577 (Alexander Gololobov).
  • Corrige un fallo en QueryNormalizer con alias cíclicos #55602 (vdimir).
  • Desactivar una optimización errónea y añadir una prueba #55609 (Alexey Milovidov).
  • Fusión #52352 #55621 (Alexey Milovidov).
  • Añade una prueba para evitar una ordenación incorrecta de valores Decimal #55662 (Amos Bird).
  • Se corrigió la barra de progreso de las funciones Cluster de S3 y Azure con URL sin globs #55666 (Kruglov Pavel).
  • Se corrige el filtrado por columnas virtuales con filtro OR en la consulta (reenvío) #55678 (Azat Khuzhin).
  • Correcciones y mejoras en el almacenamiento de Iceberg #55695 (Kruglov Pavel).
  • Se corrige una condición de carrera en CreatingSetsTransform (v2) #55786 (Azat Khuzhin).
  • Lanzar una excepción al analizar una cadena inválida como float si precise_float_parsing es true #55861 (李扬).
  • Deshabilitar el pushdown de predicados si el CTE contiene funciones con estado #55871 (Raúl Marín).
  • Se corrigió normalize ASTSelectWithUnionQuery, que estaba eliminando FORMAT de la consulta #55887 (flynn).
  • Se intenta corregir un posible fallo de segmentación en el formato de entrada ORC nativo #55891 (Kruglov Pavel).
  • Se corrigieron las funciones de ventana en el caso de columnas dispersas. #55895 (János Benjamin Antal).
  • corrección: StorageNull admite subcolumnas #55912 (FFish).
  • No registrar errores reintentables de mutate/merge de Replicated en el registro de errores #55944 (Azat Khuzhin).
  • Se corrige SHOW DATABASES LIMIT <N> #55962 (Raúl Marín).
  • Corrige el esquema Protobuf autogenerado con campos con guiones bajos #55974 (Kruglov Pavel).
  • Se corrige dateTime64ToSnowflake64() cuando se usa una escala no predeterminada #55983 (Robert Schulze).
  • Corregida la salida/entrada de la columna de diccionario de Arrow #55989 (Kruglov Pavel).
  • Se corrigió la obtención del esquema desde el registro de esquemas en AvroConfluent #55991 (Kruglov Pavel).
  • Se corrige el error ‘Block structure mismatch’ en operaciones ALTER e INSERT concurrentes en una tabla Buffer #55995 (Michael Kolupaev).
  • Se corrige la contabilización incorrecta del espacio libre en la política JBOD least_used #56030 (Azat Khuzhin).
  • Se corrige el problema de falta de un valor escalar al evaluar subconsultas dentro de funciones de tabla #56057 (Amos Bird).
  • Corrige un resultado incorrecto de la consulta cuando http_write_exception_in_output_format=1 #56135 (Kruglov Pavel).
  • Corregir la caché del esquema para el fallback JSON->JSONEachRow con la configuración modificada #56172 (Kruglov Pavel).
  • Añadir un manejador de errores a odbc-bridge #56185 (Yakov Olkhovskiy).

Lanzamiento de ClickHouse 23.9, 2023-09-28. Presentación, Video

Cambio incompatible con versiones anteriores

  • Se eliminan la opción de configuración status_info y el estado de los diccionarios del handler predeterminado de Prometheus. #54090 (Alexey Milovidov).
  • La caché de metadatos experimental de partes se elimina del código fuente. #54215 (Alexey Milovidov).
  • Se deshabilita por defecto la configuración input_format_json_try_infer_numbers_from_strings, de modo que ya no se intentará inferir números a partir de cadenas en los formatos JSON de forma predeterminada, para evitar posibles errores de análisis cuando los datos de muestra contienen cadenas que parecen números. #55099 (Kruglov Pavel).

Nueva funcionalidad

  • Mejora de la inferencia de esquemas en formatos JSON: 1) Ahora es posible inferir named Tuples a partir de JSON objects sin el JSON type experimental mediante la opción input_format_json_try_infer_named_tuples_from_objects en los formatos JSON. Antes, sin el tipo JSON experimental, solo podíamos inferir JSON objects como Strings o Maps; ahora también podemos inferir named Tuple. El tipo Tuple resultante contendrá todas las claves de los objetos leídos en la muestra de datos durante la inferencia de esquemas. Esto puede ser útil para leer datos JSON estructurados sin objetos dispersos. La opción está habilitada de forma predeterminada. 2) Permitir el parsing de un JSON array en una columna de tipo String mediante la opción input_format_json_read_arrays_as_strings. Esto puede ayudar a leer arrays con valores de distintos tipos. 3) Permitir usar el tipo String para claves JSON con tipos desconocidos (null/[]/{}) en los datos de muestra mediante la opción input_format_json_infer_incomplete_types_as_strings. Ahora, en los formatos JSON, podemos leer cualquier valor en una columna String y evitar el error Cannot determine type for column 'column_name' by first 25000 rows of data, most likely this column contains only Nulls or empty Arrays/Maps durante la inferencia de esquemas al usar el tipo String para tipos desconocidos, de modo que los datos se leerán correctamente. #54427 (Kruglov Pavel).
  • Se añadió compatibilidad con la planificación de IO para discos remotos. La configuración de almacenamiento para los tipos de disco s3, s3_plain, hdfs y azure_blob_storage ahora puede incluir elementos read_resource y write_resource con nombres de recursos. Las políticas de planificación para estos recursos pueden configurarse en una sección independiente resources de la configuración del servidor. Las consultas pueden marcarse con el ajuste workload y clasificarse mediante la sección workload_classifiers de la configuración del servidor para lograr distintos objetivos de planificación de recursos. Más detalles en la documentación. #47009 (Sergei Trifonov). Se añadió el tipo de nodo de planificación de IO “bandwidth_limit”. Permite especificar restricciones max_speed y max_burst para el tráfico que pasa por este nodo. #54618 (Sergei Trifonov).
  • Se añadió un nuevo tipo de autenticación basado en claves SSH. Solo funciona con el protocolo TCP nativo. #41109 (George Gamezardashvili).
  • Se añadió una nueva columna _block_number a las tablas MergeTree. #44532. #47532 (SmitaRKulkarni).
  • Agregar la cláusula IF EMPTY a las consultas DROP TABLE. #48915 (Pavel Novitskiy).
  • Las funciones SQL toString(datetime, timezone) y formatDateTime(datetime, format, timezone) ahora admiten argumentos de zona horaria que no son constantes. #53680 (Yarik Briukhovetskyi).
  • Se añadió compatibilidad con ALTER TABLE MODIFY COMMENT. Nota: hace mucho tiempo un colaborador externo añadió algo similar, pero la funcionalidad no funcionaba en absoluto y solo confundía a los usuarios. Esto cierra #36377. #51304 (Alexey Milovidov). Nota: este comando no se propaga entre réplicas, por lo que las réplicas de una tabla podrían tener comentarios distintos.
  • Se añadió GCD, también conocido como “máximo común divisor”, como un nuevo códec de compresión de datos. El códec calcula el GCD de todos los valores de la columna y luego divide cada valor por el GCD. El códec GCD es un códec de preparación de datos (similar a Delta y DoubleDelta) y no puede usarse por sí solo. Funciona con datos de tipo entero, decimal y fecha/hora. Un caso de uso adecuado para el códec GCD es cuando los valores de una columna cambian (aumentan/disminuyen) en múltiplos del GCD; p. ej., 24 - 28 - 16 - 24 - 8 - 24 (suponiendo que GCD = 4). #53149 (Alexander Nam).
  • Se añadieron dos nuevos alias de tipo: DECIMAL(P) (como abreviatura de DECIMAL(P, 0)) y DECIMAL (como abreviatura de DECIMAL(10, 0)). Esto hace que ClickHouse sea más compatible con el dialecto SQL de MySQL. #53328 (Val Doroshchuk).
  • Se añadió una nueva tabla de log del sistema, backup_log, para hacer un seguimiento de todas las operaciones BACKUP y RESTORE. #53638 (Victor Krasnov).
  • Se añadió una configuración de formato output_format_markdown_escape_special_characters (valor predeterminado: false). Esta configuración controla si los caracteres especiales como !, #, $, etc. se escapan (es decir, si van precedidos de una barra invertida) en el formato de salida Markdown. #53860 (irenjj).
  • Se añade la función decodeHTMLComponent. #54097 (Bharat Nallan).
  • Se añadió peak_threads_usage a la tabla query_log. #54335 (Alexey Gerasimchuck).
  • Se añade soporte para SHOW FUNCTIONS en clickhouse-client. #54337 (Julia Kartseva).
  • Se añadió la función toDaysSinceYearZero con el alias TO_DAYS (por compatibilidad con MySQL), que devuelve el número de días transcurridos desde 0001-01-01 (en el calendario gregoriano proléptico). #54479 (Robert Schulze). La función toDaysSinceYearZero ahora admite argumentos de tipo DateTime y DateTime64. #54856 (Serge Klochkov).
  • Se añadieron las funciones YYYYMMDDtoDate, YYYYMMDDtoDate32, YYYYMMDDhhmmssToDateTime y YYYYMMDDhhmmssToDateTime64. Convierten una fecha o una fecha con hora codificada como entero (p. ej., 20230911) en una fecha nativa o una fecha con hora nativa. Por tanto, ofrecen la funcionalidad opuesta a las funciones existentes YYYYMMDDToDate, YYYYMMDDToDateTime, YYYYMMDDhhmmddToDateTime, YYYYMMDDhhmmddToDateTime64. #54509 (Quanfa Fu) (Robert Schulze).
  • Se añaden varias funciones de distancia entre cadenas, incluidas byteHammingDistance y editDistance. #54935 (flynn).
  • Permite especificar la fecha de caducidad y, opcionalmente, la hora de las credenciales de usuario mediante la cláusula VALID UNTIL datetime. #51261 (Nikolay Degterinsky).
  • Se permiten URL de estilo S3 para las funciones de tabla s3, gcs, oss. La URL se convierte automáticamente a HTTP. Ejemplo: 's3://clickhouse-public-datasets/hits.csv' se convierte en 'https://clickhouse-public-datasets.s3.amazonaws.com/hits.csv'. #54931 (Yarik Briukhovetskyi).
  • Se agrega la nueva configuración print_pretty_type_names para mostrar de forma legible tipos profundamente anidados, como Tuple/Maps/Arrays. #55095 (Kruglov Pavel).

Mejora del rendimiento

  • Acelera la lectura desde S3 al habilitar la lectura anticipada de forma predeterminada. #53709 (Alexey Milovidov).
  • No se leen implícitamente las columnas PK y de versión en partes individuales cuando no son necesarias para consultas con FINAL. #53919 (Duc Canh Le).
  • Optimiza la agrupación por claves constantes. Optimizará las consultas con group by _file/_path después de https://github.com/ClickHouse/ClickHouse/pull/53529. #53549 (Kruglov Pavel).
  • Se mejora el rendimiento de la ordenación de columnas Decimal. Se mejora el rendimiento de la inserción en MergeTree si ORDER BY contiene una columna Decimal. Se mejora el rendimiento de la ordenación cuando los datos ya están ordenados o casi ordenados. #35961 (Maksim Kita).
  • Mejora el rendimiento en el análisis de consultas muy grandes. Corrige #51224. #51469 (frinkr).
  • Una optimización para reescribir COUNT(DISTINCT ...) y varias variantes de uniq como count si se seleccionan desde una subconsulta con GROUP BY. #52082 #52645 (JackyWoo).
  • Se eliminan las llamadas manuales a mmap/mremap/munmap y todo este trabajo se delega en jemalloc, lo que mejora ligeramente el rendimiento. #52792 (Nikita Taranov).
  • Se corrigió el elevado consumo de CPU al trabajar con NATS. #54399 (Vasilev Pyotr).
  • Dado que usamos instrucciones separadas para ejecutar toString con un argumento datetime, es posible mejorar un poco el rendimiento para los argumentos que no son datetime y hacer que algunas partes del código queden más limpias. Da seguimiento a #53680. #54443 (Yarik Briukhovetskyi).
  • En lugar de serializar elementos json en un std::stringstream, este PR intenta escribir el resultado de la serialización directamente en ColumnString. #54613 (lgbo).
  • Se habilita la optimización de ORDER BY para leer datos en el orden correspondiente desde una tabla MergeTree cuando la tabla está detrás de una vista. #54628 (Vitaly Baranov).
  • Mejora las funciones JSON de SQL reutilizando GeneratorJSONPath y eliminando varios punteros compartidos. #54735 (lgbo).
  • Keeper intenta agrupar en lotes las solicitudes de flush para mejorar el rendimiento. #53049 (Antonio Andelic).
  • Ahora clickhouse-client procesa archivos en paralelo cuando se usa INFILE 'glob_expression'. Cierra #54218. #54533 (Max K.).
  • Permite usar la clave primaria con la función IN cuando los tipos de las columnas de la clave primaria son diferentes de los tipos de las columnas del lado derecho de la función IN. Ejemplo: SELECT id FROM test_table WHERE id IN (SELECT '5'). Cierra #48936. #54544 (Maksim Kita).
  • Hash JOIN intenta reducir el tamaño de los búferes internos que consumen la mitad de la memoria máxima disponible (establecida por max_bytes_in_join). #54584 (vdimir).
  • Se respeta max_block_size para ARRAY JOIN a fin de evitar posibles OOM. Cierra #54290. #54664 (李扬).
  • Reutilización de conexiones HTTP en la función de tabla s3. #54812 (Michael Kolupaev).
  • Se sustituyó la búsqueda lineal en MergeTreeRangeReader::Stream::ceilRowsToCompleteGranules por una búsqueda binaria. #54869 (usurai).

Funcionalidad experimental

  • La creación de índices Annoy ahora puede paralelizarse mediante el ajuste max_threads_for_annoy_index_creation. #54047 (Robert Schulze).
  • Las réplicas paralelas en Distributed no leen de todas las réplicas #54199 (Igor Nikonov).

Mejora

  • Permite reemplazar los nombres largos de los archivos de las columnas en las partes de datos de MergeTree por hash de los nombres. Esto ayuda a evitar el error File name too long en algunos casos. #50612 (Anton Popov).
  • Analiza datos en formato JSON como JSONEachRow si falla el análisis de los metadatos. Esto permite leer archivos con la extensión .json incluso si el formato real es JSONEachRow. Cierra #45740. #54405 (Kruglov Pavel).
  • Generar JSON/XML válido en caso de excepción durante la ejecución de consultas HTTP. Se añade la configuración http_write_exception_in_output_format para activar/desactivar este comportamiento (activado de forma predeterminada). #52853 (Kruglov Pavel).
  • La vista information_schema.tables ahora incluye un nuevo campo data_length que muestra el tamaño aproximado de los datos en disco. Es necesario para ejecutar consultas generadas por Amazon QuickSight. #55037 (Robert Schulze).
  • La interfaz MySQL incorporó una implementación mínima de sentencias preparadas, apenas suficiente para permitir una connection desde Tableau Online a ClickHouse mediante el connector de MySQL. #54115 (Serge Klochkov). Tenga en cuenta: la implementación de sentencias preparadas es muy básica; todavía no admitimos vincular argumentos, ya que no es necesario en este caso de uso concreto de Tableau Online. Se implementará más adelante si resulta necesario, tras realizar pruebas exhaustivas de Tableau Online en caso de que detectemos problemas.
  • Admite los modos de coincidencia sin distinción entre mayúsculas y minúsculas y dot-all en los diccionarios regexp_tree. #50906 (Johann Gan).
  • Mejora de Keeper: se añadió el comando de Keeper createIfNotExists. #48855 (Konstantin Bogdanov).
  • Inferencia de tipos enteros más precisa, corrige #51236. #53003 (Chen768959).
  • Se introdujo la resolución de las codificaciones de caracteres en los literales de cadena de MaterializedMySQL. #53220 (Val Doroshchuk).
  • Se corrige un problema sutil en el poco utilizado motor de tabla EmbeddedRocksDB en una situación extremadamente rara: a veces, el motor de tabla EmbeddedRocksDB no cierra correctamente los archivos en NFS después de ejecutar DROP TABLE. #53502 (Mingliang Pan).
  • RESTORE TABLE ON CLUSTER debe crear tablas replicadas con un UUID coincidente en los hosts. De lo contrario, la macro {uuid} en la ruta de ZooKeeper no puede funcionar correctamente después de RESTORE. Este PR lo implementa. #53765 (Vitaly Baranov).
  • Se añadió la opción de restore restore_broken_parts_as_detached: si es true, el proceso de RESTORE no se detendrá al encontrar partes dañadas durante la restauración; en su lugar, todas las partes dañadas se copiarán en la carpeta detached con el prefijo `broken-from-backup’. Si es false, el proceso de RESTORE se detendrá en la primera parte dañada (si la hay). El valor predeterminado es false. #53877 (Vitaly Baranov).
  • Añadir el campo elapsed_ns a las cabeceras HTTP X-ClickHouse-Progress y X-ClickHouse-Summary. #54179 (joelynch).
  • Implementación de los comandos reconfig (https://github.com/ClickHouse/ClickHouse/pull/49450), sync y exists para keeper-client. #54201 (pufit).
  • clickhouse-local y clickhouse-client ahora permiten especificar el parámetro --query varias veces, p. ej., ./clickhouse-client --query "SELECT 1" --query "SELECT 2". Esta sintaxis es un poco más intuitiva que ./clickhouse-client --multiquery "SELECT 1;S ELECT 2", algo más fácil de automatizar en scripts (p. ej., queries.push_back('--query "$q"')) y más coherente con el comportamiento del parámetro existente --queries-file (p. ej., ./clickhouse client --queries-file queries1.sql --queries-file queries2.sql). #54249 (Robert Schulze).
  • Se añadió precisión de subsegundos a formatReadableTimeDelta. #54250 (Andrey Zvonov).
  • Se habilita allow_remove_stale_moving_parts de forma predeterminada. #54260 (vdimir).
  • Se corrige el uso de count de la caché y se mejora la barra de progreso al leer desde archivos. #54271 (Kruglov Pavel).
  • Se añade compatibilidad con credenciales de S3 mediante SSO. Para definir un perfil que se usará con SSO, establece la variable de entorno AWS_PROFILE. #54347 (Antonio Andelic).
  • Se admite NULL como valor predeterminado para los tipos anidados Array/Tuple/Map en los formatos de entrada. Cierra #51100. #54351 (Kruglov Pavel).
  • Permitir leer algunas configuraciones inusuales de fragmentos en formatos Arrow/Parquet. #54370 (Arthur Passos).
  • Añade el alias STD a la función stddevPop para garantizar la compatibilidad con MySQL. Cierra #54274. #54382 (Nikolay Degterinsky).
  • Se añade la función addDate por compatibilidad con MySQL y subDate para mantener la coherencia. Referencia #54275. #54400 (Nikolay Degterinsky).
  • Se agregó modification_time a system.detached_parts. #54506 (Azat Khuzhin).
  • Se añadió una configuración splitby_max_substrings_includes_remaining_string que controla si las funciones “splitBy*()” con el argumento “max_substring” > 0 incluyen la cadena restante (si la hay) en el Array resultante (semántica de Python/Spark) o no. El comportamiento predeterminado no cambia. #54518 (Robert Schulze).
  • Mejora en la inferencia de tipos enteros para campos Int64/UInt64. Continuación de #53003. Ahora también funciona con tipos anidados, como Arrays de Arrays, y con funciones como map/tuple. Problema: #51236. #54553 (Kruglov Pavel).
  • Se añadieron operaciones con arrays para multiplicar, dividir y calcular el módulo con escalares. Funciona en ambos sentidos; por ejemplo, 5 * [5, 5] y [5, 5] * 5: ambos casos son posibles. #54608 (Yarik Briukhovetskyi).
  • Añade el argumento opcional version al comando rm en keeper-client para permitir eliminaciones más seguras. #54708 (János Benjamin Antal).
  • Evitar que systemd finalice el servidor (esto puede provocar pérdida de datos al usar tablas Buffer). #54744 (Azat Khuzhin).
  • Se añadió el campo is_deterministic a la tabla del sistema system.functions, que indica si el resultado de una función es estable entre dos invocaciones (con exactamente los mismos valores de entrada) o no. #54766 #55035 (Robert Schulze).
  • Las vistas del esquema information_schema se hicieron más compatibles con las vistas equivalentes de MySQL (es decir, se modificaron y ampliaron) hasta el punto de que Tableau Online puede conectarse a ClickHouse. Más concretamente: 1. El tipo del campo information_schema.tables.table_type cambió de Enum8 a String. 2. Se añadieron los campos table_comment y table_collation a la vista information_schema.table. 3. Se añadieron las vistas information_schema.key_column_usage y referential_constraints. 4. Los alias en mayúsculas de las vistas de information_schema se sustituyeron por columnas concretas en mayúsculas. #54773 (Serge Klochkov).
  • La caché de consultas ahora devuelve un error si intenta almacenar en caché el resultado de una consulta que incluye una función no determinista como now, randomString y dictGet. En comparación con el comportamiento anterior (simplemente no almacenaba el resultado en caché, sin avisar), esto reduce la confusión y las sorpresas. #54801 (Robert Schulze).
  • Prohibir columnas especiales, como las materializadas, las efímeras o los alias, para los almacenamientos file/s3/url/…, corregir la inserción en columnas efímeras desde archivos. Cierra #53477. #54803 (Kruglov Pavel).
  • Recopilación de metadatos para copias de seguridad más configurable. #54804 (Vitaly Baranov).
  • El archivo de registro de clickhouse-local (si está habilitado con la opción —server_logs_file) ahora antepondrá a cada línea una marca temporal, el id del hilo, etc., igual que clickhouse-server. #54807 (Michael Kolupaev).
  • Campo is_obsolete de la tabla system.merge_tree_settings: ahora vale 1 para las configuraciones de MergeTree obsoletas. Anteriormente, solo la descripción indicaba que la configuración estaba obsoleta. #54837 (Robert Schulze).
  • Permitir el uso del plural en los literales de intervalo. INTERVAL 2 HOURS debería ser equivalente a INTERVAL 2 HOUR. #54860 (Jordi Villar).
  • Permitir siempre crear una proyección con una PK Nullable. Esto corrige #54814. #54895 (Amos Bird).
  • Reintento de las operaciones S3 de la copia de seguridad tras un restablecimiento de la conexión. #54900 (Vitaly Baranov).
  • Hacer que el mensaje de excepción sea preciso en caso de que el valor máximo de una configuración sea inferior al valor mínimo. #54925 (János Benjamin Antal).
  • LIKE, match y otras funciones de coincidencia de expresiones regulares ahora permiten buscar coincidencias con patrones que contienen subcadenas no UTF-8, recurriendo a la coincidencia binaria como alternativa. Ejemplo: puede usar string LIKE '\xFE\xFF%' para detectar la BOM. Esto resuelve #54486. #54942 (Alexey Milovidov).
  • Se añadió el evento de perfil ContextLockWaitMicroseconds. #55029 (Maksim Kita).
  • Keeper ajusta dinámicamente los niveles de log. #50372 (helifu).
  • Se añadió la función timestamp por compatibilidad con MySQL. Cierra #54275. #54639 (Nikolay Degterinsky).

Mejora de compilación, pruebas y empaquetado

  • Se actualizó el compilador de las compilaciones oficiales y de integración continua de ClickHouse de Clang 16 a 17. #53831 (Robert Schulze).
  • Se regeneraron los datos de TLD para búsquedas (tldLookup.generated.cpp). #54269 (Bharat Nallan).
  • Se eliminó el enlace simbólico redundante clickhouse-keeper-client. #54587 (Tomas Barton).
  • Se usa /usr/bin/env para resolver bash; ahora es compatible con Nix OS. #54603 (Fionera).
  • CMake añadió la opción PROFILE_CPU, necesaria para ejecutar perf record sin usar un grafo de llamadas DWARF. #54917 (Maksim Kita).
  • Si el enlazador no es LLD, se detiene con un error fatal. #55036 (Alexey Milovidov).
  • Se sustituyó la biblioteca para manejar valores base64 (codificación/decodificación), de Turbo-Base64 a aklomp-base64. Ambas usan aceleración SIMD en x86 y ARM, pero 1. la licencia de esta última (BSD-2) es más favorable para ClickHouse; además, Turbo64 pasó entretanto a GPL-3; 2. al tener más estrellas en GitHub, aklomp-base64 parece una opción más sostenible a futuro; 3. aklomp-base64 tiene una API ligeramente mejor (aunque esto es discutible); y 4. aklomp-base64 no requiere aplicar soluciones temporales para esquivar errores (como una inicialización no segura para hilos). Nota: aklomp-base64 rechaza los valores base64 sin relleno, mientras que Turbo-Base64 los decodifica en la medida de lo posible. RFC-4648 deja abierto si el relleno es obligatorio o no, pero, según el contexto, esto puede suponer un cambio de comportamiento que conviene tener en cuenta. #54119 (Mikhail Koviazin).

Corrección de errores (mal funcionamiento visible para el usuario en una versión estable oficial)

  • Se corrige REPLACE/MOVE PARTITION con replicación zero-copy (nota: “la replicación zero-copy” es una característica experimental) #54193 (Alexander Tokmakov).
  • Corrige los bloqueos de zero copy con enlaces físicos (nota: “zero-copy replication” es una función experimental) #54859 (Alexander Tokmakov).
  • Se corrigen los residuos de zero copy (nota: “zero-copy replication” es una funcionalidad experimental) #54550 (Alexander Tokmakov).
  • Pasar el tiempo de espera de reintento de HTTP en milisegundos (antes era incorrecto). #54438 (Duc Canh Le).
  • Corrige el mensaje de error confuso en OUTFILE con CapnProto/Protobuf #52870 (Kruglov Pavel).
  • Se corrige la generación de informes resumidos con réplicas paralelas y LIMIT #53050 (Raúl Marín).
  • Se corrigió la limitación de velocidad de los BACKUPs desde/hacia S3 (en caso de que no se hubiera usado la copia nativa) y también en algunos otros puntos #53336 (Azat Khuzhin).
  • Se corrige la limitación de IO al copiar directorios completos #53338 (Azat Khuzhin).
  • Corrección: al mover las actions a la condición prewhere, se puede perder una columna #53492 (Yakov Olkhovskiy).
  • Se corrigió un error interno al reemplazar por partes idénticas a nivel de bytes #53735 (Pedro Riera).
  • Corrección: exigir que las columnas participen en la expresión interpolate #53754 (Yakov Olkhovskiy).
  • Corrección de la inicialización del descubrimiento de clústeres + configuración de puntos de fallo en la configuración #54113 (vdimir).
  • Se corrigen problemas en accurateCastOrNull #54136 (Salvatore Mesoraca).
  • Se corrige la clave primaria Nullable con el modificador FINAL #54164 (Amos Bird).
  • Se corrigió un error que impedía insertar nuevos datos en una vista materializada replicada en presencia de datos duplicados. #54184 (Pedro Riera).
  • Corrección: permitir IPv6 en bloom filter #54200 (Yakov Olkhovskiy).
  • corrige una posible discrepancia de tipos con IPv4 #54212 (Bharat Nallan).
  • Corrige system.data_skipping_indices para los índices recreados #54225 (Artur Malchanau).
  • resolver el conflicto de nombres en el reescritor de múltiples join v2 #54240 (Tao Wang).
  • Corrige errores inesperados en system.errors tras un JOIN #54306 (vdimir).
  • Se ha corregido isZeroOrNull(NULL) #54316 (flynn).
  • Corrección: réplicas paralelas en Distributed con prefer_localhost_replica = 1 #54334 (Igor Nikonov).
  • Se corrige un error lógico en vertical merge + replacing merge tree + limpieza de OPTIMIZE #54368 (alesapin).
  • Se corrige el posible error URI contains invalid characters en la table function s3 #54373 (Kruglov Pavel).
  • Corregido un segfault en la optimización del AST de la función arrayExists #54379 (Nikolay Degterinsky).
  • Comprobar si se produce un desbordamiento antes de la suma en la función analysisOfVariance #54385 (Antonio Andelic).
  • Reproducir y corregir el fallo en removeSharedRecursive #54430 (Sema Checherinda).
  • Se corrige un posible error en los resultados con SimpleAggregateFunction en PREWHERE y FINAL #54436 (Azat Khuzhin).
  • Corregido el filtrado de partes con indexHint cuando el analizador no está habilitado #54449 (Azat Khuzhin).
  • Corregidas las proyecciones de agregación con estados normalizados #54480 (Amos Bird).
  • clickhouse-local: alguna mejora para el parámetro multiquery #54498 (CuiShuoGuo).
  • clickhouse-local admite el argumento --database en la línea de comandos #54503 (vdimir).
  • Se corrige un posible error de análisis en los formatos -WithNames con input_format_with_names_use_header deshabilitado #54513 (Kruglov Pavel).
  • Corrige un caso poco frecuente del error CHECKSUM_DOESNT_MATCH #54549 (alesapin).
  • Corrige la ordenación de UNION ALL con resultados ya ordenados #54564 (Vitaly Baranov).
  • Corregida la instalación de snapshots en Keeper #54572 (Antonio Andelic).
  • Se corrige una condición de carrera en ColumnUnique #54575 (Nikita Taranov).
  • Índice Annoy/Usearch: se corrige LOGICAL_ERROR durante la compilación con valores predeterminados #54600 (Robert Schulze).
  • Se corrigió la serialización de ColumnDecimal #54601 (Nikita Taranov).
  • Corregida la inferencia de esquemas en las funciones *Cluster para nombres de columna con espacios #54635 (Kruglov Pavel).
  • Corrección del uso de la estructura de las tablas de inserción en caso de valores predeterminados y de columnas de inserción explícitas #54655 (Kruglov Pavel).
  • Corrección: evitar usar una coincidencia con regex, que posiblemente contenga alternancia, como condición de clave. #54696 (Yakov Olkhovskiy).
  • Se corrige ReplacingMergeTree con fusión vertical y limpieza #54706 (SmitaRKulkarni).
  • Corrección de los valores incorrectos en las columnas virtuales después de ORDER BY #54811 (Michael Kolupaev).
  • Corregir el filtrado de partes con indexHint cuando no se usa el analizador #54825 #54449 (Azat Khuzhin).
  • Se corrigió un segfault de Keeper durante el apagado #54841 (Antonio Andelic).
  • Se corrige Invalid number of rows in Chunk en MaterializedPostgreSQL #54844 (Kseniia Sumarokova).
  • Mover la configuración de formato obsoleta a una sección aparte #54855 (Kruglov Pavel).
  • Reconstruir minmax_count_projection cuando se modifica la clave de partición #54943 (Amos Bird).
  • Se corrige una conversión errónea a ColumnVector<Int128> en la función if #55019 (Kruglov Pavel).
  • Evitar que se adjunten partes de tablas con proyecciones o índices diferentes #55062 (János Benjamin Antal).
  • Almacenar NULL en el mapa de resultados escalares cuando la subconsulta no devuelve resultados #52240 (vdimir).
  • Se corrige un caso poco frecuente en el que FINAL produce rangos de lectura no válidos #54934 (Nikita Taranov).
  • Corrección: quorum de insert sin reintentos de Keeper #55026 (Igor Nikonov).
  • Se corrige simple state con Nullable #55030 (Pedro Riera).

Lanzamiento de ClickHouse 23.8 LTS, 2023-08-31. Presentación, Vídeo

Cambio incompatible con versiones anteriores

  • Si un disco dinámico tiene nombre, debe especificarse como disk = disk(name = 'disk_name', …) en los argumentos de la función disk. En la versión anterior podía especificarse como disk = disk_<disk_name>(...), pero esto ya no es compatible. #52820 (Kseniia Sumarokova).
  • clickhouse-benchmark establecerá conexiones en paralelo cuando se invoque con --concurrency mayor que uno. Antes era inutilizable si se ejecutaba con 1000 conexiones concurrentes desde Europa a EE. UU. También se corrige el cálculo de QPS para conexiones con alta latencia. Cambio incompatible con versiones anteriores: se elimina la opción de salida JSON de clickhouse-benchmark. Si ha utilizado esta opción, como solución alternativa también puede extraer datos de system.query_log en formato JSON. #53293 (Alexey Milovidov).
  • Se elimina la columna microseconds de system.text_log y la columna milliseconds de system.metric_log porque son redundantes al existir la columna event_time_microseconds. #53601 (Alexey Milovidov).
  • Se deja obsoleta la funcionalidad de caché de metadatos. Es experimental y nunca la hemos usado. Esta funcionalidad es peligrosa: #51182. Se elimina la tabla del sistema system.merge_tree_metadata_cache. La caché de metadatos sigue disponible en esta versión, pero se eliminará pronto. Esto cierra #39197. #51303 (Alexey Milovidov).
  • Se deshabilita la compatibilidad con 3DES en las conexiones TLS. #52893 (Kenji Noguchi).

Nueva funcionalidad

  • Importación directa desde archivos comprimidos zip/7z/tar. Ejemplo: file('*.zip :: *.csv'). #50321 (nikitakeba).
  • Se añade la columna ptr a system.trace_log para trace_type = 'MemorySample'. Esta columna contiene una dirección de memoria asignada. Se añadió la función flameGraph, que puede generar un flamegraph con memoria asignada y no liberada. Revisión de #38391. #45322 (Nikolai Kochetov).
  • Se añadió la table function azureBlobStorageCluster. El conjunto de funciones compatibles es muy similar al de la table function s3Cluster. #50795 (SmitaRKulkarni).
  • Se permite usar cluster, clusterAllReplicas, remote y remoteSecure sin nombre de tabla en el issue #50808. #50848 (Yangkuan Liu).
  • Una tabla del sistema para supervisar consumidores de Kafka. #50999 (Ilya Golshtein).
  • Se añadió la opción de configuración max_sessions_for_user. #51724 (Alexey Gerasimchuck).
  • Nuevas funciones toUTCTimestamp/fromUTCTimestamp que actúan igual que to_utc_timestamp/from_utc_timestamp de Spark. #52117 (KevinyhZou).
  • Agregar nuevas funciones structureToCapnProtoSchema/structureToProtobufSchema que convierten la estructura de una tabla de ClickHouse en un esquema en formato CapnProto/Protobuf. Permiten importar/exportar datos en formato CapnProto/Protobuf sin un esquema de formato externo mediante un esquema autogenerado a partir de la estructura de la tabla (controlado por los ajustes format_capn_proto_use_autogenerated_schema/format_protobuf_use_autogenerated_schema). Permiten exportar el esquema autogenerado durante la entrada/salida mediante el ajuste output_format_schema. #52278 (Kruglov Pavel).
  • Un nuevo campo query_cache_usage en system.query_log ahora muestra si se utilizó la caché de consultas y de qué forma. #52384 (Robert Schulze).
  • Se agregan las nuevas funciones startsWithUTF8 y endsWithUTF8. #52555 (李扬).
  • Permitir un número variable de columnas en TSV/CustomSeparated/JSONCompactEachRow y hacer que la inferencia de esquema funcione con un número variable de columnas. Añadir las opciones de configuración input_format_tsv_allow_variable_number_of_columns, input_format_custom_allow_variable_number_of_columns, input_format_json_compact_allow_variable_number_of_columns. #52692 (Kruglov Pavel).
  • Se añadieron consultas SYSTEM STOP/START PULLING REPLICATION LOG (para realizar pruebas de ReplicatedMergeTree). #52881 (Alexander Tokmakov).
  • Permitir la ejecución de funciones constantes no deterministas en mutaciones en el nodo iniciador. #53129 (Anton Popov).
  • Se añade el formato de entrada One, que no lee ningún dato y siempre devuelve una sola fila con la columna dummy de tipo UInt8 y valor 0, igual que system.one. Puede usarse junto con las columnas virtuales _file/_path para listar archivos en las funciones de tabla file/s3/url/hdfs/etc. sin leer ningún dato. #53209 (Kruglov Pavel).
  • Se añade la función tupleConcat. Cierra #52759. #53239 (Nikolay Degterinsky).
  • Se admite la operación TRUNCATE DATABASE. #53261 (Bharat Nallan).
  • Se añade la configuración max_threads_for_indexes para limitar el número de hilos utilizados para el procesamiento de la clave primaria. #53313 (jorisgio).
  • Volver a añadir las funciones SipHash con clave. #53525 (Salvatore Mesoraca).
  • (#52755, #52895) Se añadieron las funciones arrayRotateLeft, arrayRotateRight, arrayShiftLeft y arrayShiftRight. #53557 (Mikhail Koviazin).
  • Añade la columna name a system.clusters como alias de cluster. #53605 (irenjj).
  • El panel avanzado ahora permite la edición en masa (guardar/cargar). #53608 (Alexey Milovidov).
  • El dashboard avanzado ahora incluye una opción para maximizar los gráficos y reorganizarlos. #53622 (Alexey Milovidov).
  • Se añadió soporte para la suma y resta de arrays: [5,2] + [1,7]. La división y la multiplicación no se implementaron debido a la confusión entre la multiplicación elemento a elemento y el producto escalar de los argumentos. Cierra #49939. #52625 (Yarik Briukhovetskyi).
  • Se añade compatibilidad para usar literales de cadena como nombres de tabla. Cierra #52178. #52635 (hendrik-m).

Funcionalidad experimental

  • Se añade un nuevo motor de tabla S3Queue para la importación de datos en streaming desde S3. Cierra #37012. #49086 (s-kat). Aún no está listo para usarse. No lo use.
  • Se habilita la lectura en paralelo desde réplicas a través de una tabla distribuida. Relacionado con #49708. #53005 (Igor Nikonov).
  • Se añade compatibilidad experimental con HNSW como método de búsqueda aproximada de vecinos. #53447 (Davit Vardanyan). Actualmente, está pensado para quienes siguen trabajando en la implementación. No lo use.

Mejora del rendimiento

  • Pushdown de filtros en Parquet. Es decir, al leer archivos Parquet, se omiten grupos de filas (fragmentos del archivo) en función de la condición WHERE y de los valores mínimo/máximo de cada columna. En particular, si el archivo está aproximadamente ordenado por alguna columna, las consultas que filtran por un rango corto de esa columna serán mucho más rápidas. #52951 (Michael Kolupaev).
  • Optimiza la lectura de grupos de filas pequeños procesándolos por lotes en Parquet. Cierra #53069. #53281 (Kruglov Pavel).
  • Optimiza count a partir de archivos en la mayoría de los formatos de entrada. Cierra #44334. #53637 (Kruglov Pavel).
  • Utilice el filtrado por archivo/ruta antes de leer en las funciones de tabla url/file/hdfs. #53529 (Kruglov Pavel).
  • Se habilitó la compilación JIT para AArch64, PowerPC, SystemZ y RISC-V. #38217 (Maksim Kita).
  • Se añade la configuración rewrite_count_distinct_if_with_count_distinct_implementation para reescribir countDistinctIf usando count_distinct_implementation. Cierra #30642. #46051 (flynn).
  • Acelera la fusión de estados de las funciones de agregación uniq y uniqExact al paralelizar la conversión antes de la fusión. #50748 (Jiebin Sun).
  • Optimiza el rendimiento de la agregación de claves de cadena Nullable al usar un gran número de claves de longitud variable. #51399 (LiuNeng).
  • Se añade una pasada en el analizador para optimizar el filtro de tiempo con preimagen. Los experimentos de rendimiento de SSB en el dispositivo ICX (CPU Intel Xeon Platinum 8380, 80 núcleos, 160 hilos) muestran que este cambio podría aportar una mejora del 8,5 % en la media geométrica de QPS cuando el analizador experimental está habilitado. #52091 (Zhiguo Zhou).
  • Optimizar la fusión cuando todos los conjuntos hash sean de un solo nivel en la función uniqExact (COUNT DISTINCT). #52973 (Jiebin Sun).
  • Motor de tabla Join: no clonar la estructura de datos de hash join con todas las columnas. #53046 (Duc Canh Le).
  • Implementar el formato de entrada ORC nativo sin la biblioteca “apache arrow” para mejorar el rendimiento. #53324 (李扬).
  • El dashboard indicará al servidor que comprima los datos, lo cual resulta útil para intervalos de tiempo amplios con conexiones a Internet lentas. Por ejemplo, un gráfico con 86400 puntos puede ocupar 1.5 MB sin comprimir y 60 KB comprimido con br. #53569 (Alexey Milovidov).
  • Mejor aprovechamiento del pool de hilos para las operaciones BACKUP y RESTORE. #53649 (Nikita Mikhaylov).
  • Cargar en paralelo los metadatos de la caché del sistema de archivos al iniciar. Se configura mediante la opción load_metadata_threads de la configuración de la caché (valor predeterminado: 1). Relacionado con #52037. #52943 (Kseniia Sumarokova).
  • Se mejora move_primary_key_columns_to_end_of_prewhere. #53337 (Han Fei).
  • Esto optimiza la interacción con ClickHouse Keeper. Anteriormente, el llamador podía registrar varias veces el mismo callback de watch. En ese caso, cada entrada consumía memoria y se invocaba varias veces el mismo callback, lo que no tenía mucho sentido. Para evitarlo, el llamador podía implementar cierta lógica para no añadir varias veces el mismo watch. Con este cambio, esta deduplicación se realiza internamente si el callback de watch se pasa mediante shared_ptr. #53452 (Alexander Gololobov).
  • Almacenamiento en caché del número de filas en archivos para count en las funciones file/s3/url/hdfs/azure. La caché puede habilitarse o deshabilitarse configurando use_cache_for_count_from_files (habilitada de forma predeterminada). Continuación de https://github.com/ClickHouse/ClickHouse/pull/53637. #53692 (Kruglov Pavel).
  • Una gestión más cuidadosa de los hilos mejorará en más de ~25% la velocidad de la función de tabla S3 con un gran número de archivos. #53668 (pufit).

Mejora

  • Agregar la configuración/ajuste stderr_reaction para controlar la reacción (none, log o throw) cuando hay datos en stderr de un comando externo. Esto facilita la depuración de comandos externos. #43210 (Amos Bird).
  • Agregar la columna partition a la tabla system part_log y a la tabla merge. #48990 (Jianfei Hu).
  • Los tamaños de las cachés de índices sin comprimir/marcas, mmap y consultas ahora pueden configurarse dinámicamente en tiempo de ejecución (sin reiniciar el servidor). #51446 (Robert Schulze).
  • Si un diccionario se crea con una clave compleja, se elige automáticamente la variante de diseño “complex key”. #49587 (xiebin).
  • Se añade la configuración use_concurrency_control para mejorar las pruebas de la nueva funcionalidad de control de concurrencia. #49618 (Alexey Milovidov).
  • Se añadieron sugerencias para nombres de bases de datos y tablas mal escritos. #49801 (Yarik Briukhovetskyi).
  • Al leer archivos pequeños de HDFS con Gluten, descubrimos que tardaba más que al realizar una consulta directamente con Spark. E hicimos algo al respecto. #50063 (KevinyhZou).
  • Había demasiados logs de error inútiles tras la expiración de la sesión, algo que no nos gustaba. #50171 (helifu).
  • Se introducen sesiones de ZooKeeper de reserva con tiempo limitado. Se corrigió la columna index en system.zookeeper_connection para direcciones DNS. #50424 (Anton Kozlov).
  • Se añade la posibilidad de registrar cuándo se alcanza max_partitions_per_insert_block. #50948 (Sean Haynes).
  • Se añadieron varios comandos personalizados a clickhouse-keeper-client (principalmente para facilitar la depuración de ClickHouse). #51117 (pufit).
  • Se actualizó la comprobación de la cadena de conexión en la table function azureBlobStorage, ya que una cadena de conexión con “sas” no siempre empieza con el endpoint predeterminado, y se actualizó la URL de conexión para incluir el token “sas” después de añadir el contenedor de Azure a la URL. #51141 (SmitaRKulkarni).
  • Corrige la descripción del filtrado de conjuntos en el algoritmo JOIN full_sorting_merge. #51329 (Tanay Tummalapalli).
  • Se corrigió el consumo de memoria en Aggregator cuando max_block_size es muy grande. #51566 (Nikita Taranov).
  • Añade el comando SYSTEM SYNC FILESYSTEM CACHE. Comparará el estado en memoria de la caché del sistema de archivos con lo que hay en disco y corregirá ese estado en memoria si es necesario. Esto solo es necesario si realizas intervenciones manuales en los datos almacenados en disco, algo que se desaconseja encarecidamente. #51622 (Kseniia Sumarokova).
  • Intento de crear un resolver de proxy genérico para CH, manteniendo la compatibilidad con versiones anteriores con el resolver de proxy existente para la configuración de almacenamiento S3. #51749 (Arthur Passos).
  • Se admite la lectura de subcolumnas de tuplas desde las funciones de tabla file/s3/hdfs/url/azureBlobStorage. #51806 (Kruglov Pavel).
  • La función arrayIntersect ahora devuelve los valores en el orden correspondiente al del primer argumento. Cierra #27622. #51850 (Yarik Briukhovetskyi).
  • Se añaden nuevas consultas que permiten crear/eliminar entidades de acceso en el almacenamiento de acceso especificado o mover entidades de acceso de un almacenamiento de acceso a otro. #51912 (pufit).
  • Hacer que las consultas ALTER TABLE FREEZE no se repliquen en el engine de base de datos Replicated. #52064 (Mike Kot).
  • Se añadió la posibilidad de volcar las tablas del sistema en caso de cierre inesperado. #52174 (Alexey Gerasimchuck).
  • Se corrigió el caso en que la table function s3 no funcionaba con URL prefirmadas. cierra #50846. #52310 (chen).
  • Se añadió la columna name como alias de event y metric en las tablas system.events y system.metrics. Cierra #51257. #52315 (chen).
  • Se añadió compatibilidad en el analizador sintáctico con la sintaxis CREATE UNIQUE INDEX como una operación sin efecto para mejorar la compatibilidad con SQL. El índice UNIQUE no es compatible. Establezca create_index_ignore_unique = 1 para ignorar la palabra clave UNIQUE en las consultas. #52320 (Ilya Yatsishin).
  • Se añade soporte para macros predefinidas ({database} y {table}) en algunos ajustes del motor Kafka: topic, consumer, client_id, etc. #52386 (Yury Bogomolov).
  • Deshabilitar la actualización de la caché del sistema de archivos durante la copia de seguridad/restauración. La caché del sistema de archivos no debe actualizarse durante la copia de seguridad/restauración, ya que parece que solo ralentiza el proceso sin aportar ningún beneficio (porque el comando BACKUP puede leer una gran cantidad de datos y no tiene sentido colocar todos los datos en la caché del sistema de archivos para expulsarlos inmediatamente). #52402 (Vitaly Baranov).
  • La configuración del endpoint de S3 permite usarlo desde la raíz y agregar ’/’ automáticamente si es necesario. #47809. #52600 (xiaolei565).
  • Para clickhouse-local, permitir opciones posicionales y rellenar la configuración global de UDF (user_scripts_path y user_defined_executable_functions_config). #52643 (Yakov Olkhovskiy).
  • system.asynchronous_metrics ahora incluye las métricas “QueryCacheEntries” y “QueryCacheBytes” para inspeccionar la caché de consultas. #52650 (Robert Schulze).
  • Se añadió la opción de usar el parámetro s3_storage_class en la cláusula SETTINGS de la instrucción BACKUP para realizar copias de seguridad en S3. #52658 (Roman Vasin).
  • Añadir la utilidad print-backup-info.py, que analiza un archivo de metadatos de copia de seguridad y muestra información sobre la copia de seguridad. #52690 (Vitaly Baranov).
  • Cierra #49510. Actualmente, los nombres de las bases de datos y de las tablas son sensibles a mayúsculas y minúsculas, pero las herramientas de BI consultan information_schema a veces en minúsculas y otras en mayúsculas. Por este motivo, tenemos la base de datos information_schema, que contiene tablas en minúsculas, como information_schema.tables, y la base de datos INFORMATION_SCHEMA, que contiene tablas en mayúsculas, como INFORMATION_SCHEMA.TABLES. Pero algunas herramientas consultan INFORMATION_SCHEMA.tables e information_schema.TABLES. La solución propuesta es duplicar las tablas tanto en minúsculas como en mayúsculas en las versiones en minúsculas y en mayúsculas de la base de datos information_schema. #52695 (Yarik Briukhovetskyi).
  • La consulta CHECK TABLE ofrece mejor rendimiento y usabilidad (envía actualizaciones de progreso y se puede cancelar). #52745 (vdimir).
  • Se agregó compatibilidad con modulo, intDiv e intDivOrZero para tuplas, al distribuirlos entre los elementos de la tupla. #52758 (Yakov Olkhovskiy).
  • Buscar las configuraciones predeterminadas yaml y yml en clickhouse-client después de xml. #52767 (Alexey Milovidov).
  • Al fusionar en una configuración cuya raíz no es ‘clickhouse’, las configuraciones con un nombre de nodo raíz diferente simplemente se omitían sin lanzar ninguna excepción. #52770 (Yakov Olkhovskiy).
  • Ahora es posible especificar el tamaño mínimo (memory_profiler_sample_min_allocation_size) y máximo (memory_profiler_sample_max_allocation_size) de las asignaciones de memoria que se rastrearán con el profiler de memoria por muestreo. #52779 (alesapin).
  • Añadir la configuración precise_float_parsing para alternar entre métodos de análisis de números de coma flotante (rápido/preciso). #52791 (Andrey Zvonov).
  • Usar las mismas rutas predeterminadas para clickhouse-keeper (enlace simbólico) que para clickhouse-keeper (ejecutable). #52861 (Vitaly Baranov).
  • Mejora el mensaje de error de la función de tabla remote. Cierra #40220. #52959 (jiyoungyoooo).
  • Se añadió la posibilidad de especificar una política de almacenamiento personalizada en la cláusula SETTINGS de las sentencias RESTORE. #52970 (Victor Krasnov).
  • Se añade la posibilidad de limitar las solicitudes a S3 en las operaciones de copia de seguridad (los comandos BACKUP y RESTORE ahora respetan s3_max_[get/put]_[rps/burst]). #52974 (Daniel Pozo Escalona).
  • Agregar ajustes para ignorar la cláusula ON CLUSTER en las consultas al gestionar funciones definidas por el usuario replicadas o entidades de control de acceso con almacenamiento replicado. #52975 (Aleksei Filatov).
  • Acciones de EXPLAIN para la etapa JOIN. #53006 (Maksim Kita).
  • Hacer que hasTokenOrNull y hasTokenCaseInsensitiveOrNull devuelvan null si las cadenas de búsqueda están vacías. #53059 (ltrk2).
  • Permite restringir las rutas permitidas para las cachés del sistema de archivos. Resulta especialmente útil para discos dinámicos. Si se especifica filesystem_caches_path en la configuración del servidor, todas las rutas de las cachés del sistema de archivos quedarán restringidas a este directorio. Por ejemplo, si path en la configuración de la caché es relativa, se ubicará en filesystem_caches_path; si path en la configuración de la caché es absoluta, será obligatorio que esté dentro de filesystem_caches_path. Si filesystem_caches_path no se especifica en la configuración, el comportamiento será el mismo que en versiones anteriores. #53124 (Kseniia Sumarokova).
  • Se agregaron varios comandos personalizados (principalmente para facilitar la depuración de ClickHouse). #53127 (pufit).
  • Agregar información de diagnóstico sobre el nombre del archivo durante la inferencia del esquema: resulta útil al procesar varios archivos con globs. #53135 (Alexey Milovidov).
  • El cliente cargará las sugerencias mediante la conexión principal si la segunda conexión no tiene permiso para crear una sesión. #53177 (Alexey Gerasimchuck).
  • Se añade la cláusula EXCEPT a la consulta SYSTEM STOP/START LISTEN QUERIES [ALL/DEFAULT/CUSTOM], por ejemplo SYSTEM STOP LISTEN QUERIES ALL EXCEPT TCP, HTTP. #53280 (Nikolay Degterinsky).
  • Cambie el valor predeterminado de max_concurrent_queries de 100 a 1000. Está bien tener muchas consultas concurrentes si no son pesadas y la mayoría están esperando a la red. Nota: no confunda las consultas concurrentes con los QPS: por ejemplo, el servidor ClickHouse puede manejar decenas de miles de QPS con menos de 100 consultas concurrentes. #53285 (Alexey Milovidov).
  • Limitar el número de fusiones simultáneas de optimización de particiones en segundo plano. #53405 (Duc Canh Le).
  • Se añadió la configuración allow_moving_table_directory_to_trash, que permite ignorar el error Directory for table data already exists al replicar o recuperar una base de datos Replicated. #53425 (Alexander Tokmakov).
  • Si los ajustes del servidor asynchronous_metrics_update_period_s y asynchronous_heavy_metrics_update_period_s se configuran erróneamente con el valor 0, ahora se producirá un fallo controlado en lugar de que la aplicación se cierre. #53428 (Robert Schulze).
  • El servidor de ClickHouse ahora respeta los límites de memoria modificados a través de cgroups al recargar su configuración. #53455 (Robert Schulze).
  • Se añadió la posibilidad de desactivar el vaciado de las tablas distribuidas al ejecutar DETACH, DROP o al apagar el servidor. #53501 (Azat Khuzhin).
  • La función domainRFC ahora también admite IPv6 entre corchetes. #53506 (Chen768959).
  • Se usa un timeout más largo para las solicitudes CopyObject de S3, que se utilizan en las copias de seguridad. #53533 (Michael Kolupaev).
  • Se añadió la server setting aggregate_function_group_array_max_element_size. Esta configuración se utiliza para limitar el tamaño del array en la serialización de la función groupArray. El valor predeterminado es 16777215. #53550 (Nikolai Kochetov).
  • Se añadió SCHEMA como alias de DATABASE para mejorar la compatibilidad con MySQL. #53587 (Daniël van Eeden).
  • Añade métricas asíncronas para las tablas de la base de datos del sistema. Por ejemplo, TotalBytesOfMergeTreeTablesSystem. Esto cierra #53603. #53604 (Alexey Milovidov).
  • El SQL Editor de la UI de Play y el dashboard no usarán Grammarly. #53614 (Alexey Milovidov).
  • Como ajustes avanzados, ahora es posible (1) configurar el size_ratio (es decir, el tamaño relativo de la cola protegida) de las cachés de marcas de [índice]/sin comprimir, (2) configurar la política de caché de las cachés de marcas de índice y de índice sin comprimir. #53657 (Robert Schulze).
  • Se añadió la validación de la información del cliente en el paquete de consulta de TCPHandler. #53673 (Alexey Gerasimchuck).
  • Reintentar la carga de partes si se producen errores de red durante la interacción con Microsoft Azure. #53750 (SmitaRKulkarni).
  • Stacktrace para las excepciones; se propagan las excepciones de las vistas materializadas. #53766 (Ilya Golshtein).
  • Si no se especificó ningún hostname ni puerto, el cliente de Keeper intentará buscar una cadena de conexión en el archivo config.xml de ClickHouse. #53769 (pufit).
  • Se añade el evento de perfil PartsLockMicroseconds, que muestra la cantidad de microsegundos durante los que se mantiene el bloqueo de las partes de datos en la familia de motores de tabla MergeTree. #53797 (alesapin).
  • Permitir configurar en keeper el límite de reconexión de RAFT. Esta configuración puede ayudar a que keeper restablezca la conexión con los pares más rápido si la conexión actual se interrumpe. #53817 (Pengyuan Bian).
  • Ignorar las claves foráneas en la definición de tablas para mejorar la compatibilidad con MySQL, de modo que el usuario no tenga que reescribir la parte de clave foránea de su SQL; ver #53380. #53864 (jsc0218).

Mejora de compilación, pruebas y empaquetado

Corrección de errores (mal funcionamiento visible para el usuario en una versión estable oficial)

  • No restablecer el índice Annoy (experimental) durante su construcción con más de una marca #51325 (Tian Xinhui).
  • Se corrige el uso de directorios temporales durante RESTORE #51493 (Azat Khuzhin).
  • Se corrige la aritmética binaria de Nullable(IPv4) #51642 (Yakov Olkhovskiy).
  • Se admite el uso de los tipos de datos IPv4 e IPv6 como atributos de diccionario #51756 (Yakov Olkhovskiy).
  • Una corrección de la suma de comprobación de las marcas de compresión #51777 (SmitaRKulkarni).
  • Se corrige la interpretación errónea de la coma como parte de la fecha y hora en el parsing best effort de CSV #51950 (Kruglov Pavel).
  • No lanzar una excepción cuando una UDF executable tiene parámetros #51961 (Nikita Taranov).
  • Se corrige el recálculo de los índices de omisión y las proyecciones en las consultas ALTER DELETE #52530 (Anton Popov).
  • MaterializedMySQL: Se corrige el bucle infinito en ReadBuffer::read #52621 (Val Doroshchuk).
  • Carga de sugerencias solo con el dialecto clickhouse #52628 (János Benjamin Antal).
  • Inicializar y destruir el canal de ares según sea necesario. #52634 (Arthur Passos).
  • Se corrige el filtrado por columnas virtuales con la expresión OR #52653 (Azat Khuzhin).
  • Se corrige un fallo en la función tuple con un argumento de columna dispersa #52659 (Anton Popov).
  • Corregidas las named collections en un clúster #52687 (Al Korgun).
  • Se corrigió la lectura innecesaria de una columna en caso de PREWHERE multietapa #52689 (Anton Popov).
  • Corrige el resultado inesperado de la ordenación en varias columnas con el criterio nulls first #52761 (copperybean).
  • Corrige una condición de carrera en la reconfiguración de Keeper #52804 (Antonio Andelic).
  • Se corrige la ordenación de columnas dispersas con un límite elevado #52827 (Anton Popov).
  • clickhouse-keeper: se corrige la implementación del servidor con poll. #52833 (Andy Fiddaman).
  • Hacer que el analizador de regexp reconozca los grupos de captura con nombre #52840 (Han Fei).
  • Se corrigió una posible aserción en ~PushingAsyncPipelineExecutor de clickhouse-local #52862 (Kruglov Pavel).
  • Se corrige la lectura de Nested(Array(LowCardinality(...))) vacío #52949 (Anton Popov).
  • Se añadieron nuevas pruebas para session_log y se corrigió la discrepancia entre el inicio y el cierre de sesión. #52958 (Alexey Gerasimchuck).
  • Se corrige la filtración de una contraseña en show create mysql table #52962 (Duc Canh Le).
  • Convertir el formato de columna disperso a completo en CreateSetAndFilterOnTheFlyStep #53000 (vdimir).
  • Corrige una rara condición de carrera al eliminar directorios con prefijo de clave vacío en la caché de fs #53055 (Kseniia Sumarokova).
  • Se corrige un problema por el que ZstdDeflatingWriteBuffer a veces truncaba la salida #53064 (Michael Kolupaev).
  • Corregir query&#95;id en part&#95;log con consultas de flush asíncrono #53103 (Raúl Marín).
  • Corrige un posible error en la caché “Read unexpected size” #53121 (Kseniia Sumarokova).
  • Se deshabilita el nuevo codificador Parquet #53130 (Alexey Milovidov).
  • Se corrige la excepción “Set no preparado” #53162 (Nikolai Kochetov).
  • Se corrige el escapado de caracteres en el motor PostgreSQL #53250 (Nikolay Degterinsky).
  • Tabla experimental session_log: Se añadieron nuevas pruebas para session_log y se corrigió la inconsistencia entre el inicio y el cierre de sesión. #53255 (Alexey Gerasimchuck). Se corrigió la inconsistencia entre el inicio de sesión correcto y el cierre de sesión #53302 (Alexey Gerasimchuck).
  • Se corrigió la adición de intervalos inferiores al segundo a DateTime #53309 (Michael Kolupaev).
  • Se corrige el error “Context has expired” en los diccionarios #53342 (Alexey Milovidov).
  • Corregido el formato incorrecto del AST de la proyección normal #53347 (Amos Bird).
  • Impedir el uso de use_structure_from_insertion_table_in_table_functions al ejecutar Scalar #53348 (flynn).
  • Corrección de la carga de la base de datos lazy durante una consulta SELECT sobre system.table #53372 (SmitaRKulkarni).
  • Se corrigió system.data_skipping_indices en MaterializedMySQL #53381 (Filipp Ozinov).
  • Se corrigió el procesamiento de un único retorno de carro en el motor de segmentación de archivos TSV #53407 (Kruglov Pavel).
  • Se corrige correctamente el error Context has expired #53433 (Michael Kolupaev).
  • Corrige timeout_overflow_mode cuando hay una subconsulta en el lado derecho de IN #53439 (Duc Canh Le).
  • Se corrige un comportamiento inesperado en #53152 #53440 (Zhiguo Zhou).
  • Corregido el error de análisis de la función JSON_QUERY cuando la ruta está compuesta únicamente por números #53470 (KevinyhZou).
  • Se corrigió el orden incorrecto de las columnas en consultas con FINAL paralelo. #53489 (Nikolai Kochetov).
  • Se corrigió la operación SELECT en ReplacingMergeTree con do_not_merge_across_partitions_select_final #53511 (Vasily Nemkov).
  • Vaciar primero la cola de async insert al apagar #53547 (joelynch).
  • Se corrige un bloqueo en join sobre una columna dispersa #53548 (vdimir).
  • Se corrigió un posible UB en el índice de omisión Set para funciones con argumentos inválidos #53559 (Azat Khuzhin).
  • Se corrige un posible UB en los índices invertidos (funcionalidad experimental) #53560 (Azat Khuzhin).
  • Corrección: la expresión de interpolación toma la columna de origen en lugar del alias con el mismo nombre de la expresión select. #53572 (Yakov Olkhovskiy).
  • Se corrigió el número de gránulos descartados en EXPLAIN PLAN index=1 #53616 (wangxiaobo).
  • Gestionar correctamente los totales y extremos con DelayedSource #53644 (Antonio Andelic).
  • La caché de Set preparada en el pipeline de mutación se quedaba atascada #53645 (Nikolai Kochetov).
  • Se corrige un error en las mutaciones con subcolumnas de tipo JSON en predicados de consultas UPDATE y DELETE. #53677 (VanDarkholme7).
  • Se corrige el pushdown de filtros en full_sorting_merge join #53699 (vdimir).
  • Se intenta corregir un error con NULL::LowCardinality(Nullable(...)) NOT IN #53706 (Andrey Zvonov).
  • Corrección: distinct ordenado con columnas dispersas #53711 (Igor Nikonov).
  • transform: manejar correctamente la columna por defecto con múltiples filas #53742 (Salvatore Mesoraca).
  • Se corrige el fallo del fuzzer en parseDateTime #53764 (Robert Schulze).
  • MaterializedPostgreSQL: se corrige una excepción no controlada en getCreateTableQueryImpl #53832 (Kseniia Sumarokova).
  • Se corrigió un posible segfault al usar el engine PostgreSQL #53847 (Kseniia Sumarokova).
  • Se corrige el alias named_collection_admin #54066 (Kseniia Sumarokova).

Lanzamiento de ClickHouse 23.7, 2023-07-27. Presentación, Vídeo

Cambio incompatible con versiones anteriores

  • Se añade el tipo de acceso NAMED COLLECTION (alias USE NAMED COLLECTION, NAMED COLLECTION USAGE). Este PR es incompatible con versiones anteriores porque este tipo de acceso está deshabilitado de forma predeterminada (ya que el tipo de acceso superior NAMED COLLECTION ADMIN también lo está). Propuesto en #50277. Para concederlo, utilice GRANT NAMED COLLECTION ON collection_name TO user o GRANT NAMED COLLECTION ON * TO user; para poder otorgar estos permisos, se requiere named_collection_admin en la configuración (anteriormente se llamaba named_collection_control, por lo que seguirá manteniéndose como alias). #50625 (Kseniia Sumarokova).
  • Se corrige un error tipográfico en el nombre de la columna last_removal_attemp_time de system.parts. Ahora se llama last_removal_attempt_time. #52104 (filimonov).
  • Se incrementa de forma predeterminada a 5 la versión de distributed_ddl_entry_format_version (habilita el paso de opentelemetry e initial_query_idd). Esto impedirá procesar las entradas existentes de DDL distribuido después de un downgrade (aunque, por lo general, no debería haber entradas de este tipo sin procesar). #52128 (Azat Khuzhin).
  • Se comprueban los metadatos de las proyecciones del mismo modo que se comprueban los metadatos normales. Este cambio puede impedir que el servidor se inicie si había una tabla con una proyección no válida. Un ejemplo es una proyección que crea columnas posicionales en la PK (p. ej., projection p (select * order by 1, 4), lo cual no está permitido en la PK de una tabla y puede provocar un fallo durante insert/merge). Elimine esas proyecciones antes de la actualización. Corrige #52353. #52361 (Nikolai Kochetov).
  • Se elimina la característica experimental hashid debido a un error. La calidad de la implementación era cuestionable desde el principio y no llegó a salir del estado experimental. Esto cierra #52406. #52449 (Alexey Milovidov).

Nueva funcionalidad

  • Se añadió el motor de base de datos Overlay para combinar varias bases de datos en una sola. Se añadió el motor de base de datos Filesystem para representar un directorio del sistema de archivos como un conjunto de tablas disponibles implícitamente, con formatos y estructuras detectados automáticamente. Un nuevo motor de base de datos S3 permite interactuar en modo de solo lectura con el almacenamiento S3 representando un prefijo como un conjunto de tablas. Un nuevo motor de base de datos HDFS permite interactuar con el almacenamiento HDFS de la misma manera. #48821 (alekseygolub).
  • Se añade compatibilidad con discos externos en Keeper para almacenar instantáneas y logs. #50098 (Antonio Andelic).
  • Se agregó compatibilidad con globs para seleccionar varios directorios ({}). #50559 (Andrey Zvonov).
  • El conector de Kafka puede obtener el esquema Avro del registro de esquemas mediante autenticación básica con credenciales codificadas para URL. #49664 (Ilya Golshtein).
  • Se añade la función arrayJaccardIndex, que calcula la similitud de Jaccard entre dos arrays. #50076 (FFFFFFFHHHHHHH).
  • Se añade una columna is_obsolete a system.settings y a tablas similares. Cierra #50819. #50826 (flynn).
  • Se implementó la compatibilidad con elementos cifrados en el archivo de configuración. Se añadió la posibilidad de usar texto cifrado en los elementos hoja del archivo de configuración. El texto se cifra mediante códecs de cifrado de la sección <encryption_codecs>. #50986 (Roman Vasin).
  • El algoritmo Grace Hash Join ahora también se puede aplicar a los JOIN FULL y RIGHT. #49483. #51013 (lgbo).
  • Se añade la consulta SYSTEM STOP LISTEN para una terminación más controlada. Cierra #47972. #51016 (Nikolay Degterinsky).
  • Se añaden las opciones input_format_csv_allow_variable_number_of_columns. #51273 (Dmitry Kardymon).
  • Otra función poco destacable: añadir la función substring_index, como en Spark o MySQL. #51472 (李扬).
  • Una tabla del sistema jemalloc_bins que muestra estadísticas de los bins de jemalloc. Ejemplo: SELECT *, size * (nmalloc - ndalloc) AS allocated_bytes FROM system.jemalloc_bins WHERE allocated_bytes > 0 ORDER BY allocated_bytes DESC LIMIT 10. Disfrútalo. #51674 (Alexander Gololobov).
  • Se añade el formato RowBinaryWithDefaults con un byte adicional antes de cada columna como indicador para usar el valor predeterminado de la columna. Cierra #50854. #51695 (Kruglov Pavel).
  • Se añadió la opción de configuración default_temporary_table_engine. Igual que default_table_engine, pero para tablas temporales. #51292. #51708 (velavokr).
  • Se añadieron las nuevas funciones initcap / initcapUTF8, que convierten la primera letra de cada palabra a mayúscula y el resto a minúscula. #51735 (Dmitry Kardymon).
  • CREATE TABLE ahora admite la sintaxis PRIMARY KEY en la definición de columnas. Las columnas se agregan al índice primario en el mismo orden en que se definen. #51881 (Ilya Yatsishin).
  • Se añadió la posibilidad de utilizar especificadores de formato de fecha y hora en los nombres de los archivos de registro y de errores, tanto en archivos de configuración (etiquetas log y errorlog) como en argumentos de la línea de comandos (--log-file y --errorlog-file). #51945 (Victor Krasnov).
  • Se añadió la estadística de uso máximo de memoria a las cabeceras HTTP. #51946 (Dmitry Kardymon).
  • Se añadieron nuevas funciones hasSubsequence (y las versiones CaseInsensitive y UTF8) para detectar subsecuencias en cadenas. #52050 (Dmitry Kardymon).
  • Se añade array_agg como alias de groupArray para compatibilidad con PostgreSQL. Cierra #52100. ### Entrada de documentación para cambios visibles para el usuario. #52135 (flynn).
  • Añade any_value como alias de compatibilidad para la función de agregación any. Cierra #52140. #52147 (flynn).
  • Se añade la función de agregación array_concat_agg para compatibilidad con BigQuery; es un alias de groupArrayArray. Cierra #52139. #52149 (flynn).
  • Se añade OCTET_LENGTH como alias de length. Cierra #52153. #52176 (FFFFFFFHHHHHHH).
  • Se añadió la función firstLine para extraer la primera línea de una cadena multilínea. Esto resuelve #51172. #52209 (Mikhail Koviazin).
  • Implementar el formato de estilo KQL para el tipo de dato Interval. Esto solo es necesario por compatibilidad con el lenguaje de consulta Kusto. #45671 (ltrk2).
  • Se agregó la consulta SYSTEM FLUSH ASYNC INSERT QUEUE, que vacía todas las inserciones asincrónicas pendientes en las tablas de destino. Se agregó un ajuste del servidor async_insert_queue_flush_on_shutdown (true de forma predeterminada), que determina si se debe vaciar la cola de inserciones asincrónicas durante un apagado ordenado. El ajuste async_insert_threads ahora es un ajuste del servidor. #49160 (Anton Popov).
  • Alias current_database y una nueva función current_schemas para mantener la compatibilidad con PostgreSQL. #51076 (Pedro Riera).
  • Se añadieron alias para las funciones today (ahora también disponibles con los nombres curdate/current_date) y now (current_timestamp). #52106 (Lloyd-Pottiger).
  • Se admite async_deduplication_token para el insert asíncrono. #52136 (Han Fei).
  • Se añade la nueva configuración disable_url_encoding, que permite desactivar la decodificación/codificación de la ruta en el URI del motor URL. #52337 (Kruglov Pavel).

Mejora del rendimiento

  • Habilita de forma predeterminada la selección automática del formato de serialización disperso. Mejora el rendimiento. El formato es compatible desde la versión 22.1. Después de este cambio, puede que no sea posible volver a versiones anteriores a la 22.1. Una reversión puede requerir establecer ratio_of_defaults_for_sparse_serialization=0.9375 55153. Puedes desactivar el uso del formato de serialización disperso configurando ratio_of_defaults_for_sparse_serialization = 1 para tus tablas MergeTree. #49631 (Alexey Milovidov).
  • Se habilitan de forma predeterminada las opciones move_all_conditions_to_prewhere y enable_multiple_prewhere_read_steps. #46365 (Alexander Gololobov).
  • Mejora el rendimiento de algunas consultas al ajustar el asignador de memoria. #46416 (Azat Khuzhin).
  • Ahora usamos tareas de tamaño fijo en MergeTreePrefetchedReadPool, igual que en MergeTreeReadPool. Además, a partir de ahora también usamos un pool de conexiones para las solicitudes a S3. #49732 (Nikita Taranov).
  • Más pushdown en el lado derecho del join. #50532 (Nikita Taranov).
  • Mejorar grace_hash join reservando el tamaño de la tabla hash (reenviado). #50875 (lgbo).
  • La espera para adquirir el bloqueo en OpenedFileCache podía notarse en ocasiones. Lo segmentamos en varios submapas (cada uno con su propio bloqueo) para evitar la contención. #51341 (Nikita Taranov).
  • Mueva las condiciones con columnas de clave primaria al final de la cadena de PREWHERE. La idea es que las condiciones con columnas de PK probablemente se utilicen en el análisis de PK y apenas aporten más al filtrado de PREWHERE. #51958 (Alexander Gololobov).
  • Acelera COUNT(DISTINCT) para tipos String al integrar SipHash en línea. Los experimentos de rendimiento de OnTime en el dispositivo ICX (CPU Intel Xeon Platinum 8380, 80 núcleos, 160 hilos) muestran que este cambio podría aportar una mejora del 11.6% en el QPS de la consulta Q8 sin afectar a las demás. #52036 (Zhiguo Zhou).
  • Se habilita allow_vertical_merges_from_compact_to_wide_parts de forma predeterminada. Esto ahorrará memoria durante los merges. #52295 (Alexey Milovidov).
  • Corrige un análisis incorrecto de las proyecciones que invalida las claves primarias. Este problema solo existe cuando query_plan_optimize_primary_key = 1, query_plan_optimize_projection = 1. Esto corrige #48823. Esto corrige #51173. #52308 (Amos Bird).
  • Se reduce el número de llamadas al sistema en FileCache::loadMetadata, lo que acelera el inicio del servidor si la caché del sistema de archivos está configurada. #52435 (Raúl Marín).
  • Permite establecer un límite inferior estricto para el tamaño del segmento de archivo descargando los datos restantes en segundo plano. El tamaño mínimo del segmento de archivo (si el tamaño real del archivo es mayor) se configura mediante el ajuste de configuración de caché boundary_alignment, con un valor predeterminado de 4Mi. El número de hilos en segundo plano se configura mediante el ajuste de configuración de caché background_download_threads, con un valor predeterminado de 2. Además, max_file_segment_size se aumentó de 8Mi a 32Mi en este PR. #51000 (Kseniia Sumarokova).
  • Se redujeron los tiempos de espera predeterminados de S3 de 30 segundos a 3 segundos, y los de otros protocolos HTTP de 180 segundos a 30 segundos. #51171 (Michael Kolupaev).
  • Se añadió la nueva configuración merge_tree_determine_task_size_by_prewhere_columns. Si se establece en true, para determinar el tamaño de la tarea de lectura solo se tendrán en cuenta los tamaños de las columnas de la sección PREWHERE. De lo contrario, se tendrán en cuenta todas las columnas de la consulta. #52606 (Nikita Taranov).

Mejora

  • Usa read_bytes/total_bytes_to_read para la barra de progreso en las funciones de tabla s3/file/url/… para indicar mejor el progreso. #51286 (Kruglov Pavel).
  • Se introduce una configuración de tabla wait_for_unique_parts_send_before_shutdown_ms que especifica cuánto tiempo esperará la réplica antes de cerrar el handler interservidor para los envíos replicados. También se corrige una inconsistencia en el apagado de las tablas y los handlers interservidor: ahora el servidor apaga primero las tablas y solo después apaga los handlers interservidor. #51851 (alesapin).
  • Permitir FETCH del estándar SQL sin OFFSET. Véase https://antonz.org/sql-fetch/. #51293 (Alexey Milovidov).
  • Permite filtrar los encabezados HTTP en las funciones de tabla URL/S3 con la nueva sección http_forbid_headers de la configuración. Se admiten tanto coincidencias exactas como filtros regexp. #51038 (Nikolay Degterinsky).
  • No mostrar mensajes en los logs sobre 16 EiB de espacio libre, ya que no tienen sentido. Cierra #49320. #49342 (Alexey Milovidov).
  • Compruebe correctamente el límite de la función sleepEachRow. Añada el ajuste function_sleep_max_microseconds_per_block. Esto es necesario para el fuzzer genérico de consultas. #49343 (Alexey Milovidov).
  • Se solucionan dos problemas en las funciones geoHash. #50066 (李扬).
  • Registrar en system.query_log las consultas que vacían el búfer de async insert. #51160 (Raúl Marín).
  • Las funciones date_diff y age ahora admiten las unidades de milisegundos y microsegundos, y funcionan con precisión de microsegundos. #51291 (Dmitry Kardymon).
  • Mejora del procesamiento de la ruta en clickhouse-keeper-client. #51359 (Azat Khuzhin).
  • Un producto de terceros que depende de ClickHouse (Gluten: un plugin para duplicar el rendimiento de Spark SQL) tenía un error. Esta corrección evita el desbordamiento de heap en ese producto de terceros al leer desde HDFS. #51386 (李扬).
  • Se añadió la posibilidad de deshabilitar la copia nativa para S3 (configuración de BACKUP/RESTORE allow_s3_native_copy y s3_allow_native_copy para los discos s3/s3_plain). #51448 (Azat Khuzhin).
  • Añade la columna primary_key_size a la tabla system.parts para mostrar el tamaño comprimido de la clave primaria en disco. Cierra #51400. #51496 (Yarik Briukhovetskyi).
  • Permitir ejecutar clickhouse-local sin procfs, sin que exista el directorio de inicio y sin plugins de resolución de nombres de glibc. #51518 (Alexey Milovidov).
  • Añade el marcador de posición %a para el nombre completo del archivo en la configuración rename_files_after_processing. #51603 (Kruglov Pavel).
  • Se añadió la columna modification_time a system.parts_columns. #51685 (Azat Khuzhin).
  • Se añade una nueva configuración input_format_csv_use_default_on_bad_values al formato CSV que permite insertar el valor predeterminado cuando falla el análisis de un solo campo. #51716 (KevinyhZou).
  • Se añadió el volcado del registro de fallos al disco tras un cierre inesperado. #51720 (Alexey Gerasimchuck).
  • Corrige el comportamiento en la página del dashboard, donde no se muestran los errores no relacionados con la autenticación. También corrige el comportamiento del gráfico al superponerse. #51744 (Zach Naimon).
  • Permite la conversión de UUID a UInt128. #51765 (Dmitry Kardymon).
  • Se añadió compatibilidad con la función range para argumentos Nullable. #51767 (Dmitry Kardymon).
  • Convierte condiciones como toyear(x) = c en c1 <= x < c2. #51795 (Han Fei).
  • Mejora la compatibilidad con MySQL de la instrucción SHOW INDEX. #51796 (Robert Schulze).
  • Se corrige que use_structure_from_insertion_table_in_table_functions no funcione con columnas MATERIALIZED y ALIAS. Cierra #51817. Cierra #51019. #51825 (flynn).
  • El diccionario de caché ahora solicita del origen únicamente las claves únicas. Cierra #51762. #51853 (Maksim Kita).
  • Se corrigió el caso en que la configuración no se aplicaba a la consulta EXPLAIN cuando se especificaba FORMAT. #51859 (Nikita Taranov).
  • Se permite SETTINGS antes de FORMAT en la consulta DESCRIBE TABLE para mantener la compatibilidad con la consulta SELECT. Cierra #51544. #51899 (Nikolay Degterinsky).
  • Los enteros codificados como var-int (p. ej., utilizados por el protocolo nativo) ahora pueden usar todo el rango de 64 bits. Se recomienda a los clientes de terceros que actualicen su código de var-int en consecuencia. #51905 (Robert Schulze).
  • Actualiza los certificados cuando cambien, sin necesidad de ejecutar manualmente SYSTEM RELOAD CONFIG. #52030 (Mike Kot).
  • Se añadió la configuración allow_create_index_without_type, que permite ignorar las consultas ADD INDEX sin TYPE especificado. Las consultas SQL estándar simplemente tendrán éxito sin cambiar el esquema de la tabla. #52056 (Ilya Yatsishin).
  • Los mensajes de registro se escriben en system.text_log desde el arranque del servidor. #52113 (Dmitry Kardymon).
  • En los casos en que el endpoint HTTP tenía varias direcciones IP y la primera de ellas no era accesible, se producía una excepción por tiempo de espera. Se mejoró la creación de sesiones para manejar todos los endpoints resueltos. #52116 (Aleksei Filatov).
  • El formato de entrada Avro ahora admite Union aunque contenga un solo tipo. Cierra #52131. #52137 (flynn).
  • Añadir la configuración optimize_use_implicit_projections para desactivar las proyecciones implícitas (actualmente, solo la proyección min_max_count). #52152 (Amos Bird).
  • Era posible usar la función hasToken para provocar un bucle infinito. Ahora se ha eliminado esta posibilidad. Con esto se cierra #52156. #52160 (Alexey Milovidov).
  • Crear de forma optimista los ancestros de ZK. #52195 (Raúl Marín).
  • Se corrige #50582. Se evita el error Not found column ... in block en algunos casos de lectura en orden y constantes. #52259 (Chen768959).
  • Comprobar lo antes posible en ClickHouse si las primitivas geo de S2 no son válidas. Esto cierra: #27090. #52260 (Nikita Mikhaylov).
  • Se vuelve a añadir la QueryAccessInfo de la proyección que faltaba cuando query_plan_optimize_projection = 1. Esto corrige #50183. Esto corrige #50093. #52327 (Amos Bird).
  • Cuando ZooKeeperRetriesControl vuelve a lanzar un error, es más útil ver su stack trace original, no el de ZooKeeperRetriesControl. #52347 (Vitaly Baranov).
  • Esperar el bloqueo de la replicación zero copy incluso si algunos discos no la admiten. #52376 (Raúl Marín).
  • Ahora el puerto interservidor solo se cerrará después de que se hayan detenido las tablas. #52498 (alesapin).

Funcionalidad experimental

  • La escritura de archivos Parquet es 10 veces más rápida; ahora es multihilo. Alcanza casi la misma velocidad que la lectura. #49367 (Michael Kolupaev). Esto se controla mediante la configuración output_format_parquet_use_custom_encoder, que está deshabilitada de forma predeterminada porque la funcionalidad aún no es óptima.
  • Se añadió compatibilidad con PRQL como lenguaje de consulta. #50686 (János Benjamin Antal).
  • Ahora se puede asignar un nombre de disco a los discos personalizados. Anteriormente, los discos personalizados usaban un nombre de disco interno generado automáticamente. Ahora será posible con disk = disk_<name>(...) (p. ej., el disco tendrá el nombre name). #51552 (Kseniia Sumarokova). Esta sintaxis puede cambiar en esta versión.
  • (experimental MaterializedMySQL) Se corrigió un fallo cuando mysqlxx::Pool::Entry se usa después de haberse desconectado. #52063 (Val Doroshchuk).
  • (experimental MaterializedMySQL) CREATE TABLE ... AS SELECT .. ahora es compatible con MaterializedMySQL. #52067 (Val Doroshchuk).
  • (experimental MaterializedMySQL) Se introdujo la conversión automática de tipos de texto a UTF-8 para MaterializedMySQL. #52084 (Val Doroshchuk).
  • (experimental MaterializedMySQL) Ahora se admiten cadenas UTF-8 sin comillas en DDL para MaterializedMySQL. #52318 (Val Doroshchuk).
  • (experimental MaterializedMySQL) Ahora se admiten comentarios entre comillas dobles en MaterializedMySQL. #52355 (Val Doroshchuk).
  • Se actualizó Intel QPL de v1.1.0 a v1.2.0. 2. Se actualizó Intel accel-config de v3.5 a v4.0. 3. Se corrigió un problema por el que los fallos de Device IOTLB tenían un gran impacto en el rendimiento de los aceleradores IAA. #52180 (jasperzhu).
  • La configuración session_timezone (nueva en la versión 23.6) pasa a ser experimental. #52445 (Alexey Milovidov).
  • Se añadió compatibilidad con el comando reconfig de ZooKeeper para ClickHouse Keeper con reconfiguración incremental, que puede habilitarse mediante la configuración keeper_server.enable_reconfiguration. Permite añadir servidores, eliminar servidores y cambiar sus prioridades. #49450 (Mike Kot). Se sospecha que esta funcionalidad está incompleta.

Mejora de compilación, pruebas y empaquetado

  • Se añaden compilaciones experimentales de ClickHouse para Linux RISC-V 64 a la CI. #31398 (Alexey Milovidov).
  • Se añade una comprobación de pruebas de integración con el analizador habilitado. #50926 #52210 (Dmitry Novik).
  • Compilaciones reproducibles para Rust. #52395 (Azat Khuzhin).
  • Se actualizan las dependencias de Cargo. #51721 (Raúl Marín).
  • Se hace que la función CHColumnToArrowColumn::fillArrowArrayWithArrayColumnData funcione con arrays Nullable, que no son posibles en ClickHouse, pero son necesarios para Gluten. #52112 (李扬).
  • Hemos actualizado la biblioteca CCTZ a master, pero no hay cambios visibles para el usuario. #52124 (Alexey Milovidov).
  • La tabla system.licenses ahora incluye la biblioteca Poco derivada mediante hard fork. Esto cierra #52066. #52127 (Alexey Milovidov).
  • Se comprueba que no haya casos de puntuación incorrecta: un espacio antes de una coma, como Hello ,world en lugar de Hello, world. #52549 (Alexey Milovidov).

Corrección de errores (mal funcionamiento visible para el usuario en una versión estable oficial)

Lanzamiento de ClickHouse 23.6, 2023-06-29. Presentación, Video

Cambio incompatible con versiones anteriores

  • Eliminar la funcionalidad do_not_evict_index_and_mark_files de la caché fs. Esta funcionalidad solo empeoraba las cosas. #51253 (Kseniia Sumarokova).
  • Eliminar la compatibilidad con ALTER para LIVE VIEW experimental. #51287 (Alexey Milovidov).
  • Reducir los valores predeterminados de http_max_field_value_size y http_max_field_name_size a 128 KiB. #51163 (Mikhail f. Shiryaev).
  • Las métricas de CGroups relacionadas con la CPU se reemplazan por una sola métrica, CGroupMaxCPU, para mejorar la usabilidad. Las métricas Normalized de uso de CPU se normalizarán con respecto a los límites de CGroups en lugar de al número total de CPU cuando estos estén establecidos. Esto cierra #50836. #50835 (Alexey Milovidov).

Nueva funcionalidad

  • La función transform, así como CASE con coincidencia de valores, pasó a admitir todos los tipos de datos. Esto cierra #29730. Esto cierra #32387. Esto cierra #50827. Esto cierra #31336. Esto cierra #40493. #51351 (Alexey Milovidov).
  • Se añadió la opción --rename_files_after_processing <pattern>. Esto cierra #34207. #49626 (alekseygolub).
  • Se añadió compatibilidad con el modificador TRUNCATE en la cláusula INTO OUTFILE. Se recomienda usar APPEND o TRUNCATE con INTO OUTFILE cuando el archivo ya existe. #50950 (alekar).
  • Se añadió el table engine Redis y la table function redis. Permite realizar consultas en servidores Redis externos. #50150 (JackyWoo).
  • Se pueden omitir archivos vacíos en las table functions file/s3/url/hdfs mediante las settings s3_skip_empty_files, hdfs_skip_empty_files, engine_file_skip_empty_files, engine_url_skip_empty_files. #50364 (Kruglov Pavel).
  • Se añadió una nueva setting llamada use_mysql_types_in_show_columns para modificar la instrucción SQL SHOW COLUMNS y mostrar los tipos equivalentes de MySQL cuando un cliente se conecta a través del puerto de compatibilidad con MySQL. #49577 (Thomas Panetti).
  • Ahora se puede invocar ClickHouse-client con una connection string en lugar de “—host”, “—port”, “—user”, etc. #50689 (Alexey Gerasimchuck).
  • Se añadió la setting session_timezone; se usa como timezone predeterminada de una sesión cuando no se especifica explícitamente. #44149 (Andrey Zvonov).
  • El códec DEFLATE_QPL ahora se controla mediante la server setting “enable_deflate_qpl_codec” (valor predeterminado: false) en lugar de la setting “allow_experimental_codecs”. Esto hace que DEFLATE_QPL deje de ser experimental. #50775 (Robert Schulze).

Mejora del rendimiento

  • Se mejoró la programación de las tareas de selección de merges y limpieza en ReplicatedMergeTree. Las tareas no se ejecutarán con demasiada frecuencia cuando no haya nada que fusionar ni limpiar. Se añadieron los ajustes max_merge_selecting_sleep_ms, merge_selecting_sleep_slowdown_factor, max_cleanup_delay_period y cleanup_thread_preferred_points_per_iteration. Esto debería cerrar #31919. #50107 (Alexander Tokmakov).
  • Se habilitó el push down de filtros a través de cross join. #50605 (Han Fei).
  • Se mejoró el rendimiento con QueryProfiler habilitado usando timer_id local al thread en lugar de un objeto global. #48778 (Jiebin Sun).
  • Se reescribió el formato de entrada/salida CapnProto para mejorar su rendimiento. Los nombres de columnas de Map y los campos de CapnProto ahora no distinguen entre mayúsculas y minúsculas, y se corrigió la lectura/escritura de los campos de estructuras anidadas. #49752 (Kruglov Pavel).
  • Se optimizó el rendimiento de escritura de Parquet para threads en paralelo. #50102 (Hongbin Ma).
  • Se deshabilitó parallelize_output_from_storages para el procesamiento de MATERIALIZED VIEWs y almacenamientos con un solo block. #50214 (Azat Khuzhin).
  • Se fusionó el PR #46558. Se evita la permutación de blocks durante sort si el block ya está ordenado. #50697 (Alexey Milovidov, Maksim Kita).
  • Se realizan múltiples solicitudes de lista a ZooKeeper en paralelo para acelerar la lectura desde la tabla system.zookeeper. #51042 (Alexander Gololobov).
  • Se aceleró la inicialización de las tablas de lookup de DateTime para zonas horarias. Esto debería reducir el tiempo de arranque/conexión de clickhouse-client, especialmente en compilaciones de depuración, ya que es bastante costoso. #51347 (Alexander Gololobov).
  • Se corrigió la lentitud de los lagos de datos causada por solicitudes HEAD síncronas. (Relacionado con la lentitud de Iceberg/DeltaLake/Hudi cuando hay muchos archivos). #50976 (Kseniia Sumarokova).
  • No se leen todas las columnas de la tabla derecha de GLOBAL JOIN. #50721 (Nikolai Kochetov).

Funcionalidad experimental

  • Se admiten réplicas paralelas con el analyzer. #50441 (Raúl Marín).
  • Se añade una espera aleatoria antes de ejecutar merges/mutations grandes para repartir la carga de forma más uniforme entre las réplicas en caso de replicación zero-copy. #51282 (alesapin).
  • No se replican las consultas ALTER PARTITION ni las mutaciones a través de la base de datos Replicated si solo tiene un segmento y la tabla subyacente es ReplicatedMergeTree. #51049 (Alexander Tokmakov).

Mejora

  • Relajar los umbrales de “too many parts” para hacerlos más actuales. Restaurar la contrapresión durante consultas INSERT de larga duración. #50856 (Alexey Milovidov).
  • Se permite convertir IPv6 a una dirección IPv4 para el CIDR ::ffff:0:0/96 (direcciones IPv4 mapeadas). #49759 (Yakov Olkhovskiy).
  • Se actualiza el protocolo de MongoDB para admitir MongoDB 5.1 y versiones posteriores. Se mantiene la compatibilidad con las versiones que usan el protocolo anterior (<3.6). Cierra #45621, #49879. #50061 (Nikolay Degterinsky).
  • Añade la configuración input_format_max_bytes_to_read_for_schema_inference para limitar la cantidad de bytes que se leen durante la inferencia de esquema. Cierra #50577. #50592 (Kruglov Pavel).
  • Se respeta la configuración input_format_null_as_default en la inferencia de esquemas. #50602 (Kruglov Pavel).
  • Permite omitir las líneas vacías al final en los formatos CSV/TSV/CustomSeparated mediante las opciones input_format_csv_skip_trailing_empty_lines, input_format_tsv_skip_trailing_empty_lines e input_format_custom_skip_trailing_empty_lines (desactivadas de forma predeterminada). Cierra #49315. #50635 (Kruglov Pavel).
  • Las funciones “toDateOrDefault|OrNull” y “accuateCast[OrDefault|OrNull]” ahora interpretan correctamente los argumentos numéricos. #50709 (Dmitry Kardymon).
  • Compatibilidad con CSV con delimitadores de campo de espacios en blanco o \t; estos delimitadores también son compatibles con Spark. #50712 (KevinyhZou).
  • Los ajustes number_of_mutations_to_delay y number_of_mutations_to_throw están habilitados de forma predeterminada con valores de 500 y 1000, respectivamente. #50726 (Anton Popov).
  • El panel muestra correctamente los valores ausentes. Esto cierra #50831. #50832 (Alexey Milovidov).
  • Se añadió la posibilidad de usar argumentos de fecha y hora con el formato de timestamp de syslog en las funciones parseDateTimeBestEffort* y parseDateTime64BestEffort*. #50925 (Victor Krasnov).
  • El parámetro de la línea de comandos “—password” en clickhouse-client ahora solo puede especificarse una vez. #50966 (Alexey Gerasimchuck).
  • Use hash_of_all_files de system.parts para verificar la identidad de las partes durante las copias de seguridad en clúster. #50997 (Vitaly Baranov).
  • En la tabla del sistema zookeeper_connection, connected_time identifica el momento en que se establece la conexión (formato estándar), y se añade session_uptime_elapsed_seconds, que indica la duración de la sesión de conexión establecida (en segundos). #51026 (郭小龙).
  • Mejora la barra de progreso para las funciones de tabla file/S3/hdfs/url utilizando el tamaño del fragmento de los datos de origen y un recuento incremental del tamaño total en cada hilo. Corrige la barra de progreso de las funciones *Cluster. Esto cierra #47250. #51088 (Kruglov Pavel).
  • Añadir total_bytes_to_read al paquete Progress del protocolo TCP para mejorar la barra de progreso. #51158 (Kruglov Pavel).
  • Mejoras en la comprobación de las partes de datos en discos con caché del sistema de archivos. #51164 (Anton Popov).
  • Se corrige un valor de current_elements_num que a veces era incorrecto en la caché de fs. #51242 (Kseniia Sumarokova).

Mejora de compilación/pruebas/empaquetado

  • Se añadió keeper-client integrado al binario independiente de Keeper. #50964 (pufit).
  • Ahora se usa la versión real de LZ4. #50621 (Nikita Taranov).
  • El servidor ClickHouse imprimirá la lista de configuraciones modificadas en caso de errores fatales. Esto cierra #51137. #51138 (Alexey Milovidov).
  • Ahora se puede compilar ClickHouse con clang-17. #51300 (Alexey Milovidov).
  • La comprobación de SQLancer ahora se considera estable, ya que se corrigieron los errores que ponía de manifiesto. A partir de ahora, los fallos de la comprobación de SQLancer se informarán con estado de comprobación fallida. #51340 (Ilya Yatsishin).
  • Se dividió el enorme RUN del Dockerfile en bloques condicionales más pequeños. Las herramientas necesarias se instalan bajo demanda en la misma capa RUN y después se eliminan. El SO se actualiza solo una vez al principio. Se utiliza un método moderno para comprobar el repositorio firmado. Se rebaja la imagen base a ubuntu:20.04 para resolver los problemas en versiones antiguas de Docker. Se actualiza la versión de golang para corregir vulnerabilidades de golang. #51504 (Mikhail f. Shiryaev).

Corrección de errores (mal funcionamiento visible para el usuario en una versión estable oficial)

Lanzamiento de ClickHouse 23.5, 2023-06-08. Presentación, Vídeo

Notas de actualización

  • Comprimir las marcas y la clave primaria de forma predeterminada. Esto reduce significativamente el tiempo de las consultas en frío. Notas de actualización: la compatibilidad con marcas comprimidas y clave primaria comprimida se añadió en la versión 22.9. Si activó las marcas comprimidas o la clave primaria comprimida, o instaló la versión 23.5 o posterior, que las activa de forma predeterminada, no podrá volver a la versión 22.8 o a una anterior. También puede desactivar explícitamente las marcas comprimidas o las claves primarias comprimidas especificando los ajustes compress_marks y compress_primary_key en la sección <merge_tree> del archivo de configuración del servidor. Notas de actualización: Si actualiza desde versiones anteriores a la 22.9, debe actualizar todas las réplicas a la vez, o desactivar la compresión antes de la actualización, o actualizar pasando por una versión intermedia en la que las marcas comprimidas sean compatibles pero no estén activadas de forma predeterminada, como la 23.3. #42587 (Alexey Milovidov).
  • Hacer que el object storage local funcione de forma coherente con el object storage de S3, corregir el problema con append (cierra #48465) y permitir configurarlo como almacenamiento independiente. El cambio no es retrocompatible porque la caché sobre el object storage local no es compatible con versiones anteriores. #48791 (Kseniia Sumarokova).
  • Se elimina la funcionalidad Experimental “in-memory data parts”. El formato de datos sigue siendo compatible, pero los ajustes son no-op y en su lugar se usarán partes compact o wide. Esto cierra #45409. #49429 (Alexey Milovidov).
  • Se cambiaron los valores predeterminados de los ajustes parallelize_output_from_storages y input_format_parquet_preserve_order. Esto permite a ClickHouse reordenar filas al leer desde archivos (por ejemplo, CSV o Parquet), lo que mejora enormemente el rendimiento en muchos casos. Para restaurar el comportamiento anterior y preservar el orden, use parallelize_output_from_storages = 0, input_format_parquet_preserve_order = 1. #49479 (Michael Kolupaev).
  • Hacer que las projections estén listas para producción. Añadir el ajuste optimize_use_projections para controlar si se seleccionarán projections para las consultas SELECT. El ajuste allow_experimental_projection_optimization es Obsolete y no hace nada. #49719 (Alexey Milovidov).
  • Marcar joinGet como no determinista (igual que dictGet). Esto permite usarlos en mutations sin necesidad de un ajuste adicional. #49843 (Azat Khuzhin).
  • Revertir el cambio por el que “groupArray returns cannot be nullable” (debido a una ruptura de compatibilidad binaria para groupArray/groupArrayLast/groupArraySample sobre tipos Nullable, lo que probablemente provocará TOO_LARGE_ARRAY_SIZE o CANNOT_READ_ALL_DATA). #49971 (Azat Khuzhin).
  • El ajuste enable_memory_bound_merging_of_aggregation_results está activado de forma predeterminada. Si actualiza desde una versión anterior a la 22.12, recomendamos establecer este indicador en false hasta que finalice la actualización. #50319 (Nikita Taranov).

Nueva funcionalidad

  • Se añadió el motor de almacenamiento AzureBlobStorage y la función de tabla azureBlobStorage. El conjunto de funcionalidades compatibles es muy similar al de S3 como motor de almacenamiento/función de tabla [#50604] (https://github.com/ClickHouse/ClickHouse/pull/50604) (alesapin) (SmitaRKulkarni.
  • Se añadió un cliente nativo de línea de comandos para ClickHouse Keeper; está disponible como clickhouse keeper-client #47414 (pufit).
  • Se añade la función de tabla urlCluster. Se refactorizan todas las funciones de tabla *Cluster para reducir la duplicación de código. Se hace que la inferencia de esquema funcione para todas las posibles firmas de las funciones *Cluster y para las colecciones con nombre. Cierra #38499. #45427 (attack204), Pavel Kruglov.
  • La caché de consultas ahora puede usarse para cargas de trabajo en producción. #47977 (Robert Schulze). La caché de consultas ahora puede admitir consultas con totales y el modificador extremes. #48853 (Robert Schulze). Marcar la configuración allow_experimental_query_cache como obsoleta para mantener la compatibilidad con versiones anteriores. Se eliminó en https://github.com/ClickHouse/ClickHouse/pull/47977. #49934 (Timur Solodovnikov).
  • Los tipos de datos geográficos (Point, Ring, Polygon y MultiPolygon) están preparados para producción. #50022 (Alexey Milovidov).
  • Añade inferencia de esquemas a los motores de tabla de PostgreSQL, MySQL, MeiliSearch y SQLite. Cierra #49972. #50000 (Nikolay Degterinsky).
  • El tipo de contraseña en consultas como CREATE USER u IDENTIFIED BY 'p' se establecerá automáticamente según la configuración default_password_type de config.xml del servidor. Cierra #42915. #44674 (Nikolay Degterinsky).
  • Se añade el tipo de autenticación por contraseña bcrypt. Cierra #34599. #44905 (Nikolay Degterinsky).
  • Se introduce la nueva palabra clave INTO OUTFILE 'file.txt' APPEND. #48880 (alekar).
  • Se añadió la tabla system.zookeeper_connection, que muestra información sobre las conexiones a Keeper. #45245 (mateng915).
  • Se agregó la nueva función generateRandomStructure, que genera una estructura aleatoria de tabla. Puede usarse junto con la table function generateRandom. #47409 (Kruglov Pavel).
  • Permite usar CASE sin una rama ELSE y amplía transform para admitir más tipos. También corrige algunos problemas que hacían que transform() devolviera resultados incorrectos cuando se mezclaban tipos decimales con otros tipos numéricos. #48300 (Salvatore Mesoraca). Cierra #2655. Cierra #9596. Cierra #38666.
  • Se añadió el cifrado del lado del servidor con claves KMS para tablas S3 y la configuración header para discos S3. Cierra #48723. #48724 (Johann Gan).
  • Añade MemoryTracker para las tareas en segundo plano (fusiones y mutaciones). Introduce los ajustes merges_mutations_memory_usage_soft_limit y merges_mutations_memory_usage_to_ram_ratio, que representan el límite blando de memoria para fusiones y mutaciones. Si se alcanza este límite, ClickHouse no programará nuevas tareas de fusión o mutación. También se introduce la métrica MergesMutationsMemoryTracking para poder observar el uso actual de memoria de las tareas en segundo plano. Reenvío de #46089. Cierra #48774. #48787 (Dmitry Novik).
  • La función dotProduct admite arrays. #49050 (FFFFFFFHHHHHHH).
  • Se ha añadido compatibilidad con la instrucción SHOW INDEX para mejorar la compatibilidad con MySQL. #49158 (Robert Schulze).
  • Añade compatibilidad para las columnas virtuales _file y _path en la función de tabla url. - Mejora el mensaje de error de la función de tabla url. - resuelve #49231 - resuelve #49232. #49356 (Ziyi Tan).
  • Se añadió el campo grants en el archivo users.xml, que permite especificar privilegios para los usuarios. #49381 (pufit).
  • Se admiten full/right join con el algoritmo grace hash join. #49483 (lgbo).
  • El modificador WITH FILL agrupa el rellenado según el prefijo de ordenación. Lo controla la configuración use_with_fill_by_sorting_prefix (habilitada de forma predeterminada). Relacionado con #33203#issuecomment-1418736794. #49503 (Igor Nikonov).
  • Clickhouse-client ahora acepta consultas después de “—multiquery” cuando no se especifica “—query” (o “-q”). Ejemplo: clickhouse-client —multiquery “select 1; select 2;”. #49870 (Alexey Gerasimchuk).
  • Añade un handshake_timeout específico para recibir el paquete Hello de una réplica. Cierra #48854. #49948 (Kruglov Pavel).
  • Se añadió la función “space”, que repite un espacio tantas veces como se indique. #50103 (Robert Schulze).
  • Se añadió la opción —input_format_csv_trim_whitespaces. #50215 (Alexey Gerasimchuk).
  • Permite que la función dictGetAll para diccionarios de árbol regexp devuelva valores de varias coincidencias como arrays. Cierra #50254. #50255 (Johann Gan).
  • Se añadió la función toLastDayOfWeek para redondear una fecha o una fecha con hora al sábado o domingo más cercano. #50315 (Victor Krasnov).
  • Posibilidad de ignorar un skip index especificando ignore_data_skipping_indices. #50329 (Boris Kuschel).
  • Añade la tabla system.user_processes y la consulta SHOW USER PROCESSES para mostrar información sobre la memoria y ProfileEvents a nivel de usuario. #50492 (János Benjamin Antal).
  • Añade las opciones de servidor y de formato display_secrets_in_show_and_select para mostrar secretos de tablas, bases de datos, funciones de tabla y diccionarios. Añade el privilegio displaySecretsInShowAndSelect, que controla qué usuarios pueden ver secretos. #46528 (Mike Kot).
  • Se permite configurar una ROW POLICY para todas las tablas que pertenecen a una base de datos. #47640 (Ilya Golshtein).

Mejora del rendimiento

  • Comprime las marcas y la clave primaria de forma predeterminada. Esto reduce significativamente el tiempo de las consultas en frío. Notas de actualización: la compatibilidad con la compresión de marcas y de la clave primaria se añadió en la versión 22.9. Si activaste la compresión de las marcas o de la clave primaria, o instalaste la versión 23.5 o posterior, en la que la compresión de las marcas o de la clave primaria está activada de forma predeterminada, no podrás volver a una versión 22.8 o anterior. También puedes desactivar explícitamente la compresión de las marcas o de las claves primarias especificando los ajustes compress_marks y compress_primary_key en la sección <merge_tree> del archivo de configuración del servidor. #42587 (Alexey Milovidov).
  • La nueva configuración s3_max_inflight_parts_for_one_file establece el límite de partes cargadas simultáneamente mediante una solicitud de carga multiparte para un mismo archivo. #49961 (Sema Checherinda).
  • Al leer varios archivos, se reduce el número de hilos de análisis en paralelo para cada archivo. Resuelve #42192. #46661 (SmitaRKulkarni).
  • Use la proyección de agregación solo si lee menos gránulos que la lectura habitual. Debería ayudar cuando la consulta alcanza la PK de la tabla, pero no la proyección. Corrige #49150. #49417 (Nikolai Kochetov).
  • No almacenar bloques en ANY hash join cuando no se inserta nada. #48633 (vdimir).
  • Corrige el combinador de agregación -If cuando se compila con JIT y habilita la compilación JIT para las funciones de agregación. Cierra #48120. #49083 (Igor Nikonov).
  • Para leer desde tablas remotas usamos tareas más pequeñas (en lugar de leer la parte completa) para que el robo de tareas funcione * el tamaño de la tarea se determina según el tamaño de las columnas que se van a leer * usar siempre búferes de 1mb para leer desde S3 * los límites de los segmentos de caché se alinean a 1mb para que tengan un tamaño adecuado incluso con tareas pequeñas. Esto también debería evitar la fragmentación. #49287 (Nikita Taranov).
  • Se introdujeron los ajustes: - merge_max_block_size_bytes para limitar la cantidad de memoria utilizada en las operaciones en segundo plano. - vertical_merge_algorithm_min_bytes_to_activate para añadir una condición adicional para activar las fusiones verticales. #49313 (Nikita Mikhaylov).
  • El tamaño predeterminado del búfer de lectura para el sistema de archivos local se ajustó a un valor ligeramente mejor. Además, se introdujeron dos nuevas opciones de configuración: max_read_buffer_size_local_fs y max_read_buffer_size_remote_fs. #49321 (Nikita Taranov).
  • Se mejoró el uso de memoria y la velocidad de los diccionarios SPARSE_HASHED/HASHED (p. ej., SPARSE_HASHED ahora consume 2,6 veces menos memoria y es ~2 veces más rápido). #49380 (Azat Khuzhin).
  • Optimice las tablas system.query_log y system.query_thread_log aplicando LowCardinality cuando corresponda. Las consultas sobre estas tablas serán más rápidas. #49530 (Alexey Milovidov).
  • Mejor rendimiento al leer archivos Parquet locales (gracias a la lectura en paralelo). #49539 (Michael Kolupaev).
  • Mejora el rendimiento de RIGHT/FULL JOIN hasta 2 veces en determinados casos, especialmente al hacer join entre una tabla izquierda pequeña y una tabla derecha grande. #49585 (lgbo).
  • Se mejora el rendimiento de BLAKE3 en un 11 % al habilitar LTO para Rust. #49600 (Azat Khuzhin). Ahora está al nivel de C++.
  • Optimizar la estructura de system.opentelemetry_span_log. Usar LowCardinality donde corresponda. Aunque esta tabla en general está bastante mal diseñada (usa el tipo de datos Map incluso para atributos comunes), mejorará ligeramente. #49647 (Alexey Milovidov).
  • Intentar preasignar el tamaño de la tabla hash en el join grace_hash. #49816 (lgbo).
  • Fusión en paralelo de estados uniqExactIf. Cierra #49885. #50285 (flynn).
  • Mejora de Keeper: añadir la solicitud CheckNotExists a Keeper, lo que mejora el rendimiento de las tablas replicadas. #48897 (Antonio Andelic).
  • Mejoras de rendimiento de Keeper: se evita serializar la misma solicitud dos veces durante el procesamiento. Se almacenan en caché los resultados de deserialización de solicitudes grandes. Controlado mediante la nueva configuración de coordinación min_request_size_for_cache. #49004 (Antonio Andelic).
  • Se redujo el número de solicitudes List a ZooKeeper al seleccionar partes para fusionar cuando muchas particiones no tienen nada que fusionar. #49637 (Alexander Tokmakov).
  • Refactorización del bloqueo en la caché de FS #44985 (Kseniia Sumarokova).
  • Deshabilitar las réplicas paralelas puras si es posible aplicar la optimización de conteo trivial. #50594 (Raúl Marín).
  • No enviar una solicitud HEAD para todas las claves en la inferencia de esquema de Iceberg, sino solo para las claves que se usan para leer datos. #50203 (Kruglov Pavel).
  • La configuración enable_memory_bound_merging_of_aggregation_results está habilitada de forma predeterminada. #50319 (Nikita Taranov).

Funcionalidad experimental

  • El codec DEFLATE_QPL reduce la versión mínima de SIMD a SSE 4.2. cambio en la documentación de qpl - Intel® QPL se basa en un despachador de kernels en tiempo de ejecución y una comprobación de cpuid para elegir la mejor implementación disponible (sse/avx2/avx512) - se reestructuró el archivo CMake para la compilación de qpl en ClickHouse a fin de alinearlo con la última versión upstream de qpl. #49811 (jasperzhu).
  • Se añade compatibilidad inicial para realizar JOINs con réplicas paralelas puras. #49544 (Raúl Marín).
  • Más paralelismo en la eliminación de partes Outdated con “zero-copy replication”. #49630 (Alexander Tokmakov).
  • Réplicas paralelas: 1) Se corrigió un error NOT_FOUND_COLUMN_IN_BLOCK al usar réplicas paralelas con almacenamiento no replicado y con la configuración parallel_replicas_for_non_replicated_merge_tree deshabilitada. 2) Ahora allow_experimental_parallel_reading_from_replicas tiene 3 valores posibles: 0, 1 y 2. 0 - deshabilitado, 1 - habilitado; se deshabilitan silenciosamente en caso de error (en caso de FINAL o JOIN), 2 - habilitado; lanza una excepción en caso de error. 3) Si se usa el modificador FINAL en una consulta SELECT y las réplicas paralelas están habilitadas, ClickHouse intentará deshabilitarlas si allow_experimental_parallel_reading_from_replicas está establecido en 1; en caso contrario, lanzará una excepción. #50195 (Nikita Mikhaylov).
  • Cuando las réplicas paralelas están habilitadas, siempre omitirán los servidores no disponibles (este comportamiento está controlado por la configuración skip_unavailable_shards, habilitada de forma predeterminada y que solo puede deshabilitarse). Esto cierra: #48565. #50293 (Nikita Mikhaylov).

Mejora

  • El comando BACKUP no descifrará los datos de discos cifrados al crear una copia de seguridad. En su lugar, los datos se almacenarán en la copia de seguridad en forma cifrada. Estas copias de seguridad solo pueden restaurarse en un disco cifrado con la misma lista de claves de cifrado (o una ampliada). #48896 (Vitaly Baranov).
  • Se añadió la posibilidad de usar tablas temporales en la cláusula FROM de ATTACH PARTITION FROM y REPLACE PARTITION FROM. #49436 (Roman Vasin).
  • Se añadió la configuración async_insert para las tablas MergeTree. Tiene el mismo significado que la configuración async_insert a nivel de consulta y habilita las inserciones asíncronas para una tabla específica. Nota: no surte efecto en las consultas de inserción desde clickhouse-client; en ese caso, use la configuración a nivel de consulta. #49122 (Anton Popov).
  • Se admite el uso de sufijos de tamaño en los parámetros de la sentencia de creación de cuotas. #49087 (Eridanus).
  • Se amplían first_value y last_value para aceptar NULL. #46467 (lgbo).
  • Se añaden los alias str_to_map y mapFromString para extractKeyValuePairs. Cierra https://github.com/clickhouse/clickhouse/issues/47185. #49466 (flynn).
  • Se añade compatibilidad con la versión 2 de CGroup para métricas asíncronas sobre el uso y la disponibilidad de la memoria. Esto cierra #37983. #45999 (sichenzhao).
  • Las funciones de tabla de clúster siempre deben omitir los segmentos no disponibles. cierra #46314. #46765 (zk_kiger).
  • Permite que el archivo CSV contenga columnas vacías en el encabezado. #47496 (你不要过来啊).
  • Se añade la función de tabla gcs, compatible con S3, para Google Cloud Storage. Al igual que las funciones oss y cosn, es solo un alias de la función de tabla s3 y no incorpora ninguna funcionalidad nueva. #47815 (Kuba Kaflik).
  • Se añadió la capacidad de usar un tamaño estricto para las partes en S3 (compatibilidad con el almacenamiento S3 de CloudFlare R2). #48492 (Azat Khuzhin).
  • Se añadieron nuevas columnas con información sobre las réplicas de la base de datos Replicated en system.clusters: database_shard_name, database_replica_name, is_active. Se añadió una cláusula opcional FROM SHARD a la consulta SYSTEM DROP DATABASE REPLICA. #48548 (Alexander Tokmakov).
  • Añade una nueva columna zookeeper_name en system.replicas para indicar en qué clúster de ZooKeeper (auxiliar) se almacenan los metadatos de la tabla replicada. #48549 (cangyin).
  • El operador IN permite comparar Date y Date32. Cierra #48736. #48806 (flynn).
  • Soporte para códigos de borrado en HDFS, autor: @M1eyu2018, @tomscut. #48833 (M1eyu).
  • Se implementó SYSTEM DROP REPLICA desde clústeres auxiliares de ZooKeeper; podría estar listo pronto #48931. #48932 (wangxiaobo).
  • Se añade el tipo de datos Array a MongoDB. Cierra #48598. #48983 (Nikolay Degterinsky).
  • Permite almacenar tipos de datos Interval en tablas. #49085 (larryluogit).
  • Permite usar la función de ventana ntile sin definir explícitamente el marco de ventana: ntile(3) OVER (ORDER BY a), cierra #46763. #49093 (vdimir).
  • Se añadieron ajustes (number_of_mutations_to_delay, number_of_mutations_to_throw) para retrasar o rechazar consultas ALTER que crean mutaciones (ALTER UPDATE, ALTER DELETE, ALTER MODIFY COLUMN, …) en caso de que la tabla ya tenga muchas mutaciones pendientes de finalizar. #49117 (Anton Popov).
  • Capturar la excepción de create_directories en la caché del sistema de archivos. #49203 (Kseniia Sumarokova).
  • Copia ejemplos incorporados a un nuevo campo example en system.functions para complementar el campo description. #49222 (Dan Roscigno).
  • Habilita opciones de conexión para el Diccionario de MongoDB. Ejemplo: xml <source> <mongodb> <host>localhost</host> <port>27017</port> <user></user> <password></password> <db>test</db> <collection>dictionary_source</collection> <options>ssl=true</options> </mongodb> </source> ### Entrada en la documentación para cambios visibles para el usuario. #49225 (MikhailBurdukov).
  • Se añadió el alias asymptotic para el método de cálculo asymp de kolmogorovSmirnovTest. Se mejoró la documentación. #49286 (Nikita Mikhaylov).
  • Las funciones de agregación groupBitAnd/Or/Xor ahora funcionan con datos enteros con signo. Esto las hace consistentes con el comportamiento de las funciones escalares bitAnd/Or/Xor. #49292 (exmy).
  • Se dividió la documentación de funciones en campos más específicos. #49300 (Robert Schulze).
  • Usa varios hilos compartidos entre todas las tablas de un servidor para cargar partes de datos obsoletas. El tamaño del pool y de su cola se controla mediante las configuraciones max_outdated_parts_loading_thread_pool_size y outdated_part_loading_thread_pool_queue_size. #49317 (Nikita Mikhaylov).
  • No sobreestime el tamaño de los datos procesados en las columnas LowCardinality cuando comparten diccionarios entre bloques. Esto corrige #49322. Véase también #48745. #49323 (Alexey Milovidov).
  • El escritor de Parquet ahora utiliza un tamaño adecuado para los grupos de filas cuando se invoca mediante OUTFILE. #49325 (Michael Kolupaev).
  • Permitir el uso de palabras clave restringidas como ARRAY como alias si este está entre comillas. Cierra #49324. #49360 (Nikolay Degterinsky).
  • La carga de partes de datos y los trabajos de eliminación se trasladaron a grupos compartidos para todo el servidor en lugar de grupos por tabla. El tamaño de los grupos se controla mediante la configuración max_active_parts_loading_thread_pool_size, max_outdated_parts_loading_thread_pool_size y max_parts_cleaning_thread_pool_size en la configuración de nivel superior. La configuración de nivel de tabla max_part_loading_threads y max_part_removal_threads quedó obsoleta. #49474 (Nikita Mikhaylov).
  • Permitir ?password=pass en la URL de la UI de Play. La contraseña se sustituye en el historial del navegador. #49505 (Mike Kot).
  • Permitir la lectura de objetos de tamaño cero desde sistemas de archivos remotos. (Como los archivos vacíos no se incluyen en las copias de seguridad, podríamos terminar con cero blobs en el archivo de metadatos). Cierra #49480. #49519 (Kseniia Sumarokova).
  • Adjuntar el hilo MemoryTracker a total_memory_tracker después de desvincular ThreadGroup. #49527 (Dmitry Novik).
  • Se corrigieron las vistas parametrizadas cuando un parámetro de consulta se utiliza varias veces en la consulta. #49556 (Azat Khuzhin).
  • Libera la memoria asignada a la última instantánea de ProfileEvents enviada en el contexto de una consulta. Relacionado con #47564. #49561 (Dmitry Novik).
  • La función “makeDate” ahora admite una sobrecarga compatible con MySQL (con argumentos de año y día del año). #49603 (Robert Schulze).
  • Se añadió compatibilidad con la función de tabla dictionary para RegExpTreeDictionary. #49666 (Han Fei).
  • Se añadió una política de planificación equitativa ponderada de IO. Se añadió un administrador dinámico de recursos que permite actualizar la jerarquía de planificación de IO en tiempo de ejecución sin reiniciar el servidor. #49671 (Sergei Trifonov).
  • Añadir una solicitud de compose después de una carga multiparte en GCS. Esto permite usar la operación de copia en objetos cargados mediante carga multiparte. Se recomienda establecer s3_strict_upload_part_size en algún valor, ya que la solicitud de compose puede fallar con objetos creados con partes de distinto tamaño. #49693 (Antonio Andelic).
  • Para la función extractKeyValuePairs: mejora la lógica de análisis de “mejor esfuerzo” para aceptar key_value_delimiter como parte válida del valor. Esto también simplifica las bifurcaciones e incluso podría acelerar un poco las cosas. #49760 (Arthur Passos).
  • Se añade el campo initial_query_id para system.processors_profile_log #49777 (helifu).
  • Las tablas de registro del sistema ahora pueden tener claves de ordenación personalizadas. #49778 (helifu).
  • Se usa un nuevo campo partitions en system.query_log para indicar qué particiones intervienen en el cálculo. #49779 (helifu).
  • Se añadió la configuración enable_the_endpoint_id_with_zookeeper_name_prefix para ReplicatedMergeTree (deshabilitada de forma predeterminada). Cuando está habilitada, añade el nombre del clúster de ZooKeeper al endpoint de comunicación interservidor de la tabla. Esto evita errores Duplicate interserver IO endpoint al tener tablas replicadas con la misma ruta, pero con distintos ZooKeeper auxiliares. #49780 (helifu).
  • Se agregan parámetros de consulta a clickhouse-local. Se cierra #46561. #49785 (Nikolay Degterinsky).
  • Permitir cargar diccionarios y funciones desde YAML de forma predeterminada. En versiones anteriores, era necesario editar dictionaries_config o user_defined_executable_functions_config en el archivo de configuración, ya que esperaban archivos *.xml. #49812 (Alexey Milovidov).
  • El motor de tablas Kafka ahora permite usar columnas de alias. #49824 (Aleksandr Musorin).
  • Se añadió una configuración para limitar el número máximo de pares generados por extractKeyValuePairs, como salvaguarda para no consumir demasiada memoria. #49836 (Arthur Passos).
  • Se añadió compatibilidad con un caso (inusual) en el que los argumentos del operador IN son tuplas de un solo elemento. #49844 (MikhailBurdukov).
  • La función bitHammingDistance admite los tipos de datos String y FixedString. Cierra #48827. #49858 (flynn).
  • Se corrigen errores al restablecer el timeout en el cliente de OS X. #49863 (alekar).
  • Se añadió compatibilidad con enteros de gran tamaño, como UInt128, Int128, UInt256 e Int256, en la función bitCount. Esto permite calcular la distancia de Hamming sobre máscaras de bits grandes para aplicaciones de IA. #49867 (Alexey Milovidov).
  • Huellas digitales para usar en lugar de ID de clave en discos cifrados. Esto simplifica la configuración de los discos cifrados. #49882 (Vitaly Baranov).
  • Se añade el tipo de dato UUID a PostgreSQL. Cierra #49739. #49894 (Nikolay Degterinsky).
  • La función toUnixTimestamp ahora acepta argumentos de tipo Date y Date32. #49989 (Victor Krasnov).
  • Contabilizar únicamente la memoria del servidor para los diccionarios. #49995 (Azat Khuzhin).
  • El servidor permitirá usar configuraciones SQL_*, como SQL_AUTO_IS_NULL, como operaciones sin efecto para mantener la compatibilidad con MySQL. Esto cierra #49927. #50013 (Alexey Milovidov).
  • Se conserva initial_query_id en las consultas ON CLUSTER, lo que resulta útil para la introspección (con distributed_ddl_entry_format_version=5). #50015 (Azat Khuzhin).
  • Se mantiene la incompatibilidad con versiones anteriores para las configuraciones renombradas mediante alias (allow_experimental_projection_optimization para optimize_use_projections, allow_experimental_lightweight_delete para enable_lightweight_delete). #50044 (Azat Khuzhin).
  • Se admite pasar el FQDN mediante la configuración my_hostname para registrar el nodo del clúster en Keeper. Se añade la configuración invisible para admitir varios grupos de cómputo. Un grupo de cómputo, como clúster, es invisible para los demás grupos de cómputo. #50186 (Yangkuan Liu).
  • Se corrigió un problema por el que PostgreSQL leía todos los datos aunque se pudiera especificar LIMIT n. #50187 (Kseniia Sumarokova).
  • Se añaden nuevos eventos de perfil para consultas con subconsultas (QueriesWithSubqueries/SelectQueriesWithSubqueries/InsertQueriesWithSubqueries). #50204 (Azat Khuzhin).
  • Se añade el campo roles en el archivo users.xml, lo que permite especificar roles con privilegios mediante un archivo de configuración. #50278 (pufit).
  • Registrar CGroupCpuCfsPeriod y CGroupCpuCfsQuota en AsynchronousMetrics. - Respetar los límites de memoria de cgroup v2 durante el inicio del servidor. #50379 (alekar).
  • Se añade un manejador de señales para SIGQUIT para que funcione igual que SIGINT. Cierra #50298. #50435 (Nikolay Degterinsky).
  • En caso de que el análisis de JSON falle debido al gran tamaño de la salida del objeto, mostrar la última posición para facilitar la depuración. #50474 (Valentin Alexeev).
  • Compatibilidad con decimales de tamaño no fijo. Cierra #49130. #50586 (Kruglov Pavel).

Mejora de compilación/pruebas/empaquetado

  • Nuevo y mejorado keeper-bench. Todo puede personalizarse mediante un archivo YAML/XML: - generador de peticiones - cada tipo de generador de peticiones puede tener un conjunto específico de campos - las solicitudes múltiples pueden generarse simplemente haciendo lo mismo bajo la clave multi - para cada solicitud o subsolicitud en multi se puede definir un campo weight para controlar la distribución - definir árboles que deban configurarse para una ejecución de prueba - los hosts pueden definirse con todos los tiempos de espera personalizables y es posible controlar cuántas sesiones generar para cada host - los enteros definidos con los campos min_value y max_value son generadores de números aleatorios. #48547 (Antonio Andelic).
  • Io_uring no es compatible con MacOS; no lo elijas al ejecutar pruebas localmente para evitar fallos ocasionales. #49250 (Frank Chen).
  • Se admite la inyección de fallos con nombre para pruebas. #49361 (Han Fei).
  • Permite ejecutar ClickHouse en sistemas operativos donde la syscall prctl (control de procesos) no está disponible, como AWS Lambda. #49538 (Alexey Milovidov).
  • Se solucionó el conflicto de compilación entre contrib/isa-l e isa-l en qpl 49296. #49584 (jasperzhu).
  • Las utilidades ahora solo se compilan si se solicitan explícitamente (“-DENABLE_UTILS=1”) en lugar de compilarse de forma predeterminada; esto reduce los tiempos de enlazado en las compilaciones de desarrollo habituales. #49620 (Robert Schulze).
  • Separar la descripción de compilación de idxd-config en un archivo CMake independiente para evitar que se elimine accidentalmente en el futuro. #49651 (jasperzhu).
  • Añadir una comprobación de CI con el analizador habilitado en master. Continuación en #49562. #49668 (Dmitry Novik).
  • Migración a LLVM/clang 16. #49678 (Azat Khuzhin).
  • Se permite compilar ClickHouse con clang-17. #49851 (Alexey Milovidov). #50410 (Alexey Milovidov).
  • Ahora es más fácil integrar ClickHouse en otros proyectos de cmake. #49991 (Amos Bird). (Algo que se desaconseja encarecidamente - Alexey Milovidov).
  • Se corrige el extraño registro adicional de QEMU tras #47151, véase https://s3.amazonaws.com/clickhouse-test-reports/50078/a4743996ee4f3583884d07bcd6501df0cfdaa346/stateless&#95;tests&#95;&#95;release&#95;&#95;databasereplicated&#95;&#95;[3&#95;4].html. #50442 (Mikhail f. Shiryaev).
  • ClickHouse puede ejecutarse en Linux RISC-V 6.1.22. Esto cierra #50456. #50457 (Alexey Milovidov).
  • Se actualiza el protobuf interno a la v3.18 (corrige el falso CVE-2022-1941). #50400 (Robert Schulze).
  • Aumenta la versión de libxml2 interna a v2.10.4 (corrige los falsos CVE-2023-28484 y CVE-2023-29469). #50402 (Robert Schulze).
  • Actualización de c-ares a la versión 1.19.1 (CVE-2023-32067 falso, CVE-2023-31130 falso, CVE-2023-31147 falso). #50403 (Robert Schulze).
  • Corregido el CVE-2022-2469 incorrecto en libgsasl. #50404 (Robert Schulze).

Corrección de errores (mal funcionamiento visible para el usuario en una versión estable oficial)

  • ActionsDAG: corrige una optimización errónea #47584 (Salvatore Mesoraca).
  • Gestionar correctamente las instantáneas concurrentes en Keeper #48466 (Antonio Andelic).
  • MergeTreeMarksLoader usa DataPart en lugar de DataPartStorage #48515 (SmitaRKulkarni).
  • Corrección del estado de la secuencia #48603 (Ilya Golshtein).
  • Comprobación de concurrencia de Back/Restore ante fallos previos #48726 (SmitaRKulkarni).
  • Corrección: al adjuntar una tabla con una ruta de ZK inexistente, no se incrementa la métrica ReadonlyReplica #48954 (wangxiaobo).
  • Corrige posibles llamadas a terminate por excepciones no capturadas en algunos casos #49112 (Kruglov Pavel).
  • Se corrigió el error de «clave no encontrada» en consultas con varios StorageJoin #49137 (vdimir).
  • Se corrige un resultado incorrecto de la consulta al usar una clave primaria Nullable #49172 (Duc Canh Le).
  • Se corrigió reinterpretAs*() en máquinas big endian #49198 (Suzy Wang).
  • (Replicación zero-copy experimental) Bloquear las partes zero-copy de forma más atómica #49211 (alesapin).
  • Se corrige una condición de carrera al cargar partes obsoletas #49223 (Alexander Tokmakov).
  • Corregido el caso en que todos los valores clave son NULL y en que el uso de rollup en la agrupación devuelve una respuesta incorrecta #49282 (Shuai li).
  • Corregido el cálculo de load_factor para diccionarios HASHED con segmentos #49319 (Azat Khuzhin).
  • Impedir configurar códecs de compresión en columnas de alias #49363 (Timur Solodovnikov).
  • Se corrige un error al eliminar el directorio de una part existente #49365 (alesapin).
  • Se corrige adecuadamente GCS cuando se usa HMAC #49390 (Antonio Andelic).
  • Se corrige un error detectado por fuzzing cuando no se crea el conjunto de la subconsulta al leer con remote() #49425 (Alexander Gololobov).
  • Se invierte shutdown_wait_unfinished_queries #49427 (Konstantin Bogdanov).
  • (Replicación zero-copy experimental) Se corrige otro fallo de zero copy #49473 (alesapin).
  • Corrige la configuración de la base de datos Postgres #49481 (Mal Curtis).
  • Gestionar correctamente los argumentos de s3Cluster #49490 (Antonio Andelic).
  • Se corrigió un error en el destructor de TraceCollector. #49508 (Yakov Olkhovskiy).
  • Se corrige AsynchronousReadIndirectBufferFromRemoteFS, que fallaba con desplazamientos cortos #49525 (Michael Kolupaev).
  • Se corrigió el orden de carga de los diccionarios #49560 (Alexander Tokmakov).
  • Prohibir cambiar el tipo de datos de la columna Object(‘json’) #49563 (Nikolay Degterinsky).
  • Se corrige la prueba de estrés (Error lógico: se esperaba 7134 >= 11030) #49623 (Kseniia Sumarokova).
  • Se corrigió un error en DISTINCT #49628 (Alexey Milovidov).
  • Corrección: DISTINCT en orden con valores de cero en columnas no ordenadas #49636 (Igor Nikonov).
  • Se corrige un error puntual en enteros grandes detectado por UBSan con un fuzzer #49645 (Alexey Milovidov).
  • Se corrige la lectura de columnas dispersas después de reiniciar #49660 (Anton Popov).
  • Se corrigió la aserción en SpanHolder::finish() con fibras #49673 (Kruglov Pavel).
  • Corrección de las funciones de cortocircuito y de las mutaciones con argumentos dispersos #49716 (Anton Popov).
  • Se corrige la escritura de archivos añadidos en copias de seguridad incrementales #49725 (Vitaly Baranov).
  • Corrige el error “There is no physical column _row_exists in table” que se produce durante una mutación de eliminación ligera en una tabla con una columna de tipo Object. #49737 (Alexander Gololobov).
  • Corrige un problema de msan en randomStringUTF8(número impar) #49750 (Robert Schulze).
  • Corregir la función de agregación kolmogorovSmirnovTest #49768 (FFFFFFFHHHHHHH).
  • Corregidos los alias de configuración en el protocolo nativo #49776 (Azat Khuzhin).
  • Se corrigió arrayMap con un array de tuplas con un solo argumento #49789 (Anton Popov).
  • Se corrigió la configuración de limitación de IO/BACKUP por consulta #49797 (Azat Khuzhin).
  • Se corrige la configuración de NULL en la definición del perfil #49831 (Vitaly Baranov).
  • Se corrige un error relacionado con las proyecciones y con la configuración aggregate_functions_null_for_empty (para query_plan_optimize_projection) #49873 (Amos Bird).
  • Se corrige el procesamiento del lote pendiente de async INSERT de Distributed tras el reinicio #49884 (Azat Khuzhin).
  • Se corrigió una aserción en CacheMetadata::doCleanup #49914 (Kseniia Sumarokova).
  • se corrige is_prefix en OptimizeRegularExpression #49919 (Han Fei).
  • Se corrigieron las métricas WriteBufferFromS3Bytes, WriteBufferFromS3Microseconds y WriteBufferFromS3RequestsErrors #49930 (Aleksandr Musorin).
  • Se corrige la codificación de IPv6 en Protobuf #49933 (Yakov Olkhovskiy).
  • Corregido un posible error lógico causado por un análisis incorrecto de Nullable en formatos de texto #49960 (Kruglov Pavel).
  • Se añade la configuración output_format_parquet_compliant_nested_types para generar archivos Parquet más compatibles #50001 (Michael Kolupaev).
  • Se corrige un error lógico en la prueba de estrés “Not enough space to add …” #50021 (Kseniia Sumarokova).
  • Se evita un interbloqueo al iniciar una tabla en el hilo de attach de ReplicatedMergeTree #50026 (Antonio Andelic).
  • Se corrige un assert en SpanHolder::finish() al usar fibers, intento 2 #50034 (Kruglov Pavel).
  • Añadir el escapado adecuado para la serialización del contexto de OpenTelemetry en DDL #50045 (Azat Khuzhin).
  • Se corrige el reporte de partes de proyección dañadas #50052 (Amos Bird).
  • Corrección de not equals NaN en la compilación JIT #50056 (Maksim Kita).
  • Se corrige el fallo en caso de una base de datos Replicated sin argumentos #50058 (Azat Khuzhin).
  • Corrige un fallo en multiIf con una condición constante y argumentos Nullable #50123 (Anton Popov).
  • Corrige un análisis de índices no válido para claves relacionadas con fechas #50153 (Amos Bird).
  • no permitir modificar ORDER BY cuando no haya columnas en ORDER BY #50154 (Han Fei).
  • Se corrige el fallo en el análisis de índices cuando un operador binario contiene un argumento constante NULL #50177 (Amos Bird).
  • clickhouse-client: impedir el uso de --query y --queries-file al mismo tiempo #50210 (Alexey Gerasimchuk).
  • Se corrige el UB en las extensiones de INTO OUTFILE (APPEND / AND STDOUT) y WATCH EVENTS #50216 (Azat Khuzhin).
  • Se corrigió la omisión de espacios al final de la fila en el formato CustomSeparatedIgnoreSpaces #50224 (Kruglov Pavel).
  • Corregir el procesamiento de metadatos de Iceberg #50232 (Kseniia Sumarokova).
  • Se corrige el SELECT distribuido anidado en la cláusula WITH #50234 (Azat Khuzhin).
  • Se corrige un problema de msan en SipHash con clave #50245 (Robert Schulze).
  • Se corrigen errores de los sockets de Poco en modo no bloqueante y se usan sockets realmente no bloqueantes #50252 (Kruglov Pavel).
  • Se corrige el cálculo de la suma de comprobación de las entradas de la copia de seguridad #50264 (Vitaly Baranov).
  • Corrección de NaN en las funciones de comparación #50287 (Maksim Kita).
  • Corrección de la clave Nullable en la agregación JIT #50291 (Maksim Kita).
  • Se corrige el cierre inesperado de clickhouse-local al escribir una salida vacía en formato Arrow o Parquet #50328 (Michael Kolupaev).
  • Se corrige un bloqueo cuando se llama a Pool::Entry::disconnect() #50334 (Val Doroshchuk).
  • Se mejoró la recuperación de una parte al mantener el bloqueo del directorio durante más tiempo #50339 (SmitaRKulkarni).
  • Se corrigen las funciones bitShift* con ambos argumentos constantes #50343 (Kruglov Pavel).
  • Se corrige un interbloqueo en Keeper por una excepción al preprocesar solicitudes. #50387 (frinkr).
  • Se corrige el hash de valores enteros constantes #50421 (Robert Schulze).
  • Se corrigen merge_tree_min_rows_for_seek/merge_tree_min_bytes_for_seek para los índices de omisión de datos #50432 (Azat Khuzhin).
  • Limitar el número de tareas en curso para la carga de partes obsoletas #50450 (Nikita Mikhaylov).
  • Corrección de Keeper: aplicar el estado sin confirmar después de instalar la instantánea #50483 (Antonio Andelic).
  • Se corrigió el plegado incorrecto de constantes #50536 (Alexey Milovidov).
  • Se corrigió un error lógico en la prueba de estrés (Not enough space to add …) #50583 (Kseniia Sumarokova).
  • Se corrigió la conversión de Null a LowCardinality(Nullable) en la función de tabla values #50637 (Kruglov Pavel).
  • Se revierte la optimización no válida de RegExpTreeDictionary #50642 (Johann Gan).

Lanzamiento de ClickHouse 23.4, 2023-04-26. Presentación, Video

Cambio incompatible con versiones anteriores

  • El Formatter ‘%M’ en la función formatDateTime() ahora imprime el nombre del mes en lugar de los minutos. Esto hace que el comportamiento sea consistente con MySQL. El comportamiento anterior se puede restaurar mediante la configuración “formatdatetime_parsedatetime_m_is_month_name = 0”. #47246 (Robert Schulze).
  • Este cambio solo tiene sentido si utiliza la filesystem cache virtual. Si path en la configuración de la filesystem cache virtual no está vacío y no es una ruta absoluta, se colocará en <clickhouse server data directory>/caches/<path_from_cache_config>. #48784 (Kseniia Sumarokova).
  • Ahora se rechazan los índices primarios y secundarios, así como las claves de ordenación, con expresiones idénticas. Este comportamiento puede deshabilitarse mediante la configuración allow_suspicious_indices. #48536 (凌涛).

Nueva funcionalidad

  • Se añade compatibilidad con la nueva función de agregación quantileGK/quantilesGK, como approx_percentile en Spark. El algoritmo de Greenwald-Khanna se describe en http://infolab.stanford.edu/~datar/courses/cs361a/papers/quantiles.pdf. #46428 (李扬).
  • Se añade la instrucción SHOW COLUMNS, que muestra información resumida de system.columns. #48017 (Robert Schulze).
  • Se añadieron los modificadores LIGHTWEIGHT y PULL para la consulta SYSTEM SYNC REPLICA. La versión LIGHTWEIGHT espera solo a los fetches y a los drop-ranges (se ignoran las merges y las mutations). La versión PULL recupera nuevas entradas de ZooKeeper y no espera a que se procesen. Corrige #47794. #48085 (Alexander Tokmakov).
  • Añadir la función kafkaMurmurHash para que sea compatible con el DefaultPartitioner de Kafka. Cierra #47834. #48185 (Nikolay Degterinsky).
  • Permite crear fácilmente un usuario con los mismos permisos que el usuario actual usando GRANT CURRENT GRANTS. #48262 (pufit).
  • Se añade la función de agregación estadística kolmogorovSmirnovTest. Cierra #48228. #48325 (FFFFFFFHHHHHHH).
  • Se añadió una columna lost_part_count a la tabla system.replicas. El valor de la columna muestra el número total de partes perdidas en la tabla correspondiente. El valor se almacena en ZooKeeper y puede usarse en lugar del evento de perfil no persistente ReplicatedDataLoss para la monitorización. #48526 (Sergei Trifonov).
  • Se añade la función soundex para mayor compatibilidad. Cierra #39880. #48567 (FriendLey).
  • Se admite el tipo Map para JSONExtract. #48629 (李扬).
  • Agrega el formato PrettyJSONEachRow para generar JSON legible con delimitadores de salto de línea y sangrías de 4 espacios. #48898 (Kruglov Pavel).
  • Añade el formato de entrada ParquetMetadata para leer los metadatos de archivos Parquet. #48911 (Kruglov Pavel).
  • Añade la función extractKeyValuePairs para extraer pares clave-valor de cadenas. Las cadenas de entrada pueden contener ruido (es decir, archivos de registro / no necesitan estar formateadas al 100 % como pares clave-valor); el algoritmo buscará pares clave-valor que coincidan con los argumentos pasados a la función. Por ahora, la función acepta los siguientes argumentos: data_column (obligatorio), key_value_pair_delimiter (el valor predeterminado es :), pair_delimiters (los valores predeterminados son \space \, \;) y quoting_character (el valor predeterminado son comillas dobles). #43606 (Arthur Passos).
  • Las funciones replaceOne(), replaceAll(), replaceRegexpOne() y replaceRegexpAll() ahora pueden llamarse con argumentos pattern y replacement no constantes. #46589 (Robert Schulze).
  • Se agregaron funciones para trabajar con columnas de tipo Map: mapConcat, mapSort, mapExists. #48071 (Anton Popov).

Mejora del rendimiento

  • La lectura de archivos en formato Parquet ahora es mucho más rápida. La E/S y la decodificación se paralelizan (controladas por la configuración max_threads), y solo se leen los rangos de datos necesarios. #47964 (Michael Kolupaev).
  • Si ejecutamos una mutación con IN (subconsulta) como esta: ALTER TABLE t UPDATE col='new value' WHERE id IN (SELECT id FROM huge_table) y la tabla t tiene múltiples partes, entonces para cada parte se construye en memoria un conjunto para la subconsulta SELECT id FROM huge_table. Y si hay muchas partes, esto podría consumir mucha memoria (y provocar un OOM) y CPU. La solución es introducir una caché de corta duración para los conjuntos que las tareas de mutación están construyendo en ese momento. Si otra tarea de la misma mutación se ejecuta de forma concurrente, puede buscar el conjunto en la caché, esperar a que se construya y reutilizarlo. #46835 (Alexander Gololobov).
  • Comprobar las dependencias solo cuando sea necesario al aplicar consultas ALTER TABLE. #48062 (Raúl Marín).
  • Optimizar la función mapUpdate. #48118 (Anton Popov).
  • Ahora, una consulta interna a la réplica local se envía explícitamente y sus datos se reciben a través de la interfaz de loopback. La configuración prefer_localhost_replica no se respeta para las réplicas paralelas. Esto es necesario para mejorar la planificación y hace que el código sea más limpio: el iniciador solo se encarga de coordinar el proceso de lectura y fusionar los resultados, respondiendo continuamente a las solicitudes mientras todas las consultas secundarias leen los datos. Nota: usar la interfaz de loopback no es tan eficiente; de lo contrario, algunas réplicas podrían quedarse sin tareas, lo que podría dar lugar a una ejecución de consultas aún más lenta y a no aprovechar todos los recursos posibles. La inicialización del coordinador ahora se retrasa aún más. Todas las solicitudes entrantes contienen la información sobre el algoritmo de lectura; inicializamos el coordinador con ella cuando llega la primera solicitud. Si alguna réplica decide leer con un algoritmo diferente, se lanzará una excepción y se abortará la consulta. #48246 (Nikita Mikhaylov).
  • No construir el conjunto para el lado derecho de la cláusula IN con subconsulta cuando se usa solo para analizar skip indexes y estos están deshabilitados por configuración (use_skip_indexes=0). Antes, esto podía afectar al rendimiento de las consultas. #48299 (Anton Popov).
  • El procesamiento de consultas se paraleliza justo después de leer FROM file(...). Relacionado con #38755. #48525 (Igor Nikonov). El procesamiento de consultas se paraleliza justo después de leer desde cualquier fuente de datos. Las fuentes de datos afectadas son principalmente almacenamientos simples o externos, como las funciones de tabla url, file. #48727 (Igor Nikonov). Esto se controla mediante la configuración parallelize_output_from_storages, que no está habilitada de forma predeterminada.
  • Se redujo la contención del mutex de ThreadPool (puede aumentar el rendimiento cuando hay una gran cantidad de trabajos pequeños). #48750 (Sergei Trifonov).
  • Reducir el uso de memoria en múltiples mutaciones ALTER DELETE. #48522 (Nikolai Kochetov).
  • Eliminar los intentos de conexión excesivos si la configuración skip_unavailable_shards está habilitada. #48771 (Azat Khuzhin).

Funcionalidad experimental

Mejora

  • Se aumenta el valor predeterminado de connect_timeout_with_failover_ms a 1000 ms (debido a la incorporación de conexiones asíncronas en https://github.com/ClickHouse/ClickHouse/pull/47229). Cierra #5188. #49009 (Kruglov Pavel).
  • Varias mejoras relacionadas con los lagos de datos: - Hacer que Iceberg funcione con datos no particionados. - Soporte para la versión v2 del formato de Iceberg (anteriormente solo se admitía la v1) - Soporte para la lectura de datos particionados en DeltaLake/Hudi - Lectura más rápida de los metadatos de DeltaLake mediante el uso de los archivos de checkpoint de Delta - Se corrigieron lecturas incorrectas de Hudi: anteriormente elegía de forma incorrecta qué datos leer y, por lo tanto, solo podía leer correctamente tablas pequeñas - Se hizo que estos motores detectaran actualizaciones en datos modificados (anteriormente, el estado se establecía al crear la tabla) - Añadir pruebas adecuadas para Iceberg/DeltaLake/Hudi usando Spark. #47307 (Kseniia Sumarokova).
  • Se añade conexión asíncrona al socket y escritura asíncrona en el socket. Se hacen asíncronos, entre segmentos, la creación de conexiones y el envío de la consulta y las tablas externas. Se refactoriza el código con fibras. Cierra #46931. Después de este PR (https://github.com/ClickHouse/ClickHouse/issues/5188), podremos aumentar connect_timeout_with_failover_ms de forma predeterminada. #47229 (Kruglov Pavel).
  • Se admiten las secciones de configuración keeper/keeper_server como alternativa a zookeeper. Cierra #34766, #34767. #35113 (李扬).
  • Es posible establecer la marca secure en named_collections para un diccionario con una tabla de ClickHouse como origen. Soluciona #38450 . #46323 (Ilya Golshtein).
  • La función bitCount admite los tipos de datos FixedString y String. #49044 (flynn).
  • Se añadieron reintentos configurables a todas las operaciones con [Zoo]Keeper para las consultas de Backup. #47224 (Nikita Mikhaylov).
  • Habilitar use_environment_credentials para S3 de forma predeterminada, de modo que, por defecto, se construya toda la cadena de proveedores de credenciales. #47397 (Antonio Andelic).
  • Actualmente, la función JSON_VALUE es similar a la función get_json_object de Spark, que permite obtener un valor de una cadena JSON mediante una ruta como ‘$.key’. Sin embargo, aún presenta algunas diferencias: - 1. en get_json_object de Spark se devuelve null cuando la ruta no existe, mientras que en JSON_VALUE se devuelve una cadena vacía; - 2. en get_json_object de Spark se devuelve un valor de tipo complejo, como un objeto/arreglo JSON, pero en JSON_VALUE se devuelve una cadena vacía. #47494 (KevinyhZou).
  • Para use_structure_from_insertion_table_in_table_functions, se añadió una propagación más flexible de la estructura de la tabla de inserción a la función de tabla. Se corrigió un problema con la correspondencia de nombres y el uso de columnas virtuales. Ya no hace falta la configuración ‘auto’. #47962 (Yakov Olkhovskiy).
  • No seguir reintentando la conexión a Keeper si la consulta se cancela o supera los límites. #47985 (Raúl Marín).
  • Se admite la entrada y salida de Enum en BSONEachRow, se permiten todos los tipos de clave de map y se evitan cálculos adicionales en la salida. #48122 (Kruglov Pavel).
  • Compatibilidad con más tipos de ClickHouse en los formatos ORC/Arrow/Parquet: Enum(8|16), (U)Int(128|256), Decimal256 (para ORC); se permite leer IPv4 a partir de valores Int32 (ORC genera IPv4 como Int32 y no podíamos leerlo de nuevo) y se corrige la lectura de Nullable(IPv6) desde datos binarios para ORC. #48126 (Kruglov Pavel).
  • Se agregan las columnas perform_ttl_move_on_insert y load_balancing a la tabla system.storage_policies, y se modifica el tipo de la columna volume_type a Enum8. #48167 (lizhuoyu5).
  • Se añadió compatibilidad con el comando BACKUP ALL, que crea copias de seguridad de todas las tablas y bases de datos, incluidas las temporales y las del sistema. #48189 (Vitaly Baranov).
  • La función mapFromArrays admite el tipo Map como argumento de entrada. #48207 (李扬).
  • La salida de algunos SHOW PROCESSLIST ahora se muestra ordenada. #48241 (Robert Schulze).
  • Limitación por consulta/por servidor para IO remoto/IO local/copias de seguridad (configuración del servidor: max_remote_read_network_bandwidth_for_server, max_remote_write_network_bandwidth_for_server, max_local_read_bandwidth_for_server, max_local_write_bandwidth_for_server, max_backup_bandwidth_for_server; configuración: max_remote_read_network_bandwidth, max_remote_write_network_bandwidth, max_local_read_bandwidth, max_local_write_bandwidth, max_backup_bandwidth). #48242 (Azat Khuzhin).
  • Se admiten más tipos en el formato CapnProto: Map, (U)Int(128|256), Decimal(128|256). Se permiten conversiones de enteros durante la entrada/salida. #48257 (Kruglov Pavel).
  • No lanzar CURRENT_WRITE_BUFFER_IS_EXHAUSTED en el comportamiento normal. #48288 (Raúl Marín).
  • Se agregó la nueva configuración keeper_map_strict_mode, que impone garantías adicionales en las operaciones realizadas sobre las tablas KeeperMap. #48293 (Antonio Andelic).
  • Se comprueba que el tipo de clave primaria de un diccionario simple sea un tipo entero sin signo nativo. Se añade la configuración check_dictionary_primary_key para mantener la compatibilidad (establezca check_dictionary_primary_key =false para desactivar la comprobación). #48335 (lizhuoyu5).
  • No replique las mutaciones de KeeperMap, ya que es innecesario. #48354 (Antonio Andelic).
  • Permite escribir/leer una Tuple sin nombre como un Message anidado en formato Protobuf. Los elementos de Tuple y los campos de Message se corresponden por posición. #48390 (Kruglov Pavel).
  • Se añadió compatibilidad con las opciones additional_table_filters y additional_result_filter en el nuevo planificador. Además, se añadió una entrada en la documentación para additional_result_filter. #48405 (Dmitry Novik).
  • parseDateTime ahora admite la cadena de formato ‘%f’ (segundos fraccionarios). #48420 (Robert Schulze).
  • La cadena de formato “%f” en formatDateTime() ahora muestra “000000” si el valor formateado no tiene fracciones de segundo; el comportamiento anterior (un solo cero) se puede restaurar mediante la configuración “formatdatetime_f_prints_single_zero = 1”. #48422 (Robert Schulze).
  • No replicar DELETE ni TRUNCATE para KeeperMap. #48434 (Antonio Andelic).
  • Genera Decimals y Bools válidos en la función generateRandom. #48436 (Kruglov Pavel).
  • Se permiten comas finales en la lista de expresiones de la consulta SELECT, por ejemplo SELECT a, b, c, FROM table. Cierra #37802. #48438 (Nikolay Degterinsky).
  • Los parámetros del cliente --user y --password prevalecen sobre las variables de entorno CLICKHOUSE_USER y CLICKHOUSE_PASSWORD. Cierra #38909. #48440 (Nikolay Degterinsky).
  • Se añadieron reintentos durante la carga de partes de datos en tablas MergeTree en caso de errores que permiten reintento. #48442 (Anton Popov).
  • Se añadió compatibilidad con los tipos de datos Date, Date32, DateTime y DateTime64 para las funciones arrayMin, arrayMax y arrayDifference. Cierra #21645. #48445 (Nikolay Degterinsky).
  • Se añade compatibilidad con la macro {server_uuid}. Es útil para identificar réplicas en clústeres con escalado automático cuando se añaden y eliminan réplicas constantemente en tiempo de ejecución. Esto resuelve #48554. #48563 (Alexey Milovidov).
  • El script de instalación creará un enlace físico en lugar de copiarlo, si es posible. #48578 (Alexey Milovidov).
  • Se admite la sintaxis SHOW TABLE con el mismo significado que SHOW CREATE TABLE. Cierra #48580. #48591 (flynn).
  • Los búferes temporales de HTTP ahora pueden funcionar desalojando datos de la caché virtual del sistema de archivos. #48664 (Vladimir C).
  • Permitir que la inferencia de esquema funcione para CREATE AS SELECT. Cierra #47599. #48679 (flynn).
  • Se añadió la configuración replicated_max_mutations_in_one_entry para ReplicatedMergeTree, que permite limitar el número de comandos de mutación por cada entrada MUTATE_PART (el valor predeterminado es 10000). #48731 (Alexander Tokmakov).
  • En los tipos AggregateFunction, no se cuentan los bytes de arena no utilizados como read_bytes. #48745 (Raúl Marín).
  • Corrige algunas configuraciones relacionadas con MySQL que no se gestionaban correctamente con la fuente de diccionario de MySQL + colección con nombre. Cierra #48402. #48759 (Kseniia Sumarokova).
  • Si un usuario establecía max_single_part_upload_size en un valor muy alto, esto podía provocar un fallo debido a un error en el SDK de AWS S3. Esto corrige #47679. #48816 (Alexey Milovidov).
  • Se corrige una condición de carrera en RabbitMQ (informe) y se reorganiza el código. #48845 (Kseniia Sumarokova).
  • Añade los alias name y part_name en system.parts y system.part_log. Cierra #48718. #48850 (sichenzhao).
  • Las funciones “arrayDifferenceSupport()”, “arrayCumSum()” y “arrayCumSumNonNegative()” ahora admiten arrays de entrada de tipos enteros amplios (U)Int128/256. #48866 (cluster).
  • El historial multilínea en clickhouse-client ahora ya no lleva relleno. Esto hace que pegar texto resulte más natural. #48870 (Joanna Hulboj).
  • Se implementa una pequeña mejora para el caso poco frecuente en que ClickHouse se ejecuta dentro de LXC y se utiliza LXCFS. LXCFS tiene un problema: a veces devuelve el error “Transport endpoint is not connected” al leer un archivo dentro de /proc. Este error se registraba correctamente en el registro del servidor de ClickHouse. Además, se ha añadido una solución alternativa para este problema que consiste en volver a abrir el archivo. Se trata de un cambio minúsculo. #48922 (Real).
  • Mejorar la contabilización de memoria de las precargas. Aleatorizar la configuración de las precargas en CI. #48973 (Kseniia Sumarokova).
  • Configurar correctamente las cabeceras para las operaciones nativas de copia en GCS. #48981 (Antonio Andelic).
  • Se añadió compatibilidad para especificar nombres de configuraciones en la línea de comandos con guiones en lugar de guiones bajos, por ejemplo, --max-threads en lugar de --max_threads. Además, se añadió compatibilidad con caracteres Unicode de guion, como en lugar de --; esto resulta útil cuando te comunicas con un equipo de otra empresa y un gerente de ese equipo ha copiado y pegado código desde MS Word. #48985 (alekseygolub).
  • Se añade un mecanismo de respaldo a la autenticación por contraseña cuando falla la autenticación con un certificado SSL de usuario. Cierra #48974. #48989 (Nikolay Degterinsky).
  • Mejora el panel integrado. Cierra #46671. #49036 (Kevin Zhang).
  • Se añadieron eventos de perfil para los mensajes de registro, de modo que puedas ver fácilmente el número de mensajes de registro por nivel de gravedad. #49042 (Alexey Milovidov).
  • En versiones anteriores, el formato LineAsString funcionaba de forma inconsistente con los saltos de línea de DOS o macOS Classic, tanto si el análisis paralelo estaba habilitado como si no. Esto resuelve #49039. #49052 (Alexey Milovidov).
  • El mensaje de excepción sobre el parámetro de consulta que no se pudo analizar también indicará el nombre del parámetro. Se vuelve a implementar #48878. Se cierra #48772. #49061 (Alexey Milovidov).

Mejoras de compilación/pruebas/empaquetado

  • Se actualizaron las zonas horarias siguientes: Africa/Cairo, Africa/Casablanca, Africa/El_Aaiun, America/Bogota, America/Cambridge_Bay, America/Ciudad_Juarez, America/Godthab, America/Inuvik, America/Iqaluit, America/Nuuk, America/Ojinaga, America/Pangnirtung, America/Rankin_Inlet, America/Resolute, America/Whitehorse, America/Yellowknife, Asia/Gaza, Asia/Hebron, Asia/Kuala_Lumpur, Asia/Singapore, Canada/Yukon, Egypt, Europe/Kirov, Europe/Volgograd, Singapore. #48572 (Alexey Milovidov).
  • Se redujo el número de dependencias en los archivos de cabecera para acelerar la compilación. #47984 (Dmitry Novik).
  • Se aleatorizó la compresión de marcas e índices en las pruebas. #48286 (Alexey Milovidov).
  • Se actualizó la versión interna de ZSTD de la 1.5.4 a la 1.5.5. #46797 (Robert Schulze).
  • Se aleatorizaron en las pruebas las fusiones verticales de partes de compact a wide. #48287 (Raúl Marín).
  • Se añadió soporte para checksum CRC32 en HDFS. Se corrigieron problemas de rendimiento. #48614 (Alexey Milovidov).
  • Se eliminaron restos del soporte para GCC. #48671 (Robert Schulze).
  • Se añadió una ejecución de CI con la infraestructura del nuevo analyzer habilitada. #48719 (Dmitry Novik).

Corrección de errores (mal funcionamiento visible para el usuario en una versión estable oficial)

  • Corregido system.query_views_log para las MV enviadas desde hilos en segundo plano #46668 (Azat Khuzhin).
  • Corrige varios fallos de RENAME COLUMN #46946 (alesapin).
  • Corrige pequeños problemas de resaltado en clickhouse-format #47610 (Natasha Murashkina).
  • Corrige un error en libc++ de LLVM que provocaba un fallo al subir partes a S3 cuyo tamaño era mayor que INT_MAX #47693 (Azat Khuzhin).
  • Corrige un desbordamiento en la función sparkbar #48121 (Vladimir C).
  • Se corrige una condición de carrera en S3 #48190 (Anton Popov).
  • Se deshabilitó JIT para las funciones de agregación debido a un comportamiento inconsistente #48195 (Alexey Milovidov).
  • Corregido el formato de ALTER (cambio menor) #48289 (Natasha Murashkina).
  • Se corrigió el uso de CPU en RabbitMQ (había empeorado en la versión 23.2 tras #44404) #48311 (Kseniia Sumarokova).
  • Se corrige un bloqueo en EXPLAIN PIPELINE para Merge sobre Distributed #48320 (Azat Khuzhin).
  • Se corrigió la serialización de LowCardinality como diccionario de Arrow #48361 (Kruglov Pavel).
  • Se restableció el descargador para el segmento de archivo de la caché en TemporaryFileStream #48386 (Vladimir C).
  • Se corrige un posible bloqueo de SYSTEM SYNC REPLICA en casos de DROP/REPLACE PARTITION #48391 (Azat Khuzhin).
  • Corrige un error de inicio al cargar una tabla distribuida que depende de un diccionario #48419 (MikhailBurdukov).
  • No comprobar las dependencias al renombrar automáticamente las tablas del sistema #48431 (Raúl Marín).
  • Actualizar únicamente las filas afectadas en el almacenamiento KeeperMap #48435 (Antonio Andelic).
  • Se corrige un posible segfault en la caché VFS #48469 (Kseniia Sumarokova).
  • La función toTimeZone devuelve un error cuando no se proporciona una cadena constante #48471 (Jordi Villar).
  • Se corrige un error lógico con IPv4 en Protobuf y se añade compatibilidad con Date32 #48486 (Kruglov Pavel).
  • La marca “changed” en system.settings se calculaba de forma incorrecta para ajustes con varios valores #48516 (MikhailBurdukov).
  • Corregido el almacenamiento Memory con la compresión habilitada #48517 (Anton Popov).
  • Se corrige un problema por el que el modo de pegado entre corchetes estropeaba la entrada de la contraseña en caso de reconexión del cliente #48528 (Michael Kolupaev).
  • Corrección de Map anidado para claves de tipo IP y UUID #48556 (Yakov Olkhovskiy).
  • Se corrige una excepción no capturada al usar el cargador paralelo para diccionarios hash #48571 (Azat Khuzhin).
  • La función de agregación groupArray ahora funciona correctamente con resultados vacíos sobre tipos Nullable #48593 (lgbo).
  • Se corrige un error en Keeper que, en ocasiones, impedía crear un nodo con el esquema auth en la ACL. #48595 (Aleksei Filatov).
  • Permite operadores de comparación de IPv4 con UInt #48611 (Yakov Olkhovskiy).
  • Se corrigió un posible error relacionado con la caché #48636 (Kseniia Sumarokova).
  • Las inserciones asíncronas con datos vacíos ya no generarán una excepción. #48663 (Anton Popov).
  • Corregir las dependencias de las tablas en caso de que falle RENAME TABLE #48683 (Azat Khuzhin).
  • Si la clave primaria tiene columnas duplicadas (lo que solo es posible en las proyecciones), en versiones anteriores esto podía provocar un error #48838 (Amos Bird).
  • Corrección de una condición de carrera en ZooKeeper al hacer join de send_thread/receive_thread #48849 (Alexander Gololobov).
  • Se corrige el error de nombre de parte inesperada al intentar eliminar una parte detached ignorada con zero copy replication #48862 (Michael Lex).
  • Se corrige la lectura de una columna Date32 de Parquet/Arrow como una columna distinta de Date32 #48864 (Kruglov Pavel).
  • Se corrige el error UNKNOWN_IDENTIFIER al seleccionar datos de una tabla con una política de filas y una columna con puntos #48976 (Kruglov Pavel).
  • Se corrigió la agregación con cadenas Nullable vacías #48999 (LiuNeng).

lanzamiento de ClickHouse 23.3 LTS, 2023-03-30. Presentación, Video

Notas de actualización

  • Las eliminaciones ligeras DELETE están listas para producción y habilitadas de forma predeterminada. La consulta DELETE para tablas MergeTree ahora está disponible de forma predeterminada.
  • El comportamiento de las funciones *domain*RFC y netloc ha cambiado ligeramente: se relajó el conjunto de símbolos permitidos en la autoridad de la URL para ajustarse mejor al estándar. #46841 (Azat Khuzhin).
  • Se prohibió crear tablas basadas en KafkaEngine con sentencias DEFAULT/EPHEMERAL/ALIAS/MATERIALIZED para columnas. #47138 (Aleksandr Musorin).
  • Se eliminó la funcionalidad de “drenaje asíncrono de conexiones”. También se eliminaron las configuraciones y métricas relacionadas. Era una funcionalidad interna, por lo que su eliminación no debería afectar a los usuarios que nunca habían oído hablar de ella. #47486 (Alexander Tokmakov).
  • Se admite el tipo de dato Decimal de 256 bits (más de 38 dígitos) en arraySum/Min/Max/Avg/Product, arrayCumSum/CumSumNonNegative, arrayDifference, construcción de arrays, operador IN, parámetros de consulta, groupArrayMovingSum, funciones estadísticas, min/max/any/argMin/argMax, protocolo wire de PostgreSQL, motor de tabla MySQL y función, sumMap, mapAdd, mapSubtract, arrayIntersect. Se añadió soporte para enteros grandes en arrayIntersect. Las funciones de agregación estadísticas que involucran momentos (como corr o varios TTest) usarán Float64 como representación interna (antes de este cambio usaban Decimal128, pero no tenía sentido), y estas funciones pueden devolver nan en lugar de inf en caso de varianza infinita. Algunas funciones admitían tipos de dato Decimal256, pero en versiones anteriores devolvían Decimal128; ahora esto se ha corregido. Esto cierra #47569. Esto cierra #44864. Esto cierra #28335. #47594 (Alexey Milovidov).
  • backup_threads/restore_threads pasan a ser configuraciones del servidor (en lugar de configuraciones de usuario). #47881 (Azat Khuzhin).
  • Ya no se permiten índices secundarios const ni no deterministas. #46839 (Anton Popov).

Nueva funcionalidad

  • Añade un nuevo modo para dividir el trabajo entre réplicas mediante los ajustes parallel_replicas_custom_key y parallel_replicas_custom_key_filter_type. Si el clúster consta de un solo segmento con varias réplicas, se seleccionarán aleatoriamente hasta max_parallel_replicas y se convertirán en segmentos. Para cada segmento, se añade el filtro correspondiente a la consulta en el iniciador antes de enviarla al segmento. Si el clúster consta de varios segmentos, se comportará igual que sample_key, pero con la posibilidad de definir una clave arbitraria. #45108 (Antonio Andelic).
  • Una opción para mostrar resultados parciales al cancelar: Se agregó la configuración de consulta partial_result_on_first_cancel, que permite que la consulta cancelada (p. ej., con Ctrl-C) devuelva un resultado parcial. #45689 (Alexey Perevyshin).
  • Se añadió compatibilidad con motores de tabla arbitrarios para tablas temporales (excepto los motores Replicated y KeeperMap). Cierra #31497. #46071 (Roman Vasin).
  • Se añade soporte para la replicación de funciones SQL definidas por el usuario mediante almacenamiento centralizado en Keeper. #46085 (Aleksei Filatov).
  • Implementar system.server_settings (similar a system.settings), que contendrá la configuración del servidor. #46550 (pufit).
  • Soporte para la consulta UNDROP TABLE. Cierra #46811. #47241 (chen).
  • Permite grants independientes para named collections (p. ej., para poder otorgar acceso a SHOW/CREATE/ALTER/DROP named collection solo a determinadas colecciones, en lugar de a todas de una vez). Cierra #40894. Añade un nuevo tipo de acceso, NAMED_COLLECTION_CONTROL, que no se concede al valor predeterminado del usuario salvo que se añada explícitamente a la configuración del usuario (es necesario para poder hacer GRANT ALL); además, show_named_collections ya no es obligatorio especificarlo manualmente en el valor predeterminado del usuario para poder tener derechos de acceso completos, como ocurría en la versión 23.2. #46241 (Kseniia Sumarokova).
  • Permitir discos personalizados anidados. Anteriormente, los discos personalizados solo admitían una estructura de discos plana. #47106 (Kseniia Sumarokova).
  • Se ha introducido la función widthBucket (con el alias WIDTH_BUCKET por compatibilidad). #42974. #46790 (avoiderboi).
  • Se añade la nueva función parseDateTime/parseDateTimeInJodaSyntax según la cadena de formato especificada. parseDateTime convierte String a DateTime con sintaxis MySQL, parseDateTimeInJodaSyntax lo convierte con sintaxis Joda. #46815 (李扬).
  • Se usa dummy UInt8 como estructura predeterminada de la función de tabla null. Cierra #46930. #47006 (flynn).
  • Soporte para el formato de fecha con coma, como Dec 15, 2021, en la función parseDateTimeBestEffort. Cierra #46816. #47071 (chen).
  • Se añaden las opciones de configuración http_wait_end_of_query y http_response_buffer_size, correspondientes a los parámetros de URL wait_end_of_query y buffer_size de la interfaz HTTP. Esto permite modificar estas opciones en los perfiles. #47108 (Vladimir C).
  • Se agrega la tabla system.dropped_tables, que muestra las tablas eliminadas de las bases de datos Atomic pero que todavía no se han eliminado por completo. #47364 (chen).
  • Se añade INSTR como alias de positionCaseInsensitive por compatibilidad con MySQL. Cierra #47529. #47535 (flynn).
  • Se añadió la función toDecimalString, que permite convertir números en cadenas con precisión fija. #47838 (Andrey Zvonov).
  • Añade una configuración de MergeTree max_number_of_mutations_for_replica. Limita el número de mutaciones de partes por réplica a la cantidad especificada. Cero significa que no hay límite en el número de mutaciones por réplica (la ejecución aún puede estar restringida por otras configuraciones). #48047 (Vladimir C).
  • Se añade la función mapFromArrays, relacionada con Map, que permite crear un map a partir de un par de arrays. #31125 (李扬).
  • Permite controlar la compresión en los formatos de salida Parquet/ORC/Arrow y añade compatibilidad con más formatos de entrada comprimidos. Esto cierra #13541. #47114 (Kruglov Pavel).
  • Se añade autenticación con certificado de usuario SSL al protocolo nativo. Cierra #47077. #47596 (Nikolay Degterinsky).
  • Se añaden variantes *OrNull() y *OrZero() para parseDateTime, y el alias str_to_date para mantener la compatibilidad con MySQL. #48000 (Robert Schulze).
  • Se añadió el operador REGEXP (similar a los operadores “LIKE”, “IN”, “MOD”, etc.) para mejorar la compatibilidad con MySQL #47869 (Robert Schulze).

Mejora del rendimiento

  • Las marks en memoria ahora están comprimidas y requieren entre 3 y 6 veces menos memoria. #47290 (Michael Kolupaev).
  • Las copias de seguridad con grandes cantidades de archivos eran increíblemente lentas en versiones anteriores. Ya no. Ahora son increíblemente rápidas. #47251 (Alexey Milovidov). Se introdujo un pool de hilos independiente para las operaciones de IO de las copias de seguridad. Esto permitirá escalarlo de forma independiente de otros pools y aumentar el rendimiento. #47174 (Nikita Mikhaylov). Se usan solicitudes MultiRead y reintentos para recopilar metadatos en la etapa final del procesamiento de la copia de seguridad. #47243 (Nikita Mikhaylov). Si tanto la copia de seguridad como la restauración de datos están en S3, a partir de ahora debe utilizarse una copia del lado del servidor. #47546 (Vitaly Baranov).
  • Se corrigió el exceso de lecturas en consultas con FINAL. #47801 (Nikita Taranov).
  • La configuración max_final_threads se establecerá con el número de núcleos al iniciar el servidor (con el mismo algoritmo que se usa para max_threads). Esto mejora la concurrencia de la ejecución de final en servidores con un gran número de CPU. #47915 (Nikita Taranov).
  • Permite ejecutar el pipeline de lectura para el diccionario DIRECT con fuente CLICKHOUSE en varios hilos. Para habilitarlo, establezca dictionary_use_async_executor=1 en la sección SETTINGS de la fuente en la instrucción CREATE DICTIONARY. #47986 (Vladimir C).
  • Optimizar el rendimiento de agregación con una clave Nullable. #45772 (LiuNeng).
  • Se implementó el uso del índice tokenbf_v1 en minúscula para hasTokenOrNull, hasTokenCaseInsensitive y hasTokenCaseInsensitiveOrNull. #46252 (ltrk2).
  • Optimiza las funciones position y LIKE al buscar los dos primeros caracteres mediante SIMD. #46289 (Jiebin Sun).
  • Se optimizaron las consultas sobre system.detached_parts, que podían ser considerablemente grandes. Se añadieron varias fuentes teniendo en cuenta la limitación del tamaño de bloque; en cada bloque, se usa un pool de hilos de IO para calcular el tamaño de la parte, es decir, para realizar llamadas al sistema en paralelo. #46624 (Sema Checherinda).
  • Aumenta el valor predeterminado de max_replicated_merges_in_queue para las tablas ReplicatedMergeTree de 16 a 1000. Esto permite realizar merges en segundo plano más rápidamente en clústeres con un número muy elevado de réplicas, como los clústeres con almacenamiento compartido en ClickHouse Cloud. #47050 (Alexey Milovidov).
  • Se actualizó clickhouse-copier para usar GROUP BY en lugar de DISTINCT para obtener la lista de particiones. En tablas grandes, esto redujo el tiempo de selección de más de 500 s a menos de 1 s. #47386 (Clayton McClure).
  • Se ha corregido la degradación del rendimiento en ASOF JOIN. #47544 (Ongkong).
  • Aún más procesamiento por lotes en Keeper. Mejora el rendimiento al evitar dividir los lotes en las solicitudes de lectura. #47978 (Antonio Andelic).
  • Permitir PREWHERE en Merge con distintas expresiones DEFAULT para las columnas. #46831 (Azat Khuzhin).

Funcionalidad experimental

  • Réplicas paralelas: se mejoró el rendimiento general al aprovechar mejor la réplica local, y de forma predeterminada se prohibió la lectura con réplicas paralelas desde MergeTree no replicado. #47858 (Nikita Mikhaylov).
  • Se admite el push down de filtros a la tabla izquierda para JOIN con tablas Join, Dictionary y EmbeddedRocksDB si el analizador experimental está habilitado. #47280 (Maksim Kita).
  • Ahora, ReplicatedMergeTree con zero copy replication genera menos carga en Keeper. #47676 (alesapin).
  • Se corrigió la creación de vista materializada con MaterializedPostgreSQL #40807 (Maksim Buren).

Mejora

  • Se habilita input_format_json_ignore_unknown_keys_in_named_tuple de forma predeterminada. #46742 (Kruglov Pavel).
  • Permitir ignorar errores al escribir en MATERIALIZED VIEW (añade la nueva configuración materialized_views_ignore_errors, con valor predeterminado false, pero se establece incondicionalmente en true al volcar logs en las tablas system.*_log). #46658 (Azat Khuzhin).
  • Seguimiento en memoria de la cola de archivos para envíos distribuidos. #45491 (Azat Khuzhin).
  • Ahora se añaden los encabezados X-ClickHouse-Query-Id y X-ClickHouse-Timezone a las respuestas de todas las consultas a través del protocolo HTTP. Anteriormente, esto solo se hacía para las consultas SELECT. #46364 (Anton Popov).
  • Tablas externas de MongoDB: soporte para la conexión a un Replica Set mediante un URI con un enum de host:port y soporte para la opción readPreference en los diccionarios de MongoDB. URI de ejemplo: mongodb://db0.example.com:27017,db1.example.com:27017,db2.example.com:27017/?replicaSet=myRepl&readPreference=primary. #46524 (artem-yadr).
  • Esta mejora debería pasarle desapercibida. Se reimplementó el análisis de proyecciones sobre el plan de consulta. Se añadió la configuración query_plan_optimize_projection=1 para alternar entre la versión antigua y la nueva. Corrige #44963. #46537 (Nikolai Kochetov).
  • Usa el formato Parquet v2 en lugar de v1 en el formato de salida de forma predeterminada. Añade la configuración output_format_parquet_version para controlar la versión de Parquet; valores posibles: 1.0, 2.4, 2.6, 2.latest (predeterminado). #46617 (Kruglov Pavel).
  • Ahora es posible usar la nueva sintaxis de configuración para configurar temas de Kafka con puntos (.) en el nombre. #46752 (Robert Schulze).
  • Corregir las heurísticas que verifican los patrones de hyperscan para detectar repeticiones problemáticas. #46819 (Robert Schulze).
  • No informar de que el nodo ZK ya existe en system.errors cuando un bloque se creó de forma concurrente en una réplica diferente. #46820 (Raúl Marín).
  • Se aumenta el límite de archivos abiertos en clickhouse-local. Podrá leer desde tablas web en servidores con una gran cantidad de núcleos de CPU. No dejará de leer desde el motor de tabla URL si hay demasiados archivos abiertos. Esto cierra #46852. #46853 (Alexey Milovidov).
  • Las excepciones que se generan cuando no se pueden interpretar los números ahora tienen un mensaje de error más fácil de leer. #46917 (Robert Schulze).
  • Se añadió una actualización de system.backups tras cada tarea procesada para hacer seguimiento del progreso de las copias de seguridad. #46989 (Aleksandr Musorin).
  • Permite la conversión de tipos en el formato de entrada Native. Se añade la configuración input_format_native_allow_types_conversion para controlarla (habilitada de forma predeterminada). #46990 (Kruglov Pavel).
  • Permitir el uso de IPv4 en la función range para generar rangos de IP. #46995 (Yakov Olkhovskiy).
  • Mejora el mensaje de excepción cuando no es posible mover una parte de un volumen/disco a otro. #47032 (alesapin).
  • Se admite el tipo Bool en la función JSONType. Anteriormente, se devolvía por error el tipo Null para los valores booleanos. #47046 (Anton Popov).
  • Use el parámetro _request_body para configurar consultas HTTP predefinidas. #47086 (Constantine Peresypkin).
  • Indentación automática en el SQL Editor integrado de la UI al pulsar Enter. #47113 (Alexey Korepanov).
  • La autoextracción con ‘sudo’ intentará establecer el uid y el gid de los archivos extraídos para el usuario en ejecución. #47116 (Yakov Olkhovskiy).
  • Anteriormente, el segundo argumento de la función repeat solo aceptaba un tipo entero sin signo, lo que significaba que no podía admitir valores como -1. Este comportamiento difería del de la función de Spark. En esta actualización, la función repeat se ha modificado para que coincida con el comportamiento de la función de Spark. Ahora acepta los mismos tipos de entrada, incluidos los enteros negativos. Se han realizado pruebas exhaustivas para verificar la corrección de la implementación actualizada. #47134 (KevinyhZou). Nota: la entrada del changelog fue reescrita por ChatGPT.
  • Eliminar ::__1 de las trazas de pila. Mostrar std::basic_string<char, ... como String en las trazas de pila. #47171 (Mike Kot).
  • Reimplementar el modo interservidor para evitar ataques de repetición (ten en cuenta que este cambio es retrocompatible con servidores anteriores). #47213 (Azat Khuzhin).
  • Mejora el reconocimiento de grupos de expresiones regulares y perfecciona el diccionario regexp_tree. #47218 (Han Fei).
  • Mejora de Keeper: añade un nuevo 4LW clrs para limpiar los recursos utilizados por Keeper (p. ej., liberar memoria no utilizada). #47256 (Antonio Andelic).
  • Se añaden argumentos opcionales a los códecs DoubleDelta(bytes_size), Gorilla(bytes_size), FPC(level, float_size); esto permite usar estos códecs sin especificar el tipo de columna en clickhouse-compressor. Se corrigen posibles abortos y errores aritméticos en clickhouse-compressor con estos códecs. Correcciones: https://github.com/ClickHouse/ClickHouse/discussions/47262. #47271 (Kruglov Pavel).
  • Añade compatibilidad con tipos big int a la función runningDifference. Cierra #47194. #47322 (Nikolay Degterinsky).
  • Se añade un margen de expiración para las credenciales de S3 que tienen una hora de vencimiento, a fin de evitar errores ExpiredToken en algunos casos extremos. Se puede controlar con la configuración expiration_window_seconds; el valor predeterminado es de 120 segundos. #47423 (Antonio Andelic).
  • Compatibilidad con Decimal y Date32 en el formato Avro. #47434 (Kruglov Pavel).
  • No iniciar el servidor si se detecta una conversión interrumpida de Ordinary a Atomic; mostrar un mensaje de error más claro con instrucciones para solucionar problemas. #47487 (Alexander Tokmakov).
  • Añade una nueva columna kind a system.opentelemetry_span_log. Esta columna almacena el valor de SpanKind definido en OpenTelemetry. #47499 (Frank Chen).
  • Permite leer/escribir arrays anidados en formato Protobuf usando solo el nombre del campo raíz como nombre de la columna. Anteriormente, el nombre de la columna debía incluir todos los nombres de los campos anidados (por ejemplo, a.b.c Array(Array(Array(UInt32))), ahora puedes usar solo a Array(Array(Array(UInt32))). #47650 (Kruglov Pavel).
  • Se añadió un modificador opcional STRICT para SYSTEM SYNC REPLICA que hace que la consulta espere a que la cola de replicación se vacíe (igual que ocurría antes de https://github.com/ClickHouse/ClickHouse/pull/45648). #47659 (Alexander Tokmakov).
  • Mejora la nomenclatura de algunos logs de span de OpenTelemetry. #47667 (Frank Chen).
  • Evita usar cadenas demasiado largas de combinadores de funciones de agregación (pueden dar lugar a consultas lentas durante la fase de análisis). Esto cierra #47715. #47716 (Alexey Milovidov).
  • Compatibilidad con subconsultas en vistas parametrizadas; resuelve #46741 #47725 (SmitaRKulkarni).
  • Se corrige una fuga de memoria en la integración de MySQL (se reproduce con connection_auto_close=1). #47732 (Kseniia Sumarokova).
  • Se mejoró el manejo de errores en el código relacionado con los parámetros Decimal, lo que da lugar a mensajes de error más informativos. Anteriormente, cuando se proporcionaban parámetros Decimal incorrectos, el mensaje de error generado era poco claro o poco útil. Con esta actualización, se corrigió el mensaje de error mostrado para ofrecer información más detallada y útil, lo que facilita la identificación y corrección de problemas relacionados con los parámetros Decimal. #47812 (Yu Feng). Nota: esta entrada del registro de cambios fue reescrita por ChatGPT.
  • El parámetro exact_rows_before_limit se usa para que rows_before_limit_at_least refleje con exactitud el número de filas devueltas antes de alcanzar el límite. Este pull request corrige problemas detectados cuando la consulta implica procesamiento distribuido entre múltiples segmentos u operaciones de ordenación. Antes de esta actualización, estos escenarios no funcionaban como se esperaba. #47874 (Amos Bird).
  • Introspección de las métricas de ThreadPools. #47880 (Azat Khuzhin).
  • Se añaden los eventos de perfil WriteBufferFromS3Microseconds y WriteBufferFromS3RequestsErrors. #47885 (Antonio Andelic).
  • Añadir las opciones --link y --noninteractive (-y) al comando de instalación de ClickHouse. Cierra #47750. #47887 (Nikolay Degterinsky).
  • Se corrigió la excepción UNKNOWN_TABLE al adjuntar una vista materializada que tiene tablas dependientes no disponibles. Esto puede ser útil al intentar restaurar el estado desde una copia de seguridad. #47975 (MikhailBurdukov).
  • Se corrige el caso en que no se añade la ruta (opcional) a la configuración de un disco cifrado. #47981 (Kseniia Sumarokova).
  • Compatibilidad con CTE en vistas parametrizadas Implementación: Se actualizó para permitir parámetros de consulta al evaluar subconsultas escalares. #48065 (SmitaRKulkarni).
  • Compatibilidad con enteros grandes (U)Int128/(U)Int256, Map con cualquier tipo de clave y DateTime64 con cualquier precisión (no solo 3 y 6). #48119 (Kruglov Pavel).
  • Permitir omitir errores relacionados con valores enum desconocidos en formatos de entrada por filas. #48133 (Alexey Milovidov).

Mejora de compilación/pruebas/empaquetado

  • ClickHouse ahora se compila con C++23. #47424 (Robert Schulze).
  • Se añadieron pruebas de fuzzing para consultas EXPLAIN en el AST Fuzzer. #47803 #47852 (flynn).
  • Se separaron la prueba de estrés y la comprobación automatizada de compatibilidad con versiones anteriores (ahora, comprobación de actualización). #44879 (Kruglov Pavel).
  • Se actualizó la imagen de Ubuntu para Docker para mitigar algunos informes de seguridad falsos. #46784 (Julio Jimenez). Tenga en cuenta que ClickHouse no tiene dependencias y no requiere Docker.
  • Añade un mensaje para permitir eliminar una descarga existente de clickhouse al usar la descarga de ClickHouse con «curl | sh». El mensaje es “ClickHouse binary clickhouse already exists. Overwrite? [y/N]”. #46859 (Dan Roscigno).
  • Corrige un error durante el inicio del servidor en distribuciones antiguas (p. ej., Amazon Linux 2) y en ARM, donde no se encuentran los símbolos de glibc 2.28. #47008 (Robert Schulze).
  • Se prepara la compatibilidad con clang 16. #47027 (Amos Bird).
  • Se añadió una comprobación de CI que garantiza que ClickHouse puede ejecutarse con una glibc antigua en ARM. #47063 (Robert Schulze).
  • Se añadió una comprobación de estilo para evitar el uso incorrecto de la macro NDEBUG. #47699 (Alexey Milovidov).
  • Se acelera un poco la compilación. #47714 (Alexey Milovidov).
  • Se actualizó vectorscan a la versión 5.4.9. #47955 (Robert Schulze).
  • Se añadió una prueba unitaria para verificar que el logging fatal de Apache Arrow no provoque una interrupción. Cubre los cambios de ClickHouse/arrow#16. #47958 (Arthur Passos).
  • Se restauró la capacidad de iniciar la compilación nativa del servidor de depuración para macOS. #48050 (Robert Schulze). Nota: este cambio solo es relevante para desarrollo, ya que las compilaciones oficiales de ClickHouse se realizan con compilación cruzada.

Corrección de errores (mal funcionamiento visible para el usuario en una versión estable oficial)

  • Corregir el restablecimiento del analizador de formatos, probar el procesamiento de mensajes erróneos en Kafka #45693 (Kruglov Pavel).
  • Corregir el cálculo del tamaño de los datos en Keeper #46086 (Antonio Andelic).
  • Se corrigió un error en los reintentos automáticos de la consulta DROP TABLE con tablas ReplicatedMergeTree y bases de datos Atomic. En casos poco frecuentes, podía provocar los errores Can't get data for node /zk_path/log_pointer y The specified key does not exist si la sesión de ZooKeeper expiraba durante DROP y, en paralelo, se creaba una nueva tabla replicada con la misma ruta en ZooKeeper. #46384 (Alexander Tokmakov).
  • Se corrigió la recursión incorrecta de alias al normalizar las consultas, lo que impedía que algunas consultas se ejecutaran. #46609 (Raúl Marín).
  • Se corrige la serialización/deserialización de IPv4/IPv6 en formatos binarios #46616 (Kruglov Pavel).
  • ActionsDAG: no se debe cambiar el resultado de and durante la optimización #46653 (Salvatore Mesoraca).
  • Mejora la cancelación de consultas cuando un cliente se desconecta inesperadamente #46681 (Alexander Tokmakov).
  • Se corrigen las operaciones aritméticas en la optimización de agregados #46705 (Duc Canh Le).
  • Corrige un posible cierre inesperado de clickhouse-local al inferir el esquema de JSONEachRow #46731 (Kruglov Pavel).
  • Se corrige el cambio de un rol caducado #46772 (Vitaly Baranov).
  • Se corrigió la acumulación conjunta de columnas PREWHERE de varios pasos #46785 (Alexander Gololobov).
  • Usar el rango inicial para determinar el tamaño del archivo en el búfer de lectura HTTP. Sin este cambio, algunos archivos remotos no podían procesarse. #46824 (Antonio Andelic).
  • Se corrige la barra de progreso errónea al usar tablas URL #46830 (Antonio Andelic).
  • Se corrigió un informe de MSan en la función maxIntersections #46847 (Alexey Milovidov).
  • Se corrige un error en el tipo de datos Map #46856 (Alexey Milovidov).
  • Se corrigieron los resultados incorrectos de algunas búsquedas LIKE cuando el patrón LIKE contiene caracteres no entrecomillables entre comillas #46875 (Robert Schulze).
  • Corrección: WITH FILL provocaba una interrupción cuando Filling Transform procesaba un bloque vacío #46897 (Yakov Olkhovskiy).
  • Corregida la inferencia de fechas y enteros desde cadenas en JSON #46972 (Kruglov Pavel).
  • Corregido un error en la elección del disco de la replicación zero-copy durante el fetch #47010 (alesapin).
  • Se corrige una errata en la definición del servicio de systemd #47051 (Palash Goel).
  • Se corrige el error NOT_IMPLEMENTED con CROSS JOIN y algorithm = auto #47068 (Vladimir C).
  • Soluciona el problema por el que la tabla ‘ReplicatedMergeTree’ no podía insertar dos datos similares cuando ‘part_type’ está configurado en modo ‘InMemory’ (función experimental). #47121 (liding1992).
  • Diccionarios externos / library-bridge: Se corrige el error “método de biblioteca desconocido ‘extDict_libClone’” #47136 (alex filatov).
  • Se corrige una condición de carrera en un grace hash join con límite #47153 (Vladimir C).
  • Se corrigió la compatibilidad de PREWHERE con columnas concretas #47154 (Azat Khuzhin).
  • Se corrige un posible interbloqueo en Query Status #47161 (Kruglov Pavel).
  • Se prohíbe insert select en la misma tabla Join, ya que provoca un interbloqueo #47260 (Vladimir C).
  • Omitir las particiones fusionadas en las fusiones de min_age_to_force_merge_seconds #47303 (Antonio Andelic).
  • Modificar find_first_symbols para que funcione como se espera con find_first_not_symbols #47304 (Arthur Passos).
  • Corrección de la inferencia de números grandes en CSV #47410 (Kruglov Pavel).
  • Se deshabilitó el optimizador de expresiones lógicas para expresiones con alias. #47451 (Nikolai Kochetov).
  • Se corrigió un error en decodeURLComponent #47457 (Alexey Milovidov).
  • Corregido el gráfico de EXPLAIN con proyección #47473 (flynn).
  • Corrige los parámetros de consulta #47488 (Alexey Milovidov).
  • Vista parametrizada: corrección de un error. #47495 (SmitaRKulkarni).
  • Fuzzer de formatos de datos y las correcciones correspondientes. #47519 (Alexey Milovidov).
  • Se corrigió la comprobación de monotonía para DateTime64 #47526 (Antonio Andelic).
  • Se corrige “incompatibilidad en la estructura del bloque” en una columna Nullable LowCardinality #47537 (Nikolai Kochetov).
  • Corrección adecuada de un error en Apache Parquet #45878 #47538 (Kruglov Pavel).
  • Se corrige el análisis paralelo de BSONEachRow cuando el tamaño del documento no es válido #47540 (Kruglov Pavel).
  • Mantener el error en system.distribution_queue al ejecutar SYSTEM FLUSH DISTRIBUTED #47541 (Azat Khuzhin).
  • Comprobación de columnas duplicadas en el formato BSONEachRow #47609 (Kruglov Pavel).
  • Se corrige la espera del bloqueo de zero copy durante el movimiento #47631 (alesapin).
  • Corrección de la agregación por particiones #47634 (Nikita Taranov).
  • Se corrigió un error en la serialización de una tupla como array en el formato BSONEachRow #47690 (Kruglov Pavel).
  • Corrige un fallo en polygonsSymDifferenceCartesian #47702 (pufit).
  • Se corrigió la lectura de archivos comprimidos con zlib y gzip desde el almacenamiento File #47796 (Anton Popov).
  • Mejorar la detección de consultas vacías para PostgreSQL (para el driver pgx de Go) #47854 (Azat Khuzhin).
  • Corrige la verificación de monotonía de DateTime para tipos LowCardinality #47860 (Antonio Andelic).
  • Usa restore_threads (no backup_threads) en RESTORE ASYNC #47861 (Azat Khuzhin).
  • Se corrige DROP COLUMN en ReplicatedMergeTree con proyecciones #47883 (Antonio Andelic).
  • Corrección de la recuperación de la base de datos Replicated #47901 (Alexander Tokmakov).
  • Corrección de emergencia para advertencias demasiado detalladas en HTTP #47903 (Alexander Tokmakov).
  • Corregido “Valor del campo demasiado largo” en catboostEvaluate #47970 (Robert Schulze).
  • Se corrige #36971: Watchdog: salir con un código distinto de cero si el proceso hijo finaliza #47973 (Коренберг Марк).
  • Solución para “el archivo de índice cidx es inesperadamente largo” #48010 (SmitaRKulkarni).
  • Se corrigió la consulta de MaterializedPostgreSQL para obtener atributos (replica-identity) #48015 (Solomatov Sergei).
  • parseDateTime(): Corrige UB (desbordamiento de enteros con signo) #48019 (Robert Schulze).
  • Usar nombres únicos para los registros en Avro para evitar reutilizar su esquema #48057 (Kruglov Pavel).
  • Configure correctamente los tiempos de espera de los sockets TCP/HTTP en Keeper #48108 (Antonio Andelic).
  • Se corrige una posible llamada a un método sobre un puntero nulo en el formato Avro #48184 (Kruglov Pavel).

Versión de ClickHouse 23.2, 2023-02-23. Presentación, Vídeo

Cambio incompatible con versiones anteriores

  • Se amplía la función “toDayOfWeek()” (alias: “DAYOFWEEK”) con un argumento mode que codifica si la semana empieza en lunes o en domingo, y si el conteo comienza en 0 o en 1. Para mantener la coherencia con otras funciones de fecha y hora, el argumento mode se insertó entre los argumentos de tiempo y zona horaria. Esto rompe el uso existente de la sintaxis de 2 argumentos (antes no documentada) “toDayOfWeek(time, time_zone)”. La solución es reescribir la función como “toDayOfWeek(time, 0, time_zone)”. #45233 (Robert Schulze).
  • Se cambia el nombre del ajuste max_query_cache_size a filesystem_cache_max_download_size. #45614 (Kseniia Sumarokova).
  • El usuario default no tendrá, de forma predeterminada, permisos para el tipo de acceso SHOW NAMED COLLECTION (por ejemplo, el usuario default ya no podrá conceder ALL a otros usuarios como ocurría antes; por lo tanto, este PR es incompatible con versiones anteriores). #46010 (Kseniia Sumarokova).
  • Si la cláusula SETTINGS se especifica antes de la cláusula FORMAT, los ajustes también se aplicarán al formato de salida. #46003 (Azat Khuzhin).
  • Se elimina la compatibilidad con el ajuste materialized_postgresql_allow_automatic_update (que estaba desactivado de forma predeterminada). #46106 (Kseniia Sumarokova).
  • Se mejora ligeramente el rendimiento de countDigits en conjuntos de datos realistas. Esto cierra #44518. En versiones anteriores, countDigits(0) devolvía 0; ahora devuelve 1, lo cual es más correcto y se ajusta a la documentación existente. #46187 (Alexey Milovidov).
  • No se permite crear nuevas columnas comprimidas con una combinación de códecs “Delta” o “DoubleDelta”, seguidos de los códecs “Gorilla” o “FPC”. Esto puede evitarse usando el ajuste “allow_suspicious_codecs = true”. #45652 (Robert Schulze).

Nueva funcionalidad

  • Se añade StorageIceberg y la función de tabla iceberg para acceder al almacenamiento de tablas Iceberg en S3. #45384 (flynn).
  • Permite configurar el almacenamiento con SETTINGS disk = '<disk_name>' (en lugar de storage_policy) y mediante la creación explícita de discos con SETTINGS disk = disk(type=s3, ...). #41976 (Kseniia Sumarokova).
  • Exponer los contadores ProfileEvents en system.part_log. #38614 (Bharat Nallan).
  • Ampliación del motor ReplacingMergeTree existente para permitir inserciones duplicadas. Combina la potencia de ReplacingMergeTree y CollapsingMergeTree en un único motor MergeTree. Los datos eliminados no se devuelven al consultarlos, pero tampoco se eliminan del disco. #41005 (youennL-cs).
  • Se añade la función generateULID. Se cierra #36536. #44662 (Nikolay Degterinsky).
  • Se añade la función de agregación corrMatrix, que calcula cada par de columnas. Además, como las funciones de agregación covarSamp y covarPop son similares a corr, también se añaden covarSampMatrix y covarPopMatrix. @alexey-milovidov cierra #44587. #44680 (FFFFFFFHHHHHHH).
  • Se incorpora la función arrayShuffle para generar permutaciones aleatorias de arrays. #45271 (Joanna Hulboj).
  • Se admiten los tipos FIXED_SIZE_BINARY en Arrow y FIXED_LENGTH_BYTE_ARRAY en Parquet, que se corresponden con FixedString. Se añaden las Settings output_format_parquet_fixed_string_as_fixed_byte_array/output_format_arrow_fixed_string_as_fixed_byte_array para controlar el tipo de salida predeterminado de FixedString. Cierra #45326. #45340 (Kruglov Pavel).
  • Se añadió una nueva columna last_exception_time a system.replication_queue. #45457 (Frank Chen).
  • Se añaden dos nuevas funciones que permiten usar claves/semillas definidas por el usuario con SipHash. #45513 (Salvatore Mesoraca).
  • Se permite una versión de tres argumentos para la función de tabla format. Cierra #45808. #45873 (FFFFFFFHHHHHHH).
  • Añadida compatibilidad con el formato JodaTime para ‘x’,‘w’,‘S’. Consulte https://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html. #46073 (zk_kiger).
  • Se admite la función de ventana ntile. (lgbo).
  • Añadir la configuración final para aplicar implícitamente el modificador FINAL a todas las tablas. #40945 (Arthur Passos).
  • Se agregaron las funciones arrayPartialSort y arrayPartialReverseSort. #46296 (Joanna Hulboj).
  • El nuevo parámetro HTTP client_protocol_version permite establecer una versión del protocolo de cliente para las respuestas HTTP en Native format. #40397. #46360 (Geoff Genz).
  • Se agregó la nueva función regexpExtract, como la función de Spark REGEXP_EXTRACT, por compatibilidad. Es similar a la función existente extract. #46469 (李扬).
  • Añade la nueva función JSONArrayLength, que devuelve el número de elementos del JSON array de nivel superior. La función devuelve NULL si la cadena JSON de entrada no es válida. #46631 (李扬).

Mejora del rendimiento

  • La lógica introducida funciona si la condición PREWHERE es una conjunción de múltiples condiciones (cond1 AND cond2 AND … ). Agrupa en pasos aquellas condiciones que requieren leer las mismas columnas. Después de cada paso, se calcula la parte correspondiente de la condición completa y se pueden filtrar las filas resultantes. Esto permite leer menos filas en los pasos siguientes, lo que ahorra ancho de banda de IO y reduce el cómputo necesario. Por ahora, esta lógica está deshabilitada de forma predeterminada. Se habilitará de forma predeterminada en uno de los próximos releases una vez que se confirme que no provoca regresiones, por lo que se recomienda encarecidamente usarla para realizar pruebas. Puede controlarse con 2 configuraciones: “enable_multiple_prewhere_read_steps” y “move_all_conditions_to_prewhere”. #46140 (Alexander Gololobov).
  • Se añadió una opción para agregar particiones de forma independiente si la clave de partición de la tabla y la clave de agrupación son compatibles. Se controla mediante la configuración allow_aggregate_partitions_independently. Está deshabilitada de forma predeterminada debido a su aplicabilidad limitada (consulte la documentación). #45364 (Nikita Taranov).
  • Se permite usar el algoritmo de fusión vertical con partes en formato Compact. Esto permitirá que el servidor de ClickHouse use mucha menos memoria para las operaciones en segundo plano. Con esto se cierra #46084. #45681 #46282 (Anton Popov).
  • Optimiza el lector de Parquet utilizando un lector por lotes. #45878 (LiuNeng).
  • Se añade el nuevo método io_uring para local_filesystem_read_method, basado en el subsistema asíncrono de Linux io_uring, que mejora el rendimiento de lectura casi de forma generalizada en comparación con el método predeterminado pread. #38456 (Saulius Valatka).
  • Reescritura de funciones de agregación que tienen la expresión if como argumento cuando son lógicamente equivalentes. Por ejemplo, avg(if(cond, col, null)) se puede reescribir como avgIf(cond, col). Esto mejora el rendimiento. #44730 (李扬).
  • Mejora el rendimiento de las funciones lower/upper con instrucciones AVX512. #37894 (yaqi-zhao).
  • Se elimina la limitación por la que, en sistemas con >=32 núcleos y SMT deshabilitado, ClickHouse usa solo la mitad de los núcleos (como cuando se desactiva Hyper Threading en la BIOS). #44973 (Robert Schulze).
  • Mejora el rendimiento de la función multiIf mediante la ejecución columnar, con una aceleración de 2,3x. #45296 (李扬).
  • Añadir una vía rápida para la función position cuando la subcadena buscada está vacía. #45382 (李扬).
  • Se habilita la optimización query_plan_remove_redundant_sorting de forma predeterminada. Optimización implementada en #45420. #45567 (Igor Nikonov).
  • Se aumentó el tamaño de los fragmentos de HTTP Transfer Encoding para mejorar el rendimiento de las consultas grandes que usan la interfaz HTTP. #45593 (Geoff Genz).
  • Se mejoró el rendimiento de las consultas SELECT cortas que leen de tablas con una gran cantidad de columnas Array/Map/Nested. #45630 (Anton Popov).
  • Mejora del rendimiento del filtrado para enteros grandes y tipos Decimal. #45949 (李扬).
  • Este cambio podría reducir eficazmente la sobrecarga de obtener el filtro de ColumnNullable(UInt8) y mejorar el rendimiento general de las consultas. Para evaluar el impacto de este cambio, utilizamos el benchmark TPC-H, pero cambiamos los tipos de columna de no anulables a anulables y medimos el QPS de sus consultas como indicador de rendimiento. #45962 (Zhiguo Zhou).
  • Hacer que las columnas virtuales _part y _partition_id sean de tipo LowCardinality(String). Cierra #45964. #45975 (flynn).
  • Mejora del rendimiento en la conversión de Decimal cuando la escala no cambia. #46095 (Alexey Milovidov).
  • Permite aumentar la precarga en la lectura de datos. #46168 (Kseniia Sumarokova).
  • Reescritura de arrayExists(x -> x = 1, arr) -> has(arr, 1), lo que mejora el rendimiento en 1.34x. #46188 (李扬).
  • Corrige el consumo excesivo de memoria en las fusiones verticales sobre disco no remoto. Respeta max_insert_delayed_streams_for_parallel_write para el disco remoto. #46275 (Nikolai Kochetov).
  • Se actualizó zstd a v1.5.4. Incluye algunas mejoras menores en el rendimiento y la tasa de compresión. Si ejecuta réplicas con distintas versiones de ClickHouse, puede que vea mensajes de error apropiados Data after merge/mutation is not byte-identical to data on another replicas. con una explicación. Estos mensajes son normales y no debe preocuparse. #46280 (Raúl Marín).
  • Corrige la degradación del rendimiento provocada por #39737. #46309 (Alexey Milovidov).
  • El controlador replicas_status responderá rápidamente incluso si la cola de replicación es grande. #46310 (Alexey Milovidov).
  • Se añade compatibilidad con avx512 para la función de agregación sum y para las funciones aritméticas unarias y de comparación. #37870 (zhao zhou).
  • Se reescribió el código relacionado con la distribución de marks y la coordinación global de la lectura para lograr la máxima mejora del rendimiento. Esto cierra #34527. #43772 (Nikita Mikhaylov).
  • Elimina cláusulas DISTINCT redundantes en las consultas (subconsultas). Implementado a nivel del plan de consulta. Realiza una optimización similar a optimize_duplicate_order_by_and_distinct en lo que respecta a las cláusulas DISTINCT. Se puede habilitar mediante la configuración query_plan_remove_redundant_distinct. Relacionado con #42648. #44176 (Igor Nikonov).
  • Algunas optimizaciones de reescritura de consultas: sumIf(123, cond) -> 123 * countIf(1, cond), sum(if(cond, 123, 0)) -> 123 * countIf(cond), sum(if(cond, 0, 123)) -> 123 * countIf(not(cond)) #44728 (李扬).
  • Se mejoró la interacción entre la fusión limitada por memoria y la agregación In order en el plan de consulta de nivel superior. Antes, en algunos casos se recurría a una ordenación explícita para AIO cuando en realidad no era necesaria. #45892 (Nikita Taranov).
  • Las fusiones concurrentes se programan mediante round-robin de forma predeterminada para garantizar un funcionamiento equitativo y sin inanición. Anteriormente, en segmentos muy sobrecargados, las fusiones grandes podían verse desplazadas por las más pequeñas debido al uso de una programación con prioridad estricta. Se añadió la opción de configuración del servidor background_merges_mutations_scheduling_policy para seleccionar el algoritmo de programación (round_robin o shortest_task_first). #46247 (Sergei Trifonov).

Mejora

  • Se habilitan los reintentos para INSERT de forma predeterminada en caso de pérdida de la sesión de ZooKeeper. Ya lo usamos en producción. #46308 (Alexey Milovidov).
  • Se agregó la posibilidad de ignorar claves desconocidas en objetos JSON para tuplas con nombre (input_format_json_ignore_unknown_keys_in_named_tuple). #45678 (Azat Khuzhin).
  • Se admite la optimización de la cláusula where moviendo la expresión de la clave de ordenación a prewhere para consultas con final. #38893. #38950 (hexiaoting).
  • Añadidas nuevas métricas para las copias de seguridad: num_processed_files y processed_files_size describen el número real de archivos procesados. #42244 (Aleksandr).
  • Se añadieron reintentos ante errores de DNS entre servidores. #43179 (Anton Kozlov).
  • Mejora de Keeper: se intenta preasignar espacio en el disco para evitar problemas indeterminados por falta de espacio. Se introduce la configuración max_log_file_size para definir el tamaño máximo de los archivos de registro de Raft de Keeper. #44370 (Antonio Andelic).
  • Optimizar el comportamiento de la lógica de la API de retraso de réplica en caso de que la réplica sea de solo lectura. #45148 (mateng915).
  • Solicitar la contraseña de forma interactiva en clickhouse-client cuando una contraseña vacía sea incorrecta. Cierra #46702. #46730 (Nikolay Degterinsky).
  • Marcar como sospechosa la compresión Gorilla en columnas de tipo distinto de Float*. #45376 (Robert Schulze).
  • Mostrar el nombre de la réplica que está ejecutando un merge en la columna postpone_reason. #45458 (Frank Chen).
  • Guardar la traza de pila de la excepción en part_log. #45459 (Frank Chen).
  • El Diccionario regexp_tree se ha mejorado y ahora es compatible con https://github.com/ua-parser/uap-core. #45631 (Han Fei).
  • Se actualizó la verificación de SYSTEM SYNC REPLICA, se resuelve #45508 #45648 (SmitaRKulkarni).
  • Se cambió el nombre de la configuración replication_alter_partitions_sync a alter_sync. #45659 (Antonio Andelic).
  • La función de tabla generateRandom y el motor ahora admiten tipos de datos LowCardinality. Esto resulta útil para hacer pruebas; por ejemplo, puede escribir INSERT INTO table SELECT * FROM generateRandom() LIMIT 1000. Esto es necesario para depurar #45590. #45661 (Alexey Milovidov).
  • La caché experimental de resultados de consultas ahora ofrece opciones de configuración más modulares. #45679 (Robert Schulze).
  • Se renombró “caché de resultados de consultas” a “caché de consultas”. #45682 (Robert Schulze).
  • se añade el comando SYSTEM SYNC FILE CACHE. Ejecuta la llamada al sistema sync. #8921. #45685 (DR).
  • Agrega una nueva configuración de S3 allow_head_object_request. Esta PR hace opcional el uso de la solicitud GetObjectAttributes en lugar de HeadObject, introducido en https://github.com/ClickHouse/ClickHouse/pull/45288 (y deshabilitado de forma predeterminada). #45701 (Vitaly Baranov).
  • Se añadió la capacidad de aplicar sobrescrituras a la configuración de conexión según los nombres de las conexiones (es decir, que ahora puedes olvidarte de almacenar una contraseña para cada conexión; simplemente puedes ponerlo todo en ~/.clickhouse-client/config.xml e incluso usar distintos archivos de historial para ellas, lo que también puede ser útil). #45715 (Azat Khuzhin).
  • Formato Arrow: compatibilidad con el tipo duration. Cierra #45669. #45750 (flynn).
  • Se amplía el registro detallado en la caché de consultas para mejorar la investigación del comportamiento de la caché. #45751 (Robert Schulze).
  • Los ajustes de la caché de consultas a nivel de servidor ahora pueden reconfigurarse en tiempo de ejecución. #45758 (Robert Schulze).
  • Ocultar la contraseña en los logs cuando los argumentos de una función de tabla se especifican mediante una colección con nombre. #45774 (Vitaly Baranov).
  • Mejora del cliente interno de S3 para deducir correctamente las regiones y las redirecciones en distintos tipos de URL. #45783 (Antonio Andelic).
  • Se añade compatibilidad con los tipos Map, IPv4 e IPv6 en generateRandom. Resulta útil principalmente para pruebas. #45785 (Raúl Marín).
  • Soporte para empty/notEmpty en tipos IP. #45799 (Yakov Olkhovskiy).
  • La columna num_processed_files se dividió en dos: num_files (para BACKUP) y files_read (para RESTORE). La columna processed_files_size se dividió en dos: total_size (para BACKUP) y bytes_read (para RESTORE). #45800 (Vitaly Baranov).
  • Se añadió compatibilidad con la consulta SHOW ENGINES por compatibilidad con MySQL. #45859 (Filatenkov Artur).
  • Se mejoró la forma en que el ofuscador maneja las consultas. #45867 (Raúl Marín).
  • Mejora del comportamiento de la conversión a Date para el valor límite 65535 (2149-06-06). #46042 #45914 (Joanna Hulboj).
  • Añade la configuración check_referential_table_dependencies para comprobar las dependencias referenciales al ejecutar DROP TABLE. Este PR resuelve #38326. #45936 (Vitaly Baranov).
  • Corregir tupleElement para que devuelva Null si recibe un argumento Null. Cierra #45894. #45952 (flynn).
  • Generar un error cuando no haya archivos que coincidan con el comodín de S3. Cierra #45587. #45957 (chen).
  • Usa datos del estado del clúster para comprobar copias de seguridad/restauraciones concurrentes. #45982 (SmitaRKulkarni).
  • ClickHouse Client: Usa coincidencias “exactas” para la búsqueda difusa, con una insensibilidad correcta a mayúsculas y minúsculas y un algoritmo más adecuado para hacer coincidir consultas SQL. #46000 (Azat Khuzhin).
  • Se prohíbe la sintaxis incorrecta de create View CREATE View X TO Y AS SELECT. Cierra #4331. #46043 (flynn).
  • La familia Storage Log admite la configuración de storage_policy. Cierra #43421. #46044 (flynn).
  • Mejora del formato JSONColumns cuando el resultado está vacío. Cierra #46024. #46053 (flynn).
  • Se añadió una implementación de referencia para SipHash128. #46065 (Salvatore Mesoraca).
  • Añadir una nueva métrica para registrar los tiempos y bytes de asignación usando mmap. #46068 (李扬).
  • Actualmente, en funciones como leftPad, rightPad, leftPadUTF8 y rightPadUTF8, el segundo argumento length debe ser UInt8|16|32|64|128|256. Esto es demasiado restrictivo para los usuarios de ClickHouse y, además, no es coherente con otras funciones similares, como arrayResize, substring, etc. #46103 (李扬).
  • Se corrigió una aserción en la función welchTTest en una compilación de depuración cuando la estadística resultante es NaN. Se unificó su comportamiento con el de otras funciones similares. Se cambió el comportamiento de studentTTest para que devuelva NaN en lugar de lanzar una excepción, ya que el comportamiento anterior resultaba inconveniente. Esto cierra #41176. Esto cierra #42162. #46141 (Alexey Milovidov).
  • Uso más cómodo de enteros grandes y ORDER BY WITH FILL. Se permite usar enteros simples para los puntos de inicio y fin en WITH FILL al usar ORDER BY con enteros grandes (de 128 y 256 bits). Se corrige el resultado incorrecto para enteros grandes con puntos de inicio o fin negativos. Esto cierra #16733. #46152 (Alexey Milovidov).
  • Se añadieron las columnas parts, active_parts y total_marks a system.tables en la incidencia. #46161 (attack204).
  • Las funciones “multi[Fuzzy]Match(Any|AnyIndex|AllIndices}” ahora rechazan expresiones regulares que probablemente tengan una evaluación muy lenta en vectorscan. #46167 (Robert Schulze).
  • Cuando insert_null_as_default está habilitado y la columna no tiene un valor predeterminado definido, se usará el valor predeterminado del tipo de la columna. Además, este PR corrige el uso de valores predeterminados para valores nulos en el caso de las columnas LowCardinality. #46171 (Kruglov Pavel).
  • Se prefieren las claves de acceso definidas explícitamente para los clientes de S3. Si use_environment_credentials se establece en true y el usuario ha proporcionado la clave de acceso mediante una consulta o la configuración, se utilizará en lugar de la de la variable de entorno. #46191 (Antonio Andelic).
  • Se añade un alias “DATE_FORMAT()” para la función “formatDateTime()” con el fin de mejorar la compatibilidad con el dialecto SQL de MySQL; se amplía la función formatDateTime con las sustituciones “a”, “b”, “c”, “h”, “i”, “k”, “l” “r”, “s”, “W”. ### Entrada de documentación para cambios visibles para el usuario Descripción breve para el usuario: DATE_FORMAT es un alias de formatDateTime. Formatea un valor de tiempo según la cadena de formato indicada. El formato es una expresión constante, por lo que no se pueden usar varios formatos para una sola columna de resultados. (Incluya un enlace a formatDateTime). #46302 (Jake Bamrah).
  • Añade ProfileEvents y CurrentMetrics sobre las tareas de callback de las réplicas paralelas (tablas s3Cluster y MergeTree). #46313 (Alexey Milovidov).
  • Añade soporte para DELETE y UPDATE en tablas que usan el motor de almacenamiento KeeperMap. #46330 (Antonio Andelic).
  • Se permite escribir consultas RENAME con parámetros de consulta. Resuelve #45778. #46407 (Nikolay Degterinsky).
  • Corrige las consultas SELECT parametrizadas con el transformador REPLACE. Soluciona #33002. #46420 (Nikolay Degterinsky).
  • Excluir de la métrica asíncrona “NumberOfDatabases” la base de datos interna utilizada para las tablas temporales/externas. Esto hace que el comportamiento sea consistente con la tabla del sistema “system.databases”. #46435 (Robert Schulze).
  • Se añadió la columna last_exception_time a la tabla distribution_queue. #46564 (Aleksandr).
  • Compatibilidad con parámetros en la cláusula IN de vistas parametrizadas. #46583 (SmitaRKulkarni).
  • No cargar las named collections al iniciar el servidor (cargarlas en el primer acceso). #46607 (Kseniia Sumarokova).

Mejora de compilación/pruebas/empaquetado

  • Se introduce GWP-ASan, implementado por el runtime de LLVM. Esto cierra #27039. #45226 (Han Fei).
  • Queremos hacer que nuestras pruebas sean menos estables y más propensas a fallos intermitentes: se añade aleatorización a la configuración de MergeTree en las pruebas. #38983 (Anton Popov).
  • Se habilita la compatibilidad con HDFS en PowerPC, lo que ayuda a corregir las siguientes pruebas funcionales: 02113_hdfs_assert.sh, 02244_hdfs_cluster.sql y 02368_cancel_write_into_hdfs.sh. #44949 (MeenaRenganathan22).
  • Se añade el archivo systemd.service para clickhouse-keeper. Corrige #44293. #45568 (Mikhail f. Shiryaev).
  • El fork de poco de ClickHouse se movió de “contrib/” a “base/poco/”. #46075 (Robert Schulze).
  • Se añade una opción para que clickhouse-watchdog reinicie el proceso hijo. Esto no tiene mucha utilidad. #46312 (Alexey Milovidov).
  • Si la variable de entorno CLICKHOUSE_DOCKER_RESTART_ON_EXIT está configurada en 1, el contenedor de Docker ejecutará clickhouse-server como proceso hijo en lugar de como proceso principal, y lo reiniciará cuando termine. #46391 (Alexey Milovidov).
  • Se corrige el archivo de servicio de systemd. #46461 (SuperDJY).
  • Se elevó la versión mínima de Clang necesaria para compilar ClickHouse de 12 a 15. #46710 (Robert Schulze).
  • Se actualiza Intel QPL de v0.3.0 a v1.0.0. Se compila libaccel-config y se enlaza estáticamente con la biblioteca QPL en lugar de hacerlo dinámicamente. #45809 (jasperzhu).

Corrección de errores (mal funcionamiento perceptible para el usuario en la versión estable oficial)

  • Realiza el volcado de datos exactamente según rabbitmq_flush_interval_ms o rabbitmq_max_block_size en StorageRabbitMQ. Cierra #42389. Cierra #45160. #44404 (Kseniia Sumarokova).
  • Usa PODArray para renderizar en la función sparkBar, de modo que se pueda controlar el uso de memoria. Cierra #44467. #44489 (Duc Canh Le).
  • Se corrigió: las funciones (quantilesExactExclusive, quantilesExactInclusive) devuelven un elemento de Array no ordenado. #45379 (wujunfu).
  • Se corrigió una excepción no controlada en HTTPHandler cuando OpenTelemetry está habilitado. #45456 (Frank Chen).
  • No infiera fechas a partir de números de 8 dígitos. Podría provocar que se leyeran datos incorrectos. #45581 (Kruglov Pavel).
  • Correcciones para usar correctamente la opción odbc_bridge_use_connection_pooling. #45591 (Bharat Nallan).
  • Cuando se invoca el callback de la caché, es posible que esta se destruya. Para mantenerla segura, capturamos los miembros por valor. Esto también es seguro para la planificación de tareas, porque se desactivará antes de que se destruya el almacenamiento. Resuelve #45548. #45601 (Han Fei).
  • Se corrige la corrupción de datos cuando los códecs Delta o DoubleDelta se combinan con el códec Gorilla. #45615 (Robert Schulze).
  • Comprobar correctamente los tipos al usar el índice bloom filter de n-gramas para evitar lecturas no válidas. #45617 (Antonio Andelic).
  • Se han reportado un par de fallos de segmentación relacionados con c-ares. Se introdujeron en mis pull requests anteriores. Los he corregido con la ayuda de Alexander Tokmakov. #45629 (Arthur Passos).
  • Corregir la descripción de la clave cuando se encuentren claves primarias duplicadas. Esto puede ocurrir en las proyecciones. Consulte #45590 para más detalles. #45686 (Amos Bird).
  • Establece el método y el nivel de compresión para las copias de seguridad. Cierra #45690. #45737 (Pradeep Chhetri).
  • Debe usarse select_query_typed.limitByOffset en lugar de select_query_typed.limitOffset. #45817 (刘陶峰).
  • Al usar el analyzer experimental, las consultas como SELECT number FROM numbers(100) LIMIT 10 OFFSET 10; devuelven resultados incorrectos (resultado vacío para esta consulta SQL). Esto se debe a un paso OFFSET innecesario añadido por el planner. #45822 (刘陶峰).
  • Compatibilidad con versiones anteriores: permitir la conversión implícita con pérdida de información de UInt64 a IPv4, necesaria para la expresión “INSERT … VALUES …”. #45865 (Yakov Olkhovskiy).
  • Corrección del parser de IPv6 para direcciones IPv4 mixtas sin el primer octeto (como ::.1.2.3). #45871 (Yakov Olkhovskiy).
  • Añade la columna query_kind a la tabla system.processes y a la consulta SHOW PROCESSLIST. Elimina el código duplicado. Esto corrige un error: el parámetro de configuración global max_concurrent_select_queries no se aplicaba a las consultas con cadenas INTERSECT o EXCEPT. #45872 (Alexey Milovidov).
  • Se corrigió un fallo en la función stochasticLinearRegression que provocaba un cierre inesperado. Detectado por WingFuzz. #45985 (Nikolai Kochetov).
  • Se corrige un fallo en las consultas SELECT con los modificadores INTERSECT y EXCEPT que leen datos de tablas con columnas dispersas activadas (controlado por la configuración ratio_of_defaults_for_sparse_serialization). #45987 (Anton Popov).
  • Corrige la optimización de lectura en orden para la ordenación DESC con FINAL; cierra #45815. #46009 (Vladimir C).
  • Se corrige la lectura de columnas anidadas inexistentes de varios niveles en partes compactas. #46045 (Azat Khuzhin).
  • Se corrigió la columna elapsed en system.processes (error de 10x). #46047 (Azat Khuzhin).
  • Corrección de seguimiento para reemplazar los tipos de dominio IP (IPv4, IPv6) por tipos nativos https://github.com/ClickHouse/ClickHouse/pull/43221. #46087 (Yakov Olkhovskiy).
  • Se corrige la sustitución de variables de entorno en la configuración cuando un parámetro ya tiene un valor asignado. Cierra #46131. Cierra #9547. #46144 (pufit).
  • Corrige el pushdown incorrecto de predicados con grouping sets. Cierra #45947. #46151 (flynn).
  • Corrige un posible error de bloqueo del pipeline en fulls_sorting_join con claves constantes. #46175 (Vladimir C).
  • No reescriba nunca las funciones de tupla como literales al formatear para evitar resultados incorrectos. #46232 (Salvatore Mesoraca).
  • Corrige un posible error por acceso fuera de los límites al leer LowCardinality(Nullable) en formato Arrow. #46270 (Kruglov Pavel).
  • Se corrigen los fallos de las consultas SYSTEM UNFREEZE con la excepción CANNOT_PARSE_INPUT_ASSERTION_FAILED. #46325 (Aleksei Filatov).
  • Corrige un posible fallo causado por un desbordamiento de enteros al deserializar el estado de agregación de una función que almacena HashTable. #46349 (Nikolai Kochetov).
  • Se corrige un posible LOGICAL_ERROR en las inserciones asíncronas con datos no válidos enviados en formato VALUES. #46350 (Anton Popov).
  • Se corrigió un LOGICAL_ERROR al intentar ejecutar ALTER ... MOVE PART ... TO TABLE. En realidad, este tipo de consulta nunca estuvo admitido. #46359 (Alexander Tokmakov).
  • Corrige la inferencia de esquema de s3Cluster en operaciones distributed insert select en paralelo cuando parallel_distributed_insert_select está habilitado. #46381 (Kruglov Pavel).
  • Se corrigen consultas como ALTER TABLE ... UPDATE nested.arr1 = nested.arr2 ..., donde arr1 y arr2 son campos de la misma columna Nested. #46387 (Anton Popov).
  • Es posible que el planificador no pueda programar una tarea. Si esto ocurre, debe abortarse por completo el MulityPartUpload y UploadHelper debe esperar a las tareas ya programadas. #46451 (Dmitry Novik).
  • Corrige PREWHERE para Merge con diferentes tipos predeterminados (corrige algunos NOT_FOUND_COLUMN_IN_BLOCK cuando el tipo predeterminado de la columna es distinto; también permite PREWHERE cuando el tipo de la columna es el mismo en todas las tablas y lo prohíbe solo si es distinto). #46454 (Azat Khuzhin).
  • Se corrige un fallo que podía producirse cuando se usan valores constantes en ORDER BY. Corrige #46466. #46493 (Nikolai Kochetov).
  • No se generará ninguna excepción si la configuración disk se especificó a nivel de consulta, pero storage_policy se especificó en la sección Settings de configuración de MergeTree. disk sobrescribirá la configuración del archivo de configuración. #46533 (Kseniia Sumarokova).
  • Se corrige el procesamiento no válido del argumento constante LowCardinality en la función arrayMap. Este error podía provocar un segfault en la compilación release y el error lógico Bad cast en una compilación de depuración. #46569 (Alexey Milovidov).
  • soluciona #46557. #46611 (Alexander Gololobov).
  • Se corrigen los reinicios infinitos de la unidad systemd de clickhouse-server si el servidor no puede iniciarse en 1 min 30 s (se desactiva la lógica de tiempo de espera al iniciar clickhouse-server desde el servicio systemd). #46613 (Azat Khuzhin).
  • Los búferes de memoria asignados durante las inserciones asíncronas se liberaban en el contexto global, y los contadores de MemoryTracker para el usuario y la consulta correspondientes no se actualizaban correctamente. Eso provocaba falsas excepciones de OOM. #46622 (Dmitry Novik).
  • Actualizado para no borrar on_expression de table_join, ya que se usa en futuras ejecuciones de analyze; resuelve #45185. #46487 (SmitaRKulkarni).

Versión de ClickHouse 23.1, 2023-01-26. Presentación, Vídeo

Versión de ClickHouse 23.1

Notas de actualización

  • La consulta SYSTEM RESTART DISK pasa a no tener efecto. #44647 (alesapin).
  • La opción PREALLOCATE para los diccionarios HASHED/SPARSE_HASHED pasa a no tener efecto. #45388 (Azat Khuzhin). Ya no aporta ventajas significativas.
  • Se prohíbe el códec Gorilla en columnas que no sean de tipo Float32 o Float64. #45252 (Robert Schulze). No tenía sentido y provocaba inconsistencias.
  • Las inserciones con cuórum paralelas podrían funcionar incorrectamente con tablas *MergeTree creadas con la sintaxis obsoleta. Por lo tanto, el soporte para las inserciones con cuórum paralelas se desactiva por completo para esas tablas. Esto no afecta a las tablas creadas con la nueva sintaxis. #45430 (Alexander Tokmakov).
  • Utilice la solicitud GetObjectAttributes en lugar de la solicitud HeadObject para obtener el tamaño de un objeto en AWS S3. Este cambio corrige, por ejemplo, el manejo de endpoints sin regiones explícitas tras actualizar el AWS SDK. #45288 (Vitaly Baranov). Se ha probado con AWS S3 y Minio, pero tenga en cuenta que varios servicios compatibles con S3 (GCS, R2, B2) pueden presentar incompatibilidades sutiles. Este cambio también puede requerir que ajuste la ACL para permitir la solicitud GetObjectAttributes.
  • Se prohíben las rutas en los nombres de zonas horarias. Por ejemplo, no se permite un nombre de zona horaria como /usr/share/zoneinfo/Asia/Aden; debe usarse el nombre de la base de datos de zonas horarias de IANA, como Asia/Aden. #44225 (Kruglov Pavel).
  • Se prohíben las consultas que combinan equijoin y expresiones constantes (p. ej., JOIN ON t1.x = t2.x AND 1 = 1) debido a resultados incorrectos. #44016 (Vladimir C).

Nueva funcionalidad

  • Fuente de diccionario para extraer claves recorriendo el árbol de expresiones regulares. Se puede usar para analizar User-Agent. #40878 (Vage Ogannisian). #43858 (Han Fei).
  • Se añadió la funcionalidad de vistas parametrizadas; ahora es posible especificar parámetros de consulta para el motor de tabla View. Resuelve #40907. #41687 (SmitaRKulkarni).
  • Se añaden las funciones quantileInterpolatedWeighted/quantilesInterpolatedWeighted. #38252 (Bharat Nallan).
  • Soporte de ARRAY JOIN para el tipo Map, como la función “explode” de Spark. #43239 (李扬).
  • Admite literales de cadena binarios y hexadecimales estándar de SQL. #43785 (Mo Xuan).
  • Permite formatear DateTime con el estilo de Joda-Time. Consulte la documentación de Joda-Time. #43818 (李扬).
  • Se implementó un formateador de fracciones de segundo (%f) para formatDateTime. #44060 (ltrk2). #44497 (Alexander Gololobov).
  • Se agregó la función age para calcular la diferencia entre dos fechas o entre fechas con valores de hora, expresada como el número de unidades completas. Cierra #41115. #44421 (Robert Schulze).
  • Se agrega la fuente Null para diccionarios. Cierra #44240. #44502 (mayamika).
  • Se permite configurar la clase de almacenamiento de S3 con la opción de configuración s3_storage_class. Por ejemplo, <s3_storage_class>STANDARD/INTELLIGENT_TIERING</s3_storage_class> Cierra #44443. #44707 (chen).
  • Inserta valores predeterminados cuando faltan elementos en un objeto JSON al analizar una tupla con nombre. Se añade la configuración input_format_json_defaults_for_missing_elements_in_named_tuple, que controla este comportamiento. Cierra #45142#issuecomment-1380153217. #45231 (Kruglov Pavel).
  • Registra el tiempo de arranque del servidor en ProfileEvents (ServerStartupMilliseconds). Resuelve #43188. #45250 (SmitaRKulkarni).
  • Refactorización y mejoras de los motores de streaming Kafka/RabbitMQ/NATS, además de compatibilidad con todos los formatos, junto con una pequeña refactorización de los formatos: - Se corrige la producción de mensajes en formatos basados en filas con sufijos/prefijos. Ahora cada mensaje se formatea por completo con todos los delimitadores y puede volver a procesarse con el formato de entrada. - Se añade compatibilidad con formatos basados en bloques como Native, Parquet, ORC, etc. Cada bloque se formatea como un mensaje independiente. El número de filas de un mensaje depende del tamaño del bloque, por lo que puede controlarse mediante la opción max_block_size. - Se añaden nuevos ajustes del motor kafka_max_rows_per_message/rabbitmq_max_rows_per_message/nats_max_rows_per_message. Controlan el número de filas formateadas en un mensaje en los formatos basados en filas. Valor predeterminado: 1. - Se corrige el alto consumo de memoria en el table engine de NATS. - Se añade compatibilidad con datos binarios arbitrarios en el productor de NATS (anteriormente solo funcionaba con cadenas que contenían \0 al final) - Se añaden a la documentación los ajustes de motor de Kafka/RabbitMQ/NATS que faltaban. - Se refactorizan la producción y el consumo en Kafka/RabbitMQ/NATS, separándolos de la semántica de WriteBuffers/ReadBuffers. - Se refactorizan los formatos de salida: se eliminan los callbacks por fila usados en Kafka/RabbitMQ/NATS (ahora ya no se usan allí), se permite usar IRowOutputFormat directamente, se aclaran los delimitadores de fin de fila y entre filas, y se hace posible restablecer el formato de salida para volver a formatear desde el principio - Se añade una implementación adecuada en la función formatRow (bonus tras la refactorización de formatos). #42777 (Kruglov Pavel).
  • Compatibilidad con la lectura y escritura de tablas Nested como List de Struct en formato CapnProto. Lectura y escritura de Decimal32/64 como Int32/64. Cierra #43319. #43379 (Kruglov Pavel).
  • Se añadió una columna message_format_string a system.text_log. La columna contiene un patrón utilizado para dar formato al mensaje. #44543 (Alexander Tokmakov). Esto permite realizar varios análisis sobre los logs de ClickHouse.
  • Intentar autodetectar encabezados con nombres de columna (y, posiblemente, tipos) para los formatos de entrada CSV/TSV/CustomSeparated. Añadir las opciones de configuración input_format_tsv/csv/custom_detect_header que habilitan este comportamiento (habilitadas de forma predeterminada). Cierra #44640. #44953 (Kruglov Pavel).

Funcionalidad experimental

  • Se añadió un índice invertido experimental como nuevo tipo de índice secundario para búsquedas de texto eficientes. #38667 (larryluogit).
  • Se añadió una caché experimental de resultados de consulta. #43797 (Robert Schulze).
  • Se añadió un subsistema de planificación extensible y configurable para solicitudes de IO (aún no integrado con el propio código de IO). #41840 (Sergei Trifonov). Esta funcionalidad no hace absolutamente nada; disfrútala.
  • Se añadió SYSTEM DROP DATABASE REPLICA, que elimina los metadatos de una réplica caída de una base de datos Replicated. Resuelve #41794. #42807 (Alexander Tokmakov).

Mejora del rendimiento

  • No cargar las partes inactivas al iniciar las tablas MergeTree. #42181 (Anton Popov).
  • Se mejoró la latencia de lectura desde el almacenamiento S3 y la función de tabla s3 cuando hay una gran cantidad de archivos pequeños. Ahora las opciones remote_filesystem_read_method y remote_filesystem_read_prefetch surten efecto al leer desde el almacenamiento S3. #43726 (Anton Popov).
  • Optimización de la lectura de campos de struct en archivos Parquet/ORC. Solo se cargan los campos necesarios. #44484 (lgbo).
  • El algoritmo de agregación de dos niveles se deshabilitó por error para las consultas realizadas mediante la interfaz HTTP. Se volvió a habilitar, lo que supone una gran mejora del rendimiento. #45450 (Nikolai Kochetov).
  • Se añadió soporte para mmap en StorageFile, lo que debería mejorar el rendimiento de clickhouse-local. #43927 (pufit).
  • Se añadió compatibilidad con la segmentación en HashedDictionary para permitir la carga paralela (escalado casi lineal en función del número de segmentos). #40003 (Azat Khuzhin).
  • Acelerar el análisis sintáctico de consultas. #42284 (Raúl Marín).
  • Se reemplaza siempre la cadena OR expr = x1 OR ... OR expr = xN por expr IN (x1, ..., xN) cuando expr es una columna LowCardinality. En este caso, se ignora la configuración optimize_min_equality_disjunction_chain_length. #42889 (Guo Wangyang).
  • Mejora ligeramente el rendimiento al optimizar el código relacionado con ThreadStatus. #43586 (Zhiguo Zhou).
  • Se optimiza la evaluación de la lógica ternaria por columnas mediante autovectorización. En la prueba de rendimiento de este microbenchmark, hemos observado una mejora de rendimiento de hasta 21x en el dispositivo ICX (CPU Intel Xeon Platinum 8380). #43669 (Zhiguo Zhou).
  • Evita, en la medida de lo posible, adquirir bloqueos de lectura en la tabla system.tables. #43840 (Raúl Marín).
  • Optimización de ThreadPool. Los experimentos de rendimiento de SSB (Star Schema Benchmark) en el dispositivo ICX (CPU Intel Xeon Platinum 8380, 80 núcleos, 160 threads) muestran que este cambio podría reducir eficazmente la contención de bloqueos en ThreadPoolImpl::mutex en un 75 %, aumentando la utilización de la CPU y mejorando el rendimiento general en un 2,4 %. #44308 (Zhiguo Zhou).
  • Ahora, la optimización para predecir el tamaño de la tabla hash se aplica solo si el tamaño en caché de la tabla hash es lo suficientemente grande (los umbrales se determinaron empíricamente y se fijaron en el código). #44455 (Nikita Taranov).
  • Pequeña mejora del rendimiento en la lectura asíncrona desde sistemas de archivos remotos. #44868 (Kseniia Sumarokova).
  • Se añade una vía rápida para: - col like '%%'; - col like '%'; - col not like '%'; - col not like '%'; - match(col, '.*'). #45244 (李扬).
  • Ligera mejora de la optimización del caso habitual en el filtrado (cláusula WHERE). #45289 (Nikita Taranov).
  • Se proporciona información sobre monotonicidad para toUnixTimestamp64* a fin de permitir más optimizaciones algebraicas en el análisis de índices. #44116 (Nikita Taranov).
  • Permite que la configuración de los datos temporales para el procesamiento de consultas (volcado a disco) coopere con la caché del sistema de archivos (ocupando espacio del disco de caché) #43972 (Vladimir C). Esto mejora principalmente ClickHouse Cloud, pero también puede usarse en implementaciones autogestionadas, si sabes lo que haces.
  • Hacer que la tabla system.replicas obtenga en paralelo los estados de las réplicas. Cierra #43918. #43998 (Nikolay Degterinsky).
  • Se optimizó el consumo de memoria durante la copia de seguridad a S3: ahora los archivos se copiarán directamente a S3 sin usar WriteBufferFromS3 (que podía consumir mucha memoria). #45188 (Vitaly Baranov).
  • Se agrega una caché para los ID de bloques asíncronos. Esto reducirá el número de solicitudes a ZooKeeper al habilitar la deduplicación de async inserts. #45106 (Han Fei).

Mejora

  • Usar la estructura de la tabla de inserción en generateRandom sin argumentos. #45239 (Kruglov Pavel).
  • Permite convertir implícitamente números de coma flotante almacenados en campos de cadena de JSON a enteros en las funciones JSONExtract. P. ej., JSONExtract('{"a": "1000.111"}', 'a', 'UInt64') -> 1000; antes devolvía 0. #45432 (Anton Popov).
  • Se añadieron los campos supports_parallel_parsing y supports_parallel_formatting a la tabla system.formats para facilitar la introspección. #45499 (Anton Popov).
  • Mejora de la lectura de campos CSV en formato CustomSeparated/Template. Cierra #42352 Cierra #39620. #43332 (Kruglov Pavel).
  • Unificar las mediciones del tiempo de ejecución de las consultas. #43455 (Raúl Marín).
  • Mejora el uso automático de la estructura de la tabla de inserción en las funciones de tabla file/hdfs/s3 cuando una consulta select incluye columnas virtuales; esto corrige el posible error Block structure mismatch o number of columns mismatch. #43695 (Kruglov Pavel).
  • Se añade compatibilidad con argumentos con signo en la función range. Corrige #43333. #43733 (sanyu).
  • Elimina la ordenación redundante, por ejemplo, las cláusulas ORDER BY relacionadas con la ordenación en subconsultas. Implementado sobre el plan de consulta. Realiza una optimización similar a optimize_duplicate_order_by_and_distinct con respecto a las cláusulas ORDER BY, pero más genérica, ya que se aplica a cualquier paso de ordenación redundante (no solo a los provocados por la cláusula ORDER BY) y a subconsultas de cualquier profundidad. Relacionado con #42648. #43905 (Igor Nikonov).
  • Se agregó la posibilidad de deshabilitar la deduplicación de archivos para BACKUP (para backups sin deduplicación, se puede usar ATTACH en lugar de un RESTORE completo). Por ejemplo, BACKUP foo TO S3(...) SETTINGS deduplicate_files=0 (valor predeterminado: deduplicate_files=1). #43947 (Azat Khuzhin).
  • Se refactoriza y mejora la inferencia de esquemas para formatos de texto. Se añade la nueva opción schema_inference_make_columns_nullable, que controla si los tipos de resultado pasan a ser Nullable (habilitada de forma predeterminada);. #44019 (Kruglov Pavel).
  • Mejor soporte para el protocolo PROXYv1. #44135 (Yakov Olkhovskiy).
  • Agregar información sobre la última comprobación de partes realizada por los hilos de limpieza en la tabla system.parts. #44244 (Dmitry Novik).
  • Deshabilitar las funciones de tabla en modo readonly para inserciones. #44290 (SmitaRKulkarni).
  • Añade la configuración simultaneous_parts_removal_limit para limitar el número de partes procesadas en una iteración de CleanupThread. #44461 (Dmitry Novik).
  • No se inicializa ReadBufferFromS3 cuando en una consulta solo se necesitan columnas virtuales. Esto puede ayudar con #44246. #44493 (chen).
  • Evita sugerencias duplicadas de nombres de columna. Cierra #44130. #44519 (Joanna Hulboj).
  • Permitir la sustitución de macros en el endpoint de los discos. Resuelve #40951. #44533 (SmitaRKulkarni).
  • Se mejora la inferencia de esquemas cuando input_format_json_read_object_as_string está habilitado. #44546 (Kruglov Pavel).
  • Se agregó una configuración a nivel de usuario database_replicated_allow_replicated_engine_arguments que permite impedir la creación de tablas ReplicatedMergeTree con argumentos en DatabaseReplicated. #44566 (alesapin).
  • Evita que los usuarios especifiquen por error el valor cero (no válido) para index_granularity. Esto corrige #44536. #44578 (Alexey Milovidov).
  • Se añadió la posibilidad de especificar la ruta del archivo keytab del servicio en el parámetro keytab de la sección kerberos de config.xml. #44594 (Roman Vasin).
  • Usar la parte de la consulta ya escrita para la búsqueda difusa (se pasa a la biblioteca skim, escrita en Rust y enlazada estáticamente con ClickHouse). #44600 (Azat Khuzhin).
  • Se habilita input_format_json_read_objects_as_strings de forma predeterminada para poder leer objetos JSON anidados mientras el tipo JSON Object sigue siendo experimental. #44657 (Kruglov Pavel).
  • Mejora en la deduplicación de inserts asíncronos: cuando los usuarios realizan inserts asíncronos duplicados, debemos deduplicarlos en memoria antes de consultar Keeper. #44682 (Han Fei).
  • El formato Avro de entrada/salida interpretará el tipo bool como el tipo bool de ClickHouse. #44684 (Kruglov Pavel).
  • Soporte para el tipo Bool en Arrow/Parquet/ORC. Cierra #43970. #44698 (Kruglov Pavel).
  • No haga un análisis codicioso más allá de las comillas al leer UUIDs; esto puede hacer que datos incorrectos se analicen correctamente por error. #44686 (Raúl Marín).
  • Inferir UInt64 cuando se produzca un desbordamiento de Int64 y corregir algunas transformaciones en la inferencia de esquema. #44696 (Kruglov Pavel).
  • Anteriormente, la resolución de dependencias dentro de la base de datos Replicated se hacía de forma improvisada, y ahora se hace correctamente mediante un grafo explícito. #44697 (Nikita Mikhaylov).
  • Se corrige un problema por el que output_format_pretty_row_numbers no conservaba el contador entre bloques. Cierra #44815. #44832 (flynn).
  • No reportar errores en system.errors cuando las partes se fusionan de forma concurrente con el proceso de limpieza en segundo plano. #44874 (Raúl Marín).
  • Optimizar y corregir las métricas para INSERT asíncrono de Distributed. #44922 (Azat Khuzhin).
  • Se añadieron ajustes para impedir copias de seguridad y restauraciones concurrentes, lo que resuelve #43891 Implementación: * Se añadieron ajustes a nivel de servidor para impedir copias de seguridad y restauraciones concurrentes, que se leen y se establecen cuando se crea BackupWorker en Context. * Los ajustes se establecen en true de forma predeterminada. * Antes de iniciar una copia de seguridad o una restauración, se añadió una comprobación para verificar si hay otras copias de seguridad/restauraciones en ejecución. Para las solicitudes internas, se comprueba si provienen del propio nodo mediante backup_uuid. #45072 (SmitaRKulkarni).
  • Se añade el parámetro de configuración <storage_policy> para los logs del sistema. #45320 (Stig Bakken).

Mejoras de compilación/pruebas/empaquetado

  • Se enlaza estáticamente con la biblioteca skim (está escrita en Rust) para la búsqueda difusa en el historial local de clickhouse client. #44239 (Azat Khuzhin).
  • Se eliminó la compatibilidad con el enlazado compartido debido a Rust. En realidad, Rust es solo una excusa para esta eliminación, y queríamos quitarlo de todos modos. #44828 (Alexey Milovidov).
  • Se eliminó la dependencia de la herramienta adduser de los paquetes, porque no la usamos. Esto corrige #44934. #45011 (Alexey Milovidov).
  • La biblioteca SQLite se actualizó a la última versión. Se utiliza para los motores de integración de base de datos y de tabla de SQLite. Además, se corrigió un informe de TSan con un falso positivo. Esto cierra #45027. #45031 (Alexey Milovidov).
  • Cambios en CRC-32 para abordar el problema de colisión de WeakHash en PowerPC. #45144 (MeenaRenganathan22).
  • Se actualizaron los submódulos aws-c* #43020 (Vitaly Baranov).
  • Fusionar automáticamente los backport PR con CI en verde y los PR aprobados con CI en verde #41110 (Mikhail f. Shiryaev).
  • Se lanzó un sitio web para consultar el estado de la CI de ClickHouse. Fuente.

Corrección de errores

  • Sustituye los tipos de dominio IP (IPv4, IPv6) por tipos nativos. #43221 (Yakov Olkhovskiy). Esto corrige automáticamente algunas implementaciones faltantes en el código.
  • Se corrige el proceso de copia de seguridad cuando las mutaciones se cancelan durante dicho proceso. #45351 (Vitaly Baranov).
  • Se corrige el mensaje de excepción Invalid number of rows in Chunk. #41404. #42126 (Alexander Gololobov).
  • Corrige un posible uso de un valor sin inicializar después de ejecutar expresiones tras la ordenación. Cierra #43386 #43635 (Kruglov Pavel).
  • Mejor manejo de NULL en los combinadores de agregación; se corrige un posible segfault/error lógico al usar una optimización poco conocida, optimize_rewrite_sum_if_to_count_if. Cierra #43758. #43813 (Kruglov Pavel).
  • Se corrigen las restricciones de configuración de las consultas CREATE USER/ROLE. #43993 (Nikolay Degterinsky).
  • Se corrigió un error relacionado con un valor predeterminado que no se podía analizar para la columna EPHEMERAL en los metadatos de la tabla. #44026 (Yakov Olkhovskiy).
  • Se corrige el análisis de una versión no válida en la configuración de compatibilidad. #44224 (Kruglov Pavel).
  • Hacer que la resta de intervalos en datetime sea coherente con la suma. #44241 (ltrk2).
  • Eliminar los límites del tamaño máximo del resultado de una vista. #44261 (lizhuoyu5).
  • Se corrige un posible error lógico en la caché si do_not_evict_index_and_mrk_files=1. Cierra #42142. #44268 (Kseniia Sumarokova).
  • Se corrige una posible interrupción prematura de la escritura en la caché write-through (el almacenamiento en caché podía detenerse por una suposición errónea cuando no debía). #44289 (Kseniia Sumarokova).
  • Se corrige un posible fallo cuando la función case IN con argumentos constantes se utilizaba como argumento constante junto con LowCardinality. Corrige #44221. #44346 (Nikolai Kochetov).
  • Se corrige la compatibilidad con parámetros complejos (como arrays) en las funciones de agregación paramétricas. Esto cierra #30975. La función de agregación sumMapFiltered no se podía usar en consultas distribuidas antes de este cambio. #44358 (Alexey Milovidov).
  • Se corrigió la lectura de ObjectId en la inferencia de esquema de BSON. #44382 (Kruglov Pavel).
  • Se corrige una condición de carrera que puede provocar la eliminación prematura de partes temporales antes de que termine la fusión en ReplicatedMergeTree. Este problema podía provocar errores como No such file or directory: xxx. Corrige #43983. #44383 (alesapin).
  • Algunas consultas SYSTEM ... ON CLUSTER no válidas funcionaban de forma inesperada si no se especificaba un nombre de clúster. Se ha corregido; ahora las consultas no válidas lanzan SYNTAX_ERROR, como debe ser. Corrige #44264. #44387 (Alexander Tokmakov).
  • Se corrigió la lectura del tipo Map en el formato ORC. #44400 (Kruglov Pavel).
  • Se corrige la lectura de columnas que no están presentes en los datos de entrada en los formatos Parquet/ORC. Anteriormente, esto podía causar el error INCORRECT_NUMBER_OF_COLUMNS. Cierra #44333. #44405 (Kruglov Pavel).
  • Anteriormente, la función bar usaba el mismo carácter ’▋’ (U+258B “bloque izquierdo de cinco octavos”) para mostrar tanto barras de 5/8 como de 6/8. Este cambio corrige ese comportamiento al usar ’▊’ (U+258A “bloque izquierdo de tres cuartos”) para mostrar la barra de 6/8. #44410 (Alexander Gololobov).
  • Colocar la configuración del perfil después de las restricciones de configuración del perfil en el archivo de configuración hacía que dichas restricciones no surtieran efecto. #44411 (Konstantin Bogdanov).
  • Se corrige SYNTAX_ERROR al ejecutar consultas EXPLAIN AST INSERT con datos. Cierra #44207. #44413 (save-my-heart).
  • Se corrigió la lectura de valores bool con CRLF en formato CSV. Cierra #44401. #44442 (Kruglov Pavel).
  • No se deben ejecutar and/or/if/multiIf en un diccionario LowCardinality, por lo que el tipo de resultado no puede ser LowCardinality. En algunos casos, esto podía provocar el error Illegal column ColumnLowCardinality. Corrige #43603. #44469 (Kruglov Pavel).
  • Se corrigen las mutaciones con la configuración max_streams_for_merge_tree_reading. #44472 (Anton Popov).
  • Se corrige una posible desreferenciación de puntero nulo con GROUPING SETS en ASTSelectQuery::formatImpl (#43049). #44479 (Robert Schulze).
  • Validar los tipos en los argumentos de la función de tabla, en los argumentos de la función CAST y en la inferencia de esquema de JSONAsObject según la configuración. #44501 (Kruglov Pavel).
  • Se corrige la función IN con LowCardinality y una columna constante; se cierra #44503. #44506 (Duc Canh Le).
  • Se corrigió un error en la normalización de una expresión DEFAULT en la sentencia CREATE TABLE. El segundo argumento de la función in (o el argumento derecho del operador IN) podía sustituirse por el resultado de su evaluación durante la ejecución de la consulta CREATE. Corrige #44496. #44547 (Alexander Tokmakov).
  • Las proyecciones no funcionan cuando se usan WITH ROLLUP, WITH CUBE y WITH TOTALS. En versiones anteriores, una consulta producía una excepción en lugar de omitir el uso de proyecciones. Se cierra #44614. Se cierra #42772. #44615 (Alexey Milovidov).
  • Los bloques asíncronos no se limpiaron porque la función get all blocks sorted by time no recuperaba los bloques asíncronos. #44651 (Han Fei).
  • Se corrige LOGICAL_ERROR The top step of the right pipeline should be ExpressionStep al usar JOIN con subconsulta, UNION y TOTALS. Corrige #43687. #44673 (Nikolai Kochetov).
  • Se evitó la excepción std::out_of_range en el motor de tabla Executable. #44681 (Kruglov Pavel).
  • No aplicar optimize_syntax_fuse_functions a los cuantiles en el AST; cierra #44712. #44713 (Vladimir C).
  • Soluciona un error de tipo incorrecto en la tabla Merge y en PREWHERE, cierra #43324. #44716 (Vladimir C).
  • Corrige un posible fallo durante el cierre (al destruir TraceCollector). Soluciona #44757. #44758 (Nikolai Kochetov).
  • Corrige un posible fallo en el procesamiento distribuido de consultas. El fallo podía producirse si una consulta con totales o extremos devolvía un resultado vacío y había tipos incompatibles entre las tablas Distributed y las tablas locales. Corrige #44738. #44760 (Nikolai Kochetov).
  • Corrige fsync en las operaciones de fetch (min_compressed_bytes_to_fsync_after_fetch)/archivos pequeños (ttl.txt, columns.txt) en las mutaciones (min_rows_to_fsync_after_merge/min_compressed_bytes_to_fsync_after_merge). #44781 (Azat Khuzhin).
  • Podía producirse una condición de carrera poco frecuente al consultar las tablas system.parts o system.parts_columns mientras se movían partes entre discos. Introducido en #41145. #44809 (Alexey Milovidov).
  • Corrige el error Context has expired que podía producirse con la optimización de proyecciones habilitada. Puede reproducirse en consultas con funciones específicas, como dictHas/dictGet, que usan el contexto en tiempo de ejecución. Corrige #44844. #44850 (Nikolai Kochetov).
  • Se corrigió el error Cannot read all data, que podía producirse al leer el diccionario LowCardinality desde remote fs. Corrige #44709. #44875 (Nikolai Kochetov).
  • Ignorar los casos en que no se puedan leer los sensores de monitorización de hardware, en lugar de mostrar un mensaje completo de excepción en los logs. #44895 (Raúl Marín).
  • Usa el valor de max_delay_to_insert si el tiempo de retraso calculado para INSERT supera el valor configurado. Relacionado con #44902. #44916 (Igor Nikonov).
  • Corrige el error Different order of columns in UNION subquery en consultas con UNION. Corrige #44866. #44920 (Nikolai Kochetov).
  • El retraso de INSERT puede calcularse incorrectamente, lo que puede hacer que siempre se use el ajuste max_delay_to_insert como retraso en lugar del valor correcto. Se utiliza la fórmula simple max_delay_to_insert * (parts_over_threshold/max_allowed_parts_over_threshold); es decir, el retraso aumenta de forma proporcional a las partes que superan el umbral. Cierra #44902. #44954 (Igor Nikonov).
  • Se corrige el error de ALTER TABLE TTL cuando una parte wide tiene la máscara de eliminación ligera. #44959 (Mingliang Pan).
  • Corrección adicional para reemplazar los tipos IP de dominio (IPv4, IPv6) por tipos nativos #43221. #45024 (Yakov Olkhovskiy).
  • Corrección de seguimiento para reemplazar los tipos IP de dominio (IPv4, IPv6) por tipos nativos https://github.com/ClickHouse/ClickHouse/pull/43221. #45043 (Yakov Olkhovskiy).
  • Se podía producir un desbordamiento de búfer en el analizador sintáctico. Se detectó mediante un fuzzer. #45047 (Alexey Milovidov).
  • Soluciona un posible error cannot-read-all-data en el almacenamiento FileLog. Cierra #45051, #38257. #45057 (Kseniia Sumarokova).
  • La agregación con uso eficiente de memoria (ajuste distributed_aggregation_memory_efficient) se desactiva cuando hay grouping sets en la consulta. #45058 (Nikita Taranov).
  • Se corrige el diccionario RANGE_HASHED para que las columnas de rango se cuenten como parte de la clave primaria durante las actualizaciones cuando se especifica update_field. Cierra #44588. #45061 (Maksim Kita).
  • Soluciona el error Cannot capture column en el argumento capturado LowCardinality de una lambda anidada. Soluciona #45028. #45065 (Nikolai Kochetov).
  • Se corrige el resultado incorrecto de la consulta de additional_table_filters (no se aplicaba el filtro adicional) cuando se usa la proyección minmax/count. #45133 (Nikolai Kochetov).
  • Se corrigió un error en la función histogram, que aceptaba valores negativos. #45147 (simpleton).
  • Corrige la nulabilidad errónea de la columna en StoreageJoin, cierra #44940. #45184 (Vladimir C).
  • Corregida la recarga de la configuración de background_fetches_pool_size (permite aumentarla en tiempo de ejecución). #45189 (Raúl Marín).
  • Procesa correctamente las consultas SELECT en motores KV (p. ej., KeeperMap, EmbeddedRocksDB) al usar IN en la clave con una subconsulta que produce un tipo distinto. #45215 (Antonio Andelic).
  • Corrige un error lógico en SEMI JOIN y join_use_nulls en algunos casos, cierra #45163 y #45209. #45230 (Vladimir C).
  • Se corrige un heap-use-after-free al leer desde S3. #45253 (Kruglov Pavel).
  • Corrige un error que se producía cuando el tipo Union de Avro es [‘null’, tipo Nested], cierra #45275. Corrige un error que infería incorrectamente el tipo bytes como Float. #45276 (flynn).
  • Lanzar una excepción adecuada cuando el PREWHERE explícito no pueda usarse con una tabla que utiliza el motor de almacenamiento Merge. #45319 (Antonio Andelic).
  • En Ubuntu sobre WSL1, el ClickHouse autoextraíble no puede descomprimirse debido a una inconsistencia: /proc/self/maps informa el inodo del archivo de 32 bits, mientras que stat informa el inodo de 64 bits. #45339 (Yakov Olkhovskiy).
  • Corrige una condición de carrera durante el arranque de la tabla Distributed (que podía hacer que el archivo de async INSERT se procesara varias veces). #45360 (Azat Khuzhin).
  • Se corrige un posible fallo al leer desde el almacenamiento S3 y la función de tabla s3 cuando ha fallado la solicitud ListObject. #45371 (Anton Popov).
  • Se corrige la excepción de SELECT ... FROM system.dictionaries cuando hay un diccionario con una estructura incorrecta (por ejemplo, un tipo incorrecto en la configuración XML). #45399 (Aleksei Filatov).
  • Se corrige la inferencia de esquema de s3Cluster cuando se usa la estructura de la tabla de inserción en las consultas INSERT INTO ... SELECT * FROM s3Cluster. #45422 (Kruglov Pavel).
  • Se corrige un error en el análisis de JSON/BSONEachRow a través de HTTP que podía hacer que se usaran valores predeterminados para algunas columnas en lugar de los valores de los datos. #45424 (Kruglov Pavel).
  • Se corrigió un error (Code: 632. DB::Exception: Unexpected data … after parsed IPv6 value …) en el análisis tipado de tipos de IP desde una fuente de texto. #45425 (Yakov Olkhovskiy).
  • cierra #45297 Añade una comprobación de expresiones regulares vacías. #45428 (Han Fei).
  • Corrección de un posible bloqueo de una consulta (probablemente distribuida). #45448 (Azat Khuzhin).
  • Corrige un posible interbloqueo con allow_asynchronous_read_from_io_pool_for_merge_tree habilitado en caso de que se produzca una excepción en ThreadPool::schedule. #45481 (Nikolai Kochetov).
  • Se corrige un posible problema de tabla en uso tras DETACH. #45493 (Azat Khuzhin).
  • Se corrige un fallo poco frecuente al cancelar una consulta cuando se había utilizado análisis sintáctico en paralelo durante su ejecución. #45498 (Anton Popov).
  • Corrige una condición de carrera entre la creación de una tabla Distributed y el INSERT sobre ella (podía provocar CANNOT_LINK durante el INSERT en la tabla). #45502 (Azat Khuzhin).
  • Añade el valor predeterminado correcto (SLRU) al getter de la política de caché. Cierra #45514. #45524 (Kseniia Sumarokova).
  • No se permite ARRAY JOIN en las mutaciones; cierra #42637 #44447 (SmitaRKulkarni).
  • Corrección de los asteriscos calificados con nombre de tabla con alias y transformador de columnas. Resuelve #44736. #44755 (SmitaRKulkarni).
Última modificación el 10 de junio de 2026