Saltar al contenido principal

Tabla de contenidos

Lanzamiento de ClickHouse v24.12, 2024-12-19
Lanzamiento de ClickHouse v24.11, 2024-11-26
Lanzamiento de ClickHouse v24.10, 2024-10-31
Lanzamiento de ClickHouse v24.9, 2024-09-26
Lanzamiento de ClickHouse v24.8 LTS, 2024-08-20
Lanzamiento de ClickHouse v24.7, 2024-07-30
Lanzamiento de ClickHouse v24.6, 2024-07-01
Lanzamiento de ClickHouse v24.5, 2024-05-30
Lanzamiento de ClickHouse v24.4, 2024-04-30
Lanzamiento de ClickHouse v24.3 LTS, 2024-03-26
Lanzamiento de ClickHouse v24.2, 2024-02-29
Lanzamiento de ClickHouse v24.1, 2024-01-30
Registro de cambios de 2023

Lanzamiento de ClickHouse 24.12, 2024-12-19. Presentación, Video

Cambio incompatible con versiones anteriores

  • Las funciones greatest y least ahora ignoran los valores de entrada NULL, mientras que antes devolvían NULL si alguno de los argumentos era NULL. Por ejemplo, SELECT greatest(1, 2, NULL) ahora devuelve 2. Esto hace que el comportamiento sea compatible con PostgreSQL, pero al mismo tiempo rompe la compatibilidad con MySQL, que devuelve NULL. Para conservar el comportamiento anterior, establezca la SETTING least_greatest_legacy_null_behavior (valor predeterminado: false) en true. #65519 #73344 (kevinyhzou).
  • Una nueva integración de MongoDB pasa a ser la predeterminada. Los usuarios que prefieran usar el driver heredado de MongoDB (basado en el driver de Poco) pueden habilitar la SETTING del servidor use_legacy_mongodb_integration. #73359 (Kirill Nikiforov.

Nueva funcionalidad

  • Los tipos JSON/Dynamic/Variant pasan de funcionalidades experimentales a beta. #72294 (Pavel Kruglov). También retroportamos todas las correcciones, además de este cambio, a 24.11.
  • La evolución del schema para el formato de almacenamiento de datos Iceberg ofrece al usuario amplias opciones para modificar el schema de su tabla. El orden de las columnas, los nombres de las columnas y las extensiones de tipos simples pueden cambiarse de forma interna. #69445 (Daniil Ivanik).
  • Integración con Iceberg REST Catalog: un nuevo motor de base de datos, llamado Iceberg, que integra todo el catálogo en ClickHouse. #71542 (Kseniia Sumarokova).
  • Se añadió una caché para el índice primario de las tablas MergeTree (se puede habilitar con la configuración de tabla use_primary_key_cache). Si la carga diferida y la caché están habilitadas para el índice primario, se cargará en la caché a demanda (de forma similar a la caché de marcas) en lugar de mantenerse en memoria indefinidamente. Se añadió el precalentamiento del índice primario en inserciones/fusiones/fetches de partes de datos y al reiniciar la tabla (se puede habilitar con la configuración prewarm_primary_key_cache). Esto permite reducir el uso de memoria en tablas enormes sobre almacenamiento compartido, y lo hemos probado en tablas con más de mil billones de registros. #72102 (Anton Popov). #72750 (Alexander Gololobov).
  • Implementar el comando SYSTEM LOAD PRIMARY KEY para cargar los índices primarios de todas las partes de una tabla determinada, o de todas las tablas si no se especifica ninguna. Esto será útil para benchmarks y para evitar latencia adicional durante la ejecución de consultas. #66252 #67733 (ZAWA_ll).
  • Se añadió una consulta que permite adjuntar tablas MergeTree como ReplicatedMergeTree y viceversa: ATTACH TABLE ... AS REPLICATED y ATTACH TABLE ... AS NOT REPLICATED. #65401 (Kirill).
  • Una nueva configuración, http_response_headers, que le permite personalizar los encabezados de la respuesta HTTP. Por ejemplo, puede indicarle al navegador que muestre una imagen almacenada en la base de datos. Esto resuelve #59620. #72656 (Alexey Milovidov).
  • Se agrega la función toUnixTimestamp64Second, que convierte un DateTime64 en un valor Int64 con precisión fija de segundos, lo que permite devolver un valor negativo si la fecha es anterior a la época Unix. #70597 (zhanglistar). #73146 (Robert Schulze).
  • Se añade la nueva configuración enforce_index_structure_match_on_partition_manipulation para permitir ATTACH cuando el conjunto de proyecciones e índices secundarios de la tabla de origen sea un subconjunto del de la tabla de destino. Cierra #70602. #70603 (zwy991114).
  • Se añade la sintaxis ALTER USER {ADD|MODIFY|DROP SETTING}, ALTER USER {ADD|DROP PROFILE} y lo mismo para ALTER ROLE y ALTER PROFILE. Así, en lugar de reemplazar toda la configuración, se puede modificar. #72050 (pufit).
  • Se añadió la función arrayPRAUC, que calcula el AUC (área bajo la curva) de la curva de precisión-recall. #72073 (Emmanuel).
  • Se añade la función indexOfAssumeSorted para tipos Array. Optimiza la búsqueda cuando el array está ordenado en orden no decreciente. La mejora se aprecia en arrays muy grandes (más de 100.000 elementos). #72517 (Eric Kurbanov).
  • Permite usar un delimitador como segundo argumento opcional en la función de agregación groupConcat. #72540 (Yarik Briukhovetskyi).
  • La función translate ahora permite eliminar caracteres si el argumento from contiene más caracteres que el argumento to. Ejemplo: SELECT translate('clickhouse', 'clickhouse', 'CLICK') ahora devuelve CLICK. #71441 (shuai.xu).

Características experimentales

  • Un nuevo SETTING de MergeTree, allow_experimental_reverse_key, que permite usar el orden descendente en las claves de ordenación de MergeTree. Esto resulta útil para el análisis de series temporales, especialmente en consultas TopN. Ejemplo de uso: ENGINE = MergeTree ORDER BY (time DESC, key) - orden descendente para el campo time. #71095 (Amos Bird).

Mejora del rendimiento

  • Reordenación de JOIN. Se añadió una opción para seleccionar qué lado del join actuará como la tabla interna (build) en el plan de consulta. Esto se controla mediante query_plan_join_swap_table, que puede establecerse en auto. En este modo, ClickHouse intentará elegir la tabla con el menor número de filas. #71577 (Vladimir Cherkasov).
  • Ahora se utilizará el algoritmo parallel_hash (si procede) cuando la configuración join_algorithm esté establecida en default. Las dos alternativas anteriores (direct y hash) se seguirán teniendo en cuenta cuando no pueda usarse parallel_hash. #70788 (Nikita Taranov).
  • Se añade una opción para extraer expresiones comunes de las expresiones WHERE y ON con el fin de reducir el número de tablas hash usadas durante los JOIN. Esto resulta útil cuando la condición JOIN ON tiene partes comunes dentro de AND en distintas partes de OR. Se puede habilitar con optimize_extract_common_expressions = 1. #71537 (János Benjamin Antal).
  • Permite usar índices en SELECT cuando una columna indexada se convierte con CAST en LowCardinality(String), lo que puede ocurrir al ejecutar una consulta sobre una tabla Merge con algunas tablas que tienen String y otras LowCardinality(String). #71598 (Yarik Briukhovetskyi).
  • Durante la ejecución de consultas con réplicas paralelas y el plan local habilitado, no se realiza el análisis de índices en los workers. El coordinador elegirá los rangos que deben leer los workers basándose en el análisis de índices de su lado (en el iniciador de la consulta). Esto hace que las consultas cortas con réplicas paralelas tengan una latencia tan baja como las consultas de un solo nodo. #72109 (Igor Nikonov).
  • Se ha reducido el uso de memoria de clickhouse disks remove --recursive en discos de almacenamiento de objetos. #67323 (Kirill).
  • Se recupera la optimización para leer subcolumnas de una única columna en partes compactas de #57631. Se eliminó accidentalmente. #72285 (Pavel Kruglov).
  • Se acelera la ordenación de las columnas LowCardinality(String) al desvirtualizar las llamadas en el comparador. #72337 (Alexander Gololobov).
  • Optimizar la función argMin/argMax para algunos tipos de datos sencillos. #72350 (alesapin).
  • Se optimizó el uso de bloqueos compartidos en el memory tracker para reducir la contención entre bloqueos, lo que mejora el rendimiento en sistemas con un número muy elevado de CPU. #72375 (Jiebin Sun).
  • Se añadió una nueva configuración, use_async_executor_for_materialized_views. Permite usar ejecución asíncrona y, potencialmente, multihilo para la consulta de la vista materializada; puede acelerar el procesamiento de las vistas durante INSERT, pero también consume más memoria. #72497 (alesapin).
  • Mejora del rendimiento de la deserialización de estados de funciones de agregación (en el tipo de datos AggregateFunction y en consultas distribuidas). Ligera mejora del rendimiento del análisis del formato RowBinary. #72818 (Anton Popov).
  • División de rangos en la lectura con réplicas paralelas según el orden de la clave de la tabla para consumir menos memoria durante la lectura. #72173 (JIaQi).
  • Acelera las inserciones en MergeTree cuando hay un único valor de la clave de partición dentro del lote insertado. #72348 (alesapin).
  • Se implementó la creación paralela de tablas al restaurar desde una copia de seguridad. Antes de este PR, el comando RESTORE siempre creaba las tablas en un solo hilo, lo que podía resultar lento en el caso de copias de seguridad que contenían muchas tablas. #72427 (Vitaly Baranov).
  • Eliminar la mark cache puede llevar un tiempo considerable si es grande. Si mantenemos el mutex de Context durante este proceso, se bloquean muchas otras actividades; incluso no se pueden establecer nuevas conexiones de cliente hasta que se libere. Y, en realidad, no es necesario mantener este mutex para la sincronización; basta con tener una referencia local a la caché mediante shared ptr. #72749 (Alexander Gololobov).

Mejora

  • Se elimina la configuración allow_experimental_join_condition, por lo que las condiciones no equi quedan permitidas de forma predeterminada. #69910 (Vladimir Cherkasov).
  • La configuración del servidor (users.xml) ahora también se aplica al cliente. Resulta útil para opciones de formato, p. ej., date_time_output_format. #71178 (Michael Kolupaev).
  • Volcado automático de GROUP BY/ORDER BY a disco según el uso de memoria del servidor/usuario. Se controla con los ajustes de consulta max_bytes_ratio_before_external_group_by/max_bytes_ratio_before_external_sort. #71406 (Azat Khuzhin).
  • Se añade una nueva lógica de cancelación: CancellationChecker comprueba los tiempos de espera de cada consulta iniciada y las detiene una vez agotado el tiempo de espera. #69880 (Yarik Briukhovetskyi).
  • Se admite ALTER de Object a JSON, lo que significa que puedes migrar fácilmente desde el tipo Object obsoleto. #71784 (Pavel Kruglov).
  • Permite valores desconocidos en set que no están presentes en Enum. Corrige #72662. #72686 (zhanglistar).
  • Añade compatibilidad con el operador de búsqueda de cadenas (p. ej., LIKE) para el tipo de datos Enum; implementa #72661. #72732 (zhanglistar).
  • Se aceptaron algunas consultas ALTER USER que no tenían sentido. Corrige #71227. #71286 (Arthur Passos).
  • Se respeta prefer_locahost_replica al generar el plan para INSERT ... SELECT distribuido. #72190 (filimonov).
  • Azure incumplió la especificación de Iceberg al etiquetar por error Iceberg v1 como Iceberg v2. El problema se describe aquí. Azure Iceberg Writer crea archivos de metadatos de Iceberg (así como archivos manifest) que incumplen las especificaciones. Ahora intentamos leer metadatos en formato Iceberg v1 con el lector de v2 (porque los escriben de esta manera), y se generaba un error cuando no creaban los campos correspondientes en un archivo manifest. #72277 (Daniil Ivanik).
  • Ahora se permite CREATE MATERIALIZED VIEW con UNION [ALL] en la consulta. El comportamiento es el mismo que en una vista materializada con JOIN: solo la primera tabla de la expresión SELECT actuará como desencadenante del insert; todas las demás tablas se ignorarán. Sin embargo, si hay varias referencias a la primera tabla (por ejemplo, UNION consigo misma), todas ellas se procesarán como el bloque de datos insertado. #72347 (alesapin).
  • Se añadió la validación de la consulta cuando ClickHouse se utiliza como origen para un diccionario. #72548 (Alexey Katsman).
  • Asegurar que ClickHouse detecte los cambios de ZooKeeper al recargar la configuración. #72593 (Azat Khuzhin).
  • Mejor estimación del uso de memoria de las marks en caché para reducir el uso total de memoria de la caché. #72630 (Antonio Andelic).
  • Añade una nueva métrica StartupScriptsExecutionState. La métrica puede tener tres valores: 0 = los scripts de inicio todavía no han terminado, 1 = los scripts de inicio se ejecutaron correctamente, 2 = los scripts de inicio fallaron. Necesitamos esta métrica porque debemos saber si los scripts de inicio se están ejecutando correctamente en la nube, especialmente después de publicar nuevas versiones de las configuraciones base. #72637 (Miсhael Stetsyuk).
  • Agrega la nueva métrica MergeTreeIndexGranularityInternalArraysTotalSize a system.metrics. Esta métrica es necesaria para encontrar las instancias con conjuntos de datos enormes propensas a un alto
  • Se añaden reintentos a la creación de una tabla replicada. #72682 (Vitaly Baranov).
  • Se añadió total_bytes_with_inactive a system.tables para contabilizar el total de bytes de las partes inactivas. #72690 (Kai Zhu).
  • Se añaden ajustes de MergeTree a system.settings_changes. #72694 (Raúl Marín).
  • Se admite el tipo JSON en la función notEmpty. #72741 (Pavel Kruglov).
  • Se admite el análisis del error de GCS S3 AuthenticationRequired. #72753 (Vitaly Baranov).
  • Se admite el tipo Dynamic en las funciones ifNull y coalesce. #72772 (Pavel Kruglov).
  • Se admite Dynamic en las funciones toFloat64/touInt32/etc. #72989 (Pavel Kruglov).
  • Añadir los ajustes de solicitud de S3 http_max_fields, http_max_field_name_size, http_max_field_value_size y utilizarlos al analizar las respuestas de la API de S3 durante la creación de una copia de seguridad o la restauración. #72778 (Vitaly Baranov).
  • Eliminar los metadatos de la tabla en Keeper en Storage S3(Azure)Queue solo después de que se haya eliminado la última tabla que usaba esos metadatos. #72810 (Kseniia Sumarokova).
  • Se añadieron los eventos de perfil JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCount. #72842 (Vladimir Cherkasov).
  • Se admite el uso de subcolumnas en la clave de ordenación de MergeTree y en los índices de salto. #72644 (Pavel Kruglov).

Corrección de errores (comportamiento erróneo visible para el usuario en una versión estable oficial)

  • Corrige posibles partes intersectadas en MergeTree (después de que fallara una operación para mover una parte al directorio detached, posiblemente debido a una operación en el almacenamiento de objetos). #70476 (Azat Khuzhin).
  • Corrige la detección de un error cuando el nombre de una tabla es demasiado largo. Proporciona un diagnóstico que indica la longitud máxima permitida. Añade una nueva función getMaxTableNameLengthForDatabase. #70810 (Yarik Briukhovetskyi).
  • Se corrigieron los procesos zombi tras una caída de clickhouse-library-bridge (este programa permite ejecutar bibliotecas inseguras). #71301 (MikhailBurdukov).
  • Corrige el error NoSuchKey durante la reversión de una transacción cuando falla la creación de un directorio en el disco plain_rewritable. #71439 (Julia Kartseva).
  • Se corrigió la serialización de los valores Dynamic en los formatos JSON Pretty. #71923 (Pavel Kruglov).
  • Se añadió el nombre de formato inferido a la consulta CREATE en los motores File/S3/URL/HDFS/Azure. Anteriormente, el nombre del formato se infería cada vez que se reiniciaba el servidor y, si se eliminaban los archivos de datos especificados, esto provocaba errores durante el arranque del servidor. #72108 (Pavel Kruglov).
  • Se corrigen errores al usar una UDF en la expresión ON de un join con el analizador antiguo. #72179 (Raúl Marín).
  • Corrige algunos pequeños errores en StorageObjectStorage. Es necesario habilitar use_hive_partitioning de forma predeterminada. #72185 (Yarik Briukhovetskyi).
  • Se corrige un error por el que min_age_to_force_merge_on_partition_only se quedaba atascado intentando fusionar repetidamente la misma partición, que ya se había fusionado en una sola parte, y no fusionaba las particiones que tenían varias partes. #72209 (Christoph Wurm).
  • Se corrigió un fallo en SimpleSquashingChunksTransform que se producía en raras ocasiones al procesar columnas dispersas. #72226 (Vladimir Cherkasov).
  • Se corrigió una condición de carrera en GraceHashJoin que podía provocar la ausencia de algunas filas en el resultado del join. #72233 (Nikita Taranov).
  • Se corrigieron las consultas ALTER DELETE con la columna materializada _block_number (si está habilitada la configuración enable_block_number_column). #72261 (Anton Popov).
  • Se corrigió una condición de carrera de datos al llamar a ColumnDynamic::dumpStructure() de forma concurrente, p. ej., en el constructor de ConcurrentHashJoin. #72278 (Nikita Taranov).
  • Corrige un posible LOGICAL_ERROR con columnas duplicadas en ORDER BY ... WITH FILL. #72387 (Vladimir Cherkasov).
  • Se corrigieron incompatibilidades de tipos en varios casos tras aplicar optimize_functions_to_subcolumns. #72394 (Anton Popov).
  • Usa AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE en lugar de AWS_CONTAINER_AUTHORIZATION_TOKEN_PATH. Soluciona #71074. #72397 (Konstantin Bogdanov).
  • Corrige un fallo al analizar las consultas BACKUP DATABASE db EXCEPT TABLES db.table. #72429 (Konstantin Bogdanov).
  • No permitir crear Variant vacíos. #72454 (Pavel Kruglov).
  • Corrige el formato inválido de result_part_path en system.merges. #72567 (Konstantin Bogdanov).
  • Se corrige el análisis sintáctico de un patrón glob con un solo elemento (como {file}). #72572 (Konstantin Bogdanov).
  • Se corrige la generación de consultas para el servidor seguidor en el caso de una consulta distribuida con ARRAY JOIN. Corrige #69276. #72608 (Dmitry Novik).
  • Se corrige un error por el que DateTime64 IN DateTime64 no devolvía nada. #72640 (Yarik Briukhovetskyi).
  • Se corrigieron metadatos inconsistentes al añadir una nueva réplica a una base de datos Replicated que tiene una tabla creada con flatten_nested=0. #72685 (Alexander Tokmakov).
  • Se corrige la configuración avanzada de SSL para la comunicación interna de Keeper. #72730 (Antonio Andelic).
  • Corrige el error “No such key” en el modo no ordenado de S3Queue con la configuración tracked_files_limit inferior a la tasa de aparición de archivos en S3. #72738 (Kseniia Sumarokova).
  • Se corrigió la excepción lanzada en RemoteQueryExecutor cuando un usuario no existe localmente. #72759 (Andrey Zvonov).
  • Se corrigieron las mutaciones con la columna materializada _block_number (si está habilitada la configuración enable_block_number_column). #72854 (Anton Popov).
  • Se corrige la copia de seguridad/restauración con un disco regrabable simple cuando hay archivos vacíos en la copia de seguridad. #72858 (Kseniia Sumarokova).
  • Cancelar correctamente las inserciones en DistributedAsyncInsertDirectoryQueue. #72885 (Antonio Andelic).
  • Se corrigió un fallo al analizar datos incorrectos en columnas dispersas (puede ocurrir cuando está habilitada la configuración enable_parsing_to_custom_serialization). #72891 (Anton Popov).
  • Corrige un posible cierre inesperado durante la restauración de una copia de seguridad. #72947 (Kseniia Sumarokova).
  • Se corrigió un error en el método JOIN parallel_hash que podía producirse cuando una consulta tenía una condición compleja en la cláusula ON con filtros de desigualdad. #72993 (Nikita Taranov).
  • Usar la configuración de formato predeterminada durante el análisis de JSON para evitar errores de deserialización. #73043 (Pavel Kruglov).
  • Se corrige un fallo en las transacciones con almacenamiento no compatible. #73045 (Raúl Marín).
  • Se corrige la posible sobreestimación del seguimiento de memoria (cuando la diferencia entre MemoryTracking y MemoryResident seguía aumentando). #73081 (Azat Khuzhin).
  • Comprobación de claves JSON duplicadas durante el análisis de Tuple. Antes, esto podía provocar un error lógico Invalid number of rows in Chunk durante el análisis. #73082 (Pavel Kruglov).

Mejora en compilación/pruebas/empaquetado

  • Todas las pequeñas utilidades que antes se almacenaban en la carpeta /utils y requerían compilación manual a partir del código fuente ahora forman parte del paquete principal de ClickHouse. Esto cierra: #72404. #72426 (Nikita Mikhaylov).
  • Se revierte la eliminación de /etc/systemd/system/clickhouse-server.service introducida en la versión 22.3 #39323. #72259 (Mikhail f. Shiryaev).
  • Se dividieron las unidades de traducción grandes para evitar fallos de compilación debidos a limitaciones de memoria/CPU. #72352 (Yakov Olkhovskiy).
  • OSX: compilación con soporte para ICU, lo que habilita collations, conversiones de juegos de caracteres y otras funciones de localización. #73083 (Raúl Marín).

Lanzamiento de ClickHouse 24.11, 2024-11-26. Presentación, Vídeo

Cambio incompatible con versiones anteriores

  • Se eliminan las tablas del sistema generate_series y generateSeries. Se añadieron aquí por error: #59390. #71091 (Alexey Milovidov).
  • Se elimina StorageExternalDistributed. Cierra #70600.#71176 (flynn).
  • Los motores de tabla Kafka, NATS y RabbitMQ ahora están cubiertos por sus propios permisos en la jerarquía SOURCES. Añada permisos a cualquier usuario de base de datos no predeterminado que cree tablas con estos tipos de motor. #71250 (Christoph Wurm).
  • Se comprueba la consulta completa de mutación antes de ejecutarla (incluidas las subconsultas). Esto evita ejecutar accidentalmente una consulta no válida y acumular mutaciones inservibles que bloqueen mutaciones válidas. #71300 (Christoph Wurm).
  • Se cambia el nombre de la SETTING de la caché del sistema de archivos skip_download_if_exceeds_query_cache a filesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit. #71578 (Kseniia Sumarokova).
  • Se elimina la compatibilidad con argumentos Enum, así como UInt128 y UInt256, en deltaSumTimestamp. Se elimina también la compatibilidad con Int8, UInt8, Int16 y UInt16 en el segundo argumento (“timestamp”) de deltaSumTimestamp. #71790 (Alexey Milovidov).
  • Al recuperar datos directamente de un Diccionario mediante el almacenamiento Dictionary, la función de tabla dictionary o un SELECT directo del propio diccionario, ahora basta con tener el permiso SELECT o el permiso dictGet sobre el diccionario. Esto se ajusta a intentos anteriores de evitar omisiones de ACL: https://github.com/ClickHouse/ClickHouse/pull/57362 y https://github.com/ClickHouse/ClickHouse/pull/65359. Además, hace que este último cambio sea compatible con versiones anteriores. #72051 (Nikita Mikhaylov).

Funcionalidad experimental

  • Implementa allow_feature_tier como un conmutador global para deshabilitar todas las funcionalidades experimentales/beta. #71841 #71145 (Raúl Marín).
  • Corrige el posible error No such file or directory debido a símbolos especiales no escapados en archivos de subcolumnas JSON. #71182 (Pavel Kruglov).
  • Admite ALTER de String a JSON. Este PR también cambia la serialización de los tipos JSON y Dynamic a la nueva versión V2. La versión anterior, V1, todavía puede usarse habilitando la SETTING merge_tree_use_v1_object_and_dynamic_serialization (puede usarse durante la actualización para poder revertir la versión sin problemas). #70442 (Pavel Kruglov).
  • Implementa un CAST simple de Map/Tuple/Object al nuevo JSON mediante serialización/deserialización a partir de una cadena JSON. #71320 (Pavel Kruglov).
  • No permite los tipos Variant/Dynamic en ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY de forma predeterminada porque pueden dar lugar a resultados inesperados. #69731 (Pavel Kruglov).
  • Prohíbe los tipos Dynamic/Variant en las funciones min/max para evitar confusiones. #71761 (Pavel Kruglov).

Nueva funcionalidad

  • Se añadió sintaxis SQL para describir la programación de cargas de trabajo y la gestión de recursos. https://clickhouse.com/docs/operations/workload-scheduling. #69187 (Sergei Trifonov).
  • Un nuevo tipo de dato, BFloat16, representa números de punto flotante de 16 bits con exponente de 8 bits, signo y mantisa de 7 bits. Esto cierra #44206. Esto cierra #49937. #64712 (Alexey Milovidov).
  • Se añadió la consulta CHECK GRANT para comprobar si al usuario/rol actual se le ha concedido el privilegio específico y si la tabla/columna correspondiente existe en memoria. #68885 (Unalian).
  • Se añadieron las funciones de tabla iceberg[S3;HDFS;Azure]Cluster, deltaLakeCluster, hudiCluster. #72045 (Mikhail Artemenko).
  • Se añadió la posibilidad de establecer usuario/contraseña en http_handlers (para dynamic_query_handler/predefined_query_handler). #70725 (Azat Khuzhin).
  • Se añadió compatibilidad con la cláusula STALENESS en el operador ORDER BY WITH FILL. #71151 (Mikhail Artemenko).
  • Se permite que cada método de autenticación tenga su propia fecha de expiración; se elimina de la entidad de usuario. #70090 (Arthur Passos).
  • Se añadieron las nuevas funciones parseDateTime64, parseDateTime64OrNull y parseDateTime64OrZero. En comparación con la función existente parseDateTime (y sus variantes), devuelven un valor de tipo DateTime64 en lugar de DateTime. #71581 (kevinyhzou).

Mejora del rendimiento

  • Se optimizó el uso de memoria para los valores de granularidad del índice cuando la granularidad es constante para la parte. Se añadió la posibilidad de seleccionar siempre una granularidad constante para la parte (ajuste use_const_adaptive_granularity), lo que ayuda a garantizar que siempre se optimice en memoria. Esto ayuda en cargas de trabajo grandes (billones de filas en almacenamiento compartido) a evitar el crecimiento constante del uso de memoria debido a los metadatos (valores de granularidad del índice) de las partes de datos. #71786 (Anton Popov).
  • Ahora ya no copiamos las columnas de los bloques de entrada para join_algorithm = 'parallel_hash' al distribuirlos entre hilos para su procesamiento en paralelo. #67782 (Nikita Taranov).
  • Se optimizó el algoritmo de fusión de Replacing para partes no superpuestas. #70977 (Anton Popov).
  • No listar las partes detached de los discos readonly y de solo escritura en las métricas y en system.detached_parts. #71086 (Alexey Milovidov).
  • No calcular las métricas asíncronas costosas de forma predeterminada. Esta funcionalidad se introdujo en #40332, pero no conviene tener una tarea en segundo plano costosa que solo necesita un solo cliente. #71087 (Alexey Milovidov).
  • Para los discos plain_rewritable: No llame a la API de almacenamiento de objetos al listar directorios, ya que puede resultar poco eficiente en costes. En su lugar, almacene en memoria la lista de nombres de archivo. Como contrapartida, aumentan el tiempo de carga inicial y la memoria necesaria para almacenar los nombres de archivo. #70823 (Julia Kartseva).
  • Mejora el rendimiento y la precisión del intervalo de recopilación de system.query_metric_log al reducir la sección crítica. #71473 (Pablo Marcos).
  • Optimización de lectura en orden mediante la generación de filas virtuales, para que se lean menos datos durante el merge sort, especialmente útil cuando existen múltiples partes. #62125 (Shichao Jin).
  • Se añadió la configuración del servidor async_load_system_database, que permite que el servidor se inicie aunque la base de datos del sistema no se haya cargado por completo. Esto permite iniciar ClickHouse más rápido si hay muchas tablas del sistema. #69847 (Sergei Trifonov).
  • Se añadió el parámetro --threads a clickhouse-compressor, lo que permite comprimir datos en paralelo. #70860 (Alexey Milovidov).
  • Se añadió un ajuste prewarm_mark_cache que habilita la carga de marks en la mark cache durante inserts, merges, fetches de partes y al arrancar la tabla. #71053 (Anton Popov).
  • Reducir al tamaño necesario el array index_granularity en memoria para disminuir el uso de memoria de la familia de motores de tabla MergeTree. #71595 (alesapin).
  • Se desactiva la configuración boundary_alignment de la caché del sistema de archivos para lecturas que no son de disco, lo que mejora el rendimiento de lectura de archivos remotos independientes con caché. #71827 (Kseniia Sumarokova).
  • Consultas como SELECT * FROM table LIMIT ... antes cargaban índices de partes aunque no se utilizaran. #71866 (Alexander Gololobov).
  • Se habilita parallel_replicas_local_plan de forma predeterminada. La creación de un plan local completo en el iniciador de la consulta mejora el rendimiento de las réplicas paralelas con un menor consumo de recursos y ofrece más posibilidades de aplicar optimizaciones de consultas. #70171 (Igor Nikonov).

Mejora

  • Permitir usar clickhouse con un argumento de archivo, como ch queries.sql. #71589 (Raúl Marín).
  • El formato Vertical (que también se activa cuando finalizas tu consulta con \G) incorpora las características de los formatos Pretty, como: - resaltar los separadores de miles en los números; - mostrar una ayuda legible para los números. #71630 (Alexey Milovidov).
  • Propagar roles de usuario externos desde el nodo que origina la consulta a otros nodos del clúster. Útil cuando solo ese nodo tiene acceso al autenticador externo (como LDAP). #70332 (Andrey Zvonov).
  • Se añadieron los alias anyRespectNulls, firstValueRespectNulls y anyValueRespectNulls para la función de agregación any. También se añadieron los alias anyLastRespectNulls y lastValueRespectNulls para la función de agregación anyLast. Esto permite usar una sintaxis más natural basada únicamente en camel case, en lugar de una sintaxis mixta de camel case y guion bajo; por ejemplo: SELECT anyLastRespectNullsStateIf en lugar de anyLast_respect_nullsStateIf. #71403 (Peter Nguyen).
  • Se añadió el parámetro de configuración date_time_utc, lo que permite que el formato de registros JSON admita fecha y hora UTC en formato RFC 3339/ISO8601. #71560 (Ali).
  • Se añadió un nuevo tipo de header para los endpoints de S3 para la autenticación de usuarios (access_header). Esto permite obtener un header de acceso con la prioridad más baja, que será sobrescrito por access_key_id desde cualquier otra fuente (por ejemplo, un esquema de tabla o una named collection). #71011 (MikhailBurdukov).
  • Las funciones de orden superior con arrays constantes y argumentos capturados constantes devolverán valores constantes. #58400 (Alexey Milovidov).
  • Los nombres de los pasos del plan de consulta (EXPLAIN PLAN json=1) y los nombres de los procesadores del pipeline (EXPLAIN PIPELINE compact=0,graph=1) ahora tienen un ID único como sufijo. Esto permite correlacionar la salida del perfilador de procesadores y las trazas de OpenTelemetry con la salida de EXPLAIN. #63518 (qhsong).
  • Se añadió una opción para comprobar si el objeto existe después de escribirlo en Azure Blob Storage; se controla mediante la configuración check_objects_after_upload. #64847 (Smita Kulkarni).
  • Usar la base de datos Atomic de forma predeterminada en clickhouse-local. Se abordan los puntos 1 y 5 de #50647. Cierra #44817. #68024 (Alexey Milovidov).
  • Las excepciones interrumpen el protocolo HTTP para avisar al cliente de un error. #68800 (Sema Checherinda).
  • Informar sobre los hosts que ejecutan consultas DDL distribuidas creando replica_dir y marcando las réplicas activas en DDLWorker. #69658 (tuanpach).
  • Esperar solo a las réplicas activas en las consultas ON CLUSTER de bases de datos si distributed_ddl_output_mode está configurado como *_only_active. #69660 (tuanpach).
  • Mejor manejo de errores y cancelación de copias de seguridad y restauraciones ON CLUSTER: - Si una copia de seguridad o una restauración falla en un host, se cancelará automáticamente en los demás hosts - No deberían producirse errores extraños porque algunos hosts fallen mientras otros continúan su trabajo - Si una copia de seguridad o una restauración se cancela en un host, se cancelará automáticamente en los demás hosts - Se corrigen problemas con test_disallow_concurrency: ahora la desactivación de la concurrencia debería funcionar mejor - Las copias de seguridad y las restauraciones ahora son mucho más resistentes a las desconexiones de ZooKeeper. #70027 (Vitaly Baranov).
  • Se admite ALTER TABLE ... MODIFY/RESET SETTING ... para determinadas opciones de configuración en el almacenamiento S3Queue. #70811 (Kseniia Sumarokova).
  • Se añadió la posibilidad de recargar los certificados de cliente del mismo modo que se recargan los certificados del servidor. #70997 (Roman Antonov).
  • Hacer configurable el tamaño del historial del cliente y aumentar su tamaño predeterminado. #71014 (Jiří Kozlovský).
  • Compatibilidad con tipos booleanos en el lector nativo de Parquet. #71055 (Arthur Passos).
  • Reintentar ante más errores al interactuar con S3, como “Malformed message”. #71088 (Alexey Milovidov).
  • Se reduce el nivel de registro de algunos mensajes sobre S3. #71090 (Alexey Milovidov).
  • Se admite la escritura de archivos HDFS con espacios. #71105 (exmy).
  • Se añadieron ajustes para limitar la cantidad de tablas replicadas, diccionarios y vistas. #71179 (Kirill).
  • Usa AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE en lugar de AWS_CONTAINER_AUTHORIZATION_TOKEN si el primero está disponible. Corrige #71074. #71269 (Konstantin Bogdanov).
  • Eliminar la creación del nodo metadata_version en ZooKeeper del hilo de reinicio de ReplicatedMergeTree. El único caso en el que es necesario crear este nodo es cuando el usuario actualizó desde una versión anterior a la 20.4 directamente a otra posterior a la 24.10. ClickHouse no admite actualizaciones que abarquen más de un año, por lo que deberíamos lanzar una excepción y pedir al usuario que actualice de forma gradual, en lugar de crear el nodo. #71385 (Miсhael Stetsyuk).
  • Se añaden los dashboards por host Overview (host) y Cloud overview (host) al dashboard avanzado. #71422 (alesapin).
  • clickhouse-local usa SELECT implícito de forma predeterminada, lo que permite usarlo como una calculadora. Se ha mejorado el resaltado de sintaxis para el modo de SELECT implícito. #71620 (Alexey Milovidov).
  • Las aplicaciones de línea de comandos resaltarán la sintaxis incluso en múltiples sentencias. #71622 (Alexey Milovidov).
  • Las aplicaciones de línea de comandos devolverán códigos de salida distintos de cero cuando se produzcan errores. En versiones anteriores, la aplicación disks devolvía cero en caso de error, y otras aplicaciones devolvían cero para los errores 256 (PARTITION_ALREADY_EXISTS) y 512 (SET_NON_GRANTED_ROLE). #71623 (Alexey Milovidov).
  • Cuando se proporciona el usuario/grupo como ID, clickhouse su falla. Este parche corrige el problema para que también acepte UID:GID. #71626 (Mikhail f. Shiryaev).
  • Se permite deshabilitar el aumento del tamaño del búfer de memoria para la caché del sistema de archivos mediante la configuración filesystem_cache_prefer_bigger_buffer_size. #71640 (Kseniia Sumarokova).
  • Añade una configuración independiente, background_download_max_file_segment_size, para el tamaño máximo del segmento de archivo en las descargas en segundo plano en la caché del sistema de archivos. #71648 (Kseniia Sumarokova).
  • Ligera mejora en el análisis del tipo JSON: si el bloque actual para la ruta JSON contiene valores de varios tipos, se intenta elegir el mejor tipo probando los tipos en un orden especial de mejor esfuerzo. #71785 (Pavel Kruglov).
  • Antes, al leer desde system.asynchronous_metrics, había que esperar a que terminara la actualización concurrente. Esto puede llevar mucho tiempo si el sistema está sometido a una carga elevada. Con este cambio, siempre se pueden leer los valores recopilados previamente. #71798 (Alexander Gololobov).
  • S3Queue y AzureQueue: Establezca polling_max_timeout_ms en 10 minutos y polling_backoff_ms en 30 segundos. #71817 (Kseniia Sumarokova).
  • Actualizar HostResolver tres veces durante un período de history. #71863 (Sema Checherinda).
  • En la página HTML del panel avanzado se añadió un selector desplegable para seleccionar el panel desde la tabla system.dashboards. #72081 (Sergei Trifonov).
  • Comprobar si la base de datos predeterminada existe después de la autorización. Corrige #71097. #71140 (Konstantin Bogdanov).

Corrección de errores (comportamiento erróneo visible para el usuario en una versión estable oficial)

  • Las partes deduplicadas durante la consulta ATTACH PART ya no se quedan bloqueadas con el prefijo attaching_. #65636 (Kirill).
  • Corrección del error que provocaba que DateTime64 perdiera precisión en la función IN. #67230 (Yarik Briukhovetskyi).
  • Se corrige un posible error lógico al usar funciones con IGNORE/RESPECT NULLS en ORDER BY ... WITH FILL; cierra #57609. #68234 (Vladimir Cherkasov).
  • Se corrigieron errores lógicos poco frecuentes en las inserciones asíncronas con formato Native cuando se alcanzaba el límite de memoria. #68965 (Anton Popov).
  • Se corrigió COMMENT en CREATE TABLE para la columna EPHEMERAL. #70458 (Yakov Olkhovskiy).
  • Corrige un error lógico en JSONExtract con LowCardinality(Nullable). #70549 (Pavel Kruglov).
  • Permitir system drop replica zkpath cuando exista otra réplica con la misma ruta zk. #70642 (MikhailBurdukov).
  • Se corrige un bloqueo y una fuga de memoria en AggregateFunctionGroupArraySorted. #70820 (Michael Kolupaev).
  • Se añade la posibilidad de sobrescribir Content-Type mediante encabezados definidos por el usuario en el motor URL. #70859 (Artem Iurin).
  • Se corrige un error lógico en StorageS3Queue: “No se puede crear un nodo persistente en /processed porque ya existe”. #70984 (Kseniia Sumarokova).
  • Se corrigió un problema por el que las sesiones con nombre no se cerraban y permanecían abiertas indefinidamente en determinadas circunstancias. #70998 (Márcio Martins).
  • Se corrigió el error por el que no se tenía en cuenta la columna _row_exists en la opción de reconstrucción de la eliminación ligera de proyecciones. #71089 (Shichao Jin).
  • Se soluciona el problema AT_* is out of range al ejecutarse en Oracle Linux UEK 6.10. #71109 (Örjan Fors).
  • Se corrigió un valor incorrecto en system.query_metric_log debido a una condición de carrera inesperada. #71124 (Pablo Marcos).
  • Se corrigió el nombre incorrecto de la función de agregación quantileExactWeightedInterpolated. El error se introdujo en https://github.com/ClickHouse/ClickHouse/pull/69619. cc @Algunenano. #71168 (李扬).
  • Se corrigió la excepción bad_weak_ptr con Dynamic en la comparación de funciones. #71183 (Pavel Kruglov).
  • Comprueba que el archivo 7z que se lee esté en una máquina local. #71184 (Daniil Ivanik).
  • Se corrigió el problema por el que se ignoraban los ajustes de formato en Native format a través de HTTP y Async Inserts. #71193 (Pavel Kruglov).
  • Las consultas SELECT ejecutadas con la configuración use_query_cache = 1 ya no se rechazan si el nombre de una tabla del sistema aparece como un valor literal; por ejemplo, SELECT * FROM users WHERE name = 'system.metrics' SETTINGS use_query_cache = true; ahora funciona. #71254 (Robert Schulze).
  • Se corrige un error que provocaba un aumento del uso de memoria si enable_filesystem_cache=1, pero el disco de la configuración de almacenamiento no tenía ninguna configuración de caché. #71261 (Kseniia Sumarokova).
  • Corrige el posible error “Cannot read all data” durante la deserialización del diccionario LowCardinality desde una columna Dynamic. #71299 (Pavel Kruglov).
  • Se corrigió la limpieza incompleta del formato de salida en paralelo en el cliente. #71304 (Raúl Marín).
  • Se añadió el desescapado que faltaba en named collections. Sin esta corrección, clickhouse-server no puede iniciarse. #71308 (MikhailBurdukov).
  • Se corrigen las inserciones asíncronas con bloques vacíos mediante el protocolo nativo. #71312 (Anton Popov).
  • Se corrige el formato inconsistente del AST al conceder permisos con comodines incorrectos #71309. #71332 (pufit).
  • Añadir try/catch en los destructores de las partes de datos para evitar std::terminate. #71364 (alesapin).
  • Comprobación de tipos sospechosos y experimentales en las sugerencias de tipo de JSON. #71369 (Pavel Kruglov).
  • Iniciar también el hilo worker de memoria en sistemas operativos distintos de Linux (corrige #71051). #71384 (Alexandre Snarskii).
  • Se corrige el error Número inválido de filas en el fragmento con la columna Variant. #71388 (Pavel Kruglov).
  • Se corrige el error «la columna “attgenerated” no existe» en versiones anteriores de PostgreSQL; corrige #60651. #71396 (0xMihalich).
  • Para evitar saturar los logs del servidor, los intentos fallidos de autenticación se registran ahora con el nivel DEBUG en lugar de ERROR. #71405 (Robert Schulze).
  • Se corrige un cierre inesperado en la función de tabla mongodb al pasar argumentos incorrectos (p. ej., NULL). #71426 (Vladimir Cherkasov).
  • Se corrige un cierre inesperado con optimize_rewrite_array_exists_to_has. #71432 (Raúl Marín).
  • Se corrigió el uso del ajuste max_insert_delayed_streams_for_parallel_write en las inserciones. Anteriormente, funcionaba de forma incorrecta, lo que podía provocar un uso elevado de memoria en las inserciones que escriben datos en varias particiones. #71474 (Anton Popov).
  • Se corrige el posible error Argument for function must be constant (analyzer antiguo) en los casos en que arrayJoin aparentemente puede aparecer en la condición WHERE. Regresión introducida tras https://github.com/ClickHouse/ClickHouse/pull/65414. #71476 (Nikolai Kochetov).
  • Evita que SortCursor falle con 0 columnas (analizador antiguo). #71494 (Raúl Marín).
  • Se corrigió el error de Date32 fuera de rango causado por datos ORC no inicializados. Para obtener más información, consulta https://github.com/apache/incubator-gluten/issues/7823. #71500 (李扬).
  • Se corrige el cálculo del tamaño de la columna en la parte wide para los tipos Dynamic y JSON. #71526 (Pavel Kruglov).
  • Corrección en el analyzer cuando una consulta dentro de una vista materializada usa IN con CTE. Cierra #65598. #71538 (Maksim Kita).
  • Evita un bloqueo al usar una UDF en una restricción. #71541 (Raúl Marín).
  • Devolver 0 o el carácter predeterminado en lugar de producir un error en las funciones bitShift en caso de salirse de los límites. #71580 (Pablo Marcos).
  • Se corrigen los fallos del servidor al usar una vista materializada con ciertos motores. #71593 (Pervakov Grigorii).
  • Un ARRAY JOIN con una estructura de datos anidada, que contiene un alias a un array constante, provocaba una desreferenciación de un puntero nulo. Esto cierra #71677. #71678 (Alexey Milovidov).
  • Se corrige LOGICAL_ERROR al realizar ALTER con una tupla vacía. Esto corrige #71647. #71679 (Amos Bird).
  • No transformar el conjunto constante en los predicados sobre columnas de partición en el caso del operador NOT IN. #71695 (Eduard Karacharov).
  • Se corrigió el mensaje de error del script de inicialización de Docker para que se entienda mejor. #71734 (Андрей).
  • Se corrige CAST de LowCardinality(Nullable) a Dynamic. Anteriormente, esto podía provocar el error Bad cast from type DB::ColumnVector<int> to DB::ColumnNullable. #71742 (Pavel Kruglov).
  • Se corrige una excepción en toDayOfWeek en una condición WHERE con una clave primaria de tipo DateTime64. #71849 (Yakov Olkhovskiy).
  • Se corrigió la asignación de valores predeterminados tras el análisis en columnas dispersas. #71854 (Anton Popov).
  • Corrige el error de la función GROUPING cuando la entrada es un ALIAS en una tabla distribuida, cierra #68602. #71855 (Vladimir Cherkasov).
  • Se corrige un posible cierre inesperado al usar allow_experimental_join_condition; cierra #71693. #71857 (Vladimir Cherkasov).
  • Se corrigieron las sentencias SELECT que usan la cláusula WITH TIES y que podrían no devolver suficientes filas. #71886 (wxybear).
  • Corrige la excepción TOO_LARGE_ARRAY_SIZE provocada cuando se interpreta erróneamente que una columna evaluada con arrayWithConstant supera el límite de tamaño del array. #71894 (Udi).
  • clickhouse-benchmark reportó métricas incorrectas para consultas que tardaban más de un segundo. #71898 (Alexey Milovidov).
  • Se corrigió la condición de carrera entre el indicador de progreso y la tabla de progreso en clickhouse-client. Este problema aparece cuando se usa FROM INFILE. Se interceptan las pulsaciones de teclas durante las consultas INSERT para alternar la visualización de la tabla de progreso. #71901 (Julia Kartseva).
  • Use keepers auxiliares para la detección automática del clúster. #71911 (Anton Ivashkin).
  • Corrige el fallo en la columna rows_processed de system.s3/azure_queue_log en la versión 24.6. Cierra #69975. #71946 (Kseniia Sumarokova).
  • Se corrigió un caso en el que las funciones s3/s3Cluster podían devolver un resultado incompleto o lanzar una excepción. Esto ocurría al usar un patrón glob en la URI de S3 (como pattern/*) y cuando existía un objeto vacío con la clave pattern/ (estos objetos se crean automáticamente en la consola de S3). Además, el valor predeterminado de la configuración s3_skip_empty_files cambió de false a true. #71947 (Nikita Taranov).
  • Se corrige un fallo que provocaba un cierre inesperado en el resaltado de sintaxis de clickhouse-client. Cierra #71864. #71949 (Nikolay Degterinsky).
  • Se corrige el error Illegal type en tablas MergeTree con una función monótona binaria en ORDER BY cuando el primer argumento es constante. Corrige #71941. #71966 (Nikolai Kochetov).
  • Permitir solo consultas SELECT en EXPLAIN AST cuando se usa dentro de una subconsulta. Otros tipos de consultas provocan el error lógico: ‘Bad cast from type DB::ASTCreateQuery to DB::ASTSelectWithUnionQuery’ o Inconsistent AST formatting. #71982 (Pavel Kruglov).
  • Al insertar un registro con clickhouse-client, el cliente lee las descripciones de las columnas del servidor. Pero había un error: escribíamos las descripciones en un orden incorrecto; debería ser [statistics, ttl, settings]. #71991 (Han Fei).
  • Se corrige el formato de los comandos ALTER MOVE PARTITION ... TO TABLE ... cuando format_alter_commands_with_parentheses está habilitado. #72080 (János Benjamin Antal).
  • Corrige los joins RIGHT / FULL en consultas con réplicas paralelas. Ahora, los joins RIGHT pueden ejecutarse con réplicas paralelas (la lectura de la tabla derecha se distribuye). Los joins FULL no pueden paralelizarse entre nodos; se ejecutan localmente. #71162 (Igor Nikonov).
  • Se corrigió el problema por el que ClickHouse en contenedores de Docker imprimía “get_mempolicy: Operation not permitted” en stderr debido a restricciones en las llamadas al sistema. #70900 (filimonov).
  • Se corrigió el registro metadata_version en ZooKeeper en el hilo de reinicio en lugar de en el hilo de Attach. #70297 (Miсhael Stetsyuk).
  • Esta es una corrección para la replicación “zero-copy”, que no está admitida y se eliminará por completo. No elimine un blob cuando haya nodos que lo estén usando en ReplicatedMergeTree con replicación zero-copy. #71186 (Antonio Andelic).
  • Esta es una corrección para la replicación “zero-copy”, que no es compatible y se eliminará por completo. Se adquiere un bloqueo compartido zero-copy antes de mover una parte a un disco zero-copy para evitar una posible pérdida de datos si Keeper no está disponible. #71845 (Aleksei Filatov).

Lanzamiento de ClickHouse 24.10, 2024-10-31. Presentación, Vídeo

Cambio incompatible con versiones anteriores

  • Se permite escribir SETTINGS antes de FORMAT en una cadena de consultas con UNION cuando las subconsultas están entre paréntesis. Esto cierra #39712. Cambia el comportamiento cuando una consulta tiene la cláusula SETTINGS especificada dos veces en una secuencia. La cláusula SETTINGS más cercana tendrá preferencia para la subconsulta correspondiente. En versiones anteriores, la cláusula SETTINGS más externa podía prevalecer sobre la interna. #68614 (Alexey Milovidov).
  • Ahora se permite, de forma predeterminada, reordenar las condiciones de filtro de la cláusula [PRE]WHERE. Esto puede deshabilitarse estableciendo allow_reorder_prewhere_conditions en false. #70657 (Nikita Taranov).
  • Se elimina la biblioteca idxd-config, que tiene una licencia incompatible. Esto también elimina el códec experimental Intel DeflateQPL. #70987 (Alexey Milovidov).

Nueva funcionalidad

  • Permite conceder acceso a prefijos con comodín. GRANT SELECT ON db.table_pefix_* TO user. #65311 (pufit).
  • Si presiona la barra espaciadora mientras se ejecuta una consulta, el cliente mostrará una tabla en tiempo real con métricas detalladas. Puede habilitarla globalmente con la nueva opción --progress-table en clickhouse-client; la nueva opción --enable-progress-table-toggle está asociada a --progress-table y alterna la visualización de la tabla de progreso al pulsar la tecla de control (Espacio). #63689 (Maria Khristenko), #70423 (Julia Kartseva).
  • Permite almacenar en caché los archivos leídos para los motores de tabla de almacenamiento de objetos y los lagos de datos, usando el hash de ETag + la ruta del archivo como clave de caché. #70135 (Kseniia Sumarokova).
  • Se admite crear una tabla con una consulta: CREATE TABLE ... CLONE AS .... Clona el esquema de la tabla de origen y luego adjunta todas las particiones a la tabla recién creada. Esta funcionalidad solo es compatible con tablas de la familia MergeTree. Cierra #65015. #69091 (tuanpach).
  • Se añade una nueva tabla del sistema, system.query_metric_log, que contiene el historial de los valores de memoria y métricas de la tabla system.events para consultas individuales, y que se escribe periódicamente en disco. #66532 (Pablo Marcos).
  • Se puede escribir una consulta SELECT simple con SELECT implícito para habilitar expresiones de estilo calculadora, por ejemplo, ch "1 + 2". Esto se controla mediante una nueva configuración, implicit_select. #68502 (Alexey Milovidov).
  • Compatibilidad con el modo --copy en clickhouse local como atajo para la conversión de formatos #68503. #68583 (Denis Hananein).
  • Agregar una página HTML incorporada para visualizar las fusiones, disponible en la ruta /merges. #70821 (Alexey Milovidov).
  • Se agrega compatibilidad con la función arrayUnion. #68989 (Peter Nguyen).
  • Permitir alias de SQL parametrizados. #50665 (Anton Kozlov).
  • Una nueva función de agregación quantileExactWeightedInterpolated, que es una versión interpolada basada en quantileExactWeighted. Algunos podrían preguntarse por qué necesitamos una nueva quantileExactWeightedInterpolated si ya tenemos quantileExactInterpolatedWeighted. La razón es que la nueva es más precisa que la anterior. Esto es por compatibilidad con Spark. #69619 (李扬).
  • Una nueva función: arrayElementOrNull. Devuelve NULL si el índice del array está fuera de rango o si no se encuentra una clave en un Map. #69646 (李扬).
  • Permite a los usuarios especificar expresiones regulares mediante los nuevos campos message_regexp y message_regexp_negative en el archivo config.xml para filtrar el logging. El logging se aplica al texto formateado sin color para ofrecer una experiencia más intuitiva a los desarrolladores. #69657 (Peter Nguyen).
  • Se añadió la función RIPEMD160, que calcula el hash criptográfico RIPEMD-160 de una cadena de texto. Ejemplo: SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog')) devuelve 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B. #70087 (Dergousov Maxim).
  • Compatibilidad con la lectura de tablas Iceberg en HDFS. #70268 (flynn).
  • Compatibilidad con CTE en la forma WITH ... INSERT, ya que anteriormente solo se admitía INSERT ... WITH .... #70593 (Shichao Jin).
  • Integración de MongoDB: compatibilidad con todos los tipos de MongoDB, compatibilidad con las sentencias WHERE y ORDER BY en MongoDB, y restricción de las expresiones no compatibles con MongoDB. Tenga en cuenta que la nueva integración está deshabilitada de forma predeterminada; para usarla, establezca <use_legacy_mongodb_integration> en false en la configuración del servidor. #63279 (Kirill Nikiforov).
  • Se añadió una nueva función getSettingOrDefault para devolver el valor por defecto y evitar una excepción si no se encuentra una configuración personalizada en el perfil actual. #69917 (Shankar).

Funcionalidad experimental

  • Las vistas materializadas actualizables están listas para producción. #70550 (Michael Kolupaev). Las vistas materializadas actualizables ahora son compatibles con bases de datos Replicated. #60669 (Michael Kolupaev).
  • Las réplicas paralelas pasan de experimental a Beta. Se han rediseñado las SETTINGS que controlan el comportamiento de los algoritmos de réplicas paralelas. En resumen: ClickHouse tiene cuatro algoritmos distintos de lectura en paralelo con múltiples réplicas, lo que se refleja en la SETTING parallel_replicas_mode; su valor predeterminado es read_tasks. Además, se ha añadido la SETTING de activación enable_parallel_replicas. #63151 (Alexey Milovidov), (Nikita Mikhaylov).
  • Se añade compatibilidad con el tipo Dynamic en la mayoría de las funciones, ejecutándolas sobre los tipos internos dentro de Dynamic. #69691 (Pavel Kruglov).
  • Permite leer y escribir el tipo JSON como una binary string en formato RowBinary con las SETTINGS input_format_binary_read_json_as_string/output_format_binary_write_json_as_string. #70288 (Pavel Kruglov).
  • Permite serializar y deserializar la columna JSON como una única columna String en el Native format. Para la salida, use la SETTING output_format_native_write_json_as_string. Para la entrada, use la serialization version 1 antes de los datos de la columna. #70312 (Pavel Kruglov).
  • Se introdujo un modo especial (experimental) del merge selector para tablas MergeTree, que lo hace más agresivo en las particiones cercanas al límite por número de partes. Se controla mediante la SETTING de nivel MergeTree merge_selector_use_blurry_base. #70645 (Nikita Mikhaylov).
  • Implementa ser/de genérico entre los tipos Union de Avro y Variant de ClickHouse. Resuelve #69713. #69712 (Jiří Kozlovský).

Mejora del rendimiento

  • Se refactorizaron IDisk e IObjectStorage para mejorar el rendimiento. Las tablas de los almacenamientos de objetos plain y plain_rewritable se inicializarán más rápido. #68146 (Alexey Milovidov, Julia Kartseva). No llame a la API LIST del almacenamiento de objetos al comprobar si existe un archivo o directorio en el disco plain_rewritable, ya que puede resultar poco rentable. #70852 (Julia Kartseva). Se redujo el número de solicitudes a la API HEAD del almacenamiento de objetos en el disco plain_rewritable. #70915 (Julia Kartseva).
  • Se añadió la capacidad de interpretar datos directamente en columnas dispersas. #69828 (Anton Popov).
  • Mejora del rendimiento del procesamiento de formatos con una gran cantidad de valores faltantes (p. ej., JSONEachRow). #69875 (Anton Popov).
  • Admite la lectura en paralelo de grupos de filas de Parquet y la precarga de grupos de filas en modo monohilo. #69862 (LiuNeng).
  • Soporte para el índice minmax en pointInPolygon. #62085 (JackyWoo).
  • Usa filtros de Bloom al leer archivos Parquet. #62966 (Arthur Passos).
  • Renombrado sin bloqueo de partes para evitar que INSERT afecte a SELECT (debido al bloqueo de partes) (en condiciones normales con fsync_part_directory, el QPS de SELECT con INSERT en paralelo se duplicó; con cargas elevadas, el efecto es aún mayor). Tenga en cuenta que, por ahora, esto solo incluye ReplicatedMergeTree. #64955 (Azat Khuzhin).
  • Se respeta ttl_only_drop_parts en materialize ttl; solo se leen las columnas necesarias para recalcular el TTL y eliminar partes reemplazándolas por una vacía. #65488 (Andrey Zvonov).
  • Se optimizó la creación de hilos en ThreadPool para minimizar la contención por bloqueos. La creación de hilos ahora se realiza fuera de la sección crítica para evitar retrasos en la programación de trabajos y la gestión de hilos en condiciones de alta carga. Esto hace que ClickHouse responda mucho mejor bajo una carga concurrente intensa. #68694 (filimonov).
  • Permite leer columnas de cadenas LowCardinality desde ORC. #69481 (李扬).
  • Se usa LowCardinality para ProfileEvents en logs del sistema como part_log, query_views_log y filesystem_cache_log. #70152 (Alexey Milovidov).
  • Mejora el rendimiento de las funciones fromUnixTimestamp/toUnixTimestamp. #71042 (kevinyhzou).
  • No deshabilite la lectura no bloqueante de la caché de páginas en todo el servidor al leer mediante E/S bloqueante. Esto provocaba un rendimiento inferior cuando un único sistema de archivos (p. ej., tmpfs) no admitía la llamada al sistema preadv2, mientras que otros sí. #70299 (Antonio Andelic).
  • ALTER TABLE .. REPLACE PARTITION ya no espera las mutaciones/merges que se producen en otras particiones. #59138 (Vasily Nemkov).
  • No se realiza la validación al sincronizar la ACL desde Keeper. Se valida durante la creación. No debería importar demasiado, pero hay instalaciones con decenas de miles o incluso más usuarios creados, y la validación innecesaria del hash puede tardar mucho en completarse durante el arranque del servidor (sincroniza todo desde Keeper). #70644 (Raúl Marín).

Mejora

  • CREATE TABLE AS copiará PRIMARY KEY, ORDER BY y otras cláusulas similares (de las tablas MergeTree). #69739 (sakulali).
  • Se admite XID de 64 bits en Keeper. Se puede habilitar con el valor de configuración use_xid_64. #69908 (Antonio Andelic).
  • Los argumentos de línea de comandos para ajustes Bool se establecen en true cuando no se proporciona ningún valor para el argumento (p. ej., clickhouse-client --optimize_aggregation_in_order --query "SELECT 1"). #70459 (davidtsuk).
  • Se añadieron ajustes a nivel de usuario min_free_disk_bytes_to_perform_insert y min_free_disk_perform_to_throw_insert para evitar inserciones en discos casi llenos. #69755 (Marco Vilas Boas).
  • La documentación integrada de las configuraciones será más detallada y completa que la documentación del sitio web. Este es el primer paso para que la documentación del sitio web se genere siempre automáticamente a partir del código fuente. Esto tiene implicaciones a largo plazo: - se garantizará que incluya todas las configuraciones; - no habrá riesgo de que los valores predeterminados queden obsoletos; - podremos generar esta documentación para cada versión de ClickHouse; - la documentación podrá mostrarse desde el propio servidor incluso sin acceso a Internet. Generar la documentación del sitio web a partir del código fuente. #70289 (Alexey Milovidov).
  • Permitir una subcadena de búsqueda vacía en la función replace, con el mismo comportamiento que en PostgreSQL. #69918 (zhanglistar).
  • Permitir un patrón vacío en las funciones replaceRegexp*. #70053 (zhanglistar).
  • Se crean enlaces simbólicos para las tablas en el directorio data/database_name/ que apuntan a las rutas reales de los datos de la tabla, según la política de almacenamiento, en lugar de al directorio store/... del disco predeterminado. #61777 (Kirill).
  • Al analizar un campo Enum de JSON, una cadena que contiene un entero se interpretará como el elemento Enum correspondiente. Esto cierra #65119. #66801 (scanhex12).
  • Permitir que TRIM con una cadena vacía LEADING o TRAILING no tenga efecto. Cierra #67792. #68455 (Peter Nguyen).
  • Se mejora la compatibilidad de cast(timestamp as String) con Spark. #69179 (Wenzheng Liu).
  • Utilice siempre el nuevo analizador para calcular expresiones constantes cuando enable_analyzer esté establecido en true. Se admite calcular los argumentos de la función de tabla executable sin usar una consulta SELECT para expresiones constantes. #69292 (Dmitry Novik).
  • Se agregó la opción enable_secure_identifiers para impedir el uso de identificadores con caracteres especiales. #69411 (tuanpach).
  • Añade show_create_query_identifier_quoting_rule para definir el comportamiento de comillas de los identificadores en el resultado de la consulta SHOW CREATE TABLE. Valores posibles: - user_display: Cuando los identificadores son una palabra clave. - when_necessary: Cuando los identificadores son uno de {"distinct", "all", "table"} y cuando pueda dar lugar a ambigüedad: nombres de columna, nombres de atributos de Diccionario. - always: Siempre pone entre comillas los identificadores. #69448 (tuanpach).
  • Mejora de la restauración de las dependencias de las entidades de acceso #69563 (Vitaly Baranov).
  • Si ejecuta clickhouse-client u otra aplicación de CLI, y se inicia lentamente debido a que el servidor está sobrecargado, y empieza a escribir su consulta, como SELECT, las versiones anteriores mostraban el contenido restante del eco del terminal antes de imprimir el mensaje de bienvenida, por ejemplo SELECTClickHouse local version 24.10.1.1. en lugar de ClickHouse local version 24.10.1.1.. Ahora ya está corregido. Esto cierra #31696. #69856 (Alexey Milovidov).
  • Añadir una nueva columna readonly_duration a la tabla system.replicas. Necesario para poder distinguir en las alertas las réplicas readonly reales de las centinela. #69871 (Miсhael Stetsyuk).
  • Cambiar el tipo de la opción join_output_by_rowlist_perkey_rows_threshold a entero sin signo. #69886 (kevinyhzou).
  • Mejora el registro de spans de OpenTelemetry para que incluya los ajustes de la consulta. #70011 (sharathks118).
  • Se agregó información de diagnóstico sobre las funciones de array de orden superior si el tipo de resultado de la lambda es inesperado. #70093 (ttanay).
  • Mejora de Keeper: menos bloqueos durante los cambios en el clúster. #70275 (Antonio Andelic).
  • Añade las palabras clave WITH IMPLICIT y FINAL al comando SHOW GRANTS. Corrige un error menor relacionado con los privilegios implícitos: #70094. #70293 (pufit).
  • Se respeta compatibility en la configuración de MergeTree. El valor de compatibility se toma del perfil default al iniciar el servidor, y la configuración predeterminada de MergeTree se ajusta en consecuencia. Los cambios posteriores en la configuración compatibility no afectan a la configuración de MergeTree. #70322 (Nikolai Kochetov).
  • Evite saturar los logs con cuerpos de respuesta HTTP grandes en caso de error durante la comunicación entre servidores. #70487 (Vladimir Cherkasov).
  • Se añadió una nueva opción de configuración, max_parts_to_move, para controlar la cantidad máxima de partes que se pueden mover a la vez. #70520 (Vladimir Cherkasov).
  • Se limita la frecuencia de ciertos mensajes de registro. #70601 (Alexey Milovidov).
  • CHECK TABLE con el calificador PART tenía un formato incorrecto en el cliente. #70660 (Alexey Milovidov).
  • Se admite la escritura del índice de columna y del índice de desplazamiento con el escritor nativo de Parquet. #70669 (LiuNeng).
  • Se admite el análisis de DateTime64 con microsegundos y zona horaria en sintaxis joda (“joda” es una biblioteca popular de Java para fecha y hora, y la “sintaxis joda” es el estilo de esa biblioteca). #70737 (kevinyhzou).
  • Se cambió el método para determinar si un almacenamiento en la nube admite la eliminación por lotes o no. #70786 (Vitaly Baranov).
  • Soporte para la página v2 de Parquet en el lector nativo. #70807 (Arthur Passos).
  • Una comprobación para verificar si la tabla tiene configurados tanto storage_policy como disk. Se añade una comprobación para verificar si una nueva política de almacenamiento es compatible con la anterior al usar la configuración disk. #70839 (Kirill).
  • Se agregan system.s3_queue_settings y system.azure_queue_settings. #70841 (Kseniia Sumarokova).
  • Las funciones base58Encode y base58Decode ahora aceptan argumentos del tipo FixedString. Ejemplo: SELECT base58Encode(toFixedString('plaintext', 9));. #70846 (Faizan Patel).
  • Añada la columna partition a cada tipo de entrada del log de partes. Anteriormente, solo se establecía para algunas entradas. Esto cierra #70819. #70848 (Alexey Milovidov).
  • Se agregan los eventos MergeStart y MutateStart a system.part_log, lo que facilita el análisis y la visualización de las fusiones. #70850 (Alexey Milovidov).
  • Añade un evento de perfil sobre la cantidad de partes de origen fusionadas. Permite supervisar el fan-out de MergeTree en producción. #70908 (Alexey Milovidov).
  • Se volvieron a habilitar las descargas en segundo plano a la caché del sistema de archivos. #70929 (Nikita Taranov).
  • Se añade un nuevo algoritmo selector de merge, llamado Trivial, solo para uso profesional. Es peor que el selector de merge Simple. #70969 (Alexey Milovidov).
  • Soporte para CREATE OR REPLACE VIEW de forma atómica. #70536 (tuanpach)
  • Se añadió el modo strict_once a la función de agregación windowFunnel para evitar contar un mismo evento varias veces si coincide con varias condiciones; cierra #21835. #69738 (Vladimir Cherkasov).

Corrección de errores (comportamiento erróneo visible para el usuario en una versión estable oficial)

  • Se aplican actualizaciones de configuración en el objeto Context global. Esto corrige problemas como #62308. #62944 (Amos Bird).
  • Se corrige un problema por el que ReadSettings no usaba los valores configurados por el usuario, sino solo los valores predeterminados. #65625 (Kseniia Sumarokova).
  • Se corrige un error de incompatibilidad de tipos en sumMapFiltered al usar argumentos con signo. #58408 (Chen768959).
  • Se corrige la monotonicidad de las funciones de conversión de tipo toHour cuando se pasa el argumento opcional de zona horaria. #60264 (Amos Bird).
  • Se flexibiliza la comprobación supportsPrewhere para las tablas Merge. Esto corrige #61064. Se había endurecido innecesariamente en #60082. #61091 (Amos Bird).
  • Se corrige la gestión de la configuración use_concurrency_control para que se aplique correctamente el límite concurrent_threads_soft_limit_num. Esto habilita el control de concurrencia de forma predeterminada, ya que antes no funcionaba correctamente. #61473 (Sergei Trifonov).
  • Se corrigió la optimización incorrecta de la sección JOIN ON en el caso de una comprobación IS NULL bajo cualquier otra función (como NOT), que podía dar lugar a resultados incorrectos. Cierra #67915. #68049 (Vladimir Cherkasov).
  • Evita las consultas ALTER que harían inválida la consulta CREATE de las tablas. #68574 (János Benjamin Antal).
  • Corrige el formato inconsistente del AST de las funciones negate (-) y NOT con tuplas y arrays. #68600 (Vladimir Cherkasov).
  • Se corrige la inserción de un tipo incompleto en Dynamic durante la deserialización. Podía dar lugar a errores Parameter out of bound. #69291 (Pavel Kruglov).
  • Replicación zero-copy, que es experimental y no debe usarse en producción: corrección de un bucle infinito después de restore replica en el replicated merge tree con zero copy. #69293 (MikhailBurdukov).
  • Se restablece el valor predeterminado de processing_threads_num al número de núcleos de CPU en el almacenamiento S3Queue. #69384 (Kseniia Sumarokova).
  • Evitar el flujo de try/catch al deserializar/serializar protobuf repetidos anidados en columnas anidadas (corrige #41971). #69556 (Eliot Hautefeuille).
  • Se corrige un fallo al insertar en una columna FixedString del motor PostgreSQL. #69584 (Pavel Kruglov).
  • Se corrige un bloqueo al ejecutar create view t as (with recursive 42 as ttt select ttt);. #69676 (Han Fei).
  • Se corrigió un error por el que maxMapState lanzaba ‘Bad get’ si el tipo de valor era DateTime64. #69787 (Michael Kolupaev).
  • Se corrige getSubcolumn en columnas LowCardinality al sobrescribir useDefaultImplementationForLowCardinalityColumns para que devuelva true. #69831 (Miсhael Stetsyuk).
  • Se corrige el bloqueo permanente de los envíos distribuidos si falla un DROP de una tabla distribuida. #69843 (Azat Khuzhin).
  • Se corrigieron las consultas que no se podían cancelar que contienen WITH FILL con claves NaN. Esto cierra #69261. #69845 (Alexey Milovidov).
  • Corrige el valor predeterminado del analizador con el antiguo valor de compatibilidad. #69895 (Raúl Marín).
  • No comprobar las dependencias en CREATE OR REPLACE VIEW durante el DROP de la tabla antigua. Anteriormente, la consulta CREATE OR REPLACE fallaba cuando había tablas dependientes de la vista recreada. #69907 (Pavel Kruglov).
  • Algo relacionado con Decimal. Corrige #69730. #69978 (Arthur Passos).
  • Ahora DEFINER/INVOKER funcionará con vistas parametrizadas. #69984 (pufit).
  • Corregir el análisis sintáctico de los definidores de la vista. #69985 (pufit).
  • Se corrigió un error por el que la zona horaria podía alterar el resultado de la consulta con argumentos Date o Date32. #70036 (Yarik Briukhovetskyi).
  • Corrige Block structure mismatch en consultas con vistas anidadas y una condición WHERE. Corrige #66209. #70054 (Nikolai Kochetov).
  • Se evita reutilizar columnas entre distintas tuplas con nombre al evaluar las funciones tuple. Esto corrige #70022. #70103 (Amos Bird).
  • Se corrige un LOGICAL_ERROR incorrecto al reemplazar literales en rangos. #70122 (Pablo Marcos).
  • Se comprueba el tipo Nullable(Nothing) durante ALTER TABLE MODIFY COLUMN/QUERY para evitar tablas con ese tipo de dato. #70123 (Pavel Kruglov).
  • Mensaje de error adecuado para la consulta no válida JOIN ... ON *, cierra #68650. #70124 (Vladimir Cherkasov).
  • Se corrige un resultado incorrecto provocado por un índice de omisión. #70127 (Raúl Marín).
  • Se corrige una condición de carrera en los datos en el método decompress de ColumnObject/ColumnTuple que podía provocar el uso del heap después de liberar memoria. #70137 (Pavel Kruglov).
  • Se corrige un posible cuelgue en ALTER COLUMN con el tipo Dynamic. #70144 (Pavel Kruglov).
  • Ahora ClickHouse considerará más errores como recuperables y no marcará las partes de datos como dañadas en caso de este tipo de errores. #70145 (alesapin).
  • Usar el parámetro max_types adecuado al crear el tipo Dynamic para una subcolumna JSON. #70147 (Pavel Kruglov).
  • Se corrigió la visualización de la contraseña en system.query_log para los usuarios con el método de autenticación por contraseña bcrypt. #70148 (Nikolay Degterinsky).
  • Se corrige el contador de eventos de la interfaz nativa (InterfaceNativeSendBytes). #70153 (Yakov Olkhovskiy).
  • Se corrige un posible fallo relacionado con columnas JSON. #70172 (Pavel Kruglov).
  • Se solucionan varios problemas con arrayMin y arrayMax. #70207 (Raúl Marín).
  • Se respeta la configuración allow_simdjson en el analizador del tipo JSON. #70218 (Pavel Kruglov).
  • Corrige una desreferenciación de puntero nulo al crear una vista materializada con dos consultas SELECT y un INTERSECT, p. ej., CREATE MATERIALIZED VIEW v0 AS (SELECT 1) INTERSECT (SELECT 1);. #70264 (Konstantin Bogdanov).
  • No modifique la configuración global mediante scripts de inicio. Anteriormente, cambiar una configuración en un script de inicio hacía que se modificara globalmente. #70310 (Antonio Andelic).
  • Corrige el ALTER del tipo Dynamic al reducir el parámetro max_types, lo que podría provocar un fallo del servidor. #70328 (Pavel Kruglov).
  • Se corrige un fallo al usar incorrectamente WITH FILL. #70338 (Raúl Marín).
  • Corrige un posible uso de memoria después de liberarla en SYSTEM DROP FORMAT SCHEMA CACHE FOR Protobuf. #70358 (Azat Khuzhin).
  • Se corrigió un bloqueo al ejecutar GROUP BY sobre una subcolumna de un subobjeto JSON. #70374 (Pavel Kruglov).
  • No precargar partes en fusiones verticales si la parte no tiene filas. #70452 (Antonio Andelic).
  • Se corrige un cierre inesperado en WHERE con funciones lambda. #70464 (Raúl Marín).
  • Se corrigió la creación de tablas con CREATE ... AS table_function(...) en la base de datos Replicated cuando el origen de la table function no está disponible en la réplica secundaria. #70511 (Kseniia Sumarokova).
  • Ignorar toda la salida del insert asíncrono con wait_for_async_insert=1. Cierra #62644. #70530 (Konstantin Bogdanov).
  • Ignorar frozen_metadata.txt al recorrer el directorio shadow desde system.remote_data_paths. #70590 (Aleksei Filatov).
  • Se corrige un error en la creación de funciones de ventana con estado sobre memoria desalineada. #70631 (Raúl Marín).
  • Se corrigieron cierres inesperados poco frecuentes en consultas SELECT y durante las fusiones tras añadir una columna de tipo Array con una expresión predeterminada no vacía. #70695 (Anton Popov).
  • Las inserciones en la función de tabla s3 respetarán la configuración de la consulta. #70696 (Vladimir Cherkasov).
  • Se corrige la recursión infinita al inferir un esquema de protobuf cuando está activada la omisión de campos no compatibles. #70697 (Raúl Marín).
  • Desactivar enable_named_columns_in_function_tuple de forma predeterminada. #70833 (Raúl Marín).
  • Se corrige un problema por el que la configuración processing&#95;threads&#95;num del motor de tabla S3Queue no surtía efecto cuando se deducía a partir del número de núcleos de CPU del servidor. #70837 (Kseniia Sumarokova).
  • Se normalizan los argumentos de tuplas con nombre en los estados de agregación. Esto corrige #69732 . #70853 (Amos Bird).
  • Corrige un error lógico causado por ceros negativos en la tabla hash de dos niveles. Esto cierra #70973. #70979 (Alexey Milovidov).
  • Se corrigieron limit by y limit with ties para Distributed y las réplicas paralelas. #70880 (Nikita Taranov).

Lanzamiento de ClickHouse 24.9, 2024-09-26. Presentación, Video

Cambio incompatible con versiones anteriores

  • Se admiten expresiones como a[b].c para tuplas con nombre, así como subíndices con nombre sobre expresiones arbitrarias, por ejemplo, expr().name. Esto resulta útil para procesar JSON. Esto cierra #54965. En versiones anteriores, una expresión de la forma expr().name se interpretaba como tupleElement(expr(), name), y el analizador de consultas buscaba una columna name en lugar del elemento de tupla correspondiente; en la nueva versión, en cambio, se convierte en tupleElement(expr(), 'name'). En la mayoría de los casos, la versión anterior no funcionaba, pero es posible imaginar un escenario muy inusual en el que este cambio podría provocar incompatibilidades: si almacenaba los nombres de los elementos de la tupla en una columna o un alias cuyo nombre fuera distinto del nombre del elemento de la tupla: SELECT 'b' AS a, CAST([tuple(123)] AS 'Array(Tuple(b UInt8))') AS t, t[1].a. Es muy poco probable que haya utilizado consultas de este tipo, pero aun así debemos marcar este cambio como potencialmente incompatible con versiones anteriores. #68435 (Alexey Milovidov).
  • Cuando la configuración print_pretty_type_names está habilitada, el tipo de dato Tuple se mostrará en formato Pretty en las sentencias SHOW CREATE TABLE, en la función formatQuery y en el modo interactivo de clickhouse-client y clickhouse-local. En versiones anteriores, esta configuración solo se aplicaba a las consultas DESCRIBE y a toTypeName. Esto cierra #65753. #68492 (Alexey Milovidov).
  • No se permite especificar explícitamente un UUID al crear una tabla en bases de datos Replicated. Tampoco se permite especificar explícitamente la ruta de Keeper ni el nombre de la réplica para tablas *MergeTree en bases de datos Replicated. Esto introduce una nueva configuración, database_replicated_allow_explicit_uuid, y cambia el tipo de database_replicated_allow_replicated_engine_arguments de Bool a UInt64 #66104 (Alexander Tokmakov).

Nueva funcionalidad

  • Permite que un usuario tenga varios métodos de autenticación en lugar de solo uno. Permite restablecer los métodos de autenticación al método añadido más recientemente. Si desea ejecutar instancias en 24.8 y una en 24.9 durante un tiempo, es mejor establecer max_authentication_methods_per_user = 1 durante ese período para evitar posibles incompatibilidades. #65277 (Arthur Passos).
  • Se añade soporte para ATTACH PARTITION ALL FROM. #61987 (Kirill Nikiforov).
  • Se agrega la configuración input_format_json_empty_as_default que, cuando está habilitada, trata los campos vacíos de las entradas JSON como valores predeterminados. Cierra #59339. #66782 (Alexis Arnaud).
  • Se añadieron las funciones overlay y overlayUTF8, que sustituyen partes de una cadena por otra. Ejemplo: SELECT overlay('Hello New York', 'Jersey', 11) devuelve Hello New Jersey. #66933 (李扬).
  • Se añade compatibilidad con eliminaciones ligeras en particiones DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr; #67805 (sunny).
  • Se implementó la comparación de valores del tipo de dato Interval de distintos dominios (como segundos y minutos), por lo que ahora se convierten al supertipo común mínimo. #68057 (Yarik Briukhovetskyi).
  • Añade la configuración create_if_not_exists para usar de forma predeterminada el comportamiento IF NOT EXISTS en las sentencias CREATE. #68164 (Peter Nguyen).
  • Permite leer tablas Iceberg en Azure y en entornos locales. #68210 (Daniil Ivanik).
  • Ahora se pueden eliminar las entradas de la caché de consultas por etiqueta. Por ejemplo, la entrada de la caché de consultas creada por SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc' ahora se puede eliminar con SYSTEM DROP QUERY CACHE TAG 'abc'. #68477 (Michał Tabaszewski).
  • Añadir cifrado de almacenamiento para named collections. #68615 (Pablo Marcos).
  • Añade la columna virtual _headers al motor de tabla URL. Cierra #65026. #68867 (flynn).
  • Añadir la tabla system.projections para seguir las proyecciones disponibles. #68901 (Jordi Villar).
  • Se añadió la nueva función arrayZipUnaligned para ofrecer compatibilidad con Spark (donde se llama arrays_zip), que admite arrays no alineados a partir de la arrayZip original. #69030 (李扬).
  • Se añadieron los comandos cp/mv a la aplicación de línea de comandos del cliente de Keeper, que permiten copiar/mover nodos de forma atómica. #69034 (Mikhail Artemenko).
  • Añade el argumento scale (valor predeterminado: true) a la función arrayAUC, lo que permite omitir el paso de normalización (incidencia #69609). #69717 (gabrielmcg44).

Funcionalidad experimental

  • Añade una opción de configuración input_format_try_infer_variants que permite inferir el tipo Variant durante la inferencia del esquema para formatos de texto cuando hay más de un tipo posible para los elementos de columnas/arrays. #63798 (Shaun Struwig).
  • Añade las funciones de agregado distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypes para mejorar la introspección del contenido de las columnas de tipo JSON. #68463 (Kruglov Pavel).
  • Nuevo algoritmo para determinar la unidad de distribución de marks entre réplicas paralelas mediante un hash consistente. Se eligen distintas cantidades de marks para diferentes patrones de lectura con el fin de mejorar el rendimiento. #68424 (Nikita Taranov).
  • Anteriormente, la complejidad algorítmica de la lógica de deduplicación de partes al procesar anuncios de réplicas paralelas era O(n^2), lo que podía llevar un tiempo apreciable en tablas con muchas partes (o particiones). Este cambio hace que la complejidad pase a ser O(n*log(n)). #69596 (Alexander Gololobov).
  • Mejoras en las vistas materializadas actualizables: modo append (... REFRESH EVERY 1 MINUTE APPEND ...) para añadir filas a la tabla existente en lugar de sobrescribirla por completo, reintentos (desactivados de forma predeterminada y configurados en la sección SETTINGS de la consulta), consulta SYSTEM WAIT VIEW <name> que espera a que termine la actualización en curso, y algunas correcciones. #58934 (Michael Kolupaev).
  • Se añadió min_max como un nuevo tipo de estadísticas (experimental). Admite estimar predicados de rango sobre columnas numéricas, p. ej., x < 100. #67013 (JackyWoo).
  • Se ha mejorado castOrDefault para columnas Variant/Dynamic para que funcione incluso cuando los tipos internos no sean convertibles en absoluto. #67150 (Kruglov Pavel).
  • La replicación de un subconjunto de columnas ya está disponible a través de MaterializedPostgreSQL. Cierra #33748. #69092 (Kruglov Kirill).

Mejora de rendimiento

  • Se implementó la lectura únicamente de los archivos necesarios para el particionado de Hive. #68963 (Yarik Briukhovetskyi).
  • Se mejoró el rendimiento de JOIN reordenando la tabla derecha por claves cuando las claves de la tabla son densas en los hash joins LEFT o INNER. #60341 (kevinyhzou).
  • Se mejoró el rendimiento de ALL JOIN añadiendo la lista de filas de forma diferida. #63677 (kevinyhzou).
  • Se cargan los metadatos de la caché del sistema de archivos de forma asíncrona durante el proceso de arranque para acelerar los reinicios (controlado por la configuración load_metadata_asynchronously). #65736 (Daniel Pozo Escalona).
  • Las funciones array y map se optimizaron para procesar ciertos casos comunes mucho más rápido. #67707 (李扬).
  • Optimización menor en la lectura de cadenas ORC, especialmente cuando una columna no contiene valores NULL. #67794 (李扬).
  • Se mejoró el rendimiento general de las fusiones al reducir la sobrecarga de planificación de sus pasos. #68016 (Anton Popov).
  • Se aceleran las solicitudes a S3 cuando no hay un profile configurado, no hay credentials configuradas e IMDS no está disponible (por ejemplo, al consultar un bucket público desde una máquina fuera de una Cloud). Esto cierra #52771. #68082 (Alexey Milovidov).
  • Se desvirtualiza el lector de format en RowInputFormatWithNamesAndTypes para obtener una mejora de rendimiento. #68437 (李扬).
  • Se añade la fusión paralela para la aggregate function uniq al agregar con una clave de GROUP BY, con el fin de maximizar el uso de la CPU. #68441 (Jiebin Sun).
  • Se añade la configuración output_format_orc_dictionary_key_size_threshold para permitir al usuario habilitar la codificación por diccionario para columnas String en el output format ORC. Esto ayuda a reducir significativamente el tamaño del archivo ORC de salida y a mejorar el rendimiento de lectura. #68591 (李扬).
  • Se incorpora una nueva solicitud de Keeper, RemoveRecursive, que elimina un nodo junto con todo su subárbol. #69332 (Mikhail Artemenko).
  • Se acelera el rendimiento de inserción en una tabla con un vector similarity index añadiendo datos al índice vectorial en paralelo. #69493 (flynn).
  • Se reduce el uso de memoria de las inserciones en JSON mediante un tamaño de búfer de escritura adaptativo. Muchos archivos creados por una columna JSON en una parte wide contienen poca cantidad de datos y no tiene sentido asignarles un búfer de 1 MB. #69272 (Kruglov Pavel).
  • Se evita devolver un hilo al threadpool de concurrent hash join para evitar que la consulta genere hilos en exceso. #69406 (Duc Canh Le).

Mejora

  • CREATE TABLE AS ahora copia PRIMARY KEY, ORDER BY y cláusulas similares. Por ahora, solo es compatible con la familia de motores de tabla MergeTree. #69076 (sakulali).
  • Se reforzaron las partes del código relacionadas con el análisis sintáctico de entidades pequeñas. Se encontraron y corrigieron los siguientes errores (menores): - si una tabla DeltaLake está particionada por Bool, el valor de la partición siempre se interpreta como false; - la tabla ExternalDistributed usaba un solo segmento de las direcciones proporcionadas; el valor del ajuste max_threads y otros similares se imprimía como 'auto(N)' en lugar de auto(N). #52503 (Alexey Milovidov).
  • Usar métricas específicas de cgroup para contabilizar el uso de CPU en lugar de métricas de todo el sistema. #62003 (Nikita Taranov).
  • La planificación de E/S para discos remotos de S3 ahora se realiza a nivel de los flujos de sockets HTTP (en lugar de las solicitudes completas a S3) para resolver problemas de throttling de bandwidth_limit. #65182 (Sergei Trifonov).
  • Las funciones upperUTF8 y lowerUTF8 antes solo podían convertir a mayúsculas / minúsculas caracteres cirílicos. Esta limitación ya se eliminó y ahora los caracteres de cualquier idioma se convierten a mayúsculas/minúsculas. Ejemplo: SELECT upperUTF8('Süden') ahora devuelve SÜDEN. #65761 (李扬).
  • Cuando se produce una eliminación ligera en una tabla con proyección(es), aunque los usuarios podían elegir entre lanzar una excepción (de forma predeterminada) o eliminar la proyección cuando se produjera la eliminación ligera, ahora existe una tercera opción: mantener la eliminación ligera y luego reconstruir la(s) proyección(es). #66169 (jsc0218).
  • Se han añadido dos opciones (dns_allow_resolve_names_to_ipv4 y dns_allow_resolve_names_to_ipv6) para permitir bloquear conexiones según la familia IP. #66895 (MikhailBurdukov).
  • Permitir configurar la omisión de Ctrl-Z (ignore_shell_suspend) en clickhouse-client. #67134 (Azat Khuzhin).
  • Mejora la validación de UTF-8 en los formatos de salida JSON. Garantiza que se genere JSON válido en caso de determinadas secuencias de bytes en los datos de resultados. #67938 (mwoenker).
  • Se añadieron eventos de perfil para fusiones y mutaciones, a fin de mejorar la introspección. #68015 (Anton Popov).
  • ODBC: obtener http_max_tries de la configuración del servidor. #68128 (Rodolphe Dugé de Bernonville).
  • Agregar compatibilidad con comodines para la identificación de usuarios en la extensión X.509 SubjectAltName. #68236 (Marco Vilas Boas).
  • Mejora de la inferencia de esquemas para valores de fecha y hora. Ahora DateTime64 se usa solo cuando la fecha y hora tiene parte fraccionaria; de lo contrario, se usa el DateTime normal. La inferencia de Date/DateTime ahora es más estricta, especialmente cuando date_time_input_format='best_effort', para evitar inferir valores de fecha y hora a partir de cadenas en casos límite. #68382 (Kruglov Pavel).
  • Eliminar el código antiguo de named collections de los diccionarios y reemplazarlo por el nuevo, que permite usar en los diccionarios named collections creadas con DDL. Cierra #60936, cierra #36890. #68412 (Kseniia Sumarokova).
  • Usar HTTP/1.1 en lugar de HTTP/1.0 (establecido de forma predeterminada) para los autenticadores HTTP externos. #68456 (Aleksei Filatov).
  • Se añadió un nuevo conjunto de métricas para la introspección del thread pool, que ofrece información más detallada sobre su rendimiento y comportamiento. #68674 (filimonov).
  • Se admiten parámetros de consulta en inserciones asíncronas con el formato Values. #68741 (Anton Popov).
  • Se añadió compatibilidad con Date32 en dateTrunc y toStartOfInterval. #68874 (LiuNeng).
  • Agrega las columnas plan_step_name y plan_step_description a system.processors_profile_log. #68954 (Alexander Gololobov).
  • Compatibilidad con el español en los diccionarios integrados. #69035 (Vasily Okunev).
  • Añadir la arquitectura de la CPU al mensaje breve de información sobre fallos. #69037 (Konstantin Bogdanov).
  • Las consultas fallarán más rápido si no es posible establecer una nueva conexión con Keeper durante los reintentos. #69148 (Raúl Marín).
  • Actualizar Database Factory para que los motores de base de datos definidos por el usuario puedan tener argumentos, configuraciones y sobrescrituras de tablas (similar a StorageFactory). #69201 (NikBarykin).
  • El modo de restauración que reemplaza todos los motores de tablas externas y las funciones de tabla externa por el motor Null (configuraciones restore_replace_external_engines_to_null, restore_replace_external_table_functions_to_null) fallaba si la tabla tenía SETTINGS. Ahora elimina los SETTINGS de la definición de la tabla en este caso y permite restaurar esas tablas. #69253 (Ilya Yatsishin).
  • CLICKHOUSE_PASSWORD se escapa correctamente en XML en el entrypoint de la imagen de ClickHouse. #69301 (aohoyd).
  • Permitir argumentos vacíos para arrayZip/arrayZipUnaligned, como ya hacía concat en https://github.com/ClickHouse/ClickHouse/pull/65887. Esto es para la compatibilidad con Spark en Gluten CH Backend. #69576 (李扬).
  • Admite opciones SSL más avanzadas para la comunicación interna de Keeper (p. ej., claves privadas con frase de contraseña). #69582 (Antonio Andelic).
  • El análisis de índices puede llevar un tiempo considerable en tablas grandes con muchas partes o particiones. Este cambio debería permitir cancelar una consulta costosa en esa fase. #69606 (Alexander Gololobov).
  • Enmascaramiento de información sensible en la función de tabla gcs. #69611 (Vitaly Baranov).
  • Se reconstruye la proyección en los merges que reducen el número de filas. #62364 (cangyin).

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

  • Se corrige un error al adjuntar una tabla cuando el dbname de pg contiene ”-” en el motor MaterializedPostgreSQL, experimental y no compatible. #62730 (takakawa).
  • Se corrigió un error en las columnas generadas del motor MaterializedPostgreSQL, experimental y totalmente no compatible, cuando el orden de adnum es incorrecto #63161. Se corrigió un error en la columna id con la expresión nextval como valor predeterminado en MaterializedPostgreSQL, experimental y totalmente no compatible, cuando la tabla tiene columnas generadas. Se corrigió un error al eliminar una publication con símbolos distintos de [a-z1-9-]. #67664 (Kruglov Kirill).
  • Storage Join ahora admite columnas Nullable en la tabla izquierda; cierra #61247. #66926 (vdimir).
  • Resultado incorrecto de la consulta con réplicas en paralelo (distribuyendo también las consultas) cuando el operador IN contiene una conversión a Decimal(). El error se introdujo con el nuevo analyzer. #67234 (Igor Nikonov).
  • Corrige el problema por el que alter modify order by provoca metadatos inconsistentes. #67436 (iceFireser).
  • Se corrige el límite superior de la función fromModifiedJulianDay. Debía ser 9999-12-31, pero por error se estableció como 9999-01-01. #67583 (PHO).
  • Corrección de un problema cuando el índice no está al principio de la tupla en la consulta IN. #67626 (Yarik Briukhovetskyi).
  • Se corrigió la caducidad en RoleCache. #67748 (Vitaly Baranov).
  • Se corrige la pérdida de bloques en window view debido a un flush lento en la vista. #67983 (Raúl Marín).
  • Se soluciona un problema de MSan causado por un formato de fecha incorrecto. #68105 (JackyWoo).
  • Se corrigió un fallo en el filtrado de Parquet cuando los tipos de datos del archivo difieren considerablemente de los tipos solicitados (p. ej., ... FROM file('a.parquet', Parquet, 'x String'), pero el archivo contiene x Int64). Sin esta corrección, use input_format_parquet_filter_push_down = 0 como solución temporal. #68131 (Michael Kolupaev).
  • Se corrige el fallo en lag/lead introducido en #67091. #68262 (lgbo).
  • Intenta corregir el bloqueo de Postgres al cancelar una consulta. #68288 (Kseniia Sumarokova).
  • Después de https://github.com/ClickHouse/ClickHouse/pull/61984, schema_inference_make_columns_nullable=0 aún puede hacer que las columnas sean Nullable en los formatos Parquet/Arrow. El cambio no era retrocompatible y los usuarios notaron este cambio de comportamiento. Este PR hace que schema_inference_make_columns_nullable=0 vuelva a funcionar como antes (no se inferirán columnas Nullable) e introduce el nuevo valor auto para esta configuración, que hará que las columnas sean Nullable solo si los datos contienen información sobre nulabilidad. #68298 (Kruglov Pavel).
  • Corrige #50868. Los valores constantes muy pequeños de DateTime64 devueltos por una subconsulta anidada dentro de una consulta distribuida se convertían erróneamente en NULL, lo que provocaba errores y posibles resultados incorrectos en las consultas. #68323 (Shankar).
  • Se corrige la falta del modo de sincronización de réplicas en la consulta SYSTEM SYNC REPLICA. #68326 (Duc Canh Le).
  • Se corrigió un error en la condición de clave. #68354 (Han Fei).
  • Corrige un cierre inesperado al eliminar o renombrar un rol usado en el directorio externo de usuarios LDAP. #68355 (Andrey Zvonov).
  • Corrige el valor de la columna Progress de system.view_refreshes cuando es superior a 1 #68377. #68378 (megao).
  • Procesa correctamente las banderas de regexp. #68389 (Han Fei).
  • El operador de conversión de tipos de estilo PostgreSQL (::) funciona correctamente incluso con literales hexadecimales y de cadena binaria de estilo SQL (p. ej., SELECT x'414243'::String). Esto cierra #68324. #68482 (Alexey Milovidov).
  • Parche menor de https://github.com/ClickHouse/ClickHouse/pull/68131. #68494 (Chang chen).
  • Se corrige #68239 SAMPLE n, donde n es un entero. #68499 (Denis Hananein).
  • Corregido un error en mann-whitney-utest cuando los tamaños de las dos distribuciones no son iguales. #68556 (Han Fei).
  • Tras un reinicio inesperado, no se inicia la replicación de ReplicatedMergeTree debido a un manejo anómalo de la parte covered-by-broken. #68584 (baolin).
  • Se corrigen los LOGICAL_ERROR cuando las funciones sipHash64Keyed, sipHash128Keyed o sipHash128ReferenceKeyed se aplican a arrays o tuplas vacíos. #68630 (Robert Schulze).
  • El índice de texto completo puede filtrar columnas incorrectas al indexar varias columnas; no restablecía row_id entre columnas distintas; el procedimiento para reproducirlo está en tests/queries/0_stateless/03228_full_text_with_multi_col.sql. Sin esta corrección. #68644 (siyuan).
  • Corrige los caracteres no válidos ‘\t’ y ‘\n’ en replica_name al crear una tabla Replicated, lo que provoca un análisis sintáctico incorrecto de la ‘réplica de origen’ en LogEntry. Mencionado en el issue #68640. #68645 (Zhigao Hong).
  • Se añadieron de nuevo las columnas virtuales _table y _database a las tablas distribuidas. Estuvieron disponibles hasta la versión 24.3. #68672 (Anton Popov).
  • Se corrige un posible error Size of permutation (0) is less than required (...) al permutar una columna Variant. #68681 (Kruglov Pavel).
  • Se corrige un posible error DB::Exception: Block structure mismatch in joined block stream: different columns: al usar la nueva columna JSON. #68686 (Kruglov Pavel).
  • Se corrigió un problema con las claves constantes materializadas al aplicar hash a mapas con arrays como claves en las funciones sipHash(64/128)Keyed. #68731 (Salvatore Mesoraca).
  • Hacer que ColumnsDescription::toString formatee cada columna usando el mismo objeto IAST::FormatState. Esto permite que se escriban en disco y en ZooKeeper metadatos uniformes de las columnas. #68733 (Miсhael Stetsyuk).
  • Se corrige la fusión de datos agregados en los conjuntos de agrupación. #68744 (Nikolai Kochetov).
  • Corregido un error lógico al crear un MergeTree replicado, modificar una columna y luego ejecutar MODIFY STATISTICS. #68820 (Han Fei).
  • Se corrige la resolución de subcolumnas dinámicas desde subconsultas en el analizador. #68824 (Kruglov Pavel).
  • Corrige el análisis sintáctico de los metadatos de tipos complejos en DeltaLake. Cierra #68739. #68836 (Kseniia Sumarokova).
  • Se corrigieron las inserciones asíncronas cuando los metadatos de la tabla cambian (mediante consultas ALTER ADD/MODIFY COLUMN) después de la inserción, pero antes de volcarse en la tabla. #68837 (Anton Popov).
  • Se corrige una excepción inesperada al pasar una tupla vacía en un array. Esto soluciona #68618. #68848 (Amos Bird).
  • Corregir el análisis sintáctico de los comandos de mutaciones de solo metadatos. #68935 (János Benjamin Antal).
  • Corrige un posible resultado incorrecto al fusionar estados anyHeavy. #68950 (Raúl Marín).
  • Se corrigió la escritura en las vistas materializadas con la configuración optimize_functions_to_subcolumns habilitada. #68951 (Anton Popov).
  • No use la caché de serialización en los métodos const de la columna Dynamic. Esto podría dar lugar al uso de un valor no inicializado o incluso a una condición de carrera durante las agregaciones. #68953 (Kruglov Pavel).
  • Se corrige un error de análisis del tipo JSON que se producía en algunos casos cuando debía insertarse NULL como valor predeterminado. #68955 (Kruglov Pavel).
  • Se corrigió un problema por el que Content-Encoding no se enviaba en algunas respuestas comprimidas. #64802. #68975 (Konstantin Bogdanov).
  • Hubo casos en los que path se concatenaba de forma incorrecta y contenía la parte //; este problema se ha solucionado mediante la normalización de path. #69066 (Yarik Briukhovetskyi).
  • Se corrige un error lógico cuando hay un async insert vacío. #69080 (Han Fei).
  • Se corrigió una condición de carrera en el indicador de progreso de clickhouse-client al cancelar una consulta. #69081 (Sergei Trifonov).
  • Corrige un error por el que no se utilizaba el índice de similitud vectorial (actualmente experimental) al usar la distancia de coseno como función de distancia. #69090 (flynn).
  • Este cambio corrige un problema por el que, si se intentaba crear de nuevo una base de datos Replicated tras un fallo del servidor durante el proceso de creación inicial, podía producirse un error. #69102 (Miсhael Stetsyuk).
  • No inferir el tipo Bool a partir de String en CSV cuando input_format_csv_try_infer_numbers_from_strings = 1, porque no se permite leer valores booleanos de cadenas. #69109 (Kruglov Pavel).
  • Se corrigen errores de análisis en el cliente al procesar consultas explain ast insert cuando --multiquery está habilitado. #69123 (wxybear).
  • La cláusula UNION en las subconsultas no se gestionaba correctamente en consultas con réplicas paralelas y provocaba el LOGICAL_ERROR Duplicate announcement received for replica. #69146 (Igor Nikonov).
  • Se corrigió la propagación del argumento structure en s3Cluster. Anteriormente, la expresión DEFAULT de la columna podía perderse al enviar la consulta a las réplicas de s3Cluster. #69147 (Kruglov Pavel).
  • Respetar la configuración del formato Values durante la conversión de una expresión al tipo de destino. #69149 (Kruglov Pavel).
  • Se corrige clickhouse-client --queries-file para usuarios con acceso de solo lectura (antes fallaba con Cannot modify 'log_comment' setting in readonly mode). #69175 (Azat Khuzhin).
  • Se corrige una condición de carrera de datos en clickhouse-client cuando su salida se redirige por tubería a un proceso que terminó prematuramente. #69186 (vdimir).
  • Corrige los resultados incorrectos de Fix uniq y GROUP BY al usar tipos JSON/Dynamic. #69203 (Kruglov Pavel).
  • Se corrige la detección del formato en INFILE para las inserciones asíncronas. Si el formato no se define explícitamente en la cláusula FORMAT, puede detectarse a partir de la extensión del archivo de INFILE. #69237 (Julia Kartseva).
  • Después de este problema, hay bastantes réplicas de tablas en producción en las que el valor del nodo metadata_version es a la vez igual a 0 y distinto de la versión del nodo metadata de la tabla correspondiente. Esto hace que las consultas alter fallen en esas réplicas. #69274 (Miсhael Stetsyuk).
  • Marcar el tipo Dynamic como un tipo de clave primaria inseguro para evitar problemas con Fields. #69311 (Kruglov Pavel).
  • Mejora en la restauración de las dependencias de las entidades de acceso. #69346 (Vitaly Baranov).
  • Corrige el comportamiento indefinido cuando fallan todos los intentos de obtener una conexión para inserciones. #69390 (Pablo Marcos).
  • Cierra #69135. Si intentamos reutilizar datos combinados para cross join, esto no puede ocurrir en ClickHouse por ahora. Es mejor mantener have_compressed en reuseJoinedData. #69404 (lgbo).
  • Hacer que la función materialize() devuelva una columna completa cuando el parámetro sea una columna dispersa. #69429 (Alexander Gololobov).
  • Se corrigió un LOGICAL_ERROR relacionado con la función sqidDecode (#69450). #69451 (Robert Schulze).
  • Corrección rápida del problema de s3queue en 24.6 o de la consulta CREATE para la base de datos Replicated. #69454 (Kseniia Sumarokova).
  • Se corrigió un caso en el que el consumo de memoria era demasiado elevado debido a la compactación en las consultas INSERT INTO ... SELECT o CREATE TABLE AS SELECT. #69469 (Yarik Briukhovetskyi).
  • Las sentencias SHOW COLUMNS y SHOW INDEX ahora funcionan correctamente si el nombre de la tabla contiene puntos. #69514 (Salvatore Mesoraca).
  • Ahora se prohíbe el uso de la caché de consultas para consultas con un modo de desbordamiento != ‘throw’. Esto evita situaciones en las que resultados de consultas potencialmente truncados e incorrectos podrían almacenarse en la caché de consultas. (issue #67476). #69549 (Robert Schulze).
  • Se conserva el orden original de las condiciones durante el traslado a prewhere. Anteriormente, el orden podía cambiar, lo que podía provocar fallos en las consultas cuando ese orden era importante. #69560 (Kruglov Pavel).
  • Se corrigió el preprocesamiento de múltiples solicitudes de Keeper tras un error ZNOAUTH. #69627 (Antonio Andelic).
  • Corrige METADATA_MISMATCH que podría haberse producido por el uso de TTL con una cláusula WHERE en DatabaseReplicated al crear una nueva réplica. #69736 (Nikolay Degterinsky).
  • Corrige la configuración tracked_file_ttl_sec de StorageS3(Azure)Queue. Se escribía en Keeper con la clave tracked_file_ttl_sec, pero se leía como tracked_files_ttl_sec, lo que era un error tipográfico. #69742 (Kseniia Sumarokova).
  • Se usa tryconvertfieldtotype en gethyperrectangleforrowgroup. #69745 (Miсhael Stetsyuk).
  • Se revierte “Corrección de prewhere sin columnas y sin granularidad adaptativa del índice (casi sin nada)”’. Debido a esta reversión, pueden producirse errores al leer partes de datos generadas por versiones antiguas de CH (presumiblemente de 2021 o anteriores). #68897 (Alexander Gololobov).

Lanzamiento de ClickHouse 24.8 LTS, 2024-08-20. Presentación, Video

Cambio incompatible con versiones anteriores

  • clickhouse-client y clickhouse-local ahora usan de forma predeterminada el modo multiconsulta (en lugar del modo de consulta única). Por ejemplo, clickhouse-client -q "SELECT 1; SELECT 2" ahora funciona, mientras que antes los usuarios tenían que añadir --multiquery (o -n). La opción --multiquery/-n ha quedado obsoleta. Las consultas INSERT en sentencias multiconsulta se tratan de forma especial según su cláusula FORMAT: si el FORMAT es VALUES (el caso más habitual), el final de la sentencia INSERT se representa con un punto y coma ; al final de la consulta. Para todos los demás FORMATs (por ejemplo, CSV o JSONEachRow), el final de la sentencia INSERT se representa con dos saltos de línea \n\n al final de la consulta. #63898 (FFish).
  • En versiones anteriores, era posible usar una sintaxis alternativa para los tipos de datos LowCardinality añadiendo WithDictionary al nombre del tipo de dato. Era una implementación inicial funcional y nunca se documentó ni se expuso públicamente. Ahora está obsoleta. Si ha utilizado esta sintaxis, debe ejecutar ALTER en sus tablas y renombrar los tipos de datos a LowCardinality. #66842 (Alexey Milovidov).
  • Se corrigen errores lógicos en el almacenamiento Buffer usado con una tabla de destino distribuida. Es un cambio incompatible con versiones anteriores: las consultas que usan Buffer con una tabla de destino distribuida pueden dejar de funcionar si la tabla aparece más de una vez en la consulta (por ejemplo, en una autounión). #67015 (vdimir).
  • En versiones anteriores, llamar a funciones para distribuciones aleatorias basadas en la función gamma (como Chi-Squared, Student o Fisher) con argumentos negativos cercanos a cero provocaba cálculos prolongados o un bucle infinito. En la nueva versión, llamar a estas funciones con argumentos cero o negativos producirá una excepción. Esto cierra #67297. #67326 (Alexey Milovidov).
  • La tabla del sistema text_log está habilitada de forma predeterminada. Esto es totalmente compatible con versiones anteriores, pero puede que observe un ligero aumento del uso de disco local (esta tabla del sistema ocupa una cantidad mínima de espacio en disco). #67428 (Alexey Milovidov).
  • En versiones anteriores, arrayWithConstant podía ser lento si se le pedía generar arreglos muy grandes. En la nueva versión, está limitado a 1 GB por arreglo. Esto cierra #32754. #67741 (Alexey Milovidov).
  • Se corrige el formato del modificador REPLACE (se prohíbe omitir los paréntesis). #67774 (Azat Khuzhin).
  • Retroportado en #68349: se reimplementa el tipo Dynamic. Ahora, cuando se alcanza el límite de tipos de datos dinámicos, los tipos nuevos no se convierten a String, sino que se almacenan en una estructura de datos especial en formato binario, con el tipo de dato codificado en binario. Ahora, cualquier tipo que se haya insertado alguna vez en una columna Dynamic puede leerse de ella como subcolumna. #68132 (Kruglov Pavel).

Nueva funcionalidad

  • Se añadió un nuevo ajuste de MergeTree, deduplicate_merge_projection_mode, para controlar las proyecciones durante las fusiones (para motores específicos) y la consulta OPTIMIZE DEDUPLICATE. Opciones admitidas: throw (generar una excepción si la proyección no es totalmente compatible con el motor *MergeTree), drop (eliminar la proyección durante la fusión si no puede fusionarse de forma coherente por sí sola) y rebuild (reconstruir la proyección desde cero, lo que supone una operación costosa). #66672 (jsc0218).
  • Se añade la columna virtual _etag para el motor de tabla S3. Corrige #65312. #65386 (skyoct).
  • Se añadió un mecanismo de etiquetado (espacio de nombres) para la caché de consultas. Las mismas consultas con distintas etiquetas se consideran diferentes en la caché de consultas. Ejemplo: SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'abc' y SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'def' ahora crean distintas entradas en la caché de consultas. #68235 (sakulali).
  • Se admiten más variantes de strictness de JOIN (LEFT/RIGHT SEMI/ANTI/ANY JOIN) con condiciones de desigualdad que involucran columnas de las tablas izquierda y derecha, por ejemplo, t1.y < t2.y (consulte la configuración allow_experimental_join_condition). #64281 (lgbo).
  • Interpretación del particionado de estilo Hive para diferentes motores (File, URL, S3, AzureBlobStorage, HDFS). El particionado de estilo Hive organiza los datos en subdirectorios particionados, lo que hace más eficiente consultar y gestionar grandes conjuntos de datos. Actualmente, solo crea columnas virtuales con el nombre y los datos correspondientes. El PR posterior introducirá el filtrado de datos adecuado (mejora del rendimiento). #65997 (Yarik Briukhovetskyi).
  • Se añade la función printf para ofrecer compatibilidad con Spark (aunque puede usarse la función format existente). #66257 (李扬).
  • Añade las opciones restore_replace_external_engines_to_null y restore_replace_external_table_functions_to_null para sustituir los motores externos y los motores de tabla por el motor Null, lo que puede resultar útil para pruebas. Debería funcionar con RESTORE y con la creación explícita de tablas. #66536 (Ilya Yatsishin).
  • Se añadió compatibilidad con la lectura de geometrías MULTILINESTRING en formato WKT mediante la función readWKTLineString. #67647 (Jacob Reckhard).
  • Se añade una nueva función de tabla fuzzQuery. Esta función permite modificar una cadena de consulta dada mediante variaciones aleatorias. Ejemplo: SELECT query FROM fuzzQuery('SELECT 1') LIMIT 5;. #67655 (pufit).
  • Añade una consulta ALTER TABLE ... DROP DETACHED PARTITION ALL para eliminar todas las particiones detached. #67885 (Duc Canh Le).
  • Añade la estadística rows_before_aggregation_at_least a la respuesta de la consulta cuando está habilitada una nueva configuración, rows_before_aggregation. Esta estadística representa el número de filas leídas antes de la agregación. En el contexto de una consulta distribuida, al usar la función de agregación group by o max sin un limit, rows_before_aggregation_at_least puede reflejar el número de filas procesadas por la consulta. #66084 (morning-color).
  • Se admite la consulta OPTIMIZE en las tablas Join para reducir su uso de memoria. #67883 (Duc Canh Le).
  • Permite ejecutar la consulta al instante en play si se añade &run=1 en la URL #66457 (Aleksandr Musorin).

Funcionalidad experimental

  • Implementa un nuevo tipo de dato JSON. #66444 (Kruglov Pavel).
  • Añade el nuevo motor de tabla TimeSeries. #64183 (Vitaly Baranov).
  • Añade un nuevo motor de almacenamiento experimental Kafka para almacenar los offsets en Keeper en lugar de depender de su confirmación en Kafka. Esto hace que la confirmación en las tablas de ClickHouse sea atómica con respecto al consumo desde la cola. #57625 (János Benjamin Antal).
  • Usa un método adaptativo para calcular el tamaño de las tareas de lectura (adaptativo significa que depende del tamaño de las columnas leídas) para las réplicas paralelas. #60377 (Nikita Taranov).
  • Se añadió el tipo de estadísticas count_min (count-min sketches), que proporciona estimaciones de selectividad para predicados de igualdad como col = 'val'. Los tipos de datos compatibles son string, date, datetime y los tipos numéricos. #65521 (JackyWoo).

Mejora del rendimiento

  • La configuración optimize_functions_to_subcolumns está habilitada de forma predeterminada. #68053 (Anton Popov).
  • Los metadatos del directorio de disco plain_rewritable se almacenan en la estructura __meta, por separado de los datos de MergeTree en el almacenamiento de objetos. El disco plain_rewritable se traslada a una estructura de directorios plana. #65751 (Julia Kartseva).
  • Se mejora el squashing de columnas (una operación que ocurre en las consultas INSERT) para los tipos String/Array/Map/Variant/Dynamic, reservando por adelantado la memoria necesaria para todas las subcolumnas. #67043 (Kruglov Pavel).
  • Se acelera SYSTEM FLUSH LOGS y se vacían los logs al apagarse. #67472 (Sema Checherinda).
  • Se mejoró el rendimiento general de las fusiones al reducir la sobrecarga de los pasos de planificación. #68016 (Anton Popov).
  • Se acelera la eliminación de tablas para la consulta DROP DATABASE; el valor predeterminado de database_catalog_drop_table_concurrency se aumentó a 16. #67228 (Nikita Mikhaylov).
  • Se evita asignar demasiada capacidad a una columna Array al escribir ORC. El rendimiento mejora un 15 % para una columna Array. #67879 (李扬).
  • Se aceleran significativamente las mutaciones para MergeTree no replicado. #66911 #66909 (Alexey Milovidov).

Mejora

  • La configuración allow_experimental_analyzer pasa a llamarse enable_analyzer. El nombre anterior se conserva como alias. Esto significa que el Analizador ya no está en beta y ya está totalmente listo para producción. #66438 (Nikita Mikhaylov).
  • Se mejora la inferencia de esquemas para valores de fecha y hora. Ahora, DateTime64 se usa solo cuando la fecha y hora tiene una parte fraccionaria; de lo contrario, se usa DateTime normal. La inferencia de Date/DateTime ahora es más estricta, especialmente cuando date_time_input_format='best_effort', para evitar inferir valores de fecha y hora a partir de cadenas en casos extremos. #68382 (Kruglov Pavel).
  • ClickHouse server ahora es compatible con el nuevo ajuste max_keep_alive_requests. Para las conexiones HTTP keep-alive al servidor, funciona junto con keep_alive_timeout: si el tiempo de inactividad aún no ha expirado, pero ya se han realizado más de max_keep_alive_requests solicitudes a través de esa conexión, el servidor la cerrará. #61793 (Nikita Taranov).
  • Diversas mejoras en el dashboard avanzado. Esto cierra #67697. Esto cierra #63407. Esto cierra #51129. Esto cierra #61204. #67701 (Alexey Milovidov).
  • No se exige un privilegio para REMOTE al crear una tabla distribuida: basta con un privilegio para el motor Distributed. #65419 (jsc0218).
  • No pasar explícitamente los logs de Keeper en la imagen de Docker para permitir su sobrescritura. #65564 (Azat Khuzhin).
  • Se introdujo la configuración use_same_password_for_base_backup para las consultas BACKUP y RESTORE, lo que permite crear y restaurar copias de seguridad incrementales en archivos protegidos con contraseña. #66214 (Samuele).
  • Ignorar async_load_databases para la consulta ATTACH (anteriormente, era posible que ATTACH finalizara antes de que se hubieran adjuntado las tablas). #66240 (Azat Khuzhin).
  • Se añadieron logs y métricas para las conexiones rechazadas (cuando no hay recursos suficientes). #66410 (Alexander Tokmakov).
  • Se añadió compatibilidad con el tipo UUID correcto para el engine de MongoDB. #66671 (Azat Khuzhin).
  • Se añadieron métricas de retraso de replicación y tiempo de recuperación. #66703 (Miсhael Stetsyuk).
  • Se añade la métrica DiskS3NoSuchKeyErrors. #66704 (Miсhael Stetsyuk).
  • Asegúrese de que la cláusula COMMENT funcione con todos los motores de tabla. #66832 (Joe Lynch).
  • La función mapFromArrays ahora acepta Map(K, V) como primer argumento; por ejemplo, SELECT mapFromArrays(map('a', 4, 'b', 4), ['aa', 'bb']) ahora funciona y devuelve {('a',4):'aa',('b',4):'bb'}. Además, si el primer argumento es un Array, ahora también puede ser de tipo Array(Nullable(T)) o Array(LowCardinality(Nullable(T))), siempre que los valores reales del array no sean NULL. #67103 (李扬).
  • Se lee la configuración de clickhouse-local desde ~/.clickhouse-local. #67135 (Azat Khuzhin).
  • Se cambió el nombre de la configuración input_format_orc_read_use_writer_time_zone a input_format_orc_reader_timezone y se permitió al usuario establecer la zona horaria del lector. #67175 (kevinyhzou).
  • Reducir la gravedad del error Socket is not connected cuando el otro extremo restablece inmediatamente la conexión HTTP tras conectarse, cierra #34218. #67177 (vdimir).
  • Añadida la posibilidad de cargar dashboards para system.dashboards desde la configuración (una vez configurados, reemplazan el conjunto predeterminado de dashboards). #67232 (Azat Khuzhin).
  • Las funciones de ventana en SQL usan tradicionalmente snake case. ClickHouse usa camelCase, por lo que se han creado los nuevos alias denseRank() y percentRank(). Estas nuevas funciones pueden llamarse exactamente igual que las funciones originales dense_rank() y percent_rank(). Tanto la sintaxis en snake case como en camelCase siguen siendo válidas. También se ha añadido una nueva prueba para cada una de estas funciones. Esto cierra #67042. #67334 (Peter Nguyen).
  • Detecta automáticamente el formato del archivo de configuración si no es .xml, .yml o .yaml. Si el archivo empieza por <, podría ser XML; de lo contrario, podría ser YAML. Esto resulta útil al proporcionar un archivo de configuración desde una tubería: clickhouse-server --config-file <(echo "hello: world"). #67391 (sakulali).
  • Las funciones formatDateTime y formatDateTimeInJodaSyntax ahora consideran opcional su parámetro de formato. Si no se especifica, se asumen las cadenas de formato %Y-%m-%d %H:%i:%s y yyyy-MM-dd HH:mm:ss. Ejemplo: SELECT parseDateTime('2021-01-04 23:12:34') ahora devuelve el valor DateTime 2021-01-04 23:12:34 (antes, esto generaba una excepción). #67399 (Robert Schulze).
  • Reintento automático de las solicitudes de Keeper en KeeperMap si se producen por timeout o pérdida de conexión. #67448 (Antonio Andelic).
  • Agregar -no-pie a las compilaciones de Aarch64 Linux para permitir la introspección y la simbolización correctas de las trazas de pila tras reiniciar ClickHouse. #67916 (filimonov).
  • Se añadieron eventos de perfil para fusiones y mutaciones, lo que mejora la introspección. #68015 (Anton Popov).
  • Elimina los logs innecesarios de MergeTree no replicado. #68238 (Daniil Ivanik).

Mejora de compilación/pruebas/empaquetado

  • La comprobación de inestabilidad de las pruebas de integración ahora ejecutará cada caso de prueba varias veces para detectar más problemas y hacerlas más fiables. Utiliza la biblioteca pytest-repeat para ejecutar un caso de prueba varias veces en el mismo entorno. Para que la prueba finalice correctamente, es importante limpiar las tablas y otras entidades al final de cada caso de prueba. La repetición es mucho más rápida que varias ejecuciones de pytest, ya que inicia los contenedores necesarios una sola vez. #66986 (Ilya Yatsishin).
  • Se desbloquea el uso de CLion con ClickHouse. En versiones anteriores, CLion se congelaba durante un minuto con cada pulsación de tecla. Esto cierra #66994. #66995 (Alexey Milovidov).
  • getauxval: evita un fallo durante una reejecución del sanitizador debido a la alta entropía de ASLR en los kernels de Linux más recientes. #67081 (Raúl Marín).
  • Algunas partes del código del cliente se han extraído a un único archivo y se les ha aplicado el mayor nivel de optimización posible, incluso en compilaciones de depuración. Esto cierra: #65745. #67215 (Nikita Mikhaylov).

Corrección de errores

  • Solo es relevante para el tipo de dato Variant experimental. Se corrige un fallo con el tipo Variant + AggregateFunction. #67122 (Kruglov Pavel).
  • Se corrige un fallo en DistributedAsyncInsert cuando la conexión está vacía. #67219 (Pablo Marcos).
  • Se corrige el fallo de uniq y uniqTheta con el argumento tuple(). Cierra #67303. #67306 (flynn).
  • Corrige #66026. Evita recorrer argumentos sin resolver de funciones de tabla en ReplaceTableNodeToDummyVisitor. #67522 (Dmitry Novik).
  • Se corrigió un posible desbordamiento de pila en la función JSONMergePatch. Se cambió el nombre de esta función de jsonMergePatch a JSONMergePatch porque el nombre anterior era incorrecto. El nombre anterior se mantiene por compatibilidad. Se mejoró el diagnóstico de errores de la función. Esto cierra #67304. #67756 (Alexey Milovidov).
  • Se corrigió una desreferenciación de puntero NULL, provocada por una consulta especialmente diseñada, que provocaba el fallo del servidor mediante hopEnd, hopStart, tumbleEnd y tumbleStart. #68098 (Salvatore Mesoraca).
  • Se corrigió el error Not-ready Set en algunas tablas del sistema al filtrar con subconsultas. #66018 (Michael Kolupaev).
  • Se corrigió la lectura de las subcolumnas tras la consulta ALTER ADD COLUMN. #66243 (Anton Popov).
  • Se corrigieron los literales booleanos en la consulta enviada a la base de datos externa (para motores como PostgreSQL). #66282 (vdimir).
  • Se corrigió el formato de la consulta con una expresión con alias en JOIN ON; p. ej., ... JOIN t2 ON (x = y) AS e ORDER BY x debería formatearse como ... JOIN t2 ON ((x = y) AS e) ORDER BY x. #66312 (vdimir).
  • Se corrige cluster() para el secreto entre servidores (se conserva el usuario inicial como antes). #66364 (Azat Khuzhin).
  • Corrige un posible error en tiempo de ejecución al convertir un campo Array con valores NULL a Array(Variant). #66727 (Kruglov Pavel).
  • Corrección de un bloqueo mutuo ocasional en Context::getDDLWorker. #66843 (Alexander Gololobov).
  • Se corrigió la creación de la tabla KeeperMap tras un drop incompleto. #66865 (Antonio Andelic).
  • Corrige el error de una parte dañada al restaurar en un disco s3_plain_rewritable. #66881 (Vitaly Baranov).
  • En casos excepcionales, ClickHouse podía considerar que las partes estaban dañadas debido a algunas proyecciones inesperadas en el disco. Ahora ya está corregido. #66898 (alesapin).
  • Corrige la detección de formatos no válidos durante la inferencia de esquema, que podía provocar el error lógico El formato no admite la inferencia de esquema. #66899 (Kruglov Pavel).
  • Corrige un posible interbloqueo al cancelar consultas con réplicas paralelas. #66905 (Nikita Taranov).
  • Prohibir create as select incluso cuando database_replicated_allow_heavy_create está configurado. Estaba prohibido incondicionalmente en la 23.12 y se permitió accidentalmente con esta configuración en la 24.7 sin publicar. #66980 (vdimir).
  • La lectura desde numbers podía lanzar una excepción por error cuando se establecía el límite max_rows_to_read. Esto cierra #66992. #66996 (Alexey Milovidov).
  • Añade la conversión de tipos adecuada a las funciones de ventana lagInFrame y leadInFrame; corrige la prueba de msan. #67091 (Yakov Olkhovskiy).
  • TRUNCATE DATABASE detenía la replicación como si fuera una consulta DROP DATABASE; se ha corregido. #67129 (Alexander Tokmakov).
  • Use un contexto de cliente independiente en clickhouse-local. #67133 (Vitaly Baranov).
  • Se corrige el error Cannot convert column because it is non constant in source stream but must be constant in result. en una consulta que lee de la tabla Merge sobre la tabla Distriburted con un segmento. #67146 (Nikolai Kochetov).
  • Comportamiento correcto de ORDER BY all con enable_order_by_all deshabilitado y con réplicas paralelas (también en consultas distribuidas). #67153 (Igor Nikonov).
  • Se corrigió el uso incorrecto de input_format_max_bytes_to_read_for_schema_inference en la caché de schema. #67157 (Kruglov Pavel).
  • Se corrige la fuga de memoria en count distinct cuando se produce una excepción durante un group by con una única clave Nullable. #67171 (Jet He).
  • Corrige un error en la optimización que convierte OUTER JOIN en INNER JOIN. Con esto se cierra #67156. Con esto se cierra #66447. El error se introdujo en https://github.com/ClickHouse/ClickHouse/pull/62907. #67178 (Maksim Kita).
  • Corrige el error Conversion from AggregateFunction(name, Type) to AggregateFunction(name, Nullable(Type)) is not supported. El fallo se debía a la optimización optimize_rewrite_aggregate_function_with_if. Corrige #67112. #67229 (Nikolai Kochetov).
  • Se corrigió el bloqueo de la consulta al usar una tupla vacía como lado izquierdo de la función IN. #67295 (Duc Canh Le).
  • Era posible crear un JSON con un nivel de anidamiento muy profundo que provocaba un desbordamiento de pila al omitir campos desconocidos. Esto cierra #67292. #67324 (Alexey Milovidov).
  • Se corrige la operación de adjuntar una tabla ReplicatedMergeTree tras una excepción durante el inicio. #67360 (Antonio Andelic).
  • Se corrigió un fallo de segmentación causado por desvincularse incorrectamente del grupo de hilos en Aggregator. #67385 (Antonio Andelic).
  • Se corrigió un caso adicional en el que se especificaba una función no determinista en PK. #67395 (Nikolai Kochetov).
  • Se corrigió un problema en el índice bloom_filter que hacía fallar consultas con condiciones algo extrañas como (k=2)=(k=2) o has([1,2,3], k). #67423 (Michael Kolupaev).
  • Analizar correctamente el nombre de archivo/URI que contiene :: si no es un archivo comprimido. #67433 (Antonio Andelic).
  • Se corrige la espera de las tareas en ~WriteBufferFromS3 en caso de que WriteBuffer se hubiera cancelado. #67459 (Kseniia Sumarokova).
  • Protege los directorios temporales de partes para evitar que se eliminen durante RESTORE. #67491 (Vitaly Baranov).
  • Corrige la ejecución de funciones de cortocircuito anidadas. #67520 (Kruglov Pavel).
  • Se corrige Logical error: Expected the argument №N of type T to have X rows, but it has 0. El error podía ocurrir en una consulta remota con una expresión constante en GROUP BY (con el nuevo analizador). #67536 (Nikolai Kochetov).
  • Corregido el join en tuplas con NULL: algunas consultas con el nuevo analizador y NULL dentro de la tupla en la sección JOIN ON devolvían resultados incorrectos. #67538 (vdimir).
  • Se corrige la reprogramación redundante de FileCache::freeSpaceRatioKeepingThreadFunc() en caso de que la caché esté llena y no se puedan desalojar entradas. #67540 (Kseniia Sumarokova).
  • Se corrigió la inserción a través de la interfaz HTTP en motores de tipo stream (Kafka, RabbitMQ, NATS). #67554 (János Benjamin Antal).
  • Corrección de la función toStartOfWeek, que devolvía un resultado erróneo con un valor DateTime64 pequeño. #67558 (Yarik Briukhovetskyi).
  • Se corrigió la creación de una vista con una CTE recursiva. #67587 (Yakov Olkhovskiy).
  • Corrige Logical error: 'file_offset_of_buffer_end <= read_until_position' en la caché del sistema de archivos. Cierra #57508. #67623 (Kseniia Sumarokova).
  • Corrige #62282. Se eliminó la llamada a convertFieldToString() y se añadió código de serialización específico para cada tipo de dato. La sustitución de la vista parametrizada fallaba con varios tipos de datos cuando el valor del parámetro era una función o una expresión que devolvía una instancia de un tipo de dato. #67654 (Shankar).
  • Se corrige un fallo en percent_rank. El tipo de frame predeterminado de percent_rank se cambia a range unbounded preceding and unbounded following. Se tiene en cuenta el marco de ventana predeterminado de IWindowFunction, y ahora las funciones de ventana sin una definición de marco de ventana en SQL pueden colocarse correctamente en distintos WindowTransfomers. #67661 (lgbo).
  • Se corrige la recarga de UDFs de SQL con UNION. Anteriormente, al reiniciar el servidor una UDF podía quedar inválida. #67665 (Antonio Andelic).
  • Corrige un posible error lógico “Unexpected return type from if” con el tipo experimental Variant y la configuración habilitada use_variant_as_common_type en la función if con Tuples y Maps. #67687 (Kruglov Pavel).
  • Debido a un error en el kernel de Linux, una consulta puede quedar bloqueada en TimerDescriptor::drain. Esto corrige #37686. #67702 (Alexey Milovidov).
  • Se corrigió la finalización del comando RESTORE ON CLUSTER. #67720 (Vitaly Baranov).
  • Se corrigió el bloqueo del diccionario en caso de CANNOT_SCHEDULE_TASK durante la carga. #67751 (Azat Khuzhin).
  • Las consultas como SELECT count() FROM t WHERE cast(c = 1 or c = 9999 AS Bool) SETTINGS use_skip_indexes=1, con índices bloom filter en c, ahora funcionan correctamente. #67781 (jsc0218).
  • Corrige un resultado de agregación incorrecto en algunas consultas con agregación sin claves y con filtro, cierra #67419. #67804 (vdimir).
  • Validar los tipos de datos experimentales/sospechosos en ALTER ADD/MODIFY COLUMN. #67911 (Kruglov Pavel).
  • Se corrigió el análisis de DateTime64 tras el plegado de constantes en consultas distribuidas; cierra #66773. #67920 (vdimir).
  • Corrige el resultado incorrecto de count() cuando el predicado contiene una función no determinista. #67922 (János Benjamin Antal).
  • Se corrigió el cálculo del límite flexible máximo de hilos en entornos contenerizados donde el número de CPU utilizables está limitado. #67963 (Robert Schulze).
  • Ahora ClickHouse no considera que una parte esté dañada si la proyección no existe en disco, pero sí en checksums.txt. #68003 (alesapin).
  • Se corrigió la omisión de partes no afectadas en las mutaciones con el nuevo analizador. Anteriormente, con el analizador habilitado, los datos de una parte podían ser reescritos por una mutación aunque esta no afectara a esa parte según el predicado. #68052 (Anton Popov).
  • Elimina una optimización incorrecta que suprimía la ordenación en subconsultas que usan OFFSET. Corrige #67906. #68099 (Graham Campbell).
  • Intento de corregir Block structure mismatch in AggregatingStep stream: different types en la optimización de proyecciones agregadas. #68107 (Nikolai Kochetov).
  • Se intenta corregir el fallo de Postgres cuando se cancela una consulta. #68288 (Kseniia Sumarokova).
  • Se corrige la ausencia del modo de sincronización de réplica en la consulta SYSTEM SYNC REPLICA. #68326 (Duc Canh Le).

Lanzamiento de ClickHouse 24.7, 2024-07-30. Presentación, Vídeo

Cambio incompatible con versiones anteriores

  • Se prohíbe CRATE MATERIALIZED VIEW ... ENGINE Replicated*MergeTree POPULATE AS SELECT ... con bases de datos Replicated. #63963 (vdimir).
  • clickhouse-keeper-client solo aceptará rutas en literales de cadena, como ls '/hello/world', no cadenas sin comillas como ls /hello/world. #65494 (Alexey Milovidov).
  • La métrica KeeperOutstandingRequets se renombró a KeeperOutstandingRequests. #66206 (Robert Schulze).
  • Se elimina el campo is_deterministic de la tabla system.functions. #66630 (Alexey Milovidov).
  • La función tuple ahora intentará construir tuplas con nombre en la consulta (controlado por enable_named_columns_in_function_tuple). Se introduce la función tupleNames para extraer nombres de las tuplas. #54881 (Amos Bird).
  • Se cambia cómo funciona la deduplicación en las vistas materializadas. Se corrigieron muchos casos, por ejemplo: - en la tabla de destino: los datos se dividen en 2 o más bloques y esos bloques se consideran duplicados cuando se insertan en paralelo. - en la tabla de destino de la MV: los bloques iguales se deduplican; esto ocurre cuando la MV produce con frecuencia datos iguales como resultado de datos de entrada distintos debido a la agregación. - en la tabla de destino de la MV: los bloques iguales que provienen de distintas MV se deduplican. #61601 (Sema Checherinda).
  • Las funciones bitShiftLeft y bitShitfRight devuelven un error para posiciones de desplazamiento fuera de rango #65838 (Pablo Marcos).

Nueva funcionalidad

  • Se añade compatibilidad con ASOF JOIN para el algoritmo full_sorting_join. #55051 (vdimir).
  • Se admite la authentication JWT en clickhouse-client (solo estará disponible en ClickHouse Cloud). #62829 (Konstantin Bogdanov).
  • Se añaden las funciones SQL changeYear, changeMonth, changeDay, changeHour, changeMinute, changeSecond. Por ejemplo, SELECT changeMonth(toDate('2024-06-14'), 7) devuelve la fecha 2024-07-14. #63186 (cucumber95).
  • Se introducen scripts de arranque que permiten ejecutar consultas preconfiguradas durante la fase de inicio. #64889 (pufit).
  • Se admite accept_invalid_certificate en la configuración de cliente para permitir que el cliente se conecte mediante TCP seguro a un servidor que se ejecuta con un certificado autofirmado; puede utilizarse como abreviatura de las configuraciones de cliente openSSL correspondientes: verificationMode=none + invalidCertificateHandler.name=AcceptCertificateHandler. #65238 (peacewalker122).
  • Se añade system.error_log, que contiene el historial de error values de la tabla system.errors, volcados periódicamente a disco. #65381 (Pablo Marcos).
  • Se añade la aggregate function groupConcat. Es prácticamente lo mismo que arrayStringConcat( groupArray(column), ','). Puede recibir 2 parámetros: un delimitador de cadena y el número de elementos que se van a procesar. #65451 (Yarik Briukhovetskyi).
  • Se añade el almacenamiento AzureQueue. #65458 (Kseniia Sumarokova).
  • Se añade una nueva configuración para desactivar o activar la escritura del índice de páginas en archivos Parquet. #65475 (lgbo).
  • Se introduce la configuración del servidor logger.console_log_level para controlar el nivel de registro en la consola (si está habilitada). #65559 (Azat Khuzhin).
  • Se añade automáticamente un comodín * al final de una ruta de directorio con la table function file. #66019 (Zhidong (David) Guo).
  • Se añade la opción --memory-usage al cliente en modo Non-interactive. #66393 (vdimir).
  • Se crea un cliente interactivo para clickhouse-disks y se añade un disco local desde el directorio local. #64446 (Daniil Ivanik).
  • Cuando se produce una eliminación ligera en una tabla con proyecciones, los usuarios pueden elegir entre lanzar una excepción (de forma predeterminada) o eliminar la proyección. #65594 (jsc0218).
  • Se añaden system tables con la información principal sobre todas las tablas detached. #65400 (Konstantin Morozov).

Funcionalidad experimental

  • Cambia la serialización binaria del tipo de dato Variant: añade el modo compact para evitar escribir el mismo discriminador varias veces en gránulos con una sola variante o solo con valores NULL. Añade la configuración de MergeTree use_compact_variant_discriminators_serialization, habilitada de forma predeterminada. Ten en cuenta que el tipo Variant sigue siendo experimental y que se acepta un cambio de serialización incompatible con versiones anteriores. #62774 (Kruglov Pavel).
  • Añade compatibilidad con almacenamiento backend en disco para clickhouse-keeper. #56626 (Han Fei).
  • Refactoriza las funciones JSONExtract y admite más tipos, incluido el tipo experimental Dynamic. #66046 (Kruglov Pavel).
  • Añade compatibilidad con la subcolumna nula de map para las subcolumnas Variant y Dynamic. #66178 (Kruglov Pavel).
  • Corrige la lectura de subcolumnas Dynamic desde una tabla Memory modificada. Anteriormente, si el parámetro max_types de un tipo Dynamic se cambiaba en una tabla Memory mediante ALTER, la lectura posterior de subcolumnas podía devolver un resultado incorrecto. #66066 (Kruglov Pavel).
  • Añade compatibilidad con cluster_for_parallel_replicas al usar réplicas paralelas con clave personalizada. Esto permite usar réplicas paralelas con clave personalizada con tablas MergeTree. #65453 (Antonio Andelic).

Mejora de rendimiento

  • Se sustituyó el algoritmo de conversión de int a string por uno más rápido (de una versión modificada de amdn/itoa a una versión modificada de jeaiii/itoa). #61661 (Raúl Marín).
  • Los tamaños de las tablas hash creadas por join (algoritmo parallel_hash) ahora se recopilan y se almacenan en caché. Esta información se utilizará para preasignar espacio en las tablas hash en ejecuciones posteriores de consultas y ahorrar tiempo en el redimensionamiento de las tablas hash. #64553 (Nikita Taranov).
  • Se optimizaron las consultas con ORDER BY sobre la clave primaria y WHERE con una condición de alta selectividad mediante el uso de búferes. Se controla con la configuración read_in_order_use_buffering (habilitada de forma predeterminada) y puede aumentar el uso de memoria de la consulta. #64607 (Anton Popov).
  • Se mejoró el rendimiento de la carga de metadatos plain_rewritable. #65634 (Alexey Milovidov).
  • Al adjuntar tablas en discos de solo lectura, se utilizarán menos recursos al no cargar partes obsoletas. #65635 (Alexey Milovidov).
  • Se añadió compatibilidad con hiperrrectángulos minmax para índices Set. #65676 (AntiTopQuark).
  • Se descarga el índice primario de las partes obsoletas para reducir el uso total de memoria. #65852 (Anton Popov).
  • Las funciones replaceRegexpAll y replaceRegexpOne ahora son significativamente más rápidas si el patrón es trivial; es decir, no contiene metacaracteres, clases de patrones, indicadores, caracteres de agrupación, etc. (Gracias a Taiyang Li). #66185 (Robert Schulze).
  • Solicitudes a S3: se reduce el tiempo de retry para las consultas y se aumenta el número de retries para los backups. 8.5 minutos y 100 retries para consultas; 1.2 horas y 1000 retries para restore de backups. #65232 (Sema Checherinda).
  • Se añadió compatibilidad con la optimización de LIMIT en el plan de consulta. Se añadió compatibilidad con el pushdown de LIMIT para el motor PostgreSQL y la table function. #65454 (Maksim Kita).
  • Se mejoró el balanceo de carga de ZooKeeper. La sesión actual no expira hasta que los nodos óptimos vuelven a estar disponibles, a pesar de fallback_session_lifetime. Se añadió compatibilidad con balanceo con reconocimiento de AZ. #65570 (Alexander Tokmakov).
  • DatabaseCatalog elimina tablas más rápido utilizando hasta database_catalog_drop_table_concurrency hilos. #66065 (Sema Checherinda).

Mejora

  • Se mejoró el balanceo de carga de ZooKeeper. La sesión actual no expira hasta que los nodos óptimos estén disponibles, a pesar de fallback_session_lifetime. Se agregó soporte para el balanceo con reconocimiento de AZ. #65570 (Alexander Tokmakov).
  • La configuración optimize_trivial_insert_select está deshabilitada de forma predeterminada. En la mayoría de los casos, debería resultar beneficiosa. No obstante, si observa operaciones de INSERT SELECT más lentas o un mayor uso de memoria, puede volver a activarla o usar SET compatibility = '24.6'. #58970 (Alexey Milovidov).
  • Imprime el stacktrace y la información de diagnóstico si clickhouse-client o clickhouse-local fallan. #61109 (Alexander Tokmakov).
  • El resultado de SHOW INDEX | INDEXES | INDICES | KEYS antes se ordenaba según los nombres de las columnas de la clave primaria. Como esto no resultaba intuitivo, ahora el resultado se ordena según la posición que ocupan las columnas dentro de la clave primaria. #61131 (Robert Schulze).
  • Cambió la forma en que funciona la deduplicación de las vistas materializadas. Se corrigieron muchos casos, como: - en la tabla de destino: los datos se dividen en 2 o más bloques, y esos bloques se consideran duplicados cuando se insertan en paralelo. - en la tabla de destino de la MV: se deduplican los bloques iguales; esto sucede cuando la MV a menudo produce los mismos datos como resultado de distintos datos de entrada debido a la agregación. - en la tabla de destino de la MV: se deduplican los bloques iguales que provienen de distintas MV. #61601 (Sema Checherinda).
  • Se admite la lectura de datos particionados de DeltaLake. El esquema de DeltaLake se infiere leyendo los metadatos en lugar de los datos. #63201 (Kseniia Sumarokova).
  • En la capa TLS de los protocolos componibles solo se aceptaban los parámetros certificateFile y privateKeyFile. https://clickhouse.com/docs/operations/settings/composable-protocols. #63985 (Anton Ivashkin).
  • Se añadió el evento de perfil SelectQueriesWithPrimaryKeyUsage, que indica cuántas consultas SELECT utilizan la clave primaria para evaluar la cláusula WHERE. #64492 (0x01f).
  • Correcciones y mejoras relacionadas con StorageS3Queue. Deducir el valor predeterminado de s3queue_processing_threads_num según el número de núcleos físicos de CPU del servidor (en lugar del valor predeterminado anterior, que era 1). Establecer el valor predeterminado de s3queue_loading_retries en 10. Corregir la posible y ambigua excepción “Uncaught exception” en la columna de excepciones de system.s3queue. No incrementar el número de reintentos en caso de la excepción MEMORY_LIMIT_EXCEEDED. Mover la confirmación de archivos a una etapa posterior a la finalización completa de la inserción en la tabla, para evitar que los archivos se confirmen sin haberse insertado. Añadir los ajustes s3queue_max_processed_files_before_commit, s3queue_max_processed_rows_before_commit, s3queue_max_processed_bytes_before_commit, s3queue_max_processing_time_sec_before_commit para controlar mejor el momento de la confirmación y el vaciado. #65046 (Kseniia Sumarokova).
  • Compatibilidad con alias en funciones de vista parametrizadas (solo con el nuevo analizador). #65190 (Kseniia Sumarokova).
  • Se actualizó para enmascarar la clave de la cuenta en los logs de azureBlobStorage. #65273 (SmitaRKulkarni).
  • Poda de particiones para predicados IN cuando la expresión de filtro forma parte de la expresión PARTITION BY. #65335 (Eduard Karacharov).
  • arrayMin/arrayMax pueden aplicarse a todos los tipos de datos comparables. #65455 (pn).
  • Se mejoró la contabilización de memoria para cgroups v2 para excluir la memoria ocupada por la caché de páginas. #65470 (Nikita Taranov).
  • No se crean configuraciones de formato para cada fila al serializar fragmentos para insertarlos en la tabla EmbeddedRocksDB. #65474 (Duc Canh Le).
  • Reduce el prompt de clickhouse-local a solo :). getFQDNOrHostName() tarda demasiado en macOS, y además no queremos un nombre de host en el prompt de clickhouse-local. #65510 (Konstantin Bogdanov).
  • Se evita mostrar un mensaje de jemalloc sobre las arenas por CPU en máquinas virtuales de gama baja. #65532 (Alexey Milovidov).
  • Se deshabilita de forma predeterminada la caché del sistema de archivos para las descargas en segundo plano. Se volverá a habilitar cuando resolvamos el problema del posible “Memory limit exceeded”, ya que la liberación de memoria se realiza fuera del contexto de la consulta (mientras que el búfer se asigna dentro del contexto de la consulta) si se usan hilos de descarga en segundo plano. Además, es necesario añadir una configuración independiente para definir el tamaño máximo de descarga de los workers en segundo plano (actualmente está limitado por max_file_segment_size, que podría ser demasiado grande). #65534 (Kseniia Sumarokova).
  • Se añade una nueva opción de configuración <config_reload_interval_ms> que permite especificar con qué frecuencia ClickHouse recargará la configuración. #65545 (alesapin).
  • Implementar la codificación binaria para los tipos de datos de ClickHouse y añadir su especificación a la documentación. Utilizarla en la serialización binaria de Dynamic y permitir su uso en los formatos RowBinaryWithNamesAndTypes y Native mediante la configuración. #65546 (Kruglov Pavel).
  • Los ajustes del servidor compiled_expression_cache_size y compiled_expression_cache_elements_size ahora se muestran en system.server_settings. #65584 (Robert Schulze).
  • Se añade compatibilidad con la identificación de usuarios basada en la extensión SubjectAltName de x509. #65626 (Anton Kozlov).
  • clickhouse-local respetará max_server_memory_usage y max_server_memory_usage_to_ram_ratio del archivo de configuración. También establecerá de forma predeterminada el uso máximo de memoria en el 90 % de la memoria del sistema, igual que clickhouse-server. #65697 (Alexey Milovidov).
  • Se añade un script para hacer una copia de seguridad de tus archivos en ClickHouse. #65699 (Alexey Milovidov).
  • Origen de PostgreSQL para admitir la cancelación de consultas. #65722 (Maksim Kita).
  • Hacer que allow_experimental_analyzer quede controlado por el iniciador en las consultas distribuidas. Esto garantiza la compatibilidad y la corrección durante las operaciones en clústeres con versiones mixtas. #65777 (Nikita Mikhaylov).
  • Respetar el límite de CPU del cgroup en Keeper. #65819 (Antonio Andelic).
  • Se permite usar la función concat con argumentos vacíos :) select concat();. #65887 (李扬).
  • Permite controlar las colecciones con nombre en clickhouse-local. #65973 (Alexey Milovidov).
  • Mejora de los eventos de perfil relacionados con Azure. #65999 (alesapin).
  • Compatibilidad con la lectura de archivos ORC en la zona horaria del escritor. #66025 (kevinyhzou).
  • Se añaden opciones de configuración para controlar las conexiones a PostgreSQL. La opción de configuración postgresql_connection_attempt_timeout especifica el valor que se pasa al parámetro connect_timeout de la URL de conexión. La opción de configuración postgresql_connection_pool_retries especifica el número de reintentos para establecer una conexión con el endpoint de PostgreSQL. #66232 (Dmitry Novik).
  • Reducir la imprecisión de input_wait_elapsed_us/elapsed_us en system.processors_profile_log. #66239 (Azat Khuzhin).
  • Mejora de ProfileEvents para la caché del sistema de archivos. #66249 (zhukai).
  • Añade ajustes para ignorar la cláusula ON CLUSTER en las consultas de gestión de colecciones con nombre con almacenamiento replicado. #66288 (MikhailBurdukov).
  • La función generateSnowflakeID ahora permite especificar un ID de máquina como parámetro para evitar colisiones en clusters de gran tamaño. #66374 (ZAWA_ll).
  • Desactivar la suspensión con Ctrl+Z en modo interactivo. Este es un error habitual y no es el comportamiento esperado para casi ningún usuario. Imagino que solo unos pocos usuarios muy avanzados podrían apreciar la posibilidad de enviar aplicaciones de terminal a segundo plano, pero no conozco a ninguno. #66511 (Alexey Milovidov).
  • Se añadió una opción para validar el tipo de la clave primaria en Dictionaries. Sin esta opción, en los layouts simples, cualquier tipo de columna se convierte implícitamente a UInt64. #66595 (MikhailBurdukov).

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

  • Comprobar las dependencias cíclicas en las consultas CREATE/REPLACE/RENAME/EXCHANGE y lanzar una excepción si existe alguna. Anteriormente, estas dependencias cíclicas podían provocar un interbloqueo durante el arranque del servidor. También se corrigen algunos errores en la creación de dependencias. #65405 (Kruglov Pavel).
  • Corrige tamaños inesperados en columnas LowCardinality en llamadas a funciones. #65298 (Raúl Marín).
  • Se corrige un bloqueo en maxIntersections. #65689 (Raúl Marín).
  • Corrige el restablecimiento de la cláusula VALID UNTIL en la definición del usuario tras un reinicio. #66409 (Nikolay Degterinsky).
  • Se corrige la columna de tiempo restante en SHOW MERGES. #66735 (Alexey Milovidov).
  • Query was cancelled podría haberse impreso dos veces en clickhouse-client. Este comportamiento ya se ha corregido. #66005 (Nikita Mikhaylov).
  • Se corrigió un fallo al usar MaterializedMySQL (que es una funcionalidad experimental no compatible) con TABLE OVERRIDE que asigna un campo MySQL NULL a un campo ClickHouse no NULL. #54649 (Filipp Ozinov).
  • Se corrige un error lógico cuando la expresión PREWHERE no leía ninguna columna y la tabla no tenía granularidad de índice adaptativa (tabla muy antigua). #59173 (Alexander Gololobov).
  • Se corrige un error del búfer de cancelación al cancelar una consulta. #64478 (Sema Checherinda).
  • Corregido el rellenado de las columnas de las partes a partir de los metadatos (cuando columns.txt no existe). #64757 (Azat Khuzhin).
  • Se corrige un cierre inesperado en ALTER TABLE ... ON CLUSTER ... MODIFY SQL SECURITY. #64957 (pufit).
  • Se corrige el fallo al destruir AccessControl: se añade un cierre explícito. #64993 (Vitaly Baranov).
  • Eliminar recursivamente la función inyectiva del argumento de las funciones uniq*. Antes esto funcionaba correctamente, pero dejó de hacerlo en el nuevo analizador. #65140 (Duc Canh Le).
  • Corrige un nombre de proyección inesperado al ejecutar una consulta con CTE. #65267 (wudidapaopao).
  • Se requiere el privilegio dictGet para acceder a diccionarios mediante consulta directa o el motor de tabla Dictionary. #65359 (Joe Lynch).
  • Se corrige la autenticación de S3 específica por usuario con copias de seguridad incrementales. #65481 (Antonio Andelic).
  • Deshabilita la optimización non-intersecting-parts para las consultas con FINAL si estaba habilitada la optimización read-in-order. Esto podría dar lugar a un resultado de consulta incorrecto. Como solución temporal, deshabilita do_not_merge_across_partitions_select_final y split_parts_ranges_into_intersecting_and_non_intersecting_final antes de que se integre esta corrección. #65505 (Nikolai Kochetov).
  • Se corrige la aparición de la excepción Index out of bound for blob metadata en caso de que se filtraran todos los archivos del lote de la lista. #65523 (Kseniia Sumarokova).
  • Se corrige NOT_FOUND_COLUMN_IN_BLOCK durante la fusión de deduplicación de una proyección. #65573 (Yakov Olkhovskiy).
  • Se corrigió un error en MergeJoin. Una columna en serialización dispersa podía tratarse como una columna de su tipo anidado aunque no se hubiera realizado la conversión necesaria. #65632 (Nikita Taranov).
  • Se corrigió un error que impedía que el nivel de compatibilidad ‘23.4’ se aplicara correctamente. #65737 (cw5121).
  • Se corrigió la tabla ODBC con campos Nullable. #65738 (Rodolphe Dugé de Bernonville).
  • Se corrige una condición de carrera en TCPHandler, que podía producirse en caso de error fatal. #65744 (Kseniia Sumarokova).
  • Se corrigieron excepciones no válidas en la función parseDateTime con los marcadores de posición %F y %D. #65768 (Antonio Andelic).
  • En las consultas que leen de PostgreSQL, se cancela la consulta interna de PostgreSQL si la consulta de ClickHouse ha finalizado. De lo contrario, la consulta de ClickHouse no se puede cancelar hasta que finalice la consulta interna de PostgreSQL. #65771 (Maksim Kita).
  • Se corrigió un error en la lógica de cortocircuito al usar el analizador antiguo y dictGetOrDefault. #65802 (jsc0218).
  • Se corrige un error que provocaba que EmbeddedRocksDB con escritura TTL generara archivos SST dañados. #65816 (Duc Canh Le).
  • Las funciones bitTest, bitTestAll y bitTestAny ahora devuelven un error si el índice de bits especificado está fuera de rango #65818 (Pablo Marcos).
  • La opción join_any_take_last_row se admite en cualquier consulta con hash join. #65820 (vdimir).
  • Mejor manejo de las condiciones de join que incluyen comprobaciones IS NULL (por ejemplo, ON (a = b AND (a IS NOT NULL) AND (b IS NOT NULL) ) OR ( (a IS NULL) AND (b IS NULL) ) se reescribe como ON a <=> b), y se corrige una optimización incorrecta cuando hay condiciones distintas de IS NULL. #65835 (vdimir).
  • Se corrige el aumento del uso de memoria en S3Queue. #65839 (Kseniia Sumarokova).
  • Se corrige el manejo de empates en arrayAUC para que coincida con sklearn. #65840 (gabrielmcg44).
  • Se corrigen posibles problemas en las conexiones TLS del protocolo del servidor MySQL. #65917 (Azat Khuzhin).
  • Se corrigen posibles problemas en las conexiones TLS del protocolo cliente de MySQL. #65938 (Azat Khuzhin).
  • Corrige el manejo de SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITE con timeout cero. #65941 (Azat Khuzhin).
  • Añade las configuraciones que faltan input_format_csv_skip_first_lines/input_format_tsv_skip_first_lines/input_format_csv_try_infer_numbers_from_strings/input_format_csv_try_infer_strings_from_quoted_tuples a la caché de inferencia de esquemas, ya que pueden cambiar el esquema resultante. Esto evita resultados incorrectos en la inferencia de esquemas cuando se modifican estas configuraciones. #65980 (Kruglov Pavel).
  • La columna _size en el motor s3 y en la función de tabla s3 indica el tamaño de un archivo dentro del archivo comprimido, no el tamaño del propio archivo comprimido. #65993 (Daniil Ivanik).
  • Se corrigió la resolución de subcolumnas dinámicas en el analizador y se evitó leer la columna completa al leer una subcolumna dinámica. #66004 (Kruglov Pavel).
  • Se corrige la fusión de la configuración de from_env con sobrescrituras de replace. #66034 (Azat Khuzhin).
  • Corrige un posible bloqueo en GRPCServer durante el cierre. #66061 (Vitaly Baranov).
  • Se corrigieron varios casos de la función has con argumentos LowCardinality no constantes. #66088 (Anton Popov).
  • Corrección de groupArrayIntersect. Presentaba un comportamiento incorrecto en la función merge(). Además, se corrigió el comportamiento de deserialise() para datos numéricos y generales. #66103 (Yarik Briukhovetskyi).
  • Se corrigió un error de desbordamiento de búfer en la implementación de unbin/unhex. #66106 (Nikita Taranov).
  • Se deshabilitó la optimización merge-filters introducida en #64760. Puede provocar una excepción si la optimización fusiona dos expresiones de filtro y no aplica una evaluación con cortocircuito. #66126 (Nikolai Kochetov).
  • Se corrigió el problema por el que el servidor no podía interpretar archivos Avro con arrays codificados con un tamaño de bloque negativo, algo que ahora permite la especificación de Avro. #66130 (Serge Klochkov).
  • Se corrigió un error en el cliente de ZooKeeper: una sesión podía quedar bloqueada en un estado inutilizable después de recibir un error de hardware de ZooKeeper. Por ejemplo, esto podía ocurrir debido al “soft memory limit” en ClickHouse Keeper. #66140 (Alexander Tokmakov).
  • Se corrige un problema en SumIfToCountIfVisitor y en los enteros con signo. #66146 (Raúl Marín).
  • Se corrigió un caso poco frecuente de ausencia de datos en el resultado de una consulta distribuida. #66174 (vdimir).
  • Se corrige el orden de procesamiento de los campos de metadatos en StorageDeltaLake. #66211 (Kseniia Sumarokova).
  • No lanzar TIMEOUT_EXCEEDED en el modo none_only_active de distributed_ddl_output_mode. #66218 (Alexander Tokmakov).
  • Se corrige la gestión del límite para system.numbers_mt cuando no se puede usar ningún índice. #66231 (János Benjamin Antal).
  • Se corrigió la forma en que el servidor de ClickHouse detecta el número máximo de núcleos de CPU utilizables según lo especificado por cgroups v2 cuando el servidor se ejecuta en un contenedor como Docker. En concreto, los contenedores suelen ejecutar su proceso en el cgroup raíz, que tiene un nombre vacío. En ese caso, ClickHouse ignoraba los límites de CPU establecidos por cgroups v2. #66237 (filimonov).
  • Se corrige el error Not-ready set cuando se usa una subconsulta con IN en la restricción. #66261 (Nikolai Kochetov).
  • Se corrigió el reporte de errores al copiar a S3 o AzureBlobStorage. #66295 (Vitaly Baranov).
  • Impide que watchdog mantenga descriptores de archivos de log desvinculados (rotados). #66334 (Aleksei Filatov).
  • Se corrige el error por el cual logicalexpressionoptimizerpass perdía el tipo lógico de la constante. #66344 (pn).
  • Se corrige el error Column identifier is already registered al usar group_by_use_nulls=true y el nuevo analizador. #66400 (Nikolai Kochetov).
  • Corrige un posible resultado incorrecto en consultas que realizan join y filtran tablas con engine externo (como PostgreSQL), debido a un pushdown de filtros demasiado agresivo. A partir de ahora, las condiciones de la sección where no se enviarán a la base de datos externa en caso de outer join con una tabla externa. #66402 (vdimir).
  • Se añadió la materialización de la columna que faltaba para cross join. #66413 (lgbo).
  • Se corrige el error Cannot find column en consultas con una expresión constante en la clave GROUP BY y con el nuevo analyzer habilitado. #66433 (Nikolai Kochetov).
  • Se evita un posible error lógico durante la importación en formato Npy en caso de un nivel incorrecto de anidamiento de arrays; se corrigen las pruebas para otros tipos de errores. #66461 (Yarik Briukhovetskyi).
  • Corrige el valor incorrecto de count() cuando hay una función no determinista en el predicado. #66510 (Duc Canh Le).
  • Hacer un seguimiento correcto de la memoria en Allocator::realloc. #66548 (Antonio Andelic).
  • Se corrigió la lectura de memoria sin inicializar al calcular el hash de tuplas vacías. #66562 (Alexey Milovidov).
  • Se corrige un resultado no válido en las consultas con WINDOW. Esto podía ocurrir cuando las columnas PARTITION tienen serialización dispersa y las funciones de ventana se ejecutan en paralelo. #66579 (Nikolai Kochetov).
  • Se corrige la eliminación de las colecciones nombradas en el almacenamiento local. #66599 (János Benjamin Antal).
  • Se corrige un problema por el que column_length no se actualizaba en ColumnTuple::insertManyFrom. #66626 (lgbo).
  • Corrige los errores Unknown identifier y Column is not under aggregate function en consultas con la expresión (column IS NULL). El error se desencadenaba por #65088 y solo se producía con el analizador deshabilitado. #66654 (Nikolai Kochetov).
  • Se corrigió el error Method getResultType is not supported for QUERY query node que se producía cuando se usaba una subconsulta escalar como primer argumento de IN (con el nuevo analizador). #66655 (Nikolai Kochetov).
  • Corrige un posible error PARAMETER_OUT_OF_BOUND al leer una subcolumna de Variant. #66659 (Kruglov Pavel).
  • Corrige un caso poco frecuente de merge atascado tras eliminar una columna. #66707 (Raúl Marín).
  • Se corrige la aserción isUniqTypes al ejecutar insert select desde orígenes remotos. #66722 (Sema Checherinda).
  • Se corrige un error de lógica en PrometheusRequestHandler. #66621 (Vitaly Baranov).
  • Se corrigió el caso de la función indexHint detectado por el fuzzer. #66286 (Anton Popov).
  • Se corrige el formato del AST de ‘create table b empty as a’. #64951 (Michael Kolupaev).

Lanzamiento de ClickHouse 24.6, 2024-07-01. Presentación, Video

Cambio incompatible con versiones anteriores

  • Se habilita de forma predeterminada la carga asíncrona de bases de datos y tablas. Consulte async_load_databases en config.xml. Aunque este cambio es totalmente compatible, puede introducir una diferencia de comportamiento. Cuando async_load_databases es false, como en las versiones anteriores, el servidor no aceptará conexiones hasta que se hayan cargado todas las tablas. Cuando async_load_databases es true, como en la nueva versión, el servidor puede aceptar conexiones antes de que se carguen todas las tablas. Si se realiza una consulta a una tabla que aún no se ha cargado, esta esperará a que finalice la carga de la tabla, lo que puede llevar un tiempo considerable. Esto puede cambiar el comportamiento del servidor si forma parte de un sistema distribuido grande detrás de un balanceador de carga. En el primer caso, el balanceador de carga puede recibir un rechazo de conexión y hacer failover rápidamente a otro servidor. En el segundo caso, el balanceador de carga puede conectarse a un servidor que todavía está cargando las tablas, y la consulta tendrá una latencia mayor. Además, si muchas consultas se acumulan en estado de espera, esto puede provocar un problema de “thundering herd” cuando comiencen a procesarse simultáneamente. Esto solo puede suponer una diferencia en backends distribuidos con alta carga. Puede establecer el valor de async_load_databases en false para evitar este problema. #57695 (Alexey Milovidov).
  • La configuración replace_long_file_name_to_hash está habilitada de forma predeterminada para las tablas MergeTree. #64457 (Anton Popov). Esta configuración es totalmente compatible y no requiere ninguna acción durante la actualización. El nuevo formato de datos es compatible con todas las versiones a partir de la 23.9. Después de habilitar esta configuración, ya no podrá volver a una versión 23.8 o anterior.
  • Algunas consultas no válidas fallarán antes durante el análisis. Nota: se deshabilitó la compatibilidad con expresiones KQL inline (el lenguaje Kusto experimental) cuando se colocan en una función de tabla kql sin un literal de cadena, por ejemplo kql(garbage | trash) en lugar de kql('garbage | trash') o kql($$garbage | trash$$). Esta característica se introdujo de forma no intencionada y no debería existir. #61500 (Alexey Milovidov).
  • Se ha rediseñado el procesamiento paralelo en el modo Ordered del almacenamiento S3Queue. Este PR es incompatible con versiones anteriores para el modo Ordered si utilizaba las configuraciones s3queue_processing_threads_num o s3queue_total_shards_num. La configuración s3queue_total_shards_num se eliminó; anteriormente solo se permitía usarla con s3queue_allow_experimental_sharded_mode, que ahora está obsoleta. Se añadió una nueva configuración: s3queue_buckets. #64349 (Kseniia Sumarokova).
  • Se añadieron las nuevas funciones snowflakeIDToDateTime, snowflakeIDToDateTime64, dateTimeToSnowflakeID y dateTime64ToSnowflakeID. A diferencia de las funciones existentes snowflakeToDateTime, snowflakeToDateTime64, dateTimeToSnowflake y dateTime64ToSnowflake, las nuevas funciones son compatibles con la función generateSnowflakeID; es decir, aceptan los Snowflake ID generados por generateSnowflakeID y producen Snowflake ID del mismo tipo que generateSnowflakeID (es decir, UInt64). Además, las nuevas funciones usan de forma predeterminada la época UNIX (también conocida como 1970-01-01), igual que generateSnowflakeID. Si es necesario, se puede pasar una época diferente, por ejemplo, la época de Twitter/X del 2010-11-04, también conocida como 1288834974657 msec desde la época UNIX. Las antiguas funciones de conversión están obsoletas y se eliminarán después de un período de transición: para seguir utilizándolas, habilite la configuración allow_deprecated_snowflake_conversion_functions. #64948 (Robert Schulze).

Nueva funcionalidad

  • Se permite almacenar named collections en ClickHouse Keeper. #64574 (Kseniia Sumarokova).
  • Admite tuplas vacías. #55061 (Amos Bird).
  • Se añaden funciones de codificación y decodificación de la curva de Hilbert. #60156 (Artem Mustafin).
  • Se añadió soporte para el análisis de índices en hilbertEncode. #64662 (Artem Mustafin).
  • Se añadió compatibilidad para leer la geometría LINESTRING en formato WKT mediante la función readWKTLineString. #62519 (Nikita Mikhaylov).
  • Permite adjuntar partes desde un disco diferente. #63087 (Unalian).
  • Se añadió la nueva función SQL generateSnowflakeID para generar identificadores Snowflake al estilo de Twitter. #63577 (Danila Puzov).
  • Se añadieron los ajustes merge_workload y mutation_workload para regular cómo se utilizan y se comparten los recursos entre las fusiones, las mutaciones y otras cargas de trabajo. #64061 (Sergei Trifonov).
  • Se añade soporte para comparar los tipos IPv4 e IPv6 mediante el operador =. #64292 (Francisco J. Jurado Moreno).
  • Se admiten argumentos decimales en las funciones matemáticas binarias (pow, atan2, max2, min2, hypot). #64582 (Mikhail Gorshkov).
  • Se añadieron las funciones SQL parseReadableSize (así como las variantes OrNull y OrZero). #64742 (Francisco J. Jurado Moreno).
  • Añade los ajustes del servidor max_table_num_to_throw y max_database_num_to_throw para limitar el número de bases de datos o de tablas en las consultas CREATE. #64781 (Xu Jia).
  • Se añade la columna virtual _time a almacenamientos de tipo archivo (s3/file/hdfs/url/azureBlobStorage). #64947 (Ilya Golshtein).
  • Se han introducido las nuevas funciones base64URLEncode, base64URLDecode y tryBase64URLDecode. #64991 (Mikhail Gorshkov).
  • Se agrega la nueva función editDistanceUTF8, que calcula la distancia de edición entre dos cadenas UTF-8. #65269 (LiuNeng).
  • Se añadió la configuración http_response_headers para admitir encabezados de respuesta personalizados en handlers HTTP personalizados. #63562 (Grigorii).
  • Se añadió una nueva función de tabla loop para devolver resultados de consultas en un bucle infinito. #63452 (Sariel). Esto es útil para realizar pruebas.
  • Se introdujeron dos columnas adicionales en system.query_log: used_privileges y missing_privileges. used_privileges se rellena con los privilegios que se comprobaron durante la ejecución de la consulta, y missing_privileges contiene los privilegios requeridos que faltan. #64597 (Alexey Katsman).
  • Se añadió una configuración, output_format_pretty_display_footer_column_names, que, cuando está habilitada, muestra los nombres de las columnas al final de la tabla en tablas largas (50 filas de forma predeterminada). El valor umbral del número mínimo de filas se controla mediante output_format_pretty_display_footer_column_names_min_rows. #65144 (Shaun Struwig).

Funcionalidad experimental

  • Se introducen estadísticas del tipo “número de valores distintos”. #59357 (Han Fei).
  • Se admiten estadísticas con ReplicatedMergeTree. #64934 (Han Fei).
  • Si se configura “grupo de réplicas” para una base de datos Replicated, se crea automáticamente un clúster que incluye réplicas de todos los grupos. #64312 (Alexander Tokmakov).
  • Se agregan las configuraciones parallel_replicas_custom_key_range_lower y parallel_replicas_custom_key_range_upper para controlar cómo las réplicas paralelas con segmentos dinámicos paralelizan las consultas al usar un filtro por rango. #64604 (josh-hildred).

Mejora del rendimiento

  • Se añade la posibilidad de reordenar las filas durante la inserción para optimizar el tamaño sin alterar el orden definido por PRIMARY KEY. Se controla mediante la configuración optimize_row_order (desactivada de forma predeterminada). #63578 (Igor Markelov).
  • Se añade un lector nativo de Parquet que puede leer datos binarios Parquet directamente en columnas de ClickHouse. Se controla mediante la configuración input_format_parquet_use_native_reader (deshabilitada de forma predeterminada). #60361 (ZhiHong Zhang).
  • Se admite la optimización parcial del recuento trivial cuando el filtro de la consulta puede seleccionar rangos exactos de tablas MergeTree. #60463 (Amos Bird).
  • Reduce el uso máximo de memoria de las operaciones INSERT multihilo al recopilar fragmentos de varios hilos en una única transformación. #61047 (Yarik Briukhovetskyi).
  • Reduce el uso de memoria al usar almacenamiento de objetos de Azure mediante una asignación fija de memoria, evitando la asignación de un búfer adicional. #63160 (SmitaRKulkarni).
  • Reducir el número de llamadas a funciones virtuales en ColumnNullable::size. #60556 (HappenLee).
  • Se acelera splitByRegexp cuando el argumento de expresión regular es de un solo carácter. #62696 (Robert Schulze).
  • Acelera la agregación con claves de 8 y 16 bits mediante el seguimiento de las claves mínima y máxima utilizadas. Esto permite reducir el número de celdas que es necesario verificar. #62746 (Jiebin Sun).
  • Optimiza el operador IN cuando el operando izquierdo es LowCardinality y el derecho es un conjunto de constantes. #64060 (Zhiguo Zhou).
  • Se utiliza un pool de hilos para inicializar y destruir tablas hash dentro de ConcurrentHashJoin. #64241 (Nikita Taranov).
  • Se optimizaron las fusiones verticales en tablas con columnas dispersas. #64311 (Anton Popov).
  • Se habilitaron las precargas de datos desde un sistema de archivos remoto durante las fusiones verticales. Esto mejora la latencia de las fusiones verticales en tablas con datos almacenados en un sistema de archivos remoto. #64314 (Anton Popov).
  • Se reducen las llamadas redundantes a isDefault de ColumnSparse::filter para mejorar el rendimiento. #64426 (Jiebin Sun).
  • Acelera los comandos find_super_nodes y find_big_family de keeper-client mediante múltiples solicitudes asíncronas a getChildren. #64628 (Alexander Gololobov).
  • Mejora en la función least/greatest para argumentos de tipo numérico Nullable. #64668 (KevinyhZou).
  • Permite fusionar dos pasos de filtrado consecutivos de un plan de consulta. Esto mejora la optimización de filter-push-down si la condición de filtro puede trasladarse a un nivel inferior desde el paso padre. #64760 (Nikolai Kochetov).
  • Se elimina una optimización incorrecta en la implementación vertical de FINAL y se vuelve a habilitar de forma predeterminada el algoritmo vertical de FINAL. #64783 (Duc Canh Le).
  • Elimine los nodos ALIAS de la expresión de filtro. Esto mejora ligeramente el rendimiento de las consultas que usan PREWHERE (con el nuevo analizador). #64793 (Nikolai Kochetov).
  • Volver a habilitar la caché de sesiones de OpenSSL. #65111 (Robert Schulze).
  • Se añadieron ajustes para deshabilitar la materialización de índices de omisión y estadísticas durante las inserciones (materialize_skip_indexes_on_insert y materialize_statistics_on_insert). #64391 (Anton Popov).
  • Utiliza el tamaño de memoria asignado para calcular el tamaño del grupo de filas y reducir el pico de memoria del escritor de Parquet en modo de un solo hilo. #64424 (LiuNeng).
  • Mejora el iterador de la columna dispersa para reducir las llamadas a size. #64497 (Jiebin Sun).
  • Actualizar la condición para usar copia del lado del servidor en las copias de seguridad en Azure blob storage. #64518 (SmitaRKulkarni).
  • Se optimizó el uso de memoria de las fusiones verticales para tablas con un gran número de índices de omisión. #64580 (Anton Popov).

Mejora

  • SHOW CREATE TABLE, al ejecutarse sobre las tablas del sistema, ahora mostrará el comentario, muy útil y específico de cada tabla, que explicará por qué es necesaria. #63788 (Nikita Mikhaylov).
  • El segundo argumento (escala) de las funciones round(), roundBankers(), floor(), ceil() y trunc() ya no tiene que ser constante. #64798 (Mikhail Gorshkov).
  • Recarga en caliente de la política de almacenamiento de las tablas Distributed al añadir un nuevo disco. #58285 (Duc Canh Le).
  • Evita un posible interbloqueo durante el análisis de índices de MergeTree al programar hilos en un servicio saturado. #59427 (Sean Haynes).
  • Varias correcciones menores de casos límite en la compatibilidad con el proxy de S3 y la tunelización. #63427 (Arthur Passos).
  • Mejora la visibilidad del reenvío en io_uring. Se cambia el nombre del evento de profile IOUringSQEsResubmits -> IOUringSQEsResubmitsAsync y se añade uno nuevo, IOUringSQEsResubmitsSync. #63699 (Tomer Shafir).
  • Se añadió una nueva opción de configuración, metadata_keep_free_space_bytes, para conservar espacio libre en el disco de almacenamiento de metadatos. #64128 (MikhailBurdukov).
  • Se añaden métricas para hacer un seguimiento del número de directorios creados y eliminados por el almacenamiento de metadatos plain_rewritable, y del número de entradas en el mapa en memoria de local a remoto. #64175 (Julia Kartseva).
  • La caché de consultas ahora considera como diferentes las consultas idénticas con configuraciones distintas. Esto aumenta la robustez en los casos en que distintas configuraciones (p. ej., limit o additional_table_filters) afectarían al resultado de la consulta. #64205 (Robert Schulze).
  • Se admite el código de error no estándar QpsLimitExceeded del almacenamiento de objetos como error reintentable. #64225 (Sema Checherinda).
  • Prohibir convertir una tabla MergeTree en una tabla replicada si la ruta de ZooKeeper de esa tabla ya existe. #64244 (Kirill).
  • Se añadió una nueva configuración, input_format_parquet_prefer_block_bytes, para controlar el promedio de bytes de los bloques de salida, y se cambió el valor predeterminado de input_format_parquet_max_block_size a 65409. #64427 (LiuNeng).
  • Permitir omitir el uso del proxy para los hosts especificados en la variable de entorno no_proxy y en la configuración del proxy de ClickHouse. #63314 (Arthur Passos).
  • Inicie siempre Keeper con un número suficiente de hilos en el pool global de hilos. #64444 (Duc Canh Le).
  • Los ajustes de la configuración del usuario no afectan a los merges ni a las mutaciones de MergeTree sobre almacenamiento de objetos. #64456 (alesapin).
  • Se admite el código de error no estándar TotalQpsLimitExceeded en el almacenamiento de objetos como error reintentable. #64520 (Sema Checherinda).
  • Se actualizó el Advanced Dashboard, tanto para las versiones de código abierto como para ClickHouse Cloud, para incluir un gráfico de ‘Máximo de conexiones de red concurrentes’. #64610 (Thom O’Connor).
  • Mejora del reporte de progreso de zeros_mt y generateRandom. #64804 (Raúl Marín).
  • Añade una métrica asíncrona jemalloc.profile.active para mostrar si el muestreo está activo en ese momento. Se trata de un mecanismo de activación adicional a prof.active; ambos deben estar activos para que el hilo que realiza la llamada pueda muestrear. #64842 (Unalian).
  • Se elimina la marca de allow_experimental_join_condition como importante. Esta marca podría haber impedido que las consultas distribuidas en un clúster con versiones mixtas se ejecutaran correctamente. #65008 (Nikita Mikhaylov).
  • Se agregaron las métricas asíncronas del servidor DiskGetObjectThrottler* y DiskGetObjectThrottler*, que reflejan el límite de solicitudes por segundo definido con la configuración de disco s3_max_get_rps y s3_max_put_rps, así como la cantidad de solicitudes actualmente disponibles que podrían enviarse sin alcanzar el límite de limitación de tasa del disco. Las métricas se definen para cada disco que tenga un límite configurado. #65050 (Sergei Trifonov).
  • Inicializar el colector global de trazas para Poco::ThreadPool (necesario para Keeper, etc.). #65239 (Kseniia Sumarokova).
  • Se añadió una validación al crear un usuario con bcrypt_hash. #65242 (Raúl Marín).
  • Agregar eventos de perfil correspondientes al número de filas leídas durante/después de PREWHERE. #64198 (Nikita Taranov).
  • Muestra la consulta en EXPLAIN PLAN con réplicas paralelas. #64298 (vdimir).
  • Cambiar el nombre de allow_deprecated_functions a allow_deprecated_error_prone_window_functions. #64358 (Raúl Marín).
  • Respetar también la configuración max_read_buffer_size para los descriptores de archivo en la función de tabla file. #64532 (Azat Khuzhin).
  • Deshabilitar las transacciones para motores de almacenamiento no compatibles, incluso en vistas materializadas. #64918 (alesapin).
  • Se prohíbe la cláusula QUALIFY en el analizador antiguo. El analizador antiguo ignoraba QUALIFY, por lo que esto podía provocar la eliminación inesperada de datos en las mutaciones. #65356 (Dmitry Novik).

Corrección de un error (comportamiento incorrecto perceptible para el usuario en una versión estable oficial)

  • Se corrigió un error en la biblioteca Apache ORC: se corrigió el cálculo de estadísticas de ORC durante la escritura para tipos sin signo en todas las plataformas y para Int8 en ARM. #64563 (Michael Kolupaev).
  • Se restauró el comportamiento de ClickHouse al interpretar Tuples en formato CSV. Este cambio revierte de forma efectiva https://github.com/ClickHouse/ClickHouse/pull/60994 y hace que solo esté disponible bajo unas pocas configuraciones: output_format_csv_serialize_tuple_into_separate_columns, input_format_csv_deserialize_separate_columns_into_tuple y input_format_csv_try_infer_strings_from_quoted_tuples. #65170 (Nikita Mikhaylov).
  • Corrige un error de permisos que permitía a un usuario, en una situación específica, escalar sus privilegios en la base de datos predeterminada sin los permisos necesarios. #64769 (pufit).
  • Se corrige un cierre inesperado con UniqInjectiveFunctionsEliminationPass y uniqCombined. #65188 (Raúl Marín).
  • Se corrige un error en ClickHouse Keeper que provoca una discrepancia del digest durante el cierre de la sesión. #65198 (Aleksei Filatov).
  • Se utiliza la alineación de memoria correcta para el combinador Distinct. Anteriormente, podía producirse un bloqueo debido a una asignación de memoria no válida al usar el combinador. #65379 (Antonio Andelic).
  • Se corrigió un fallo con DISTINCT y las funciones de ventana. #64767 (Igor Nikonov).
  • Se corrigió un problema por el que el índice de omisión ‘set’ no funcionaba con IN e indexHint(). #62083 (Michael Kolupaev).
  • Se admite ejecutar una función al asignar el valor de una vista parametrizada. #63502 (SmitaRKulkarni).
  • Se corrigió el seguimiento del uso de memoria de Parquet. #63584 (Michael Kolupaev).
  • Se corrigió la lectura de columnas del tipo Tuple(Map(LowCardinality(String), String), ...). #63956 (Anton Popov).
  • Soluciona un error Cyclic aliases en alias cíclicos de distinto tipo (expresión y función). #63993 (Nikolai Kochetov).
  • Esta corrección usará un contexto redefinido adecuado con el definidor correcto para cada vista del pipeline de consulta. #64079 (pufit).
  • Corrección del analizador: se corrige el error “Not found column” al usar INTERPOLATE. #64096 (Yakov Olkhovskiy).
  • Se corrige la creación de copias de seguridad en buckets de S3 con credenciales distintas a las del disco que contiene el archivo. #64153 (Antonio Andelic).
  • La caché de consultas ahora considera distintas dos consultas idénticas realizadas sobre bases de datos diferentes. El comportamiento anterior podía usarse para eludir la falta de permisos de lectura sobre una tabla. #64199 (Robert Schulze).
  • Se corrige una posible terminación del proceso por una excepción no capturada en ~WriteBufferFromFileDescriptor en StatusFile. #64206 (Kruglov Pavel).
  • Se corrigió el error duplicate alias en las consultas distribuidas con ARRAY JOIN. #64226 (Nikolai Kochetov).
  • Corrige un accurateCast inesperado de string a entero. #64255 (wudidapaopao).
  • Se corrigió la simplificación de CNF en caso de que algún grupo OR contenga átomos mutuamente excluyentes. #64256 (Eduard Karacharov).
  • Se corrigió la validación del tamaño de Query Tree. #64377 (Dmitry Novik).
  • Se corrige Logical error: Bad cast en la tabla Buffer con PREWHERE. #64388 (Nikolai Kochetov).
  • Evita el logging recursivo en blob_storage_log cuando se almacena en almacenamiento de objetos. #64393 (vdimir).
  • Se corrigieron las consultas CREATE TABLE AS para tablas con expresiones por defecto. #64455 (Anton Popov).
  • Se corrigió el comportamiento de optimize_read_in_order para ORDER BY … NULLS FIRST / LAST en tablas con claves Nullable. #64483 (Eduard Karacharov).
  • Corrige los errores Expression nodes list expected 1 projection names y Unknown expression or identifier en consultas con alias de GLOBAL IN.. #64517 (Nikolai Kochetov).
  • Corrige un error Cannot find column en consultas distribuidas con una CTE constante en la clave de GROUP BY. #64519 (Nikolai Kochetov).
  • Se corrige el crash loop cuando la restauración desde una copia de seguridad se bloquea al crear una MV con un definidor que aún no se ha restaurado. #64595 (pufit).
  • Se corrige la salida de la función formatDateTimeInJodaSyntax cuando un formateador genera un número impar de caracteres y el último es 0. Por ejemplo, SELECT formatDateTimeInJodaSyntax(toDate('2012-05-29'), 'D') ahora devuelve correctamente 150 en lugar de 15, como hacía antes. #64614 (LiuNeng).
  • No reescriba la agregación si ya se utiliza el combinador -If. #64638 (Dmitry Novik).
  • Se corrige la inferencia de tipos para float (en caso de que el búfer sea pequeño; es decir, --max_read_buffer_size 1). #64641 (Azat Khuzhin).
  • Se corrige un error que podía hacer que los TTL con expresiones dejaran de funcionar. #64694 (alesapin).
  • Se corrige la eliminación de las expresiones WHERE y PREWHERE que siempre se evalúan como verdaderas (con el nuevo analizador). #64695 (Nikolai Kochetov).
  • Se corrigió el descarte excesivo de partes en los índices de texto basados en tokens (ngrambf , full_text) al filtrar por el resultado de startsWith, endsWith, match, multiSearchAny. #64720 (Eduard Karacharov).
  • Corrige el comportamiento incorrecto del escape CSI de ANSI en la función UTF8::computeWidth. #64756 (Shaun Struwig).
  • Corrige un caso de eliminación indebida de ORDER BY / LIMIT BY entre subconsultas. #64766 (Raúl Marín).
  • Corrección (experimental) del join no equi con subconsultas para conjuntos presentes en las condiciones mixtas de join. #64775 (lgbo).
  • Se corrige un bloqueo en una caché local en el disco plain_rewritable. #64778 (Julia Kartseva).
  • Corrección en Keeper: devuelve el valor correcto de zk_latest_snapshot_size en el comando mntr. #64784 (Antonio Andelic).
  • Corrige Cannot find column en consultas distribuidas con ARRAY JOIN sobre una columna Nested. Corrige #64755. #64801 (Nikolai Kochetov).
  • Se corrige una fuga de memoria en la política de caché slru. #64803 (Kseniia Sumarokova).
  • Se corrigió un posible seguimiento incorrecto de memoria en varios tipos de consultas: consultas que leen datos de S3, consultas a través del protocolo HTTP e inserciones asíncronas. #64844 (Anton Popov).
  • Corrige el error Block structure mismatch en consultas que leen con PREWHERE desde la vista materializada cuando esta tiene columnas de tipos distintos a los de la tabla de origen. Corrige #64611. #64855 (Nikolai Kochetov).
  • Se corrigió un bloqueo poco frecuente cuando una tabla tiene TTL con subconsulta + base de datos replicada + réplicas en paralelo + analizador. Es muy poco frecuente, pero, por favor, no use TTL con subconsultas. #64858 (alesapin).
  • Se corrige la duplicación de eventos Delete en blob_storage_log en caso de que haya un lote grande para eliminar. #64924 (vdimir).
  • Se corrigió el error Session moved to another server de [Zoo]Keeper que podía producirse después de iniciar el servidor cuando la configuración contiene inclusiones desde [Zoo]Keeper. #64986 (Alexander Tokmakov).
  • Se corrigió la consulta ALTER MODIFY COMMENT, que no funcionaba con las VIEW parametrizadas, en https://github.com/ClickHouse/ClickHouse/pull/54211. #65031 (Nikolay Degterinsky).
  • Se corrige host_id en DatabaseReplicated cuando el parámetro cluster_secure_connection está habilitado. Anteriormente, ninguna de las conexiones dentro del cluster creadas por DatabaseReplicated era segura, incluso si el parámetro estaba habilitado. #65054 (Nikolay Degterinsky).
  • Corrección del error Not-ready Set tras la optimización PREWHERE de StorageMerge. #65057 (Nikolai Kochetov).
  • Evitar escribir en el búfer finalizado en almacenamientos de tipo File. #65063 (Kruglov Pavel).
  • Corrige la posible duración infinita de la consulta en caso de alias cíclicos. Soluciona #64849. #65081 (Nikolai Kochetov).
  • Corrige el error Unknown expression identifier en consultas remotas con INTERPOLATE (alias) (nuevo analizador). Corrige #64636. #65090 (Nikolai Kochetov).
  • Se corrige la extracción de las operaciones aritméticas fuera de la agregación. En el nuevo analizador, la optimización se aplicaba solo una vez. #65104 (Dmitry Novik).
  • Se corrige la reescritura de nombres de funciones de agregación en el nuevo analizador. #65110 (Dmitry Novik).
  • Responder con 5xx en lugar de 200 OK en caso de timeout de recepción al leer (partes del) cuerpo de la solicitud desde el socket del cliente. #65118 (Julian Maicher).
  • Corrige un posible fallo en las solicitudes hedged. #65206 (Azat Khuzhin).
  • Se corrige el error en la evaluación de cortocircuito de los diccionarios Hashed y Hashed_Array, que podría leer un número sin inicializar, lo que provoca diversos errores. #65256 (jsc0218).
  • Este PR garantiza que el tipo de la constant (el segundo parámetro del operador IN) sea siempre visible durante el proceso de conversión de tipos del operador IN. De lo contrario, la pérdida de información de tipo puede hacer que algunas conversiones fallen, como la conversión de DateTime a Date. Esto corrige (#64487). #65315 (pn).

Mejora de compilación/pruebas/empaquetado

  • Añadir compatibilidad con LLVM XRay. #64592 #64837 (Tomer Shafir).
  • Unificar las implementaciones de almacenamiento de S3/HDFS/Azure en una sola clase que funcione con IObjectStorage. Lo mismo para los almacenamientos *Cluster, de lago de datos y Queue. #59767 (Kseniia Sumarokova).
  • Refactorizar el escritor de partes de datos para eliminar dependencias de MergeTreeData y DataPart. #63620 (Alexander Gololobov).
  • Refactorizar KeyCondition y el análisis de claves para mejorar PartitionPruner y la optimización del recuento trivial. Esto está separado de #60463. #61459 (Amos Bird).
  • Introducir aserciones para verificar que todas las funciones se llamen con columnas del tamaño correcto. #63723 (Raúl Marín).
  • Hacer que el servicio network sea obligatorio al usar el script de inicio rc para iniciar el demonio del servidor ClickHouse. #60650 (Chun-Sheng, Li).
  • Reducir el tamaño de algunas pruebas lentas. #64387 #64452 (Raúl Marín).
  • Reproducir los logs de ZooKeeper usando keeper-bench. #62481 (Antonio Andelic).

Lanzamiento de ClickHouse 24.5, 2024-05-30. Presentación, Vídeo

Cambio incompatible con versiones anteriores

  • Se cambió el nombre de los “índices invertidos” a “índices de texto completo”, una denominación menos técnica y más fácil de usar. Esto también modifica los metadatos internos de la tabla y rompe las tablas con índices invertidos (experimentales) existentes. Asegúrese de eliminar esos índices antes de la actualización y volver a crearlos después. #62884 (Robert Schulze).
  • El uso de las funciones neighbor, runningAccumulate, runningDifferenceStartingWithFirstValue y runningDifference ha quedado obsoleto (porque es propenso a errores). En su lugar, deben usarse funciones de ventana adecuadas. Para volver a habilitarlas, establezca allow_deprecated_error_prone_window_functions = 1 o compatibility = '24.4' o inferior. #63132 (Nikita Taranov).
  • Las consultas a system.columns funcionarán más rápido si hay una gran cantidad de columnas, pero no se ha concedido SHOW TABLES para muchas bases de datos o tablas. Tenga en cuenta que, en versiones anteriores, si concede SHOW COLUMNS a columnas individuales sin conceder SHOW TABLES a las tablas correspondientes, la tabla system.columns mostrará esas columnas, pero en la nueva versión omitirá la tabla por completo. Se eliminaron los mensajes de log de trace “Access granted” y “Access denied”, que ralentizaban las consultas. #63439 (Alexey Milovidov).

Nueva funcionalidad

  • Añade el formato Form para leer/escribir un solo registro en el formato application/x-www-form-urlencoded. #60199 (Shaun Struwig).
  • Se añadió la posibilidad de usar compresión en CROSS JOIN. #60459 (p1rattttt).
  • Se añadió la posibilidad de realizar CROSS JOIN usando archivos temporales si el tamaño supera los límites. #63432 (p1rattttt).
  • Admite join con condiciones de desigualdad en las que intervienen columnas de las tablas izquierda y derecha. Por ejemplo, t1.y < t2.y. Para habilitarlo, SET allow_experimental_join_condition = 1. #60920 (lgbo).
  • Los mapas ahora pueden tener Float32, Float64, Array(T), Map(K, V) y Tuple(T1, T2, ...) como claves. Cierra #54537. #59318 (李扬).
  • Se introduce la carga masiva en EmbeddedRocksDB mediante la creación y la ingesta de archivos SST, en lugar de depender de la memtable integrada de RocksDB. Esto ayuda a aumentar la velocidad de importación, especialmente en consultas de inserción de larga duración sobre tablas StorageEmbeddedRocksDB. También se introducen los ajustes de tabla de EmbeddedRocksDB. #59163 #63324 (Duc Canh Le).
  • Ahora se pueden interpretar finales de línea CRLF con el formato TSV mediante la configuración input_format_tsv_crlf_end_of_line. Cierra #56257. #59747 (Shaun Struwig).
  • Un nuevo ajuste input_format_force_null_for_omitted_fields que obliga a usar valores NULL para los campos omitidos. #60887 (Constantine Peresypkin).
  • Anteriormente, nuestro almacenamiento S3 y la función de tabla s3 no permitían seleccionar desde archivos contenedores, como tarballs, zip o 7z. Ahora permiten iterar sobre los archivos dentro de archivos comprimidos en S3. #62259 (Daniil Ivanik).
  • Se añadió compatibilidad con la función condicional clamp. #62377 (skyoct).
  • Se añade el formato de salida NPy. #62430 (豪肥肥).
  • El formato Raw, como sinónimo de TSVRaw. #63394 (Unalian).
  • Se agregó una nueva función SQL generateUUIDv7 para generar UUID de versión 7, también conocidos como UUID basados en marca de tiempo con un componente aleatorio. También se agregó una nueva función UUIDToNum para extraer los bytes de un UUID y una nueva función UUIDv7ToDateTime para extraer el componente de marca de tiempo de un UUID de versión 7. #62852 (Alexey Petrunyaka).
  • En Linux y MacOS, si el programa tiene stdout redirigido a un archivo con una extensión de compresión, usa el método de compresión correspondiente en lugar de no usar compresión (de modo que se comporte de forma similar a INTO OUTFILE). #63662 (v01dXYZ).
  • Se cambió la advertencia sobre un número elevado de tablas adjuntas para diferenciar entre tablas, vistas y diccionarios. #64180 (Francisco J. Jurado Moreno).
  • Se añade compatibilidad con la función azureBlobStorage en el servidor ClickHouse para usar Workload Identity de Azure para autenticarse en Azure blob storage. Si el parámetro use_workload_identity está configurado, se utiliza la identidad de carga de trabajo para la autenticación. #57881 (Vinay Suryadevara).
  • Se añade información de TTL en la tabla system.parts_columns. #63200 (litlig).

Funciones experimentales

  • Se implementa el tipo de dato Dynamic, que permite almacenar valores de cualquier tipo sin necesidad de conocerlos todos de antemano. El tipo Dynamic está disponible mediante la configuración allow_experimental_dynamic_type. Referencia: #54864. #63058 (Kruglov Pavel).
  • Se permite crear una base de datos MaterializedMySQL sin conexión a MySQL. #63397 (Kirill).
  • Marcar automáticamente una réplica de una base de datos Replicated como perdida e iniciar la recuperación si alguna tarea DDL falla más de max_retries_before_automatic_recovery (100 de forma predeterminada) veces seguidas con el mismo error. Además, se corrigió un error que podía provocar la omisión de entradas DDL cuando se lanza una excepción durante una fase temprana de la ejecución de una entrada. #63549 (Alexander Tokmakov).
  • Se contabilizan los archivos fallidos en s3queue_tracked_file_ttl_sec y s3queue_traked_files_limit para StorageS3Queue. #63638 (Kseniia Sumarokova).

Mejora del rendimiento

  • Menor contención en la caché del sistema de archivos (parte 4). Permite mantener la caché del sistema de archivos sin llenarla hasta el límite realizando expulsiones adicionales en segundo plano (controladas por keep_free_space_size(elements)_ratio). Esto reduce la presión sobre la reserva de espacio para las consultas (en el método tryReserve). Además, se hace de la forma más libre de bloqueos posible; por ejemplo, no debería bloquear el uso normal de la caché. #61250 (Kseniia Sumarokova).
  • Omitir la fusión de los bloques de proyección recién creados durante los INSERT. #59405 (Nikita Taranov).
  • Procesar las funciones de cadena ...UTF8 de forma “ASCII” si las cadenas de entrada contienen solo caracteres ASCII. Inspirado en https://github.com/apache/doris/pull/29799. Aceleración general de 1.07x~1.62x. Tenga en cuenta que el uso máximo de memoria también se redujo en algunos casos. #61632 (李扬).
  • Se mejoró el rendimiento de los globs de selección ({}) en StorageS3. #62120 (Andrey Zvonov).
  • HostResolver tiene cada dirección IP varias veces. Si el host remoto tiene varias IP y, por alguna razón (por ejemplo, reglas de firewall), el acceso a algunas IP está permitido y a otras no, entonces solo la primera entrada de las IP prohibidas se marca como fallida, y en cada intento esas IP pueden volver a elegirse (y volver a fallar). Incluso si se corrige esto, cada 120 segundos se vacía la caché DNS, y las IP pueden volver a seleccionarse. #62652 (Anton Ivashkin).
  • Agrega una nueva configuración prefer_merge_sort_block_bytes para controlar el uso de memoria y acelerar 2 veces la ordenación durante la fusión cuando hay muchas columnas. #62904 (LiuNeng).
  • clickhouse-local se iniciará más rápido. En versiones anteriores, por error no eliminaba los directorios temporales. Ahora sí lo hará. Esto cierra #62941. #63074 (Alexey Milovidov).
  • Microoptimizaciones para el nuevo analizador. #63429 (Raúl Marín).
  • El análisis de índices funcionará si DateTime se compara con DateTime64. Esto cierra #63441. #63443 #63532 (Alexey Milovidov).
  • Acelera un poco (alrededor de 1,5 veces) los índices de tipo set eliminando datos innecesarios. #64098 (Alexey Milovidov).
  • Elimina la copia de datos al escribir en la caché del sistema de archivos. #63401 (Kseniia Sumarokova).
  • Ahora las copias de seguridad con Azure Blob Storage usarán multicopy. #64116 (alesapin).
  • Permite usar la copia nativa para Azure incluso con distintos contenedores. #64154 (alesapin).
  • Finalmente, habilita la copia nativa para Azure. #64182 (alesapin).

Mejora

  • Permite usar clickhouse-local y sus alias clickhouse y ch pasando una consulta o un archivo de consultas como argumento posicional. Ejemplos: ch "SELECT 1", ch --param_test Hello "SELECT {test:String}", ch query.sql. Esto cierra #62361. #63081 (Alexey Milovidov).
  • Se habilitan metadatos plain_rewritable para los almacenamientos de objetos locales y de Azure (azure_blob_storage). #63365 (Julia Kartseva).
  • Se admiten comillas Unicode de estilo inglés, por ejemplo, “Hello”, ‘world’. En general, esto es discutible, pero resulta útil cuando escribes tu consulta en un procesador de textos, como Google Docs. Esto cierra #58634. #63381 (Alexey Milovidov).
  • Permitir comas finales en la lista de columnas en la consulta INSERT. Por ejemplo, INSERT INTO test (a, b, c, ) VALUES .... #63803 (Alexey Milovidov).
  • Mensajes de excepción mejorados para el formato Regexp. #63804 (Alexey Milovidov).
  • Se permiten comas finales en el formato Values. Por ejemplo, se permite esta consulta: INSERT INTO test (a, b, c) VALUES (4, 5, 6,);. #63810 (Alexey Milovidov).
  • Hacer que RabbitMQ haga nack de los mensajes defectuosos. Cierra #45350. #60312 (Kseniia Sumarokova).
  • Corrige un fallo en el desenrollado asíncrono de la pila de llamadas (como al usar el perfilador de consultas por muestreo) durante la interpretación de la información de depuración. Esto cierra #60460. #60468 (Alexey Milovidov).
  • Mensajes distintos para el error de S3 ‘no key’ en los casos de disco y almacenamiento. #61108 (Sema Checherinda).
  • La barra de progreso funcionará para consultas triviales con LIMIT sobre system.zeros, system.zeros_mt (ya funciona para system.numbers y system.numbers_mt) y la table function generateRandom. Además, si el número total de registros supera el límite de max_rows_to_read, se lanzará una excepción antes. Esto cierra #58183. #61823 (Alexey Milovidov).
  • Compatibilidad con “Merge Key” en configuraciones YAML (esta es una característica peculiar de YAML; no le preste atención). #62685 (Azat Khuzhin).
  • Mejora del mensaje de error cuando se utiliza una función no determinista con Replicated como origen. #62896 (Grégoire Pineau).
  • Corregido el secreto entre servidores para Distributed sobre Distributed desde remote. #63013 (Azat Khuzhin).
  • Se admite include_from para archivos YAML. Sin embargo, es preferible usar config.d #63106 (Eduard Karacharov).
  • Conservar los datos anteriores en la terminal tras seleccionar una sugerencia de skim. #63261 (FlameFactory).
  • El ancho de los campos (en los formatos Pretty o en la función visibleWidth) ahora ignora correctamente las secuencias de escape ANSI. #63270 (Shaun Struwig).
  • Se actualizó el uso del código de error NUMBER_OF_ARGUMENTS_DOESNT_MATCH por códigos de error más precisos cuando corresponde. #63406 (Yohann Jardin).
  • Ahora os_user y client_hostname se establecen correctamente en las consultas para las sugerencias de la línea de comandos en clickhouse-client. Esto cierra #63430. #63433 (Alexey Milovidov).
  • Corrige automáticamente max_block_size al valor predeterminado si es cero. #63587 (Antonio Andelic).
  • Añade una columna ALIAS build_id a trace_log para facilitar el cambio de nombre automático al detectar cambios en el binario. Esto corrige #52086. #63656 (Zimu Li).
  • Habilitar la operación TRUNCATE en discos de almacenamiento de objetos. #63693 (MikhailBurdukov).
  • La carga de la lista de palabras clave ahora depende de la revisión del servidor y se desactivará para las versiones anteriores de ClickHouse server. CC @azat. #63786 (Nikita Mikhaylov).
  • Los discos de ClickHouse deben leer la configuración del servidor para obtener la versión real del formato de metadatos. #63831 (Sema Checherinda).
  • Se deshabilitan las restricciones del formato Pretty (output_format_pretty_max_rows/output_format_pretty_max_value_width) si stdout no es TTY. #63942 (Azat Khuzhin).
  • La gestión de excepciones ahora funciona cuando ClickHouse se usa dentro de AWS Lambda. Autor: Alexey Coolnev. #64014 (Alexey Milovidov).
  • Lanza CANNOT_DECOMPRESS en lugar de CORRUPTED_DATA cuando se pasan datos comprimidos no válidos mediante HTTP. #64036 (vdimir).
  • La sugerencia para un único número grande en los formatos Pretty ahora también funciona con Nullable y LowCardinality. Esto cierra #61993. #64084 (Alexey Milovidov).
  • Se añaden métricas, logs y nombres de hilos al filtrado de partes con índices. #64130 (Alexey Milovidov).
  • Ignorar allow_suspicious_primary_key en ATTACH y comprobarlo en ALTER. #64202 (Azat Khuzhin).

Mejora de compilación/pruebas/empaquetado

Corrección de errores

  • Se deshabilitó de forma predeterminada la configuración enable_vertical_final. Esta funcionalidad no debe usarse porque tiene un error: #64543. #64544 (Alexander Tokmakov).
  • Corrección al hacer una copia de seguridad cuando se usan varios segmentos #57684 (Vitaly Baranov).
  • Se corrigió la transferencia de proyecciones/índices/clave primaria desde la lista de columnas de la consulta CREATE a la tabla interna de la MV #59183 (Azat Khuzhin).
  • Corregir el merge incorrecto de boundRatio #60532 (Tao Wang).
  • Se corrigió un fallo al llamar a algunas funciones en columnas const con baja cardinalidad #61966 (Michael Kolupaev).
  • Se corrigieron las consultas con FINAL que devolvían resultados incorrectos cuando la tabla no utiliza granularidad adaptativa #62432 (Duc Canh Le).
  • Mejora de la detección de compatibilidad con cgroups v2 para los controladores de memoria #62903 (Robert Schulze).
  • Corrige el uso subsiguiente de tablas externas en el cliente #62964 (Azat Khuzhin).
  • Se corrige un fallo con untuple y una lambda sin resolver #63131 (Raúl Marín).
  • Corrige que el servidor escuche conexiones prematuramente #63181 (alesapin).
  • Se corrigen las partes que se solapan al reiniciar después de un comando DROP PART #63202 (Han Fei).
  • Cargar correctamente los valores predeterminados de SQL security al iniciar #63209 (pufit).
  • Corrección del push down del filtro de JOIN #63234 (Maksim Kita).
  • Se ha corregido el bucle infinito en AzureObjectStorage::listObjects #63257 (Julia Kartseva).
  • CROSS join ignora el ajuste join_algorithm #63273 (vdimir).
  • Se corrige la finalización de WriteBufferToFileSegment y StatusFile #63346 (vdimir).
  • Se corrige un error lógico que se producía durante una consulta SELECT después de ALTER en casos poco frecuentes #63353 (alesapin).
  • Se corrige la cabecera X-ClickHouse-Timezone con session_timezone #63377 (Andrey Zvonov).
  • Se corrigió un assert de depuración al usar la agrupación WITH ROLLUP y tipos LowCardinality #63398 (Raúl Marín).
  • Pequeñas correcciones en group_by_use_nulls #63405 (vdimir).
  • Corrige la copia de seguridad/restauración de una parte de proyección en caso de que la proyección se haya eliminado de los metadatos de la tabla, pero la parte aún la conserve #63426 (Kseniia Sumarokova).
  • Corregido el origen del diccionario MySQL #63481 (vdimir).
  • Insertar QueryFinish en AsyncInsertFlush cuando no hay datos #63483 (Raúl Marín).
  • Corrección de used_dictionaries vacío en system.query_log #63487 (Eduard Karacharov).
  • Mejorar la seguridad de MergeTreePrefetchedReadPool #63513 (Antonio Andelic).
  • Corregido el fallo al salir con Sentry habilitado (debido a que OpenSSL se destruía antes que Sentry) #63548 (Azat Khuzhin).
  • Se corrige la compatibilidad de Array y Map con hash por clave #63628 (Salvatore Mesoraca).
  • Se corrige el pushdown de filtros para Parquet y posiblemente StorageMerge #63642 (Michael Kolupaev).
  • Evitar la conversión a Replicated si la ruta de ZooKeeper ya existe #63670 (Kirill).
  • Analizador: las vistas leen solo las columnas necesarias #63688 (Maksim Kita).
  • Analizador: prohibir la redefinición de WINDOW #63694 (Dmitry Novik).
  • flatten_nested no funcionaba con la base de datos experimental Replicated. #63695 (Nikolai Kochetov).
  • Corregido #63653 #63722 (Nikolai Kochetov).
  • Permitir el CAST de Array(Nothing) a Map(Nothing, Nothing) #63753 (Nikolai Kochetov).
  • Corrige ILLEGAL_COLUMN en el join partial_merge #63755 (vdimir).
  • Corrección: eliminar el DISTINCT redundante con funciones de ventana #63776 (Igor Nikonov).
  • Se corrige un posible fallo con SYSTEM UNLOAD PRIMARY KEY #63778 (Raúl Marín).
  • Se corrigió una consulta con un alias cíclico que se duplicaba. #63791 (Nikolai Kochetov).
  • Hacer que TokenIterator sea de evaluación diferida, como debe ser #63801 (Alexey Milovidov).
  • Se añade la opción de configuración endpoint_subpath para URI de S3 #63806 (Julia Kartseva).
  • Se ha corregido un interbloqueo en ParallelReadBuffer #63814 (Antonio Andelic).
  • Corrección de columnas equivalentes para el pushdown de filtros en JOIN #63819 (Maksim Kita).
  • Eliminar los datos de todos los discos después de DROP con una base de datos Lazy. #63848 (MikhailBurdukov).
  • Corrige resultados incorrectos al leer desde MV con réplicas paralelas y el nuevo analizador #63861 (Nikita Taranov).
  • Correcciones en los comandos find_super_nodes y find_big_family de keeper-client #63862 (Alexander Gololobov).
  • Actualizar el nombre de la ejecución de lambda #63864 (Nikolai Kochetov).
  • Se corrige un SIGSEGV causado por el perfilador de CPU/Real #63865 (Azat Khuzhin).
  • Se corrige la consulta EXPLAIN CURRENT TRANSACTION #63926 (Anton Popov).
  • Se corrige el analizador: son tortugas hasta el infinito… #63930 (Yakov Olkhovskiy).
  • Permitir determinados comandos ALTER TABLE para el disco plain_rewritable #63933 (Julia Kartseva).
  • Corrección de CTE recursivas distribuidas #63939 (Maksim Kita).
  • Analizador: Se corrige la resolución de COLUMNS #63962 (Dmitry Novik).
  • LIMIT BY y skip_unused_shards con el analizador #63983 (Nikolai Kochetov).
  • Una corrección de algo de código basura (Kusto experimental) #63992 (Yong Wang).
  • Deserializar entradas binarias no confiables de forma más segura #64024 (Robert Schulze).
  • Se corrige el análisis de consultas con la configuración final = 1 en tablas distribuidas sobre tablas que no pertenecen a la familia MergeTree. #64037 (Nikolai Kochetov).
  • Se agregan los ajustes que faltan a recoverLostReplica #64040 (Raúl Marín).
  • Se corrigen las comprobaciones de acceso de SQL security en el analizador #64079 (pufit).
  • Corregir el analizador: para DAG, solo debe usarse la expresión interpolate #64096 (Yakov Olkhovskiy).
  • Corrige la escritura en multipartes de copias de seguridad de Azure en bloques de 1 MiB (tamaño del búfer de lectura) en lugar de max_upload_part_size (en el caso de copia no nativa) #64117 (Kseniia Sumarokova).
  • Aplicar correctamente el fallback durante la copia de seguridad #64153 (Antonio Andelic).
  • Evitar LOGICAL_ERROR al usar CREATE TABLE como vista materializada #64174 (Raúl Marín).
  • Caché de consultas: tratar como diferentes las consultas idénticas realizadas en distintas bases de datos #64199 (Robert Schulze).
  • Se ignora text_log para Keeper #64218 (Antonio Andelic).
  • Soluciona error lógico: conversión incorrecta en una tabla Buffer con prewhere. #64388 (Nikolai Kochetov).

Lanzamiento de ClickHouse 24.4, 2024-04-30. Presentación, Vídeo

Notas de actualización

  • clickhouse-odbc-bridge y clickhouse-library-bridge ahora son paquetes independientes. Esto resuelve #61677. #62114 (Alexey Milovidov).
  • Ya no se permite establecer max_parallel_replicas (para la lectura paralela experimental desde réplicas) en 0, ya que no tiene sentido. Resuelve #60140. #61201 (Kruglov Pavel).
  • Se elimina la compatibilidad con la consulta INSERT WATCH (parte de la funcionalidad obsoleta LIVE VIEW). #62382 (Alexey Milovidov).
  • Se eliminó la configuración optimize_monotonous_functions_in_order_by. #63004 (Raúl Marín).
  • Se elimina la etiqueta experimental del motor de base de datos Replicated. Ahora está en fase Beta. #62937 (Justin de Guzman).

Nueva funcionalidad

  • Compatibilidad con CTE recursivas. #62074 (Maksim Kita).
  • Compatibilidad con la cláusula QUALIFY. Cierra #47819. #62619 (Maksim Kita).
  • Ahora se pueden otorgar permisos sobre los motores de tabla, sin afectar al comportamiento de los usuarios existentes. #60117 (jsc0218).
  • Se añadió un disco S3 reescribible que admite operaciones INSERT y no requiere metadatos almacenados localmente. #61116 (Julia Kartseva). Su principal caso de uso son las tablas del sistema.
  • El resaltado de sintaxis al escribir en el cliente funcionará a nivel sintáctico (antes funcionaba a nivel del analizador léxico). #62123 (Alexey Milovidov).
  • Admite eliminar varias tablas al mismo tiempo, como en DROP TABLE a, b, c;. #58705 (zhongyuankai).
  • Ahora se admite modificar la configuración de la tabla memory mediante ALTER MODIFY SETTING. Ejemplo: ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;. #62039 (zhongyuankai).
  • Se añadió el parámetro de consulta role a la interfaz HTTP. Funciona de forma similar a SET ROLE x, aplicando el rol antes de ejecutar la sentencia. Esto permite superar la limitación de la interfaz HTTP, ya que no se permiten múltiples sentencias y no es posible enviar a la vez SET ROLE x y la propia sentencia. También es posible establecer varios roles de esta forma, por ejemplo, ?role=x&role=y, lo que equivale a SET ROLE x, y. #62669 (Serge Klochkov).
  • Se añade SYSTEM UNLOAD PRIMARY KEY para liberar memoria utilizada por la clave primaria de una tabla. #62738 (Pablo Marcos).
  • Se añadieron las columnas value1, value2, …, value10 a system.text_log. Estas columnas contienen los valores usados para dar formato al mensaje. #59619 (Alexey Katsman).
  • Se añadió la columna virtual persistente _block_offset, que almacena el número original de la fila dentro del bloque asignado durante la inserción. La persistencia de la columna _block_offset puede habilitarse mediante la configuración de MergeTree enable_block_offset_column. Se añadió la columna virtual _part_data_version, que contiene el número mínimo de bloque o la versión de mutación de la parte. La columna virtual persistente _block_number ya no se considera experimental. #60676 (Anton Popov).
  • Se añade la configuración input_format_json_throw_on_bad_escape_sequence; al deshabilitarla, se permite guardar secuencias de escape no válidas en formatos de entrada JSON. #61889 (Kruglov Pavel).

Mejora del rendimiento

  • Mejoras en el push down de filtros de JOIN mediante conjuntos equivalentes. #61216 (Maksim Kita).
  • Optimización que convierte OUTER JOIN en INNER JOIN si el filtro posterior al JOIN siempre filtra los valores predeterminados. La optimización se puede controlar con la configuración query_plan_convert_outer_join_to_inner_join, habilitada de forma predeterminada. #62907 (Maksim Kita).
  • Mejora para AWS S3. El cliente debe enviar la cabecera ‘Keep-Alive: timeout=X’ al servidor. Si un cliente recibe una respuesta del servidor con esa cabecera, debe usar el valor proporcionado por el servidor. Además, es mejor que el cliente no use una conexión que esté a punto de expirar, para evitar una condición de carrera al cerrar la conexión. #62249 (Sema Checherinda).
  • Reducir la sobrecarga de las mutaciones en las consultas SELECT (v2). #60856 (Azat Khuzhin).
  • Las funciones invocadas con mayor frecuencia en PODArray ahora se fuerzan a insertarse en línea. #61144 (李扬).
  • Acelera el procesamiento de JSON al omitir el resto del objeto cuando ya se han leído todas las columnas requeridas. #62210 (lgbo).
  • Mejora los insert select triviales desde archivos en las funciones de tabla file/s3/hdfs/url/… Añade una configuración max_parsing_threads independiente para controlar la cantidad de hilos utilizados en el análisis en paralelo. #62404 (Kruglov Pavel).
  • Las funciones to_utc_timestamp y from_utc_timestamp son ahora unas 2 veces más rápidas. #62583 (KevinyhZou).
  • Las funciones parseDateTimeOrNull, parseDateTimeOrZero, parseDateTimeInJodaSyntaxOrNull y parseDateTimeInJodaSyntaxOrZero ahora son significativamente más rápidas (10x - 1000x) cuando la entrada contiene principalmente valores que no se pueden analizar. #62634 (LiuNeng).
  • Las consultas SELECT en system.query_cache ahora son notablemente más rápidas cuando la caché de consultas contiene muchas entradas (p. ej., más de 100.000). #62671 (Robert Schulze).
  • Menor contención en la caché del sistema de archivos (parte 3): ejecutar la eliminación en el sistema de archivos sin bloqueo durante el intento de reserva de espacio. #61163 (Kseniia Sumarokova).
  • Se acelera el redimensionamiento dinámico de la caché del sistema de archivos. #61723 (Kseniia Sumarokova).
  • El origen del Diccionario con INVALIDATE_QUERY no se recarga dos veces al iniciar. #62050 (vdimir).
  • Se corrige un problema por el que, cuando se añade un = 1 o = 0 redundante después de una expresión booleana que involucra la clave primaria, no se usa el índice primario. Por ejemplo, tanto SELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1 como SELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0 realizan un escaneo completo de la tabla, aunque se puede usar el índice primario. #62142 (josh-hildred).
  • Devuelve un flujo de fragmentos de system.remote_data_paths en lugar de acumular todo el resultado en un único fragmento grande. Esto permite usar menos memoria, mostrar el progreso intermedio y cancelar la consulta. #62613 (Alexander Gololobov).

Funcionalidad experimental

  • Se admite un búfer de escritura en paralelo para Azure Blob Storage, gestionado mediante la configuración azure_allow_parallel_part_upload. #62534 (SmitaRKulkarni).
  • La caché de páginas en espacio de usuario ahora funciona con almacenamiento web estático (disk(type = web)). Use la configuración de cliente use_page_cache_for_disks_without_file_cache=1 para habilitarla. #61911 (Michael Kolupaev).
  • No se tratan como sospechosas las variantes Bool y numéricas en el tipo Variant. #61999 (Kruglov Pavel).
  • Se implementa una mejor conversión de String a Variant mediante parsing. #62005 (Kruglov Pavel).
  • Se admite Variant en las funciones JSONExtract. #62014 (Kruglov Pavel).
  • El tipo Variant se marca como comparable para que pueda usarse en la clave primaria. #62693 (Kruglov Pavel).

Mejora

  • Para mayor comodidad, SELECT * FROM numbers() funcionará de la misma forma que SELECT * FROM system.numbers, sin límite. #61969 (YenchangChan).
  • Introducir etiquetas separadas de consumidor/productor para la configuración de Kafka. Esto evita advertencias de librdkafka (una biblioteca de C bastante mala, con muchos errores) sobre que se especificaron propiedades de consumidor para instancias de productor y viceversa (p. ej., Configuration property session.timeout.ms is a consumer property and will be ignored by this producer instance). Cierra: #58983. #58956 (Aleksandr Musorin).
  • Las funciones date_diff y age ahora calculan su resultado con precisión de nanosegundos en lugar de microsegundos. Ahora también admiten nanosecond (o nanoseconds o ns) como posible valor para el parámetro unit. #61409 (Austin Kothig).
  • Se añadieron las unidades de nanosegundos, microsegundos y milisegundos para date_trunc. #62335 (Misz606).
  • Recargar la cadena de certificados al recargar el certificado. #61671 (Pervakov Grigorii).
  • Se intenta evitar un error #60432 impidiendo adjuntar una tabla si hay una réplica activa para esa ruta de réplica. #61876 (Arthur Passos).
  • Se implementó compatibilidad con input para clickhouse-local. #61923 (Azat Khuzhin).
  • El motor de tabla Join con strictness ANY es consistente después de la recarga. Cuando se insertan varias filas con la misma clave, la primera tendrá mayor prioridad (antes, se elegía aleatoriamente durante la carga de la tabla). cierra #51027. #61972 (vdimir).
  • Inferencia automática de tipos de columna Nullable a partir del esquema de Apache Arrow. #61984 (Maksim Kita).
  • Se permite cancelar la fusión paralela de estados de agregación durante la agregación. Ejemplo: uniqExact. #61992 (Maksim Kita).
  • Usa system.keywords para completar las sugerencias y también para usarlas internamente en todas partes. #62000 (Nikita Mikhaylov).
  • OPTIMIZE FINAL para ReplicatedMergeTree ahora esperará a que finalicen las fusiones actualmente activas y luego volverá a intentar programar una fusión final. Esto lo alineará más con el comportamiento habitual de MergeTree. #62067 (Nikita Taranov).
  • Al leer datos de un archivo de texto de Hive, se utilizaba la primera línea del archivo para ajustar el número de campos de entrada, y a veces la cantidad de campos de esa primera línea no coincide con la definida en la tabla de Hive; por ejemplo, la tabla de Hive está definida con 3 columnas, como test_tbl(a Int32, b Int32, c Int32), pero la primera línea del archivo de texto solo tiene 2 campos. En esta situación, los campos de entrada se ajustarán a 2, y si la siguiente línea del archivo de texto tiene 3 campos, el tercer campo no podrá leerse y en su lugar se establecerá el valor predeterminado 0, lo cual no es correcto. #62086 (KevinyhZou).
  • CREATE AS copia el comentario de la tabla. #62117 (Pablo Marcos).
  • Añadir el progreso de la consulta a la tabla zookeeper. #62152 (JackyWoo).
  • Se añade la posibilidad de activar el collector de trazas (Real y CPU) en todo el servidor. #62189 (alesapin).
  • Se añadió la configuración lightweight_deletes_sync (valor predeterminado: 2 - espera sincrónicamente a todas las réplicas). Es similar a la configuración mutations_sync, pero solo afecta al comportamiento de las eliminaciones ligeras. #62195 (Anton Popov).
  • Distinguir los valores booleanos de los enteros al analizar valores de ajustes personalizados: SET custom_a = true; SET custom_b = 1;. #62206 (Vitaly Baranov).
  • Permite el acceso a S3 a través de endpoints de interfaz de AWS Private Link. Cierra #60021, #31074 y #53761. #62208 (Arthur Passos).
  • No se crea un directorio para UDF en clickhouse-client si no existe. Esto cierra #59597. #62366 (Alexey Milovidov).
  • La caché de consultas ya no guarda los resultados de consultas sobre tablas del sistema (system.*, information_schema.*, INFORMATION_SCHEMA.*). #62376 (Robert Schulze).
  • La consulta MOVE PARTITION TO TABLE puede retrasarse o lanzar la excepción TOO_MANY_PARTS para evitar superar los límites de cantidad de partes. Se aplican la misma configuración y los mismos límites que para la consulta INSERT (consulte la configuración de max_parts_in_total, parts_to_delay_insert, parts_to_throw_insert, inactive_parts_to_throw_insert, inactive_parts_to_delay_insert, max_avg_part_size_for_too_many_parts, min_delay_to_insert_ms y max_delay_to_insert). #62420 (Sergei Trifonov).
  • Se cambió el directorio de instalación predeterminado en macOS de /usr/bin a /usr/local/bin. Esto es necesario porque la Protección de Integridad del Sistema de Apple, introducida con macOS El Capitan (2015), impide escribir en /usr/bin, incluso con sudo. #62489 (haohang).
  • Hacer que transform devuelva siempre la primera coincidencia. #62518 (Raúl Marín).
  • Se añadió la columna hostname que faltaba en la tabla del sistema blob_storage_log. #62456 (Jayme Bird).
  • Para mantener la consistencia con otras tablas del sistema, system.backup_log ahora tiene una columna event_time. #62541 (Jayme Bird).
  • La tabla system.backup_log ahora tiene la clave de ordenación “predeterminada”, que es event_date, event_time, la misma que la de otros motores de tabla _log. #62667 (Nikita Mikhaylov).
  • Evitar la evaluación de las expresiones DEFAULT de la tabla al ejecutar RESTORE. #62601 (Vitaly Baranov).
  • El almacenamiento en S3 y las copias de seguridad también necesitan la misma configuración predeterminada de keep alive que el disco S3. #62648 (Sema Checherinda).
  • Añadir el identificador de cliente de librdkafka (esa infame biblioteca en C, que tiene muchos errores) a los mensajes de log para poder diferenciar los mensajes de log de distintos consumidores de una misma tabla. #62813 (János Benjamin Antal).
  • Se permiten las macros especiales {uuid} y {database} en la ruta de ZooKeeper de una base de datos Replicated. #62818 (Vitaly Baranov).
  • Permitir una clave de cuota con un método de autenticación diferente en las solicitudes HTTP. #62842 (Kseniia Sumarokova).
  • Se redujo la verbosidad del argumento de línea de comandos --help en clickhouse client y clickhouse local. La salida anterior ahora se genera con --help --verbose. #62973 (Yarik Briukhovetskyi).
  • Se eliminó log_bin_use_v1_row_events en MySQL 8.3, y ajustamos el motor MaterializedMySQL, todavía experimental, para adaptarlo a este cambio #60479. #63101 (Eugene Klimov). Autor: Nikolay Yankin.

Mejora de compilación/pruebas/empaquetado

Corrección de errores (comportamiento anómalo visible para el usuario en una versión estable oficial)

  • Se corrigió un error lógico al deshacer una transacción de inserción con quorum. #61953 (Han Fei).
  • Se corrige un error del analizador al usar COUNT(*) con la cláusula FILTER #61357 (Duc Canh Le).
  • Corregir un error lógico en group_by_use_nulls + conjuntos de agrupación + analizador + materializar/constante #61567 (Kruglov Pavel).
  • Cancelar las fusiones antes de eliminar las partes movidas #61610 (János Benjamin Antal).
  • Corregida una finalización abrupta en Apache Arrow #61720 (Kruglov Pavel).
  • Busque la marca convert_to_replicated en la ruta correcta correspondiente al disco específico #61769 (Kirill).
  • Se corrigió una posible condición de carrera en las conexiones de distributed_foreground_insert/distributed_background_insert_batch #61867 (Azat Khuzhin).
  • Clasificar el error CANNOT_PARSE_ESCAPE_SEQUENCE como error de análisis para poder omitirlo en los formatos de entrada por filas #61883 (Kruglov Pavel).
  • Se corrigió la escritura del mensaje de excepción en el formato de salida HTTP cuando se usa http_wait_end_of_query #61951 (Kruglov Pavel).
  • Corrección apropiada de LowCardinality junto con las funciones JSONExtact #61957 (Nikita Mikhaylov).
  • Fallo en Merge engine si la política de filas no tiene una expresión #61971 (Ilya Golshtein).
  • Se corrige una excepción no capturada en el destructor de WriteBufferAzureBlobStorage #61988 (SmitaRKulkarni).
  • Se corrigió CREATE TABLE sin definición de columnas en ReplicatedMergeTree #62040 (Azat Khuzhin).
  • Corrección de optimize_skip_unused_shards_rewrite_in para una clave de fragmentación compuesta #62047 (Azat Khuzhin).
  • ReadWriteBufferFromHTTP establece correctamente el encabezado host al ser redirigido #62068 (Sema Checherinda).
  • Se corrige un problema por el que la tabla externa no podía interpretar el tipo de dato Bool #62115 (Duc Canh Le).
  • Analizador: Se corrige la resolución de los parámetros de consulta #62186 (Dmitry Novik).
  • Se corrige la restauración de partes en modo readonly #62207 (Vitaly Baranov).
  • Se corrigió un fallo en la definición de un índice que contiene una UDF SQL #62225 (vdimir).
  • Corrección de la semilla aleatoria NULL en generateRandom con el analizador. #62248 (Nikolai Kochetov).
  • Gestionar correctamente las columnas const en Distinct Transfom #62250 (Antonio Andelic).
  • Se corrige Parts Splitter para consultas con el modificador FINAL #62268 (Nikita Taranov).
  • Analizador: corrección de la resolución de alias a vistas parametrizadas #62274 (Dmitry Novik).
  • Analizador: Corregida la resolución de nombres en ámbitos superiores #62281 (Dmitry Novik).
  • Se corrige argMax con una columna numérica Nullable no nativa #62285 (Raúl Marín).
  • Se corrigen BACKUP y RESTORE de una vista materializada en la base de datos Ordinary #62295 (Vitaly Baranov).
  • Se corrige una condición de carrera en los escalares de Context #62305 (Kruglov Pavel).
  • Se corrigió la clave primaria en la vista materializada #62319 (Murat Khairulin).
  • No crear un pipeline de inserción multihilo para tablas que no lo admiten #62333 (vdimir).
  • Se corrige el analizador para consultas distribuidas con argumentos posicionales #62362 (flynn).
  • Se corrigió el pushdown de filtros procedentes de additional_table_filters en el motor Merge del analizador #62398 (Kruglov Pavel).
  • Corregidas las consultas GLOBAL IN en tablas con analyzer. #62409 (Nikolai Kochetov).
  • Respetar la configuración truncate_on_insert/create_new_file_on_insert en los motores s3/hdfs/azure durante la escritura por particiones #62425 (Kruglov Pavel).
  • Corrige la ruta de restauración de copias de seguridad para AzureBlobStorage #62447 (SmitaRKulkarni).
  • Se corrigió SimpleSquashingChunksTransform #62451 (Nikita Taranov).
  • Se corrige la captura en lambdas anidadas. #62462 (Nikolai Kochetov).
  • Se evita un fallo al leer protobuf con tipos recursivos #62506 (Raúl Marín).
  • Se corrige un error al mover una partición a sí misma #62524 (helifu).
  • Se corrige la subconsulta escalar en LIMIT #62567 (Nikolai Kochetov).
  • Se corrigió un fallo de segmentación en el motor Hive, experimental y sin soporte, que de todos modos tampoco nos gusta #62578 (Nikolay Degterinsky).
  • Se corrige una fuga de memoria en groupArraySorted #62597 (Antonio Andelic).
  • Se corrige un fallo en largestTriangleThreeBuckets #62646 (Raúl Marín).
  • Corrige tumble[Start,End] y hop[Start,End] para resoluciones más altas #62705 (Jordi Villar).
  • Corregir el estado del combinador argMin/argMax #62708 (Raúl Marín).
  • Se corrige el fallo de los datos temporales en la caché provocado por la optimización de la contención de bloqueos de la caché #62715 (Kseniia Sumarokova).
  • Corrige un fallo en la función mergeTreeIndex #62762 (Anton Popov).
  • corrección: actualización: columnas materializadas anidadas: correcciones en la comprobación de tamaño #62773 (Eliot Hautefeuille).
  • Se corrige un problema por el que no se respetaba el modificador FINAL en las CTE con analizador #62811 (Duc Canh Le).
  • Se corrige un cierre inesperado en la función formatRow con el formato JSON y la interfaz HTTP #62840 (Anton Popov).
  • Azure: corregir la generación de la URL final a partir del objeto endpoint #62850 (Daniel Pozo Escalona).
  • Se corrige el códec GCD #62853 (Nikita Taranov).
  • Se corrige la clave LowCardinality(Nullable) en el hiperrectángulo #62866 (Amos Bird).
  • Se corrigió fromUnixtimestamp en la sintaxis de Joda cuando el valor de entrada excede el rango de UInt32 #62901 (KevinyhZou).
  • Deshabilitar optimize_rewrite_aggregate_function_with_if en sum(nullable) #62912 (Raúl Marín).
  • Se corrige PREWHERE en StorageBuffer con distintos tipos de columna en la tabla de origen. #62916 (Nikolai Kochetov).
  • Se corrigió el manejo incorrecto de los datos temporales en la caché cuando fallaba la creación del directorio de la clave de la caché #62925 (Kseniia Sumarokova).
  • gRPC: corregir un fallo en la conexión con un par IPv6 #62978 (Konstantin Bogdanov).
  • Se corrige un posible CHECKSUM_DOESNT_MATCH (y otros) durante la obtención de datos entre réplicas #62987 (Azat Khuzhin).
  • Se corrige la terminación por una excepción no capturada en datos temporales en caché #62998 (Kseniia Sumarokova).
  • Se corrigió la conversión implícita en optimize_rewrite_aggregate_function_with_if #62999 (Raúl Marín).
  • Se corrige una excepción no controlada en ~RestorerFromBackup #63040 (Vitaly Baranov).
  • No eliminar las constantes del servidor de la clave de GROUP BY en la consulta secundaria. #63047 (Nikolai Kochetov).
  • Corregir la evaluación incorrecta de la monotonicidad de la función abs #63097 (Duc Canh Le).
  • Se establece el nombre del servidor para el protocolo de enlace SSL en el motor MongoDB #63122 (Alexander Gololobov).
  • Usar la base de datos especificada por el usuario en lugar de “config” para la comprobación de la versión del protocolo wire de MongoDB #63126 (Alexander Gololobov).

Lanzamiento de ClickHouse 24.3 LTS, 2024-03-27. Presentación, Vídeo

Notas de actualización

  • La configuración allow_experimental_analyzer está habilitada de forma predeterminada y cambia el análisis de la consulta a una nueva implementación, que ofrece mejor compatibilidad y una mayor cobertura de funcionalidades. La funcionalidad “analyzer” se considera beta en lugar de experimental. Puede volver al comportamiento anterior estableciendo compatibility en 24.2 o deshabilitando la configuración allow_experimental_analyzer. Vea el video en YouTube.
  • ClickHouse permite datos binarios arbitrarios en el tipo de dato String, que normalmente es UTF-8. Las cadenas String de Parquet/ORC/Arrow solo admiten UTF-8. Por eso puedes elegir qué tipo de dato de Arrow usar para el tipo de dato String de ClickHouse: String o Binary. Esto se controla mediante los ajustes output_format_parquet_string_as_string, output_format_orc_string_as_string, output_format_arrow_string_as_string. Aunque Binary sería más correcto y compatible, usar String de forma predeterminada se ajusta mejor a las expectativas de los usuarios en la mayoría de los casos. Parquet/ORC/Arrow admite muchos métodos de compresión, incluidos lz4 y zstd. ClickHouse admite todos los métodos de compresión. Algunas herramientas menos avanzadas no son compatibles con el método de compresión lz4, que es más rápido; por eso establecemos zstd de forma predeterminada. Esto se controla mediante los ajustes output_format_parquet_compression_method, output_format_orc_compression_method y output_format_arrow_compression_method. Cambiamos el valor predeterminado a zstd para Parquet y ORC, pero no para Arrow (se hace hincapié en los usos de bajo nivel). #61817 (Alexey Milovidov).
  • En la nueva versión de ClickHouse, las funciones geoDistance, greatCircleDistance y greatCircleAngle usarán el tipo de datos de coma flotante de doble precisión de 64 bits para los cálculos internos y como tipo de retorno si todos los argumentos son Float64. Esto resuelve #58476. En versiones anteriores, la función siempre usaba Float32. Puede volver al comportamiento anterior estableciendo geo_distance_returns_float64_on_float64_arguments en false o compatibility en 24.2 o una versión anterior. #61848 (Alexey Milovidov). En coautoría con Geet Patel.
  • Las partes de datos en memoria obsoletas quedaron en desuso a partir de la versión 23.5 y dejaron de ser compatibles a partir de la versión 23.10. Ahora se elimina el código restante. Continuación de #55186 y #45409. Es poco probable que haya usado partes de datos en memoria, porque solo estaban disponibles antes de la versión 23.5 y únicamente si las habilitaba manualmente especificando los SETTINGS correspondientes para una tabla MergeTree. Para comprobar si tiene partes de datos en memoria, ejecute la siguiente consulta: SELECT part_type, count() FROM system.parts GROUP BY part_type ORDER BY part_type. Para desactivar el uso de partes de datos en memoria, ejecute ALTER TABLE ... MODIFY SETTING min_bytes_for_compact_part = DEFAULT, min_rows_for_compact_part = DEFAULT. Antes de actualizar desde versiones anteriores de ClickHouse, compruebe primero que no tenga partes de datos en memoria. Si hay partes de datos en memoria, desactívelas primero; después, espere a que ya no haya ninguna y continúe con la actualización. #61127 (Alexey Milovidov).
  • Se cambió el nombre de la columna de duration_ms a duration_microseconds en la tabla system.zookeeper para reflejar que la duración está en microsegundos. #60774 (Duc Canh Le).
  • Rechazar las consultas INSERT entrantes cuando las configuraciones a nivel de consulta async_insert y deduplicate_blocks_in_dependent_materialized_views estén habilitadas simultáneamente. Este comportamiento está controlado por la configuración throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert y está habilitado de forma predeterminada. Esto da continuidad a https://github.com/ClickHouse/ClickHouse/pull/59699 y es necesario para desbloquear https://github.com/ClickHouse/ClickHouse/pull/59915. #60888 (Nikita Mikhaylov).
  • La utilidad clickhouse-copier se ha trasladado a un repository independiente en GitHub: https://github.com/ClickHouse/copier. Ya no se incluye en el paquete, pero sigue estando disponible como descarga independiente. Esto cierra: #60734 Esto cierra: #60540 Esto cierra: #60250 Esto cierra: #52917 Esto cierra: #51140 Esto cierra: #47517 Esto cierra: #47189 Esto cierra: #46598 Esto cierra: #40257 Esto cierra: #36504 Esto cierra: #35485 Esto cierra: #33702 Esto cierra: #26702.
  • Para aumentar la compatibilidad con MySQL, el alias de compatibilidad locate ahora acepta de manera predeterminada los argumentos (needle, haystack[, start_pos]). El comportamiento anterior (haystack, needle, [, start_pos]) puede restaurarse estableciendo function_locate_has_mysql_compatible_argument_order = 0. #61092 (Robert Schulze).
  • Se prohíbe SimpleAggregateFunction en ORDER BY de las tablas MergeTree (igual que AggregateFunction, ya que no son comparables) de forma predeterminada (use allow_suspicious_primary_key para permitirlas). #61399 (Azat Khuzhin).
  • El motor de base de datos Ordinary está obsoleto. Recibirás una advertencia en clickhouse-client si tu servidor lo utiliza. Esto cierra #52229. #56942 (shabroo).

Nueva funcionalidad

  • Se añadió compatibilidad para leer y escribir copias de seguridad en formato tar (además de zip). #59535 (josh-hildred).
  • Se implementó compatibilidad con buckets de S3 Express. #59965 (Nikita Taranov).
  • Se permite adjuntar partes desde un disco diferente (mediante copia en lugar de enlace físico). #60112 (Unalian).
  • Tablas Memory con tamaño limitado: controladas por su configuración, min_bytes_to_keep, max_bytes_to_keep, min_rows_to_keep y max_rows_to_keep. #60612 (Jake Bamrah).
  • Límites separados para el número de consultas en espera y en ejecución. Se añadió la nueva configuración del servidor max_waiting_queries, que limita el número de consultas en espera debido a async_load_databases. Los límites existentes sobre el número de consultas en ejecución ya no cuentan las consultas en espera. #61053 (Sergei Trifonov).
  • Se añadió una tabla system.keywords que contiene todas las palabras clave del parser. Se necesita principalmente y se usará para mejorar el fuzzing y el resaltado de sintaxis. #51808 (Nikita Mikhaylov).
  • Se añadió compatibilidad con ATTACH PARTITION ALL. #61107 (Kirill Nikiforov).
  • Se añadió una nueva función, getClientHTTPHeader. Esto cierra #54665. En coautoría con @lingtaolf. #61820 (Alexey Milovidov).
  • Se añadió generate_series como función de tabla (alias de compatibilidad con PostgreSQL para la función existente numbers). Esta función genera una tabla con una progresión aritmética de números naturales. #59390 (divanik).
  • Un modo compatible para topK/topkWeighed, que devuelve el recuento de valores y su error. #54508 (UnamedRus).
  • Se añadió la función toMillisecond, que devuelve el componente de milisegundos para valores de tipo DateTime o DateTime64. #60281 (Shaun Struwig).
  • Se permite configurar controladores de redirección HTTP para clickhouse-server. Por ejemplo, puede hacer que / redirija a la UI Play. #60390 (Alexey Milovidov).

Mejora del rendimiento

  • Se optimizó la función dotProduct para evitar copias de memoria innecesarias y costosas. #60928 (Robert Schulze).
  • Impresión 30 veces más rápida para enteros de 256 bits. #61100 (Raúl Marín).
  • Si la clave primaria de la tabla contiene mayormente columnas inútiles, no las mantenga en memoria. Esto se controla mediante un nuevo ajuste primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns, con el valor predeterminado 0.9, lo que significa lo siguiente: para una clave primaria compuesta, si una columna cambia de valor al menos en 0.9 de los casos, no se cargarán las columnas siguientes. #60255 (Alexey Milovidov).
  • Mejora del rendimiento de los métodos de agregación serializados cuando intervienen varias columnas Nullable. #55809 (Amos Bird).
  • La salida de JSON ahora se genera de forma diferida para mejorar el rendimiento de ALL JOIN. #58278 (LiuNeng).
  • Permitir reutilizar las conexiones HTTP/HTTPS con servicios externos, como AWS S3, en todos los casos de uso. Incluso cuando la respuesta es 3xx o 4xx. #58845 (Sema Checherinda).
  • Mejoras en las funciones de agregación argMin / argMax / any / anyLast / anyHeavy, así como en las consultas con ORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1. #58640 (Raúl Marín).
  • Optimización trivial del filtro de columna. En algunos casos, la memoria máxima puede reducirse al 44 % de la original. #59698 (李扬).
  • Ejecuta la función multiIf de forma columnar cuando el tipo subyacente del resultado es un número. #60384 (李扬).
  • Mutexes casi 2 veces más rápidos. #60823 (Azat Khuzhin).
  • Agotar múltiples conexiones en paralelo cuando una consulta distribuida está finalizando. #60845 (lizhuoyu5).
  • Optimiza el movimiento de datos entre columnas de un número Nullable o una cadena Nullable, lo que mejora ciertos microbenchmarks. #60846 (李扬).
  • Las operaciones con la caché del sistema de archivos se verán menos afectadas por la contención de bloqueos. #61066 (Alexey Milovidov).
  • Optimiza array join y otros JOINs evitando una optimización errónea del compilador. Cierra #61074. #61075 (李扬).
  • Si una consulta con un error de sintaxis contenía el matcher COLUMNS con una expresión regular, la expresión regular se compilaba cada vez durante el retroceso del analizador sintáctico, en lugar de compilarse una sola vez. Este era un error fundamental. La regexp compilada se colocaba en el AST. Pero la letra A de AST significa “abstract”, lo que implica que no debería contener objetos pesados. Algunas partes del AST pueden crearse y descartarse durante el análisis sintáctico, incluido un gran número de retrocesos. Esto ralentiza el análisis sintáctico y, en consecuencia, permite que un usuario readonly provoque un DoS. Pero el principal problema es que impide avanzar con los fuzzers. #61543 (Alexey Milovidov).
  • Se añade una nueva fase del analizador para optimizar el operador IN cuando hay un único valor. #61564 (LiuNeng).
  • DNSResolver baraja el conjunto de IP resueltas, lo cual es necesario para aprovechar de forma uniforme varios endpoints de AWS S3. #60965 (Sema Checherinda).

Funcionalidad experimental

  • Se admite la lectura en paralelo para Azure Blob Storage. Esto mejora el rendimiento del almacenamiento de objetos experimental de Azure. #61503 (SmitaRKulkarni).
  • Se añade un WriteBuffer asíncrono para Azure Blob Storage, similar a S3. Esto mejora el rendimiento del almacenamiento de objetos experimental de Azure. #59929 (SmitaRKulkarni).
  • Se utiliza una identidad administrada para la E/S de backups al usar Azure Blob Storage. Se añade una configuración para evitar que ClickHouse intente crear un contenedor inexistente, lo que requiere permisos a nivel de la cuenta de almacenamiento. #61785 (Daniel Pozo Escalona).
  • Se añade la configuración parallel_replicas_allow_in_with_subquery = 1, que permite usar subconsultas con IN junto con réplicas paralelas. #60950 (Nikolai Kochetov).
  • Un cambio en la replicación “zero-copy”: todos los bloqueos de zero-copy relacionados con una tabla deben eliminarse al eliminar la tabla. También debe eliminarse el directorio que contiene esos bloqueos. #57575 (Sema Checherinda).

Mejora

  • Usa MergeTree como motor de tabla predeterminado. #60524 (Alexey Milovidov)
  • Se habilitó output_format_pretty_row_numbers de forma predeterminada. Mejora la usabilidad. #61791 (Alexey Milovidov).
  • En la versión anterior, algunos números en los formatos Pretty no se veían lo bastante bien. #61794 (Alexey Milovidov).
  • Un valor largo en los formatos Pretty no se truncará si es el único valor del conjunto de resultados, como en el resultado de la consulta SHOW CREATE TABLE. #61795 (Alexey Milovidov).
  • Al igual que clickhouse-local, clickhouse-client aceptará la opción --output-format como sinónimo de la opción --format. Esto resuelve #59848. #61797 (Alexey Milovidov).
  • Si stdout es una terminal y no se especifica el formato de salida, clickhouse-client y herramientas similares usarán PrettyCompact de forma predeterminada, igual que en el modo interactivo. clickhouse-client y clickhouse-local manejarán de forma unificada los argumentos de línea de comandos para los formatos de entrada y salida. Esto cierra #61272. #61800 (Alexey Milovidov).
  • Agrupación de dígitos con guiones bajos en formatos Pretty para mejorar la legibilidad. Esto se controla con una nueva configuración, output_format_pretty_highlight_digit_groups. #61802 (Alexey Milovidov).
  • Se añadió la posibilidad de sobrescribir la configuración inicial de INSERT mediante SYSTEM FLUSH DISTRIBUTED. #61832 (Azat Khuzhin).
  • Activar por defecto el perfilado de procesadores (tiempo empleado y bytes de entrada y salida para ordenación, agregación, …). #61096 (Azat Khuzhin).
  • Soporte para archivos sin extensión de formato en la base de datos Filesystem. #60795 (Kruglov Pavel).
  • Hacer que todos los nombres de formato no distingan entre mayúsculas y minúsculas, como Tsv, o TSV, o tsv, o incluso rowbinary. #60420 (豪肥肥). Agradecería que se siguiera escribiendo correctamente, por ejemplo, JSON 😇, no Json 🤮, pero no nos importa si lo escriben como prefieran.
  • Se añadió el modo none_only_active a la configuración distributed_ddl_output_mode. #60340 (Alexander Tokmakov).
  • El dashboard avanzado tiene colores ligeramente mejores para los gráficos multilínea. #60391 (Alexey Milovidov).
  • El dashboard Advanced ahora mantiene los controles siempre visibles al desplazarse. Esto le permite añadir un nuevo gráfico sin tener que volver arriba. #60692 (Alexey Milovidov).
  • Al ejecutar la consulta MODIFY COLUMN para vistas materializadas, compruebe la estructura de la tabla interna para asegurarse de que todas las columnas existan. #47427 (sunny).
  • Los tipos String y enum pueden usarse en el mismo contexto, como arrays, consultas UNION y expresiones condicionales. Esto cierra #60726. #60727 (Alexey Milovidov).
  • Permite declarar Enums en la estructura de datos externos para el procesamiento de consultas (se trata de una tabla temporal inmediata que puedes proporcionar para tu consulta). #57857 (Duc Canh Le).
  • Tener en cuenta las filas eliminadas mediante eliminación ligera al seleccionar las partes que se van a fusionar, para estimar mejor el tamaño en disco de la parte resultante. #58223 (Zhuo Qiu).
  • Se añadieron comentarios en columnas de más tablas del sistema. Continuación de https://github.com/ClickHouse/ClickHouse/pull/58356. #59016 (Nikita Mikhaylov).
  • Ahora podemos usar columnas virtuales en PREWHERE. Merece la pena en el caso de columnas virtuales no constantes, como _part_offset. #59033 (Amos Bird). Se ha mejorado la usabilidad general de las columnas virtuales. Ahora se permite usar columnas virtuales en PREWHERE (merece la pena en el caso de columnas virtuales no constantes, como _part_offset). Ahora hay documentación integrada disponible para las columnas virtuales, como comentario de la columna en la consulta DESCRIBE con la configuración describe_include_virtual_columns habilitada. #60205 (Anton Popov).
  • En lugar de usar una clave constante, ahora el almacenamiento de objetos genera una clave para determinar el permiso de eliminar objetos. #59495 (Sema Checherinda).
  • Permitir “local” como tipo de almacenamiento de objetos en lugar de “local_blob_storage”. #60165 (Kseniia Sumarokova).
  • Vaciado en paralelo de los bloques de INSERT pendientes del motor Distributed en DETACH/apagado del servidor y SYSTEM FLUSH DISTRIBUTED (el paralelismo solo funcionará si la tabla tiene una política multidisco (como todo en el motor Distributed en este momento)). #60225 (Azat Khuzhin).
  • Se añade una configuración para forzar la caché de lectura directa en las fusiones. #60308 (Kseniia Sumarokova).
  • Una mejora del protocolo de compatibilidad con MySQL. El problema #57598 menciona una diferencia de comportamiento en el manejo de transacciones. Un COMMIT/ROLLBACK emitido cuando no hay ninguna transacción activa se reporta como un error, a diferencia del comportamiento de MySQL. #60338 (PapaToemmsn).
  • La función substring ahora tiene el nuevo alias byteSlice. #60494 (Robert Schulze).
  • Se ha renombrado la configuración del servidor dns_cache_max_size a dns_cache_max_entries para reducir la ambigüedad. #60500 (Kirill Nikiforov).
  • SHOW INDEX | INDEXES | INDICES | KEYS ya no ordena según las columnas de la clave primaria (lo cual no era intuitivo). #60514 (Robert Schulze).
  • Mejora de Keeper: abortar el arranque si se detecta una instantánea no válida, para evitar la pérdida de datos. #60537 (Antonio Andelic).
  • Actualiza tzdata a 2024a. #60768 (Raúl Marín).
  • Mejora de Keeper: compatibilidad con leadership_expiry_ms en la configuración de Keeper. #60806 (Brokenice0415).
  • Inferir siempre los números en notación exponencial en formatos JSON, independientemente de la configuración input_format_try_infer_exponent_floats. Añade la configuración input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects, que permite usar el tipo String para rutas ambiguas en lugar de generar una excepción durante la inferencia de Tuples con nombre a partir de objetos JSON. #60808 (Kruglov Pavel).
  • Se añade compatibilidad con la sintaxis START TRANSACTION, utilizada habitualmente en MySQL, lo que resuelve https://github.com/ClickHouse/ClickHouse/discussions/60865. #60886 (Zach Naimon).
  • Se agregó una opción para que el algoritmo full-sorting merge join trate null como el valor máximo o mínimo. Así, el comportamiento puede ser compatible con otros sistemas SQL, como Apache Spark. #60896 (loudongfeng).
  • Se admite la detección del formato de salida por la extensión del archivo en clickhouse-client y clickhouse-local. #61036 (豪肥肥).
  • Se actualizó el límite de memoria del runtime cuando cambió el valor de CGroups en Linux. #61049 (Han Fei).
  • Se añadió la función toUInt128OrZero, que se había omitido por error (este error está relacionado con https://github.com/ClickHouse/ClickHouse/pull/945). Los alias de compatibilidad FROM_UNIXTIME y DATE_FORMAT (no son nativos de ClickHouse y solo existen por compatibilidad con MySQL) ahora distinguen entre mayúsculas y minúsculas, como es de esperar en alias de compatibilidad con SQL. #61114 (Alexey Milovidov).
  • Mejoras en las comprobaciones de acceso, que permiten revocar privilegios no concedidos cuando el usuario de destino tampoco tiene los grants para revocarlos. Ejemplo: GRANT SELECT ON *.* TO user1; REVOKE SELECT ON system.* FROM user1;. #61115 (pufit).
  • Se corrige la función has() con una columna Nullable (corrige #60214). #61249 (Mikhail Koviazin).
  • Ahora es posible especificar el atributo merge="true" en las sustituciones de configuración para subárboles <include from_zk="/path" merge="true">. Si se especifica este atributo, ClickHouse fusionará el subárbol con la configuración existente; de lo contrario, el comportamiento predeterminado es añadir contenido nuevo a la configuración. #61299 (alesapin).
  • Se añaden métricas asíncronas para los mapeos de memoria virtual: VMMaxMapCount & VMNumMaps. Cierra #60662. #61354 (Tuan Pham Anh).
  • Utilice la configuración temporary_files_codec en todos los casos en los que se creen datos temporales, por ejemplo, en la ordenación con memoria externa y en el GROUP BY con memoria externa. Antes, solo funcionaba con el algoritmo JOIN partial_merge. #61456 (Maksim Kita).
  • Se añadió una nueva opción de configuración max_parser_backtracks que permite limitar la complejidad del análisis sintáctico de las consultas. #61502 (Alexey Milovidov).
  • Menor contención durante el redimensionamiento dinámico de la caché del sistema de archivos. #61524 (Kseniia Sumarokova).
  • No se permite el modo segmentado de la cola StorageS3, ya que se reescribirá. #61537 (Kseniia Sumarokova).
  • Se corrigió la errata: de use_leagcy_max_level a use_legacy_max_level. #61545 (William Schoeffel).
  • Se eliminaron algunas entradas duplicadas en system.blob_storage_log. #61622 (YenchangChan).
  • Se agregó la función current_user como alias de compatibilidad para MySQL. #61770 (Yarik Briukhovetskyi).
  • Corregir los estados inconsistentes de las funciones de agregación de coma flotante en clústeres mixtos x86-64 / ARM #60610 (Harry Lee).

Mejora de compilación/pruebas/empaquetado

  • El perfilador de consultas en tiempo real ahora funciona en AArch64. En versiones anteriores, solo funcionaba cuando un programa no pasaba tiempo dentro de una syscall. #60807 (Alexey Milovidov).
  • Se ha añadido la versión de ClickHouse a las etiquetas de Docker. Cierra #54224. #60949 (Nikolay Monkov).
  • Se actualizó prqlc a la versión 0.11.3. #60616 (Maximilian Roos).
  • Se añadió un fuzzer genérico para texto de consultas en clickhouse-local. #61508 (Alexey Milovidov).

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

  • Se corrige finished_mutations_to_keep=0 en MergeTree (según la documentación, 0 significa conservarlo todo) #60031 (Azat Khuzhin).
  • Había un problema con la optimización FINAL; así lo describe el autor: “PartsSplitter invalid ranges for the same part”. #60041 (Maksim Kita).
  • Había un problema con Apache Hive, que es experimental y no tiene soporte. #60262 (shanfengp).
  • Una mejora para las réplicas paralelas experimentales: forzar un reanálisis si las réplicas paralelas cambiaron #60362 (Raúl Marín).
  • Se corrigió el uso del tipo de metadatos simple con la nueva opción de configuración de discos #60396 (Kseniia Sumarokova).
  • Intento de corregir el error lógico ‘No se puede capturar la columna porque tiene un tipo incompatible’ en mapContainsKeyLike #60451 (Kruglov Pavel).
  • Evitar el cálculo de subconsultas escalares en CREATE TABLE. #60464 (Nikolai Kochetov).
  • Se corrige un bloqueo mutuo en el análisis paralelo cuando se omiten muchas filas debido a errores #60516 (Kruglov Pavel).
  • Había un problema con la compatibilidad experimental de KQL (Kusto): se corrigió max_query_size_for_kql_compound_operator: #60534 (Yong Wang).
  • Corrección en Keeper: se añaden tiempos de espera al esperar los logs de commit #60544 (Antonio Andelic).
  • No mostrar sugerencias de números para tipos de fecha #60577 (Raúl Marín).
  • Corrige la lectura al usar funciones no deterministas en el filtro de MergeTree #60586 (Kruglov Pavel).
  • Se corrige un error lógico causado por un tipo de valor no válido en la configuración de compatibilidad #60596 (Kruglov Pavel).
  • fix(prql): Manejador robusto de panic #60615 (Maximilian Roos).
  • Se corrige intDiv para argumentos decimales y de fecha #60672 (Yarik Briukhovetskyi).
  • Corrección: expandir la CTE en la consulta ALTER MODIFY #60682 (Yakov Olkhovskiy).
  • Se corrige system.parts para motores de base de datos que no son Atomic/Ordinary (es decir, Memory) #60689 (Azat Khuzhin).
  • Se corrige “Definición de almacenamiento no válida en el archivo de metadatos” para vistas con parámetros #60708 (Azat Khuzhin).
  • Se corrigió un desbordamiento de búfer en CompressionCodecMultiple #60731 (Alexey Milovidov).
  • Eliminar incoherencias de SQL/JSON #60738 (Alexey Milovidov).
  • Eliminar la aserción errónea en la función de agregación quantileGK #60740 (李扬).
  • Se corrige el error de insert-select + insert_deduplication_token al establecer streams en 1 #60745 (Jordi Villar).
  • Impedir establecer cabeceras de metadatos personalizadas en operaciones de carga multiparte no admitidas #60748 (Francisco J. Jurado Moreno).
  • Corrección en toStartOfInterval #60763 (Andrey Zvonov).
  • Se corrigió un fallo en arrayEnumerateRanked #60764 (Raúl Marín).
  • Se corrigió un fallo al usar input() en INSERT SELECT JOIN #60765 (Kruglov Pavel).
  • Se corrige un fallo al usar un valor distinto de allow_experimental_analyzer en subconsultas #60770 (Dmitry Novik).
  • Eliminar la recursión al leer desde S3 #60849 (Antonio Andelic).
  • Corrige un posible bloqueo al producirse un error en HashedDictionaryParallelLoader #60926 (vdimir).
  • Corregido RESTORE asíncrono con base de datos Replicated (función experimental) #60934 (Antonio Andelic).
  • Se corrigió un interbloqueo en las inserciones asíncronas en tablas Log mediante el protocolo nativo #61055 (Anton Popov).
  • Se corrigió la evaluación diferida del argumento por defecto en dictGetOrDefault para RangeHashedDictionary #61196 (Kruglov Pavel).
  • Corrige varios errores en groupArraySorted #61203 (Raúl Marín).
  • Se corrigió la reconfiguración de Keeper en el binario independiente #61233 (Antonio Andelic).
  • Se corrige el uso de session_token en el motor S3 #61234 (Kruglov Pavel).
  • Corrige un posible resultado incorrecto de la función de agregación uniqExact #61257 (Anton Popov).
  • Se corrigieron errores en show database #61269 (Raúl Marín).
  • Se corrige un error lógico en el almacenamiento de RabbitMQ con columnas MATERIALIZED #61320 (vdimir).
  • Se corrige CREATE OR REPLACE DICTIONARY #61356 (Vitaly Baranov).
  • Corrige la consulta ATTACH con ON CLUSTER externo #61365 (Nikolay Degterinsky).
  • Se corrigió la optimización de claves consecutivas para claves Nullable #61393 (Anton Popov).
  • corrige un problema en la división del DAG de actions #61458 (Raúl Marín).
  • Se corrige la finalización de un RESTORE fallido #61466 (Vitaly Baranov).
  • Deshabilitar correctamente async_insert_use_adaptive_busy_timeout mediante la configuración de compatibilidad #61468 (Raúl Marín).
  • Permitir el encolado en el pool de restauración #61475 (Nikita Taranov).
  • Soluciona una inconsistencia al leer system.parts con UUID. #61479 (Dan Wu).
  • Se corrige ALTER QUERY MODIFY SQL SECURITY #61480 (pufit).
  • Se corrige un bloqueo en window view (funcionalidad experimental) #61526 (Alexey Milovidov).
  • Se corrige repeat con enteros no nativos #61527 (Antonio Andelic).
  • Se corrigió el argumento -s del cliente #61530 (Mikhail f. Shiryaev).
  • Se corrige un cierre inesperado en arrayPartialReverseSort #61539 (Raúl Marín).
  • Se corrige la búsqueda de cadenas con posición constante #61547 (Antonio Andelic).
  • Se corrigió un error de addDays al usarlo con DateTime64 #61561 (Shuai li).
  • No se permite el tipo de entrada LowCardinality en JSONExtract #61617 (Julia Kartseva).
  • Se corrigió system.part_log para async insert con deduplicación #61620 (Antonio Andelic).
  • Se ha corregido una excepción Non-ready set en system.parts. #61666 (Nikolai Kochetov).
  • Corregir actual_part_name en REPLACE_RANGE (Entry actual part isn't empty yet) #61675 (Alexander Tokmakov).
  • Se corrige un informe del sanitizador en multiSearchAllPositionsCaseInsensitiveUTF8 por UTF-8 incorrecto #61749 (pufit).
  • Se corrige un problema por el que el frame RANGE no era compatible con las columnas Nullable. #61766 (YuanLiu).

Lanzamiento de ClickHouse 24.2, 2024-02-29. Presentación, Video

Cambio incompatible con versiones anteriores

  • Validar tipos sospechosos/experimentales en tipos anidados. Antes no validábamos esos tipos (excepto JSON) en tipos anidados como Array/Tuple/Map. #59385 (Kruglov Pavel).
  • Añadir una comprobación básica del número de hilos y de los tamaños de bloque. #60138 (Raúl Marín).
  • No inferir de forma predeterminada números de coma flotante en notación exponencial. Añadir la configuración input_format_try_infer_exponent_floats, que restablece el comportamiento anterior (desactivada de forma predeterminada). Cierra #59476. #59500 (Kruglov Pavel).
  • Permitir que las operaciones ALTER estén entre paréntesis. La inclusión de paréntesis puede controlarse con la configuración format_alter_operations_with_parentheses. De forma predeterminada, en las consultas con formato se incluyen los paréntesis, ya que almacenamos las operaciones ALTER formateadas en algunos lugares como metadatos (p. ej.: mutations). La nueva sintaxis aclara algunas consultas en las que las operaciones ALTER terminan en una lista. P. ej.: ALTER TABLE x MODIFY TTL date GROUP BY a, b, DROP COLUMN c no puede analizarse correctamente con la sintaxis anterior. En la nueva sintaxis, la consulta ALTER TABLE x (MODIFY TTL date GROUP BY a, b), (DROP COLUMN c) queda clara. Las versiones anteriores no pueden leer la nueva sintaxis; por lo tanto, usarla podría causar problemas si se mezclan versiones nuevas y antiguas de ClickHouse en un mismo clúster. #59532 (János Benjamin Antal).
  • Corrección de un problema de seguridad en la vista materializada que permitía a un usuario insertar en una tabla sin los grants necesarios. La corrección valida que el usuario tenga permiso para insertar no solo en una vista materializada, sino también en todas las tablas subyacentes. Esto significa que algunas consultas que antes funcionaban ahora pueden fallar con Not enough privileges. Para solucionar este problema, la release introduce una nueva funcionalidad de SQL security para vistas https://clickhouse.com/docs/sql-reference/statements/create/view#sql&#95;security. #54901 #60439 (pufit).

Nueva funcionalidad

  • Se añadió una nueva sintaxis que permite especificar el usuario definidor en una vista/vista materializada. Esto permite ejecutar consultas/inserciones desde vistas sin permisos explícitos sobre las tablas subyacentes. Así, una vista encapsulará los permisos. #54901 #60439 (pufit).
  • Intentar detectar automáticamente el formato de archivo durante la inferencia de esquema si se desconoce en los motores file/s3/hdfs/url/azureBlobStorage. Cierra #50576. #59092 (Kruglov Pavel).
  • Se implementa el ajuste automático de los tiempos de espera de la inserción asíncrona. Se introducen los siguientes ajustes: async_insert_poll_timeout_ms, async_insert_use_adaptive_busy_timeout, async_insert_busy_timeout_min_ms, async_insert_busy_timeout_max_ms, async_insert_busy_timeout_increase_rate, async_insert_busy_timeout_decrease_rate. #58486 (Julia Kartseva).
  • Permite configurar una cuota para el número máximo de fallos consecutivos de inicio de sesión. #54737 (Alexey Gerasimchuck).
  • Una nueva función de agregación groupArrayIntersect. Continúa: #49862. #59598 (Yarik Briukhovetskyi).
  • Compatibilidad con copias de seguridad y restauración para AzureBlobStorage. Resuelve #50747. #56988 (SmitaRKulkarni).
  • Ahora, el usuario puede especificar la cadena de plantilla directamente en la consulta mediante format_schema_rows_template como alternativa a format_template_row. Cierra #31363. #59088 (Shaun Struwig).
  • Se implementó la conversión automática de tablas MergeTree de distintos tipos al motor Replicated. Cree un archivo vacío convert_to_replicated en el directorio de datos de la tabla (/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/) y esa tabla se convertirá automáticamente la próxima vez que se inicie el servidor. #57798 (Kirill).
  • Se añadió la consulta ALTER TABLE table FORGET PARTITION partition, que elimina los nodos de ZooKeeper relacionados con una partición vacía. #59507 (Sergei Trifonov). Se trata de una funcionalidad para expertos.
  • Admite archivo de credenciales JWT para el motor de tabla NATS. #59543 (Nickolaj Jepsen).
  • Se implementó la tabla system.dns_cache, que puede ser útil para depurar problemas de DNS. #59856 (Kirill Nikiforov).
  • El códec LZ4HC aceptará un nuevo nivel 2, que es más rápido que el nivel mínimo anterior, 3, a costa de una menor compresión. En versiones anteriores, LZ4HC(2) y niveles inferiores eran lo mismo que LZ4HC(3). Autor: Cyan4973. #60090 (Alexey Milovidov).
  • Se implementó la tabla system.dns_cache, que puede ser útil para depurar problemas de DNS. Nueva configuración del servidor: dns_cache_max_size. #60257 (Kirill Nikiforov).
  • Se admite la versión de un solo argumento de la función de tabla merge, como merge(['db_name', ] 'tables_regexp'). #60372 (豪肥肥).
  • Se admiten argumentos posicionales negativos. Cierra #57736. #58292 (flynn).
  • Se admite especificar, en la configuración, un conjunto de usuarios permitidos para ajustes específicos de S3 mediante la clave user. #60144 (Antonio Andelic).
  • Se añadió la table function mergeTreeIndex. Representa el contenido de los archivos de índice y de marcas de las tablas MergeTree. Puede utilizarse para introspección. Sintaxis: mergeTreeIndex(database, table, [with_marks = true]), donde database.table es una tabla existente con engine MergeTree. #58140 (Anton Popov).

Funcionalidad experimental

  • Se añadió la función seriesOutliersDetectTukey para detectar valores atípicos en series de datos mediante el algoritmo de cercas de Tukey. #58632 (Bhavna Jindal). Tenga en cuenta que este comportamiento cambiará en la próxima versión de mantenimiento.
  • Se añadió la función variantType, que devuelve un Enum con el nombre del tipo Variant para cada fila. #59398 (Kruglov Pavel).
  • Se añadió compatibilidad con LEFT JOIN, ALL INNER JOIN y subconsultas simples para réplicas paralelas (solo con analyzer). La nueva configuración parallel_replicas_prefer_local_join elige entre la ejecución local de JOIN (de forma predeterminada) y GLOBAL JOIN. Todas las tablas deben existir en cada réplica de cluster_for_parallel_replicas. Las nuevas configuraciones min_external_table_block_size_rows y min_external_table_block_size_bytes se usan para compactar bloques pequeños que se envían a tablas temporales (solo con analyzer). #58916 (Nikolai Kochetov).
  • Se permite la creación concurrente de tablas en la base de datos Replicated durante la adición o la recuperación de una nueva réplica. #59277 (Konstantin Bogdanov).
  • Se implementó el operador de comparación para valores Variant y la inserción correcta de Field en una columna Variant. Ya no se permite crear el tipo Variant con tipos Variant similares de forma predeterminada (se puede permitir con la configuración allow_suspicious_variant_types). Cierra #59996. Cierra #59850. #60198 (Kruglov Pavel).
  • Se deshabilitó el JOIN de réplicas paralelas con CTE (sin analyzer) #59239 (Raúl Marín).

Mejora del rendimiento

  • La clave primaria usará menos memoria. #60049 (Alexey Milovidov).
  • Reduce el uso de memoria de la clave primaria y de algunas otras operaciones. #60050 (Alexey Milovidov).
  • Las claves primarias de las tablas se cargarán en memoria de forma diferida en el primer acceso. Esto se controla mediante la nueva configuración de MergeTree primary_key_lazy_load, que está activada de forma predeterminada. Esto ofrece varias ventajas: - no se cargará para las tablas que no se utilicen; - si no hay suficiente memoria, se lanzará una excepción en el primer uso en lugar de al iniciar el servidor. Esto presenta varias desventajas: - la latencia de cargar la clave primaria se asumirá en la primera consulta en lugar de antes de aceptar conexiones; esto, en teoría, puede provocar un problema de estampida. Esto cierra #11188. #60093 (Alexey Milovidov).
  • Funciones de distancia vectorizadas utilizadas en la búsqueda vectorial. #58866 (Robert Schulze).
  • Función vectorizada dotProduct, útil para la búsqueda vectorial. #60202 (Robert Schulze).
  • Se añade la capacidad de cortocircuito a la función dictGetOrDefault. Cierra #52098. #57767 (jsc0218).
  • Mejora de Keeper: mantener en caché solo una cantidad determinada de logs en memoria, controlada por latest_logs_cache_size_threshold y commit_logs_cache_size_threshold. #59460 (Antonio Andelic).
  • Mejora de Keeper: reducir todavía más el tamaño del nodo de datos. #59592 (Antonio Andelic).
  • Se siguen optimizando los fallos de predicción de rama de la función if cuando el tipo de resultado es Float*/Decimal*/*Int*, como continuación de https://github.com/ClickHouse/ClickHouse/pull/57885. #59148 (李扬).
  • Se optimiza la función if cuando el tipo de entrada es Map, con una mejora de velocidad de hasta ~10x. #59413 (李扬).
  • Mejora el rendimiento del tipo Int8 al implementar aliasing estricto (ya lo tenemos para UInt8 y todos los demás tipos enteros). #59485 (Raúl Marín).
  • Optimiza el rendimiento de sum/avg condicionales para los tipos bigint y decimales grandes al reducir los fallos de predicción de rama. #59504 (李扬).
  • Mejora el rendimiento de las consultas SELECT con mutaciones activas. #59531 (Azat Khuzhin).
  • Se optimizó la función isNotNull con AVX2. #59621 (李扬).
  • Mejora del rendimiento de ASOF JOIN con datos ordenados o casi ordenados. #59731 (Maksim Kita).
  • El default value anterior de 1 MB para async_insert_max_data_size resultó ser demasiado pequeño. El nuevo será de 10 MiB. #59536 (Nikita Mikhaylov).
  • Usa varios hilos al leer los metadatos de las tablas desde una copia de seguridad durante la ejecución del comando RESTORE. #60040 (Vitaly Baranov).
  • Ahora, si StorageBuffer tiene más de 1 segmento (num_layers > 1), el vaciado en segundo plano se realizará simultáneamente para todos los segmentos en varios hilos. #60111 (alesapin).

Mejora

  • Cuando el formato de salida es Pretty y un bloque consta de un único valor numérico superior a un millón, se mostrará un número legible a la derecha de la tabla. #60379 (rogeryk).
  • Se añadieron los ajustes split_parts_ranges_into_intersecting_and_non_intersecting_final y split_intersecting_parts_ranges_into_layers_final. Estos ajustes son necesarios para desactivar optimizaciones en consultas con FINAL y solo hacen falta para depuración. #59705 (Maksim Kita). En realidad, no solo sirven para eso: también pueden reducir el uso de memoria a costa del rendimiento.
  • Cambie la configuración extract_kvp_max_pairs_per_row por extract_key_value_pairs_max_pairs_per_row. El problema (una abreviatura innecesaria en el nombre de la configuración) se introdujo en https://github.com/ClickHouse/ClickHouse/pull/43606. Corrija la documentación de esta configuración. #59683 (Alexey Milovidov). #59960 (jsc0218).
  • La ejecución de ALTER COLUMN MATERIALIZE en una columna con una expresión DEFAULT o MATERIALIZED ahora respeta con precisión la semántica. #58023 (Duc Canh Le).
  • Se habilitó un mecanismo de backoff exponencial para los errores en las mutaciones. Reducirá el uso de CPU, el uso de memoria y el tamaño de los archivos de registro. #58036 (MikhailBurdukov).
  • Se añadió una mejora para contabilizar el evento de perfil InitialQuery. #58195 (Unalian).
  • Se permite definir volume_priority en storage_configuration. #58533 (Andrey Zvonov).
  • Se agregó compatibilidad con el tipo Date32 en el códec T64. #58738 (Hongbin Ma).
  • Permitir comas al final en tipos con varios elementos. #59119 (Aleksandr Musorin).
  • La configuración del engine de tabla Distributed ahora puede especificarse en el archivo de configuración del servidor (de forma similar a la de MergeTree), p. ej. <distributed> <flush_on_detach>false</flush_on_detach> </distributed>. #59291 (Azat Khuzhin).
  • Reintento de desconexiones y sesiones expiradas al leer system.zookeeper. Esto resulta útil al leer muchas filas de la tabla system.zookeeper, especialmente cuando hay desconexiones inducidas por inyección de fallos. #59388 (Alexander Gololobov).
  • No interprete como octales los números con ceros a la izquierda cuando input_format_values_interpret_expressions=0. #59403 (Joanna Hulboj).
  • Al iniciarse y cada vez que se modifican los archivos de configuración, ClickHouse actualiza los límites estrictos de memoria de su rastreador total de memoria. Estos límites se determinan en función de varios ajustes del servidor y de los límites de cgroups (en Linux). Anteriormente, la ruta /sys/fs/cgroup/memory.max (para cgroups v2) estaba codificada de forma fija. Como resultado, se ignoraban los límites de memoria de cgroup v2 configurados para grupos anidados (jerarquías), por ejemplo, /sys/fs/cgroup/my/nested/group/memory.max. Esto ya se ha corregido. El comportamiento de los límites de memoria de v1 permanece sin cambios. #59435 (Robert Schulze).
  • Se agregaron nuevos eventos de perfil para observar el tiempo empleado en calcular PK/proyecciones/índices secundarios durante los INSERT. #59436 (Nikita Taranov).
  • Permite definir, durante la creación, un punto de inicio para S3Queue en modo Ordered mediante la configuración s3queue_last_processed_path. #59446 (Kseniia Sumarokova).
  • Los comentarios de las tablas del sistema ahora también están disponibles en system.tables en clickhouse-local. #59493 (Nikita Mikhaylov).
  • Tabla system.zookeeper: anteriormente, todo el resultado se acumulaba en memoria y se devolvía como un único fragmento grande. Este cambio debería ayudar a reducir el consumo de memoria al leer muchas filas de system.zookeeper, permitir mostrar el progreso intermedio (cuántas filas se han leído hasta ese momento) y evitar que se agote el tiempo de espera de la conexión cuando el conjunto de resultados es grande. #59545 (Alexander Gololobov).
  • Ahora el dashboard admite tanto el estado comprimido como el sin comprimir del #hash de la URL (compatibilidad con versiones anteriores). Continuación de #59124 . #59548 (Amos Bird).
  • Se actualizó Intel QPL (usado por el códec DEFLATE_QPL) de v1.3.1 a v1.4.0 . También se corrigió un error en el mecanismo de timeout del sondeo, ya que observamos que en algunos casos el timeout no funcionaba correctamente; si se producía un timeout, IAA y la CPU podían procesar el búfer de forma concurrente. Por ahora, es mejor asegurarse de que el estado del códec IAA no sea QPL_STS_BEING_PROCESSED y, en ese caso, usar el códec por software como alternativa. #59551 (jasperzhu).
  • No mostrar una advertencia sobre la versión del servidor en ClickHouse Cloud, ya que ClickHouse Cloud gestiona automáticamente las actualizaciones sin interrupciones. #59657 (Alexey Milovidov).
  • Tras la autoextracción, el binario temporal se mueve en lugar de copiarse. #59661 (Yakov Olkhovskiy).
  • Se corrige el desenrollado de la pila en Apple macOS. Esto cierra #53653. #59690 (Nikita Mikhaylov).
  • Comprobación del desbordamiento de pila en los analizadores sintácticos incluso si el usuario configuró incorrectamente el ajuste max_parser_depth con un valor excesivamente alto. Esto cierra #59622. #59697 (Alexey Milovidov). #60434
  • Unificar el comportamiento de las named collection creadas con XML y SQL en el almacenamiento de Kafka. #59710 (Pervakov Grigorii).
  • En caso de que merge_max_block_size_bytes sea lo bastante pequeño y las tablas contengan filas anchas (cadenas o tuplas), las fusiones en segundo plano pueden quedar atrapadas en un bucle infinito. Se ha corregido este comportamiento. Continuación de https://github.com/ClickHouse/ClickHouse/pull/59340. #59812 (Nikita Mikhaylov).
  • Permitir uuid en replica_path si CREATE TABLE lo especifica explícitamente. #59908 (Azat Khuzhin).
  • Se añadió la columna metadata_version a la tabla del sistema system.tables para las tablas ReplicatedMergeTree. #59942 (Maksim Kita).
  • Mejora de Keeper: enviar solo métricas/eventos de Keeper para Prometheus. #59945 (Antonio Andelic).
  • El dashboard mostrará métricas de distintas versiones de ClickHouse incluso si la estructura de las tablas del sistema ha cambiado tras la actualización. #59967 (Alexey Milovidov).
  • Permite cargar información de AZ desde un archivo. #59976 (Konstantin Bogdanov).
  • Mejora de Keeper: añadir reintentos en caso de fallo en operaciones relacionadas con discos. #59980 (Antonio Andelic).
  • Añade la nueva opción de configuración backups.remove_backup_files_after_failure: <clickhouse> <backups> <remove_backup_files_after_failure>true</remove_backup_files_after_failure> </backups> </clickhouse>. #60002 (Vitaly Baranov).
  • Se añadió una alternativa de respaldo para la copia de archivos de S3 a una copia en búfer en caso de que GCP devolviera Internal Error con el código de error HTTP GATEWAY_TIMEOUT. #60164 (Maksim Kita).
  • Ejecución con cortocircuito para ULIDStringToDateTime. #60211 (Juan Madurga).
  • Se añadió la columna query_id para las tablas system.backups y system.backup_log. Se añadió el stacktrace del error a la columna error. #60220 (Maksim Kita).
  • Las conexiones a través del puerto MySQL ahora se ejecutan automáticamente con la configuración prefer_column_name_to_alias = 1 para ofrecer compatibilidad inmediata con QuickSight. Además, las configuraciones mysql_map_string_to_text_in_show_columns y mysql_map_fixed_string_to_text_in_show_columns ahora están habilitadas de forma predeterminada, lo que también solo afecta a las conexiones MySQL. Esto aumenta la compatibilidad con más herramientas de BI. #60365 (Robert Schulze).
  • Se corrige una condición de carrera en el código JavaScript que hacía que se mostraran gráficos duplicados superpuestos. #60392 (Alexey Milovidov).

Mejora de compilación/pruebas/empaquetado

  • Se añadieron compilaciones y pruebas con recopilación de cobertura e introspección. Continuación de #56102. #58792 (Alexey Milovidov).
  • Se actualizó la cadena de herramientas de Rust en corrosion-cmake cuando está definida la variable de cadena de herramientas de compilación cruzada de CMake. #59309 (Aris Tritas).
  • Se añadió algo de fuzzing a ASTLiterals. #59383 (Raúl Marín).
  • Si quieres ejecutar los scripts de initdb cada vez que se inicia el contenedor de ClickHouse, debes establecer la variable de entorno CLICKHOUSE_ALWAYS_RUN_INITDB_SCRIPTS. #59808 (Alexander Nikolaev).
  • Se eliminó la posibilidad de deshabilitar componentes genéricos de ClickHouse (como server/client/…), pero se conservaron algunos que requieren bibliotecas adicionales (como ODBC o Keeper). #59857 (Azat Khuzhin).
  • El fuzzer de consultas ahora hace fuzzing de SETTINGS dentro de las consultas. #60087 (Alexey Milovidov).
  • Se añadió compatibilidad para compilar ClickHouse con clang-19 (master). #60448 (Alexey Milovidov).

Corrección de errores (comportamiento anómalo perceptible para el usuario en una versión estable oficial)

  • Corrige un error de “Non-ready set” en TTL WHERE. #57430 (Nikolai Kochetov).
  • Corrige un fallo en la función quantilesGK #58216 (李扬).
  • Corrige un comportamiento erróneo de intDiv con argumentos Decimal #59243 (Yarik Briukhovetskyi).
  • Se corrige translate con entrada FixedString #59356 (Raúl Marín).
  • Se corrige el cálculo del digest en Keeper #59439 (Antonio Andelic).
  • Se corrigen stacktraces para binarios sin símbolos de depuración #59444 (Azat Khuzhin).
  • Corregido ASTAlterCommand::formatImpl en el caso de ajustes específicos de columna… #59445 (János Benjamin Antal).
  • Se corrigió SELECT * FROM [...] ORDER BY ALL con el Analyzer #59462 (zhongyuankai).
  • Se corrigió una posible excepción no controlada durante la cancelación de una consulta distribuida #59487 (Azat Khuzhin).
  • Hacer que MAX aplique las mismas reglas que permutation para los tipos complejos #59498 (Raúl Marín).
  • Se corrige un caso límite al usar update_insert_deduplication_token_in_dependent_materialized_views #59544 (Jordi Villar).
  • Corrige el resultado incorrecto de arrayElement / map con un valor vacío #59594 (Raúl Marín).
  • Se corrige un bloqueo en topK al fusionar estados vacíos #59603 (Raúl Marín).
  • Se corrige el problema de la tabla distribuida con una clave de segmentación constante #59606 (Vitaly Baranov).
  • Se corrige un problema de KQL detectado por WingFuzz #59626 (Yong Wang).
  • Corregido el error “Read beyond last offset” en AsynchronousBoundedReadBuffer #59630 (Vitaly Baranov).
  • Se mantiene el alias de función en RewriteSumFunctionWithSumAndCountVisitor #59658 (Raúl Marín).
  • Corregir la hora de inicio de la consulta en las consultas no iniciales #59662 (Raúl Marín).
  • Validar los tipos de argumentos del índice de omisión minmax #59733 (Anton Popov).
  • Corrige la función leftPad / rightPad para entradas FixedString #59739 (Raúl Marín).
  • Soluciona un problema del AST fuzzer en la función countMatches #59752 (Robert Schulze).
  • RabbitMQ: corrección de mensajes que no estaban ni confirmados (acked) ni rechazados (nacked) #59775 (Kseniia Sumarokova).
  • Se corrigió StorageURL, que ejecutaba parte de la consulta en un solo hilo #59833 (Michael Kolupaev).
  • S3Queue: corrige un valor no inicializado #59897 (Kseniia Sumarokova).
  • Corregido el análisis sintáctico de expresiones de partición rodeadas de paréntesis #59901 (János Benjamin Antal).
  • Se corrige un fallo en el formato JSONColumnsWithMetadata a través de HTTP #59925 (Kruglov Pavel).
  • No reescriba sum como count si el valor devuelto difiere en Analyzer #59926 (Azat Khuzhin).
  • Corrección de un fallo al leer UniqExactSet #59928 (Maksim Kita).
  • Corrección de metadata_version no válida en ReplicatedMergeTree #59946 (Maksim Kita).
  • Corrige una condición de carrera en StorageDistributed #59987 (Nikita Taranov).
  • Docker: ejecutar scripts de inicialización cuando la opción está habilitada, en lugar de cuando está deshabilitada #59991 (jktng).
  • Corrige INSERT en SQLite con comillas simples (escapando las comillas simples con otra comilla en lugar de una barra invertida) #60015 (Azat Khuzhin).
  • Corrige varios errores lógicos en arrayFold #60022 (Raúl Marín).
  • Se corrigió optimize_uniq_to_count, que eliminaba el alias de la columna #60026 (Raúl Marín).
  • Se corrige una posible excepción en la tabla S3Queue al eliminarla #60036 (Kseniia Sumarokova).
  • Corregir el formato de NOT con un solo literal #60042 (Raúl Marín).
  • Usar max_query_size del contexto en DDLLogEntry en lugar del valor fijo 4096 #60083 (Kruglov Pavel).
  • Se corrigió el formato inconsistente de las consultas que contienen tablas llamadas table. Se corrigió el formato incorrecto de las consultas con UNION ALL, INTERSECT y EXCEPT cuando su estructura no era lineal. Esto cierra #52349. Se corrigió el formato incorrecto de las consultas SYSTEM, incluidas SYSTEM ... DROP FILESYSTEM CACHE, SYSTEM ... REFRESH/START/STOP/CANCEL/TEST VIEW y SYSTEM ENABLE/DISABLE FAILPOINT. Se corrigió el formato de las consultas DDL parametrizadas. Se corrigió el formato de la consulta DESCRIBE FILESYSTEM CACHE. Se corrigió el formato incorrecto de SET param_... (una consulta que establece un parámetro). Se corrigió el formato incorrecto de las consultas CREATE INDEX. Se corrigió el formato inconsistente de CREATE USER y consultas similares. Se corrigió el formato inconsistente de CREATE SETTINGS PROFILE. Se corrigió el formato incorrecto de ALTER ... MODIFY REFRESH. Se corrigió el formato inconsistente de las funciones de ventana si los desplazamientos del marco eran expresiones. Se corrigió el formato inconsistente de RESPECT NULLS e IGNORE NULLS si se usaban después de una función que implementa un operador (como plus). Se corrigió el absurdo formato de SYSTEM SYNC REPLICA ... LIGHTWEIGHT FROM .... Se corrigió el formato inconsistente de las consultas no válidas con GROUP BY GROUPING SETS ... WITH ROLLUP/CUBE/TOTALS. Se corrigió el formato inconsistente de GRANT CURRENT GRANTS. Se corrigió el formato inconsistente de CREATE TABLE (... COLLATE). Además, corregí el formato incorrecto de EXPLAIN en subconsultas (#60102). Se corrigió el formato incorrecto de las funciones lambda (#60012). Se añadió una comprobación para que no haya forma de que estas abominaciones vuelvan a pasar desapercibidas. #60095 (Alexey Milovidov).
  • Corrige el formato inconsistente de explain en subconsultas #60102 (Alexey Milovidov).
  • Soluciona el fallo de cosineDistance con Nullable #60150 (Raúl Marín).
  • Permitir convertir bools representados como cadenas en bools reales #60160 (Robert Schulze).
  • Se corrige system.s3queue_log #60166 (Kseniia Sumarokova).
  • Se corrige arrayReduce con nombre de función de agregación Nullable #60188 (Raúl Marín).
  • Ocultar información sensible en S3Queue #60233 (Kseniia Sumarokova).
  • Corrige los códigos de excepción HTTP. #60252 (Austin Kothig).
  • S3Queue: corrige un fallo (también corrige la prueba inestable test_storage_s3_queue/test.py::test_shards_distributed) #60282 (Kseniia Sumarokova).
  • Corrige el uso de un valor sin inicializar y un resultado no válido en las funciones hash con IPv6 #60359 (Kruglov Pavel).
  • Se corrige OptimizeDateOrDateTimeConverterWithPreimageVisitor con argumentos nulos #60453 (Raúl Marín).
  • Se corrigió un error menor que impedía ejecutar en réplicas las consultas sobre tablas distribuidas enviadas desde clientes con dialecto KQL o PRQL. #59674. #60470 (Alexey Milovidov) #59674 (Austin Kothig).

lanzamiento de ClickHouse 24.1, 2024-01-30. Presentation, Video

Cambio incompatible con versiones anteriores

  • El ajuste print_pretty_type_names está activado de forma predeterminada. Puede desactivarlo para conservar el comportamiento anterior o usar SET compatibility = '23.12'. #57726 (Alexey Milovidov).
  • El ajuste de MergeTree clean_deleted_rows está obsoleto y ya no tiene ningún efecto. La palabra clave CLEANUP para OPTIMIZE no está permitida de forma predeterminada (a menos que allow_experimental_replacing_merge_with_cleanup esté habilitado). #58316 (Alexander Tokmakov).
  • La función reverseDNSQuery ya no está disponible. Esto cierra #58368. #58369 (Alexey Milovidov).
  • Habilite varios cambios para mejorar el control de acceso en el archivo de configuración. Estos cambios afectan al comportamiento, y debe revisar config.xml en la sección access_control_improvements. Si no está seguro, mantenga en el archivo de configuración los mismos valores que en la versión anterior. #58584 (Alexey Milovidov).
  • Mejora el funcionamiento de sumMapFiltered con valores NaN. Los valores NaN ahora se colocan al final (en lugar de hacerlo aleatoriamente) y se consideran distintos de cualquier otro valor. Ahora -0 también se trata como igual a 0; dado que los valores 0 se descartan, los valores -0 también se descartan. #58959 (Raúl Marín).
  • La función visibleWidth se comportará de acuerdo con la documentación. En versiones anteriores, simplemente contaba puntos de código después de la serialización de la cadena, como la función lengthUTF8, pero no tenía en cuenta los caracteres de ancho cero y los caracteres combinados, los caracteres de ancho completo, las tabulaciones ni los borrados. Ahora el comportamiento se ha modificado en consecuencia. Si desea mantener el comportamiento anterior, establezca function_visible_width_behavior en 0, o establezca compatibility en 23.12 o una versión anterior. #59022 (Alexey Milovidov).
  • El dialecto Kusto está deshabilitado hasta que se corrijan estos dos errores: #59037 y #59036. #59305 (Alexey Milovidov). Cualquier intento de usar Kusto dará lugar a una excepción.
  • Una implementación más eficiente del modificador FINAL ya no garantiza que se preserve el orden, incluso si max_threads = 1. Si dependía del comportamiento anterior, establezca enable_vertical_final en 0 o compatibility en 23.12.

Nueva funcionalidad

  • Se implementó el tipo de dato Variant, que representa una unión de otros tipos de datos. El tipo Variant(T1, T2, ..., TN) significa que cada fila de este tipo tiene un valor de tipo T1, T2, …, TN o ninguno de ellos (valor NULL). El tipo Variant está disponible con la configuración allow_experimental_variant_type. Referencia: #54864. #58047 (Kruglov Pavel).
  • Ahora, ciertas configuraciones (actualmente min_compress_block_size y max_compress_block_size) pueden especificarse a nivel de columna, donde prevalecen sobre la configuración correspondiente a nivel de tabla. Ejemplo: CREATE TABLE tab (col String SETTINGS (min_compress_block_size = 81920, max_compress_block_size = 163840)) ENGINE = MergeTree ORDER BY tuple();. #55201 (Duc Canh Le).
  • Añade la función de agregación quantileDD, así como las correspondientes quantilesDD y medianDD. Se basa en DDSketch https://www.vldb.org/pvldb/vol12/p2195-masson.pdf. ### Entrada de documentación para cambios visibles para el usuario. #56342 (Srikanth Chekuri).
  • Permite configurar cualquier tipo de almacenamiento de objetos con cualquier tipo de metadato. #58357 (Kseniia Sumarokova).
  • Se añadieron los modos null_status_on_timeout_only_active y throw_only_active para distributed_ddl_output_mode, que permiten evitar la espera de réplicas inactivas. #58350 (Alexander Tokmakov).
  • Añadir la función arrayShingles para calcular subarreglos; por ejemplo, arrayShingles([1, 2, 3, 4, 5], 3) devuelve [[1,2,3],[2,3,4],[3,4,5]]. #58396 (Zheng Miao).
  • Se añadieron las funciones punycodeEncode, punycodeDecode, idnaEncode e idnaDecode, útiles para convertir nombres de dominio internacionales a una representación ASCII conforme al estándar IDNA. #58454 (Robert Schulze).
  • Se añadieron las funciones de similitud entre cadenas dramerauLevenshteinDistance, jaroSimilarity y jaroWinklerSimilarity. #58531 (Robert Schulze).
  • Se agregan dos ajustes: output_format_compression_level, para cambiar el nivel de compresión de salida, y output_format_compression_zstd_window_log, para establecer explícitamente el tamaño de la ventana de compresión y habilitar el modo de largo alcance para la compresión zstd si el método de compresión de salida es zstd. Se aplica a INTO OUTFILE y al escribir en las funciones de tabla file, url, hdfs, s3 y azureBlobStorage. #58539 (Duc Canh Le).
  • Desactiva automáticamente las secuencias de escape ANSI en los formatos Pretty si la salida no es un terminal. Añade el nuevo modo auto al ajuste output_format_pretty_color. #58614 (Shaun Struwig).
  • Se agregó la función sqidDecode, que decodifica Sqids. #58544 (Robert Schulze).
  • Permite leer valores Bool como String en formatos de entrada JSON. Esto se realiza mediante la configuración input_format_json_read_bools_as_strings, que está habilitada de forma predeterminada. #58561 (Kruglov Pavel).
  • Se añadió la función seriesDecomposeSTL, que descompone una serie temporal en un componente estacional, una tendencia y un componente residual. #57078 (Bhavna Jindal).
  • Se incorporó el cliente MySQL Binlog para MaterializedMySQL: una conexión al binlog para varias bases de datos. #57323 (Val Doroshchuk).
  • Intel QuickAssist Technology (QAT) proporciona compresión y criptografía aceleradas por hardware. ClickHouse incorporó un nuevo códec de compresión ZSTD_QAT que utiliza QAT para la compresión zstd. El códec usa QATlib de Intel’s y el plugin QAT ZSTD de Inte’s. Por ahora, solo la compresión puede acelerarse por hardware (si QAT no puede inicializarse, se recurre a una alternativa por software); la descompresión siempre se realiza por software. #57509 (jasperzhu).
  • Implementación de una nueva forma de generar las claves del almacenamiento de objetos para discos S3. Ahora, el formato puede definirse mediante la sintaxis de expresiones regulares re2 con la opción key_template en la descripción del disco. #57663 (Sema Checherinda).
  • La tabla system.dropped_tables_parts contiene partes de las tablas system.dropped_tables (tablas eliminadas, pero aún no retiradas). #58038 (Yakov Olkhovskiy).
  • Se añade la configuración max_materialized_views_size_for_table para limitar el número de vistas materializadas asociadas a una tabla. #58068 (zhongyuankai).
  • Mejoras en clickhouse-format: admite consultas INSERT con VALUES; comentarios (use --comments para mostrarlos); y la opción --max_line_length para dar formato en varias líneas solo a las consultas largas. #58246 (vdimir).
  • Se adjuntan todas las tablas del sistema en clickhouse-local, incluido system.parts. Esto cierra #58312. #58359 (Alexey Milovidov).
  • Se añade compatibilidad con los tipos de datos Enum en la función transform. Esto cierra #58241. #58360 (Alexey Milovidov).
  • Añadir la tabla system.database_engines. #58390 (Bharat Nallan). Permitir registrar motores de base de datos de forma independiente en el código fuente. #58365 (Bharat Nallan). Permitir registrar intérpretes de forma independiente. #58443 (Bharat Nallan).
  • Se añadió el modificador FROM <Replicas> para la consulta SYSTEM SYNC REPLICA LIGHTWEIGHT. El modificador FROM hace que se espere a las operaciones de fetch y a los drop-ranges solo de las réplicas de origen especificadas, así como de cualquier réplica que no esté en zookeeper o que tenga un source_replica vacío. #58393 (Jayme Bird).
  • Se añadió la configuración update_insert_deduplication_token_in_dependent_materialized_views. Esta configuración permite actualizar el token de desduplicación de inserciones con el identificador de la tabla durante la inserción en las vistas materializadas dependientes. Cierra #59165. #59238 (Maksim Kita).
  • Se añadió la sentencia SYSTEM RELOAD ASYNCHRONOUS METRICS, que actualiza las métricas asíncronas. Resulta especialmente útil para pruebas y desarrollo. #53710 (Robert Schulze).

Mejora del rendimiento

  • La coordinación de las réplicas paralelas se ha reescrito para lograr un mejor paralelismo y una mayor localidad de caché. Se ha comprobado que ofrece una escalabilidad lineal con cientos de réplicas. También incorpora compatibilidad con la lectura en orden. #57968 (Nikita Taranov).
  • Se reemplaza el almacenamiento en búfer de salida basado en HTTP por los búferes nativos de ClickHouse. Se añaden métricas de recuento de bytes para las interfaces. #56064 (Yakov Olkhovskiy).
  • Los estados de agregación de gran tamaño de uniqExact se fusionarán en paralelo en consultas distribuidas. #59009 (Nikita Taranov).
  • Menor uso de memoria tras leer desde tablas MergeTree. #59290 (Anton Popov).
  • Reducción del uso de memoria en las fusiones verticales. #59340 (Anton Popov).
  • Evita un consumo excesivo de memoria durante el inicio de Keeper en más casos. #58455 (Antonio Andelic).
  • Mejora de Keeper: reduce el uso de memoria de Keeper para los nodos almacenados. #59002 (Antonio Andelic).
  • Implementación de FINAL más optimizada para la caché. Nota sobre el cambio de comportamiento: anteriormente, las consultas con el modificador FINAL que leían con un único flujo (por ejemplo, max_threads = 1) producían una salida ordenada sin una cláusula ORDER BY especificada explícitamente. Esto ya no está garantizado cuando enable_vertical_final = true (y es el valor predeterminado). #54366 (Duc Canh Le).
  • Evita copias adicionales en ReadBufferFromIStream, que se usa, por ejemplo, para leer desde S3. #56961 (Nikita Taranov).
  • Se optimiza la función de elementos de array cuando la entrada es Array(Map)/Array(Array(Num)/Array(Array(String))/Array(BigInt)/Array(Decimal). Las implementaciones anteriores realizaban más asignaciones de memoria de las necesarias. La mejora de rendimiento de esta optimización es de hasta ~6x, especialmente cuando el tipo de entrada es Array(Map). #56403 (李扬).
  • Leer la columna una sola vez al leer más de una subcolumna de ella en partes compactas. #57631 (Kruglov Pavel).
  • Se reescribe el AST de la función sum(column + constant). Esto está disponible como un paso de optimización para el Analizador #57853 (Jiebin Sun).
  • La evaluación de la función match ahora aprovecha los índices de omisión ngrambf_v1 y tokenbf_v1. #57882 (凌涛).
  • La evaluación de la función match ahora aprovecha índices invertidos. #58284 (凌涛).
  • MergeTree FINAL no compara filas de la misma parte que no es L0. #58142 (Duc Canh Le).
  • Acelerar las llamadas a iota (rellenando el array con números consecutivos). #58271 (Raúl Marín).
  • Mejora de velocidad de MIN/MAX para tipos no numéricos. #58334 (Raúl Marín).
  • Optimiza la combinación de filtros (como en PREWHERE de varias etapas) con intrínsecos de BMI2/SSE #58800 (Zhiguo Zhou).
  • Usar un hilo menos en clickhouse-local. #58968 (Alexey Milovidov).
  • Mejora del rendimiento de la función multiIf cuando el tipo es Nullable. #57745 (KevinyhZou).
  • Se añade SYSTEM JEMALLOC PURGE para purgar las páginas de jemalloc no utilizadas, SYSTEM JEMALLOC [ ENABLE | DISABLE | FLUSH ] PROFILE para controlar el perfil de jemalloc si el profiler está habilitado. Se añade el comando 4LW relacionado con jemalloc en Keeper: jmst para volcar estadísticas de jemalloc, jmfp, jmep, jmdp para controlar el perfil de jemalloc si el profiler está habilitado. #58665 (Antonio Andelic).
  • Reducción del consumo de memoria en las copias de seguridad en S3. #58962 (Vitaly Baranov).

Mejora

  • Se añadieron comentarios (descripciones breves) a todas las columnas de las tablas del sistema. Hay varias razones para ello: - Usamos mucho las tablas del sistema, y a veces puede resultar muy difícil para un desarrollador comprender el propósito y el significado de una columna en particular. - Modificamos con frecuencia las tablas del sistema (añadimos nuevas o modificamos las existentes) y su documentación siempre está desactualizada. Por ejemplo, eche un vistazo a la página de documentación de system.parts. Le faltan muchas columnas - Nos gustaría, con el tiempo, generar la documentación directamente desde ClickHouse. #58356 (Nikita Mikhaylov).
  • Permitir consultas sin alias en subconsultas para PASTE JOIN. #58654 (Yarik Briukhovetskyi).
  • Se habilita la integración de MySQL/MariaDB en MacOS. Esto cierra #21191. #46316 (Alexey Milovidov) (Robert Schulze).
  • Se deshabilita max_rows_in_set_to_optimize_join de forma predeterminada. #56396 (vdimir).
  • Se añadió el parámetro de configuración <host_name>, que permite evitar la resolución de nombres de host en consultas DDL ON CLUSTER y en motores de base de datos Replicated. Esto reduce la posibilidad de que la cola se quede bloqueada si cambia la definición del cluster. Cierra #57573. #57603 (Nikolay Degterinsky).
  • Aumente load_metadata_threads a 16 para la caché del sistema de archivos. Esto permitirá que el servidor se inicie más rápido. #57732 (Alexey Milovidov).
  • Se añadió la posibilidad de limitar la velocidad de las merges/mutations (max_mutations_bandwidth_for_server/max_merges_bandwidth_for_server). #57877 (Azat Khuzhin).
  • Se reemplazó la columna no documentada (booleana) is_hot_reloadable de la tabla del sistema system.server_settings por la columna (Enum8) changeable_without_restart, con los posibles valores No, Yes, IncreaseOnly y DecreaseOnly. También se documentó esta columna. #58029 (skyoct).
  • La detección de clústeres permite configurar nombre de usuario y contraseña, cierra #58063. #58123 (vdimir).
  • Se admiten parámetros de consulta en ALTER TABLE ... PART. #58297 (Azat Khuzhin).
  • Crear consumidores para tablas de Kafka sobre la marcha (pero conservarlos durante cierto tiempo —kafka_consumers_pool_ttl_ms desde la última vez que se usaron—); esto debería corregir el problema con las estadísticas de system.kafka_consumers (que no consume cuando nadie lee de la tabla de Kafka, lo que provoca una fuga de memoria activa y una desvinculación lenta de la tabla) y, además, este PR vuelve a habilitar por defecto las estadísticas de system.kafka_consumers. #58310 (Azat Khuzhin).
  • sparkBar como alias de sparkbar. #58335 (凌涛).
  • Evitar enviar solicitudes ComposeObject tras la carga a GCS. #58343 (Azat Khuzhin).
  • Gestionar correctamente las claves con un punto en el nombre en los archivos XML de configuración. #58354 (Azat Khuzhin).
  • Hacer que la función format devuelva un valor constante cuando recibe argumentos constantes. Esto cierra #58355. #58358 (Alexey Milovidov).
  • Se agrega el ajuste max_estimated_execution_time para diferenciar max_execution_time de max_estimated_execution_time. #58402 (Zhang Yifan).
  • Mostrar una sugerencia cuando se use un nombre de motor de base de datos no válido. #58444 (Bharat Nallan).
  • Se añaden configuraciones para un mejor control del tipo de los índices en el diccionario de Arrow. De forma predeterminada, se usa el tipo de entero con signo para los índices, tal como recomienda Arrow. Cierra #57401. #58519 (Kruglov Pavel).
  • Se implementa la compatibilidad con la variable de entorno CLICKHOUSE_PASSWORD_FILE al ejecutar la imagen de Docker. #58575 #58583 (Eyal Halpern Shalev).
  • Al ejecutar algunas consultas que requieren muchos streams para leer datos, antes se producía el error "Paste JOIN requires sorted tables only". Ahora, en ese caso, el número de streams se reduce a 1. #58608 (Yarik Briukhovetskyi).
  • Mensaje mejorado para el error INVALID_IDENTIFIER. #58703 (Yakov Olkhovskiy).
  • Se ha mejorado el manejo de literales numéricos con signo en normalizeQuery. #58710 (Salvatore Mesoraca).
  • Se admite el tipo de datos Point para MySQL. #58721 (Kseniia Sumarokova).
  • Al comparar una columna Float32 y una cadena constante, lea la cadena como Float32 (en lugar de Float64). #58724 (Raúl Marín).
  • Mejora la compatibilidad con S3 y añade compatibilidad con el almacenamiento ECloud EOS. #58786 (xleoken).
  • Permite que KILL QUERY cancele copias de seguridad/restauraciones. Este PR también hace visibles en system.processes las copias de seguridad y restauraciones en ejecución. Además, ahora hay una nueva opción en la configuración del servidor: shutdown_wait_backups_and_restores (default=true), que hace que el servidor, al apagarse, espere a que terminen todas las copias de seguridad y restauraciones en ejecución o simplemente las cancele. #58804 (Vitaly Baranov).
  • Compatibilidad del formato Avro con el códec ZSTD. Cierra #58735. #58805 (flynn).
  • La interfaz MySQL ahora admite las opciones de configuración net_write_timeout y net_read_timeout. net_write_timeout se traduce a la configuración nativa send_timeout de ClickHouse y, de forma similar, net_read_timeout a receive_timeout. Se corrigió un problema por el que solo era posible establecer la opción de configuración MySQL sql_select_limit si toda la sentencia estaba en mayúsculas. #58835 (Serge Klochkov).
  • Un mensaje de excepción mejorado cuando hay un conflicto al crear un diccionario y una tabla con el mismo nombre. #58841 (Yarik Briukhovetskyi).
  • Asegúrese de que, para los discos personalizados (creados desde SQL), se especifique en la configuración del servidor filesystem_caches_path (un prefijo de directorio común para todas las cachés del sistema de archivos) o custom_cached_disks_base_directory (un prefijo de directorio común solo para las cachés del sistema de archivos creadas a partir de discos personalizados). custom_cached_disks_base_directory tiene mayor prioridad para los discos personalizados que filesystem_caches_path, que se usa si el primero no está definido. La opción path de la caché del sistema de archivos debe estar dentro de ese directorio; de lo contrario, se generará una excepción que impedirá crear el disco. Esto no afectará a los discos creados en una versión anterior si el servidor se actualizó; en ese caso, no se generará la excepción para permitir que el servidor se inicie correctamente). custom_cached_disks_base_directory se añade a la configuración predeterminada del servidor como /var/lib/clickhouse/caches/. Cierra #57825. #58869 (Kseniia Sumarokova).
  • La interfaz MySQL ahora es compatible con las consultas SHOW WARNINGS/SHOW COUNT(*) WARNINGS, aunque el resultado devuelto siempre es un conjunto vacío. #58929 (Serge Klochkov).
  • Omitir las réplicas no disponibles al ejecutar consultas INSERT SELECT distribuidas en paralelo. #58931 (Alexander Tokmakov).
  • Mostrar el nivel de log con descriptores textuales al habilitar el formato estructurado del log en JSON. #58936 (Tim Liou).
  • La interfaz MySQL ahora admite las sentencias CAST(x AS SIGNED) y CAST(x AS UNSIGNED) mediante alias de tipos de datos: SIGNED para Int64 y UNSIGNED para UInt64. Esto mejora la compatibilidad con herramientas de BI como Looker Studio. #58954 (Serge Klochkov).
  • Se cambió el directorio de trabajo a la ruta de datos en el contenedor de Docker. #58975 (cangyin).
  • Se agregó una configuración para Azure Blob Storage, azure_max_unexpected_write_error_retries, que también puede establecerse desde la configuración, en la sección de Azure. #59001 (SmitaRKulkarni).
  • Permite iniciar el servidor con una tabla de lago de datos dañada. Cierra #58625. #59080 (Kseniia Sumarokova).
  • Permite ignorar la evolución del schema en el table engine Iceberg y leer todos los datos usando el schema especificado por el usuario al crear la tabla o el schema más reciente analizado a partir de los metadatos al crear la tabla. Esto se hace mediante la configuración iceberg_engine_ignore_schema_evolution, que está deshabilitada de forma predeterminada. Tenga en cuenta que habilitar esta configuración puede dar lugar a resultados incorrectos, ya que, en caso de que el schema haya evolucionado, todos los data files se leerán usando el mismo schema. #59133 (Kruglov Pavel).
  • Prohíbe las operaciones mutables (INSERT/ALTER/OPTIMIZE/…) en almacenamientos de solo lectura o de escritura única con un error TABLE_IS_READ_ONLY adecuado (para evitar residuos). Evita dejar residuos en discos de escritura única (format_version.txt) durante CREATE/ATTACH. Ignora DROP para ReplicatedMergeTree (al igual que para MergeTree). Corrige la iteración sobre s3_plain (MetadataStorageFromPlainObjectStorage::iterateDirectory). Ten en cuenta que el disco de solo lectura es web y el de escritura única es s3_plain. #59170 (Azat Khuzhin).
  • Corrige un error en la columna experimental _block_number que podía provocar un error lógico en una combinación compleja de ALTERs y merges. Corrige #56202. Sustituye #58601. #59295 (alesapin).
  • La UI de Play reconoce cuando se devuelve una excepción dentro de JSON. Ajuste para #52853. #59303 (Alexey Milovidov).
  • El manejador HTTP /binary permite especificar el usuario, el host y, opcionalmente, la contraseña en la cadena de consulta. #59311 (Alexey Milovidov).
  • Se añade compatibilidad con copias de seguridad para tablas comprimidas en memoria. Esto cierra #57893. #59315 (Alexey Milovidov).
  • Se añadió compatibilidad con la cláusula FORMAT en las consultas BACKUP y RESTORE. #59338 (Vitaly Baranov).
  • La función concatWithSeparator ahora admite tipos de argumento arbitrarios (en lugar de solo argumentos String y FixedString). Por ejemplo, SELECT concatWithSeparator('.', 'number', 1) ahora devuelve number.1. #59341 (Robert Schulze).

Mejora de compilación/pruebas/empaquetado

  • Mejorar los alias del binario de ClickHouse (ahora ch/clickhouse es clickhouse-local o clickhouse, según los argumentos) y añadir autocompletado de bash para los nuevos alias. #58344 (Azat Khuzhin).
  • Añadir una comprobación de cambios de configuraciones en CI para verificar que todos los cambios de configuraciones queden reflejados en el historial de cambios de configuraciones. #58555 (Kruglov Pavel).
  • Usar tablas adjuntas directamente desde S3 en pruebas con estado. #58791 (Alexey Milovidov).
  • Guardar el fuzzer.log completo como un archivo en lugar de solo las últimas 100k líneas. tail -n 100000 a menudo elimina líneas con definiciones de tablas. Ejemplo:. #58821 (Dmitry Novik).
  • Habilitar Rust en macOS con Aarch64 (esto añadirá búsqueda difusa en el cliente con skim y el lenguaje PRQL, aunque no creo que haya gente que ejecute ClickHouse sobre Darwin, así que diría que es principalmente por la búsqueda difusa en el cliente). #59272 (Azat Khuzhin).
  • Corregir un problema de agregación en clústeres mixtos x86_64 y ARM #59132 (Harry Lee).

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

  • Se añadió la conversión de las claves de join para LowCardinality anidado #51550 (vdimir).
  • Aplanar solo el verdadero tipo Nested si flatten_nested=1, no todos los Array(Tuple) #56132 (Kruglov Pavel).
  • Se corrige un error con las proyecciones y el ajuste aggregate_functions_null_for_empty durante la inserción. #56944 (Amos Bird).
  • Se corrigió una posible excepción debida a un UUID de perfil desactualizado #57263 (Vasily Nemkov).
  • Se corrigió el funcionamiento de los búferes de lectura en StreamingFormatExecutor #57438 (Kruglov Pavel).
  • Ignorar las vistas materializadas cuya tabla de destino se haya eliminado durante el envío a vistas #57520 (Kruglov Pavel).
  • Eliminar una posible condición de carrera entre ALTER_METADATA y MERGE_PARTS #57755 (Azat Khuzhin).
  • Corregir el error en el orden de las expresiones en GROUP BY con rollup #57786 (Chen768959).
  • Una corrección para la obsoleta funcionalidad de replicación “zero-copy”: corrige blobs perdidos tras eliminar una réplica con partes detached dañadas #58333 (Alexander Tokmakov).
  • Permitir que los usuarios trabajen con enlaces simbólicos en user_files_path #58447 (Duc Canh Le).
  • Corrige un bloqueo cuando la tabla graphite no tiene una función agg #58453 (Duc Canh Le).
  • Retrasar la lectura de StorageKafka para permitir múltiples lecturas en vistas materializadas #58477 (János Benjamin Antal).
  • Corrige un caso absurdo de partes superpuestas #58482 (Alexander Tokmakov).
  • MergeTreePrefetchedReadPool deshabilitado para consultas únicamente con LIMIT #58505 (Maksim Kita).
  • Habilitación de las bases de datos ordinarias durante la restauración #58520 (Jihyuk Bok).
  • Se corrige la lectura del threadpool de Apache Hive para ORC/Parquet/… #58537 (sunny).
  • Ocultar las credenciales en la columna base_backup_name de system.backup_log #58550 (Daniel Pozo Escalona).
  • toStartOfInterval para redondear valores en milisegundos y microsegundos #58557 (Yarik Briukhovetskyi).
  • Desactivar max_joined_block_rows en ConcurrentHashJoin #58595 (vdimir).
  • Se corrige el join que usa Nullable en el analyzer antiguo #58596 (vdimir).
  • makeDateTime64: Admitir un argumento de fracción no constante #58597 (Robert Schulze).
  • Se corrige una posible desreferenciación de NULL durante la simbolización de frames en línea #58607 (Azat Khuzhin).
  • Mejora el aislamiento de las entradas de la caché de consultas al recrear usuarios o cambiar de rol #58611 (Robert Schulze).
  • Se corrigió el análisis defectuoso de la clave de partición al realizar la optimización de proyecciones #58638 (Amos Bird).
  • Caché de consultas: se corrige la cuota por usuario #58731 (Robert Schulze).
  • Corregir el particionado de flujos en funciones de ventana paralelas #58739 (Dmitry Novik).
  • Se corrigió la doble llamada a destroy al lanzar una excepción en addBatchLookupTable8 #58745 (Raúl Marín).
  • Evitar procesar solicitudes en Keeper durante el apagado #58765 (Antonio Andelic).
  • Se corrige una desreferenciación de puntero nulo en SlabsPolygonIndex::find #58771 (Yarik Briukhovetskyi).
  • Se corrigió la función JSONExtract para columnas LowCardinality(Nullable) #58808 (vdimir).
  • Una corrección para la acumulación inesperada de uso de memoria al crear una gran cantidad de tablas mediante CREATE y DROP. #58831 (Maksim Kita).
  • Almacenamiento File/Log de lectura múltiple en mv #58877 (János Benjamin Antal).
  • Restricción del ID de la clave de acceso de S3. #58900 (MikhailBurdukov).
  • Corrige un posible bloqueo en clickhouse-local al cargar sugerencias #58907 (Kruglov Pavel).
  • Se corrige un bloqueo cuando se usa indexHint #58911 (Dmitry Novik).
  • Se corrigió un problema en StorageURL por el que se perdían los encabezados al reiniciar el servidor #58933 (Michael Kolupaev).
  • Analizador: se corrige la sustitución del almacenamiento por un bloque de inserción #58958 (Yakov Olkhovskiy).
  • Se corrige el seek en ReadBufferFromZipArchive #58966 (Michael Kolupaev).
  • Una corrección para los índices invertidos experimentales (no los use en producción): DROP INDEX de un índice invertido ahora elimina todos los archivos pertinentes del almacenamiento persistente #59040 (mochi).
  • Se corrige una condición de carrera en query_factories_info #59049 (Kseniia Sumarokova).
  • Deshabilitar el reintento ante el error “Too many redirects” #59099 (skyoct).
  • Se corrige el interbloqueo al apagar una base de datos no iniciada #59137 (Sergei Trifonov).
  • Corrección de LIMIT BY y LIMIT en una consulta distribuida #59153 (Igor Nikonov).
  • Corrige un fallo al usar una zona horaria Nullable con toString #59190 (Yarik Briukhovetskyi).
  • Se corrige una terminación abrupta en los metadatos de Iceberg provocada por rutas de archivo no válidas #59275 (Kruglov Pavel).
  • Corregir el nombre de la arquitectura en la selección del objetivo de Rust #59307 (p1rattttt).
  • Se corrige un error lógico relacionado con el “conjunto “not-ready"" al consultar system.tables mediante una subconsulta en la cláusula IN. #59351 (Nikolai Kochetov).
Última modificación el 10 de junio de 2026