Tabla de contenidos
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
greatestyleastahora 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 SETTINGleast_greatest_legacy_null_behavior(valor predeterminado:false) entrue. #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/Variantpasan 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 tablause_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ónprewarm_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 KEYpara 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
MergeTreecomoReplicatedMergeTreey viceversa:ATTACH TABLE ... AS REPLICATEDyATTACH 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 unDateTime64en un valorInt64con 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_manipulationpara 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
indexOfAssumeSortedpara 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
translateahora permite eliminar caracteres si el argumentofromcontiene más caracteres que el argumentoto. Ejemplo:SELECT translate('clickhouse', 'clickhouse', 'CLICK')ahora devuelveCLICK. #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 campotime. #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 enauto. 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ónjoin_algorithmesté establecida endefault. Las dos alternativas anteriores (directyhash) se seguirán teniendo en cuenta cuando no pueda usarseparallel_hash. #70788 (Nikita Taranov). - Se añade una opción para extraer expresiones comunes de las expresiones
WHEREyONcon el fin de reducir el número de tablas hash usadas durante los JOIN. Esto resulta útil cuando la condiciónJOIN ONtiene partes comunes dentro deANDen distintas partes deOR. Se puede habilitar conoptimize_extract_common_expressions = 1. #71537 (János Benjamin Antal). - Permite usar índices en
SELECTcuando una columna indexada se convierte con CAST enLowCardinality(String), lo que puede ocurrir al ejecutar una consulta sobre una tabla Merge con algunas tablas que tienenStringy otrasLowCardinality(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 --recursiveen 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/argMaxpara 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
AggregateFunctiony en consultas distribuidas). Ligera mejora del rendimiento del análisis del formatoRowBinary. #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
RESTOREsiempre 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 BYa disco según el uso de memoria del servidor/usuario. Se controla con los ajustes de consultamax_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:
CancellationCheckercomprueba 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
ObjectaJSON, lo que significa que puedes migrar fácilmente desde el tipoObjectobsoleto. #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_replicaal generar el plan paraINSERT ... SELECTdistribuido. #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 VIEWconUNION [ALL]en la consulta. El comportamiento es el mismo que en una vista materializada conJOIN: solo la primera tabla de la expresiónSELECTactuará como desencadenante 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
MergeTreeIndexGranularityInternalArraysTotalSizeasystem.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_inactiveasystem.tablespara 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
Dynamicen las funcionesifNullycoalesce. #72772 (Pavel Kruglov). - Se admite
Dynamicen las funcionestoFloat64/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_sizey 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
Dynamicen los formatos JSONPretty. #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 habilitaruse_hive_partitioningde forma predeterminada. #72185 (Yarik Briukhovetskyi). - Se corrige un error por el que
min_age_to_force_merge_on_partition_onlyse 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
SimpleSquashingChunksTransformque se producía en raras ocasiones al procesar columnas dispersas. #72226 (Vladimir Cherkasov). - Se corrigió una condición de carrera en
GraceHashJoinque podía provocar la ausencia de algunas filas en el resultado del join. #72233 (Nikita Taranov). - Se corrigieron las consultas
ALTER DELETEcon la columna materializada_block_number(si está habilitada la configuraciónenable_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 deConcurrentHashJoin. #72278 (Nikita Taranov). - Corrige un posible
LOGICAL_ERRORcon columnas duplicadas enORDER BY ... WITH FILL. #72387 (Vladimir Cherkasov). - Se corrigieron incompatibilidades de tipos en varios casos tras aplicar
optimize_functions_to_subcolumns. #72394 (Anton Popov). - Usa
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILEen lugar deAWS_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
Variantvacíos. #72454 (Pavel Kruglov). - Corrige el formato inválido de
result_part_pathensystem.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 DateTime64no 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_limitinferior 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ónenable_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_hashque podía producirse cuando una consulta tenía una condición compleja en la cláusulaONcon 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
MemoryTrackingyMemoryResidentseguí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 Chunkdurante el análisis. #73082 (Pavel Kruglov).
Mejora en compilación/pruebas/empaquetado
- Todas las pequeñas utilidades que antes se almacenaban en la carpeta
/utilsy 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.serviceintroducida 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_seriesygenerateSeries. 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_cacheafilesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit. #71578 (Kseniia Sumarokova). - Se elimina la compatibilidad con argumentos
Enum, así comoUInt128yUInt256, endeltaSumTimestamp. Se elimina también la compatibilidad conInt8,UInt8,Int16yUInt16en el segundo argumento (“timestamp”) dedeltaSumTimestamp. #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
SELECTo el permisodictGetsobre 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_tiercomo un conmutador global para deshabilitar todas las funcionalidades experimentales/beta. #71841 #71145 (Raúl Marín). - Corrige el posible error
No such file or directorydebido 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 GRANTpara 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
STALENESSen 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,parseDateTime64OrNullyparseDateTime64OrZero. En comparación con la función existenteparseDateTime(y sus variantes), devuelven un valor de tipoDateTime64en lugar deDateTime. #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
Replacingpara 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_logal 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
--threadsaclickhouse-compressor, lo que permite comprimir datos en paralelo. #70860 (Alexey Milovidov). - Se añadió un ajuste
prewarm_mark_cacheque 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_alignmentde 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_plande forma predeterminada. La creación de un plan local completo en el iniciador de la consulta mejora el rendimiento de las réplicas paralelas con un menor consumo de recursos y ofrece más posibilidades de aplicar optimizaciones de consultas. #70171 (Igor Nikonov).
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,firstValueRespectNullsyanyValueRespectNullspara la función de agregaciónany. También se añadieron los aliasanyLastRespectNullsylastValueRespectNullspara la función de agregaciónanyLast. Esto permite usar una sintaxis más natural basada únicamente en camel case, en lugar de una sintaxis mixta de camel case y guion bajo; por ejemplo:SELECT anyLastRespectNullsStateIfen lugar deanyLast_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 poraccess_key_iddesde 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 deEXPLAIN. #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
Atomicde forma predeterminada enclickhouse-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 contest_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_FILEen lugar deAWS_CONTAINER_AUTHORIZATION_TOKENsi 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)yCloud overview (host)al dashboard avanzado. #71422 (alesapin). clickhouse-localusa 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
disksdevolvía cero en caso de error, y otras aplicaciones devolvían cero para los errores 256 (PARTITION_ALREADY_EXISTS) y 512 (SET_NON_GRANTED_ROLE). #71623 (Alexey Milovidov). - Cuando se proporciona el usuario/grupo como ID,
clickhouse sufalla. Este parche corrige el problema para que también acepteUID: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_msen 10 minutos ypolling_backoff_msen 30 segundos. #71817 (Kseniia Sumarokova). - Actualizar
HostResolvertres veces durante un período dehistory. #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 PARTya no se quedan bloqueadas con el prefijoattaching_. #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 NULLSenORDER BY ... WITH FILL; cierra #57609. #68234 (Vladimir Cherkasov). - Se corrigieron errores lógicos poco frecuentes en las inserciones asíncronas con formato
Nativecuando se alcanzaba el límite de memoria. #68965 (Anton Popov). - Se corrigió COMMENT en CREATE TABLE para la columna EPHEMERAL. #70458 (Yakov Olkhovskiy).
- 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 rangeal 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
SELECTejecutadas con la configuraciónuse_query_cache = 1ya 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
DEBUGen lugar deERROR. #71405 (Robert Schulze). - Se corrige un cierre inesperado en la función de tabla
mongodbal pasar argumentos incorrectos (p. ej.,NULL). #71426 (Vladimir Cherkasov). - Se corrige un cierre inesperado con optimize_rewrite_array_exists_to_has. #71432 (Raúl Marín).
- Se corrigió el uso del ajuste
max_insert_delayed_streams_for_parallel_writeen 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 quearrayJoinaparentemente puede aparecer en la condiciónWHERE. 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
bitShiften 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 TIESy 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-benchmarkreportó 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/s3Clusterpodían devolver un resultado incompleto o lanzar una excepción. Esto ocurría al usar un patrón glob en la URI de S3 (comopattern/*) y cuando existía un objeto vacío con la clavepattern/(estos objetos se crean automáticamente en la consola de S3). Además, el valor predeterminado de la configuracións3_skip_empty_filescambió defalseatrue. #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 typeen tablasMergeTreecon una función monótona binaria enORDER BYcuando el primer argumento es constante. Corrige #71941. #71966 (Nikolai Kochetov). - Permitir solo consultas SELECT en EXPLAIN AST cuando se usa dentro de una subconsulta. Otros tipos de consultas provocan 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 ...cuandoformat_alter_commands_with_parenthesesestá 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
SETTINGSantes deFORMATen una cadena de consultas conUNIONcuando 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 estableciendoallow_reorder_prewhere_conditionsenfalse. #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-tableen clickhouse-client; la nueva opción--enable-progress-table-toggleestá asociada a--progress-tabley 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
hashde 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 familiaMergeTree. 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
--copyen 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 nuevaquantileExactWeightedInterpolatedsi ya tenemosquantileExactInterpolatedWeighted. 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. DevuelveNULLsi 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_regexpymessage_regexp_negativeen el archivoconfig.xmlpara 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 elhashcriptográfico RIPEMD-160 de una cadena de texto. Ejemplo:SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))devuelve37F332F68DB77BD9D7EDD4969571AD671CF9DD3B. #70087 (Dergousov Maxim). - Compatibilidad con la lectura de tablas
IcebergenHDFS. #70268 (flynn). - Compatibilidad con CTE en la forma
WITH ... INSERT, ya que anteriormente solo se admitíaINSERT ... 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>enfalseen la configuración del servidor. #63279 (Kirill Nikiforov). - Se añadió una nueva función
getSettingOrDefaultpara 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 esread_tasks. Además, se ha añadido la SETTING de activaciónenable_parallel_replicas. #63151 (Alexey Milovidov), (Nikita Mikhaylov). - Se añade compatibilidad con el tipo
Dynamicen la mayoría de las funciones, ejecutándolas sobre los tipos internos dentro deDynamic. #69691 (Pavel Kruglov). - Permite leer y escribir el tipo
JSONcomo una binary string en formatoRowBinarycon las SETTINGSinput_format_binary_read_json_as_string/output_format_binary_write_json_as_string. #70288 (Pavel Kruglov). - Permite serializar y deserializar la columna
JSONcomo una única columna String en el Native format. Para la salida, use la SETTINGoutput_format_native_write_json_as_string. Para la entrada, use la serialization version1antes 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
Unionde Avro yVariantde ClickHouse. Resuelve #69713. #69712 (Jiří Kozlovský).
Mejora del rendimiento
- Se refactorizaron
IDiskeIObjectStoragepara mejorar el rendimiento. Las tablas de los almacenamientos de objetosplainyplain_rewritablese 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 discoplain_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
INSERTafecte aSELECT(debido al bloqueo de partes) (en condiciones normales confsync_part_directory, el QPS deSELECTconINSERTen paralelo se duplicó; con cargas elevadas, el efecto es aún mayor). Tenga en cuenta que, por ahora, esto solo incluyeReplicatedMergeTree. #64955 (Azat Khuzhin). - Se respeta
ttl_only_drop_partsenmaterialize 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
LowCardinalitydesdeORC. #69481 (李扬). - Se usa
LowCardinalityparaProfileEventsen logs del sistema comopart_log,query_views_logyfilesystem_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 PARTITIONya 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 AScopiaráPRIMARY KEY,ORDER BYy otras cláusulas similares (de las tablasMergeTree). #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_insertymin_free_disk_perform_to_throw_insertpara 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 directoriostore/...del disco predeterminado. #61777 (Kirill). - Al analizar un campo
EnumdeJSON, una cadena que contiene un entero se interpretará como el elementoEnumcorrespondiente. Esto cierra #65119. #66801 (scanhex12). - Permitir que
TRIMcon una cadena vacíaLEADINGoTRAILINGno 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_analyzeresté establecido entrue. Se admite calcular los argumentos de la función de tablaexecutablesin usar una consultaSELECTpara expresiones constantes. #69292 (Dmitry Novik). - Se agregó la opción
enable_secure_identifierspara impedir el uso de identificadores con caracteres especiales. #69411 (tuanpach). - Añade
show_create_query_identifier_quoting_rulepara definir el comportamiento de comillas de los identificadores en el resultado de la consultaSHOW 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-clientu otra aplicación de CLI, y se inicia lentamente debido a que el servidor está sobrecargado, y empieza a escribir su consulta, comoSELECT, las versiones anteriores mostraban el contenido restante del eco del terminal antes de imprimir el mensaje de bienvenida, por ejemploSELECTClickHouse local version 24.10.1.1.en lugar deClickHouse local version 24.10.1.1.. Ahora ya está corregido. Esto cierra #31696. #69856 (Alexey Milovidov). - Añadir una nueva columna
readonly_durationa la tablasystem.replicas. Necesario para poder distinguir en las alertas las réplicasreadonlyreales de las centinela. #69871 (Miсhael Stetsyuk). - Cambiar el tipo de la opción
join_output_by_rowlist_perkey_rows_thresholda 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 IMPLICITyFINALal comandoSHOW GRANTS. Corrige un error menor relacionado con los privilegios implícitos: #70094. #70293 (pufit). - Se respeta
compatibilityen la configuración de MergeTree. El valor decompatibilityse toma del perfildefaultal iniciar el servidor, y la configuración predeterminada de MergeTree se ajusta en consecuencia. Los cambios posteriores en la configuracióncompatibilityno 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 TABLEcon el calificadorPARTtení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
DateTime64con 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_policycomodisk. Se añade una comprobación para verificar si una nueva política de almacenamiento es compatible con la anterior al usar la configuracióndisk. #70839 (Kirill). - Se agregan
system.s3_queue_settingsysystem.azure_queue_settings. #70841 (Kseniia Sumarokova). - Las funciones
base58Encodeybase58Decodeahora aceptan argumentos del tipoFixedString. Ejemplo:SELECT base58Encode(toFixedString('plaintext', 9));. #70846 (Faizan Patel). - Añada la columna
partitiona 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
MergeStartyMutateStartasystem.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 mergeSimple. #70969 (Alexey Milovidov). - Soporte para
CREATE OR REPLACE VIEWde forma atómica. #70536 (tuanpach) - Se añadió el modo
strict_oncea la función de agregaciónwindowFunnelpara 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
ReadSettingsno usaba los valores configurados por el usuario, sino solo los valores predeterminados. #65625 (Kseniia Sumarokova). - Se corrige un error de incompatibilidad de tipos en
sumMapFilteredal 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
supportsPrewherepara las tablasMerge. Esto corrige #61064. Se había endurecido innecesariamente en #60082. #61091 (Amos Bird). - Se corrige la gestión de la configuración
use_concurrency_controlpara que se aplique correctamente el límiteconcurrent_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 ONen el caso de una comprobaciónIS NULLbajo cualquier otra función (comoNOT), que podía dar lugar a resultados incorrectos. Cierra #67915. #68049 (Vladimir Cherkasov). - Evita las consultas
ALTERque harían inválida la consultaCREATEde las tablas. #68574 (János Benjamin Antal). - Corrige el formato inconsistente del AST de las funciones
negate(-) yNOTcon tuplas y arrays. #68600 (Vladimir Cherkasov). - Se corrige la inserción de un tipo incompleto en
Dynamicdurante la deserialización. Podía dar lugar a erroresParameter 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 replicaen el replicated merge tree con zero copy. #69293 (MikhailBurdukov). - Se restablece el valor predeterminado de
processing_threads_numal número de núcleos de CPU en el almacenamientoS3Queue. #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
maxMapStatelanzaba ‘Bad get’ si el tipo de valor era DateTime64. #69787 (Michael Kolupaev). - Se corrige
getSubcolumnen columnasLowCardinalityal sobrescribiruseDefaultImplementationForLowCardinalityColumnspara que devuelvatrue. #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
DateoDate32. #70036 (Yarik Briukhovetskyi). - Corrige
Block structure mismatchen consultas con vistas anidadas y una condiciónWHERE. 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
decompressde 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_typesadecuado al crear el tipo Dynamic para una subcolumna JSON. #70147 (Pavel Kruglov). - Se corrigió la visualización de la contraseña en
system.query_logpara 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
arrayMinyarrayMax. #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
SELECTy unINTERSECT, 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
ALTERdel tipoDynamical 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 datosReplicatedcuando 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
SELECTy durante las fusiones tras añadir una columna de tipoArraycon 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_threads_numdel 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 byylimit with tiespara 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].cpara 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 formaexpr().namese interpretaba comotupleElement(expr(), name), y el analizador de consultas buscaba una columnanameen lugar del elemento de tupla correspondiente; en la nueva versión, en cambio, se convierte entupleElement(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_namesestá habilitada, el tipo de datoTuplese mostrará en formato Pretty en las sentenciasSHOW CREATE TABLE, en la funciónformatQueryy en el modo interactivo declickhouse-clientyclickhouse-local. En versiones anteriores, esta configuración solo se aplicaba a las consultasDESCRIBEy atoTypeName. 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 datosReplicated. Esto introduce una nueva configuración,database_replicated_allow_explicit_uuid, y cambia el tipo dedatabase_replicated_allow_replicated_engine_argumentsde 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_defaultque, 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
overlayyoverlayUTF8, que sustituyen partes de una cadena por otra. Ejemplo:SELECT overlay('Hello New York', 'Jersey', 11)devuelveHello 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
Intervalde 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_existspara usar de forma predeterminada el comportamientoIF NOT EXISTSen las sentencias CREATE. #68164 (Peter Nguyen). - Permite leer tablas
Icebergen 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 conSYSTEM DROP QUERY CACHE TAG 'abc'. #68477 (Michał Tabaszewski). - Añadir cifrado de almacenamiento para named collections. #68615 (Pablo Marcos).
- Añade la columna virtual
_headersal motor de tablaURL. Cierra #65026. #68867 (flynn). - Añadir la tabla
system.projectionspara seguir las proyecciones disponibles. #68901 (Jordi Villar). - Se añadió la nueva función
arrayZipUnalignedpara ofrecer compatibilidad con Spark (donde se llamaarrays_zip), que admite arrays no alineados a partir de laarrayZiporiginal. #69030 (李扬). - Se añadieron los comandos
cp/mva 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ónarrayAUC, 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_variantsque permite inferir el tipoVariantdurante 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/distinctJSONPathsAndTypespara 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), consultaSYSTEM WAIT VIEW <name>que espera a que termine la actualización en curso, y algunas correcciones. #58934 (Michael Kolupaev). - Se añadió
min_maxcomo 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
castOrDefaultpara 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
arrayymapse 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
RowInputFormatWithNamesAndTypespara obtener una mejora de rendimiento. #68437 (李扬). - Se añade la fusión paralela para la aggregate function
uniqal 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_thresholdpara permitir al usuario habilitar la codificación por diccionario para columnas String en el output formatORC. Esto ayuda a reducir significativamente el tamaño del archivoORCde 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
DeltaLakeestá particionada por Bool, el valor de la partición siempre se interpreta comofalse; - la tablaExternalDistributedusaba un solo segmento de las direcciones proporcionadas; el valor del ajustemax_threadsy otros similares se imprimía como'auto(N)'en lugar deauto(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
upperUTF8ylowerUTF8antes 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 devuelveSÜ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_ipv4ydns_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
DateTime64se usa solo cuando la fecha y hora tiene parte fraccionaria; de lo contrario, se usa elDateTimenormal. La inferencia de Date/DateTime ahora es más estricta, especialmente cuandodate_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
Date32endateTruncytoStartOfInterval. #68874 (LiuNeng). - Agrega las columnas
plan_step_nameyplan_step_descriptionasystem.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(configuracionesrestore_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íaconcaten 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
dbnamede 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
INcontiene 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 ser9999-12-31, pero por error se estableció como9999-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 contienex Int64). Sin esta corrección, useinput_format_parquet_filter_push_down = 0como solución temporal. #68131 (Michael Kolupaev). - Se corrige el fallo en
lag/leadintroducido 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=0aún puede hacer que las columnas seanNullableen los formatos Parquet/Arrow. El cambio no era retrocompatible y los usuarios notaron este cambio de comportamiento. Este PR hace queschema_inference_make_columns_nullable=0vuelva a funcionar como antes (no se inferirán columnasNullable) e introduce el nuevo valorautopara esta configuración, que hará que las columnas seanNullablesolo 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_ERRORcuando las funcionessipHash64Keyed,sipHash128KeyedosipHash128ReferenceKeyedse 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_identre 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
_tabley_databasea 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::toStringformatee cada columna usando el mismo objetoIAST::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_subcolumnshabilitada. #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-Encodingno 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
--multiqueryestá habilitado. #69123 (wxybear). - La cláusula
UNIONen las subconsultas no se gestionaba correctamente en consultas con réplicas paralelas y provocaba el LOGICAL_ERRORDuplicate announcement received for replica. #69146 (Igor Nikonov). - Se corrigió la propagación del argumento
structureen s3Cluster. Anteriormente, la expresiónDEFAULTde 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-filepara usuarios con acceso de solo lectura (antes fallaba conCannot 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_versiones a la vez igual a0y distinto de la versión del nodometadatade la tabla correspondiente. Esto hace que las consultasalterfallen 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
crossjoin, esto no puede ocurrir en ClickHouse por ahora. Es mejor mantenerhave_compressedenreuseJoinedData. #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_ERRORrelacionado con la funciónsqidDecode(#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 ... SELECToCREATE TABLE AS SELECT. #69469 (Yarik Briukhovetskyi). - Las sentencias
SHOW COLUMNSySHOW INDEXahora 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_secdeStorageS3(Azure)Queue. Se escribía en Keeper con la clavetracked_file_ttl_sec, pero se leía comotracked_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
prewheresin 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-clientyclickhouse-localahora 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/-nha quedado obsoleta. Las consultas INSERT en sentencias multiconsulta se tratan de forma especial según su cláusula FORMAT: si el FORMAT esVALUES(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,CSVoJSONEachRow), el final de la sentencia INSERT se representa con dos saltos de línea\n\nal final de la consulta. #63898 (FFish).- En versiones anteriores, era posible usar una sintaxis alternativa para los tipos de datos
LowCardinalityañadiendoWithDictionaryal 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 aLowCardinality. #66842 (Alexey Milovidov). - Se corrigen errores lógicos en el almacenamiento
Bufferusado con una tabla de destino distribuida. Es un cambio incompatible con versiones anteriores: las consultas que usanBuffercon 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_logestá 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,
arrayWithConstantpodí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 aString, 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 columnaDynamicpuede 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 consultaOPTIMIZE 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) yrebuild(reconstruir la proyección desde cero, lo que supone una operación costosa). #66672 (jsc0218). - Se añade la columna virtual
_etagpara 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'ySELECT 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ónallow_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
printfpara ofrecer compatibilidad con Spark (aunque puede usarse la funciónformatexistente). #66257 (李扬). - Añade las opciones
restore_replace_external_engines_to_nullyrestore_replace_external_table_functions_to_nullpara sustituir los motores externos y los motores de tabla por el motorNull, 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
MULTILINESTRINGen formatoWKTmediante la funciónreadWKTLineString. #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 ALLpara eliminar todas las particiones detached. #67885 (Duc Canh Le). - Añade la estadística
rows_before_aggregation_at_leasta 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óngroup byomaxsin unlimit,rows_before_aggregation_at_leastpuede reflejar el número de filas procesadas por la consulta. #66084 (morning-color). - Se admite la consulta
OPTIMIZEen las tablasJoinpara reducir su uso de memoria. #67883 (Duc Canh Le). - Permite ejecutar la consulta al instante en play si se añade
&run=1en 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
Kafkapara 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 comocol = '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_subcolumnsestá habilitada de forma predeterminada. #68053 (Anton Popov). - Los metadatos del directorio de disco
plain_rewritablese almacenan en la estructura__meta, por separado de los datos de MergeTree en el almacenamiento de objetos. El discoplain_rewritablese 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 LOGSy 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 dedatabase_catalog_drop_table_concurrencyse 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_analyzerpasa a llamarseenable_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 conkeep_alive_timeout: si el tiempo de inactividad aún no ha expirado, pero ya se han realizado más demax_keep_alive_requestssolicitudes 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_backuppara las consultasBACKUPyRESTORE, lo que permite crear y restaurar copias de seguridad incrementales en archivos protegidos con contraseña. #66214 (Samuele). - Ignorar
async_load_databasespara la consultaATTACH(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
UUIDcorrecto 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
COMMENTfuncione con todos los motores de tabla. #66832 (Joe Lynch). - La función
mapFromArraysahora aceptaMap(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 tipoArray(Nullable(T))oArray(LowCardinality(Nullable(T))), siempre que los valores reales del array no seanNULL. #67103 (李扬). - Se lee la configuración de
clickhouse-localdesde~/.clickhouse-local. #67135 (Azat Khuzhin). - Se cambió el nombre de la configuración
input_format_orc_read_use_writer_time_zoneainput_format_orc_reader_timezoney se permitió al usuario establecer la zona horaria del lector. #67175 (kevinyhzou). - Reducir la gravedad del error
Socket is not connectedcuando el otro extremo restablece inmediatamente la conexión HTTP tras conectarse, cierra #34218. #67177 (vdimir). - Añadida la posibilidad de cargar dashboards para
system.dashboardsdesde 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 aliasdenseRank()ypercentRank(). Estas nuevas funciones pueden llamarse exactamente igual que las funciones originalesdense_rank()ypercent_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,.ymlo.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
formatDateTimeyformatDateTimeInJodaSyntaxahora consideran opcional su parámetro de formato. Si no se especifica, se asumen las cadenas de formato%Y-%m-%d %H:%i:%syyyyy-MM-dd HH:mm:ss. Ejemplo:SELECT parseDateTime('2021-01-04 23:12:34')ahora devuelve el valorDateTime2021-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-piea 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
MergeTreeno 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-repeatpara 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
uniqyuniqThetacon el argumentotuple(). 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 dejsonMergePatchaJSONMergePatchporque 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 Seten 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 xdeberí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
numberspodía lanzar una excepción por error cuando se establecía el límitemax_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 tablaMergesobre la tablaDistriburtedcon un segmento. #67146 (Nikolai Kochetov). - Comportamiento correcto de
ORDER BY allconenable_order_by_alldeshabilitado 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ónoptimize_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_filterque hacía fallar consultas con condiciones algo extrañas como(k=2)=(k=2)ohas([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 enGROUP BY(con el nuevo analizador). #67536 (Nikolai Kochetov). - Corregido el join en tuplas con
NULL: algunas consultas con el nuevo analizador yNULLdentro de la tupla en la secciónJOIN ONdevolví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 valorDateTime64pequeñ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 depercent_rankse cambia arange unbounded preceding and unbounded following. Se tiene en cuenta el marco de ventana predeterminado deIWindowFunction, y ahora las funciones de ventana sin una definición de marco de ventana en SQL pueden colocarse correctamente en distintosWindowTransfomers. #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_typeen 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 enc, 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 typesen 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-clientsolo aceptará rutas en literales de cadena, comols '/hello/world', no cadenas sin comillas comols /hello/world. #65494 (Alexey Milovidov).- La métrica
KeeperOutstandingRequetsse renombró aKeeperOutstandingRequests. #66206 (Robert Schulze). - Se elimina el campo
is_deterministicde la tablasystem.functions. #66630 (Alexey Milovidov). - La función
tupleahora intentará construir tuplas con nombre en la consulta (controlado porenable_named_columns_in_function_tuple). Se introduce la funcióntupleNamespara 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
bitShiftLeftybitShitfRightdevuelven un error para posiciones de desplazamiento fuera de rango #65838 (Pablo Marcos).
Nueva funcionalidad
- Se añade compatibilidad con
ASOF JOINpara el algoritmofull_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 fecha2024-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_certificateen 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 clienteopenSSLcorrespondientes: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 quearrayStringConcat( 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_levelpara 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 functionfile. #66019 (Zhidong (David) Guo). - Se añade la opción
--memory-usageal 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 modocompactpara 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 MergeTreeuse_compact_variant_discriminators_serialization, habilitada de forma predeterminada. Ten en cuenta que el tipoVariantsigue 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
mappara las subcolumnasVariantyDynamic. #66178 (Kruglov Pavel). - Corrige la lectura de subcolumnas
Dynamicdesde una tablaMemorymodificada. Anteriormente, si el parámetromax_typesde un tipoDynamicse cambiaba en una tablaMemorymedianteALTER, la lectura posterior de subcolumnas podía devolver un resultado incorrecto. #66066 (Kruglov Pavel). - Añade compatibilidad con
cluster_for_parallel_replicasal 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 BYsobre la clave primaria yWHEREcon una condición de alta selectividad mediante el uso de búferes. Se controla con la configuraciónread_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
replaceRegexpAllyreplaceRegexpOneahora 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_concurrencyhilos. #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_selectestá 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 usarSET compatibility = '24.6'. #58970 (Alexey Milovidov). - Imprime el stacktrace y la información de diagnóstico si
clickhouse-clientoclickhouse-localfallan. #61109 (Alexander Tokmakov). - El resultado de
SHOW INDEX | INDEXES | INDICES | KEYSantes 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
certificateFileyprivateKeyFile. 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 des3queue_processing_threads_numsegú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 des3queue_loading_retriesen 10. Corregir la posible y ambigua excepción “Uncaught exception” en la columna de excepciones desystem.s3queue. No incrementar el número de reintentos en caso de la excepciónMEMORY_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 ajustess3queue_max_processed_files_before_commit,s3queue_max_processed_rows_before_commit,s3queue_max_processed_bytes_before_commit,s3queue_max_processing_time_sec_before_commitpara 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
INcuando la expresión de filtro forma parte de la expresiónPARTITION BY. #65335 (Eduard Karacharov). arrayMin/arrayMaxpueden 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-locala solo:).getFQDNOrHostName()tarda demasiado en macOS, y además no queremos un nombre de host en el prompt declickhouse-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_sizeycompiled_expression_cache_elements_sizeahora se muestran ensystem.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-localrespetarámax_server_memory_usageymax_server_memory_usage_to_ram_ratiodel 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 queclickhouse-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_analyzerquede 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
concatcon 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_timeoutespecifica el valor que se pasa al parámetroconnect_timeoutde la URL de conexión. La opción de configuraciónpostgresql_connection_pool_retriesespecifica 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_usensystem.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 CLUSTERen las consultas de gestión de colecciones con nombre con almacenamiento replicado. #66288 (MikhailBurdukov). - La función
generateSnowflakeIDahora 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+Zen 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
LowCardinalityen 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 UNTILen 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 cancelledpodrí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
PREWHEREno 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.txtno 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
dictGetpara acceder a diccionarios mediante consulta directa o el motor de tablaDictionary. #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-partspara las consultas conFINALsi estaba habilitada la optimizaciónread-in-order. Esto podría dar lugar a un resultado de consulta incorrecto. Como solución temporal, deshabilitado_not_merge_across_partitions_select_finalysplit_parts_ranges_into_intersecting_and_non_intersecting_finalantes 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 metadataen 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
parseDateTimecon los marcadores de posición%Fy%D. #65768 (Antonio Andelic). - En las consultas que leen de
PostgreSQL, se cancela la consulta interna dePostgreSQLsi la consulta deClickHouseha finalizado. De lo contrario, la consulta deClickHouseno se puede cancelar hasta que finalice la consulta interna dePostgreSQL. #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,bitTestAllybitTestAnyahora devuelven un error si el índice de bits especificado está fuera de rango #65818 (Pablo Marcos). - La opción
join_any_take_last_rowse 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 comoON a <=> b), y se corrige una optimización incorrecta cuando hay condiciones distintas deIS NULL. #65835 (vdimir). - Se corrige el aumento del uso de memoria en S3Queue. #65839 (Kseniia Sumarokova).
- Se corrige el manejo de empates en
arrayAUCpara 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_WRITEcon 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_tuplesa 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
GRPCServerdurante el cierre. #66061 (Vitaly Baranov). - Se corrigieron varios casos de la función
hascon argumentosLowCardinalityno constantes. #66088 (Anton Popov). - Corrección de
groupArrayIntersect. Presentaba un comportamiento incorrecto en la funciónmerge(). Además, se corrigió el comportamiento dedeserialise()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-filtersintroducida 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_EXCEEDEDen el modonone_only_activededistributed_ddl_output_mode. #66218 (Alexander Tokmakov). - Se corrige la gestión del límite para
system.numbers_mtcuando 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 setcuando se usa una subconsulta conINen 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 registeredal usargroup_by_use_nulls=truey el nuevo analizador. #66400 (Nikolai Kochetov). - Corrige un posible resultado incorrecto en consultas que realizan
joiny filtran tablas con engine externo (como PostgreSQL), debido a un pushdown de filtros demasiado agresivo. A partir de ahora, las condiciones de la secciónwhereno se enviarán a la base de datos externa en caso deouter joincon 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 columnen consultas con una expresión constante en la claveGROUP BYy 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 columnasPARTITIONtienen 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_lengthno se actualizaba enColumnTuple::insertManyFrom. #66626 (lgbo). - Corrige los errores
Unknown identifieryColumn is not under aggregate functionen 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 nodeque 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
isUniqTypesal ejecutarinsert selectdesde 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
indexHintdetectado 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_databasesen config.xml. Aunque este cambio es totalmente compatible, puede introducir una diferencia de comportamiento. Cuandoasync_load_databaseses false, como en las versiones anteriores, el servidor no aceptará conexiones hasta que se hayan cargado todas las tablas. Cuandoasync_load_databaseses 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 deasync_load_databasesen false para evitar este problema. #57695 (Alexey Milovidov). - La configuración
replace_long_file_name_to_hashestá habilitada de forma predeterminada para las tablasMergeTree. #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
kqlsin un literal de cadena, por ejemplokql(garbage | trash)en lugar dekql('garbage | trash')okql($$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
Ordereddel almacenamientoS3Queue. Este PR es incompatible con versiones anteriores para el modoOrderedsi utilizaba las configuracioness3queue_processing_threads_numos3queue_total_shards_num. La configuracións3queue_total_shards_numse eliminó; anteriormente solo se permitía usarla cons3queue_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,dateTimeToSnowflakeIDydateTime64ToSnowflakeID. A diferencia de las funciones existentessnowflakeToDateTime,snowflakeToDateTime64,dateTimeToSnowflakeydateTime64ToSnowflake, las nuevas funciones son compatibles con la funcióngenerateSnowflakeID; es decir, aceptan los Snowflake ID generados porgenerateSnowflakeIDy producen Snowflake ID del mismo tipo quegenerateSnowflakeID(es decir,UInt64). Además, las nuevas funciones usan de forma predeterminada la época UNIX (también conocida como 1970-01-01), igual quegenerateSnowflakeID. 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ónallow_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
LINESTRINGen formato WKT mediante la funciónreadWKTLineString. #62519 (Nikita Mikhaylov). - Permite adjuntar partes desde un disco diferente. #63087 (Unalian).
- Se añadió la nueva función SQL
generateSnowflakeIDpara generar identificadores Snowflake al estilo de Twitter. #63577 (Danila Puzov). - Se añadieron los ajustes
merge_workloadymutation_workloadpara 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
IPv4eIPv6mediante 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 variantesOrNullyOrZero). #64742 (Francisco J. Jurado Moreno). - Añade los ajustes del servidor
max_table_num_to_throwymax_database_num_to_throwpara limitar el número de bases de datos o de tablas en las consultasCREATE. #64781 (Xu Jia). - Se añade la columna virtual
_timea almacenamientos de tipo archivo (s3/file/hdfs/url/azureBlobStorage). #64947 (Ilya Golshtein). - Se han introducido las nuevas funciones
base64URLEncode,base64URLDecodeytryBase64URLDecode. #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_headerspara admitir encabezados de respuesta personalizados en handlers HTTP personalizados. #63562 (Grigorii). - Se añadió una nueva función de tabla
looppara 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_privilegesymissing_privileges.used_privilegesse rellena con los privilegios que se comprobaron durante la ejecución de la consulta, ymissing_privilegescontiene 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 medianteoutput_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_loweryparallel_replicas_custom_key_range_upperpara 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ónoptimize_row_order(desactivada de forma predeterminada). #63578 (Igor Markelov). - Se añade un lector nativo de Parquet que puede leer datos binarios Parquet directamente en columnas de ClickHouse. 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
INSERTmultihilo 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
splitByRegexpcuando 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
LowCardinalityy 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
isDefaultdeColumnSparse::filterpara mejorar el rendimiento. #64426 (Jiebin Sun). - Acelera los comandos
find_super_nodesyfind_big_familyde keeper-client mediante múltiples solicitudes asíncronas a getChildren. #64628 (Alexander Gololobov). - Mejora en la función
least/greatestpara 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-downsi 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_insertymaterialize_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()ytrunc()ya no tiene que ser constante. #64798 (Mikhail Gorshkov). - Recarga en caliente de la política de almacenamiento de las tablas
Distributedal 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->IOUringSQEsResubmitsAsyncy 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.,
limitoadditional_table_filters) afectarían al resultado de la consulta. #64205 (Robert Schulze). - Se admite el código de error no estándar
QpsLimitExceededdel 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 deinput_format_parquet_max_block_sizea 65409. #64427 (LiuNeng). - Permitir omitir el uso del proxy para los hosts especificados en la variable de entorno
no_proxyy 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
MergeTreesobre almacenamiento de objetos. #64456 (alesapin). - Se admite el código de error no estándar
TotalQpsLimitExceededen el almacenamiento de objetos como error reintentable. #64520 (Sema Checherinda). - Se actualizó el 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_mtygenerateRandom. #64804 (Raúl Marín). - Añade una métrica asíncrona
jemalloc.profile.activepara 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_conditioncomo 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*yDiskGetObjectThrottler*, que reflejan el límite de solicitudes por segundo definido con la configuración de discos3_max_get_rpsys3_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 PLANcon réplicas paralelas. #64298 (vdimir). - Cambiar el nombre de
allow_deprecated_functionsaallow_deprecated_error_prone_window_functions. #64358 (Raúl Marín). - Respetar también la configuración
max_read_buffer_sizepara los descriptores de archivo en la función de tablafile. #64532 (Azat Khuzhin). - Deshabilitar las transacciones para motores de almacenamiento no compatibles, incluso en vistas materializadas. #64918 (alesapin).
- Se prohíbe la cláusula
QUALIFYen el analizador antiguo. El analizador antiguo ignorabaQUALIFY, 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_tupleyinput_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
DISTINCTy 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 aliasesen 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 aliasen las consultas distribuidas conARRAY 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 casten la tablaBufferconPREWHERE. #64388 (Nikolai Kochetov). - Evita el logging recursivo en
blob_storage_logcuando se almacena en almacenamiento de objetos. #64393 (vdimir). - Se corrigieron las consultas
CREATE TABLE ASpara tablas con expresiones por defecto. #64455 (Anton Popov). - Se corrigió el comportamiento de
optimize_read_in_orderpara ORDER BY … NULLS FIRST / LAST en tablas con claves Nullable. #64483 (Eduard Karacharov). - Corrige los errores
Expression nodes list expected 1 projection namesyUnknown expression or identifieren consultas con alias deGLOBAL IN.. #64517 (Nikolai Kochetov). - Corrige un error
Cannot find columnen consultas distribuidas con una CTE constante en la clave deGROUP 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
formatDateTimeInJodaSyntaxcuando un formateador genera un número impar de caracteres y el último es0. Por ejemplo,SELECT formatDateTimeInJodaSyntax(toDate('2012-05-29'), 'D')ahora devuelve correctamente150en lugar de15, 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
WHEREyPREWHEREque 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 destartsWith,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 BYentre 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_sizeen el comandomntr. #64784 (Antonio Andelic). - Corrige
Cannot find columnen consultas distribuidas conARRAY JOINsobre una columnaNested. 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 mismatchen consultas que leen conPREWHEREdesde 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
Deleteenblob_storage_logen caso de que haya un lote grande para eliminar. #64924 (vdimir). - Se corrigió el error
Session moved to another serverde [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_iden DatabaseReplicated cuando el parámetrocluster_secure_connectionestá 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 Settras la optimizaciónPREWHEREde 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 identifieren consultas remotas conINTERPOLATE (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
KeyConditiony 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
networksea obligatorio al usar el script de iniciorcpara 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,runningDifferenceStartingWithFirstValueyrunningDifferenceha quedado obsoleto (porque es propenso a errores). En su lugar, deben usarse funciones de ventana adecuadas. Para volver a habilitarlas, establezcaallow_deprecated_error_prone_window_functions = 1ocompatibility = '24.4'o inferior. #63132 (Nikita Taranov). - Las consultas a
system.columnsfuncionarán más rápido si hay una gran cantidad de columnas, pero no se ha concedidoSHOW TABLESpara muchas bases de datos o tablas. Tenga en cuenta que, en versiones anteriores, si concedeSHOW COLUMNSa columnas individuales sin concederSHOW TABLESa las tablas correspondientes, la tablasystem.columnsmostrará 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
Formpara leer/escribir un solo registro en el formatoapplication/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 JOINusando archivos temporales si el tamaño supera los límites. #63432 (p1rattttt). - Admite
joincon 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)yTuple(T1, T2, ...)como claves. Cierra #54537. #59318 (李扬). - Se introduce la carga masiva en
EmbeddedRocksDBmediante 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 deEmbeddedRocksDB. #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_fieldsque obliga a usar valores NULL para los campos omitidos. #60887 (Constantine Peresypkin). - Anteriormente, nuestro almacenamiento S3 y la función de tabla
s3no 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 deTSVRaw. #63394 (Unalian). - Se agregó una nueva función SQL
generateUUIDv7para 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ónUUIDToNumpara extraer los bytes de un UUID y una nueva funciónUUIDv7ToDateTimepara 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
azureBlobStorageen el servidor ClickHouse para usar Workload Identity de Azure para autenticarse en Azure blob storage. Si el parámetrouse_workload_identityestá 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 tipoDynamicestá disponible mediante la configuraciónallow_experimental_dynamic_type. Referencia: #54864. #63058 (Kruglov Pavel). - Se permite crear una base de datos
MaterializedMySQLsin 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_secys3queue_traked_files_limitparaStorageS3Queue. #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étodotryReserve). 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
...UTF8de 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_bytespara controlar el uso de memoria y acelerar 2 veces la ordenación durante la fusión cuando hay muchas columnas. #62904 (LiuNeng). clickhouse-localse 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
DateTimese compara conDateTime64. Esto cierra #63441. #63443 #63532 (Alexey Milovidov). - Acelera un poco (alrededor de 1,5 veces) los índices de tipo
seteliminando 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-localy sus aliasclickhouseychpasando 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 parasystem.numbersysystem.numbers_mt) y la table functiongenerateRandom. Además, si el número total de registros supera el límite demax_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_frompara archivos YAML. Sin embargo, es preferible usarconfig.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_MATCHpor códigos de error más precisos cuando corresponde. #63406 (Yohann Jardin). - Ahora
os_useryclient_hostnamese 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_sizeal 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_DECOMPRESSen lugar deCORRUPTED_DATAcuando 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_keyenATTACHy comprobarlo enALTER. #64202 (Azat Khuzhin).
Mejora de compilación/pruebas/empaquetado
- ClickHouse se compila con clang-18. Se han habilitado muchas comprobaciones nuevas de clang-tidy-18. #60469 (Alexey Milovidov).
- Se añade compatibilidad experimental con loongarch64 como nueva plataforma para ClickHouse. #63733 (qiangxuhui).
- El Dockerfile ha sido revisado por la librería oficial de Docker en https://github.com/docker-library/official-images/pull/15846. #63400 (Mikhail f. Shiryaev).
- Se recopilará información sobre cada símbolo de cada unidad de traducción en la base de datos de la CI para cada compilación. Esto cierra #63494. #63495 (Alexey Milovidov).
- Se actualiza la biblioteca Apache Datasketches. Esto resuelve #63858. #63923 (Alexey Milovidov).
- Se habilita la compatibilidad con GRPC para Linux aarch64 al compilar de forma cruzada el binario. #64072 (alesapin).
- Se corrige el desenrollado de pila en SIGSEGV en aarch64 (debido al pequeño tamaño de la pila para la señal) #64058 (Azat Khuzhin).
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
untupley 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-Timezoneconsession_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_dictionariesvacío ensystem.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
DISTINCTredundante 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
TokenIteratorsea de evaluación diferida, como debe ser #63801 (Alexey Milovidov). - Se añade la opción de configuración
endpoint_subpathpara 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_nodesyfind_big_familyde 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_logpara 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-bridgeyclickhouse-library-bridgeahora 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 obsoletaLIVE 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
INSERTy 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
rolea la interfaz HTTP. Funciona de forma similar aSET 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 vezSET ROLE xy la propia sentencia. También es posible establecer varios roles de esta forma, por ejemplo,?role=x&role=y, lo que equivale aSET ROLE x, y. #62669 (Serge Klochkov). - Se añade
SYSTEM UNLOAD PRIMARY KEYpara liberar memoria utilizada por la clave primaria de una tabla. #62738 (Pablo Marcos). - Se añadieron las columnas
value1,value2, …,value10asystem.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_offsetpuede habilitarse mediante la configuración de MergeTreeenable_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_numberya 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 downde 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_timestampyfrom_utc_timestampson ahora unas 2 veces más rápidas. #62583 (KevinyhZou). - Las funciones
parseDateTimeOrNull,parseDateTimeOrZero,parseDateTimeInJodaSyntaxOrNullyparseDateTimeInJodaSyntaxOrZeroahora 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_cacheahora 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_QUERYno se recarga dos veces al iniciar. #62050 (vdimir). - Se corrige un problema por el que, cuando se añade un
= 1o= 0redundante después de una expresión booleana que involucra la clave primaria, no se usa el índice primario. Por ejemplo, tantoSELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1comoSELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0realizan 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_pathsen 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 clienteuse_page_cache_for_disks_without_file_cache=1para 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
Variantmediante parsing. #62005 (Kruglov Pavel). - Se admite
Varianten las funciones JSONExtract. #62014 (Kruglov Pavel). - El tipo
Variantse 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 queSELECT * 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_diffyageahora calculan su resultado con precisión de nanosegundos en lugar de microsegundos. Ahora también admitennanosecond(onanosecondsons) como posible valor para el parámetrounit. #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
inputparaclickhouse-local. #61923 (Azat Khuzhin). - El motor de tabla
Joincon strictnessANYes 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.keywordspara completar las sugerencias y también para usarlas internamente en todas partes. #62000 (Nikita Mikhaylov). OPTIMIZE FINALparaReplicatedMergeTreeahora 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 deMergeTree. #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 AScopia 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ónmutations_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 TABLEpuede retrasarse o lanzar la excepciónTOO_MANY_PARTSpara evitar superar los límites de cantidad de partes. Se aplican la misma configuración y los mismos límites que para la consultaINSERT(consulte la configuración demax_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_msymax_delay_to_insert). #62420 (Sergei Trifonov). - Se cambió el directorio de instalación predeterminado en macOS de
/usr/bina/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 consudo. #62489 (haohang). - Hacer que transform devuelva siempre la primera coincidencia. #62518 (Raúl Marín).
- Se añadió la columna
hostnameque faltaba en la tabla del sistemablob_storage_log. #62456 (Jayme Bird). - Para mantener la consistencia con otras tablas del sistema,
system.backup_logahora tiene una columnaevent_time. #62541 (Jayme Bird). - La tabla
system.backup_logahora tiene la clave de ordenación “predeterminada”, que esevent_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
--helpenclickhouse clientyclickhouse local. La salida anterior ahora se genera con--help --verbose. #62973 (Yarik Briukhovetskyi). - Se eliminó
log_bin_use_v1_row_eventsen MySQL 8.3, y ajustamos el motorMaterializedMySQL, todavía experimental, para adaptarlo a este cambio #60479. #63101 (Eugene Klimov). Autor: Nikolay Yankin.
Mejora de compilación/pruebas/empaquetado
- Incorporar las dependencias de Rust al repositorio, para que el código en Rust (que usamos para funcionalidades menores por el hype y las risas) pueda compilarse de forma razonable, igual que en C++. #62297 (Raúl Marín).
- ClickHouse ahora usa OpenSSL 3.2 en lugar de BoringSSL. #59870 (Robert Schulze). Tenga en cuenta que OpenSSL, en general, tiene una cultura de ingeniería peor (por ejemplo, un número no nulo de informes del sanitizador que tuvimos que parchear, un sistema de build complejo con archivos generados, etc.), pero ofrece mejor compatibilidad.
- Ignorar las consultas DROP en la prueba de estrés con una probabilidad de 1/2; usar TRUNCATE en lugar de ignorar DROP en la comprobación de actualización para las tablas Memory/JOIN. #61476 (Kruglov Pavel).
- Eliminar los volúmenes en /etc/clickhouse-keeper y /var/log/clickhouse-keeper de la imagen de Docker de Keeper. #61683 (Tristan).
- Agrega pruebas para todos los problemas que ya no son relevantes con el analizador habilitado de forma predeterminada. Closes: #55794 Closes: #49472 Closes: #44414 Closes: #13843 Closes: #55803 Closes: #48308 Closes: #45535 Closes: #44365 Closes: #44153 Closes: #42399 Closes: #27115 Closes: #23162 Closes: #15395 Closes: #15411 Closes: #14978 Closes: #17319 Closes: #11813 Closes: #13210 Closes: #23053 Closes: #37729 Closes: #32639 Closes: #9954 Closes: #41964 Closes: #54317 Closes: #7520 Closes: #36973 Closes: #40955 Closes: #19687 Closes: #23104 Closes: #21584 Closes: #23344 Closes: #22627 Closes: #10276 Closes: #19687 Closes: #4567 Closes: #17710 Closes: #11068 Closes: #24395 Closes: #23416 Closes: #23162 Closes: #25655 Closes: #11757 Closes: #6571 Closes: #4432 Closes: #8259 Closes: #9233 Closes: #14699 Closes: #27068 Closes: #28687 Closes: #28777 Closes: #29734 Closes: #61238 Closes: #33825 Closes: #35608 Closes: #29838 Closes: #35652 Closes: #36189 Closes: #39634 Closes: #47432 Closes: #54910 Closes: #57321 Closes: #59154 Closes: #61014 Closes: #61950 Closes: #55647 Closes: #61947. #62185 (Nikita Mikhaylov).
- Añade más pruebas de incidencias que ya no son relevantes o que el analizador ya ha corregido. Cierra: #58985 Cierra: #59549 Cierra: #36963 Cierra: #39453 Cierra: #56521 Cierra: #47552 Cierra: #56503 Cierra: #59101 Cierra: #50271 Cierra: #54954 Cierra: #56466 Cierra: #11000 Cierra: #10894 Cierra: https://github.com/ClickHouse/ClickHouse/issues/448 Cierra: #8030 Cierra: #32139 Cierra: #47288 Cierra: #50705 Cierra: #54511 Cierra: #55466 Cierra: #58500 Cierra: #39923 Cierra: #39855 Cierra: #4596 Cierra: #47422 Cierra: #33000 Cierra: #14739 Cierra: #44039 Cierra: #8547 Cierra: #22923 Cierra: #23865 Cierra: #29748 Cierra: #4222. #62457 (Nikita Mikhaylov).
- Se corrigieron errores de compilación cuando OpenSSL se enlaza dinámicamente (nota: por lo general, esto no es compatible y solo es necesario para las plataformas s390x de IBM). #62888 (Harry Lee).
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_replicateden 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
formatRowcon el formatoJSONy 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_analyzerestá 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 estableciendocompatibilityen24.2o deshabilitando la configuraciónallow_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ónlz4, que es más rápido; por eso establecemoszstdde forma predeterminada. Esto se controla mediante los ajustesoutput_format_parquet_compression_method,output_format_orc_compression_methodyoutput_format_arrow_compression_method. Cambiamos el valor predeterminado azstdpara 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,greatCircleDistanceygreatCircleAngleusará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 estableciendogeo_distance_returns_float64_on_float64_argumentsenfalseocompatibilityen24.2o 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, ejecuteALTER 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_msaduration_microsecondsen la tablasystem.zookeeperpara reflejar que la duración está en microsegundos. #60774 (Duc Canh Le). - Rechazar las consultas
INSERTentrantes cuando las configuraciones a nivel de consultaasync_insertydeduplicate_blocks_in_dependent_materialized_viewsestén habilitadas simultáneamente. Este comportamiento está controlado por la configuraciónthrow_if_deduplication_in_dependent_materialized_views_enabled_with_async_inserty 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-copierse 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
locateahora acepta de manera predeterminada los argumentos(needle, haystack[, start_pos]). El comportamiento anterior(haystack, needle, [, start_pos])puede restaurarse estableciendofunction_locate_has_mysql_compatible_argument_order = 0. #61092 (Robert Schulze). - Se prohíbe
SimpleAggregateFunctionenORDER BYde las tablasMergeTree(igual queAggregateFunction, ya que no son comparables) de forma predeterminada (useallow_suspicious_primary_keypara permitirlas). #61399 (Azat Khuzhin). - El motor de base de datos
Ordinaryestá 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 dezip). #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
Memorycon tamaño limitado: controladas por su configuración,min_bytes_to_keep, max_bytes_to_keep, min_rows_to_keepymax_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 aasync_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.keywordsque 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_seriescomo función de tabla (alias de compatibilidad con PostgreSQL para la función existentenumbers). 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 tipoDateTimeoDateTime64. #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
dotProductpara 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 predeterminado0.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 conORDER 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
multiIfde 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
COLUMNScon 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
WriteBufferasí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
MergeTreecomo motor de tabla predeterminado. #60524 (Alexey Milovidov) - Se habilitó
output_format_pretty_row_numbersde 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-clientaceptará la opción--output-formatcomo 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-clienty herramientas similares usaránPrettyCompactde forma predeterminada, igual que en el modo interactivo.clickhouse-clientyclickhouse-localmanejará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😇, noJson🤮, pero no nos importa si lo escriben como prefieran. - Se añadió el modo
none_only_activea la configuracióndistributed_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 COLUMNpara 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 enPREWHERE(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 consultaDESCRIBEcon la configuracióndescribe_include_virtual_columnshabilitada. #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 ySYSTEM 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
substringahora tiene el nuevo aliasbyteSlice. #60494 (Robert Schulze). - Se ha renombrado la configuración del servidor
dns_cache_max_sizeadns_cache_max_entriespara reducir la ambigüedad. #60500 (Kirill Nikiforov). SHOW INDEX | INDEXES | INDICES | KEYSya 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_msen 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óninput_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-clientyclickhouse-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 compatibilidadFROM_UNIXTIMEyDATE_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 columnaNullable(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_codecen 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 JOINpartial_merge. #61456 (Maksim Kita). - Se añadió una nueva opción de configuración
max_parser_backtracksque 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_levelause_legacy_max_level. #61545 (William Schoeffel). - Se eliminaron algunas entradas duplicadas en
system.blob_storage_log. #61622 (YenchangChan). - Se agregó la función
current_usercomo 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ó
prqlca 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
intDivpara 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
Logmediante 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
repeatcon enteros no nativos #61527 (Antonio Andelic). - Se corrigió el argumento
-sdel 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_logpara async insert con deduplicación #61620 (Antonio Andelic). - Se ha corregido una excepción
Non-ready seten 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
multiSearchAllPositionsCaseInsensitiveUTF8por 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 cno puede analizarse correctamente con la sintaxis anterior. En la nueva sintaxis, la consultaALTER 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_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_templatecomo alternativa aformat_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_replicateden 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
LZ4HCaceptará 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 queLZ4HC(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, comomerge(['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 tablasMergeTree. Puede utilizarse para introspección. Sintaxis:mergeTreeIndex(database, table, [with_marks = true]), dondedatabase.tablees una tabla existente con engineMergeTree. #58140 (Anton Popov).
Funcionalidad experimental
- Se añadió la función
seriesOutliersDetectTukeypara 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 JOINy subconsultas simples para réplicas paralelas (solo con analyzer). La nueva configuraciónparallel_replicas_prefer_local_joinelige entre la ejecución local deJOIN(de forma predeterminada) yGLOBAL JOIN. Todas las tablas deben existir en cada réplica decluster_for_parallel_replicas. Las nuevas configuracionesmin_external_table_block_size_rowsymin_external_table_block_size_bytesse 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
Replicateddurante la adición o la recuperación de una nueva réplica. #59277 (Konstantin Bogdanov). - Se implementó el operador de comparación para valores
Varianty la inserción correcta de Field en una columnaVariant. Ya no se permite crear el tipoVariantcon tipos Variant similares de forma predeterminada (se puede permitir con la configuraciónallow_suspicious_variant_types). Cierra #59996. Cierra #59850. #60198 (Kruglov Pavel). - Se deshabilitó el
JOINde 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_thresholdycommit_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
ifcuando el tipo de resultado esFloat*/Decimal*/*Int*, como continuación de https://github.com/ClickHouse/ClickHouse/pull/57885. #59148 (李扬). - Se optimiza la función
ifcuando el tipo de entrada esMap, con una mejora de velocidad de hasta ~10x. #59413 (李扬). - Mejora el rendimiento del tipo
Int8al implementar aliasing estricto (ya lo tenemos paraUInt8y todos los demás tipos enteros). #59485 (Raúl Marín). - Optimiza el rendimiento de
sum/avgcondicionales para los tiposbiginty 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
isNotNullcon AVX2. #59621 (李扬). - Mejora del rendimiento de ASOF JOIN con datos ordenados o casi ordenados. #59731 (Maksim Kita).
- El
default valueanterior de 1 MB paraasync_insert_max_data_sizeresultó 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
StorageBuffertiene 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
Prettyy 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_finalysplit_intersecting_parts_ranges_into_layers_final. Estos ajustes son necesarios para desactivar optimizaciones en consultas conFINALy 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_rowporextract_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 MATERIALIZEen una columna con una expresiónDEFAULToMATERIALIZEDahora 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_priorityenstorage_configuration. #58533 (Andrey Zvonov). - Se agregó compatibilidad con el tipo
Date32en el códecT64. #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 tablasystem.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.tablesenclickhouse-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 desystem.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_depthcon 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_bytessea 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_versiona la tabla del sistemasystem.tablespara 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 Errorcon el código de error HTTPGATEWAY_TIMEOUT. #60164 (Maksim Kita). - Ejecución con cortocircuito para
ULIDStringToDateTime. #60211 (Juan Madurga). - Se añadió la columna
query_idpara las tablassystem.backupsysystem.backup_log. Se añadió el stacktrace del error a la columnaerror. #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 = 1para ofrecer compatibilidad inmediata con QuickSight. Además, las configuracionesmysql_map_string_to_text_in_show_columnsymysql_map_fixed_string_to_text_in_show_columnsahora 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-cmakecuando 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
intDivcon argumentos Decimal #59243 (Yarik Briukhovetskyi). - Se corrige
translatecon 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::formatImplen el caso de ajustes específicos de columna… #59445 (János Benjamin Antal). - Se corrigió
SELECT * FROM [...] ORDER BY ALLcon 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
SQLitecon 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 conUNION ALL,INTERSECTyEXCEPTcuando su estructura no era lineal. Esto cierra #52349. Se corrigió el formato incorrecto de las consultasSYSTEM, incluidasSYSTEM ... DROP FILESYSTEM CACHE,SYSTEM ... REFRESH/START/STOP/CANCEL/TEST VIEWySYSTEM ENABLE/DISABLE FAILPOINT. Se corrigió el formato de las consultas DDL parametrizadas. Se corrigió el formato de la consultaDESCRIBE FILESYSTEM CACHE. Se corrigió el formato incorrecto deSET param_...(una consulta que establece un parámetro). Se corrigió el formato incorrecto de las consultasCREATE INDEX. Se corrigió el formato inconsistente deCREATE USERy consultas similares. Se corrigió el formato inconsistente deCREATE SETTINGS PROFILE. Se corrigió el formato incorrecto deALTER ... MODIFY REFRESH. Se corrigió el formato inconsistente de las funciones de ventana si los desplazamientos del marco eran expresiones. Se corrigió el formato inconsistente deRESPECT NULLSeIGNORE NULLSsi se usaban después de una función que implementa un operador (comoplus). Se corrigió el absurdo formato deSYSTEM SYNC REPLICA ... LIGHTWEIGHT FROM .... Se corrigió el formato inconsistente de las consultas no válidas conGROUP BY GROUPING SETS ... WITH ROLLUP/CUBE/TOTALS. Se corrigió el formato inconsistente deGRANT CURRENT GRANTS. Se corrigió el formato inconsistente deCREATE TABLE (... COLLATE). Además, corregí el formato incorrecto deEXPLAINen 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
cosineDistancecon 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
arrayReducecon 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_namesestá activado de forma predeterminada. Puede desactivarlo para conservar el comportamiento anterior o usarSET compatibility = '23.12'. #57726 (Alexey Milovidov). - El ajuste de MergeTree
clean_deleted_rowsestá obsoleto y ya no tiene ningún efecto. La palabra claveCLEANUPparaOPTIMIZEno está permitida de forma predeterminada (a menos queallow_experimental_replacing_merge_with_cleanupesté habilitado). #58316 (Alexander Tokmakov). - La función
reverseDNSQueryya 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.xmlen la secciónaccess_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
sumMapFilteredcon valores NaN. Los valores NaN ahora se colocan al final (en lugar de hacerlo aleatoriamente) y se consideran distintos de cualquier otro valor. Ahora-0también se trata como igual a0; dado que los valores 0 se descartan, los valores-0también se descartan. #58959 (Raúl Marín). - La función
visibleWidthse 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ónlengthUTF8, 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, establezcafunction_visible_width_behavioren0, o establezcacompatibilityen23.12o una versión anterior. #59022 (Alexey Milovidov). - El dialecto
Kustoestá deshabilitado hasta que se corrijan estos dos errores: #59037 y #59036. #59305 (Alexey Milovidov). Cualquier intento de usarKustodará lugar a una excepción. - Una implementación más eficiente del modificador
FINALya no garantiza que se preserve el orden, incluso simax_threads = 1. Si dependía del comportamiento anterior, establezcaenable_vertical_finalen 0 ocompatibilityen23.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 tipoT1,T2, …,TNo ninguno de ellos (valorNULL). El tipo Variant está disponible con la configuraciónallow_experimental_variant_type. Referencia: #54864. #58047 (Kruglov Pavel). - Ahora, ciertas configuraciones (actualmente
min_compress_block_sizeymax_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 correspondientesquantilesDDymedianDD. 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_activeythrow_only_activeparadistributed_ddl_output_mode, que permiten evitar la espera de réplicas inactivas. #58350 (Alexander Tokmakov). - Añadir la función
arrayShinglespara 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,idnaEncodeeidnaDecode, ú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,jaroSimilarityyjaroWinklerSimilarity. #58531 (Robert Schulze). - Se agregan dos ajustes:
output_format_compression_level, para cambiar el nivel de compresión de salida, youtput_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 eszstd. Se aplica aINTO OUTFILEy al escribir en las funciones de tablafile,url,hdfs,s3yazureBlobStorage. #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
autoal ajusteoutput_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_QATque 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
re2con la opciónkey_templateen 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_tablepara limitar el número de vistas materializadas asociadas a una tabla. #58068 (zhongyuankai). - Mejoras en
clickhouse-format: admite consultas INSERT conVALUES; comentarios (use--commentspara mostrarlos); y la opción--max_line_lengthpara dar formato en varias líneas solo a las consultas largas. #58246 (vdimir). - Se adjuntan todas las tablas del sistema en
clickhouse-local, incluidosystem.parts. Esto cierra #58312. #58359 (Alexey Milovidov). - Se añade compatibilidad con los tipos de datos
Enumen la funcióntransform. 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 consultaSYSTEM SYNC REPLICA LIGHTWEIGHT. El modificadorFROMhace 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
uniqExactse 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
FINALque leían con un único flujo (por ejemplo,max_threads = 1) producían una salida ordenada sin una cláusulaORDER BYespecificada explícitamente. Esto ya no está garantizado cuandoenable_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
matchahora aprovecha los índices de omisiónngrambf_v1ytokenbf_v1. #57882 (凌涛). - La evaluación de la función
matchahora aprovecha índices invertidos. #58284 (凌涛). - MergeTree
FINALno 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
multiIfcuando el tipo es Nullable. #57745 (KevinyhZou). - Se añade
SYSTEM JEMALLOC PURGEpara purgar las páginas de jemalloc no utilizadas,SYSTEM JEMALLOC [ ENABLE | DISABLE | FLUSH ] PROFILEpara controlar el perfil de jemalloc si el profiler está habilitado. Se añade el comando 4LW relacionado con jemalloc en Keeper:jmstpara volcar estadísticas de jemalloc,jmfp,jmep,jmdppara 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/MariaDBen MacOS. Esto cierra #21191. #46316 (Alexey Milovidov) (Robert Schulze). - Se deshabilita
max_rows_in_set_to_optimize_joinde 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_threadsa 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_reloadablede la tabla del sistemasystem.server_settingspor la columna (Enum8)changeable_without_restart, con los posibles valoresNo,Yes,IncreaseOnlyyDecreaseOnly. 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_msdesde la última vez que se usaron—); esto debería corregir el problema con las estadísticas desystem.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 desystem.kafka_consumers. #58310 (Azat Khuzhin). sparkBarcomo alias desparkbar. #58335 (凌涛).- Evitar enviar solicitudes
ComposeObjecttras la carga aGCS. #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
formatdevuelva un valor constante cuando recibe argumentos constantes. Esto cierra #58355. #58358 (Alexey Milovidov). - Se agrega el ajuste
max_estimated_execution_timepara diferenciarmax_execution_timedemax_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_FILEal 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 QUERYcancele copias de seguridad/restauraciones. Este PR también hace visibles ensystem.processeslas 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_timeoutynet_read_timeout.net_write_timeoutse traduce a la configuración nativasend_timeoutde ClickHouse y, de forma similar,net_read_timeoutareceive_timeout. Se corrigió un problema por el que solo era posible establecer la opción de configuración MySQLsql_select_limitsi 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) ocustom_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_directorytiene mayor prioridad para los discos personalizados quefilesystem_caches_path, que se usa si el primero no está definido. La opciónpathde 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_directoryse 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 SELECTdistribuidas 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)yCAST(x AS UNSIGNED)mediante alias de tipos de datos:SIGNEDpara Int64 yUNSIGNEDpara 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
Icebergy 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óniceberg_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 errorTABLE_IS_READ_ONLYadecuado (para evitar residuos). Evita dejar residuos en discos de escritura única (format_version.txt) duranteCREATE/ATTACH. IgnoraDROPparaReplicatedMergeTree(al igual que paraMergeTree). Corrige la iteración sobres3_plain(MetadataStorageFromPlainObjectStorage::iterateDirectory). Ten en cuenta que el disco de solo lectura esweby el de escritura única ess3_plain. #59170 (Azat Khuzhin). - Corrige un error en la columna experimental
_block_numberque podía provocar un error lógico en una combinación compleja deALTERs ymerges. 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
/binarypermite 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
FORMATen las consultasBACKUPyRESTORE. #59338 (Vitaly Baranov). - La función
concatWithSeparatorahora admite tipos de argumento arbitrarios (en lugar de solo argumentosStringyFixedString). Por ejemplo,SELECT concatWithSeparator('.', 'number', 1)ahora devuelvenumber.1. #59341 (Robert Schulze).
Mejora de compilación/pruebas/empaquetado
- Mejorar los alias del binario de ClickHouse (ahora
ch/clickhouseesclickhouse-localoclickhouse, 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.logcompleto como un archivo en lugar de solo las últimas 100k líneas.tail -n 100000a 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_emptydurante 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_namedesystem.backup_log#58550 (Daniel Pozo Escalona). toStartOfIntervalpara redondear valores en milisegundos y microsegundos #58557 (Yarik Briukhovetskyi).- Desactivar
max_joined_block_rowsen 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 INDEXde 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.tablesmediante una subconsulta en la cláusula IN. #59351 (Nikolai Kochetov).