Tabla de contenidos
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 = 1oSET compatibility = '23.11'. Cierra #37286. #51858 (Alexey Milovidov). - La configuración de MergeTree
clean_deleted_rowsestá obsoleta y ya no tiene ningún efecto. La palabra claveCLEANUPparaOPTIMIZEno está permitida de forma predeterminada (puede habilitarse con la configuraciónallow_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áusulaON, 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 BYahora admite especificarALL, lo que significa que ClickHouse ordena por todas las columnas de la cláusulaSELECT. 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
/binaryabre 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
seriesPeriodDetectFFTpara 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:defaultyunion. 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(yCOMPLEX_KEY_HASHED_ARRAY) admiteSHARDS, de forma similar aHASHED. #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_BYTEScomo alias deformatReadableSize. #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
readonlyque puede usarse para indicar que un disco S3 es de solo lectura. Puede ser útil para crear una tabla en un disco de tipos3_plainy, 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/RESTOREy el comandoclickhouse-disks copy. #56744 (MikhailBurdukov). - Hash JOIN respeta la configuración
max_joined_block_size_rowsy no genera bloques grandes paraALL 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
hasAnyahora puede aprovechar los índices de omisión de texto completo. #57878 (Jpnock). - Se optimizaron la función
if(cond, then, else)(y su aliascond ? then : else) para usar evaluación sin bifurcaciones. #57885 (zhanglistar). - MergeTree determina automáticamente la configuración
do_not_merge_across_partitions_select_finalsi la expresión de la clave de partición contiene solo columnas de la expresión de clave primaria. #58218 (Maksim Kita). - Se aceleran
MINyMAXpara tipos nativos. #58231 (Raúl Marín). - Implementación de la política de caché
SLRUpara 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
15al valor de la configuraciónbackground_fetches_pool_size. - La configuración de nivel MergeTreereplicated_max_parallel_fetches_for_hostquedó obsoleta - Las configuraciones de nivel MergeTreereplicated_fetches_http_connection_timeout,replicated_fetches_http_send_timeoutyreplicated_fetches_http_receive_timeoutse trasladaron al nivel de servidor. - La configuraciónkeep_alive_timeoutse añadió a la lista de configuraciones de nivel de servidor. #57523 (Nikita Mikhaylov). - Hacer que las consultas a
system.filesystem_cacheconsuman 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_shardscomo una configuración para las tablasDistributed, 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 tiposEnum. Antes, el primer argumento de la función tenía que ser un valor de tipoStringoFixedString. Esto mejora la compatibilidad con herramientas de terceros como Tableau mediante la interfaz MySQL. #57277 (Serge Klochkov). - La función
formatahora admite tipos de argumentos arbitrarios (en lugar de solo argumentosStringyFixedString). Esto es importante para poder calcularSELECT format('The {0} to all questions is {1}', 'answer', 42). #57549 (Robert Schulze). - Permite usar la función
date_trunccon un primer argumento que no distingue entre mayúsculas y minúsculas. Ahora se admiten ambas variantes:SELECT date_trunc('day', now())ySELECT 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_dropymax_table_size_to_dropdurante 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_countdesystem.distribution_queue(en caso de quedistributed_directory_monitor_max_sleep_time_mssea > 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
arrayvacío. #57618 (Mike Kot). - Expone como métrica
ClickHouseErrorMetric_ALLel 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_zky elementos no vacíos con replace=1. #57628 (Azat Khuzhin). - Una función de tabla
fuzzJSONque 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 ajusteasync_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 conKILL QUERY. #57746 (Vitaly Baranov). - Prohíbe las consultas
CREATE TABLE ... AS SELECTpara los motores de tablaReplicateden la base de datos experimentalReplicated, 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_tracepara 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 esperarstorage_system_stack_trace_pipe_read_timeout_mscuando 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://ys3://) 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 --obfuscatereconocerá Settings, MergeTreeSettings y las zonas horarias, y conservará sus nombres sin cambios. #58179 (Alexey Milovidov).- Se añadió la función explícita
finalize()enZipArchiveWriter. Se simplificó el código excesivamente complejo deZipArchiveWriter. 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_marksenParallelReplicasReadingCoordinator#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_uncompressedasystem.part_log#58167 (Jordi Villar). - Añadido el nombre de la copia de seguridad base a las tablas
system.backupsysystem.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
selectde 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
Templatedurante 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_ndimsen 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_tracese 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_consumersporque contiene un error. #57822 (Azat Khuzhin). - Se corrige el soporte de claves LowCardinality en Merge JOIN. #57827 (vdimir).
- Una corrección de
InterpreterCreateQueryrelacionada con el bloque sample. #57855 (Maksim Kita). - Se ignoraba
addresses_expren 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 conUTF32Encoding#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
accurateCastOrNullparaDateTimefuera de rango #58139 (Andrey Zvonov). - Se corrigió un posible error
PARAMETER_OUT_OF_BOUNDdurante 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) ynamed_collection_control(gestión de named collection mediante consultas SQL) para el usuariodefault. Esto cierra #56482. #56619 (Alexey Milovidov). - Varias mejoras para
RESPECT NULLS/IGNORE NULLSen 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/%cde la funciónparseDateTimeahora pueden analizar horas/meses sin ceros a la izquierda; por ejemplo,select parseDateTime('2023-11-26 8:14', '%F %k:%i')ahora funciona. Establezcaparsedatetime_parse_without_leading_zeros = 0para restaurar el comportamiento anterior, que requería dos dígitos. La funciónformatDateTimeahora también puede imprimir horas/meses sin ceros a la izquierda. Esto se controla con la configuraciónformatdatetime_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
avgWeightedcon argumentos de tipoDecimal. Solución alternativa: convierta los argumentos aFloat64. Esto cierra #43928. Esto cierra #31768. Esto cierra #56435. Si ha usado esta función dentro de vistas materializadas o proyecciones con argumentosDecimal, póngase en contacto con support@clickhouse.com. Se corrigió un error en la función de agregaciónsumMapy 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óngroupArraySample: 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_databasespara 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 motoresOrdinary,AtomicyReplicated. 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 tablasystem.asynchronous_loaderpara 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_compressiondentro de la secciónzookeeper. 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 entrue, 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
hostnamea 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 aFROM_DAYSde MySQL. P. ej.,SELECT fromDaysSinceYearZero(739136)devuelve2023-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
Float16para su uso en archivos.npy. Cierra #56344. #56424 (Yarik Briukhovetskyi). - Se añadió la vista del sistema
information_schema.statisticspara 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 directoriouser_files. #56868 (Andrey Zvonov). - Se añade la columna virtual
_sizecon el tamaño del archivo en bytes a los motoress3/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_algorithmrespeta 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_queriesde 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 tablasystem.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 tablaMerge. #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
seeken 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 aresize. #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 comoselect 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
FileyHDFS. #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
BackupEntriesCollectoren 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 tablasCollapsingMergeTreeque limita el valor de la columnaSigna -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
fuzzJSONcon filas que contienen versiones alteradas de la cadena JSON de origen con variaciones aleatorias. #56490 (Julia Kartseva). - El engine
Mergefiltra 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 tablaMerge. #50209 (Ilya Golshtein). - Se añade la configuración
max_execution_time_leafpara limitar el tiempo de ejecución en el segmento de una consulta distribuida, ytimeout_overflow_mode_leafpara 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_sizeen 16 ybackground_schedule_pool_sizeen 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
\ry 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\no\n\r, por lo que\rdebe ir seguido de\n. Sin embargo, en algunas situaciones, los datos de entrada CSV pueden ser anómalos; por ejemplo, como se muestra arriba,\raparece 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_LISTen los formatos Apache Arrow. #56118 (edef). - Permitir la compactación manual de
EmbeddedRocksDBcon la consultaOPTIMIZE. #56225 (Azat Khuzhin). - Se añadió la posibilidad de especificar BlockBasedTableOptions para las tablas
EmbeddedRocksDB. #56264 (Azat Khuzhin). SHOW COLUMNSahora 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 estableceruse_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 ZooKeepersi el servidor se reiniciaba inmediatamente después deTRUNCATEoDROP PARTITION. #56282 (Alexander Tokmakov). - Se corrigió el manejo de las query strings no constantes en las funciones
formatQuery/formatQuerySingleLine. También se añadieron variantesOrNullde 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.replicasgeneran 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 asystem.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_failuresse 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 valoresfalseotrue) se marcó como obsoleta. Fue reemplazada por la configuraciónquery_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 nullen la cláusula JOIN ON. Solo para el analizador experimental. #56538 (vdimir). - La función
concatahora 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 deconcatde MySQL. Por ejemplo,SELECT concat('ab', 42)ahora devuelveab42. #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
MaterializedPostgreSQLexperimental. #53721 (takakawa). - Implementa la configuración a nivel de usuario
alter_move_to_space_execute_async, que permite ejecutar de forma asíncrona las consultasALTER TABLE ... MOVE PARTITION|PART TO DISK|VOLUME. El tamaño del pool para las ejecuciones en segundo plano se controla mediantebackground_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_bytesytotal_rowsen 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
concatahora puede llamarse con un solo argumento, por ejemplo,SELECT concat('abc'). Esto hace que su comportamiento sea más consistente con la implementación deconcatde 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_loga la configuración predeterminada. #57036 (Kseniia Sumarokova). - Cambiar el valor predeterminado de
wait_dictionaries_load_at_startupa true y usar esta configuración solo sidictionaries_lazy_loades false. #57133 (Vitaly Baranov). - Comprobar el tipo de origen del diccionario al crearlo, incluso si
dictionaries_lazy_loadestá 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
/dashboarddel 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_clientadmite 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_windowen 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-localyclickhouse-clientesté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óncoverageque devuelve un array de direcciones únicas del código encontradas desde el reinicio anterior de la cobertura; (2) la consultaSYSTEM 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_cacheen 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)
- Corregir el Analyzer experimental: la inserción a partir de SELECT con una subconsulta que hace referencia a la tabla de inserción debe procesar solo el bloque de inserción. #50857 (Yakov Olkhovskiy).
- Se corrigió un error en la función
str_to_map. #56423 (Arthur Passos). - Keeper
reconfig: añadir un timeout antes de ceder/asumir el liderazgo #53481 (Mike Kot). - Se corrige un encabezado incorrecto en grace hash join y en el pushdown de filtros #53922 (vdimir).
- Selección desde tablas del sistema cuando la tabla se basa en una función de tabla. #55540 (MikhailBurdukov).
- RFC: Corregir “No se encuentra la columna X en el flujo de origen” para consultas Distributed con LIMIT BY #55836 (Azat Khuzhin).
- Se corrigió ‘Cannot read from file:’ al ejecutar el cliente en segundo plano #55976 (Kruglov Pavel).
- Se corrige el cierre de clickhouse-local por una configuración incorrecta de send_logs_level #55994 (Kruglov Pavel).
- Corrección de un error en EXPLAIN AST con vista parametrizada #56004 (SmitaRKulkarni).
- Se corrige un cierre inesperado durante la carga de tablas al arrancar #56232 (Nikolay Degterinsky).
- Se corrigen los diccionarios de ClickHouse con una consulta explícita #56236 (Nikolay Degterinsky).
- Se corrigió un segfault en el manejador de señales de Keeper #56266 (Antonio Andelic).
- Se corrigió el resultado incompleto de la consulta para UNION en la función view(). #56274 (Nikolai Kochetov).
- Se corrige la inconsistencia de “cast(‘0’ as DateTime64(3))” y “cast(‘0’ as Nullable(DateTime64(3)))” #56286 (李扬).
- Se corrigió una rara condición de carrera relacionada con un error de asignación de memoria #56303 (alesapin).
- Se corrige la restauración a partir de una copia de seguridad con
flatten_nestedydata_type_default_nullable#56306 (Kseniia Sumarokova). - Se corrige un bloqueo al añadir una columna de tipo Object(JSON) #56307 (Nikita Mikhaylov).
- Se corrige un cierre inesperado en filterPushDown #56380 (vdimir).
- Se corrigió la restauración desde una copia de seguridad con una vista materializada y una tabla de origen eliminada #56383 (Kseniia Sumarokova).
- Se corrigió un segfault durante la inicialización de Kerberos #56401 (Nikolay Degterinsky).
- Se corrigió un desbordamiento de búfer en T64 #56434 (Alexey Milovidov).
- Se corrige la clave primaria de tipo Nullable en FINAL (2) #56452 (Amos Bird).
- Se corrigen las consultas ON CLUSTER sin base de datos en el nodo inicial #56484 (Nikolay Degterinsky).
- Corregir el fallo de inicio debido a una dependencia de TTL #56489 (Nikolay Degterinsky).
- Se corrigieron las consultas ALTER COMMENT con ON CLUSTER #56491 (Nikolay Degterinsky).
- Se corrige ALTER COLUMN con ALIAS #56493 (Nikolay Degterinsky).
- Se corrigieron las NAMED COLLECTIONs vacías #56494 (Nikolay Degterinsky).
- Se corrigieron dos casos relacionados con el análisis de proyecciones. #56502 (Amos Bird).
- Se corrige la gestión de alias en la caché de consultas #56545 (Robert Schulze).
- Se corrige la conversión de
Nullable(Enum)aNullable(String)#56644 (Nikolay Degterinsky). - Gestión de logs más fiable en Keeper #56670 (Antonio Andelic).
- Se corrige la fusión de la configuración para nodos con atributos de sustitución #56694 (Konstantin Bogdanov).
- Corrige el uso duplicado de la función de tabla
input(). #56695 (Nikolai Kochetov). - Corrección: problema con la carga dinámica de OpenSSL en RabbitMQ #56703 (Igor Nikonov).
- Corrige el fallo en el códec GCD cuando hay ceros en los datos #56704 (Nikita Mikhaylov).
- Se corrigió ‘mutex lock failed: Invalid argument’ en clickhouse-local durante una operación de insert into function #56710 (Kruglov Pavel).
- Se corrigió el análisis del texto de Date en la ruta optimista #56765 (Kruglov Pavel).
- Se corrigió un cierre inesperado en el códec FPC #56795 (Alexey Milovidov).
- DatabaseReplicated: se corrige el timeout de la consulta DDL tras recuperar una réplica #56796 (Alexander Tokmakov).
- Corrige la indicación incorrecta de columnas Nullable en el protocolo binario de MySQL #56799 (Serge Klochkov).
- Soporte para archivos de metadatos de Iceberg en tablas de metastore #56810 (Kruglov Pavel).
- Se corrige el informe de TSAN en transform #56817 (Raúl Marín).
- Corrección de la consulta SET y del formato de SETTINGS #56825 (Nikolay Degterinsky).
- Se corrige un fallo de arranque debido a una dependencia de tabla en joinGet #56828 (Nikolay Degterinsky).
- Se corrigió el aplanamiento de columnas Nested existentes durante ADD COLUMN #56830 (Nikolay Degterinsky).
- Se corrige la compatibilidad con
cral final de línea paracsv#56901 (KevinyhZou). - Corregir
tryBase64Decodepara entradas no válidas #56913 (Robert Schulze). - Se corrige la generación de columnas con anidamiento profundo en esquemas CapnProto/Protobuf #56941 (Kruglov Pavel).
- Evitar ALTER incompatibles en columnas de proyección #56948 (Amos Bird).
- Corregir la validación de la ruta del archivo SQLite #56984 (San).
- S3Queue: corrige el incremento de la referencia de metadatos #56990 (Kseniia Sumarokova).
- Corrección menor en S3Queue #56999 (Kseniia Sumarokova).
- Se corrige la validación de rutas de archivo de DatabaseFileSystem #57029 (San).
- Se corrige
fuzzBitsconARRAY JOIN#57033 (Antonio Andelic). - Se corrigió la desreferenciación de Nullptr en partial merge join con joined_subquery_re… #57048 (vdimir).
- Corregida una condición de carrera en RemoteSource #57052 (Raúl Marín).
- Se implementó
bitHammingDistancepara enteros grandes #57073 (Alexey Milovidov). - Corrección de enlaces de estilo S3 #57075 (Yarik Briukhovetskyi).
- Se corrige la función JSON_QUERY con varias rutas numéricas #57096 (KevinyhZou).
- Se corrigió el desbordamiento de búfer en el códec Gorilla #57107 (Nikolay Degterinsky).
- Cerrar la conexión interservidor ante cualquier excepción antes de la autenticación #57142 (Antonio Andelic).
- Se corrige un segfault tras ALTER UPDATE con una columna Nullable MATERIALIZED #57147 (Nikolay Degterinsky).
- Se corrigió la optimización incorrecta del plan de JOIN con una proyección normal parcialmente materializada #57196 (Amos Bird).
- Ignorar los comentarios al comparar las descripciones de columnas #57259 (Antonio Andelic).
- Se corrige la métrica
ReadonlyReplicaen todos los casos #57267 (Antonio Andelic). - Las fusiones en segundo plano usan correctamente el almacenamiento temporal de datos en caché #57275 (vdimir).
- Corrección en Keeper del changelog y las instantáneas #57299 (Antonio Andelic).
- Ignorar las tareas de ON CLUSTER ya finalizadas si cambió el hostname #57339 (Alexander Tokmakov).
- Las mutaciones de MergeTree reutilizan la granularidad del índice de la parte de origen #57352 (Maksim Kita).
- Caché del sistema de archivos: añade un límite para la descarga en segundo plano #57424 (Kseniia Sumarokova).
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 llamarsedistributed_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, comoreceive_timeoutdel 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 tablassystem.s3queueysystem.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 ajusteanalyze_index_with_space_filling_curvespara 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_nametoma 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 consulta
CHECK TABLEofrece mejor rendimiento y usabilidad (envía actualizaciones de progreso, se puede cancelar). Permite comprobar una parte concreta conCHECK 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ónformatQuerySingleLine, 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
_errory_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 almacenamientonats_handle_error_modepara NATS,rabbitmq_handle_error_modepara RabbitMQ yhandle_error_modepara FileLog, de forma similar akafka_handle_error_mode. Si se establece endefault, se lanzará una excepción cuando ClickHouse no pueda analizar un registro; si se establece enstream, 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 existenteSHOW SETTINGS. #55979 (Maksim Kita). - Se añadieron los campos
substreamsyfilenamesa la tablasystem.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_defaultpara usarORDER BY ()de forma predeterminada. #55899 (Srikanth Chekuri).
Mejora del rendimiento
- Añade la opción
query_plan_preserve_num_streams_after_window_functionspara 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_mapporabsl::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
INcuando el tipo de elemento del conjunto no coincide exactamente con el tipo de la columna. #55712 (Duc Canh Le). - Mejora del rendimiento de
ColumnVector::insertManyyColumnVector::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 demax_threads. Anteriormente, algunas consultas podían crear un número excesivo de hilos (hastamax_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
densitypasado 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ámetromax_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 conjuntoswatchesylist_watches. #56054 (Alexander Gololobov). - Se agregó la configuración
optimize_trivial_approximate_count_querypara usar la aproximación decounten 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) ytoWeek(WEEK) ahora admiten argumentos de tipoString. Esto hace que su comportamiento sea coherente con el de MySQL. #55589 (Robert Schulze). - Se introdujo la configuración
date_time_overflow_behaviorcon los valores posiblesignore,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
xidasystem.zookeeper_connection. #50702 (helifu). - Mostrar los ajustes correctos del servidor en
system.server_settingstras 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_projectionquedó obsoleta (estaba habilitada de forma predeterminada desde hace mucho tiempo). #55112 (Nikita Mikhaylov). - Cuando la función
untuplese 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 deuntupley 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 consultaDESCRIBE. Se añadió la configuracióndescribe_compact_output. Si se establece entrue, la consultaDESCRIBEdevuelve solo los nombres y los tipos de las columnas, sin información adicional. #55129 (Anton Popov). - A veces,
OPTIMIZEconoptimize_throw_if_noop=1puede fallar con el errorunknown reasoncuando la causa real es que hay proyecciones distintas en diferentes partes. Este comportamiento ya se ha corregido. #55130 (Nikita Mikhaylov). - Permite tener varias tablas
MaterializedPostgreSQLque 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ónmaterialized_postgresql_use_unique_replication_consumer_identifier. Cierra #54918. #55145 (Kseniia Sumarokova). - Permitir analizar
DateTime64yDateTimenegativos con parte fraccionaria a partir de cadenas cortas. #55146 (Andrey Zvonov). - Para mejorar la compatibilidad con MySQL, 1.
information_schema.tablesahora incluye el nuevo campotable_rowsy 2.information_schema.columnsahora incluye el nuevo campoextra. #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 enRENAME db.t1 to db.t2. #55373 (凌涛). - Se añade
internal_replicationasystem.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 COLUMNSahora informa correctamente el tipoFixedStringcomoBLOBsi la configuraciónuse_mysql_types_in_show_columnsestá activada. También se añadieron dos nuevas opciones de configuración,mysql_map_string_to_text_in_show_columnsymysql_map_fixed_string_to_text_in_show_columns, para cambiar la salida de los tiposStringyFixedStringaTEXToBLOB. #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-localy cambiar a otra base de datos. Esto hace que el comportamiento sea consistente conclickhouse-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
nullal serializar Tuple como objetos JSON, lo que permite mantener la compatibilidad con la funciónto_jsonde Spark y también resulta útil para gluten. #55956 (李扬). - Las funciones
(add|sub)Dateahora 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-keepercon configuración integrada. #56086 (Maksim Kita). - Se estableció un límite para el valor máximo de configuración de
queued.min.messagesa 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 comominSampleSizeContinuous). 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-keeperde forma independiente desde el paqueteclickhouse-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
DEFAULTen 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_columnssolo afecte aSHOW COLUMNS#55481 (Robert Schulze). - Corregido el análisis incorrecto de
DW_FORM_ref_addren 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
FORMATde 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_infoy 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_objectsen 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óninput_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óninput_format_json_infer_incomplete_types_as_strings. Ahora, en los formatos JSON, podemos leer cualquier valor en una columna String y evitar el errorCannot determine type for column 'column_name' by first 25000 rows of data, most likely this column contains only Nulls or empty Arrays/Mapsdurante 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,hdfsyazure_blob_storageahora puede incluir elementosread_resourceywrite_resourcecon nombres de recursos. Las políticas de planificación para estos recursos pueden configurarse en una sección independienteresourcesde la configuración del servidor. Las consultas pueden marcarse con el ajusteworkloady clasificarse mediante la secciónworkload_classifiersde 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 restriccionesmax_speedymax_burstpara 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_numbera las tablas MergeTree. #44532. #47532 (SmitaRKulkarni). - Agregar la cláusula
IF EMPTYa las consultasDROP TABLE. #48915 (Pavel Novitskiy). - Las funciones SQL
toString(datetime, timezone)yformatDateTime(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 deDECIMAL(P, 0)) yDECIMAL(como abreviatura deDECIMAL(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 operacionesBACKUPyRESTORE. #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 salidaMarkdown. #53860 (irenjj). - Se añade la función
decodeHTMLComponent. #54097 (Bharat Nallan). - Se añadió
peak_threads_usagea la tabla query_log. #54335 (Alexey Gerasimchuck). - Se añade soporte para
SHOW FUNCTIONSen clickhouse-client. #54337 (Julia Kartseva). - Se añadió la función
toDaysSinceYearZerocon el aliasTO_DAYS(por compatibilidad con MySQL), que devuelve el número de días transcurridos desde0001-01-01(en el calendario gregoriano proléptico). #54479 (Robert Schulze). La funcióntoDaysSinceYearZeroahora admite argumentos de tipoDateTimeyDateTime64. #54856 (Serge Klochkov). - Se añadieron las funciones
YYYYMMDDtoDate,YYYYMMDDtoDate32,YYYYMMDDhhmmssToDateTimeyYYYYMMDDhhmmssToDateTime64. 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 existentesYYYYMMDDToDate,YYYYMMDDToDateTime,YYYYMMDDhhmmddToDateTime,YYYYMMDDhhmmddToDateTime64. #54509 (Quanfa Fu) (Robert Schulze). - Se añaden varias funciones de distancia entre cadenas, incluidas
byteHammingDistanceyeditDistance. #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_namespara 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/_pathdespué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 enMergeTreesi ORDER BY contiene una columnaDecimal. 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 deuniqcomocountsi se seleccionan desde una subconsulta con GROUP BY. #52082 #52645 (JackyWoo). - Se eliminan las llamadas manuales a
mmap/mremap/munmapy todo este trabajo se delega enjemalloc, 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
toStringcon 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
jsonen unstd::stringstream, este PR intenta escribir el resultado de la serialización directamente enColumnString. #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
GeneratorJSONPathy eliminando varios punteros compartidos. #54735 (lgbo). - Keeper intenta agrupar en lotes las solicitudes de flush para mejorar el rendimiento. #53049 (Antonio Andelic).
- Ahora
clickhouse-clientprocesa archivos en paralelo cuando se usaINFILE '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_sizepara 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::ceilRowsToCompleteGranulespor una búsqueda binaria. #54869 (usurai).
Funcionalidad experimental
- La creación de índices
Annoyahora puede paralelizarse mediante el ajustemax_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
MergeTreepor hash de los nombres. Esto ayuda a evitar el errorFile name too longen algunos casos. #50612 (Anton Popov). - Analiza datos en formato
JSONcomoJSONEachRowsi falla el análisis de los metadatos. Esto permite leer archivos con la extensión.jsonincluso 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_formatpara activar/desactivar este comportamiento (activado de forma predeterminada). #52853 (Kruglov Pavel). - La vista
information_schema.tablesahora incluye un nuevo campodata_lengthque 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
EmbeddedRocksDBen una situación extremadamente rara: a veces, el motor de tablaEmbeddedRocksDBno cierra correctamente los archivos en NFS después de ejecutarDROP TABLE. #53502 (Mingliang Pan). RESTORE TABLE ON CLUSTERdebe 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 carpetadetachedcon 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_nsa 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),syncyexistspara keeper-client. #54201 (pufit). clickhouse-localyclickhouse-clientahora permiten especificar el parámetro--queryvarias 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_partsde forma predeterminada. #54260 (vdimir). - Se corrige el uso de
countde 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
STDa la funciónstddevPoppara garantizar la compatibilidad con MySQL. Cierra #54274. #54382 (Nikolay Degterinsky). - Se añade la función
addDatepor compatibilidad con MySQL ysubDatepara mantener la coherencia. Referencia #54275. #54400 (Nikolay Degterinsky). - Se agregó
modification_timeasystem.detached_parts. #54506 (Azat Khuzhin). - Se añadió una configuración
splitby_max_substrings_includes_remaining_stringque 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 comomap/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
versional comandormenkeeper-clientpara 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_deterministica la tabla del sistemasystem.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_schemase 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 campoinformation_schema.tables.table_typecambió de Enum8 a String. 2. Se añadieron los campostable_commentytable_collationa la vistainformation_schema.table. 3. Se añadieron las vistasinformation_schema.key_column_usageyreferential_constraints. 4. Los alias en mayúsculas de las vistas deinformation_schemase 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,randomStringydictGet. 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 queclickhouse-server. #54807 (Michael Kolupaev). - Campo
is_obsoletede la tablasystem.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 HOURSdebería ser equivalente aINTERVAL 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,matchy 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 usarstring 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
timestamppor 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/envpara resolver bash; ahora es compatible con Nix OS. #54603 (Fionera). - CMake añadió la opción
PROFILE_CPU, necesaria para ejecutarperf recordsin 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
IPv6en bloom filter #54200 (Yakov Olkhovskiy). - corrige una posible discrepancia de tipos con
IPv4#54212 (Bharat Nallan). - Corrige
system.data_skipping_indicespara 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.errorstras 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 charactersen la table functions3#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-localadmite el argumento--databaseen la línea de comandos #54503 (vdimir).- Se corrige un posible error de análisis en los formatos
-WithNamesconinput_format_with_names_use_headerdeshabilitado #54513 (Kruglov Pavel). - Corrige un caso poco frecuente del error CHECKSUM_DOESNT_MATCH #54549 (alesapin).
- Corrige la ordenación de
UNION ALLcon 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
indexHintcuando 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 Chunken MaterializedPostgreSQL #54844 (Kseniia Sumarokova). - Mover la configuración de formato obsoleta a una sección aparte #54855 (Kruglov Pavel).
- Reconstruir
minmax_count_projectioncuando se modifica la clave de partición #54943 (Amos Bird). - Se corrige una conversión errónea a
ColumnVector<Int128>en la funciónif#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
FINALproduce 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óndisk. En la versión anterior podía especificarse comodisk = disk_<disk_name>(...), pero esto ya no es compatible. #52820 (Kseniia Sumarokova). clickhouse-benchmarkestablecerá conexiones en paralelo cuando se invoque con--concurrencymayor 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 declickhouse-benchmark. Si ha utilizado esta opción, como solución alternativa también puede extraer datos desystem.query_logen formato JSON. #53293 (Alexey Milovidov).- Se elimina la columna
microsecondsdesystem.text_logy la columnamillisecondsdesystem.metric_logporque son redundantes al existir la columnaevent_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
ptrasystem.trace_logparatrace_type = 'MemorySample'. Esta columna contiene una dirección de memoria asignada. Se añadió la funciónflameGraph, 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 functions3Cluster. #50795 (SmitaRKulkarni). - Se permite usar
cluster,clusterAllReplicas,remoteyremoteSecuresin 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/fromUTCTimestampque actúan igual queto_utc_timestamp/from_utc_timestampde Spark. #52117 (KevinyhZou). - Agregar nuevas funciones
structureToCapnProtoSchema/structureToProtobufSchemaque 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 ajustesformat_capn_proto_use_autogenerated_schema/format_protobuf_use_autogenerated_schema). Permiten exportar el esquema autogenerado durante la entrada/salida mediante el ajusteoutput_format_schema. #52278 (Kruglov Pavel). - Un nuevo campo
query_cache_usageensystem.query_logahora muestra si se utilizó la caché de consultas y de qué forma. #52384 (Robert Schulze). - Se agregan las nuevas funciones
startsWithUTF8yendsWithUTF8. #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 deReplicatedMergeTree). #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 columnadummyde tipoUInt8y valor0, igual quesystem.one. Puede usarse junto con las columnas virtuales_file/_pathpara 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_indexespara 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,arrayShiftLeftyarrayShiftRight. #53557 (Mikhail Koviazin). - Añade la columna
nameasystem.clusterscomo alias decluster. #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
S3Queuepara 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
counta 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_implementationpara reescribircountDistinctIfusandocount_distinct_implementation. Cierra #30642. #46051 (flynn). - Acelera la fusión de estados de las funciones de agregación
uniqyuniqExactal 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
ORCnativo 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_threadsde 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
counten las funciones file/s3/url/hdfs/azure. La caché puede habilitarse o deshabilitarse configurandouse_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_reactionpara controlar la reacción (none, log o throw) cuando hay datos enstderrde un comando externo. Esto facilita la depuración de comandos externos. #43210 (Amos Bird). - Agregar la columna
partitiona la tablasystem part_logy a la tabla merge. #48990 (Jianfei Hu). - Los tamaños de las cachés de índices sin comprimir/marcas,
mmapy 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_controlpara 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
indexen 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
Aggregatorcuandomax_block_sizees 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
arrayIntersectahora 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 FREEZEno 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 functions3no funcionaba con URL prefirmadas. cierra #50846. #52310 (chen). - Se añadió la columna
namecomo alias deeventymetricen las tablassystem.eventsysystem.metrics. Cierra #51257. #52315 (chen). - Se añadió compatibilidad en el analizador sintáctico con la sintaxis
CREATE UNIQUE INDEXcomo una operación sin efecto para mejorar la compatibilidad con SQL. El índiceUNIQUEno es compatible. Establezcacreate_index_ignore_unique = 1para 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_metricsahora 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_classen la cláusulaSETTINGSde la instrucciónBACKUPpara 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_schemaa veces en minúsculas y otras en mayúsculas. Por este motivo, tenemos la base de datosinformation_schema, que contiene tablas en minúsculas, comoinformation_schema.tables, y la base de datosINFORMATION_SCHEMA, que contiene tablas en mayúsculas, comoINFORMATION_SCHEMA.TABLES. Pero algunas herramientas consultanINFORMATION_SCHEMA.tableseinformation_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 datosinformation_schema. #52695 (Yarik Briukhovetskyi). - La consulta
CHECK TABLEofrece mejor rendimiento y usabilidad (envía actualizaciones de progreso y se puede cancelar). #52745 (vdimir). - Se agregó compatibilidad con
modulo,intDiveintDivOrZeropara tuplas, al distribuirlos entre los elementos de la tupla. #52758 (Yakov Olkhovskiy). - Buscar las configuraciones predeterminadas
yamlyymlen clickhouse-client después dexml. #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_parsingpara 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 paraclickhouse-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
SETTINGSde las sentenciasRESTORE. #52970 (Victor Krasnov). - Se añade la posibilidad de limitar las solicitudes a S3 en las operaciones de copia de seguridad (los comandos
BACKUPyRESTOREahora respetans3_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
hasTokenOrNullyhasTokenCaseInsensitiveOrNulldevuelvan 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_pathen la configuración del servidor, todas las rutas de las cachés del sistema de archivos quedarán restringidas a este directorio. Por ejemplo, sipathen la configuración de la caché es relativa, se ubicará enfilesystem_caches_path; sipathen la configuración de la caché es absoluta, será obligatorio que esté dentro defilesystem_caches_path. Sifilesystem_caches_pathno 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 ejemploSYSTEM STOP LISTEN QUERIES ALL EXCEPT TCP, HTTP. #53280 (Nikolay Degterinsky). - Cambie el valor predeterminado de
max_concurrent_queriesde 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 errorDirectory for table data already existsal replicar o recuperar una base de datosReplicated. #53425 (Alexander Tokmakov). - Si los ajustes del servidor
asynchronous_metrics_update_period_syasynchronous_heavy_metrics_update_period_sse 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,DROPo al apagar el servidor. #53501 (Azat Khuzhin). - La función
domainRFCahora 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óngroupArray. El valor predeterminado es16777215. #53550 (Nikolai Kochetov). - Se añadió
SCHEMAcomo alias deDATABASEpara 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
- No exponga los símbolos del binario de ClickHouse al enlazador dinámico. Esto podría solucionar #43933. #47475 (Alexey Milovidov).
- Se añadió el enlace simbólico
clickhouse-keeper-cliental paquete clickhouse-server. #51882 (Mikhail f. Shiryaev). - Añadir https://github.com/elliotchance/sqltest a CI para informar del nivel de conformidad con SQL 2016. #52293 (Alexey Milovidov).
- Actualización de PRQL a 0.9.3. #53060 (Maximilian Roos).
- Las tablas del sistema de las comprobaciones de CI se han exportado a ClickHouse Cloud. #53086 (Alexey Milovidov).
- Los datos de perfilado del compilador (
-ftime-trace) se cargan en ClickHouse Cloud. #53100 (Alexey Milovidov). - Acelera las compilaciones Debug y Tidy. #53178 (Alexey Milovidov).
- Acelera la compilación eliminando montones de basura. Una de las cabeceras que se incluían con frecuencia había sido envenenada por Boost. #53180 (Alexey Milovidov).
- Eliminar aún más basura. #53182 (Alexey Milovidov).
- La función
arrayAUCusaba plantillas de C++ muy pesadas; se quitaron. #53183 (Alexey Milovidov). - Algunas unidades de traducción se reconstruían siempre, independientemente de ccache. Se encontró y corrigió la causa. #53184 (Alexey Milovidov).
- Los datos de perfil del compilador (
-ftime-trace) se suben a ClickHouse Cloud., en un segundo intento tras #53100. #53213 (Alexey Milovidov). - Exportar logs desde CI en pruebas con estado a ClickHouse Cloud. #53351 (Alexey Milovidov).
- Exportar los logs de CI durante las pruebas de estrés. #53353 (Alexey Milovidov).
- Exportar los logs de CI en el fuzzer. #53354 (Alexey Milovidov).
- Se conservan los parámetros de entorno en el comando
clickhouse start. Corrige #51962. #53418 (Mikhail f. Shiryaev). - Seguimiento de #53418. Pequeñas mejoras en install_check.py, con la adición de pruebas para verificar que los parámetros de entorno (ENV) se pasen correctamente al proceso principal al ejecutar
init.d start. #53457 (Mikhail f. Shiryaev). - Reorganización de la gestión de archivos en CMake para evitar posibles duplicaciones. Por ejemplo,
indexHint.cppestá duplicado tanto endbms_sourcescomo enclickhouse_functions_sources. #53621 (Amos Bird). - Se actualizó snappy a la versión 1.1.10. #53672 (李扬).
- Mejora ligeramente la compilación de CMake depurando algunas dependencias y eliminando algunos duplicados. Cada commit incluye una breve descripción de los cambios realizados. #53759 (Amos Bird).
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
tuplecon 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
PREWHEREmultietapa #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
~PushingAsyncPipelineExecutorde 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_idenpart_logcon 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_modecuando hay una subconsulta en el lado derecho deIN#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(aliasUSE 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 superiorNAMED COLLECTION ADMINtambién lo está). Propuesto en #50277. Para concederlo, utiliceGRANT NAMED COLLECTION ON collection_name TO useroGRANT NAMED COLLECTION ON * TO user; para poder otorgar estos permisos, se requierenamed_collection_adminen la configuración (anteriormente se llamabanamed_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_timedesystem.parts. Ahora se llamalast_removal_attempt_time. #52104 (filimonov). - Se incrementa de forma predeterminada a 5 la versión de
distributed_ddl_entry_format_version(habilita el paso deopentelemetryeinitial_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 duranteinsert/merge). Elimine esas proyecciones antes de la actualización. Corrige #52353. #52361 (Nikolai Kochetov). - Se elimina la característica experimental
hashiddebido 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
Overlaypara combinar varias bases de datos en una sola. Se añadió el motor de base de datosFilesystempara 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 datosS3permite interactuar en modo de solo lectura con el almacenamiento S3 representando un prefijo como un conjunto de tablas. Un nuevo motor de base de datosHDFSpermite 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_obsoleteasystem.settingsy 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 LISTENpara 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_binsque 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
RowBinaryWithDefaultscon 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 quedefault_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 KEYen 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
logyerrorlog) como en argumentos de la línea de comandos (--log-filey--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 versionesCaseInsensitiveyUTF8) para detectar subsecuencias en cadenas. #52050 (Dmitry Kardymon). - Se añade
array_aggcomo alias degroupArraypara compatibilidad con PostgreSQL. Cierra #52100. ### Entrada de documentación para cambios visibles para el usuario. #52135 (flynn). - Añade
any_valuecomo alias de compatibilidad para la función de agregaciónany. Cierra #52140. #52147 (flynn). - Se añade la función de agregación
array_concat_aggpara compatibilidad con BigQuery; es un alias degroupArrayArray. Cierra #52139. #52149 (flynn). - Se añade
OCTET_LENGTHcomo alias delength. Cierra #52153. #52176 (FFFFFFFHHHHHHH). - Se añadió la función
firstLinepara 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 consultaKusto. #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 servidorasync_insert_queue_flush_on_shutdown(truede forma predeterminada), que determina si se debe vaciar la cola de inserciones asincrónicas durante un apagado ordenado. El ajusteasync_insert_threadsahora es un ajuste del servidor. #49160 (Anton Popov). - Alias
current_databasey una nueva funcióncurrent_schemaspara mantener la compatibilidad con PostgreSQL. #51076 (Pedro Riera). - Se añadieron alias para las funciones
today(ahora también disponibles con los nombrescurdate/current_date) ynow(current_timestamp). #52106 (Lloyd-Pottiger). - Se admite
async_deduplication_tokenpara 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.937555153. Puedes desactivar el uso del formato de serialización disperso configurandoratio_of_defaults_for_sparse_serialization = 1para tus tablas MergeTree. #49631 (Alexey Milovidov). - Se habilitan de forma predeterminada las opciones
move_all_conditions_to_prewhereyenable_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 enMergeTreeReadPool. 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
OpenedFileCachepodí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_partsde 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 de4Mi. 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 de2. Además,max_file_segment_sizese aumentó de8Mia32Mien 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 entrue, 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ónPREWHERE. 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_msque 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
FETCHdel estándar SQL sinOFFSET. 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_headersde la configuración. Se admiten tanto coincidencias exactas como filtros regexp. #51038 (Nikolay Degterinsky). - No mostrar mensajes en los logs sobre
16 EiBde 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 ajustefunction_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_loglas consultas que vacían el búfer deasync insert. #51160 (Raúl Marín). - Las funciones
date_diffyageahora 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_copyys3_allow_native_copypara los discoss3/s3_plain). #51448 (Azat Khuzhin). - Añade la columna
primary_key_sizea la tablasystem.partspara mostrar el tamaño comprimido de la clave primaria en disco. Cierra #51400. #51496 (Yarik Briukhovetskyi). - Permitir ejecutar
clickhouse-localsin 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
%apara el nombre completo del archivo en la configuración rename_files_after_processing. #51603 (Kruglov Pavel). - Se añadió la columna
modification_timeasystem.parts_columns. #51685 (Azat Khuzhin). - Se añade una nueva configuración
input_format_csv_use_default_on_bad_valuesal 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
rangepara argumentos Nullable. #51767 (Dmitry Kardymon). - Convierte condiciones como
toyear(x) = cenc1 <= 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_functionsno funcione con columnasMATERIALIZEDyALIAS. 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 consultasADD INDEXsinTYPEespecificado. 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_logdesde 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_projectionspara desactivar las proyecciones implícitas (actualmente, solo la proyecciónmin_max_count). #52152 (Amos Bird). - Era posible usar la función
hasTokenpara 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 blocken 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
ZooKeeperRetriesControlvuelve a lanzar un error, es más útil ver su stack trace original, no el deZooKeeperRetriesControl. #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 nombrename). #51552 (Kseniia Sumarokova). Esta sintaxis puede cambiar en esta versión. - (experimental MaterializedMySQL) Se corrigió un fallo cuando
mysqlxx::Pool::Entryse 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
reconfigde ZooKeeper para ClickHouse Keeper con reconfiguración incremental, que puede habilitarse mediante la configuraciónkeeper_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::fillArrowArrayWithArrayColumnDatafuncione 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.licensesahora 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 ,worlden lugar deHello, world. #52549 (Alexey Milovidov).
Corrección de errores (mal funcionamiento visible para el usuario en una versión estable oficial)
- Se corrige la sincronización de tablas de MaterializedPostgreSQL #49698 (Kseniia Sumarokova).
- Se corrigió la proyección con optimize_aggregators_of_group_by_keys #49709 (Amos Bird).
- Se corrige optimize_skip_unused_shards con JOINs #51037 (Azat Khuzhin).
- Se corrigió formatDateTime() con datetime64 negativo fraccional #51290 (Dmitry Kardymon).
- Las funciones
hasToken*estaban completamente mal. Se añadió una prueba para #43358 #51378 (Alexey Milovidov). - Se corrigió la optimización que mueve las funciones antes de la ordenación. #51481 (Nikolai Kochetov).
- Se corrige el desajuste en la estructura de Block en Pipe::unitePipes para FINAL #51492 (Nikita Taranov).
- Se corrige SIGSEGV en clústeres con peso cero en todos los segmentos (corrige INSERT INTO FUNCTION clusterAllReplicas()) #51545 (Azat Khuzhin).
- Corrige el timeout en las solicitudes hedged #51582 (Azat Khuzhin).
- Se corrige un error lógico en el ANTI join con NULL #51601 (vdimir).
- Corrección al mover condiciones ‘IN’ a PREWHERE #51610 (Alexander Gololobov).
- No aplicar PredicateExpressionsOptimizer a los join ASOF/ANTI #51633 (vdimir).
- Se corrige
async insertcon deduplicación para ReplicatedMergeTree mediante algoritmos de combinación #51676 (Antonio Andelic). - Se corrige la lectura de una columna vacía en
parseSipHashKey#51804 (Nikita Taranov). - Corrige un segfault al crear una tabla EmbeddedRocksdb no válida #51847 (Duc Canh Le).
- Corregidas las inserciones en tablas de MongoDB #51876 (Nikolay Degterinsky).
- Se corrigió un interbloqueo al cerrar DatabaseCatalog #51908 (Alexander Tokmakov).
- Se corrige un error en los operadores de subconsulta #51922 (Alexey Milovidov).
- Corrige la conexión asíncrona a hosts con varias direcciones IP #51934 (Kruglov Pavel).
- No eliminar las entradas tras ActionsDAG::merge #51947 (Nikolai Kochetov).
- Comprobar el refcount en
RemoveManyObjectStorageOperation::finalizeen lugar de hacerlo enexecute#51954 (vdimir). - Se permiten UDF paramétricas #51964 (Alexey Milovidov).
- Pequeña corrección de
toDateTime64()para fechas posteriores al 2283-12-31 #52130 (Andrey Zvonov). - Se corrigió la tupla de ORDER BY de las funciones de ventana #52145 (Alexey Milovidov).
- Corrige el análisis incorrecto de proyecciones cuando la expresión de agregación contiene funciones monótonas #52151 (Amos Bird).
- Se corrige un error en las funciones
groupArrayMoving#52161 (Alexey Milovidov). - Deshabilitar Direct JOIN para el diccionario de rango #52187 (Duc Canh Le).
- Corregir la prueba de mutaciones atascadas (y una condición de carrera extremadamente rara) #52197 (alesapin).
- Se corrige una condición de carrera en el disco Web #52211 (Kseniia Sumarokova).
- Se corrigió una condición de carrera de datos en Connection::setAsyncCallback al recibir un paquete desconocido del servidor #52219 (Kruglov Pavel).
- Corregir la eliminación de datos temporales al arrancar, añadir una prueba #52275 (vdimir).
- No utilice las proyecciones minmax_count al contar columnas Nullable #52297 (Amos Bird).
- MergeTree/ReplicatedMergeTree debería usar la zona horaria del servidor para las entradas de log #52325 (Azat Khuzhin).
- Corrige la vista parametrizada con CTE y usos múltiples #52328 (SmitaRKulkarni).
- Deshabilitar las plantillas de expresiones para los intervalos de tiempo #52335 (Alexander Tokmakov).
- Se corrige
apply_snapshoten Keeper #52358 (Antonio Andelic). - Actualización de build-osx.md #52377 (AlexBykovski).
- Se corrige el bloqueo de
countSubstringscon una subcadena de búsqueda vacía y una columna como cadena de entrada #52409 (Sergei Trifonov). - Corregir la proyección normal en la tabla Merge #52432 (Amos Bird).
- Se corrige una posible doble liberación de memoria en Aggregator #52439 (Nikita Taranov).
- Se corrigió la inserción en el motor Buffer #52440 (Vasily Nemkov).
- La implementación de AnyHash no cumplía con la especificación. #52448 (Alexey Milovidov).
- Comprobación de la profundidad de recursión en OptimizedRegularExpression #52451 (Alexey Milovidov).
- Se corrigió una condición de carrera en DatabaseReplicated::startupTables()/canExecuteReplicatedMetadataAlter() #52490 (Azat Khuzhin).
- Se corrige un fallo en la función
transform#52513 (Alexey Milovidov). - Corregida la eliminación ligera después de borrar una proyección #52517 (Anton Popov).
- Corrige el posible error “No se pueden drenar las conexiones: cancele primero” #52585 (Kruglov Pavel).
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_filesde 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_sizeyhttp_max_field_name_sizea 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étricasNormalizedde 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í comoCASEcon 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
TRUNCATEen la cláusulaINTO OUTFILE. Se recomienda usarAPPENDoTRUNCATEconINTO OUTFILEcuando el archivo ya existe. #50950 (alekar). - Se añadió el table engine
Redisy la table functionredis. 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_columnspara modificar la instrucción SQLSHOW COLUMNSy 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 ajustesmax_merge_selecting_sleep_ms,merge_selecting_sleep_slowdown_factor,max_cleanup_delay_periodycleanup_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_idlocal 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_storagespara 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 PARTITIONni las mutaciones a través de la base de datosReplicatedsi solo tiene un segmento y la tabla subyacente esReplicatedMergeTree. #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_inferencepara 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_defaulten 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_lineseinput_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_delayynumber_of_mutations_to_throwestá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*yparseDateTime64BestEffort*. #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_filesdesystem.partspara 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-clientintegrado 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
RUNdel Dockerfile en bloques condicionales más pequeños. Las herramientas necesarias se instalan bajo demanda en la misma capaRUNy 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)
- Informar correctamente del estado de carga de los diccionarios ejecutables #48775 (Anton Kozlov).
- Correcta mutación de los índices de omisión y las proyecciones #50104 (Amos Bird).
- Limpieza de partes en traslado #50489 (vdimir).
- Se corrigió la compatibilidad con versiones anteriores del hash de tipos IP en funciones de agregación #50551 (Yakov Olkhovskiy).
- Se corrige el recuento incorrecto de filas en las tablas de la familia Log después de TRUNCATE #50585 (flynn).
- Corrige un error en la combinación paralela de
uniqExact#50590 (Nikita Taranov). - Se revierten los cambios recientes de grace hash join #50699 (vdimir).
- Caché de consultas: se intenta corregir una conversión incorrecta de
ColumnConstaColumnVector<char8_t>#50704 (Robert Schulze). - Evitar almacenar en Keeper logs que contengan una operación desconocida #50751 (Antonio Andelic).
- Compatibilidad de SummingMergeTree con DateTime64 #50797 (Jordi Villar).
- Añade una configuración de compatibilidad para zonas horarias no constantes #50834 (Robert Schulze).
- Se corrige el hash de los parámetros LDAP en las entradas de caché #50865 (Julian Maicher).
- Se usa fallback para analizar enteros grandes a partir de String en lugar de generar una excepción en el formato Parquet #50873 (Kruglov Pavel).
- Se corrigió la comprobación excesivamente frecuente del archivo de bloqueo durante la escritura de una copia de seguridad #50889 (Vitaly Baranov).
- No aplicar la proyección si
read-in-orderestaba habilitado. #50923 (Nikolai Kochetov). - Se corrige una condición de carrera en el iterador de Azure Blob Storage #50936 (SmitaRKulkarni).
- Se corrige la propagación errónea de
sort_descriptionenCreatingSets#50955 (Nikita Taranov). - Corregido el procesamiento de metadatos opcionales de Iceberg v2 #50974 (Kseniia Sumarokova).
- MaterializedMySQL: Mantener los paréntesis en las sobrescrituras de tablas vacías #50977 (Val Doroshchuk).
- Se corrige un fallo en BackupCoordinationStageSync::setError() #51012 (Vitaly Baranov).
- Se corrigió un fallo sutil en el mecanismo de copy-on-write del diccionario ColumnLowCardinality #51064 (Michael Kolupaev).
- Generación de IV seguros #51086 (Salvatore Mesoraca).
- Corregir el funcionamiento ineficaz de la caché de consultas para
SELECTcon subconsultas #51132 (Robert Schulze). - Se corrigió el índice Set con una comparación constante Nullable. #51205 (Nikolai Kochetov).
- Se corrige un cierre inesperado en las funciones s3 y s3Cluster #51209 (Nikolay Degterinsky).
- Se corrige un cierre inesperado con expresiones compiladas #51231 (LiuNeng).
- Se corrigió un use-after-free en StorageURL al cambiar de URL #51260 (Michael Kolupaev).
- Se actualizó la comprobación para la vista parametrizada #51272 (SmitaRKulkarni).
- Corrige la escritura repetida del mismo archivo en la copia de seguridad #51299 (Vitaly Baranov).
- Corregido un fallo del fuzzer en ActionsDAG #51301 (Alexey Milovidov).
- Eliminar código basura de la función
transform#51350 (Alexey Milovidov).
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_marksycompress_primary_keyen 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-opy 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_storagesyinput_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, useparallelize_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_projectionspara controlar si se seleccionarán projections para las consultas SELECT. El ajusteallow_experimental_projection_optimizationes Obsolete y no hace nada. #49719 (Alexey Milovidov). - Marcar
joinGetcomo no determinista (igual quedictGet). Esto permite usarlos en mutations sin necesidad de un ajuste adicional. #49843 (Azat Khuzhin). - Revertir el cambio por el que “
groupArrayreturns cannot be nullable” (debido a una ruptura de compatibilidad binaria paragroupArray/groupArrayLast/groupArraySamplesobre tiposNullable, lo que probablemente provocaráTOO_LARGE_ARRAY_SIZEoCANNOT_READ_ALL_DATA). #49971 (Azat Khuzhin). - El ajuste
enable_memory_bound_merging_of_aggregation_resultsestá activado de forma predeterminada. Si actualiza desde una versión anterior a la 22.12, recomendamos establecer este indicador enfalsehasta 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_cachecomo 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,PolygonyMultiPolygon) 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óndefault_password_typedeconfig.xmldel 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 functiongenerateRandom. #47409 (Kruglov Pavel). - Permite usar
CASEsin una ramaELSEy amplíatransformpara 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
headerpara 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_limitymerges_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étricaMergesMutationsMemoryTrackingpara 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
dotProductadmite arrays. #49050 (FFFFFFFHHHHHHH). - Se ha añadido compatibilidad con la instrucción
SHOW INDEXpara mejorar la compatibilidad con MySQL. #49158 (Robert Schulze). - Añade compatibilidad para las columnas virtuales
_filey_pathen la función de tablaurl. - Mejora el mensaje de error de la función de tablaurl. - resuelve #49231 - resuelve #49232. #49356 (Ziyi Tan). - Se añadió el campo
grantsen el archivo users.xml, que permite especificar privilegios para los usuarios. #49381 (pufit). - Se admiten
full/right joincon el algoritmograce hash join. #49483 (lgbo). - El modificador
WITH FILLagrupa el rellenado según el prefijo de ordenación. Lo controla la configuraciónuse_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_timeoutespecí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
dictGetAllpara diccionarios de árbol regexp devuelva valores de varias coincidencias como arrays. Cierra #50254. #50255 (Johann Gan). - Se añadió la función
toLastDayOfWeekpara 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_processesy la consultaSHOW USER PROCESSESpara 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_selectpara mostrar secretos de tablas, bases de datos, funciones de tabla y diccionarios. Añade el privilegiodisplaySecretsInShowAndSelect, 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_marksycompress_primary_keyen 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
ANYhash join cuando no se inserta nada. #48633 (vdimir). - Corrige el combinador de agregación
-Ifcuando 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_bytespara limitar la cantidad de memoria utilizada en las operaciones en segundo plano. -vertical_merge_algorithm_min_bytes_to_activatepara 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_fsymax_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_HASHEDahora consume 2,6 veces menos memoria y es ~2 veces más rápido). #49380 (Azat Khuzhin). - Optimice las tablas
system.query_logysystem.query_thread_logaplicandoLowCardinalitycuando corresponda. Las consultas sobre estas tablas serán más rápidas. #49530 (Alexey Milovidov). - Mejor rendimiento al leer archivos
Parquetlocales (gracias a la lectura en paralelo). #49539 (Michael Kolupaev). - Mejora el rendimiento de
RIGHT/FULL JOINhasta 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. UsarLowCardinalitydonde 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
CheckNotExistsa 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
Lista 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_resultsestá habilitada de forma predeterminada. #50319 (Nikita Taranov).
Funcionalidad experimental
- El
codecDEFLATE_QPLreduce 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
Outdatedcon “zero-copy replication”. #49630 (Alexander Tokmakov). - Réplicas paralelas: 1) Se corrigió un error
NOT_FOUND_COLUMN_IN_BLOCKal usar réplicas paralelas con almacenamiento no replicado y con la configuraciónparallel_replicas_for_non_replicated_merge_treedeshabilitada. 2) Ahoraallow_experimental_parallel_reading_from_replicastiene 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 siallow_experimental_parallel_reading_from_replicasestá 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
BACKUPno 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_insertpara las tablasMergeTree. Tiene el mismo significado que la configuraciónasync_inserta nivel de consulta y habilita las inserciones asíncronas para una tabla específica. Nota: no surte efecto en las consultas de inserción desdeclickhouse-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_valueylast_valuepara aceptar NULL. #46467 (lgbo). - Se añaden los alias
str_to_mapymapFromStringparaextractKeyValuePairs. 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 funcionesossycosn, es solo un alias de la función de tablas3y 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
Replicatedensystem.clusters:database_shard_name,database_replica_name,is_active. Se añadió una cláusula opcionalFROM SHARDa la consultaSYSTEM DROP DATABASE REPLICA. #48548 (Alexander Tokmakov). - Añade una nueva columna
zookeeper_nameen system.replicas para indicar en qué clúster de ZooKeeper (auxiliar) se almacenan los metadatos de la tabla replicada. #48549 (cangyin). - El operador
INpermite compararDateyDate32. 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
Intervalen tablas. #49085 (larryluogit). - Permite usar la función de ventana
ntilesin 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 consultasALTERque 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_directoriesen la caché del sistema de archivos. #49203 (Kseniia Sumarokova). - Copia ejemplos incorporados a un nuevo campo
exampleensystem.functionspara complementar el campodescription. #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
asymptoticpara el método de cálculoasympdekolmogorovSmirnovTest. 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_sizeyoutdated_part_loading_thread_pool_queue_size. #49317 (Nikita Mikhaylov). - No sobreestime el tamaño de los datos procesados en las columnas
LowCardinalitycuando 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
ARRAYcomo 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_sizeymax_parts_cleaning_thread_pool_sizeen la configuración de nivel superior. La configuración de nivel de tablamax_part_loading_threadsymax_part_removal_threadsquedó obsoleta. #49474 (Nikita Mikhaylov). - Permitir
?password=passen 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_trackerdespués de desvincularThreadGroup. #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
dictionaryparaRegExpTreeDictionary. #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_sizeen 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 aceptarkey_value_delimitercomo 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_idpara 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
partitionsensystem.query_logpara indicar qué particiones intervienen en el cálculo. #49779 (helifu). - Se añadió la configuración
enable_the_endpoint_id_with_zookeeper_name_prefixparaReplicatedMergeTree(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 erroresDuplicate interserver IO endpointal 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_configouser_defined_executable_functions_configen 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
INson tuplas de un solo elemento. #49844 (MikhailBurdukov). - La función
bitHammingDistanceadmite los tipos de datosStringyFixedString. 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
toUnixTimestampahora acepta argumentos de tipoDateyDate32. #49989 (Victor Krasnov). - Contabilizar únicamente la memoria del servidor para los diccionarios. #49995 (Azat Khuzhin).
- El servidor permitirá usar configuraciones
SQL_*, comoSQL_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_optimizationparaoptimize_use_projections,allow_experimental_lightweight_deleteparaenable_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
CGroupCpuCfsPeriodyCGroupCpuCfsQuotaen 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 clavemulti- para cada solicitud o subsolicitud enmultise puede definir un campoweightpara 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 camposmin_valueymax_valueson 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_tests__release__databasereplicated__[3_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ó
arrayMapcon 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_prefixen OptimizeRegularExpression #49919 (Han Fei). - Se corrigieron las métricas
WriteBufferFromS3Bytes,WriteBufferFromS3MicrosecondsyWriteBufferFromS3RequestsErrors#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 NaNen 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
multiIfcon 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
--queryy--queries-fileal 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
SELECTdistribuido anidado en la cláusulaWITH#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 cachevirtual. Sipathen la configuración de lafilesystem cachevirtual 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
LIGHTWEIGHTyPULLpara la consultaSYSTEM SYNC REPLICA. La versiónLIGHTWEIGHTespera solo a los fetches y a los drop-ranges (se ignoran las merges y las mutations). La versiónPULLrecupera nuevas entradas de ZooKeeper y no espera a que se procesen. Corrige #47794. #48085 (Alexander Tokmakov). - Añadir la función
kafkaMurmurHashpara 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_counta la tablasystem.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 persistenteReplicatedDataLosspara la monitorización. #48526 (Sergei Trifonov). - Se añade la función
soundexpara mayor compatibilidad. Cierra #39880. #48567 (FriendLey). - Se admite el tipo
Mappara JSONExtract. #48629 (李扬). - Agrega el formato
PrettyJSONEachRowpara 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
ParquetMetadatapara leer los metadatos de archivos Parquet. #48911 (Kruglov Pavel). - Añade la función
extractKeyValuePairspara 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 \, \;) yquoting_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
Parquetahora es mucho más rápida. La E/S y la decodificación se paralelizan (controladas por la configuraciónmax_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 tablattiene múltiples partes, entonces para cada parte se construye en memoria un conjunto para la subconsultaSELECT 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_replicano 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
INcon 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 tablaurl,file. #48727 (Igor Nikonov). Esto se controla mediante la configuraciónparallelize_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_shardsestá habilitada. #48771 (Azat Khuzhin).
Funcionalidad experimental
- Las entradas en la caché de consultas ahora se agrupan hasta max_block_size y se comprimen. #45912 (Robert Schulze).
- Ahora es posible definir cuotas por usuario en la caché de consultas. #48284 (Robert Schulze).
- Varias correcciones para las réplicas paralelas #48433 (Nikita Mikhaylov).
- Se implementa la replicación zero-copy (una funcionalidad experimental) en discos cifrados. #48741 (Vitaly Baranov).
Mejora
- Se aumenta el valor predeterminado de
connect_timeout_with_failover_msa 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
Icebergfuncione con datos no particionados. - Soporte para la versión v2 del formato deIceberg(anteriormente solo se admitía la v1) - Soporte para la lectura de datos particionados enDeltaLake/Hudi- Lectura más rápida de los metadatos deDeltaLakemediante el uso de los archivos de checkpoint de Delta - Se corrigieron lecturas incorrectas deHudi: 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 paraIceberg/DeltaLake/Hudiusando 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_msde forma predeterminada. #47229 (Kruglov Pavel). - Se admiten las secciones de configuración
keeper/keeper_servercomo alternativa azookeeper. 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
bitCountadmite los tipos de datosFixedStringyString. #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_credentialspara 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 paraORC. #48126 (Kruglov Pavel). - Se agregan las columnas
perform_ttl_move_on_insertyload_balancinga la tablasystem.storage_policies, y se modifica el tipo de la columnavolume_typeaEnum8. #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
Mapcomo 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 tablasKeeperMap. #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_keypara mantener la compatibilidad (establezcacheck_dictionary_primary_key =falsepara 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_filtersyadditional_result_filteren el nuevo planificador. Además, se añadió una entrada en la documentación paraadditional_result_filter. #48405 (Dmitry Novik). parseDateTimeahora 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
--usery--passwordprevalecen sobre las variables de entornoCLICKHOUSE_USERyCLICKHOUSE_PASSWORD. Cierra #38909. #48440 (Nikolay Degterinsky). - Se añadieron reintentos durante la carga de partes de datos en tablas
MergeTreeen caso de errores que permiten reintento. #48442 (Anton Popov). - Se añadió compatibilidad con los tipos de datos
Date,Date32,DateTimeyDateTime64para las funcionesarrayMin,arrayMaxyarrayDifference. 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 TABLEcon el mismo significado queSHOW 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_entryparaReplicatedMergeTree, que permite limitar el número de comandos de mutación por cada entradaMUTATE_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_sizeen 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
nameypart_nameensystem.partsysystem.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-threadsen 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
LineAsStringfuncionaba 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
toTimeZonedevuelve 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
Memorycon 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
groupArrayahora 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
authen 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
detachedignorada con zero copy replication #48862 (Michael Lex). - Se corrige la lectura de una columna
Date32de Parquet/Arrow como una columna distinta deDate32#48864 (Kruglov Pavel). - Se corrige el error
UNKNOWN_IDENTIFIERal 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
DELETEestán listas para producción y habilitadas de forma predeterminada. La consultaDELETEpara tablas MergeTree ahora está disponible de forma predeterminada. - El comportamiento de las funciones
*domain*RFCynetlocha 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 enarrayIntersect. Las funciones de agregación estadísticas que involucran momentos (comocorro variosTTest) usaránFloat64como representación interna (antes de este cambio usabanDecimal128, pero no tenía sentido), y estas funciones pueden devolvernanen lugar deinfen caso de varianza infinita. Algunas funciones admitían tipos de datoDecimal256, pero en versiones anteriores devolvíanDecimal128; ahora esto se ha corregido. Esto cierra #47569. Esto cierra #44864. Esto cierra #28335. #47594 (Alexey Milovidov). backup_threads/restore_threadspasan 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_keyyparallel_replicas_custom_key_filter_type. Si el clúster consta de un solo segmento con varias réplicas, se seleccionarán aleatoriamente hastamax_parallel_replicasy 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 quesample_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 asystem.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 collectionsolo 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 hacerGRANT ALL); además,show_named_collectionsya 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 aliasWIDTH_BUCKETpor compatibilidad). #42974. #46790 (avoiderboi). - Se añade la nueva función
parseDateTime/parseDateTimeInJodaSyntaxsegún la cadena de formato especificada.parseDateTimeconvierte String a DateTime con sintaxis MySQL,parseDateTimeInJodaSyntaxlo convierte con sintaxis Joda. #46815 (李扬). - Se usa
dummy UInt8como estructura predeterminada de la función de tablanull. Cierra #46930. #47006 (flynn). - Soporte para el formato de fecha con coma, como
Dec 15, 2021, en la funciónparseDateTimeBestEffort. Cierra #46816. #47071 (chen). - Se añaden las opciones de configuración
http_wait_end_of_queryyhttp_response_buffer_size, correspondientes a los parámetros de URLwait_end_of_queryybuffer_sizede 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 datosAtomicpero que todavía no se han eliminado por completo. #47364 (chen). - Se añade
INSTRcomo alias depositionCaseInsensitivepor 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 aliasstr_to_datepara 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_threadsse establecerá con el número de núcleos al iniciar el servidor (con el mismo algoritmo que se usa paramax_threads). Esto mejora la concurrencia de la ejecución definalen 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=1en la secciónSETTINGSde la fuente en la instrucciónCREATE DICTIONARY. #47986 (Vladimir C). - Optimizar el rendimiento de agregación con una clave Nullable. #45772 (LiuNeng).
- Se implementó el uso del índice
tokenbf_v1en minúscula parahasTokenOrNull,hasTokenCaseInsensitiveyhasTokenCaseInsensitiveOrNull. #46252 (ltrk2). - Optimiza las funciones
positionyLIKEal 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_queuepara 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-copierpara usarGROUP BYen lugar deDISTINCTpara 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,DictionaryyEmbeddedRocksDBsi 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_tuplede 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 predeterminadofalse, pero se establece incondicionalmente entrueal volcar logs en las tablassystem.*_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-IdyX-ClickHouse-Timezonea las respuestas de todas las consultas a través del protocolo HTTP. Anteriormente, esto solo se hacía para las consultasSELECT. #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=1para 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_versionpara 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 tablasweben 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.backupstras 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_conversionpara controlarla (habilitada de forma predeterminada). #46990 (Kruglov Pavel). - Permitir el uso de IPv4 en la función
rangepara 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
Boolen la funciónJSONType. Anteriormente, se devolvía por error el tipoNullpara los valores booleanos. #47046 (Anton Popov). - Use el parámetro
_request_bodypara 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
repeatsolo 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ónrepeatse 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
::__1de las trazas de pila. Mostrarstd::basic_string<char, ...comoStringen 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
clrspara 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 enclickhouse-compressor. Se corrigen posibles abortos y errores aritméticos enclickhouse-compressorcon estos códecs. Correcciones: https://github.com/ClickHouse/ClickHouse/discussions/47262. #47271 (Kruglov Pavel). - Añade compatibilidad con tipos
big inta la funciónrunningDifference. 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
ExpiredTokenen algunos casos extremos. Se puede controlar con la configuraciónexpiration_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
OrdinaryaAtomic; mostrar un mensaje de error más claro con instrucciones para solucionar problemas. #47487 (Alexander Tokmakov). - Añade una nueva columna
kindasystem.opentelemetry_span_log. Esta columna almacena el valor de SpanKind definido en OpenTelemetry. #47499 (Frank Chen). - Permite leer/escribir arrays anidados en formato
Protobufusando 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 soloa Array(Array(Array(UInt32))). #47650 (Kruglov Pavel). - Se añadió un modificador opcional
STRICTparaSYSTEM SYNC REPLICAque 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_limitse usa para querows_before_limit_at_leastrefleje 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
WriteBufferFromS3MicrosecondsyWriteBufferFromS3RequestsErrors. #47885 (Antonio Andelic). - Añadir las opciones
--linky--noninteractive(-y) al comando de instalación de ClickHouse. Cierra #47750. #47887 (Nikolay Degterinsky). - Se corrigió la excepción
UNKNOWN_TABLEal 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,Mapcon cualquier tipo de clave yDateTime64con cualquier precisión (no solo 3 y 6). #48119 (Kruglov Pavel). - Permitir omitir errores relacionados con valores
enumdesconocidos 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
EXPLAINen 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
clickhouseal 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ó
vectorscana 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 TABLEcon tablasReplicatedMergeTreey bases de datosAtomic. En casos poco frecuentes, podía provocar los erroresCan't get data for node /zk_path/log_pointeryThe specified key does not existsi 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
anddurante 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-localal 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 selecten la misma tablaJoin, 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
BSONEachRowcuando el tamaño del documento no es válido #47540 (Kruglov Pavel). - Mantener el error en
system.distribution_queueal ejecutarSYSTEM 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
zlibygzipdesde el almacenamientoFile#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
cidxes 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
modeque 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 argumentomodese 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_sizeafilesystem_cache_max_download_size. #45614 (Kseniia Sumarokova). - El usuario
defaultno tendrá, de forma predeterminada, permisos para el tipo de accesoSHOW NAMED COLLECTION(por ejemplo, el usuariodefaultya 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
countDigitsen conjuntos de datos realistas. Esto cierra #44518. En versiones anteriores,countDigits(0)devolvía0; ahora devuelve1, 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
StorageIcebergy la función de tablaicebergpara acceder al almacenamiento de tablas Iceberg en S3. #45384 (flynn). - Permite configurar el almacenamiento con
SETTINGS disk = '<disk_name>'(en lugar destorage_policy) y mediante la creación explícita de discos conSETTINGS disk = disk(type=s3, ...). #41976 (Kseniia Sumarokova). - Exponer los contadores
ProfileEventsensystem.part_log. #38614 (Bharat Nallan). - Ampliación del motor
ReplacingMergeTreeexistente para permitir inserciones duplicadas. Combina la potencia deReplacingMergeTreeyCollapsingMergeTreeen 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óncovarSampycovarPopson similares acorr, también se añadencovarSampMatrixycovarPopMatrix. @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_BINARYen Arrow yFIXED_LENGTH_BYTE_ARRAYenParquet, que se corresponden conFixedString. Se añaden las Settingsoutput_format_parquet_fixed_string_as_fixed_byte_array/output_format_arrow_fixed_string_as_fixed_byte_arraypara controlar el tipo de salida predeterminado deFixedString. Cierra #45326. #45340 (Kruglov Pavel). - Se añadió una nueva columna
last_exception_timea 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
JodaTimepara ‘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
finalpara aplicar implícitamente el modificadorFINALa todas las tablas. #40945 (Arthur Passos). - Se agregaron las funciones
arrayPartialSortyarrayPartialReverseSort. #46296 (Joanna Hulboj). - El nuevo parámetro HTTP
client_protocol_versionpermite 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 SparkREGEXP_EXTRACT, por compatibilidad. Es similar a la función existenteextract. #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
Parquetutilizando un lector por lotes. #45878 (LiuNeng). - Se añade el nuevo método
io_uringparalocal_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 predeterminadopread. #38456 (Saulius Valatka). - Reescritura de funciones de agregación que tienen la expresión
ifcomo 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
multiIfmediante la ejecución columnar, con una aceleración de 2,3x. #45296 (李扬). - Añadir una vía rápida para la función
positioncuando la subcadena buscada está vacía. #45382 (李扬). - Se habilita la optimización
query_plan_remove_redundant_sortingde 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
SELECTcortas que leen de tablas con una gran cantidad de columnasArray/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
_party_partition_idsean de tipoLowCardinality(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_writepara 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_statusresponderá 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
sumy 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_distincten lo que respecta a las cláusulas DISTINCT. Se puede habilitar mediante la configuraciónquery_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_policypara seleccionar el algoritmo de programación (round_robinoshortest_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
wheremoviendo la expresión de la clave de ordenación aprewherepara consultas confinal. #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_sizepara 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
Gorillaen columnas de tipo distinto deFloat*. #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_treese 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_syncaalter_sync. #45659 (Antonio Andelic). - La función de tabla
generateRandomy el motor ahora admiten tipos de datosLowCardinality. Esto resulta útil para hacer pruebas; por ejemplo, puede escribirINSERT 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 sistemasync. #8921. #45685 (DR). - Agrega una nueva configuración de S3
allow_head_object_request. Esta PR hace opcional el uso de la solicitudGetObjectAttributesen lugar deHeadObject, 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.xmle 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_filesse dividió en dos:num_files(para BACKUP) yfiles_read(para RESTORE). La columnaprocessed_files_sizese dividió en dos:total_size(para BACKUP) ybytes_read(para RESTORE). #45800 (Vitaly Baranov). - Se añadió compatibilidad con la consulta
SHOW ENGINESpor 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_dependenciespara comprobar las dependencias referenciales al ejecutarDROP TABLE. Este PR resuelve #38326. #45936 (Vitaly Baranov). - Corregir
tupleElementpara que devuelvaNullsi recibe un argumentoNull. 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
Logadmite la configuración destorage_policy. Cierra #43421. #46044 (flynn). - Mejora del formato
JSONColumnscuando 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,leftPadUTF8yrightPadUTF8, el segundo argumentolengthdebe 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, comoarrayResize,substring, etc. #46103 (李扬). - Se corrigió una aserción en la función
welchTTesten 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 destudentTTestpara 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_partsytotal_marksasystem.tablesen 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_defaultestá 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_credentialsse establece entruey 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
formatDateTimecon 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_FORMATes un alias deformatDateTime. 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
ProfileEventsyCurrentMetricssobre las tareas de callback de las réplicas paralelas (tablass3ClusteryMergeTree). #46313 (Alexey Milovidov). - Añade soporte para
DELETEyUPDATEen tablas que usan el motor de almacenamientoKeeperMap. #46330 (Antonio Andelic). - Se permite escribir consultas RENAME con parámetros de consulta. Resuelve #45778. #46407 (Nikolay Degterinsky).
- Corrige las consultas
SELECTparametrizadas con el transformadorREPLACE. 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_timea 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-watchdogreinicie el proceso hijo. Esto no tiene mucha utilidad. #46312 (Alexey Milovidov). - Si la variable de entorno
CLICKHOUSE_DOCKER_RESTART_ON_EXITestá configurada en 1, el contenedor de Docker ejecutaráclickhouse-servercomo 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_msorabbitmq_max_block_sizeenStorageRabbitMQ. 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.limitByOffseten lugar deselect_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_kinda la tablasystem.processesy a la consultaSHOW PROCESSLIST. Elimina el código duplicado. Esto corrige un error: el parámetro de configuración globalmax_concurrent_select_queriesno se aplicaba a las consultas con cadenasINTERSECToEXCEPT. #45872 (Alexey Milovidov). - Se corrigió un fallo en la función
stochasticLinearRegressionque provocaba un cierre inesperado. Detectado por WingFuzz. #45985 (Nikolai Kochetov). - Se corrige un fallo en las consultas
SELECTcon los modificadoresINTERSECTyEXCEPTque leen datos de tablas con columnas dispersas activadas (controlado por la configuraciónratio_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_joincon 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 UNFREEZEcon la excepciónCANNOT_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_ERRORen las inserciones asíncronas con datos no válidos enviados en formatoVALUES. #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_selectestá habilitado. #46381 (Kruglov Pavel). - Se corrigen consultas como
ALTER TABLE ... UPDATE nested.arr1 = nested.arr2 ..., dondearr1yarr2son campos de la misma columnaNested. #46387 (Anton Popov). - Es posible que el planificador no pueda programar una tarea. Si esto ocurre, debe abortarse por completo el MulityPartUpload y
UploadHelperdebe esperar a las tareas ya programadas. #46451 (Dmitry Novik). - Corrige PREWHERE para Merge con diferentes tipos predeterminados (corrige algunos
NOT_FOUND_COLUMN_IN_BLOCKcuando el tipo predeterminado de la columna es distinto; también permitePREWHEREcuando 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
diskse especificó a nivel de consulta, perostorage_policyse especificó en la sección Settings de configuración de MergeTree.disksobrescribirá la configuración del archivo de configuración. #46533 (Kseniia Sumarokova). - Se corrige el procesamiento no válido del argumento constante
LowCardinalityen la funciónarrayMap. Este error podía provocar un segfault en la compilación release y el error lógicoBad casten 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 DISKpasa a no tener efecto. #44647 (alesapin). - La opción
PREALLOCATEpara los diccionariosHASHED/SPARSE_HASHEDpasa a no tener efecto. #45388 (Azat Khuzhin). Ya no aporta ventajas significativas. - Se prohíbe el códec
Gorillaen 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
*MergeTreecreadas 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
GetObjectAttributesen lugar de la solicitudHeadObjectpara 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 solicitudGetObjectAttributes. - 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, comoAsia/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
DateTimecon el estilo de Joda-Time. Consulte la documentación de Joda-Time. #43818 (李扬). - Se implementó un formateador de fracciones de segundo (
%f) paraformatDateTime. #44060 (ltrk2). #44497 (Alexander Gololobov). - Se agregó la función
agepara 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
Nullpara 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 motorkafka_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
NestedcomoListdeStructen formatoCapnProto. Lectura y escritura deDecimal32/64comoInt32/64. Cierra #43319. #43379 (Kruglov Pavel). - Se añadió una columna
message_format_stringasystem.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 datosReplicated. 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
S3y la función de tablas3cuando hay una gran cantidad de archivos pequeños. Ahora las opcionesremote_filesystem_read_methodyremote_filesystem_read_prefetchsurten efecto al leer desde el almacenamientoS3. #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 = xNporexpr IN (x1, ..., xN)cuandoexpres una columnaLowCardinality. En este caso, se ignora la configuraciónoptimize_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.replicasobtenga 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_parsingysupports_parallel_formattinga la tablasystem.formatspara 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
selectincluye columnas virtuales; esto corrige el posible errorBlock structure mismatchonumber 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_distinctcon respecto a las cláusulasORDER 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 serNullable(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_limitpara 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_stringestá habilitado. #44546 (Kruglov Pavel). - Se agregó una configuración a nivel de usuario
database_replicated_allow_replicated_engine_argumentsque permite impedir la creación de tablasReplicatedMergeTreecon argumentos enDatabaseReplicated. #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
keytabde la secciónkerberosde 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_stringsde 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
Avrode 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
Replicatedse 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_numbersno conservaba el contador entre bloques. Cierra #44815. #44832 (flynn). - No reportar errores en
system.errorscuando 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
adduserde los paquetes, porque no la usamos. Esto corrige #44934. #45011 (Alexey Milovidov). - La biblioteca
SQLitese 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
EPHEMERALen 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
INcon argumentos constantes se utilizaba como argumento constante junto conLowCardinality. 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
sumMapFilteredno 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 CLUSTERno válidas funcionaban de forma inesperada si no se especificaba un nombre de clúster. Se ha corregido; ahora las consultas no válidas lanzanSYNTAX_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
barusaba 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_ERRORal ejecutar consultasEXPLAIN AST INSERTcon 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
DEFAULTen la sentenciaCREATE TABLE. El segundo argumento de la funciónin(o el argumento derecho del operadorIN) 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 timeno recuperaba los bloques asíncronos. #44651 (Han Fei). - Se corrige
LOGICAL_ERRORThe top step of the right pipeline should be ExpressionStepal usar JOIN con subconsulta, UNION y TOTALS. Corrige #43687. #44673 (Nikolai Kochetov). - Se evitó la excepción
std::out_of_rangeen el motor de tabla Executable. #44681 (Kruglov Pavel). - No aplicar
optimize_syntax_fuse_functionsa 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
fsyncen 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.partsosystem.parts_columnsmientras se movían partes entre discos. Introducido en #41145. #44809 (Alexey Milovidov). - Corrige el error
Context has expiredque podía producirse con la optimización de proyecciones habilitada. Puede reproducirse en consultas con funciones específicas, comodictHas/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 diccionarioLowCardinalitydesde 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_insertsi 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 subqueryen consultas conUNION. Corrige #44866. #44920 (Nikolai Kochetov). - El retraso de
INSERTpuede calcularse incorrectamente, lo que puede hacer que siempre se use el ajustemax_delay_to_insertcomo retraso en lugar del valor correcto. Se utiliza la fórmula simplemax_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-dataen 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_HASHEDpara que las columnas de rango se cuenten como parte de la clave primaria durante las actualizaciones cuando se especificaupdate_field. Cierra #44588. #45061 (Maksim Kita). - Soluciona el error
Cannot capture columnen el argumento capturadoLowCardinalityde 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
SELECTen motores KV (p. ej., KeeperMap, EmbeddedRocksDB) al usarINen 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
bytescomoFloat. #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
S3y la función de tablas3cuando ha fallado la solicitudListObject. #45371 (Anton Popov). - Se corrige la excepción de
SELECT ... FROM system.dictionariescuando 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_treehabilitado en caso de que se produzca una excepción enThreadPool::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).