Saltar al contenido principal

Lanzamiento de ClickHouse 22.12, 2022-12-15. Presentación, Vídeo

Esta versión contiene un comentario erróneo en el servicio systemd que podría hacer que la instalación de ClickHouse falle durante la actualización en algunas distribuciones de Linux. El servicio systemd cambia los permisos del propietario del directorio /run/systemd, lo que hace que fallen todas las operaciones posteriores de systemd. Se recomienda omitir la actualización a esta versión y, en su lugar, actualizar a una versión más reciente de ClickHouse.Consulta este problema en GitHub para obtener más detalles: https://github.com/ClickHouse/ClickHouse/issues/48285

Notas de actualización

  • Se corrigió una incompatibilidad con versiones anteriores en la (de)serialización de los estados de las funciones de agregación min, max, any*, argMin y argMax con argumento String. La incompatibilidad afecta a las ramas 22.9, 22.10 y 22.11 (corregido a partir de 22.9.6, 22.10.4 y 22.11.2, respectivamente). Algunas versiones menores de las ramas 22.3, 22.7 y 22.8 también están afectadas: 22.3.13…22.3.14 (corregido a partir de 22.3.15), 22.8.6…22.8.9 (corregido a partir de 22.8.10), 22.7.6 y posteriores (no se corregirá en 22.7; recomendamos actualizar de 22.7.* a 22.8.10 o una versión posterior). Esta nota de versión no afecta a los usuarios que nunca hayan usado las versiones afectadas. Las versiones incompatibles añaden un '\0' adicional a las cadenas al leer estados de las funciones de agregación mencionadas anteriormente. Por ejemplo, si una versión anterior guardó el estado de anyState('foobar') en state_column, la versión incompatible imprimirá 'foobar\0' en anyMerge(state_column). Además, las versiones incompatibles escriben los estados de las funciones de agregación sin el '\0' final. Las versiones más recientes (que incluyen la corrección) pueden leer correctamente los datos escritos por todas las versiones, incluidas las incompatibles, salvo en un caso límite. Si una versión incompatible guardó un estado con una cadena que realmente termina con el carácter nulo, una versión más reciente recortará el '\0' final al leer el estado de la función de agregación afectada. Por ejemplo, si una versión incompatible guardó el estado de anyState('abrac\0dabra\0') en state_column, las versiones más recientes imprimirán 'abrac\0dabra' en anyMerge(state_column). El problema también afecta a las consultas distribuidas cuando una versión incompatible funciona en un clúster junto con versiones anteriores o posteriores. #43038 (Alexander Tokmakov, Raúl Marín). Nota: todas las compilaciones oficiales de ClickHouse ya incluyen los parches. Esto no es necesariamente así en compilaciones no oficiales de terceros, que deben evitarse.

Nueva funcionalidad

  • Añade el formato de entrada/salida BSONEachRow. En este formato, ClickHouse formatea y analiza cada fila como un documento BSON independiente, y cada columna se formatea y analiza como un único campo BSON con el nombre de la columna como clave. #42033 (mark-polokhov).
  • Se añade el algoritmo JOIN grace_hash; se puede habilitar con SET join_algorithm = 'grace_hash'. #38191 (BigRedEye, Vladimir C).
  • Permite configurar reglas de complejidad de contraseñas y comprobaciones para la creación y modificación de usuarios. #43719 (Nikolay Degterinsky).
  • Enmascara la información confidencial en los logs; enmascara los fragmentos sensibles en la salida de las consultas SHOW CREATE TABLE y SELECT FROM system.tables. También resuelve #41418. #43227 (Vitaly Baranov).
  • Se añade la sintaxis GROUP BY ALL: #37631. #42265 (刘陶峰).
  • Se añade la sintaxis FROM table SELECT column. #41095 (Nikolay Degterinsky).
  • Se añadieron la función concatWithSeparator y concat_ws como alias para ofrecer compatibilidad con Spark SQL. También se añadió la función concatWithSeparatorAssumeInjective como variante para habilitar la optimización de GROUP BY, de forma similar a concatAssumeInjective. #43749 (李扬).
  • Se añadieron las funciones multiplyDecimal y divideDecimal para realizar operaciones decimales con precisión fija. #42438 (Andrey Zvonov).
  • Se añadió la tabla system.moves con la lista de las partes que se están moviendo en este momento. #42660 (Sergei Trifonov).
  • Se añade soporte para un endpoint de Prometheus integrado en ClickHouse Keeper. #43087 (Antonio Andelic).
  • Se admiten literales numéricos con _ como separador, por ejemplo, 1_000_000. #43925 (jh0x).
  • Se añadió la posibilidad de usar un array como segundo parámetro de la función cutURLParameter. Permitirá eliminar varios parámetros. Cierra #6827. #43788 (Roman Vasin).
  • Agregar a la tabla system.data_skipping_indices una columna con la expresión del índice. #43308 (Guillaume Tassery).
  • Se añade la columna engine_full a la tabla del sistema databases para que puedas acceder a la definición completa del motor de una base de datos a través de las tablas del sistema. #43468 (凌涛).
  • Se añadió una nueva función hash, xxh3. Además, se ha mejorado el rendimiento de xxHash32 y xxHash64 en ARM gracias a una actualización de la biblioteca. #43411 (Nikita Taranov).
  • Se añadió compatibilidad para definir restricciones en la configuración de MergeTree. Por ejemplo, puede impedir que los usuarios sobrescriban storage_policy. #43903 (Sergei Trifonov).
  • Se añade un nuevo ajuste input_format_json_read_objects_as_strings que permite analizar objetos JSON anidados como Strings en todos los formatos de entrada JSON. Este ajuste está deshabilitado de forma predeterminada. #44052 (Kruglov Pavel).

Funcionalidad experimental

  • Se añade compatibilidad con la deduplicación para las inserciones asíncronas. Antes de este cambio, las inserciones asíncronas no admitían deduplicación, porque varias inserciones pequeñas coexistían en un mismo lote insertado. Cierra #38075. #43304 (Han Fei).
  • Se añade compatibilidad con la distancia coseno para el índice experimental Annoy (búsqueda de similitud vectorial). #42778 (Filatenkov Artur).
  • Se añaden las consultas CREATE / ALTER / DROP NAMED COLLECTION. #43252 (Kseniia Sumarokova). Esta funcionalidad está en desarrollo y, a partir de la versión 22.12, las consultas aún no son efectivas. Esta entrada del changelog se añade solo para evitar confusiones. Se restringe el acceso predeterminado a las colecciones con nombre al usuario definido en la configuración. Para poder verlas, es necesario establecer show_named_collections = 1. #43325 (Kseniia Sumarokova). Se introduce la tabla system.named_collections #43147 (Kseniia Sumarokova).

Mejora de rendimiento

  • Se añaden los ajustes max_streams_for_merge_tree_reading y allow_asynchronous_read_from_io_pool_for_merge_tree. El ajuste max_streams_for_merge_tree_reading limita el número de flujos de lectura para las tablas MergeTree. El ajuste allow_asynchronous_read_from_io_pool_for_merge_tree habilita un pool de E/S en segundo plano para leer desde tablas MergeTree. Esto puede aumentar el rendimiento de las consultas limitadas por E/S si se usa junto con max_streams_to_max_threads_ratio o max_streams_for_merge_tree_reading. #43260 (Nikolai Kochetov). Esto mejora el rendimiento hasta 100 veces en casos de almacenamiento de alta latencia, con pocas CPU y un gran número de partes de datos.
  • Los ajustes merge_tree_min_rows_for_concurrent_read_for_remote_filesystem/merge_tree_min_bytes_for_concurrent_read_for_remote_filesystem no respetaban la granularidad adaptativa. Las filas anchas no reducían el número de filas leídas (como sí ocurría con merge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read), lo que podía provocar un alto uso de memoria al usar sistemas de archivos remotos. #43965 (Nikolai Kochetov).
  • Se optimizó el número de solicitudes de listado a ZooKeeper o ClickHouse Keeper al seleccionar una parte para fusionar. Antes, en algunos casos, esto podía generar miles de solicitudes. Corrige #43647. #43675 (Alexander Tokmakov).
  • La optimización ahora se omite si max_size_to_preallocate_for_aggregation tiene un valor demasiado pequeño. El valor predeterminado de este ajuste se incrementó a 10^8. #43945 (Nikita Taranov).
  • Se acelera el apagado del servidor al evitar la limpieza de partes de datos antiguas. Esto es innecesario después de https://github.com/ClickHouse/ClickHouse/pull/41145. #43760 (Sema Checherinda).
  • La fusión en el iniciador ahora usa el mismo enfoque limitado por memoria que la fusión de resultados de agregación locales si se establece enable_memory_bound_merging_of_aggregation_results. #40879 (Nikita Taranov).
  • Mejora de Keeper: se intenta sincronizar los registros en disco en paralelo con la replicación. #43450 (Antonio Andelic).
  • Mejora de Keeper: las solicitudes se agrupan en lotes con más frecuencia. Esta agrupación puede controlarse con el nuevo ajuste max_requests_quick_batch_size. #43686 (Antonio Andelic).

Mejora

  • Implementar dependencias referenciales y usarlas para crear tablas en el orden correcto durante la restauración a partir de una copia de seguridad. #43834 (Vitaly Baranov).
  • Se sustituyen las UDF en la consulta CREATE para evitar fallos durante la carga al inicio. Además, ahora las UDF se pueden usar como expresiones DEFAULT para las columnas. #43539 (Antonio Andelic).
  • Se cambió la forma en que las siguientes consultas eliminan partes: TRUNCATE TABLE, ALTER TABLE DROP PART, ALTER TABLE DROP PARTITION. Ahora, estas consultas crean partes vacías que cubren las partes antiguas. Esto hace que la consulta TRUNCATE funcione sin un bloqueo exclusivo posterior, lo que significa que las lecturas concurrentes no se bloquean. También se logró durabilidad en todas esas consultas. Si la solicitud se completa correctamente, no volverán a aparecer partes eliminadas más adelante. Tenga en cuenta que la atomicidad solo se garantiza dentro del ámbito de una transacción. #41145 (Sema Checherinda).
  • La consulta SET param_x ya no requiere serializar manualmente como cadena el valor del parámetro. Por ejemplo, la consulta SET param_a = '[\'a\', \'b\']' ahora puede escribirse como SET param_a = ['a', 'b']. #41874 (Nikolay Degterinsky).
  • Mostrar las filas leídas en el indicador de progreso al leer desde STDIN en el cliente. Cierra #43423. #43442 (Kseniia Sumarokova).
  • Mostrar la barra de progreso al leer desde la función de tabla / motor de S3. #43454 (Kseniia Sumarokova).
  • La barra de progreso mostrará tanto las filas leídas como las filas escritas. #43496 (Ilya Yatsishin).
  • filesystemAvailable y las funciones relacionadas admiten un argumento opcional con el nombre del disco, y filesystemFree se cambia por filesystemUnreserved. Cierra #35076. #42064 (flynn).
  • Integración con LDAP: se aumentó el valor predeterminado de search_limit a 256 y se añadió una opción de configuración del servidor LDAP para cambiarlo a cualquier valor. Cierra: #42276. #42461 (Vasily Nemkov).
  • Permite también eliminar la información sensible (consulta query_masking_rules en el archivo de configuración) de los mensajes de excepción. Resuelve #41418. #42940 (filimonov).
  • Admite consultas como SHOW FULL TABLES ... para mantener la compatibilidad con MySQL. #43910 (Filatenkov Artur).
  • Mejora de Keeper: se añadió el comando 4lw rqld, que permite asignar manualmente un nodo como líder. #43026 (JackyWoo).
  • Aplica la configuración del tiempo de espera de conexión para async INSERT de Distributed desde la consulta. #43156 (Azat Khuzhin).
  • La función unhex ahora admite argumentos de tipo FixedString. issue42369. #43207 (DR).
  • Se prioriza la eliminación de las partes completamente expiradas de acuerdo con las reglas TTL; consulte #42869. #43222 (zhongyuankai).
  • Indicación de la carga de CPU más precisa y con mayor capacidad de respuesta en clickhouse-client. #43307 (Sergei Trifonov).
  • Se admite la lectura de subcolumnas de tipos anidados desde el almacenamiento S3 y la table function s3 en formatos Parquet, Arrow y ORC. #43329 (chen).
  • Agregar la columna table_uuid a la tabla system.parts. #43404 (Azat Khuzhin).
  • Se añadió una opción en el cliente para mostrar el número de filas procesadas localmente en modo no interactivo (--print-num-processed-rows). #43407 (jh0x).
  • Se implementó la optimización aggregation-in-order sobre un plan de consulta. Está habilitada de forma predeterminada (pero solo funciona junto con optimize_aggregation_in_order, que está deshabilitada de forma predeterminada). Configure query_plan_aggregation_in_order = 0 para usar la versión anterior basada en AST. #43592 (Nikolai Kochetov).
  • Permite recopilar profile events con trace_type = 'ProfileEvent' en system.trace_log con cada incremento, junto con la pila actual, el nombre del profile event y el valor del incremento. Se puede habilitar con la opción trace_profile_events y usarse para investigar el rendimiento de las consultas. #43639 (Anton Popov).
  • Se añade una nueva opción de configuración input_format_max_binary_string_size para limitar el tamaño de las cadenas en formato RowBinary. #43842 (Kruglov Pavel).
  • Cuando ClickHouse realiza una solicitud a un servidor HTTP remoto y este devuelve un error, el código HTTP numérico no se mostraba correctamente en el mensaje de excepción. Cierra #43919. #43920 (Alexey Milovidov).
  • Informa correctamente los errores en las consultas incluso cuando se está llevando a cabo la optimización de múltiples JOINs. #43583 (Salvatore).

Mejora de compilación/pruebas/empaquetado

  • La integración con systemd ahora notifica correctamente a systemd que el servicio se ha iniciado realmente y está listo para atender solicitudes. #43400 (Коренберг Марк).
  • Se agregó la opción de compilar ClickHouse con OpenSSL mediante el OpenSSL FIPS Module. Este tipo de compilación no se ha probado para validar su seguridad y no es compatible. #43991 (Boris Kuschel).
  • Actualización al nuevo códec de compresión DeflateQpl, implementado en un PR anterior (detalles: https://github.com/ClickHouse/ClickHouse/pull/39494). Este parche mejora el códec en los siguientes aspectos: 1. Actualización de QPL v0.2.0 a QPL v0.3.0 Intel® Query Processing Library (QPL) 2. Mejora del archivo CMake para corregir problemas de compilación de QPL con QPL v0.3.0. 3. Enlace de la biblioteca QPL con libaccel-config en tiempo de compilación, en lugar de cargarla en tiempo de ejecución en QPL v0.2.0 (dlopen). 4. Se corrigió un problema de impresión de logs en CompressionCodecDeflateQpl.cpp. #44024 (jasperzhu).

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

  • Se corrigió un error que podía causar un interbloqueo al usar inserciones asíncronas. #43233 (Anton Popov).
  • Se corrige parte de la lógica incorrecta en la optimización a nivel de AST optimize_normalize_count_variants. #43873 (Duc Canh Le).
  • Corrige un caso en el que las mutaciones no progresaban cuando las sumas de comprobación no coincidían entre réplicas (p. ej., debido a un cambio en el formato de los datos durante una actualización). #36877 (nvartolomei).
  • Se corrigió la optimización skip_unavailable_shards, que no funcionaba con la función de tabla hdfsCluster. #43236 (chen).
  • Se corrige el soporte de s3 para el comodín ?. Cierra #42731. #43253 (chen).
  • Se corrigen las funciones arrayFirstOrNull y arrayLastOrNull para que devuelvan null cuando el array contiene elementos Nullable. #43274 (Duc Canh Le).
  • Corrige el cálculo incorrecto de UserTimeMicroseconds/SystemTimeMicroseconds relacionado con las tablas de Kafka. #42791 (Azat Khuzhin).
  • No se deben suprimir las excepciones en los discos web. Se corrigen los reintentos del disco web. #42800 (Azat Khuzhin).
  • Se corrigió una condición de carrera (lógica) entre las inserciones y la eliminación de vistas materializadas. Se producía una condición de carrera cuando se eliminaba una vista materializada al mismo tiempo que un INSERT: las MV aparecían como dependencia de la inserción al comienzo de la ejecución, pero la tabla ya se había eliminado cuando la cadena de inserción intentaba acceder a ella, lo que provocaba una excepción UNKNOWN_TABLE o TABLE_IS_DROPPED y detenía la inserción. Tras este cambio, evitamos estas excepciones y simplemente continuamos con la inserción si la dependencia ya no existe. #43161 (AlfVII).
  • Corrige el comportamiento indefinido en la función quantiles, que podría dar lugar al uso de memoria no inicializada. Detectado por un fuzzer. Esto cierra #44066. #44067 (Alexey Milovidov).
  • Se añadió una comprobación adicional en CompressionCodecDelta para el tamaño sin comprimir igual a cero. #43255 (Nikita Taranov).
  • Aplanar arrays de Parquet para evitar un problema con datos inconsistentes en arrays. Estos archivos defectuosos pueden ser generados por Apache Iceberg. #43297 (Arthur Passos).
  • Se corrige una conversión incorrecta de una columna LowCardinality al usar la ejecución de funciones con cortocircuito. #43311 (Kruglov Pavel).
  • Se corrigieron las consultas con SAMPLE BY con la optimización prewhere en tablas que usan el motor Merge. #43315 (Antonio Andelic).
  • Verificar y comparar el contenido del archivo format_version en MergeTreeData para que las tablas puedan cargarse incluso aunque se haya cambiado la política de almacenamiento. #43328 (Antonio Andelic).
  • Corrige el posible error lógico (muy improbable) “No column to rollback” durante INSERT en tablas Buffer. #43336 (Azat Khuzhin).
  • Corrige un error que permitía al analizador sintáctico procesar una cantidad ilimitada de paréntesis en una sola función si allow_function_parameters está activado. #43350 (Nikolay Degterinsky).
  • MaterializeMySQL (funcionalidad experimental) admite la DDL drop table t1, t2 y es compatible con la mayoría de las sentencias DDL DROP de MySQL. #43366 (zzsmdfj).
  • session_log (función experimental): Se corrigió la imposibilidad de iniciar sesión (debida a un fallo al crear la entrada de session_log) en un caso muy poco frecuente de perfiles de configuración mal definidos. #42641 (Vasily Nemkov).
  • Corrige el posible error Cannot create non-empty column with type Nothing en las funciones if/multiIf. Cierra #43356. #43368 (Kruglov Pavel).
  • Se corrigió un error cuando un filtro de nivel de fila usaba el valor predeterminado de una columna. #43387 (Alexander Gololobov).
  • La consulta con DISTINCT + LIMIT BY + LIMIT puede devolver menos filas de lo esperado. Corrige #43377. #43410 (Igor Nikonov).
  • Se corrige sumMap para Nullable(Decimal(...)). #43414 (Azat Khuzhin).
  • Se corrige date_diff para horas/minutos en macOS. Cierra #42742. #43466 (zzsmdfj).
  • Se corrigió la contabilización incorrecta de memoria causada por merges/mutations. #43516 (Azat Khuzhin).
  • Se corrigió el análisis de la clave primaria con condiciones que incluyen toString(enum). #43596 (Nikita Taranov). Este error fue detectado por @tisonkun.
  • Garantiza la consistencia cuando clickhouse-copier actualiza el estado y attach_is_done en Keeper después de completar el attach de la partición. #43602 (lzydmxy).
  • Durante la recuperación de una réplica perdida de una base de datos Replicated (funcionalidad experimental), podía darse una situación en la que fuera necesario intercambiar atómicamente los nombres de dos tablas (usar EXCHANGE). Antes intentábamos usar dos consultas RENAME, lo que, obviamente, fallaba y, además, hacía fracasar todo el proceso de recuperación de la réplica de la base de datos. #43628 (Nikita Mikhaylov).
  • Se corrige el caso en que la función s3Cluster arroja el error NOT_FOUND_COLUMN_IN_BLOCK. Cierra #43534. #43629 (chen).
  • Corrige un posible error lógico Array sizes mismatched durante el análisis de un objeto JSON con arrays que tienen los mismos nombres de clave, pero distintos niveles de anidación. Cierra #43569. #43693 (Kruglov Pavel).
  • Se corrigió una posible excepción en el caso de un GROUP BY distribuido con una columna ALIAS entre las claves de agregación. #43709 (Nikita Taranov).
  • Corrige un error que puede provocar proyecciones rotas si la replicación zero-copy (funcionalidad experimental) está habilitada y en uso. #43764 (alesapin).
  • Se corrige el uso de carga multiparte para objetos muy grandes en AWS S3. #43824 (ianton-ru).
  • Se corrigió ALTER ... RESET SETTING con ON CLUSTER. Podía haberse aplicado solo a una réplica. Corrige #43843. #43848 (Elena Torró).
  • Corrige un error lógico en JOIN con el motor de tabla Join en el lado derecho cuando se usa USING. #43963 (Vladimir C). Corrige un error en el orden incorrecto de las claves en el motor de tabla Join. #44012 (Vladimir C).
  • Corrección de Keeper: lanzar una excepción si el puerto de interservidor para Raft ya está en uso. #43984 (Antonio Andelic).
  • Corrige el argumento posicional de ORDER BY (ejemplo: ORDER BY 1, 2) cuando se podan columnas innecesarias en las subconsultas. Cierra #43964. #43987 (Kseniia Sumarokova).
  • Se corrigió la excepción cuando una subconsulta contiene HAVING pero no incluye ninguna agregación real. #44051 (Nikita Taranov).
  • Se corrige una condición de carrera en la carga multiparte en S3. Esta condición de carrera podía provocar el error Part number must be an integer between 1 and 10000, inclusive. (S3_ERROR) al restaurar a partir de una copia de seguridad. #44065 (Vitaly Baranov).

Lanzamiento de ClickHouse 22.11, 2022-11-17. Presentación, Video

Cambio incompatible con versiones anteriores

  • La familia de funciones JSONExtract ahora intentará forzar la conversión al tipo solicitado. #41502 (Márcio Martins).

Nueva funcionalidad

  • Añade compatibilidad con reintentos durante los INSERT en ReplicatedMergeTree cuando se pierde una sesión con ClickHouse Keeper. Además de mejorar la tolerancia a fallos, su objetivo es ofrecer una mejor experiencia de usuario y evitar que se le devuelva un error durante la inserción si se reinicia Keeper (por ejemplo, debido a una actualización). #42607 (Igor Nikonov).
  • Se añaden los motores de tabla Hudi y DeltaLake en modo de solo lectura, únicamente para tablas en S3. #41054 (Daniil Rubin, Kseniia Sumarokova).
  • Se agregan las funciones de tabla hudi y deltaLake. #43080 (flynn).
  • Compatibilidad con intervalos de tiempo compuestos. 1. Las operaciones de suma, resta y negación ahora están disponibles para los intervalos. En los casos en que los tipos de los intervalos sean diferentes, se transformarán en una Tuple de esos tipos. 2. Se puede sumar o restar una tupla de intervalos a un campo Date/DateTime. 3. Se añadió el análisis de intervalos con distintos tipos, por ejemplo: INTERVAL '1 HOUR 1 MINUTE 1 SECOND'. #42195 (Nikolay Degterinsky).
  • Se añadió compatibilidad con el patrón glob ** para recorrer directorios de forma recursiva en el sistema de archivos y en S3. Resuelve #36316. #42376 (SmitaRKulkarni).
  • Introducir el tipo de disco s3_plain para operaciones de escritura única y lectura múltiple. Implementar ATTACH de la tabla MergeTree para el disco s3_plain. #42628 (Azat Khuzhin).
  • Se añadieron las políticas de nivel de fila aplicadas a system.query_log. #39819 (Vladimir Chebotaryov).
  • Se añade el comando de cuatro letras csnp para crear instantáneas manualmente en ClickHouse Keeper. Además, se añadió lgif para obtener información de Raft sobre un nodo específico (p. ej., el índice de la última instantánea creada, el último índice de log confirmado). #41766 (JackyWoo).
  • Se agregó la función ascii, como en Apache Spark: https://spark.apache.org/docs/latest/api/sql/#ascii. #42670 (李扬).
  • Se añade la función pmod, que devuelve un resultado no negativo basado en el operador módulo. #42755 (李扬).
  • Añadir la función formatReadableDecimalSize. #42774 (Alejandro).
  • Se añadió la función randCanonical, similar a la función rand de Apache Spark o Impala. La función genera resultados seudoaleatorios con valores distribuidos uniformemente, independientes e idénticamente distribuidos, en [0, 1). #43124 (李扬).
  • Se agregó la función displayName, cierra #36770. #37681 (hongbin).
  • Se añade la configuración min_age_to_force_merge_on_partition_only para optimizar las partes antiguas solo a nivel de la partición completa. #42659 (Antonio Andelic).
  • Se añade una implementación genérica para las named collections con estructura arbitraria, el tipo de acceso y system.named_collections. #43147 (Kseniia Sumarokova).

mejora de rendimiento

  • La función match puede usar el índice si la condición es sobre un prefijo de cadena. Esto cierra #37333. #42458 (clarkcaoliu).
  • Se aceleran los operadores AND y OR cuando se encadenan. #42214 (Zhiguo Zhou).
  • Se admite el parsing en paralelo para el formato de entrada LineAsString. Esto mejora el rendimiento solo ligeramente. Esto cierra #42502. #42780 (Kruglov Pavel).
  • Mejora del rendimiento de ClickHouse Keeper: se mejora el rendimiento de confirmación en los casos en que muchos nodos distintos tienen estados no confirmados. Esto debería ayudar en los casos en que un nodo seguidor no puede sincronizarse con la suficiente rapidez. #42926 (Antonio Andelic).
  • Una condición como NOT LIKE 'prefix%' puede usar el índice primario. #42209 (Duc Canh Le).

Funcionalidad experimental

  • Se admite el tipo Object dentro de otros tipos, por ejemplo, Array(JSON). #36969 (Anton Popov).
  • Se ignora el evento SAVEPOINT del binlog de MySQL para MaterializedMySQL. #42931 (zzsmdfj). Se manejan (ignoran) las consultas SAVEPOINT en MaterializedMySQL. #43086 (Stig Bakken).

Mejora

  • Las consultas triviales con un LIMIT pequeño determinarán correctamente el número estimado de filas que deben leerse, de modo que el umbral se compruebe correctamente. Cierra #7071. #42580 (Han Fei).
  • Se añade soporte para parámetros interactivos en consultas INSERT VALUES. #43077 (Nikolay Degterinsky).
  • Se añadió un nuevo campo allow_readonly en system.table_functions para permitir el uso de funciones de tabla en modo readonly. Resuelve #42414 Implementación: * Se añadió un nuevo campo allow_readonly a la tabla system.table_functions. * Se actualizó para usar el nuevo campo allow_readonly y permitir el uso de funciones de tabla en modo readonly. Pruebas: * Se añadió una prueba para el sistema de archivos tests/queries/0_stateless/02473_functions_in_readonly_mode.sh Documentación: * Se actualizó la documentación en inglés de Funciones de tabla. #42708 (SmitaRKulkarni).
  • system.asynchronous_metrics ahora incluye documentación integrada. Esta documentación también se exporta a Prometheus. Se corrigió un error en las métricas de los discos cache: se calculaban solo para un disco de caché arbitrario en lugar de para todos ellos. Esto cierra #7644. #43194 (Alexey Milovidov).
  • El algoritmo de throttling cambió a token bucket. #42665 (Sergei Trifonov).
  • Se enmascaran las contraseñas y las claves secretas tanto en system.query_log como en /var/log/clickhouse-server/*.log, así como en los mensajes de error. #42484 (Vitaly Baranov).
  • Eliminar las partes cubiertas de la parte recuperada (para evitar posibles aumentos del retraso de replicación). #39737 (Azat Khuzhin).
  • Si /dev/tty está disponible, el progreso en clickhouse-client y clickhouse-local se mostrará directamente en el terminal, sin escribirse en STDERR. Esto permite ver el progreso incluso si STDERR se redirige a un archivo, y evita que el archivo se llene de secuencias de escape del terminal. El progreso puede desactivarse con --progress false. Esto cierra #32238. #42003 (Alexey Milovidov).
  • Añade compatibilidad con la entrada FixedString en las funciones de codificación base64. #42285 (ltrk2).
  • Añade las columnas bytes_on_disk y path a system.detached_parts. Cierra #42264. #42303 (chen).
  • Se mejora el uso de la estructura de la tabla de inserción en las table functions; ahora, la configuración use_structure_from_insertion_table_in_table_functions tiene un nuevo valor posible: 2, lo que significa que ClickHouse intentará determinar automáticamente si puede usar la estructura de la tabla de inserción o no. Cierra #40028. #42320 (Kruglov Pavel).
  • Corrige la ausencia de indicación de progreso en INSERT FROM INFILE. Cierra #42548. #42634 (chen).
  • Se refactorizó la función tokens para permitir establecer el número máximo de tokens devueltos para las funciones relacionadas (desactivado de forma predeterminada). #42673 (李扬).
  • Se permite usar argumentos Date32 para las funciones formatDateTime y FROM_UNIXTIME. #42737 (Roman Vasin).
  • Actualización de tzdata a 2022f. México dejará de aplicar el horario de verano excepto cerca de la frontera con EE. UU.: https://www.timeanddate.com/news/time/mexico-abolishes-dst-2022.html. Chihuahua pasará a UTC-6 durante todo el año el 2022-10-30. Fiji ya no aplica el horario de verano. Véase https://github.com/google/cctz/pull/235 y https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1995209. #42796 (Alexey Milovidov).
  • Se añade la métrica de evento FailedAsyncInsertQuery para las inserciones asíncronas. #42814 (Krzysztof Góralski).
  • Se implementó la optimización read-in-order sobre el plan de consulta. Está habilitada de forma predeterminada. Establezca query_plan_read_in_order = 0 para usar la versión anterior basada en AST. #42829 (Nikolai Kochetov).
  • Aumentar exponencialmente el tamaño de cada parte de la carga en las copias de seguridad a S3 para evitar errores relacionados con el límite máximo de 10 000 partes de la carga multiparte a S3. #42833 (Vitaly Baranov).
  • Cuando la tarea de merge está continuamente ocupada y el espacio en disco es insuficiente, no se pueden seleccionar ni eliminar las partes que han expirado por completo, lo que deriva en falta de espacio en disco. Mi idea es que, cuando expira una parte completa, no sea necesario disponer de espacio adicional en disco para garantizar la ejecución normal del TTL. #42869 (zhongyuankai).
  • Añade la función oss y el motor de tabla OSS (esto resulta conveniente para los usuarios). oss es totalmente compatible con s3. #43155 (zzsmdfj).
  • Mejora la notificación de errores en la recopilación de información relacionada con el sistema operativo para la tabla system.asynchronous_metrics. #43192 (Alexey Milovidov).
  • Modificar las tablas INFORMATION_SCHEMA para que ClickHouse pueda conectarse a sí mismo mediante el protocolo de compatibilidad con MySQL. Añadir columnas en lugar de alias (relacionado con #9769). Esto mejorará la compatibilidad con diversos clientes MySQL. #43198 (Filatenkov Artur).
  • Se agregaron algunas funciones para mejorar la compatibilidad con PowerBI cuando se conecta mediante el protocolo MySQL #42612 (Filatenkov Artur).
  • Mejora de la usabilidad del Dashboard en los cambios #42872 (Vladimir C).

Mejoras de compilación/pruebas/empaquetado

  • Ejecutar SQLancer para cada pull request y cada commit en master. SQLancer es un fuzzer de código abierto centrado en la detección automática de errores lógicos. #42397 (Ilya Yatsishin).
  • Actualizar a la última versión de zlib-ng. #42463 (Boris Kuschel).
  • Añadir soporte para probar ClickHouse server con Jepsen. Por cierto, ya tenemos soporte para probar ClickHouse Keeper con Jepsen. Este pull request lo extiende a las tablas Replicated. #42619 (Antonio Andelic).
  • Usar https://github.com/matus-chochlik/ctcache para almacenar en caché los resultados de clang-tidy. #42913 (Mikhail f. Shiryaev).
  • Antes de la corrección, RPM conservaba la configuración definida por el usuario en $file.rpmsave. Este pull request lo corrige y no reemplazará los archivos del usuario por los de los paquetes. #42936 (Mikhail f. Shiryaev).
  • Eliminar algunas bibliotecas de la imagen Docker de Ubuntu. #42622 (Alexey Milovidov).

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

  • Se actualizó el normalizador para clonar el AST del alias. Resuelve #42452 Implementación: * Se actualizó QueryNormalizer para clonar el AST del alias cuando se sustituye. Anteriormente, asignar simplemente el mismo provocaba una excepción en LogicalExpressinsOptimizer, ya que se volvía a insertar el mismo nodo padre. * Este error no se observa con el nuevo analizador (allow_experimental_analyzer), por lo que no se realizaron cambios en él. Añadí una prueba para ello. #42827 (SmitaRKulkarni).
  • Se corrige una condición de carrera en la copia de seguridad de tablas en bases de datos Lazy. #43104 (Vitaly Baranov).
  • Corrección de skip_unavailable_shards: no funcionaba con la función de tabla s3Cluster. #43131 (chen).
  • Corrección de la inferencia de esquemas en s3Cluster y mejora en hdfsCluster. #41979 (Kruglov Pavel).
  • Se corrige el manejo de los reintentos al leer desde motores de tabla URL / función de tabla. (los errores reintentables podían volver a intentarse más veces de las necesarias; los errores no reintentables provocaban un fallo de aserción en el código). #42224 (Kseniia Sumarokova).
  • Se ha reportado y corregido un fallo de segmentación relacionado con DNS & c-ares. #42234 (Arthur Passos).
  • Corrige LOGICAL_ERROR Arguments of 'plus' have incorrect data types, que puede producirse durante el análisis de PK (verificación de monotonicidad). Corrige el análisis incorrecto de PK para funciones binarias monotónicas con el primer argumento constante. #42410 (Nikolai Kochetov).
  • Corrige el análisis incorrecto de claves cuando los tipos de clave no pueden estar dentro de Nullable. Esto soluciona #42456. #42469 (Amos Bird).
  • Se corrige una errata en el nombre de una configuración que provocaba un uso incorrecto de la caché de inferencia de esquema al usar la configuración input_format_csv_use_best_effort_in_schema_inference. Cierra #41735. #42536 (Kruglov Pavel).
  • Se corrige la creación de un Set con una cabecera incorrecta cuando el tipo de datos es LowCardinality. Cierra #42460. #42579 (flynn).
  • Los valores (U)Int128 y (U)Int256 se comprobaron correctamente en PREWHERE. #42605 (Antonio Andelic).
  • Se corrigió un error en el analizador de funciones que podría haber provocado un fallo de segmentación. #42724 (Nikolay Degterinsky).
  • Se corrige el bloqueo de truncate table. #42728 (flynn).
  • Se corrigió un posible fallo en los discos web cuando el archivo no existe (o en OPTIMIZE TABLE FINAL, que con el tiempo también podía provocar el mismo error). #42767 (Azat Khuzhin).
  • Se corrige la asignación de auth_type en system.session_log para incluir SSL_CERTIFICATE entre los valores de enum. #42782 (Miel Donkers).
  • Se corrigió stack-use-after-return en la compilación con ASAN del analizador de la consulta CREATE USER. #42804 (Nikolay Degterinsky).
  • Se corrige lowerUTF8/upperUTF8 cuando había un símbolo entre los límites de 16 bytes (caso muy frecuente si tiene cadenas de más de 16 bytes de longitud). #42812 (Azat Khuzhin).
  • Se añadió una comprobación adicional de límites a la rutina de descompresión de LZ4 para corregir un comportamiento incorrecto en caso de entrada malformada. #42868 (Nikita Taranov).
  • Se corrige un bloqueo poco frecuente que podía producirse al cancelar una consulta. #42874 (Azat Khuzhin).
  • Se corrige el comportamiento incorrecto al usar múltiples disyunciones en hash join; se cierra #42832. #42876 (Vladimir C).
  • Se generará un puntero nulo al ejecutar select if as en un ‘join de tres tablas’ , por ejemplo, con esta consulta SQL: #42883 (zzsmdfj).
  • Se corrige un error detectado por el sanitizador de memoria en Cluster Discovery, se cierra #42763. #42905 (Vladimir C).
  • Mejora de la inferencia de esquema para DateTime en caso de cadena vacía. #42911 (Kruglov Pavel).
  • Corrige el poco frecuente error NOT_FOUND_COLUMN_IN_BLOCK cuando se puede usar una proyección, pero no hay ninguna disponible. Esto corrige #42771 . El error se introdujo en https://github.com/ClickHouse/ClickHouse/pull/25563. #42938 (Amos Bird).
  • Corrige ATTACH TABLE en el motor de base de datos PostgreSQL cuando la tabla contiene el tipo de datos DATETIME. Cierra #42817. #42960 (Kseniia Sumarokova).
  • Se corrige el análisis sintáctico de las expresiones lambda. Cierra #41848. #42979 (Nikolay Degterinsky).
  • Corregir el análisis incorrecto de claves cuando hay claves Nullable en medio de un hiperrectángulo. Esto corrige #43111 . #43133 (Amos Bird).
  • Corrige varias lecturas fuera de los límites del búfer en la deserialización de estados de funciones de agregación especialmente diseñados. #43159 (Raúl Marín).
  • Se corrige la función if en el caso de argumentos NULL y const Nullable. Cierra #43069. #43178 (Kruglov Pavel).
  • Se corrige el desbordamiento en la aritmética decimal al analizar DateTime con el algoritmo ‘best effort’. Cierra #43061. #43180 (Kruglov Pavel).
  • El campo indent generado por la herramienta git-import se calculó de forma incorrecta. Consulte https://clickhouse.com/docs/getting-started/example-datasets/github/. #43191 (Alexey Milovidov).
  • Se corrigió el comportamiento inesperado de los tipos Interval con las subconsultas y las conversiones de tipo. #43193 (jh0x).

Lanzamiento de ClickHouse 22.10, 2022-10-25. Presentación, Vídeo

Cambio incompatible con versiones anteriores

  • Se renombran los comandos de caché: show caches -> show filesystem caches, describe cache -> describe filesystem cache. #41508 (Kseniia Sumarokova).
  • Se elimina la compatibilidad con la sección WITH TIMEOUT de LIVE VIEW. Esto cierra #40557. #42173 (Alexey Milovidov).
  • Se elimina la compatibilidad con la macro {database} del prompt del cliente. Se mostraba de forma incorrecta si la base de datos no estaba especificada y no se actualizaba con las sentencias USE. Esto cierra #25891. #42508 (Alexey Milovidov).

Nueva funcionalidad

  • Se añade la configuración componible de protocolos. Ahora se pueden configurar distintos protocolos con diferentes direcciones de escucha. Los envoltorios de protocolo, como PROXYv1, se pueden configurar para cualquier otro protocolo (TCP, TCP seguro, MySQL, Postgres). #41198 (Yakov Olkhovskiy).
  • Añade S3 como un nuevo tipo de destino de las copias de seguridad. Admite BACKUP en S3 con la estructura path/data tal cual. #42333 (Vitaly Baranov), #42232 (Azat Khuzhin).
  • Se añadieron funciones (randUniform, randNormal, randLogNormal, randExponential, randChiSquared, randStudentT, randFisherF, randBernoulli, randBinomial, randNegativeBinomial, randPoisson) para generar valores aleatorios de acuerdo con las distribuciones especificadas. Esto resuelve #21834. #42411 (Nikita Mikhaylov).
  • Una mejora para ClickHouse Keeper: se añade compatibilidad para subir snapshots a S3. La información de S3 puede definirse dentro de keeper_server.s3_snapshot. #41342 (Antonio Andelic).
  • Se añadió una función de agregación analysisOfVariance (anova) para realizar una prueba estadística sobre varios grupos de observaciones con distribución normal a fin de determinar si todos los grupos tienen la misma media o no. PR original #37872. #42131 (Nikita Mikhaylov).
  • Se permite limitar la cantidad de datos temporales almacenados en disco mediante los ajustes max_temporary_data_on_disk_size_for_user/max_temporary_data_on_disk_size_for_query . #40893 (Vladimir C).
  • Añade la configuración format_json_object_each_row_column_for_object_name para escribir/parsear el nombre del objeto como valor de la columna en el formato JSONObjectEachRow. #41703 (Kruglov Pavel).
  • Se agrega la función hash BLAKE3 a SQL. #33435 (BoloniniD).
  • La función javaHash se ha extendido a los enteros. #41131 (JackyWoo).
  • Añade compatibilidad de OpenTelemetry a DDL ON CLUSTER (requiere que distributed_ddl_entry_format_version esté configurado en 4). #41484 (Frank Chen).
  • Se añadió la tabla del sistema asynchronous_insert_log. Contiene información sobre las inserciones asíncronas (incluidos los resultados de las consultas en modo fire-and-forget (con wait_for_async_insert=0)), lo que mejora la introspección. #42040 (Anton Popov).
  • Se añadió compatibilidad con los métodos de compresión lz4, bz2 y snappy en la cabecera Accept-Encoding de HTTP, que es una extensión no estándar del protocolo HTTP. #42071 (Nikolay Degterinsky).
  • Añade funciones de codificación y descodificación de Morton (ZCurve). #41753 (Constantine Peresypkin).
  • Se agregó compatibilidad para SET setting_name = DEFAULT. #42187 (Filatenkov Artur).

Funcionalidad experimental

  • Se agregó una nueva infraestructura para el análisis y la planificación de consultas con la configuración allow_experimental_analyzer. #31796 (Maksim Kita).
  • Implementación inicial de Kusto Query Language. No la utilice. #37961 (Yong Wang).

Mejora de rendimiento

  • Relajar el umbral de “Too many parts”. Esto cierra #6551. Ahora ClickHouse permitirá más partes en una partición si el tamaño medio de las partes es lo bastante grande (al menos 10 GiB). Esto permite tener hasta petabytes de datos en una sola partición de una sola tabla en un solo servidor, algo posible con bandejas de discos o almacenamiento de objetos. #42002 (Alexey Milovidov).
  • Implementar un analizador de precedencia de operadores para reducir el tamaño de pila necesario. #34892 (Nikolay Degterinsky).
  • La optimización DISTINCT in order aprovecha las propiedades de ordenación de los streams de datos. Esta mejora permitirá la lectura en orden para DISTINCT cuando corresponda (antes era necesario proporcionar ORDER BY para las columnas de DISTINCT). #41014 (Igor Nikonov).
  • ColumnVector: optimizar el índice UInt8 con AVX512VBMI. #41247 (Guo Wangyang).
  • Optimizar la contención de bloqueos para ThreadGroupStatus::mutex. Los experimentos de rendimiento de SSB (Star Schema Benchmark) en el dispositivo ICX (CPU Intel Xeon Platinum 8380, 80 núcleos, 160 hilos) muestran que este cambio podría aportar una mejora de 2.95x en la media geométrica del QPS de todos los subcasos. #41675 (Zhiguo Zhou).
  • Añadir capacidades ldapr a las compilaciones de AArch64. Esto es compatible con instancias de Graviton 2+, Azure y GCP. Solo apareció en clang-15 hace relativamente poco. #41778 (Daniel Kutenin).
  • Mejorar el rendimiento al comparar cadenas cuando uno de los argumentos es una cadena constante vacía. #41870 (Jiebin Sun).
  • Optimizar insertFrom de ColumnAggregateFunction para compartir Aggregate State en algunos casos. #41960 (flynn).
  • Acelerar la escritura en discos azure_blob_storage (respetar max_single_part_upload_size en lugar de escribir un bloque por cada tamaño de búfer). La ineficiencia se mencionó en #41754. #42041 (Kseniia Sumarokova).
  • Hacer que los ID de hilo de la lista de procesos y de query_log sean únicos para evitar desperdicio. #42180 (Alexey Milovidov).
  • Permitir omitir por completo la caché (tanto la descarga a la caché como la lectura de datos en caché) si el rango de lectura solicitado supera el umbral definido por la configuración de caché bypass_cache_threashold; requiere habilitarlo con enable_bypass_cache_with_threshold. #42418 (Han Shukai). Esto ayuda en discos locales lentos.

Mejora

  • Se añade la configuración allow_implicit_no_password: en combinación con allow_no_password, prohíbe crear un usuario sin contraseña a menos que se especifique explícitamente IDENTIFIED WITH no_password. #41341 (Nikolay Degterinsky).
  • Keeper integrado siempre se iniciará en segundo plano, lo que permitirá iniciar ClickHouse sin necesidad de alcanzar quorum. #40991 (Antonio Andelic).
  • Se hizo más ágil el restablecimiento de una nueva connection a ZooKeeper en caso de que expirara la anterior. Antes había una task que se ejecutaba cada minuto de forma predeterminada y, por lo tanto, una table podía quedar en estado readonly durante aproximadamente ese tiempo. #41092 (Nikita Mikhaylov).
  • Ahora las proyecciones pueden usarse con la replicación zero-copy (la replicación zero-copy es una funcionalidad no apta para producción). #41147 (alesapin).
  • Se admite la expresión (EXPLAIN SELECT ...) en una subconsulta. Consultas como SELECT * FROM (EXPLAIN PIPELINE SELECT col FROM TABLE ORDER BY col) ahora son válidas. #40630 (Vladimir C).
  • Permite cambiar async_insert_max_data_size o async_insert_busy_timeout_ms en el ámbito de la consulta. Por ejemplo, si un usuario inserta datos con poca frecuencia y no tiene acceso a la configuración del servidor para ajustar las opciones predeterminadas. #40668 (Nikita Mikhaylov).
  • Mejoras en la lectura desde sistemas de archivos remotos; ahora se puede configurar el tamaño del threadpool para lecturas y escrituras. Cierra #41070. #41011 (Kseniia Sumarokova).
  • Compatibilidad con todas las combinaciones de combinadores en el versionado de WindowTransform/arratReduce*/initializeAggregation/funciones de agregación. Anteriormente, combinadores como ForEach/Resample/Map no funcionaban en estos casos; usarlos provocaba una excepción como State function ... inserts results into non-state column. #41107 (Kruglov Pavel).
  • Se añadió la función tryDecrypt, que devuelve NULL si el descifrado falla (p. ej., al descifrar con una clave incorrecta) en lugar de lanzar una excepción. #41206 (Duc Canh Le).
  • Agrega la columna unreserved_space a la tabla system.disks para comprobar cuánto espacio queda sin reservar en cada disco. #41254 (filimonov).
  • Compatibilidad con encabezados de autorización de S3 en los argumentos de la función de tabla. #41261 (Kseniia Sumarokova).
  • Se añadió compatibilidad con MultiRead en Keeper y en el cliente interno de ZooKeeper (se trata de una extensión del protocolo de ZooKeeper, disponible solo en ClickHouse Keeper). #41410 (Antonio Andelic).
  • Se añade compatibilidad para comparar el tipo decimal con un literal de punto flotante en el operador IN. #41544 (liang.huang).
  • Permitir valores de tamaño legibles (como 1TB) en la configuración de la caché. #41688 (Kseniia Sumarokova).
  • ClickHouse podía almacenar en caché entradas DNS desactualizadas durante cierto tiempo (15 segundos de forma predeterminada) hasta que la caché se actualizara de forma asíncrona. Durante esos períodos, ClickHouse podía, no obstante, intentar establecer una conexión y generar errores. Este comportamiento se ha corregido. #41707 (Nikita Mikhaylov).
  • Se añadió una búsqueda interactiva en el historial con una utilidad tipo fzf (fzf/sk) para clickhouse-client/clickhouse-local (ten en cuenta que también puedes usar FZF_DEFAULT_OPTS/SKIM_DEFAULT_OPTIONS para configurar su comportamiento). #41730 (Azat Khuzhin).
  • Permitir que los clientes que se conecten a un servidor seguro con un certificado no válido continúen únicamente con la marca ‘—accept-certificate’. #41743 (Yakov Olkhovskiy).
  • Se añade la función tryBase58Decode, similar a la función existente tryBase64Decode. #41824 (Robert Schulze).
  • Mejora la información proporcionada al reemplazar una partición con una clave primaria distinta. Corrige #34798. #41838 (Salvatore).
  • Se corrige el parsing paralelo: el segmentador ahora comprueba max_block_size. Esto corrige la sobreasignación de memoria en caso de parsing paralelo y con un LIMIT pequeño. #41852 (Vitaly Baranov).
  • No añadir la excepción “TABLE_IS_DROPPED” a system.errors si se produjo durante un SELECT en una tabla del sistema y se ignoró. #41908 (AlfVII).
  • Se mejora la opción enable_extended_results_for_datetime_functions para devolver resultados de tipo DateTime64 en las funciones toStartOfDay, toStartOfHour, toStartOfFifteenMinutes, toStartOfTenMinutes, toStartOfFiveMinutes, toStartOfMinute y timeSlot. #41910 (Roman Vasin).
  • Mejora la inferencia del tipo DateTime para formatos de texto. Ahora respeta la configuración date_time_input_format y no intenta inferir fechas y horas a partir de números como marcas de tiempo. Cierra #41389 Cierra #42206. #41912 (Kruglov Pavel).
  • Se eliminó la advertencia confusa al insertar con perform_ttl_move_on_insert = false. #41980 (Vitaly Baranov).
  • Permitir que el usuario escriba countState(*), de forma similar a count(*). Esto cierra #9338. #41983 (Amos Bird).
  • Se corrige el desbordamiento de tamaño de rankCorr. #42020 (Duc Canh Le).
  • Se añadió una opción para especificar cualquier cadena como nombre del entorno en la configuración de Sentry, para obtener informes más prácticos. #42037 (Nikita Mikhaylov).
  • Se corrige el análisis de valores Date fuera de rango en CSV. #42044 (Andrey Zvonov).
  • parseDataTimeBestEffort ahora admite el uso de una coma entre la fecha y la hora. Cierra #42038. #42049 (flynn).
  • Se ha mejorado el proceso de recuperación de réplicas obsoletas para ReplicatedMergeTree. Si una réplica perdida tiene algunas partes que no están presentes en una réplica sana, pero estas partes deberían aparecer en el futuro según la cola de replicación de la réplica sana, la réplica perdida conservará esas partes en lugar de separarlas. #42134 (Alexander Tokmakov).
  • Se añade la posibilidad de usar argumentos Date32 para la función date_diff. Se corrige un problema en la función date_diff al usar argumentos DateTime64 con una fecha de inicio anterior a la época Unix y una fecha de finalización posterior a la época Unix. #42308 (Roman Vasin).
  • Al cargar partes grandes en Minio, ‘Complete Multipart Upload’ puede tardar bastante. Minio envía heartbeats cada 10 segundos (consulta https://github.com/minio/minio/pull/7198). Pero ClickHouse agota el tiempo de espera antes, porque el timeout predeterminado de envío/recepción está configurado en 5 segundos. #42321 (filimonov).
  • Corrige un caso poco frecuente de conversión no válida de tipos de estado de agregación con tipos complejos como Decimal. Esto corrige #42408. #42417 (Amos Bird).
  • Permitir el uso de argumentos Date32 en la función dateName. #42554 (Roman Vasin).
  • Ahora, los filtros con literales NULL se usarán durante el análisis de índices. #34063. #41842 (Amos Bird).
  • Fusionar partes si cada parte del rango es más antigua que un umbral determinado. El umbral puede establecerse mediante min_age_to_force_merge_seconds. Esto cierra #35836. #42423 (Antonio Andelic). Esto es una continuación de #39550i de @fastio, quien implementó la mayor parte de la lógica.
  • Se añadió una nueva infraestructura para el análisis y la planificación de consultas, controlada por la configuración allow_experimental_analyzer. #31796 (Maksim Kita).
  • Mejora el tiempo de recuperación de las conexiones perdidas con Keeper. #42541 (Raúl Marín).

Mejora de compilación/pruebas/empaquetado

  • Se añadió un fuzzer para definiciones de tablas #40096 (Anton Popov). Esto representa el mayor avance en las pruebas de ClickHouse en lo que va de año.
  • Se ha lanzado la versión Beta del servicio ClickHouse Cloud: https://console.clickhouse.cloud/. Proporciona la forma más sencilla de usar ClickHouse (incluso algo más fácil que la instalación con un solo comando).
  • Se añadió al AST Fuzzer compatibilidad con la generación de cláusulas WHERE, así como la posibilidad de añadir o eliminar ORDER BY y la cláusula WHERE. #38519 (Ilya Yatsishin).
  • Los binarios Aarch64 ahora requieren al menos ARMv8.2, introducido en 2016. En particular, esto permite usar ARM LSE, es decir, operaciones atómicas nativas. Además, se ha añadido la opción de compilación de CMake “NO_ARMV81_OR_HIGHER” para permitir compilar binarios para hardware ARMv8.0 más antiguo, por ejemplo, Raspberry Pi 4. #41610 (Robert Schulze).
  • Se permite compilar ClickHouse con Musl (pequeños cambios tras haberse añadido compatibilidad previamente, aunque estaba roto). #41987 (Alexey Milovidov).
  • Se añadió la comprobación del archivo $CLICKHOUSE_CRONFILE para evitar ejecutar el comando sed y encontrarse con el error de archivo no encontrado durante la instalación. #42081 (Chun-Sheng, Li).
  • Se actualizó cctz a 2022e para admitir los nuevos cambios en las zonas horarias. Las transiciones de Palestina ahora son los sábados a las 02:00. Se simplifican tres zonas de Ucrania en una sola. Jordania y Siria pasan de +02/+03 con DST a +03 durante todo el año. (https://data.iana.org/time-zones/tzdb/NEWS). Con esto se cierra #42252. #42327 (Alexey Milovidov). #42273 (Dom Del Nano).
  • Se añadió compatibilidad con código Rust en ClickHouse, con la biblioteca de funciones hash BLAKE3 como ejemplo. #33435 (BoloniniD).

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

  • Elija el método de agregación adecuado para LowCardinality con tipos enteros grandes. #42342 (Duc Canh Le).
  • Varias correcciones en el disco web. #41652 (Kseniia Sumarokova).
  • Corrige un problema que hace que docker run falle si https_port no está presente en la configuración. #41693 (Yakov Olkhovskiy).
  • Las mutaciones no se cancelaban correctamente al apagar el servidor o al ejecutar la consulta SYSTEM STOP MERGES, y la cancelación podía tardar mucho; ya se ha corregido. #41699 (Alexander Tokmakov).
  • Se corrige el resultado incorrecto de las consultas con ORDER BY o GROUP BY sobre columnas del prefijo de la clave de ordenación, envueltas en funciones monotónicas, con la optimización “read in order” habilitada (configuraciones optimize_read_in_order y optimize_aggregation_in_order). #41701 (Anton Popov).
  • Se corrige un posible fallo en SELECT desde una tabla Merge con la opción optimize_monotonous_functions_in_order_by habilitada. Corrige #41269. #41740 (Nikolai Kochetov).
  • Se corrigió el error “Part … intersects part …” que podía producirse en casos extremadamente raros si una réplica se reiniciaba justo después de separar alguna parte como dañada. #41741 (Alexander Tokmakov).
  • No se permite crear ni modificar tablas de MergeTree con el nombre de columna _row_exists, que está reservado para la eliminación ligera. Corregido en #41716. #41763 (Jianmei Zhang).
  • Se corrige un error por el que faltaban cabeceras CORS en algunas respuestas HTTP. #41792 (Frank Chen).
  • Es posible que 22.9 no inicie una tabla ReplicatedMergeTree si esa tabla se creó con la versión 20.3 o anterior y nunca se modificó; ya está corregido. Corrige #41742. #41796 (Alexander Tokmakov).
  • Cuando el envío de un lote falla por algún motivo, no puede recuperarse automáticamente y, si no se procesa a tiempo, se irá acumulando; además, el mensaje de error impreso será cada vez más largo, lo que acabará bloqueando el hilo HTTP. #41813 (zhongyuankai).
  • Corrige las partes compactas con la configuración de marcas comprimidas. Corrige #41783 y #41746. #41823 (alesapin).
  • Las versiones antiguas de la base de datos Replicated no tienen un marcador especial en [Zoo]Keeper. Solo hay que comprobar si el nodo contiene ciertos datos poco habituales en lugar de una marca especial. #41875 (Nikita Mikhaylov).
  • Corregida una posible excepción en la caché de fs. #41884 (Kseniia Sumarokova).
  • Se corrige use_environment_credentials para la función de tabla S3. #41970 (Kseniia Sumarokova).
  • Se corrigió el error “El directorio ya existe y no está vacío” al separar una parte dañada que podía impedir que la tabla ReplicatedMergeTree iniciara la replicación. Corrige #40957. #41981 (Alexander Tokmakov).
  • toDateTime64 ahora devuelve el mismo resultado con argumentos enteros negativos y de coma flotante. #42025 (Robert Schulze).
  • Se corrige la escritura en azure_blob_storage. Soluciona parcialmente #41754. #42034 (Kseniia Sumarokova).
  • Corrige el problema de decodificación de bzip2 en archivos bzip2 específicos. #42046 (Nikolay Degterinsky).
  • Se corrigió la función SQL toLastDayOfMonth con la configuración “enable_extended_results_for_datetime_functions = 1” al inicio del rango extendido (enero de 1900). - Se corrigió la función SQL “toRelativeWeekNum()” con la configuración “enable_extended_results_for_datetime_functions = 1” al final del rango extendido (diciembre de 2299). - Se mejoró el rendimiento de las funciones SQL “toISOYear()”, “toFirstDayNumOfISOYearIndex()” y “toYearWeekOfNewyearMode()” al evitar operaciones aritméticas innecesarias con índices. #42084 (Roman Vasin).
  • El número máximo de fetches para cada tabla se estableció accidentalmente en 8, mientras que el tamaño del pool podía ser mayor. Ahora, el número máximo de fetches para la tabla es igual al tamaño del pool. #42090 (Nikita Mikhaylov).
  • Una tabla podía desactivarse y un Diccionario podía pasar al estado detached antes de comprobar si podían eliminarse sin romper las dependencias; esto se ha corregido. Corrige #41982. #42106 (Alexander Tokmakov).
  • Corrige una importante ineficiencia de remote_filesystem_read_method=read con la caché del sistema de archivos. Cierra #42125. #42129 (Kseniia Sumarokova).
  • Se corrige una posible excepción por timeout en consultas distribuidas con use_hedged_requests = 0. #42130 (Azat Khuzhin).
  • Se corrigió un error menor en la función runningDifference al usarla con el tipo Date32. Anteriormente se usaba Date, lo que podía provocar algunos errores lógicos como Bad cast from type DB::ColumnVector<int> to DB::ColumnVector<unsigned short>'. #42143 (Alfred Xu).
  • Se corrigió la reutilización de archivos > 4 GB de la copia de seguridad base. #42146 (Azat Khuzhin).
  • DISTINCT in order genera LOGICAL_ERROR si la primera columna de la clave de ordenación contiene una función. #42186 (Igor Nikonov).
  • Soluciona un error con las proyecciones y la configuración aggregate_functions_null_for_empty. Este error es muy poco frecuente y solo aparece si habilitas la configuración aggregate_functions_null_for_empty en la configuración del servidor. Esto cierra #41647. #42198 (Alexey Milovidov).
  • Se corrigió la lectura desde tablas Buffer con lectura en orden descendente. #42236 (Duc Canh Le).
  • Se corrige un error que impedía que ClickHouse se iniciara cuando se establecía background_pool_size setting en el perfil predeterminado, pero no background_merges_mutations_concurrency_ratio. #42315 (nvartolomei).
  • ALTER UPDATE de una parte adjunta (con columnas distintas del esquema de la tabla) podía crear metadatos columns.txt no válidos en disco. La lectura de esa parte podía generar errores o devolver datos no válidos. Corrige #42161. #42319 (Nikolai Kochetov).
  • La configuración additional_table_filters no se aplicaba al almacenamiento Distributed. Soluciona #41692. #42322 (Nikolai Kochetov).
  • Se corrige una condición de carrera al finalizar/cancelar la consulta. Esto cierra #42346. #42362 (Alexey Milovidov).
  • Se revierte #40217, que introdujo una regresión en las funciones de fecha/hora. #42367 (Alexey Milovidov).
  • Corrige un assert en cast en join con una condición falsa, cierra #42380. #42407 (Vladimir C).
  • Corrige un desbordamiento de búfer al procesar tipos de datos Decimal. Esto cierra #42451. #42465 (Alexey Milovidov).
  • AggregateFunctionQuantile ahora funciona correctamente con columnas UInt128. Anteriormente, el estado del cuantíl interpretaba las columnas UInt128 como Int128, lo que podía dar lugar a resultados incorrectos. #42473 (Antonio Andelic).
  • Se corrige el fallo de aserción bad_cast al hacer INSERT en índices Annoy sobre columnas que no son Float32. Los índices Annoy son una funcionalidad experimental. #42485 (Robert Schulze).
  • El operador aritmético con Date o DateTime y enteros de 128 o 256 bits hacía referencia a memoria sin inicializar. #42453. #42573 (Alexey Milovidov).
  • Se corrigió un error inesperado al cargar tablas cuando la clave de partición contiene nombres de funciones alias durante la actualización del servidor. #36379 (Amos Bird).

Lanzamiento de ClickHouse 22.9, 2022-09-22. Presentación, Vídeo

Cambio incompatible con versiones anteriores

  • La actualización de la versión 20.3 o anteriores a la 22.9 o posteriores debe realizarse a través de una versión intermedia si hay alguna tabla ReplicatedMergeTree; de lo contrario, el servidor con la nueva versión no se iniciará. #40641 (Alexander Tokmakov).
  • Se eliminan las funciones accurate_Cast y accurate_CastOrNull (se diferencian de accurateCast y accurateCastOrNull por el guion bajo en el nombre y no se ven afectadas por el valor de la configuración cast_keep_nullable). Estas funciones no estaban documentadas, no se probaban, no se usaban y no eran necesarias. Parecían seguir activas debido a la generalización del código. #40682 (Alexey Milovidov).
  • Se añade una prueba para garantizar que toda nueva función de tabla quede documentada. Véase #40649. Se cambia el nombre de la función de tabla MeiliSearch a meilisearch. #40709 (Alexey Milovidov).
  • Se añade una prueba para garantizar que toda nueva función quede documentada. Véase #40649. Las funciones lemmatize, synonyms y stem no distinguían entre mayúsculas y minúsculas por error. Ahora sí las distinguen. #40711 (Alexey Milovidov).
  • Por motivos de seguridad y estabilidad, los modelos de catboost ya no se evalúan dentro del servidor de ClickHouse. En su lugar, la evaluación ahora se realiza en clickhouse-library-bridge, un proceso independiente que carga la biblioteca de catboost y se comunica con el proceso del servidor mediante HTTP. #40897 (Robert Schulze).
  • Se hace más convencional la interpretación de las configuraciones YAML. #41044 (Vitaly Baranov).

Nueva funcionalidad

  • Compatibilidad con insert_quorum = 'auto' para usar el número de la mayoría. #39970 (Sachin).
  • Añade dashboards integrados a servidor de ClickHouse. Este es un proyecto de demostración sobre cómo lograr el 90 % de los resultados con el 1 % del esfuerzo usando funcionalidades de ClickHouse. #40461 (Alexey Milovidov).
  • Se añadió el nuevo tipo de capacidad de escritura para restricciones de settings changeable_in_readonly. #40631 (Sergei Trifonov).
  • Añade compatibilidad con INTERSECT DISTINCT y EXCEPT DISTINCT. #40792 (Duc Canh Le).
  • Añade un nuevo formato de entrada/salida JSONObjectEachRow - Compatibilidad con la importación para los formatos JSON/JSONCompact/JSONColumnsWithMetadata. Añade el nuevo ajuste input_format_json_validate_types_from_metadata, que controla si se debe comprobar que los tipos de datos de los metadatos coincidan con los tipos de datos del encabezado. - Añade el nuevo ajuste input_format_json_validate_utf8; cuando está habilitado, todos los formatos JSON validarán las secuencias UTF-8. Estará deshabilitado de forma predeterminada. Ten en cuenta que este ajuste no influye en los formatos de salida JSON/JSONCompact/JSONColumnsWithMetadata, que siempre validan las secuencias UTF-8 (esta excepción se hizo por razones de compatibilidad). - Añade el nuevo ajuste input_format_json_read_numbers_as_strings , que permite interpretar números en una columna String; este ajuste está deshabilitado de forma predeterminada. - Añade el nuevo ajuste output_format_json_quote_decimals, que permite generar decimales entre comillas dobles; está deshabilitado de forma predeterminada. - Permite interpretar decimales entre comillas dobles durante la importación de datos. #40910 (Kruglov Pavel).
  • Se admiten parámetros de consulta en la consulta DESCRIBE TABLE. #40952 (Nikita Taranov).
  • Añade compatibilidad con Parquet Time32/64 convirtiéndolo en DateTime64. Parquet time32/64 representa el tiempo transcurrido desde la medianoche, mientras que DateTime32/64 representa una marca de tiempo Unix real. La conversión simplemente aplica un desplazamiento desde 0. #41333 (Arthur Passos).
  • Implementa operaciones de conjuntos en Apache Datasketches. #39919 (Fangyuan Deng). Nota: no tiene sentido usar Apache Datasketches; son inferiores a ClickHouse y solo tienen sentido para la integración con otros sistemas.
  • Permite registrar errores en un archivo especificado mientras se leen formatos de texto (CSV, TSV). #40516 (zjial).

Funcionalidad experimental

  • Se añade un índice ANN (vecino más cercano aproximado) basado en Annoy. #40818 (Filatenkov Artur). #37215 (VVMak).
  • Se añade un nuevo motor de almacenamiento, KeeperMap, que usa ClickHouse Keeper o ZooKeeper como almacén clave-valor. #39976 (Antonio Andelic). Este motor de almacenamiento está pensado para almacenar una pequeña cantidad de metadatos.
  • Mejora para las partes de datos en memoria: se eliminan los archivos WAL completamente procesados. #40592 (Azat Khuzhin).

Mejora del rendimiento

  • Implementación de la compresión de las marcas y de la clave primaria. Cierra #34437. #37693 (zhongyuankai).
  • Permite cargar los marks por adelantado mediante un pool de hilos. Se controla con la configuración load_marks_asynchronously (predeterminado: 0). #40821 (Kseniia Sumarokova).
  • El sistema de archivos virtual sobre S3 usará nombres aleatorios para los objetos, distribuidos entre varios prefijos de ruta, para mejorar el rendimiento en AWS. #40968 (Alexey Milovidov).
  • Considerar el valor de max_block_size al generar resultados de agregación de un solo nivel. Permite ejecutar los pasos posteriores del plan de consulta con más hilos. #39138 (Nikita Taranov).
  • La precarga por software se usa en la agregación para acelerar las operaciones con tablas hash. Está controlada por la configuración enable_software_prefetch_in_aggregation, habilitada de forma predeterminada. #39304 (Nikita Taranov).
  • Mejor soporte para optimize_read_in_order cuando algunas de las columnas de la clave de ordenación son siempre constantes tras aplicar la cláusula WHERE. Por ejemplo, una consulta como SELECT ... FROM table WHERE a = 'x' ORDER BY a, b, donde table tiene la definición de almacenamiento MergeTree ORDER BY (a, b). #38715 (Anton Popov).
  • Filtrar entre sí los flujos combinados para full_sorting_join antes de ordenarlos. #39418 (Vladimir C).
  • Descompresión LZ4 optimizada al omitir el procesamiento de literales vacíos. #40142 (Nikita Taranov).
  • Se acelera el proceso de copia de seguridad usando copy nativo cuando es posible, en lugar de copiar a través de la memoria de clickhouse-server. #40395 (alesapin).
  • Evitar obtener una instantánea de almacenamiento para cada bloque de INSERT (mejora ligeramente el rendimiento). #40638 (Azat Khuzhin).
  • Se implementa el procesamiento por lotes para funciones de agregación con varios argumentos Nullable. #41058 (Raúl Marín).
  • Acelera la lectura de UniquesHashSet (uniqState, por ejemplo, desde disco). #41089 (Raúl Marín).
  • Se corrigió el alto consumo de memoria al ejecutar mutaciones de partes compactas en tablas con un gran número de columnas. #41122 (lthaooo).
  • Se habilita la biblioteca vectorscan en ARM, lo que acelera la evaluación de expresiones regulares. #41033 (Robert Schulze).
  • Se actualiza vectorscan a la versión 5.4.8, que incluye numerosas optimizaciones de rendimiento para acelerar la evaluación de expresiones regulares. #41270 (Robert Schulze).
  • Se corrige el fallback incorrecto que hacía que se omitiera la caché local del sistema de archivos para VFS (como S3) y que ocurría con un nivel de concurrencia muy alto. #40420 (Kseniia Sumarokova).
  • Si el filtro de ROW POLICY es siempre falso, devuelve de inmediato un resultado vacío sin leer ningún dato. Esto cierra #24012. #40740 (Amos Bird).
  • El JOIN hash paralelo para tipos de datos Float podría no ser óptimo. Mejorarlo. #41183 (Alexey Milovidov).

Mejora

  • Durante el inicio y la llamada a ATTACH, las tablas ReplicatedMergeTree estarán en modo readonly hasta que se establezca la conexión con ZooKeeper y finalice la configuración. #40148 (Antonio Andelic).
  • Se añade la opción enable_extended_results_for_datetime_functions para que las funciones toStartOfYear, toStartOfISOYear, toStartOfQuarter, toStartOfMonth, toStartOfWeek, toMonday y toLastDayOfMonth devuelvan resultados de tipo Date32 cuando el argumento sea Date32 o DateTime64; de lo contrario, devuelven resultados de tipo Date. Por motivos de compatibilidad, el valor predeterminado es ‘0’. #41214 (Roman Vasin).
  • Por motivos de seguridad y estabilidad, los modelos de CatBoost ya no se evalúan dentro del servidor ClickHouse. En su lugar, ahora la evaluación se realiza en clickhouse-library-bridge, un proceso independiente que carga la biblioteca catboost y se comunica con el proceso del servidor a través de HTTP. La función modelEvaluate() fue sustituida por catboostEvaluate(). #40897 (Robert Schulze). #39629 (Robert Schulze).
  • Se agregan más métricas para los datos temporales en disco; se cierra #40206. #40239 (Vladimir C).
  • Se añade la opción de configuración warning_supress_regexp, se cierra #40330. #40548 (Vladimir C).
  • Añade un ajuste para desactivar el límite de kafka_num_consumers. Cierra #40331. #40670 (Kruglov Pavel).
  • Soporte de SETTINGS en la consulta DELETE .... #41533 (Kseniia Sumarokova).
  • Eventos de perfil de S3 detallados DiskS3*, desglosados por llamada a la API de S3 para ObjectStorage. #41532 (Sergei Trifonov).
  • Dos nuevas métricas en system.asynchronous_metrics: NumberOfDetachedParts y NumberOfDetachedByUserParts. #40779 (Sema Checherinda).
  • Se permiten CONSTRAINTs en las tablas ODBC y JDBC. #34551 (Alexey Milovidov).
  • No se imprime SETTINGS más de una vez durante el formateo de la consulta si no aparecía varias veces en la consulta original. #38900 (Raúl Marín).
  • Mejora la propagación del contexto de trazas (OpenTelemetry) entre hilos. #39010 (Frank Chen).
  • ClickHouse Keeper: añadir listeners para interserver_listen_host solo en Keeper si se especifica. #39973 (Antonio Andelic).
  • Mejora la recuperación del almacenamiento Replicated para el acceso de usuarios tras errores. #39977 (Vitaly Baranov).
  • Se agregó compatibilidad con TTL en EmbeddedRocksDB. #39986 (Lloyd-Pottiger).
  • Añadir la inferencia de esquema a clickhouse-obfuscator, para que el argumento --structure deje de ser obligatorio. #40120 (Nikolay Degterinsky).
  • Mejoras y correcciones en los diccionarios en formato Arrow. #40173 (Kruglov Pavel).
  • Conversión más natural de Date32, DateTime64 y Date a tipos más reducidos: cuando queda fuera del rango normal, se toma el valor normal superior o inferior. #40217 (Andrey Zvonov).
  • Se corrige el caso en el que la tabla Merge sobre una View no puede usar un índice. #40233 (Duc Canh Le).
  • Nombres de claves personalizados para los logs del servidor en JSON. #40251 (Mallik Hassan).
  • Ahora es posible establecer un código de error personalizado para la excepción lanzada por la función throwIf. #40319 (Robert Schulze).
  • Mejora de la caché de inferencia de esquemas; se respeta la configuración de formato que puede cambiar el esquema. #40414 (Kruglov Pavel).
  • Permitir interpretar Date como DateTime y DateTime64. Esto implementa la mejora propuesta en #36949. #40474 (Alexey Milovidov).
  • Se permite la conversión desde String con DateTime64, como 2022-08-22 01:02:03.456, a Date y Date32. Se permite la conversión desde String con DateTime, como 2022-08-22 01:02:03, a Date32. Esto cierra #39598. #40475 (Alexey Milovidov).
  • Mejor compatibilidad con estructuras de datos anidadas en formato Parquet #40485 (Arthur Passos).
  • Permite leer Array(Record) en una tabla anidada aplanada en Avro. #40534 (Kruglov Pavel).
  • Se añade compatibilidad de solo lectura para EmbeddedRocksDB. #40543 (Lloyd-Pottiger).
  • Se valida el parámetro del método de compresión del motor de tabla URL. #40600 (Frank Chen).
  • Mejor detección del formato para la función de tabla/motor url cuando hay una cadena de consulta después del nombre de archivo. Cierra #40315. #40636 (Kruglov Pavel).
  • Se deshabilitó la proyección cuando se usa grouping set. Generaba resultados incorrectos. Esto corrige #40635. #40726 (Amos Bird).
  • Se corrige el formato incorrecto del transformador de columnas APPLY, que puede dañar los metadatos si se utiliza en la definición de una tabla. Esto corrige #37590. #40727 (Amos Bird).
  • Se añadió compatibilidad con el descriptor %z para formatear el desfase de la zona horaria en formatDateTime. #40736 (Cory Levy).
  • El modo interactivo de clickhouse-client ahora interpreta . y / como “ejecutar el último comando”. #40750 (Robert Schulze).
  • Se corrige un problema al pasar los tiempos de espera de MySQL para el motor de base de datos MySQL y la función de tabla MySQL. Cierra #34168. #40751 (Kseniia Sumarokova).
  • Crear un archivo de estado para el directorio de la caché del sistema de archivos, a fin de garantizar que los directorios de caché no se compartan entre distintos servidores o cachés. #40820 (Kseniia Sumarokova).
  • Se añadió compatibilidad con DELETE y UPDATE en el motor de almacenamiento EmbeddedRocksDB. #40853 (Antonio Andelic).
  • ClickHouse Keeper: se corrige el cierre durante un commit largo y se aumenta el tamaño de solicitud permitido. #40941 (Antonio Andelic).
  • Se corrige una condición de carrera en WriteBufferFromS3 y se añaden anotaciones de TSA. #40950 (Kseniia Sumarokova).
  • Los conjuntos de agrupación con group_by_use_nulls solo deben convertir en Nullable las columnas clave. #40997 (Duc Canh Le).
  • Mejora la observabilidad de INSERT en una tabla distribuida. #41034 (Frank Chen).
  • Más métricas de bajo nivel sobre la interacción con S3. #41039 (mateng915).
  • Se admite una ruta relativa en el encabezado Location tras una redirección HTTP. Cierra #40985. #41162 (Kruglov Pavel).
  • Aplicar cambios a los manejadores HTTP en caliente sin reiniciar el servidor. #41177 (Azat Khuzhin).
  • ClickHouse Keeper: cerrar correctamente las sesiones activas durante el apagado. #41215 (Antonio Andelic). Esto reduce el tiempo durante el que se producen errores de “la tabla es de solo lectura”.
  • Se añadió la posibilidad de comentar automáticamente consultas SQL en clickhouse-client/local (con Alt-#, como en readline). #41224 (Azat Khuzhin).
  • Se corrigió la incompatibilidad de la caché tras cambiar la configuración do_no_evict_index_and_mark_files de 1 a 0 y de 0 a 1. #41330 (Kseniia Sumarokova).
  • Se añade la configuración allow_suspicious_fixed_string_types para evitar que los usuarios creen columnas de tipo FixedString con tamaño > 256. #41495 (Duc Canh Le).
  • Se añade has_lightweight_delete a system.parts. #41564 (Kseniia Sumarokova).

Mejoras en compilación, pruebas y empaquetado

  • Exigir documentación para cada parámetro de configuración. #40644 (Alexey Milovidov).
  • Garantizar la documentación de todas las métricas actuales. #40645 (Alexey Milovidov).
  • Exigir documentación para cada contador de eventos de perfil. Redactar la documentación donde faltaba. #40646 (Alexey Milovidov).
  • Permite una compilación mínima de clickhouse-local corrigiendo algunas dependencias. #40460 (Alexey Milovidov). Ocupa menos de 50 MiB.
  • Calcular e informar sobre la cobertura de funciones SQL en las pruebas. #40593. #40647 (Alexey Milovidov).
  • Hacer obligatoria la documentación de cada configuración de MergeTree. #40648 (Alexey Milovidov).
  • Un prototipo de documentación de referencia integrada para componentes uniformes del servidor de alto nivel. #40649 (Alexey Milovidov).
  • Comprobaremos todas las consultas de las pruebas de rendimiento modificadas para asegurarnos de que se hayan probado todas las consultas modificadas. #40322 (Nikita Taranov).
  • Se corrigen los paquetes TGZ. #40681 (Mikhail f. Shiryaev).
  • Se corrigieron los símbolos de depuración. #40873 (Azat Khuzhin).
  • Se amplió la configuración de CI para crear una compilación x86 compatible solo con SSE2. Útil para hardware antiguo o embebido. #40999 (Robert Schulze).
  • Se cambia a llvm/clang 15. #41046 (Azat Khuzhin).
  • Continuación de #40938. Corrige una violación de ODR en la clase Loggers. Corrige #40398, #40937. #41060 (Dmitry Novik).
  • Se añaden binarios de macOS a los assets de la versión de GitHub; esto corrige #37718. #41088 (Mikhail f. Shiryaev).
  • La biblioteca c-ares ahora viene incluida con el sistema de compilación de ClickHouse. #41239 (Robert Schulze).
  • Se eliminó dlopen del código principal de ClickHouse. Sigue presente en library-bridge y odbc-bridge. #41428 (Alexey Milovidov).
  • No se debe permitir dlopen en el binario principal de ClickHouse, porque es perjudicial e inseguro. No lo usamos. Pero algunas bibliotecas pueden usarlo para implementar “plugins”. Desaconsejamos absolutamente la antigua técnica de cargar en el espacio de direcciones del proceso bibliotecas peligrosas y no controladas de terceros, porque es una locura. #41429 (Alexey Milovidov).
  • Se añade el campo source a los paquetes deb y se actualiza nfpm. #41531 (Mikhail f. Shiryaev).
  • Compatibilidad con DWARF-5 en el analizador DWARF propio. #40710 (Azat Khuzhin).
  • Se añadió inyección de fallos en el cliente de ZooKeeper para pruebas #30498 (Alexander Tokmakov).
  • Se añaden pruebas sin estado con almacenamiento S3, con debug y tsan #35262 (Kseniia Sumarokova).
  • Pruebas de estrés sobre S3 #36837 (alesapin).
  • Se habilita concurrency-mt-unsafe en clang-tidy #40224 (Alexey Milovidov).

Corrección de errores

  • Corrige una posible pérdida de datos debida a un error en AWS SDK. El error solo puede producirse cuando ClickHouse se usa sobre S3. #40506 (alesapin). Este error llevaba 5 años abierto en AWS SDK y se cerró tras nuestro informe.
  • Los datos maliciosos en formato Native podrían provocar un fallo. #41441 (Alexey Milovidov).
  • La función de agregación categorialInformationValue tenía propiedades mal definidas, lo que podría provocar una desreferenciación de puntero nulo en tiempo de ejecución. Esto cierra #41443. #41449 (Alexey Milovidov).
  • Escribir datos en formato Apache ORC podría causar un desbordamiento de búfer. #41458 (Alexey Milovidov).
  • Se corrigen problemas de seguridad de memoria en las funciones encrypt y contingency cuando se usa Array de Nullable como argumento. Esto corrige #41004. #40195 (Alexey Milovidov).
  • Corrige fallos en MergeJoin cuando ‘not_processed’ no es null. #40335 (liql2007).
  • Corrige el resultado incorrecto en caso de pérdida de precisión decimal en el operador IN; véase #41125. #41130 (Vladimir C).
  • Se corrige el relleno de las columnas Nested faltantes en múltiples niveles. #37152 (Anton Popov).
  • Corrige la consulta SYSTEM UNFREEZE para la base de datos Ordinary (en desuso). Corrección de https://github.com/ClickHouse/ClickHouse/pull/36424. #38262 (Vadim Volodin).
  • Se corrigen las columnas desconocidas no utilizadas introducidas por la sentencia WITH. Esto corrige #37812 . #39131 (Amos Bird).
  • Corrige el análisis de consultas con ORDER BY en presencia de funciones de ventana. Soluciona #38741 Soluciona #24892. #39354 (Dmitry Novik).
  • Se corrigió la excepción Unknown identifier (aggregate-function) que se produce cuando un usuario intenta calcular expresiones WINDOW ORDER BY/PARTITION BY sobre funciones de agregación. #39762 (Vladimir Chebotaryov).
  • Limita la cantidad de análisis para una consulta con la configuración max_analyze_depth. Evita el crecimiento exponencial del tiempo de análisis en consultas con un número de subconsultas extraordinariamente grande. #40334 (Vladimir C).
  • Se corrigió un error poco frecuente relacionado con el TTL de columnas en la familia de motores MergeTree: en caso de una fusión vertical repetida, podía producirse el error Cannot unlink file ColumnName.bin ... No such file or directory.. #40346 (alesapin).
  • Usa registros DNS tanto para IPv4 como para IPv6 si están presentes. #40353 (Maksim Kita).
  • Permite leer archivos comprimidos con Snappy desde Hadoop. #40482 (Kruglov Pavel).
  • Se corrigió un fallo al analizar valores del tipo Object (característica experimental) que contiene arrays de dimensión variable. #40483 (Duc Canh Le).
  • Se corrigió la opción de configuración input_format_tsv_skip_first_lines. #40491 (mini4).
  • Se corrige un fallo (condición de carrera) al iniciar el motor MaterializedPostgreSQL de base de datos o de tabla. #40262. Se corrige el error al alcanzar el límite de slots de relcache_callback_list. #40511 (Maksim Buren).
  • Corrige un posible error ‘Desbordamiento aritmético de Decimal’ al analizar DateTime64. #40546 (Kruglov Pavel).
  • Corrige la fusión vertical de partes con filas eliminadas con eliminación ligera. #40559 (Alexander Gololobov).
  • Se corrige un fallo de segmentación al escribir datos en el motor de tabla URL si la compresión está habilitada. #40565 (Frank Chen).
  • Se corrige un posible error lógico 'Invalid Field get from type UInt64 to type String' en la función arrayElement con Map. #40572 (Kruglov Pavel).
  • Se corrige una posible condición de carrera en la caché del sistema de archivos. #40586 (Kseniia Sumarokova).
  • Se dejó de omitir mutaciones en las particiones no afectadas de las tablas MergeTree, porque esta funcionalidad nunca funcionó correctamente y podría provocar la reaparición de mutaciones ya finalizadas. #40589 (Alexander Tokmakov).
  • El servidor de ClickHouse fallará si se añade en tiempo de ejecución a la configuración un puerto grpc que ya está en uso. #40597 (何李夫).
  • Se corrige el manejo de 0 / ‘1’ al inicio en base58Encode / base58Decode. #40620 (Andrey Zvonov).
  • keeper-fix: corrige una condición de carrera al acceder a los logs durante la instalación de la instantánea. #40627 (Antonio Andelic).
  • Corrige la evaluación de cortocircuito de la función toFixedString. Resuelve (parcialmente) #40622. #40628 (Kruglov Pavel).
  • Corrige la conversión de una columna int8 de SQLite a una columna int64 en ClickHouse. Corrige #40639. #40642 (Barum Rho).
  • Se corrige el desbordamiento de pila en tablas Buffer recursivas. Esto cierra #40637. #40643 (Alexey Milovidov).
  • Durante la inserción de una nueva consulta en ProcessList se realizan asignaciones de memoria. Si alcanzamos el límite de memoria durante estas asignaciones, no podemos usar OvercommitTracker, porque ProcessList::mutex ya se ha adquirido. Corrige #40611. #40677 (Dmitry Novik).
  • Se corrige LOGICAL_ERROR con max_read_buffer_size=0 al leer marks. #40705 (Azat Khuzhin).
  • Se corrige una fuga de memoria al enviar datos a MVs sin contexto de consulta (desde Kafka/…). #40732 (Azat Khuzhin).
  • Se corrige el posible error “Attempt to read after eof” en la inferencia de esquema de CSV. #40746 (Kruglov Pavel).
  • Corrige el error lógico en la caché write-through “Solo el descargador puede completar el segmento de archivo”. Cierra #40748. #40759 (Kseniia Sumarokova).
  • Hacer que el resultado de la función GROUPING sea igual que en SQL y otros SGBD. #40762 (Dmitry Novik).
  • En #40595 se informó de que la funcionalidad host_regexp no funcionaba correctamente con la resolución de nombres a direcciones en /etc/hosts. Ya está corregido. #40769 (Arthur Passos).
  • Se corrigen las copias de seguridad incrementales para la familia Log. #40827 (Vitaly Baranov).
  • Se corrigió un error extremadamente raro que puede provocar una posible pérdida de datos en la replicación zero-copy. #40844 (alesapin).
  • Se corrigen los fallos al analizar la condición de clave cuando la misma expresión Set se construye a partir de distintas columnas. #40850 (Duc Canh Le).
  • Se corrige la inferencia del esquema de objetos JSON anidados. #40851 (Kruglov Pavel).
  • Se corrige el problema por el que no se eliminaba el directorio con prefijo de 3 dígitos de los archivos de la caché del sistema de archivos cuando estaba vacío. Cierra #40797. #40867 (Kseniia Sumarokova).
  • Se corrige un DNS_ERROR no detectado al fallar la conexión con las réplicas. #40881 (Robert Coelho).
  • Se corrige un error al eliminar columnas innecesarias en una subconsulta. #40884 (luocongkai).
  • Se corrige la asignación extra de memoria para los búferes de lectura remota. #40896 (Kseniia Sumarokova).
  • Se corrigió un comportamiento por el que un usuario al que se le había revocado explícitamente el privilegio para eliminar bases de datos aún podía hacerlo. #40906 (Nikita Mikhaylov).
  • Una corrección para ClickHouse Keeper: comparar correctamente los paths de las solicitudes de escritura con los paths de los nodos internos del sistema de Keeper. #40918 (Antonio Andelic).
  • Se ha corregido un interbloqueo en WriteBufferFromS3. #40943 (Kseniia Sumarokova).
  • Corregir los permisos de acceso de DESCRIBE TABLE url() y de algunas otras DESCRIBE TABLE <table_function>(). #40975 (Vitaly Baranov).
  • Se elimina la lógica incorrecta del analizador sintáctico para WITH GROUPING SETS, que podría provocar la desreferenciación de un nullptr. #41049 (Duc Canh Le).
  • Una corrección para ClickHouse Keeper: se corrige un posible fallo de segmentación al cerrar Keeper. #41075 (Antonio Andelic).
  • Se corrigen posibles errores de segmentación, use-heap-after-free y fugas de memoria en los combinadores de funciones de agregación. Cierra #40848. #41083 (Kruglov Pavel).
  • Se corrige query_views_log con Window views. #41132 (Raúl Marín).
  • Desactiva optimize_monotonous_functions_in_order_by de forma predeterminada; mitiga: #40094. #41136 (Denny Crane).
  • Se corrigió el error “possible deadlock avoided” durante la conversión automática del motor de base de datos de Ordinary a Atomic. #41146 (Alexander Tokmakov).
  • Se corrigió SIGSEGV en SortedBlocksWriter en caso de bloque vacío (puede ocurrir con optimize_aggregation_in_order y join_algorithm=auto). #41154 (Azat Khuzhin).
  • Corrige un resultado de consulta incorrecto cuando está activa la optimización de recuento trivial con array join. Esto corrige #39431. #41158 (Denny Crane).
  • Se corrige un error de uso de la pila después del retorno en GetPriorityForLoadBalancing::getPriorityFunc(). #41159 (Azat Khuzhin).
  • Se corrige la excepción de argumentos posicionales: argumento posicional fuera de rango. Cierra #40634. #41189 (Kseniia Sumarokova).
  • Se corrige la limpieza en segundo plano de las partes detached corruptas. #41190 (Kseniia Sumarokova).
  • Se corrige la reescritura exponencial de consultas cuando hay muchos cross joins con where; cierra #21557. #41223 (Vladimir C).
  • Se corrige un posible error lógico en la caché write-through, que se producía porque no se controlaban adecuadamente todos los tipos de excepciones. Cierra #41208. #41232 (Kseniia Sumarokova).
  • Corregida la entrada de registro de tipo String en system.filesystem_cache_log. #41233 (jmimbrero).
  • Las consultas con la cláusula OFFSET en una subconsulta y la cláusula WHERE en la consulta externa podían devolver un resultado incorrecto; ya se corrigió. Soluciona #40416. #41280 (Alexander Tokmakov).
  • Se corrige un posible resultado incorrecto de una consulta con query_plan_optimize_primary_key habilitado. Corrige #40599. #41281 (Nikolai Kochetov).
  • No permitir que las secuencias no válidas afecten a otras filas en lowerUTF8/upperUTF8. #41286 (Azat Khuzhin).
  • Se corrigen las consultas ALTER <table> ADD COLUMN al añadir columnas de tipo Object. #41290 (Anton Popov).
  • Se corrigió el error “No node” al consultar system.distributed_ddl_queue cuando no hay un distributed_ddl.path en la configuración. Corrige #41096. #41296 (young scott).
  • Se corrigió el error lógico incorrecto Expected relative path en el almacenamiento de objetos en disco. Relacionado con #41246. #41297 (Kseniia Sumarokova).
  • Añadir una comprobación del tipo de columna antes de insertar UUID en formato MsgPack. #41309 (Kruglov Pavel).
  • Se corrige un posible fallo tras insertar de forma asíncrona (con la configuración async_insert habilitada) datos malformados en columnas de tipo Object. Podía ocurrir si los JSON de todos los lotes de async inserts no eran válidos y no podían analizarse. #41336 (Anton Popov).
  • Se ha corregido un posible interbloqueo con async_socket_for_remote/use_hedged_requests y KILL en paralelo. #41343 (Azat Khuzhin).
  • Deshabilita optimize_rewrite_sum_if_to_count_if de forma predeterminada; mitiga: #38605 #38683. #41388 (Denny Crane).
  • Desde la versión 22.8, la cláusula ON CLUSTER se ignora si la base de datos es Replicated y el nombre del cluster coincide con el de la base de datos. Debido a esto, DROP PARTITION ON CLUSTER funcionaba de forma inesperada con Replicated. Ya se ha corregido: ahora la cláusula ON CLUSTER se ignora solo en las consultas que se replican a nivel de base de datos. Corrige #41299. #41390 (Alexander Tokmakov).
  • Corrige un posible bloqueo/interbloqueo al cancelar una consulta (KILL QUERY o apagado del servidor). #41467 (Azat Khuzhin).
  • Corrige un posible cierre inesperado del servidor al usar la función JBOD. Esto corrige #41365. #41483 (Amos Bird).
  • Se corrigió la conversión de Nullable FixedString a String. #41541 (Duc Canh Le).
  • Se evita un fallo al pasar estados de agregación incorrectos a groupBitmap*. #41563 (Raúl Marín).
  • Las consultas con ORDER BY y 1500 <= LIMIT <= max_block_size podían devolver un resultado incorrecto, sin algunas de las primeras filas. Corrige #41182. #41576 (Nikolai Kochetov).
  • Corrección de los bytes/filas leídos en X-ClickHouse-Summary con vistas materializadas. #41586 (Raúl Marín).
  • Corrige una posible excepción pipeline stuck en consultas con OFFSET. El error se detectó con enable_optimize_predicate_expression = 0 y una condición siempre falsa en WHERE. Corrige #41383. #41588 (Nikolai Kochetov).

Lanzamiento de ClickHouse 22.8, 2022-08-18. Presentación, Vídeo

Cambio incompatible con versiones anteriores

  • Se amplió el rango de Date32 y DateTime64 para admitir fechas desde el año 1900 hasta 2299. En versiones anteriores, el intervalo admitido era solo del año 1925 al 2283. La implementación utiliza el calendario gregoriano proléptico (que cumple con ISO 8601:2004 (clause 3.2.1 The Gregorian calendar)) en lugar de tener en cuenta las transiciones históricas del calendario juliano al gregoriano. Este cambio afecta al comportamiento específico de la implementación para argumentos fuera de rango. Por ejemplo, si en versiones anteriores el valor 1899-01-01 se ajustaba a 1925-01-01, en la nueva versión se ajustará a 1900-01-01. También cambia el comportamiento del redondeo con toStartOfInterval si se pasa INTERVAL 3 QUARTER, con una diferencia de hasta un trimestre, porque los intervalos se cuentan desde un punto temporal específico de la implementación. Cierra #28216, mejora #38393. #39425 (Roman Vasin).
  • Ahora, todas las fuentes de diccionario relevantes respetan el ajuste remote_url_allow_hosts. Esto ya se había hecho para HTTP, Cassandra y Redis. Se añadieron ClickHouse, MongoDB, MySQL y PostgreSQL. El host solo se comprueba para los diccionarios creados a partir de DDL. #39184 (Nikolai Kochetov).
  • Los binarios x86 precompilados de ClickHouse ahora requieren compatibilidad con instrucciones AVX, es decir, una CPU no anterior a Intel Sandy Bridge / AMD Bulldozer, ambas lanzadas en 2011. #39000 (Robert Schulze).
  • La caché remota del sistema de archivos pasa a ser componible, permite no expulsar ciertos archivos (como idx, mrk, ..) y elimina la versión antigua de la caché. Ahora es posible configurar la caché sobre un disco de Azure blob storage, sobre un disco local, sobre un disco StaticWeb, etc. Este PR está marcado como incompatible con versiones anteriores porque cambia la configuración de la caché y, para que la caché funcione, es necesario actualizar el archivo de configuración. La caché antigua seguirá utilizándose con la nueva configuración. El servidor se iniciará correctamente con la configuración antigua de la caché. Cierra https://github.com/ClickHouse/ClickHouse/issues/36140. Cierra https://github.com/ClickHouse/ClickHouse/issues/37889. (Kseniia Sumarokova). #36171)

Nueva funcionalidad

  • Compatibilidad con la sintaxis estándar de SQL DELETE FROM en tablas MergeTree y con la implementación de eliminación ligera para la familia MergeTree. #37893 (Jianmei Zhang) (Alexander Gololobov). Nota: esta nueva funcionalidad no convierte a ClickHouse en un SGBD HTAP.
  • Los parámetros de consulta pueden establecerse en modo interactivo como SET param_abc = 'def' y transferirse mediante el protocolo nativo como configuraciones. #39906 (Nikita Taranov).
  • La clave de cuota puede establecerse en el protocolo nativo (Yakov Olkhovsky).
  • Se añadió la configuración exact_rows_before_limit (0/1). Cuando está habilitada, ClickHouse proporcionará el valor exacto de la estadística rows_before_limit_at_least, pero a costa de tener que leer por completo los datos previos al límite. Esto cierra #6613. #25333 (kevin wan).
  • Se añadió compatibilidad con insert select distribuido en paralelo con la función de tabla s3Cluster en tablas con motor Distributed y Replicated #34670. #39107 (Nikita Mikhaylov).
  • Se añaden nuevas configuraciones para controlar la inferencia de esquema a partir de formatos de texto: - input_format_try_infer_dates - intentar inferir fechas a partir de cadenas. - input_format_try_infer_datetimes - intentar inferir DateTimes a partir de cadenas. - input_format_try_infer_integers - intentar inferir Int64 en lugar de Float64. - input_format_json_try_infer_numbers_from_strings - intentar inferir números a partir de cadenas JSON en formatos JSON. #39186 (Kruglov Pavel).
  • Una opción para proporcionar salida de logs en formato JSON. El objetivo es facilitar la ingestión y la consulta en herramientas de análisis de logs. #39277 (Mallik Hassan).
  • Se añade la función nowInBlock, que permite obtener la hora actual durante consultas de larga duración y continuas. Cierra #39522. Nota: no existen las funciones now64InBlock ni todayInBlock. #39533 (Alexey Milovidov).
  • Se añade la posibilidad de especificar configuraciones para una función de tabla executable(). #39681 (Constantine Peresypkin).
  • Se implementó la conversión automática del database motor de Ordinary a Atomic. Cree un archivo vacío convert_ordinary_to_atomic en el directorio flags y todas las bases de datos Ordinary se convertirán automáticamente en el siguiente inicio del servidor. Resuelve #39546. #39933 (Alexander Tokmakov).
  • Compatibilidad con SELECT ... INTO OUTFILE '...' AND STDOUT. #37490. #39054 (SmitaRKulkarni).
  • Se añaden los formatos PrettyMonoBlock, PrettyNoEscapesMonoBlock, PrettyCompactNoEscapes, PrettyCompactNoEscapesMonoBlock, PrettySpaceNoEscapes, PrettySpaceMonoBlock, PrettySpaceNoEscapesMonoBlock. #39646 (Kruglov Pavel).

Mejora del rendimiento

  • Mejora del uso de memoria durante la fusión de resultados de agregación con uso eficiente de memoria. #39429 (Nikita Taranov).
  • Se añadió lógica de control de concurrencia para limitar el número total de hilos concurrentes creados por las consultas. #37558 (Sergei Trifonov). Se añadió el concurrent_threads_soft_limit parameter para mejorar el rendimiento cuando el QPS es alto, limitando el número total de hilos de todas las consultas. #37285 (Roman Vasin).
  • Se añade la política de caché SLRU para la caché no comprimida y la caché de marcas. (Kseniia Sumarokova). #34651 (alexX512). Desacoplamiento entre la función de caché local y el algoritmo de caché #38048 (Han Shukai).
  • Intel® In-Memory Analytics Accelerator (Intel® IAA) es un acelerador de hardware disponible en la próxima generación de procesadores Intel® Xeon® Scalable (“Sapphire Rapids”). Su objetivo es acelerar operaciones habituales de analítica, como la compresión/descompresión de datos y el filtrado. ClickHouse incorporó el nuevo codec de compresión “DeflateQpl”, que utiliza la tecnología de descarga de Intel® IAA para ofrecer una implementación de DEFLATE de alto rendimiento. El codec utiliza la Intel® Query Processing Library (QPL), que abstrae el acceso al acelerador de hardware o, en su defecto, a una alternativa de software cuando el acelerador de hardware no está disponible. En general, DEFLATE proporciona mayores tasas de compresión que el codec predeterminado LZ4 de ClickHouse y, como resultado, reduce la E/S de disco y el consumo de memoria principal. #36654 (jasperzhu). #39494 (Robert Schulze).
  • DISTINCT en orden con ORDER BY: Deducir la forma de ordenar a partir de la descripción de ordenación del flujo de entrada. Omitir la ordenación si el flujo de entrada ya está ordenado. #38719 (Igor Nikonov). Mejorar significativamente el uso de memoria y el tiempo de ejecución de la consulta + usar DistinctSortedChunkTransform para el DISTINCT final cuando las columnas de DISTINCT coincidan con las de ORDER BY, pero renombrarlo a DistinctSortedStreamTransform en EXPLAIN PIPELINE → esto mejora significativamente el uso de memoria + eliminar asignaciones de memoria innecesarias en el bucle crítico de DistinctSortedChunkTransform. #39432 (Igor Nikonov). Usar DistinctSortedTransform solo cuando la descripción de ordenación sea aplicable a las columnas de DISTINCT; en caso contrario, recurrir a la implementación habitual de DISTINCT + esto permite realizar menos comprobaciones durante la ejecución de DistinctSortedTransform. #39528 (Igor Nikonov). Corrección: DistinctSortedTransform no aprovechaba la ordenación. Nunca vaciaba el HashSet porque clearing&#95;columns se detectaba incorrectamente (siempre vacío). Así que, en la práctica, funcionaba como un DISTINCT normal (DistinctTransform). La corrección reduce significativamente el uso de memoria. #39538 (Igor Nikonov).
  • Use el nodo local como primera opción para obtener la estructura de la tabla remota al ejecutar cluster y funciones de tabla similares. #39440 (Mingliang Pan).
  • Optimiza el filtrado por columnas numéricas con compress store de AVX512VBMI2. #39633 (Guo Wangyang). Para sistemas con AVX512 VBMI2, este PR mejora el rendimiento en aprox. un 6 % para las consultas 3.1, 3.2 y 3.3 del benchmark SSB (SF=100). Probado en Intel Icelake Xeon 8380 de 2 sockets. #40033 (Robert Schulze).
  • Optimización del análisis de índices con expresiones funcionales en escenarios multihilo. #39812 (Guo Wangyang).
  • Optimizaciones para consultas complejas: No recorrer el AST de las UDFs si no hay ninguna registrada. #40069 (Raúl Marín). Optimización de alloc y free de CurrentMemoryTracker. #40078 (Raúl Marín).
  • Se ha mejorado la codificación/decodificación de Base58. #39292 (Andrey Zvonov).
  • Mejora de la transformación de máscara de bytes a bits para SSE/AVX/AVX512. #39586 (Guo Wangyang).

Mejora

  • Normalizar los tipos AggregateFunction y las representaciones de estado, porque optimizaciones como #35788 tratarán count(not null columns) como count(), lo que podría hacer que los intérpretes distribuidos muestren el siguiente error: Conversion from AggregateFunction(count) to AggregateFunction(count, Int64) is not supported. #39420 (Amos Bird). Las funciones con estados idénticos pueden usarse indistintamente en vistas materializadas.
  • Reestructurar y simplificar la tabla system.backups, eliminar la columna internal, permitir al usuario establecer el ID de la operación y añadir las columnas num_files, uncompressed_size, compressed_size, start_time, end_time. #39503 (Vitaly Baranov).
  • Estructura mejorada de la tabla de resultados de consultas DDL para la base de datos Replicated (columnas separadas para el nombre del segmento y de la réplica, y un estado más claro): las consultas CREATE TABLE ... ON CLUSTER pueden normalizarse primero en el nodo iniciador si distributed_ddl_entry_format_version está establecido en 3 (valor predeterminado). Esto significa que las consultas ON CLUSTER pueden no funcionar si el nodo iniciador no pertenece al clúster especificado en la consulta. Corrige #37318, #39500: ignorar la cláusula ON CLUSTER si la base de datos es Replicated y el nombre del clúster coincide con el nombre de la base de datos. Relacionado con #35570: varias correcciones menores para el motor de base de datos Replicated: comprobar la consistencia de los metadatos al iniciar la base de datos Replicated e iniciar la recuperación de la réplica en caso de discrepancia entre los metadatos locales y los metadatos en Keeper. Resuelve #24880. #37198 (Alexander Tokmakov).
  • Añadir result_rows y result_bytes a los informes de progreso (X-ClickHouse-Summary). #39567 (Raúl Marín).
  • Mejora del análisis de la clave primaria en MergeTree. #25563 (Nikolai Kochetov).
  • timeSlots ahora funciona con DateTime64; la duración con precisión de subsegundos y el tamaño del intervalo están disponibles al trabajar con DateTime64. #37951 (Andrey Zvonov).
  • Se añadió compatibilidad para direct join LEFT SEMI y LEFT ANTI con tablas EmbeddedRocksDB. #38956 (Vladimir C).
  • Añadir eventos de perfil para las operaciones fsync. #39179 (Azat Khuzhin).
  • Añadido el segundo argumento a la función ordinaria file(path[, default]), que es el valor que devuelve la función en caso de que el archivo no exista. #39218 (Nikolay Degterinsky).
  • Algunas correcciones menores para la lectura a través de HTTP permiten reintentar contenido parcial en caso de recibir 200 OK. #39244 (Kseniia Sumarokova).
  • Admite consultas CREATE TEMPORARY TABLE ... (<list of columns>) AS .... #39462 (Kruglov Pavel).
  • Se añade soporte para !/* (signo de exclamación/asterisco) en TLD personalizados (cutToFirstSignificantSubdomainCustom()/cutToFirstSignificantSubdomainCustomWithWWW()/firstSignificantSubdomainCustom()). #39496 (Azat Khuzhin).
  • Se añadió compatibilidad con conexiones TLS a NATS. Implementa #39525. #39527 (Constantine Peresypkin).
  • clickhouse-obfuscator (una herramienta de ofuscación de bases de datos para pruebas y generación de carga) ahora cuenta con los nuevos parámetros --save y --load para trabajar con modelos preentrenados. Esto cierra #39534. #39541 (Alexey Milovidov).
  • Se corrige el comportamiento incorrecto de la rotación de logs durante el reinicio. #39558 (Nikolay Degterinsky).
  • Se corrige la creación de proyecciones agregadas cuando la agregación externa está activada. Se clasifica como una mejora porque este caso es poco frecuente y existe una solución sencilla cambiando la configuración. Esto corrige #39667 . #39671 (Amos Bird).
  • Se permite ejecutar funciones hash con argumentos de tipo Map. #39685 (Anton Popov).
  • Se añade un parámetro de configuración para ocultar direcciones en las trazas de pila. Puede mejorar ligeramente la seguridad, pero en general es perjudicial y no debe usarse. #39690 (Alexey Milovidov).
  • Se cambió el tamaño del prefijo de AggregateFunctionDistinct para garantizar que el segmento de memoria de los datos de la función anidada quede alineado. #39696 (Pxl).
  • Escapar correctamente las credenciales proporcionadas a la herramienta clickhouse-diagnostic. #39707 (Dale McDiarmid).
  • Mejora de ClickHouse Keeper: crear un snapshot al cerrar. Se puede controlar con la configuración keeper_server.create_snapshot_on_exit; true de forma predeterminada. #39755 (Antonio Andelic).
  • Permite el análisis de la clave primaria para row_policy_filter y additional_filter. También ayuda a corregir problemas como #37454. #39826 (Amos Bird).
  • Se corrigen dos problemas de usabilidad en la UI de Play: - no se veía pixel-perfect en iPad debido a bordes redondeados y márgenes parásitos; - la indicación de progreso no se mostraba después de la primera consulta. Esto cierra #39957. Esto cierra #39960. #39961 (Alexey Milovidov).
  • UI de Play: añadir numeración de filas; añadir selección de celdas al hacer clic; añadir histéresis en las celdas de la tabla. #39962 (Alexey Milovidov).
  • UI de Play: reconocer la tecla Tab en el área de texto, pero sin afectar al mismo tiempo la navegación con Tab. #40053 (Alexey Milovidov).
  • El cliente mostrará el tiempo transcurrido en el servidor. Esto es importante para comparar el rendimiento de los servicios de ClickHouse en datacenters remotos. Esto cierra #38070. Consulte también esto para conocer la motivación. #39968 (Alexey Milovidov).
  • Se agregan las funciones parseDateTime64BestEffortUS, parseDateTime64BestEffortUSOrNull y parseDateTime64BestEffortUSOrZero, lo que cierra #37492. #40015 (Tanya Bragin).
  • Se amplió system.processors_profile_log con más información, como las filas de entrada. #40121 (Amos Bird).
  • Mostrar de forma predeterminada la hora del servidor en clickhouse-benchmark si está disponible (desde la versión 22.8 de ClickHouse). Esto es necesario para comparar correctamente el rendimiento de las Clouds. Este comportamiento puede cambiarse con la nueva opción de línea de comandos --client-side-time. Cambiar la opción de línea de comandos --randomize de --randomize 1 a la forma sin argumento. #40193 (Alexey Milovidov).
  • Añadir contadores (ProfileEvents) para los casos en que se haya configurado una limitación de la complejidad de la consulta y se haya alcanzado (un contador independiente para overflow_mode = break y throw). Por ejemplo, si ha configurado max_rows_to_read con read_overflow_mode = 'break', consultar el valor del contador OverflowBreak permitirá distinguir los resultados incompletos. #40205 (Alexey Milovidov).
  • Se corrigió la contabilidad de memoria en caso de errores de “Memory limit exceeded” (anteriormente, el uso de memoria [peak] tenía en cuenta las asignaciones fallidas). #40249 (Azat Khuzhin).
  • Se añaden métricas para la caché del sistema de archivos: FilesystemCacheSize y FilesystemCacheElements. #40260 (Kseniia Sumarokova).
  • Se admite la transferencia RPC segura de Hadoop (hadoop.rpc.protection=privacy y hadoop.rpc.protection=integrity). #39411 (michael1589).
  • Evita el crecimiento continuo del consumo de memoria de la caché de patrones al usar las funciones multi(Fuzzy)Match(Any|AllIndices|AnyIndex)(). #40264 (Robert Schulze).

mejora en compilación, pruebas y empaquetado

  • ClickFiddle: Una nueva herramienta para probar versiones de ClickHouse en modo de lectura/escritura (Igor Baliuk).
  • El binario de ClickHouse ahora es autoextraíble #35775 (Yakov Olkhovskiy, Arthur Filatenkov).
  • Actualiza tzdata a 2022b para admitir los nuevos cambios de zona horaria. Consulta https://github.com/google/cctz/pull/226. El inicio del horario de verano de Chile en 2022 se retrasa del 4 de septiembre al 11 de septiembre. Irán planea dejar de observar el horario de verano de forma permanente, después de atrasar el reloj el 2022-09-21. Hay correcciones de la zona horaria histórica de Asia/Tehran en el año 1977: Irán adoptó la hora estándar en 1935, no en 1946. En 1977 observó horario de verano desde 03-21 23:00 hasta 10-20 24:00; sus transiciones de 1978 fueron el 03-24 y el 08-05, no el 03-20 y el 10-20; y su transición de primavera de 1979 fue el 05-27, no el 03-21 (https://data.iana.org/time-zones/tzdb/NEWS). (Alexey Milovidov).
  • Antes, los paquetes instalaban el archivo systemd.service en /etc. Los archivos allí se marcan como conf, no se eliminan ni se actualizan automáticamente. Este PR los elimina. #39323 (Mikhail f. Shiryaev).
  • Asegúrese de que LSan funcione correctamente. #39430 (Azat Khuzhin).
  • TSAN presenta problemas con clang-14 (https://github.com/google/sanitizers/issues/1552, https://github.com/google/sanitizers/issues/1540), por lo que aquí compilamos los binarios de TSAN con clang-15. #39450 (Mikhail f. Shiryaev).
  • Se elimina la posibilidad de compilar las herramientas de ClickHouse como programas ejecutables independientes. Esto corrige #37847. #39520 (Alexey Milovidov).
  • Ajustes menores para la compilación en s390x (que es big-endian). #39627 (Harry Lee). #39656 (Harry Lee). Se corrigió un problema de endianness en BitHelpers para s390x. #39656 (Harry Lee). Se implementó una parte de código relacionada con SipHash para la arquitectura s390x (no compatible con ClickHouse). #39732 (Harry Lee). Se corrigió un problema de endianness en el código de instantáneas de coordinación para la arquitectura s390x (no compatible con ClickHouse). #39931 (Harry Lee). Se corrigieron problemas de endianness en el código de codec para la arquitectura s390x (no compatible con ClickHouse). #40008 (Harry Lee). Se corrigieron problemas de endianness en la lectura y escritura de datos binarios BigEndian en el código de ReadHelpers y WriteHelpers para la arquitectura s390x (no compatible con ClickHouse). #40179 (Harry Lee).
  • Se admite la compilación con clang-16 (trunk). Esto cierra #39949. #40181 (Alexey Milovidov).
  • Preparación de la compilación de RISC-V 64 para ejecutarse en CI. Esto es para #40141. #40197 (Alexey Milovidov).
  • Se simplificó la interfaz de la macro de registro de funciones (FUNCTION_REGISTER*) para eliminar el paso de agregar y llamar a una función extern en registerFunctions.cpp; además, esto agiliza las compilaciones incrementales de una función nueva. #38615 (Li Yin).
  • Docker: Ahora entrypoint.sh en la imagen de Docker crea y ejecuta chown para todas las carpetas que encuentra en la configuración de una instalación multidisco #17717. #39121 (Nikita Mikhaylov).

Corrección de errores

  • Corrige una posible falla de segmentación en el formato de entrada CapnProto. Este error fue detectado y reportado por kiojj a través del programa de recompensas por errores de ClickHouse. #40241 (Kruglov Pavel).
  • Soluciona un caso muy poco frecuente de comportamiento incorrecto del operador de subíndice de arrays. Esto cierra #28720. #40185 (Alexey Milovidov).
  • Se corrigió la validación insuficiente de argumentos en las funciones de cifrado (detectada por el fuzzer de consultas). Esto cierra #39987. #40194 (Alexey Milovidov).
  • Se corrige un caso en el que el orden de las columnas puede ser incorrecto si el operador IN se usa con una tabla con ENGINE = Set que contiene varias columnas. Esto corrige #13014. #40225 (Alexey Milovidov).
  • Se corrige el reposicionamiento al leer desde un disco cifrado. Este PR corrige #38381. #39687 (Vitaly Baranov).
  • Se corrigen las columnas duplicadas en el plan de ejecución de JOIN. Por fin, se resuelve #26809. #40009 (Vladimir C).
  • Se corrigió el cuelgue de la consulta para SELECT con ORDER BY WITH FILL con distintos tipos de fecha/hora. #37849 (Yakov Olkhovskiy).
  • Corregido el ORDER BY para que coincida con el ORDER BY de las proyecciones (antes simplemente devolvía un resultado sin ordenar). #38725 (Azat Khuzhin).
  • No optimice las funciones en las sentencias GROUP BY si entran en conflicto con una de las columnas o expresiones de la tabla. Corrige #37032. #39103 (Anton Kozlov).
  • Se corrigió el nombre de tabla incorrecto en los logs tras RENAME TABLE. Esto corrige #38018. #39227 (Amos Bird).
  • Se corrigen los argumentos posicionales en caso de poda de columnas durante la optimización de la consulta. Cierra #38433. #39293 (Kseniia Sumarokova).
  • Se corrige un error en la inferencia de esquema en el caso de mensajes vacíos en los formatos Protobuf/CapnProto, que permitía crear una columna con un tipo Tuple vacío. Cierra #39051 Se añaden 2 nuevas opciones de configuración input_format_{protobuf/capnproto}_skip_fields_with_unsupported_types_in_schema_inference que permiten omitir campos con tipos no compatibles durante la inferencia de esquema para los formatos Protobuf y CapnProto. #39357 (Kruglov Pavel).
  • (Window View es una característica experimental) Se corrige un fallo de segmentación en CREATE WINDOW VIEW .. ON CLUSTER ... INNER. Cierra #39363. #39384 (Kseniia Sumarokova).
  • Se corrigió la finalización de WriteBuffer al cancelar insert into function (en versiones anteriores podía provocar std::terminate). #39458 (Kruglov Pavel).
  • Se corrige el almacenamiento de las columnas de tipo Object en la serialización dispersa. #39464 (Anton Popov).
  • Corrige la posible excepción “No se encontró la columna en el bloque” al usar proyecciones. Esto cierra #39469. #39470 (小路).
  • Se corrige una excepción en una condición de carrera entre DROP e INSERT con vistas materializadas. #39477 (Azat Khuzhin).
  • Un error en la biblioteca Apache Avro: se corrige una condición de carrera y un posible desbordamiento de búfer del montón en el formato Avro. Cierra #39094 Cierra #33652. #39498 (Kruglov Pavel).
  • Se corrige un error poco frecuente en la lectura asíncrona (con la configuración local_filesystem_read_method='pread_threadpool') cuando O_DIRECT está habilitado (mediante la configuración min_bytes_to_use_direct_io). #39506 (Anton Popov).
  • (solo en FreeBSD) Corrige “Code: 49. DB::Exception: FunctionFactory: the function name ” is not unique. (LOGICAL_ERROR)”, observado en FreeBSD al iniciar ClickHouse. #39551 (Alexander Gololobov).
  • Se corrigió un error en el argumento “maxsplit”, introducido recientemente para splitByChar, que no funcionaba correctamente. #39552 (filimonov).
  • Se corrigió un error en ASOF JOIN con enable_optimize_predicate_expression; se cierra #37813. #39556 (Vladimir C).
  • Se corrigió la consulta CREATE/DROP INDEX con ON CLUSTER o con una base de datos Replicated y ReplicatedMergeTree. Antes se ejecutaba en todas las réplicas (lo que provocaba errores o que la cola de DDL se quedara atascada). Corrige #39511. #39565 (Alexander Tokmakov).
  • Corrige el error “column not found” en push down con join, cierra #39505. #39575 (Vladimir C).
  • Se corrige el alias incorrecto de REGEXP_REPLACE. Esto corrige https://github.com/ClickHouse/ClickBench/issues/9. #39592 (Alexey Milovidov).
  • Se fijó el punto de origen de las window functions de decaimiento exponencial en el último valor de la ventana. Anteriormente, el decaimiento se calculaba con la fórmula exp((t - curr_row_t) / decay_length), lo que es incorrecto cuando el límite derecho de la ventana no es CURRENT ROW. Se cambió a: exp((t - last_row_t) / decay_length). No hay cambios en los resultados para las ventanas con ROWS BETWEEN (smth) AND CURRENT ROW. #39593 (Vladimir Chebotaryov).
  • Se corrige el desbordamiento en la división de Decimal, que puede detectarse según la escala de los operandos. #39600 (Andrey Zvonov).
  • Se corrigió el funcionamiento conjunto de las configuraciones output_format_arrow_string_as_string y output_format_arrow_low_cardinality_as_dictionary. Cierra #39624. #39647 (Kruglov Pavel).
  • Se corrigió un error en la resolución de la base de datos predeterminada al leer tablas distribuidas. #39674 (Anton Kozlov).
  • (Solo con las bases de datos Ordinary obsoletas) SELECT podría leer datos de una tabla eliminada si se usa la caché de E/S mmap, el motor de base de datos es Ordinary y se crearon tablas nuevas con el mismo nombre que tenía la tabla eliminada. Ya está corregido. #39708 (Alexander Tokmakov).
  • Corrige un posible error Invalid column type for ColumnUnique::insertRangeFrom. Expected String, got ColumnLowCardinality. Resuelve #38460. #39716 (Arthur Passos).
  • Los nombres de campo en la sección meta del formato JSON se escapaban por error dos veces. Esto corrige #39693. #39747 (Alexey Milovidov).
  • Corrige el análisis incorrecto de índices con tuplas y el operador IN, que podía producir un resultado incorrecto en la consulta. #39752 (Anton Popov).
  • Se corrige el filtrado de tablas EmbeddedRocksDB por clave mediante parámetros. #39757 (Antonio Andelic).
  • Se corrige el error Invalid number of columns in chunk pushed to OutputPort, causado por la optimización de ARRAY JOIN. Corrige #39164. #39799 (Nikolai Kochetov).
  • Una solución alternativa para un error del kernel de Linux. Corrige la excepción CANNOT_READ_ALL_DATA con local_filesystem_read_method=pread_threadpool. Según man, este error solo afectaba a las versiones 5.9 y 5.10 del kernel de Linux. #39800 (Anton Popov).
  • (Solo en NFS) Se corrigió el mkdir defectuoso de NFS para volúmenes root-squashed. #39898 (Constantine Peresypkin).
  • Eliminar los diccionarios de las métricas de Prometheus en DETACH/DROP. #39926 (Azat Khuzhin).
  • Se corrige la lectura de StorageFile con columnas virtuales. Cierra #39907. #39943 (flynn).
  • Corrige el elevado uso de memoria durante los fetches. Corrige #39915. #39990 (Nikolai Kochetov).
  • (funcionalidad experimental) Se corrige el fallo de hashId y el problema por el que no se usaba el parámetro salt. #40002 (Raúl Marín).
  • Los operadores EXCEPT e INTERSECT pueden provocar un fallo cuando se utiliza una combinación específica de columnas constantes y no constantes. #40020 (Duc Canh Le).
  • Se corrigieron los errores “Part directory doesn’t exist” y “tmp_<part_name> … No such file or directory” durante un INSERT demasiado lento o una operación de merge/mutación demasiado prolongada. También se corrigió un problema que podía hacer que algunas entradas de la cola de replicación se quedaran bloqueadas sin ningún error ni advertencia en los logs si había fallado un intento previo de obtener una parte, pero no se había limpiado el directorio tmp-fetch_<part_name>. #40031 (Alexander Tokmakov).
  • Corrige casos poco frecuentes en el análisis sintáctico de arrays de tuplas en el formato Values. #40034 (Anton Popov).
  • Corrige la conversión en el formato ArrowColumn de Dictionary(X) & Dictionary(Nullable(X)) a ClickHouse LowCardinality(X) & LowCardinality(Nullable(X)), respectivamente. #40037 (Arthur Passos).
  • Corregir un posible interbloqueo al escribir en S3 durante un fallo al programar tareas. #40070 (Maksim Kita).
  • Se corrigió un error en collectFilesToSkip() al añadir la extensión de archivo correcta (.idx o idx2) para los índices que debían recalcularse, evitando enlaces físicos erróneos. Corregido en #39896. #40095 (Jianmei Zhang).
  • Una corrección para la resolución inversa de DNS. #40134 (Arthur Passos).
  • Se corrigió el resultado inesperado de arrayDifference de `Array(UInt32). #40211 (Duc Canh Le).

Lanzamiento de ClickHouse 22.7, 2022-07-21. Presentación, Vídeo

Notas de actualización

  • Se habilita la configuración enable_positional_arguments de forma predeterminada. Permite consultas como SELECT ... ORDER BY 1, 2, donde 1 y 2 son referencias a la cláusula SELECT. Si necesita recuperar el comportamiento anterior, desactive esta configuración. #38204 (Alexey Milovidov).
  • Se deshabilita format_csv_allow_single_quotes de forma predeterminada. Consulte #37096. (Kruglov Pavel).
  • El motor de database Ordinary y la sintaxis antigua de definición de almacenamiento para las tablas *MergeTree están obsoletos. De forma predeterminada, no es posible crear nuevas databases con el motor Ordinary. Si la database system tiene el motor Ordinary, se convertirá automáticamente a Atomic al iniciar el server. Existen configuraciones para mantener el comportamiento anterior (allow_deprecated_database_ordinary y allow_deprecated_syntax_for_merge_tree), pero pueden eliminarse en futuras versiones. #38335 (Alexander Tokmakov).
  • Se fuerza de forma predeterminada la reescritura de comma join a inner (se establece el valor predeterminado cross_to_inner_join_rewrite = 2). Para recuperar el comportamiento anterior, establezca cross_to_inner_join_rewrite = 1. #39326 (Vladimir C). Si encuentra alguna incompatibilidad, puede volver a cambiar esta configuración.

nueva funcionalidad

  • Se admiten expresiones con funciones de ventana. Cierra #19857. #37848 (Dmitry Novik).
  • Se añadió un nuevo algoritmo de join direct para las tablas EmbeddedRocksDB; véase #33582. #35363 (Vladimir C).
  • Se añadió el algoritmo de join por mezcla con ordenación total. #35796 (Vladimir C).
  • Implementación del motor de tabla NATS, que permite publicar y suscribirse a NATS. Cierra #32388. #37171 (tchepavel). (Kseniia Sumarokova)
  • Implementa la función de tabla mongodb. Permite escribir en el almacenamiento / función de tabla MongoDB. #37213 (aaapetrenko). (Kseniia Sumarokova)
  • Se añade el formato de salida SQLInsert. Cierra #38441. #38477 (Kruglov Pavel).
  • Se introdujo el ajuste additional_table_filters. Con este ajuste, puede especificar una condición de filtrado adicional para una tabla, que se aplicará directamente después de la lectura. Ejemplo: select number, x, y from (select number from system.numbers limit 5) f any left join (select x, y from table_1) s on f.number = s.x settings additional_table_filters={'system.numbers : 'number != 3', 'table_1' : 'x != 2'}. Se introdujo el ajuste additional_result_filter, que especifica una condición de filtrado adicional para el resultado de la consulta. Cierra #37918. #38475 (Nikolai Kochetov).
  • Se añade la configuración compatibility y la tabla del sistema system.settings_changes, que contiene información sobre los cambios en la configuración entre versiones de ClickHouse. Cierra #35972. #38957 (Kruglov Pavel).
  • Añadidas las funciones translate(string, from_string, to_string) y translateUTF8(string, from_string, to_string). Traducen algunos caracteres a otros. #38935 (Nikolay Degterinsky).
  • Se admite la función parseTimeDelta. Puede usarse de la siguiente manera: ;-+,: se pueden usar como separadores, por ejemplo, 1yr-2mo, 2m:6s: SELECT parseTimeDelta('1yr-2mo-4w + 12 days, 3 hours : 1 minute ; 33 seconds'). #39071 (jiahui-97).
  • Se añadió la consulta CREATE TABLE ... EMPTY AS SELECT. Deduce automáticamente la estructura de la tabla a partir de la consulta SELECT, pero no llena la tabla después de crearla. Resuelve #38049. #38272 (Alexander Tokmakov).
  • Se añadieron opciones para limitar las operaciones de E/S con almacenamiento remoto: max_remote_read_network_bandwidth_for_server y max_remote_write_network_bandwidth_for_server. #39095 (Sergei Trifonov).
  • Añade la configuración group_by_use_nulls para que las columnas clave de agregación admitan NULL en el caso de ROLLUP, CUBE y GROUPING SETS. Cierra #37359. #38642 (Dmitry Novik).
  • Se añadió la posibilidad de especificar el nivel de compresión durante la exportación de datos. #38907 (Nikolay Degterinsky).
  • Se añadió una opción para exigir grants explícitos para realizar SELECT en la base de datos system. Detalles: #38970 (Vitaly Baranov).
  • Las funciones multiMatchAny, multiMatchAnyIndex, multiMatchAllIndices y sus variantes difusas ahora aceptan un argumento de array de patrones no constante. #38485 (Robert Schulze). La función SQL multiSearchAllPositions ahora acepta argumentos de búsqueda no constantes. #39167 (Robert Schulze).
  • Añade la opción de configuración zstd_window_log_max para establecer el uso máximo de memoria durante la decodificación zstd al importar archivos externos. Cierra #35693. #37015 (wuxiaobai24).
  • Añade la configuración send_logs_source_regexp. Envía los logs de texto del servidor cuyo nombre de origen coincida con la expresión regular especificada. Vacío significa todos los orígenes. #39161 (Amos Bird).
  • Soporte para ALTER en tablas Hive. #38214 (lgbo).
  • Se admite la función isNullable. Esta función comprueba si su argumento es de tipo Nullable y devuelve 1 o 0. Cierra #38611. #38841 (lokax).
  • Se añadieron funciones para codificar y decodificar en base58. #38159 (Andrey Zvonov).
  • Añadir visualizaciones de gráficos a la UI de Play. #38197 (Alexey Milovidov).
  • Se añadieron funciones para calcular la distancia L2 al cuadrado y la norma tanto para arrays como para tuplas. #38545 (Julian Gilyadov).
  • Se añade la posibilidad de pasar encabezados HTTP a la función de tabla / almacenamiento url mediante SQL. Cierra #37897. #38176 (Kseniia Sumarokova).
  • Añadir el binario clickhouse-diagnostics a los paquetes. #38647 (Mikhail f. Shiryaev).

Funcionalidad experimental

  • Añade la nueva configuración implicit_transaction para ejecutar consultas independientes dentro de una transacción. Se encarga automáticamente tanto de la creación como del cierre de la transacción (mediante COMMIT si la consulta se ejecuta correctamente o ROLLBACK si no es así). #38344 (Raúl Marín).

Mejora del rendimiento

  • Optimización de distinct para columnas ordenadas. Use la transformación especializada de distinct cuando el flujo de entrada esté ordenado por la(s) columna(s) de distinct. La optimización puede aplicarse a pre-distinct, distinct final o a ambos. Implementación inicial por @dimarub2000. #37803 (Igor Nikonov).
  • Mejora el rendimiento de ORDER BY, las fusiones de MergeTree y las funciones de ventana gracias al uso de la versión por lotes de BinaryHeap. #38022 (Maksim Kita).
  • Mayor paralelismo en la ejecución de consultas con FINAL #36396 (Nikita Taranov).
  • Se corrige una regresión importante en el rendimiento de join que se introdujo en #35616. Llama la atención que consultas join comunes, como las consultas ssb, hayan sido 10 veces más lentas durante casi 3 meses sin que nadie se quejara. #38052 (Amos Bird).
  • Se migra de la biblioteca Intel hyperscan a vectorscan, lo que acelera muchas operaciones de coincidencia de cadenas en plataformas no x86. #38171 (Robert Schulze).
  • Aumento del paralelismo en los pasos del plan de consulta ejecutados después de la agregación. #38295 (Nikita Taranov).
  • Mejora el rendimiento de las inserciones en columnas de tipo JSON. #38320 (Anton Popov).
  • Se optimizaron la inserción y las búsquedas en la HashTable. #38413 (Nikita Taranov).
  • Se corrige la degradación del rendimiento de #32493. #38417 (Alexey Milovidov).
  • Mejora el rendimiento de los join con columnas numéricas mediante instrucciones SIMD. #37235 (zzachimed). #38565 (Maksim Kita).
  • Las funciones de norma y distancia para arrays se han acelerado entre 1,2 y 2 veces. #38740 (Alexander Gololobov).
  • Se añade copyOverlap32Shuffle optimizado con AVX-512 VBMI para la descompresión de LZ4. En otras palabras, mejora el rendimiento de la descompresión de LZ4. #37891 (Guo Wangyang).
  • ORDER BY (a, b) ofrecerá las mismas ventajas que ORDER BY a, b. #38873 (Igor Nikonov).
  • Alinear los saltos dentro de un límite de 32B para que el benchmark sea más estable. #38988 (Guo Wangyang). Mejora el rendimiento entre un 1 y un 2 % de media en Intel.
  • Las UDF ejecutables, los diccionarios ejecutables y las tablas ejecutables evitarán perder un segundo mientras esperan a que termine el subproceso. #38929 (Constantine Peresypkin).
  • Se optimizan los accesos a la tabla system.stack_trace si no se seleccionan todas las columnas. #39177 (Azat Khuzhin).
  • Mejora del rendimiento de isNullable/isConstant/isNull/isNotNull para el argumento LowCardinality. #39192 (Kruglov Pavel).
  • Se optimizó el procesamiento de ORDER BY en las funciones de ventana. #34632 (Vladimir Chebotarev).
  • La tabla system.asynchronous_metric_log está mejor optimizada en cuanto al espacio de almacenamiento. Esto corrige #38134. Consulte el video de YouTube. #38428 (Alexey Milovidov).

Mejora

  • Se admite la sintaxis estándar de SQL para CREATE INDEX y DROP INDEX. #35166 (Jianmei Zhang).
  • Enviar eventos de perfil para consultas INSERT (anteriormente, solo se admitía SELECT). #37391 (Azat Khuzhin).
  • Implementación de la agregación in order (optimize_aggregation_in_order) para proyecciones totalmente materializadas. #37469 (Azat Khuzhin).
  • Se eliminó la llamada a un subproceso para la inicialización de Kerberos. Se añadió una nueva prueba de integración. Cierra #27651. #38105 (Roman Vasin).
    • Añadir la configuración multiple_joins_try_to_keep_original_names para no reescribir el nombre del identificador al reescribir múltiples JOIN, cierra #34697. #38149 (Vladimir C).
  • Se ha mejorado la experiencia de usuario del visualizador de trazas. #38169 (Sergei Trifonov).
  • Se habilita la recopilación de trazas de pila y el perfilador de consultas para AArch64. #38181 (Maksim Kita).
  • No omitir los enlaces simbólicos del directorio user_defined durante la carga de funciones SQL definidas por el usuario. Cierra #38042. #38184 (Maksim Kita).
  • Se agregó la limpieza en segundo plano de los subdirectorios en store/. En algunos casos, clickhouse-server podía dejar subdirectorios residuales en store/ (por ejemplo, al intentar crear una tabla sin éxito) y esos directorios nunca se eliminaban. Corrige #33710. #38265 (Alexander Tokmakov).
  • Se añade la consulta DESCRIBE CACHE para mostrar la configuración de la caché desde la configuración. Se añade la consulta SHOW CACHES para mostrar la lista de cachés del sistema de archivos disponibles. #38279 (Kseniia Sumarokova).
  • Se añade una verificación de acceso para system drop filesystem cache. Se admite ON CLUSTER. #38319 (Kseniia Sumarokova).
  • Se corrige la incompatibilidad del motor de base de datos PostgreSQL al actualizar de la versión 21.3 a la 22.3. Cierra #36659. #38369 (Kseniia Sumarokova).
  • filesystemAvailable y funciones similares ahora funcionan en clickhouse-local. Esto resuelve #38423. #38424 (Alexey Milovidov).
  • Se añade la función revision. #38555 (Azat Khuzhin).
  • Corregido el uso de GCS a través de un túnel proxy. #38726 (Azat Khuzhin).
  • Soporte para \i file en clickhouse client / local (similar a psql \i). #38813 (Kseniia Sumarokova).
  • Nueva opción optimize = 1 en EXPLAIN AST. Si está activada, muestra el AST después de su reescritura; de lo contrario, el AST de la consulta original. Desactivada de forma predeterminada. #38910 (Igor Nikonov).
  • Se permite la coma final en la lista de columnas. Cierra #38425. #38440 (chen).
  • Corrección de errores y mejoras de rendimiento del método JOIN parallel_hash. #37648 (Vladimir C).
  • Se admite la transferencia RPC segura de Hadoop (hadoop.rpc.protection=privacy y hadoop.rpc.protection=integrity). #37852 (Peng Liu).
  • Se añade soporte para el tipo struct en StorageHive. #38118 (lgbo).
  • Los objetos individuales de S3 ahora se eliminan con RemoveObjectRequest. Se implementó compatibilidad con GCP, que no permitía usar removeFileIfExists, lo que en la práctica inutilizaba aproximadamente la mitad de la funcionalidad de remove. Detección automática de la API de S3 DeleteObjects, que GCS no admite. Esto permitirá usar GCS sin tener que especificar explícitamente support_batch_delete=0 en la configuración. #37882 (Vladimir Chebotarev).
  • Exponer datos básicos de monitoreo de ClickHouse Keeper (a través de ProfileEvents y CurrentMetrics). #38072 (lingpeng0314).
  • Se admite la opción auto_close para la conexión del motor PostgreSQL. Cierra #31486. #38363 (Kseniia Sumarokova).
  • Permitir el modificador NULL en la declaración de columnas de las funciones de tabla. #38816 (Kruglov Pavel).
  • Desactive mutations_finalizing_task antes de apagar para evitar errores benignos TABLE_IS_READ_ONLY durante el apagado. #38851 (Raúl Marín).
  • Se elimina la espera innecesaria de las consultas SELECT tras las consultas ALTER cuando hay consultas INSERT si usa bases de datos Ordinary obsoletas. #38864 (Azat Khuzhin).
  • Nueva opción rewrite en EXPLAIN AST. Si está habilitada, muestra el AST tras la reescritura; de lo contrario, muestra el AST de la consulta original. Deshabilitada de forma predeterminada. #38910 (Igor Nikonov).
  • Dejar de reportar las excepciones de Zookeeper “Node exists” en system.errors cuando son esperadas. #38961 (Raúl Marín).
  • clickhouse-keeper: se añade compatibilidad con el cálculo y la verificación de resúmenes en tiempo real. Está desactivado por defecto. #37555 (Antonio Andelic).
  • Se permite especificar globs * or {expr1, expr2, expr3} dentro de una clave para la herramienta clickhouse-extract-from-config. #38966 (Nikita Mikhaylov).
  • clearOldLogs: No notificar KEEPER_EXCEPTION en eliminaciones concurrentes. #39016 (Raúl Marín).
  • mejora de clickhouse-keeper: persistir la metainformación sobre los servidores de Keeper en disco. #39069 (Antonio Andelic). Esto facilitará la operación si apaga o reinicia todos los nodos de Keeper al mismo tiempo.
  • Continuar sin lanzar una excepción cuando se agote el espacio en disco al usar la caché del sistema de archivos. #39106 (Kseniia Sumarokova).
  • Manejo de señales SIGTERM en k8s. #39130 (Timur Solodovnikov).
  • Añadir la columna merge_algorithm (Undecided, Horizontal, Vertical) a system.part_log. #39181 (Azat Khuzhin).
  • No incrementar un contador en system.errors cuando el disco no sea giratorio. #39216 (Raúl Marín).
  • La métrica result_bytes para las consultas INSERT en system.query_log muestra el número de bytes insertados. Anteriormente, el valor era incorrecto y almacenaba el mismo valor que result_rows. #39225 (Ilya Yatsishin).
  • La métrica de uso de CPU en clickhouse-client se mostrará de forma más clara. Corrige #38756. #39280 (Sergei Trifonov).
  • Se vuelve a lanzar la excepción durante la inicialización de la caché del sistema de archivos al iniciar el servidor; se mejora el mensaje de error. #39386 (Kseniia Sumarokova).
  • OpenTelemetry ahora recopila trazas sin spans de Processors de forma predeterminada (hay demasiados). Para habilitar la recopilación de spans de Processors, use la configuración opentelemetry_trace_processors. #39170 (Ilya Yatsishin).
  • Funciones multiMatch[Fuzzy](AllIndices/Any/AnyIndex) - no generan un error lógico si el argumento needle está vacío. #39012 (Robert Schulze).
  • Permite declarar la cola de RabbitMQ sin los argumentos predeterminados x-max-length y x-overflow. #39259 (rnbondarenko).

mejora en compilación, pruebas y empaquetado

  • Aplicación de anotaciones de Clang Thread Safety Analysis (TSA) a ClickHouse. #38068 (Robert Schulze).
  • Adaptación del script de instalación universal para FreeBSD. #39302 (Alexey Milovidov).
  • Preparación para la compilación en la plataforma s390x. #39193 (Harry Lee).
  • Corrección de un error en la biblioteca jemalloc. #38757 (Azat Khuzhin).
  • El benchmark de hardware ahora admite la carga automática de resultados. #38427 (Alexey Milovidov).
  • La tabla del sistema “system.licenses” ahora se completa correctamente en Mac (Darwin). #38294 (Robert Schulze).
  • Cambio de los paquetes all|noarch para que dependan de la arquitectura - Corrección de parte de la documentación al respecto - Publicación de paquetes aarch64|arm64 en Artifactory y en los recursos de la versión - Corrige #36443. #38580 (Mikhail f. Shiryaev).

Corrección de errores (fallo visible para el usuario en una versión oficial estable o preestable)

  • Se corrige el redondeo de Decimal128/Decimal256 con una escala de más de 19 dígitos. #38027 (Igor Nikonov).
  • Se corrigió un bloqueo causado por una condición de carrera en el almacenamiento Hive (motor de tabla de integración). #38887 (lgbo).
  • Se corrige un fallo al ejecutar GRANT ALL ON . con ON CLUSTER. Se introdujo en https://github.com/ClickHouse/ClickHouse/pull/35767. Esto cierra #38618. #38674 (Vitaly Baranov).
  • Corrige la expansión de glob en el caso de las formas {0..10}. Soluciona #38498. La implementación actual es similar a lo que hace el shell, como mencionó @rschu1ze aquí. #38502 (Heena Bansal).
  • Se corrige un fallo de mapUpdate y mapFilter al usarlas con un argumento map constante. Cierra #38547. #38553 (hexiaoting).
  • Corrige la información sobre la monotonicidad de toHour para la optimización de consultas, lo que puede dar lugar a resultados incorrectos en las consultas (análisis de índices incorrecto). Esto corrige #38333. #38675 (Amos Bird).
  • Se corrigió la comprobación de si el almacenamiento S3 admite escrituras en paralelo. Esto hacía que las escrituras en paralelo en S3 no funcionaran. #38792 (chen).
  • Corregir las lecturas con seek en S3 con un búfer de lectura en paralelo. (Afectaba al uso de memoria durante la consulta). Cierra #38258. #38802 (Kseniia Sumarokova).
  • Se actualiza simdjson. Esto corrige #38621: un desbordamiento de búfer en equipos con las CPU Intel más recientes con AVX-512 VBMI. #38838 (Alexey Milovidov).
  • Se corrigió un posible error lógico en las fusiones verticales. #38859 (Maksim Kita).
  • Se corrigió el perfil de configuración con la unidad en segundos. #38896 (Raúl Marín).
  • Corrige la poda incorrecta de particiones cuando hay una clave de partición Nullable. Nota: lo más probable es que no uses claves de partición Nullable; es una funcionalidad poco habitual que no deberías usar. Las claves Nullable no tienen sentido y esta funcionalidad solo es necesaria para algunos casos de uso extravagantes. Esto corrige #38941. #38946 (Amos Bird).
  • Se mejora fsync_part_directory para fetches. #38993 (Azat Khuzhin).
  • Soluciona un posible interbloqueo en OvercommitTracker. Corrige #37794. #39030 (Dmitry Novik).
  • Se corrige un error en la caché del sistema de archivos que podía producirse en ciertos casos límite, cuando la capacidad de la caché alcanzaba su límite. Cierra #39066. #39070 (Kseniia Sumarokova).
  • Corrige algunos casos límite en la interpretación de los argumentos de las expresiones de ventana. Corrige #38538 Permite usar funciones de orden superior en las expresiones de ventana. #39112 (Dmitry Novik).
  • Mantiene el tipo LowCardinality en la función tuple. Anteriormente, se descartaba el tipo LowCardinality y los elementos de la tupla creada pasaban a tener el tipo subyacente de LowCardinality. #39113 (Anton Popov).
  • Se corrigió el error Block structure mismatch, que podía producirse al hacer INSERT en una tabla con MATERIALIZED VIEW adjunta y la opción extremes = 1 habilitada. Cierra #29759 y #38729. #39125 (Nikolai Kochetov).
  • Corrige un resultado inesperado de la consulta cuando tanto optimize_trivial_count_query como empty_result_for_aggregation_by_empty_set se establecen en true. Esto corrige #39140. #39155 (Amos Bird).
  • Se corrigió el error Not found column Type in block en consultas con PREWHERE y optimizaciones de lectura en orden. #39157 (Yakov Olkhovskiy).
  • Corregida una condición de carrera extremadamente rara durante la creación de enlaces físicos en el sistema de archivos remoto. La única forma de reproducirla es mediante la ejecución concurrente de copias de seguridad. #39190 (alesapin).
  • (la replicación zero-copy es una funcionalidad experimental que no debe usarse en producción) Se corrige la recuperación de una parte en memoria con allow_remote_fs_zero_copy_replication. #39214 (Azat Khuzhin).
  • (MaterializedPostgreSQL - característica experimental). Se corrige un fallo de segmentación en el motor de base de datos MaterializedPostgreSQL, que podía producirse si ocurría alguna excepción durante la inicialización de la replicación. Cierra #36939. #39272 (Kseniia Sumarokova).
  • Corrige la recuperación incorrecta de los metadatos de la tabla desde el motor de base de datos PostgreSQL. Cierra #33502. #39283 (Kseniia Sumarokova).
  • Se corrige la excepción de proyección cuando las claves de agregación están encapsuladas en otras funciones. Esto corrige #37151. #37155 (Amos Bird).
  • Se corrige un posible error lógico ... with argument with type Nothing and default implementation for Nothing is expected to return result with type Nothing, got ... en algunas funciones. Cierra: #37610 Cierra: #37741. #37759 (Kruglov Pavel).
  • Se corrige el orden incorrecto de las columnas en las subconsultas de UNION (en caso de columnas duplicadas en las subselecciones, puede producirse un resultado incorrecto). #37887 (Azat Khuzhin).
  • Se corrige el funcionamiento incorrecto de MODIFY ALTER Column cuando los nombres de columna contienen puntos. Cierra #37907. #37971 (Kruglov Pavel).
  • Se ha corregido la lectura de columnas dispersas de tablas MergeTree que almacenan sus datos en S3. #37978 (Anton Popov).
  • Corrige un posible fallo de Distributed async insert al eliminar una réplica de la configuración. #38029 (Nikolai Kochetov).
  • Se corrigió “Faltan columnas” para GLOBAL JOIN con CTE sin alias. #38056 (Azat Khuzhin).
  • Reescribir las funciones de tupla como literales en el modo de compatibilidad retroactiva. #38096 (Anton Kozlov).
  • Se corrige la reserva redundante de memoria para el bloque de salida durante ORDER BY. #38127 (iyupeng).
  • Se corrige un posible error lógico Bad cast from type DB::IColumn* to DB::ColumnNullable* en funciones de mapeo de arrays. Cierra #38006. #38132 (Kruglov Pavel).
  • Se corrige una colisión temporal de nombres en partial merge join, se cierra #37928. #38135 (Vladimir C).
  • Un pequeño problema con consultas como CREATE TABLE nested_name_tuples (a Tuple(x String, y Tuple(i Int32, j String))) ENGINE = Memory; #38136 (lgbo).
  • Se corrige un error en las funciones anidadas con cortocircuito que provocaba la ejecución de argumentos incluso cuando la condición era falsa. Cierra #38040. #38173 (Kruglov Pavel).
  • (Window View es una función experimental) Se corrige LOGICAL_ERROR en WINDOW VIEW con una estructura incorrecta. #38205 (Azat Khuzhin).
  • Actualizar el submódulo librdkafka para corregir un fallo cuando se configura un callback de actualización de OAUTHBEARER. #38225 (Rafael Acevedo).
  • Se corrigió un bloqueo de INSERT en Distributed debido a ProfileEvents. #38307 (Azat Khuzhin).
  • Se corrigen los reintentos en el motor PostgreSQL. #38310 (Kseniia Sumarokova).
  • Se corrige una optimización en PartialSortingTransform (SIGSEGV y posible resultado incorrecto). #38324 (Azat Khuzhin).
  • Se corrige RabbitMQ con formatos basados en PeekableReadBuffer. Cierra #38061. #38356 (Kseniia Sumarokova).
  • MaterializedPostgreSQL: característica experimental. Corrige un posible error Invalid number of rows in Chunk en MaterializedPostgreSQL. Cierra #37323. #38360 (Kseniia Sumarokova).
  • Se corrige la configuración de RabbitMQ con el ajuste de cadena de conexión. Cierra #36531. #38365 (Kseniia Sumarokova).
  • Se corrige el motor PostgreSQL, que no usaba el esquema de PostgreSQL al obtener el tamaño de la dimensión de Array. Cierra #36755. Cierra #36772. #38366 (Kseniia Sumarokova).
  • Corrige posibles resultados incorrectos en consultas distribuidas con DISTINCT y LIMIT. Corrige #38282. #38371 (Anton Popov).
  • Corrige resultados incorrectos de countSubstrings() y position() en patrones con bytes nulos. #38589 (Robert Schulze).
  • Ahora es posible iniciar un clickhouse-server y hacer attach/detach de tablas, incluso de tablas con valores incorrectos en la representación de IPv4/IPv6. Corrección definitiva del problema #35156. #38590 (alesapin).
  • La función rankCorr funcionará correctamente aunque algunos argumentos sean NaN. Esto corrige #38396. #38722 (Alexey Milovidov).
  • Se corrige parallel_view_processing=1 con optimize_trivial_insert_select=1. Se corrige max_insert_threads al insertar en vistas. #38731 (Azat Khuzhin).
  • Se corrige un error de uso de memoria ya liberada en funciones de agregación con el combinador Map, que provocaba resultados incorrectos. #38748 (Azat Khuzhin).

Lanzamiento de ClickHouse 22.6, 2022-06-16. Presentación, Vídeo

Cambio incompatible con versiones anteriores

  • Se elimina la compatibilidad con los literales numéricos octales en SQL. En versiones anteriores, se interpretaban como Float64. #37765 (Yakov Olkhovskiy).
  • Cambia la forma de interpretar las configuraciones que usan seconds como tipo para admitir valores de coma flotante (por ejemplo, max_execution_time=0.5). Los valores Infinity o NaN provocarán una excepción. #37187 (Raúl Marín).
  • Se ha cambiado el formato de la serialización binaria de las columnas del tipo experimental Object. El nuevo formato es más fácil de implementar en clientes de terceros. #37482 (Anton Popov).
  • La configuración output_format_json_named_tuples_as_objects ahora está activada de forma predeterminada. Permite serializar tuplas con nombre como objetos JSON en formatos JSON. #37756 (Anton Popov).
  • Los patrones LIKE con un símbolo de escape al final (’&#39;) ya no están permitidos (como exige el estándar SQL). #37764 (Robert Schulze).
  • Si ejecuta distintas versiones de ClickHouse en un cluster con CPU AArch64, o mezcla AArch64 y amd64 en un cluster, y usa consultas distribuidas con GROUP BY sobre varias claves de tipo de tamaño fijo que caben en 256 bits pero no en 64 bits, y el tamaño del resultado es enorme, los datos no se agregarán completamente en el resultado de estas consultas durante la actualización. Solución temporal: actualice con tiempo de inactividad en lugar de realizar una actualización gradual.

funcionalidad

  • Añade la función GROUPING. Permite desambiguar los registros en las consultas con ROLLUP, CUBE o GROUPING SETS. Cierra #19426. #37163 (Dmitry Novik).
  • Un nuevo algoritmo codec FPC para la compresión de datos de punto flotante. #37553 (Mikhail Guzov).
  • Se añaden nuevos formatos JSON columnares: JSONColumns, JSONCompactColumns, JSONColumnsWithMetadata. Cierra #36338 Cierra #34509. #36975 (Kruglov Pavel).
  • Se agregó una herramienta para visualizar trazas de OpenTelemetry basada en d3js. #37810 (Sergei Trifonov).
  • Se admiten INSERTs en la tabla system.zookeeper. Cierra #22130. #37596 (Han Fei).
  • Admite argumentos pattern no constantes para las funciones LIKE, ILIKE y match. #37251 (Robert Schulze).
  • Las funciones ejecutables definidas por el usuario ahora admiten parámetros. Ejemplo: SELECT test_function(parameters)(arguments). Se cierra #37578. #37720 (Maksim Kita).
  • Añadir la columna merge_reason a la tabla system.part&#95;log. #36912 (Sema Checherinda).
  • Se añade compatibilidad con Maps y Records en formato Avro. Se añade la nueva configuración input_format_avro_null_as_default , que permite insertar null como valor predeterminado en formato Avro. Cierra #18925 Cierra #37378 Cierra #32899. #37525 (Kruglov Pavel).
  • Se añade la herramienta clickhouse-disks para inspeccionar y trabajar con sistemas de archivos virtuales configurados para ClickHouse. #36060 (Artyom Yurkov).
  • Añade funciones para aristas unidireccionales de H3. #36843 (Bharat Nallan).
  • Se añadió soporte para calcular hashids a partir de enteros sin signo. #37013 (Michael Nutt).
  • Se permite especificar explícitamente SALT para CREATE USER <user> IDENTIFIED WITH sha256_hash. #37377 (Yakov Olkhovskiy).
  • Se añaden dos nuevas opciones de configuración input_format_csv_skip_first_lines/input_format_tsv_skip_first_lines para permitir omitir un número determinado de líneas al inicio del archivo en formatos CSV/TSV. #37537 (Kruglov Pavel).
  • La función showCertificate muestra el certificado SSL actual del servidor. #37540 (Yakov Olkhovskiy).
  • Se admite un origen HTTP para Dictionaries en named collections. #37581 (Yakov Olkhovskiy).
  • Se agregó una nueva window function nonNegativeDerivative(metric_column, timestamp_column[, INTERVAL x SECOND]). #37628 (Andrey Zvonov).
  • Se implementó la posibilidad de cambiar el comentario de las tablas ReplicatedMergeTree. #37416 (Vasily Nemkov).
  • Se añadió la consulta SYSTEM UNFREEZE, que elimina toda la copia de seguridad independientemente de que la tabla correspondiente se haya eliminado o no. #36424 (Vadim Volodin).

Funcionalidad experimental

  • Habilita POPULATE para WINDOW VIEW. #36945 (vxider).
  • Se añade compatibilidad con ALTER TABLE ... MODIFY QUERY para WINDOW VIEW. #37188 (vxider).
  • Este PR cambia el comportamiento de la sintaxis ENGINE en WINDOW VIEW para que sea igual que en MATERIALIZED VIEW. #37214 (vxider).

Mejora del rendimiento

  • Se añadieron numerosas optimizaciones para ARM NEON #38093(Daniel Kutenin), (Alexandra Pilipyuk) Nota: si ejecuta distintas versiones de ClickHouse en un clúster con CPU ARM y utiliza consultas distribuidas con GROUP BY de varias claves de tamaño fijo que caben en 256 bits, pero no en 64 bits, el resultado de la consulta de agregación será incorrecto durante la actualización. Solución alternativa: actualice con tiempo de inactividad en lugar de realizar una actualización gradual.
  • Mejora el rendimiento y el uso de memoria al hacer select de un subconjunto de columnas en los formatos Native, Protobuf, CapnProto, JSONEachRow, TSKV y en todos los formatos con sufijos WithNames/WithNamesAndTypes. Anteriormente, al seleccionar solo un subconjunto de columnas de archivos en estos formatos, se leían todas las columnas y se almacenaban en memoria. Ahora solo se leen las columnas necesarias. Este PR habilita la opción input_format_skip_unknown_fields de forma predeterminada, ya que, de lo contrario, al hacer select de un subconjunto de columnas, se lanzará una excepción. #37192 (Kruglov Pavel).
  • Ahora se pueden aplicar más filtros en el join. #37472 (Amos Bird).
  • Cargar marcas solo para las columnas necesarias al leer partes en formato wide. #36879 (Anton Kozlov).
  • Mejora del rendimiento de la agregación cuando se usan columnas dispersas (que pueden habilitarse con la configuración experimental ratio_of_defaults_for_sparse_serialization en tablas MergeTree) como argumentos de funciones de agregado. #37617 (Anton Popov).
  • Optimizada la función COALESCE con dos argumentos. #37666 (Anton Popov).
  • Sustituir multiIf por if cuando multiIf tenga solo una condición, ya que la función if ofrece mejor rendimiento. #37695 (Anton Popov).
  • Mejora el rendimiento de las funciones dictGetDescendants y dictGetChildren: crea un índice jerárquico temporal de padre a hijos por consulta, en lugar de por cada llamada a función dentro de la consulta. Permite especificar BIDIRECTIONAL para atributos HIERARHICAL; el diccionario mantendrá en memoria el índice de padre a hijos, de modo que las funciones dictGetDescendants y dictGetChildren no creen un índice temporal por consulta. Cierra #32481. #37148 (Maksim Kita).
  • La destrucción del estado de los agregados ahora puede enviarse a un pool de hilos. Para las consultas con LIMIT y un estado grande, esto supone una mejora significativa del rendimiento; por ejemplo, select uniq(number) from numbers_mt(1e7) group by number limit 100 pasó a ser aproximadamente 2,5 veces más rápida. #37855 (Nikita Taranov).
  • Mejora del rendimiento al ordenar por una sola columna. #37195 (Maksim Kita).
  • Mejora del rendimiento de la ordenación por una sola columna mediante especializaciones de la cola de ordenación. #37990 (Maksim Kita).
  • Mejora del rendimiento de 2x a 4x en las funciones de norma y distancia de arrays. #37394 (Alexander Gololobov).
  • Mejora el rendimiento de las funciones de comparación numérica mediante despacho dinámico. #37399 (Maksim Kita).
  • Mejora el rendimiento de ORDER BY con LIMIT. #37481 (Maksim Kita).
  • Mejora el rendimiento de la función hasAll con la infraestructura de despacho dinámico. #37484 (Maksim Kita).
  • Mejora del rendimiento de las funciones greatCircleAngle, greatCircleDistance y geoDistance. #37524 (Maksim Kita).
  • Mejora el rendimiento de insert en MergeTree si hay varias columnas en ORDER BY. #35762 (Maksim Kita).
  • Se corrige el uso excesivo de CPU en segundo plano cuando hay muchas tablas. #38028 (Maksim Kita).
  • Mejora del rendimiento de la función not mediante despacho dinámico. #38058 (Maksim Kita).
  • Se optimizó el almacenamiento en caché interno de los patrones de re2 que aparecen, por ejemplo, en las funciones LIKE y MATCH. #37544 (Robert Schulze).
  • Mejora de la función todo en uno para generar máscaras de bits de filtro con instrucciones AVX-512. #37588 (yaqi-zhao).
  • Se aplica el método de lectura threadpool al motor de integración de Hive. Esto acelerará significativamente la lectura. #36328 (李扬).
  • Cuando todas las columnas que se van a leer son claves de partición, construye las columnas a partir del número de fila del archivo sin leer realmente el archivo de Hive. #37103 (lgbo).
  • Compatibilidad con varios discos para la caché de archivos de Hive. #37279 (lgbo).
  • Limitar el uso máximo de caché por consulta puede prevenir eficazmente la contaminación del pool de caché. Incidencias relacionadas. #37859 (Han Shukai).
  • Actualmente, ClickHouse descarga directamente todos los archivos remotos a la caché local (incluso si solo se leen una vez), lo que con frecuencia provoca E/S en el disco local. En algunos casos, estas E/S pueden no ser necesarias y pueden causar fácilmente una degradación del rendimiento. Como se muestra en la figura siguiente, al ejecutar SSB Q1-Q4, el uso de la caché ha provocado una degradación del rendimiento. #37516 (Han Shukai).
  • Permite filtrar la lista de archivos mediante columnas virtuales como _file y _path al leer desde S3. Relacionado con #37174, #23494. #37356 (Amos Bird).
  • En la función: CompressedWriteBuffer::nextImpl(), hay un paso innecesario de copia en escritura que ocurría con frecuencia durante la inserción de datos. A continuación se muestra la diferencia con este parche: - Antes: 1. Comprimir “working_buffer” en “compressed_buffer” 2. copiar al escribir en “out” - Después: Comprimir directamente “working_buffer” en “out”. #37242 (jasperzhu).

Mejora

  • Se admiten tipos con valores predeterminados no estándar en ROLLUP, CUBE y GROUPING SETS. Cierra #37360. #37667 (Dmitry Novik).
  • Corrige la recopilación de stack traces en ARM. Cierra #37044. Cierra #15638. #37797 (Maksim Kita).
  • El cliente probará cada dirección IP devuelta por la resolución DNS hasta establecer correctamente la conexión. #37273 (Yakov Olkhovskiy).
  • Permite usar el tipo String en lugar de Binary en los formatos Arrow/Parquet/ORC. Este PR introduce 3 nuevos ajustes para ello: output_format_arrow_string_as_string, output_format_parquet_string_as_string, output_format_orc_string_as_string. El valor predeterminado de todos ellos es false. #37327 (Kruglov Pavel).
  • Aplicar la configuración input_format_max_rows_to_read_for_schema_inference al total de filas leídas de todos los archivos incluidos en los globs. Anteriormente, la configuración input_format_max_rows_to_read_for_schema_inference se aplicaba por separado a cada archivo del glob y, en caso de haber una gran cantidad de valores nulos, podíamos leer las primeras input_format_max_rows_to_read_for_schema_inference filas de cada archivo y no obtener nada. Además, aumentar el valor predeterminado de esta configuración a 25000. #37332 (Kruglov Pavel).
  • Añadir un privilegio CLUSTER independiente (y la directiva de configuración access_control_improvements.on_cluster_queries_require_cluster_grant, para mantener la compatibilidad con versiones anteriores, con valor predeterminado false). #35767 (Azat Khuzhin).
  • Se añadió compatibilidad con la inferencia de esquemas en hdfsCluster. #35812 (Nikita Mikhaylov).
  • Se implementó el algoritmo de balanceo de carga least_used para discos dentro de un volumen (configuración multidisco). #36686 (Azat Khuzhin).
  • Modificar el endpoint HTTP para que devuelva las estadísticas completas en la cabecera X-ClickHouse-Summary cuando send_progress_in_http_headers=0 (antes devolvía solo ceros). - Modificar el endpoint HTTP para que devuelva la cabecera X-ClickHouse-Exception-Code cuando ya se haya enviado el progreso (send_progress_in_http_headers=1) - Modificar el endpoint HTTP para que devuelva HTTP_REQUEST_TIMEOUT (408) en lugar de HTTP_INTERNAL_SERVER_ERROR (500) en caso de errores TIMEOUT_EXCEEDED. #36884 (Raúl Marín).
  • Permitir a un usuario inspeccionar los grants de los roles concedidos. #36941 (nvartolomei).
  • No calcule una integral numéricamente; use funciones CDF en su lugar. Esto acelerará la ejecución y aumentará la precisión. Esto corrige #36714. #36953 (Nikita Mikhaylov).
  • Se agregó la implementación predeterminada para Nothing en las funciones. Ahora, la mayoría de las funciones devolverán una columna de tipo Nothing si uno de sus argumentos es Nothing. Esto también resuelve el problema con funciones como arrayMap/arrayFilter y similares cuando reciben un array vacío como argumento. Anteriormente, consultas como select arrayMap(x -> 2 * x, []); fallaban porque la función dentro de la lambda no podía trabajar con el tipo Nothing; ahora, dichas consultas devuelven un array vacío de tipo Array(Nothing). También se agregó compatibilidad con arrays de tipos Nullable en funciones como arrayFilter/arrayFill. Anteriormente, consultas como select arrayFilter(x -> x % 2, [1, NULL]) fallaban; ahora funcionan (si el resultado de la lambda es NULL, este valor no se incluirá en el resultado). Cierra #37000. #37048 (Kruglov Pavel).
  • Ahora, si un segmento tiene una réplica local, creamos un plan local y otro para leer de todas las réplicas remotas. Comparten un iniciador que coordina la lectura. #37204 (Nikita Mikhaylov).
  • Ya no se aborta el inicio del servidor si la opción de configuración “mark_cache_size” no está establecida explícitamente. #37326 (Robert Schulze).
  • Permite indicar NULL/NOT NULL inmediatamente después del tipo en la declaración de una columna. #37337 (Igor Nikonov).
  • optimiza la obtención del búfer de lectura para el segmento de archivo PARTIALLY_DOWNLOADED. #37338 (xiedeyantu).
  • Se intentó mejorar el procesamiento de las funciones de cortocircuito para corregir problemas en las pruebas de estrés. #37384 (Kruglov Pavel).
  • Cierra #37395. #37415 (Memo).
  • Se corrige un bloqueo mutuo extremadamente raro durante la recuperación de partes en la replicación zero-copy. Corrige #37423. #37424 (metahys).
  • No permitir la creación de almacenamiento con un formato de datos desconocido. #37450 (Kruglov Pavel).
  • Se establece el valor predeterminado de global_memory_usage_overcommit_max_wait_microseconds en 5 segundos. Se añade información sobre OvercommitTracker al mensaje de excepción OOM. Se añade el evento de profile MemoryOvercommitWaitTimeMicroseconds. #37460 (Dmitry Novik).
  • No mostrar -0.0 como tiempo de CPU en clickhouse-client. Puede aparecer debido a errores de redondeo. Esto cierra #38003. Esto cierra #38038. #38064 (Alexey Milovidov).
  • UI de Play: mantener los controles en su lugar cuando la página se desplaza horizontalmente. Esto hace que la edición sea cómoda incluso si la tabla es ancha y se ha desplazado mucho hacia la derecha. La función fue propuesta por Maksym Tereshchenko, de CaspianDB. #37470 (Alexey Milovidov).
  • Modificar el div de consulta en play.html para que pueda ampliarse más allá del 20% de altura. En el caso de consultas muy largas, resulta útil ampliar el elemento textarea; actualmente, como el div tiene una altura fija, el textarea ampliado oculta el div de datos que está debajo. Con esta corrección, al ampliar el elemento textarea, el div de datos se desplazará hacia abajo o hacia arriba, de modo que el textarea ampliado no lo oculte. Además, mantiene el ancho del cuadro de consulta al 100 % incluso cuando el usuario ajusta el tamaño del textarea de la consulta. #37488 (guyco87).
  • Se añadieron ProfileEvents para la introspección del tipo de partes escritas (insertadas o fusionadas) (Inserted{Wide/Compact/InMemory}Parts, MergedInto{Wide/Compact/InMemory}Parts. Se añadió la columna part_type a system.part_log. Resuelve #37495. #37536 (Anton Popov).
  • mejora de ClickHouse Keeper: mover los logs dañados a una carpeta con marca temporal. #37565 (Antonio Andelic).
  • No escribir columnas expiradas por TTL en fusiones posteriores (antes, solo la primera fusión/optimización de la parte no escribía las columnas expiradas por TTL; todas las demás sí lo hacían). #37570 (Azat Khuzhin).
  • Resultado más preciso de la función miscelánea dumpColumnStructure cuando hay columnas LowCardinality o Sparse. En versiones anteriores, estas funciones convertían el argumento en una columna completa antes de devolver el resultado. Esto es necesario para dar una respuesta en #6935. #37633 (Alexey Milovidov).
  • clickhouse-keeper: almacenar solo IDs de sesión únicos para los watches. #37641 (Azat Khuzhin).
  • Se corrige el posible error “Cannot write to finalized buffer”. #37645 (Azat Khuzhin).
  • Agregar la configuración support_batch_delete para DiskS3 a fin de deshabilitar las llamadas para eliminar varios objetos, que Google Cloud Storage no admite. #37659 (Fred Wulff).
  • Se añadió una opción para desactivar el pool de conexiones en ODBC bridge. #37705 (Anton Kozlov).
  • Las funciones dictGetHierarchy, dictIsIn, dictGetChildren, dictGetDescendants añadieron compatibilidad con el atributo HIERARCHICAL de tipo Nullable en los diccionarios. Cierra #35521. #37805 (Maksim Kita).
  • Se añadió información relacionada con la versión de BoringSSL en la tabla system.build_options. #37850 (Bharat Nallan).
  • Ahora, clickhouse-server elimina los directorios delete_tmp al iniciar el servidor. Corrige #26503. #37906 (alesapin).
  • Limpia las partes detached dañadas tras un timeout. Cierra #25195. #37975 (Kseniia Sumarokova).
  • Ahora, en la familia de motores de tablas MergeTree, las partes que no se hayan podido mover se eliminarán de inmediato. #37994 (alesapin).
  • Ahora, si está habilitada la configuración always_fetch_merged_part para ReplicatedMergeTree, los merges intentarán buscar partes en otras réplicas con menos frecuencia, reduciendo la carga en [Zoo]Keeper. #37995 (alesapin).
  • Se añaden también privilegios implícitos con opción de concesión. Por ejemplo, GRANT CREATE TABLE ON test.* TO A WITH GRANT OPTION ahora permite que A ejecute GRANT CREATE VIEW ON test.* TO B. #38017 (Vitaly Baranov).

Mejoras de compilación/pruebas/empaquetado

  • Usar clang-14 y la versión 14 de la infraestructura LLVM para las compilaciones. Esto cierra #34681. #34754 (Alexey Milovidov). Nota: clang-14 tiene un error en ThreadSanitizer que empeora el funcionamiento de nuestro CI.
  • Permitir reducir privilegios al inicio. Esto simplifica las imágenes de Docker. Cierra #36293. #36341 (Alexey Milovidov).
  • Añadir al CI la comprobación ortográfica de la documentación. #37790 (Vladimir C).
  • Corregir un proceso de stripping demasiado agresivo que eliminaba el hash integrado necesario para verificar la consistencia del ejecutable. #37993 (Robert Schulze).

Corrección de errores

  • Se corrigen las sentencias SELECT ... INTERSECT y EXCEPT SELECT con tipos String constantes. #37738 (Antonio Andelic).
  • Se corrigió GROUP BY con AggregateFunction (es decir, se hace GROUP BY sobre la columna que tiene el tipo AggregateFunction). #37093 (Azat Khuzhin).
  • (WINDOW VIEW experimental) Se corrigió addDependency en WindowView. Este error se puede reproducir igual que en #37237. #37224 (vxider).
  • Se corrige una inconsistencia en la funcionalidad ORDER BY … WITH FILL. Una consulta que contiene ORDER BY … WITH FILL puede generar filas adicionales cuando hay varias columnas WITH FILL. #38074 (Yakov Olkhovskiy).
  • Este PR mueve addDependency del constructor a startup() para evitar añadir una dependencia a una tabla eliminada; corrige #37237. #37243 (vxider).
  • Se corrigió la inserción de valores predeterminados para valores ausentes en formatos columnares. Antes, las columnas ausentes se rellenaban con los valores predeterminados de los tipos, no con los de las columnas. #37253 (Kruglov Pavel).
  • (tipo Object experimental) Se corrigen algunos casos de inserción de arrays anidados en columnas de tipo Object. #37305 (Anton Popov).
  • Corrige errores inesperados debidos a conflictos entre cadenas constantes en funciones de agregación, prewhere y join. Cierra #36891. #37336 (Vladimir C).
  • Se corrigieron las proyecciones con GROUP/ORDER BY en la consulta y optimize_aggregation_in_order (antes el resultado era incorrecto, ya que solo se realizaba la ordenación final). #37342 (Azat Khuzhin).
  • Se corrigió un error relacionado con símbolos en el nombre de la clave en S3. Soluciona #33009. #37344 (Vladimir Chebotarev).
  • Generar una excepción cuando GROUPING SETS se utilice con ROLLUP o CUBE. #37367 (Dmitry Novik).
  • Corregido LOGICAL_ERROR en getMaxSourcePartsSizeForMerge durante los merges (en caso de que se hayan especificado en config.xml (la forma nueva), y no en users.xml (la forma obsoleta), valores no estándar más altos de background_pool_size/background_merges_mutations_concurrency_ratio). #37413 (Azat Khuzhin).
  • Se deja de eliminar la BOM UTF-8 en el formato RowBinary. #37428 (Paul Loyd). #37428 (Paul Loyd).
  • corrección de clickhouse-keeper: corrige la recuperación forzada en clústeres de un solo nodo. #37440 (Antonio Andelic).
  • Se corrige el error lógico en las funciones normalizeUTF8. Cierra #37298. #37443 (Maksim Kita).
  • Se corrigió el cast lowcard de Nullable en JoinSwitcher, se cierra #37385. #37453 (Vladimir C).
  • Se corrigió la salida de tuplas con nombre en los formatos ORC/Arrow/Parquet. #37458 (Kruglov Pavel).
  • Se corrige la optimización de funciones monótonas en la cláusula ORDER BY en presencia de GROUPING SETS. Corrige #37401. #37493 (Dmitry Novik).
  • Corrige un error al hacer join con un diccionario en determinadas condiciones. Cierra #37386. #37530 (Vladimir C).
  • Se prohíbe optimize_aggregation_in_order con GROUPING SETS (corrige LOGICAL_ERROR). #37542 (Azat Khuzhin).
  • Corrige la información errónea del volcado de ActionsDAG. #37587 (zhanglistar).
  • Se corrige la conversión de tipos para consultas UNION (puede producir LOGICAL_ERROR). #37593 (Azat Khuzhin).
  • Se corrige el modificador WITH FILL con intervalos negativos en la cláusula STEP. Corrige #37514. #37600 (Anton Popov).
  • Se corrige el uso no válido de arrays en joinGet cuando join_use_nulls = 1. Esto corrige #37562. #37650 (Amos Bird).
  • Corrige el desajuste en el número de columnas en cross join, cierra #37561. #37653 (Vladimir C).
  • Corrige un fallo de segmentación en show create table de una base de datos MySQL cuando está configurada con named collections. Cierra #37683. #37690 (Kseniia Sumarokova).
  • Se corrigió un problema por el que RabbitMQ Storage no podía iniciarse tras reiniciar el servidor si el almacenamiento se había creado sin la cláusula SETTINGS. Cierra #37463. #37691 (Kseniia Sumarokova).
  • Las funciones definidas por el usuario en SQL deshabilitan CREATE/DROP en modo readonly. Cierra #37280. #37699 (Maksim Kita).
  • Corrige el formato de los argumentos Nullable de las funciones ejecutables definidas por el usuario. Cierra #35897. #37711 (Maksim Kita).
  • Se corrige la optimización habilitada al establecer optimize_monotonous_functions_in_order_by en las consultas distribuidas. Corrige #36037. #37724 (Anton Popov).
  • Corrige un posible error lógico: Invalid Field get from type UInt64 to type Float64 en la table function values. Cierra #37602. #37754 (Kruglov Pavel).
  • Se corrige un posible segfault durante la inferencia del esquema en caso de una excepción en el constructor de SchemaReader. Cierra #37680. #37760 (Kruglov Pavel).
  • Se corrige la configuración cast_ipv4_ipv6_default_on_conversion_error de la función interna cast. Cierra #35156. #37761 (Maksim Kita).
  • Se corrige el error de toString en DatatypeDate32. #37775 (LiuNeng).
  • La configuración dead_session_check_period_ms de clickhouse-keeper se convirtió a microsegundos (se multiplicó por 1000), lo que provocó que las sesiones inactivas solo se limpiaran al cabo de varios minutos (en lugar de 500 ms). #37824 (Michael Lex).
  • Soluciona el posible error “No more packets are available” en las consultas distribuidas (en caso de que async_socket_for_remote/use_hedged_requests esté deshabilitado). #37826 (Azat Khuzhin).
  • (WINDOW VIEW experimental) No se elimina la tabla de destino interna al ejecutar ALTER TABLE ... MODIFY QUERY en WindowView. #37879 (vxider).
  • Se corrige el propietario del directorio de coordinación en la imagen de Docker de clickhouse-keeper. Corrige #37914. #37915 (James Maidment).
  • Dictionaries corrige una consulta personalizada con el campo de actualización y {condition}. Cierra #33746. #37947 (Maksim Kita).
  • Corrige un posible resultado incorrecto de SELECT ... WITH FILL cuando ORDER BY debe aplicarse después del resultado de WITH FILL (p. ej., en una consulta externa). El resultado incorrecto se debía a una optimización de las expresiones de ORDER BY (#35623). Cierra #37904. #37959 (Yakov Olkhovskiy).
  • (WINDOW VIEW experimental) Añade las columnas predeterminadas que faltan al insertar en la tabla de destino en WindowView, corrige #37815. #37965 (vxider).
  • Se corrigió un marco de pila demasiado grande que provocaba un error de compilación. #37996 (Han Shukai).
  • Al activar enable_filesystem_query_cache_limit, se lanza la excepción Reserved cache size exceeds the remaining cache size. #38004 (xiedeyantu).
  • Corregida la conversión de tipos en consultas UNION (puede producir LOGICAL_ERROR). #34775 (Azat Khuzhin).
  • Es posible que la fusión TTL no se vuelva a programar si BackgroundExecutor está ocupado. —merges_with_ttl_counter se incrementa en selectPartsToMerge() — la tarea —merge se ignorará si BackgroundExecutor está ocupado — mer​ges_with_ttl_counter no disminuirá. #36387 (lthaooo).
  • Se corrigió el valor sobrescrito de la configuración normalize_function_names. #36937 (李扬).
  • Corrección de las funciones de ventana con decaimiento temporal exponencial. Ahora se respetan los límites de la ventana. #36944 (Vladimir Chebotarev).
  • Se corrige un posible error de uso de memoria tras su liberación al leer system.projection_parts y system.projection_parts_columns . Esto corrige #37184. #37185 (Amos Bird).
  • Se corrigió el comportamiento de los segundos fraccionarios de DateTime64 antes de la época de Unix. #37697 (Andrey Zvonov). #37039 (李扬).

Lanzamiento de ClickHouse 22.5, 2022-05-19. Presentación, Vídeo

Notas de actualización

  • Ahora, las background merges, las mutations y OPTIMIZE ya no incrementarán las métricas SelectedRows y SelectedBytes. Seguirán incrementando MergedRows y MergedUncompressedBytes, como antes. Esto solo afecta a los valores de las métricas y los mejora. Este cambio no introduce ninguna incompatibilidad, pero como puede llamar la atención el cambio en las métricas, lo incluimos en esta categoría. #37040 (Nikolai Kochetov).
  • Se actualizó el módulo BoringSSL a la versión oficial compatible con FIPS. Esto hace que ClickHouse cumpla con FIPS. #35914 (Meena-Renganathan). Se eliminaron los cifrados aes-192-cfb128 y aes-256-cfb128 porque no están incluidos en la versión de BoringSSL certificada para FIPS.
  • La configuración max_memory_usage se eliminó del perfil de usuario predeterminado en users.xml. Esto permite límites de memoria flexibles para las consultas, en lugar del antiguo límite rígido de 10 GB.
  • La configuración log_query_threads se desactiva de forma predeterminada. Controla el registro de estadísticas sobre cada hilo que participa en la ejecución de consultas. Tras añadir compatibilidad con lecturas asíncronas, el número total de identificadores de hilo distintos pasó a ser demasiado grande, y el registro en query_thread_log se volvió demasiado costoso. #37077 (Alexey Milovidov).
  • Se elimina la función groupArraySorted, que tiene un error. #36822 (Alexey Milovidov).

Nueva funcionalidad

  • Habilita memory overcommit de forma predeterminada. #35921 (Dmitry Novik).
  • Añade compatibilidad con GROUPING SETS en la cláusula GROUP BY. Esta implementación admite el procesamiento en paralelo de los conjuntos de agrupación. #33631 (Dmitry Novik).
  • Añade la tabla system.certificates. #37142 (Yakov Olkhovskiy).
  • Añade las funciones h3Line, h3Distance y h3HexRing. #37030 (Bharat Nallan).
  • Nueva herramienta de diagnóstico basada en un único binary (clickhouse-diagnostics). #36705 (Dale McDiarmid).
  • Añade el formato de salida Prometheus #36051. #36206 (Vladimir C).
  • Añade el formato de entrada MySQLDump. Lee todos los datos de las consultas INSERT que pertenecen a una tabla del dump. Si hay más de una tabla, de forma predeterminada lee los datos de la primera. #36667 (Kruglov Pavel).
  • Muestra los campos total_rows y total_bytes en system.tables para las tablas temporales. #36401. #36439 (xiedeyantu).
  • Permite sobrescribir parts_to_delay_insert y parts_to_throw_insert con configuraciones a nivel de consulta. Si están definidas, prevalecerán sobre las configuraciones a nivel de tabla. #36371 (Memo).

Funcionalidad experimental

  • Se implementaron funciones de distancia L1, L2, Linf y coseno para arrays, y funciones de norma L1, L2 y Linf para arrays. #37033 (qieqieplus). Advertencia: estas funciones se renombrarán.
  • Se mejoró la consulta WATCH en WindowView: 1. Reduce la latencia de entrega de resultados de la consulta al llamar a la señal fire_condition. 2. Hace más rápida la operación de cancelación de consultas (ctrl-c) al comprobar isCancelled() con más frecuencia. #37226 (vxider).
  • Introspección para la eliminación de la caché del sistema de archivos. #36802 (Han Shukai).
  • Se añadió una nueva función hash wyHash64 para SQL. #36467 (olevino).
  • Mejora para bases de datos replicadas: se añadió la consulta SYSTEM SYNC DATABASE REPLICA, que permite sincronizar los metadatos de las tablas dentro de una base de datos Replicated, ya que actualmente la sincronización es asíncrona. #35944 (Nikita Mikhaylov).
  • Mejora para la caché remota del sistema de archivos: mejor lectura desde la caché. #37054 (Kseniia Sumarokova). Mejora de la consulta SYSTEM DROP FILESYSTEM CACHE: opción <path> y opción FORCE. #36639 (Kseniia Sumarokova).
  • Mejora para datos semiestructurados: permite convertir columnas de tipo Object(...) a Object(Nullable(...)). #36564 (awakeljw).
  • Mejora para réplicas paralelas: creamos un intérprete local si queremos ejecutar una consulta en la réplica localhost. Pero, al ejecutar una consulta en varias réplicas, dependemos de que exista una conexión para que las réplicas puedan comunicarse con el coordinador. Ahora esto se ha mejorado y la réplica localhost puede comunicarse con el coordinador directamente dentro del mismo proceso. #36281 (Nikita Mikhaylov).

Mejora del rendimiento

  • Mejora el rendimiento de las funciones de agregación avg y sum cuando se usan sin una expresión GROUP BY. #37257 (Maksim Kita).
  • Mejora el rendimiento de las funciones aritméticas unarias (bitCount, bitNot, abs, intExp2, intExp10, negate, roundAge, roundDuration, roundToExp2, sign) mediante despacho dinámico. #37289 (Maksim Kita).
  • Mejora el rendimiento de ORDER BY, MergeJoin y la inserción en MergeTree mediante compilación JIT del comparador de columnas de ordenación. #34469 (Maksim Kita).
  • Cambia la estructura de system.asynchronous_metric_log. Ocupará unas 10 veces menos espacio. Esto cierra #36357. Se eliminó el campo event_time_microseconds porque es inútil. #36360 (Alexey Milovidov).
  • Carga marks solo para las columnas necesarias al leer partes wide. #36879 (Anton Kozlov).
  • Mejora el rendimiento de la caché de descriptores de archivo al reducir el alcance de los mutex. #36682 (Anton Kozlov).
  • Mejora el rendimiento de la lectura desde el motor de almacenamiento File y las table functions file cuando la path tiene globs y el directory coincidente contiene una gran cantidad de files. #36647 (Anton Popov).
  • Aplica parsing en paralelo al input format HiveText, lo que puede acelerar 2x el parsing de HiveText al leer un file local. #36650 (李扬).
  • HashJoin predeterminado no es seguro para subprocesos al insertar filas de la tabla derecha, por lo que se ejecuta en un solo thread. Cuando la tabla derecha es grande, el proceso de join es demasiado lento y aprovecha poco la CPU. #36415 (lgbo).
  • Permite reescribir select countDistinct(a) from t como select count(1) from (select a from t groupBy a). #35993 (zhanglistar).
  • Transforma una chain de OR LIKE en multiMatchAny. Se habilitará cuando tengamos más confianza en que funciona correctamente. #34932 (Daniel Kutenin).
  • Mejora el rendimiento de algunas funciones mediante inlining. #34544 (Daniel Kutenin).
  • Añade una rama para evitar memcpy innecesarios en readBig. Esto mejora algo el rendimiento. #36095 (jasperzhu).
  • Implementa una clave GROUP BY parcial para optimize_aggregation_in_order. #35111 (Azat Khuzhin).

Mejora

  • Mostrar los nombres de los archivos con errores en caso de errores de análisis al ejecutar las funciones de tabla file, s3 y url. #36314 (Anton Popov).
  • Se permitió aumentar en tiempo de ejecución el número de hilos para ejecutar operaciones en segundo plano (merges, mutations, moves y fetches) si este se especifica en la configuración de nivel superior. #36425 (Nikita Mikhaylov).
  • Ahora, las funciones de conversión de fecha y hora que generan una hora anterior a 1970-01-01 00:00:00 con zonas horarias con desfases parciales de horas/minutos se saturarán a cero en lugar de provocar un desbordamiento. Esto da continuidad a https://github.com/ClickHouse/ClickHouse/pull/29953, que aborda https://github.com/ClickHouse/ClickHouse/pull/29953#discussion&#95;r800550280 . Se marca como mejora porque es un comportamiento definido por la implementación (y un caso muy poco frecuente) y está permitido cambiarlo. #36656 (Amos Bird).
  • Añadir una advertencia si alguien ejecuta clickhouse-server con el nivel de log “test”. El nivel de log “test” se añadió recientemente y no puede usarse en producción debido a una degradación del rendimiento inevitable, irreparable, fatal y potencialmente mortal. #36824 (Alexey Milovidov).
  • Analizar colaciones en CREATE TABLE, lanzar una excepción o ignorarlas. Cierra #35892. #36271 (yuuch).
  • La opción compatibility_ignore_auto_increment_in_create_table permite ignorar la palabra clave AUTO_INCREMENT en la definición de una columna para facilitar la migración desde MySQL. #37178 (Igor Nikonov).
  • Se añaden los alias JSONLines y NDJSON para JSONEachRow. Cierra #36303. #36327 (flynn).
  • Se limita el número máximo de particiones que se pueden consultar para cada tabla de Hive. Evita el consumo excesivo de recursos. #37281 (lgbo).
  • Se añadió un CAST implícito al segundo argumento de la función h3kRing para mejorar su usabilidad. Cierra #35432. #37189 (Maksim Kita).
  • Se corrige la indicación de progreso de INSERT SELECT en clickhouse-local para cualquier consulta y la del progreso de archivos en el cliente; ahora el progreso de archivos es más preciso. #37075 (Kseniia Sumarokova).
  • Corrige un error que puede hacer que algunas partes obsoletas de la familia de motores de tabla MergeTree queden olvidadas en caso de fallos del sistema de archivos durante la eliminación de partes. Antes de esta corrección, solo se eliminaban tras el primer reinicio del servidor. #37014 (alesapin).
  • Se implementó un nuevo modo de gestión de las políticas de fila que puede habilitarse en la configuración principal y permite a los usuarios sin políticas de fila permisivas leer filas. #36997 (Vitaly Baranov).
  • UI de Play: los números Nullable se alinearán a la derecha en las celdas de la tabla. Con esto se cierra #36982. #36988 (Alexey Milovidov).
  • UI de Play: Si hay una fila en el resultado y más de unas cuantas columnas, se muestra el resultado en vertical. Continuación de #36811. #36842 (Alexey Milovidov).
  • Se limpió el CSS de la UI de Play. Los píxeles están distribuidos de manera más uniforme. Mejor usabilidad para contenido largo en las celdas de tabla. #36569 (Alexey Milovidov).
  • Finalizar los búferes de escritura en caso de excepción para evitar hacerlo en los destructores. Se espera que esto corrija: #36907. #36979 (Kruglov Pavel).
  • Después de #36425, ajustes como background_fetches_pool_size quedaron obsoletos y pueden aparecer en la configuración de nivel superior, pero ClickHouse lanza una excepción como Error updating configuration from '/etc/clickhouse-server/config.xml' config.: Code: 137. DB::Exception: A setting 'background_fetches_pool_size' appeared at top level in config /etc/clickhouse-server/config.xml. Esto se ha corregido. #36917 (Nikita Mikhaylov).
  • Añadir información de diagnóstico adicional (si procede) al enviar una excepción a otro servidor. #36872 (tavplubix).
  • Se permite ejecutar funciones hash con argumentos de tipo Array(Tuple(..)). #36812 (Anton Popov).
  • Se añadió la opción de configuración user_defined_path. #36753 (Maksim Kita).
  • Permitir el uso de la macro de clúster en la función de tabla s3Cluster. #36726 (Vadim Volodin).
  • Cancelar correctamente las consultas INSERT en clickhouse-client/clickhouse-local. #36710 (Azat Khuzhin).
  • Permite cancelar una consulta y seguir manteniendo un id de consulta adecuado en MySQLHandler. #36699 (Amos Bird).
  • Añadir la columna is_all_data_sent a system.processes y mejorar la comprobación de robustez de las pruebas internas basada en ella. #36649 (Azat Khuzhin).
  • Las métricas sobre el tiempo dedicado a la lectura desde S3 ahora se calculan correctamente. Cierra #35483. #36572 (Alexey Milovidov).
  • Permitir descriptores de archivo en la table function file si se ejecuta en clickhouse-local. #36562 (wuxiaobai24).
  • Permitir nombres de elementos de tupla que comiencen por dígitos. #36544 (Anton Popov).
  • Ahora, clickhouse-benchmark puede leer la información de autenticación de variables de entorno. #36497 (Anton Kozlov).
  • Mejora de clickhouse-keeper: se añade compatibilidad con la recuperación forzada, lo que permite reconfigurar el cluster sin quorum. #36258 (Antonio Andelic).
  • Mejora de la inferencia de esquemas para objetos JSON. #36207 (Kruglov Pavel).
  • Refactorización del código relacionado con la inferencia de esquemas con globs. Probar el siguiente archivo del glob solo si tiene sentido (antes se probaba el siguiente archivo ante cualquier error). Además, corrige #36317. #36205 (Kruglov Pavel).
  • Agregar un privilegio CLUSTER separado (y la directiva de configuración access_control_improvements.on_cluster_queries_require_cluster_grant, para mantener la compatibilidad con versiones anteriores, con el valor predeterminado false). #35767 (Azat Khuzhin).
  • Si la cantidad necesaria de memoria está disponible antes de que se detenga la consulta seleccionada, todas las consultas en espera continúan ejecutándose. Ahora no detenemos ninguna consulta si la memoria se libera antes de que la consulta seleccionada tenga conocimiento de la cancelación. #35637 (Dmitry Novik).
  • Detección de Nullable en Protobuf. En proto3, los valores predeterminados no se envían en la codificación wire. Esto hace que no sea trivial distinguir entre valores null y valores predeterminados en columnas Nullable. Una forma estándar de abordar este problema es usar wrappers de Google para anidar el valor de destino dentro de un mensaje interno (consulte https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/wrappers.proto). En este caso, un campo ausente se interpreta como valor null, un campo presente con el valor ausente se interpreta como valor predeterminado y un campo con un valor normal se interpreta como un valor normal. Sin embargo, ClickHouse interpreta los wrappers de Google como columnas anidadas. Proponemos introducir un comportamiento especial para detectar los wrappers de Google e interpretarlos como se describe arriba. Por ejemplo, para serializar valores de una columna Nullable test, usaríamos google.protobuf.StringValue test en nuestro esquema .proto. Tenga en cuenta que estos tipos son los llamados “tipos bien conocidos” en Protobuf, implementados en la propia biblioteca. #35149 (Jakub Kuklis).
  • Se añadió compatibilidad con la especificación de content_type en la configuración predefinida y estática del controlador HTTP. #34916 (Roman Nikonov).
  • Advertir adecuadamente si se usa clickhouse-client —file sin un —external previo. Cierra #34747. #34765 (李扬).
  • Se mejoró el motor de base de datos MySQL para que sea compatible con el tipo de dato binary(0). #37232 (zzsmdfj).
  • Mejora del informe en JSON de clickhouse-benchmark. #36473 (Tian Xinhui).
  • El servidor podría negarse a arrancar si no puede resolver el hostname de un diccionario externo de ClickHouse. Corregido. Corrige #36451. #36463 (tavplubix).

Mejoras de compilación/pruebas/empaquetado

  • Ahora clickhouse-keeper para la arquitectura x86_64 está enlazado de forma estática con musl y no depende de ninguna biblioteca del sistema. #31833 (Alexey Milovidov).
  • Las builds de ClickHouse para la arquitectura PowerPC64LE ya están disponibles en el script de instalación universal curl https://clickhouse.com/ | sh y mediante enlace directo https://builds.clickhouse.com/master/powerpc64le/clickhouse. #37095 (Alexey Milovidov).
  • Limitar la generación de código PowerPC a Power8 para mejorar la compatibilidad. Esto cierra #36025. #36529 (Alexey Milovidov).
  • Simplificar la prueba de rendimiento. Esto nos permitirá usarla. #36769 (Alexey Milovidov).
  • Hacer que la comparación de rendimiento falle si hay errores en el informe. #34797 (Mikhail f. Shiryaev).
  • Añadir compatibilidad con ZSTD en Arrow. Esto corrige #35283. #35486 (Sean Lafferty).

Corrección de errores

  • Extrae el ID de versión del URI, si está presente, y añade una solicitud al URI HTTP de AWS. Cierra #31221. - [x] Extraer el Version ID del URI, si está presente, y reconstruirlo sin él. - [x] Configurar el objeto AWS HTTP URI con la solicitud. - [x] Pruebas unitarias: gtest_s3_uri - [x] Se eliminó el commit de instrumentación. #34571 (Saad Ur Rahman).
  • Se corrigió el alias attribute.values de system.opentelemetry_span_log para que use values en lugar de keys. #37275 (Aleksandr Razumov).
  • Se corrige la conversión de Nullable(String) a Nullable(Bool/IPv4/IPv6). Cierra #37221. #37270 (Kruglov Pavel).
  • Funcionalidad experimental: Se corrige la ejecución de mutaciones en tablas en las que existen columnas de tipo Object. Ahora también se permite usar subcolumnas de tipo Object en la expresión WHERE de consultas UPDATE o DELETE, así como manipular (DROP, MODIFY) subcolumnas individuales. Corrige #37205. #37266 (Anton Popov).
  • Kafka no necesita group.id en la etapa del productor. En el registro de la consola puede encontrar una advertencia que describe este problema: 2022.05.15 17:59:13.270227 [ 137 ] {} <Warning> StorageKafka (topic-name): [rdk:CONFWARN] [thrd:app]: Configuration property group.id is a consumer property and will be ignored by this producer instance. #37228 (Mark Andreev).
  • Función experimental (WindowView): Actualiza max_fired_watermark después de que los bloques se hayan emitido realmente, en caso de eliminar datos que aún no se hayan emitido. #37225 (vxider).
  • Se corrige “No se puede crear una columna de tipo Set” en consultas distribuidas con LIMIT BY. #37193 (Azat Khuzhin).
  • Funcionalidad experimental: Ahora la consulta WATCH EVENTS de WindowView ya no se interrumpirá debido al fragmento no vacío creado en WindowViewSource.h:58. #37182 (vxider).
  • Se habilita enable_global_with_statement para las subconsultas, se cierra #37141. #37166 (Vladimir C).
  • Se corrigió la conversión implícita en optimize_skip_unused_shards_rewrite_in. #37153 (Azat Khuzhin).
  • La función ILIKE en columnas FixedString podría haber devuelto resultados incorrectos (es decir, encontrar menos coincidencias de las debidas). #37117 (Robert Schulze).
  • Corregido GROUP BY con AggregateFunction (es decir, se hace GROUP BY por la columna de tipo AggregateFunction). #37093 (Azat Khuzhin).
  • Funcionalidad experimental: Se corrige optimize_aggregation_in_order con GROUP BY por prefijo y funciones de agregación *Array. #37050 (Azat Khuzhin).
  • Se corrigió la degradación del rendimiento en algunas consultas INSERT SELECT con agregación implícita. Soluciona #36792. #37047 (tavplubix).
  • Funcionalidad experimental: corrección de GROUP BY en orden (optimize_aggregation_in_order=1) con funciones de agregación *Array (groupArrayArray/…). #37046 (Azat Khuzhin).
  • Se corrige la salida inválida de LowCardinality->ArrowDictionary cuando el tipo de los índices no es UInt8. Cierra #36832. #37043 (Kruglov Pavel).
  • Se corrigió el problema con los valores inf en quantileTDigest. Corrige #32107. #37021 (Vladimir Chebotarev).
  • Se corrige el envío de datos de tablas externas en HedgedConnections cuando max_parallel_replicas != 1. #36981 (Kruglov Pavel).
  • Se corrigió un error lógico en la consulta TRUNCATE de la base de datos Replicated. Corrige #33747. #36976 (tavplubix).
  • Característica experimental: Se corrige un bloqueo al eliminar la tabla de origen en WindowView. Cierra #35678. #36967 (vxider).
  • Función experimental (caché de rocksdb): se corrigió el problema: #36671. #36929 (李扬).
  • Función experimental: Se corrigen errores al usar varias columnas en WindowView, añadiendo acciones de conversión para poder llamar a writeIntoWindowView con un esquema ligeramente diferente. #36928 (vxider).
  • Se corrige un error en clickhouse-keeper que puede provocar la corrupción de archivos de registro comprimidos en caso de baja carga y reinicios. #36910 (alesapin).
  • Corrige un resultado incorrecto de una consulta al realizar una agregación constante. Esto corrige #36728 . #36888 (Amos Bird).
  • Funcionalidad experimental: Se corrigió el recuento de current_size en la memoria caché. #36887 (Kseniia Sumarokova).
  • Función experimental: Se corrigió el disparo en la window view con hop window #34044. #36861 (vxider).
  • Función experimental: Corrige un cast incorrecto en el búfer en caché del sistema de archivos remoto. #36809 (Kseniia Sumarokova).
  • Se corrigió la creación de tablas con flatten_nested = 0. Antes, las columnas Nested sin aplanar podían aplanarse tras reiniciar el servidor. #36803 (Anton Popov).
  • Corrige algunos problemas con las lecturas asíncronas desde sistemas de archivos remotos que se producían al leer datos de baja cardinalidad. #36763 (Kseniia Sumarokova).
  • Característica experimental: Se corrige la inserción en columnas de tipo Object a partir de varios archivos, p. ej., mediante la función de tabla file con globs. #36762 (Anton Popov).
  • Se corrigen los tiempos de espera en las solicitudes hedged. Un bloqueo de la conexión justo después de enviar una consulta remota podía provocar una espera indefinida. #36749 (Kruglov Pavel).
  • Característica experimental: Se corrige un error de groupBitmapAndState/groupBitmapOrState/groupBitmapXorState en una tabla distribuida. #36739 (Zhang Yifan).
  • Funcionalidad experimental: Durante la prueba en la PR, descubrí que una clase de caché se inicializaba dos veces, lo que provocaba una excepción. Aunque la causa de este problema no está clara, parece haber en ClickHouse una lógica de código que carga el disco repetidamente, por lo que debemos realizar una comprobación especial para esta situación. #36737 (Han Shukai).
  • Corregidas las fusiones verticales en las partes wide. Antes, durante la fusión, podía lanzarse la excepción There is no column. #36707 (Anton Popov).
  • Se corrigió la recarga del servidor al cambiar el puerto (sin esperar a las conexiones actuales del contexto de consulta). #36700 (Azat Khuzhin).
  • Función experimental: En el PR anterior, descubrí que las pruebas (stateless tests, comprobación flaky (address, actions)) terminan agotando el tiempo de espera. Además, las pruebas en local también pueden desencadenar interbloqueos inestables del sistema. Este problema sigue existiendo al usar el código fuente más reciente de master. #36697 (Han Shukai).
  • Característica experimental: Se corrige el reinicio del servidor si cambia la configuración de la caché. #36685 (Kseniia Sumarokova).
  • Corrige un posible acceso a memoria del heap después de liberarla en la inferencia de esquemas. Cierra #36661. #36679 (Kruglov Pavel).
  • Se corrigió el análisis de la configuración en la consulta CREATE cuando no se especifica el motor. Corrige https://github.com/ClickHouse/ClickHouse/pull/34187#issuecomment-1103812419. #36642 (tavplubix).
  • Funcionalidad experimental: Corregidas las fusiones de partes en formato wide con tipo Object. #36637 (Anton Popov).
  • Corregido el fallo del formato cuando la expresión por defecto que sigue a EPHEMERAL no es un literal. Cierra #36618. #36633 (flynn).
  • Se corrige la excepción Missing column, que podía producirse al usar INTERPOLATE con una tabla ENGINE = MergeTree. #36549 (Yakov Olkhovskiy).
  • Se corrige un posible error con literales en WHERE en consultas con JOIN. Cierra #36279. #36542 (Vladimir C).
  • Se corrigió la actualización del desplazamiento en ReadBufferFromEncryptedFile, que podía provocar un comportamiento indefinido. #36493 (Kseniia Sumarokova).
  • Se corrigen las comprobaciones de validez del hostname en la configuración del clúster de Keeper. Se añade la configuración keeper_server.host_checks_enabled para activar/desactivar dichas comprobaciones. #36492 (Antonio Andelic).
  • Se corrige el uso de las funciones ejecutables definidas por el usuario en GROUP BY. Antes, las funciones ejecutables definidas por el usuario no se podían usar como expresiones en GROUP BY. Cierra #36448. #36486 (Maksim Kita).
  • Se corrigió una posible excepción causada por un paquete desconocido del servidor en el cliente. #36481 (Kseniia Sumarokova).
  • Característica experimental (por favor, no use nunca system.session_log, se va a eliminar): Añade los valores enum que faltan en la tabla system.session_log. Cierra #36474. #36480 (Memo).
  • Se corrigió un error en la inferencia de esquema de s3Cluster que provocaba que no se leyeran todos los datos en el select desde s3Cluster. El error se introdujo en https://github.com/ClickHouse/ClickHouse/pull/35544. #36434 (Kruglov Pavel).
  • Corrige la desreferenciación de nullptr en el comparador de JOIN y COLUMNS. Esto corrige #36416. Corresponde a https://github.com/ClickHouse/ClickHouse/pull/36417. #36430 (Amos Bird).
  • Se corrige la recarga del Diccionario de ClickHouseDictionarySource si contiene subconsultas escalares. #36390 (lthaooo).
  • Se corrige una aserción en JOIN, se cierra #36199. #36201 (Vladimir C).
  • Las consultas con alias dentro de operadores especiales devolvían un error de análisis sintáctico (no funcionaba en la versión 22.1). Ejemplo: SELECT substring('test' AS t, 1, 1). #36167 (Maksim Kita).
  • Funcionalidad experimental: Se corrige la inserción de JSON complejos con arrays anidados en columnas de tipo Object. #36077 (Anton Popov).
  • Corrige ALTER DROP COLUMN en una columna anidada con partes compactas (es decir, ALTER TABLE x DROP COLUMN n, cuando existe la columna n.d). #35797 (Azat Khuzhin).
  • Se corrigió el error de longitud fuera de rango de la función substring cuando offset y length son constantes negativas y s no es constante. #33861 (RogerYK).

Lanzamiento de ClickHouse 22.4, 2022-04-19. Presentación, Video

Cambio incompatible con versiones anteriores

  • Ya no se permite usar SETTINGS después de FORMAT en las consultas INSERT (existe la configuración de compatibilidad allow_settings_after_format_in_insert para aceptar estas consultas, pero está desactivada de forma predeterminada). #35883 (Azat Khuzhin).
  • La función yandexConsistentHash (algoritmo de hash consistente de Konstantin “kostik” Oblakov) pasa a llamarse kostikConsistentHash. El nombre anterior se mantiene como alias por compatibilidad. Aunque este cambio es compatible con versiones anteriores, es posible que eliminemos el alias en versiones futuras, por lo que se recomienda actualizar el uso de esta función en sus aplicaciones. #35553 (Alexey Milovidov).

funcionalidad

  • Se añadió la extensión INTERPOLATE a ORDER BY … WITH FILL. Se cierra #34903. #35349 (Yakov Olkhovskiy).
  • Perfilado a nivel de processors (con la configuración log_processors_profiles, ClickHouse escribirá en la tabla system.processors_profile_log el tiempo que cada processor dedicó a la ejecución/a la espera de datos). #34355 (Azat Khuzhin).
  • Se añadieron las funciones makeDate(year, month, day) y makeDate32(year, month, day). #35628 (Alexander Gololobov). Se implementaron makeDateTime() y makeDateTIme64(). #35934 (Alexander Gololobov).
  • Se admite un nuevo tipo de cuota WRITTEN BYTES para limitar la cantidad de bytes escritos durante las consultas de insert. #35736 (Anton Popov).
  • Se añadió la función flattenTuple. Recibe como argumento un Tuple anidado con elementos con nombre y devuelve un Tuple aplanado cuyos elementos son las rutas del Tuple original. P. ej.: Tuple(a Int, Tuple(b Int, c Int)) -> Tuple(a Int, b Int, c Int). flattenTuple puede usarse para seleccionar todas las rutas del tipo Object como columnas independientes. #35690 (Anton Popov).
  • Se añadieron las funciones arrayFirstOrNull y arrayLastOrNull. Cierra #35238. #35414 (Maksim Kita).
  • Se añadieron las funciones minSampleSizeContinous y minSampleSizeConversion. Autor: achimbab. #35360 (Maksim Kita).
  • Nuevas funciones minSampleSizeContinous y minSampleSizeConversion. #34354 (achimbab).
  • Se introduce el formato ProtobufList (todos los registros como mensajes repetidos en la salida Protobuf). Cierra #16436. #35152 (Nikolai Kochetov).
  • Se añaden las funciones h3PointDistM, h3PointDistKm, h3PointDistRads, h3GetRes0Indexes y h3GetPentagonIndexes. #34568 (Bharat Nallan).
  • Se añade la función toLastDayOfMonth, que redondea hacia arriba una fecha o una fecha con hora al último día del mes. #33501. #34394 (Habibullah Oladepo).
  • Se añadió una opción de balanceo de carga para el cliente de [Zoo]Keeper. Cierra #29617. #30325 (小路).
  • Añade un nuevo tipo de políticas de fila llamado simple. Antes de este PR teníamos dos tipos de políticas de fila: permissive y restrictive. Una política de fila simple añade un nuevo filtro a una tabla sin efectos secundarios, a diferencia de lo que ocurría con las políticas permissive y restrictive. #35345 (Vitaly Baranov).
  • Se añadió la posibilidad de especificar el secreto del clúster en una base de datos Replicated. #35333 (Nikita Mikhaylov).
  • Se añadieron comprobaciones básicas al iniciar el servidor (memoria disponible y espacio en disco, número máximo de hilos, etc.). #34566 (Sergei Trifonov).
  • Mejora de INTERVAL: ahora puede usarse con [MILLI|MICRO|NANO]SECOND. Se añadieron las funciones toStartOf[Milli|Micro|Nano]second(). Se añadieron [add|subtract][Milli|Micro|Nano]seconds(). #34353 (Andrey Zvonov).

Funcionalidad experimental

  • Se añadió compatibilidad con transacciones para tablas MergeTree simples. Esta funcionalidad es muy experimental y no se recomienda para producción. Parte de #22086. #24258 (tavplubix).
  • Se añadió compatibilidad con la inferencia de esquema para el tipo Object en el formato JSONEachRow. Permite convertir columnas de tipo Map en columnas de tipo Object. #35629 (Anton Popov).
  • Se permite escribir en la caché del sistema de archivos remoto en todas las operaciones de escritura. Se añade la tabla system.remote_filesystem_cache. Se añade la consulta drop remote filesystem cache. Se añade introspección para los metadatos de S3 con la tabla system.remote_data_paths. Cierra #34021. Se añade una opción de caché para merges al incorporar el modo read_from_filesystem_cache_if_exists_otherwise_bypass_cache (activado de forma predeterminada para merges y que también puede activarse mediante una configuración de consulta con el mismo nombre). Se cambian de nombre las configuraciones relacionadas con la caché (remote_fs_enable_cache -> enable_filesystem_cache, etc.). #35475 (Kseniia Sumarokova).
  • Se añade una opción para almacenar los metadatos de las partes en RocksDB. Acelera la carga de partes de MergeTree para reducir el tiempo de arranque de clickhouse-server. Con esta mejora, clickhouse-server pudo reducir el tiempo de arranque de 75 minutos a 20 segundos, con 700k partes de MergeTree. #32928 (李扬).

mejora del rendimiento

  • Nueva optimización del plan de consulta. Evalúa las funciones después de ORDER BY cuando es posible. Por ejemplo, en la consulta SELECT sipHash64(number) FROM numbers(1e8) ORDER BY number LIMIT 5, la función sipHash64 se evaluaría después de ORDER BY y LIMIT, lo que proporciona una aceleración de ~20x. #35623 (Nikita Taranov).
  • Los tamaños de las tablas hash usadas durante la agregación ahora se recopilan y se reutilizan en consultas posteriores para evitar redimensionamientos de las tablas hash. #33439 (Nikita Taranov).
  • Mejora de la función hasAll mediante instrucciones SIMD (SSE y AVX2). #27653 (youennL-cs). #35723 (Maksim Kita).
  • Múltiples cambios para mejorar el rendimiento de ASOF JOIN (entre 1,2 y 1,6 veces más rápido). También añade compatibilidad con enteros grandes. #34733 (Raúl Marín).
  • Mejora el rendimiento de ASOF JOIN si la clave es un entero nativo. #35525 (Maksim Kita).
  • Paralelización de la carga multiparte en almacenamiento S3. #35343 (Sergei Trifonov).
  • El motor de almacenamiento URL ahora descarga varios fragmentos en paralelo si el endpoint admite HTTP Range. Se añadieron dos ajustes adicionales, max_download_threads y max_download_buffer_size, que controlan el número máximo de hilos que una sola consulta puede usar para descargar el archivo y el número máximo de bytes que cada hilo puede procesar. #35150 (Antonio Andelic).
  • Usa varios hilos para descargar objetos desde S3. La descarga se puede controlar mediante los ajustes max_download_threads y max_download_buffer_size. #35571 (Antonio Andelic).
  • Reduce el alcance del mutex al interactuar con HDFS. Relacionado con #35292. #35646 (shuchaome).
  • Requiere mutations para el TTL por tabla solo cuando este se haya modificado. #35953 (Azat Khuzhin).

Mejora

  • Múltiples mejoras en la inferencia de esquema. Se usan algunos ajustes y heurísticas para determinar números, cadenas, arrays, tuples y maps en los formatos de datos CSV, TSV y TSVRaw. Se añade la configuración input_format_csv_use_best_effort_in_schema_inference para el formato CSV, que habilita o deshabilita el uso de estas heurísticas; si está deshabilitada, todo se trata como string. Se añade una configuración similar, input_format_tsv_use_best_effort_in_schema_inference, para el formato TSV/TSVRaw. Estas configuraciones están habilitadas de forma predeterminada. - Se añade compatibilidad con Maps en la inferencia de esquema del formato Values. - Se corrige un posible segfault en la inferencia de esquema del formato Values. - Se permite omitir columnas con tipos no compatibles en los formatos Arrow/ORC/Parquet. Se añaden las configuraciones correspondientes para ello: input_format_{parquet|orc|arrow}_skip_columns_with_unsupported_types_in_schema_inference. Estas configuraciones están deshabilitadas de forma predeterminada. - Se permite convertir una columna de tipo Null en una columna Nullable con todos los valores NULL en los formatos Arrow/Parquet. - Se permite especificar nombres de columna en la inferencia de esquema mediante la configuración column_names_for_schema_inference para formatos que no contienen nombres de columna (como CSV, TSV, JSONCompactEachRow, etc.). - Se corrige la inferencia de esquema en los formatos ORC/Arrow/Parquet en lo relativo al uso de columnas Nullable. Anteriormente, ninguno de los tipos inferidos era Nullable, lo que impedía leer columnas Nullable a partir de los datos; ahora está corregido y todos los tipos inferidos son siempre Nullable (porque no podemos determinar si una columna es Nullable o no leyendo el esquema). - Se corrige la inferencia de esquema en el formato Template con reglas de escape de CSV. #35582 (Kruglov Pavel).
  • Se añaden el análisis en paralelo y la inferencia de esquema para el formato JSONAsObject. #35592 (Anton Popov).
  • Se añadió soporte para la inferencia automática de esquema a la función de tabla s3Cluster. Se sincronizaron las firmas de s3 y s3Cluster. #35544 (Nikita Mikhaylov).
  • Se añadió compatibilidad con la inferencia de esquema para hdfsCluster. #35602 (Nikita Mikhaylov).
  • Se añade la nueva configuración input_format_json_read_bools_as_numbers, que permite inferir e interpretar los valores booleanos como números en formatos de entrada JSON. Está activada de forma predeterminada. Propuesta por @alexey-milovidov. #35735 (Kruglov Pavel).
  • Se mejora el orden de las columnas en la inferencia de esquemas para los formatos TSKV y JSONEachRow, cierra #35640. La inferencia de esquemas ya no se detiene al leer una fila vacía en los formatos TSKV y JSONEachRow. #35724 (Kruglov Pavel).
  • Se agregan las configuraciones input_format_orc_case_insensitive_column_matching, input_format_arrow_case_insensitive_column_matching e input_format_parquet_case_insensitive_column_matching, que permiten a ClickHouse hacer coincidir columnas sin distinguir entre mayúsculas y minúsculas al leer datos de archivos ORC, Arrow o Parquet. #35459 (Antonio Andelic).
  • Se añadió la columna is_secure a system.query_log, que indica si el cliente utiliza una conexión segura a través de TCP o HTTP. #35705 (Antonio Andelic).
  • Ahora kafka_num_consumers puede ser mayor que el número de núcleos físicos en el caso de una máquina con pocos recursos (menos de 16 núcleos). #35926 (alesapin).
  • Añadir algunas métricas básicas para monitorizar las tablas con engine=Kafka. #35916 (filimonov).
  • Ahora ya no se permite usar ALTER TABLE ... RESET SETTING con configuraciones inexistentes en la familia de motores MergeTree. Corrige #35816. #35884 (alesapin).
  • Ahora, algunas consultas ALTER MODIFY COLUMN para los tipos Arrays y Nullable pueden realizarse a nivel de metadatos sin necesidad de mutaciones. Por ejemplo, cambiar de Array(Enum8('Option1'=1)) a Array(Enum8('Option1'=1, 'Option2'=2)). #35882 (alesapin).
  • Se añadió una animación al icono del reloj de arena para indicar al usuario que se está ejecutando una consulta. #35860 (peledni).
  • Se admite ALTER TABLE t DETACH PARTITION (ALL). #35794 (awakeljw).
  • Mejorar el análisis de proyecciones para optimizar consultas simples como count(). #35788 (Amos Bird).
  • Se admite la inferencia de esquema para insert select con la función de tabla input. Obtiene el esquema de la tabla de inserción en lugar de inferirlo a partir de los datos en el caso de insert select desde funciones de tabla que admiten inferencia de esquema. Cierra #35639. #35760 (Kruglov Pavel).
  • Se respeta remote_url_allow_hosts para las tablas de Hive. #35743 (李扬).
  • Se implementa send_logs_level para clickhouse-local. Cierra #35653. #35716 (Kseniia Sumarokova).
  • Cierra #35641 Permite columnas EPHEMERAL sin una expresión predeterminada explícita. #35706 (Yakov Olkhovskiy).
  • Se añade el contador de eventos de perfil AsyncInsertBytes para el tamaño de los INSERT asíncronos. #35644 (Alexey Milovidov).
  • Mejora la descripción del pipeline de JOIN. #35612 (何李夫).
  • Inferir la ruta absoluta de configuración de HDFS. #35572 (李扬).
  • Mejora el rendimiento al pegar y la compatibilidad de clickhouse-client. Esto ayuda con #35501. #35541 (Amos Bird).
  • Podía producirse un desbordamiento de pila en consultas distribuidas si estaba habilitada alguna de las opciones de configuración async_socket_for_remote y use_hedged_requests al analizar un tipo de dato con un nivel de anidamiento muy profundo (al menos en una compilación de depuración). Cierra #35509. #35524 (Kruglov Pavel).
  • Añadir los tamaños de las subcolumnas a la tabla system.parts_columns. #35488 (Anton Popov).
  • Añade información explícita sobre la tabla al nodo de escaneo del plan de consulta y del pipeline. #35460 (何李夫).
  • Permitir que el servidor escuche en puertos con números bajos (p. ej., 443). El script de instalación de ClickHouse establecerá cap_net_bind_service en el binario. #35451 (Alexey Milovidov).
  • Se corrigió INSERT INTO table FROM INFILE: no mostraba la barra de progreso. #35429 (xiedeyantu).
  • Se añaden los argumentos --user, --password, --host, --port a la herramienta clickhouse-diagnostics. #35422 (李扬).
  • Se admite uuid para motores Postgres. Cierra #35384. #35403 (Kseniia Sumarokova).
  • Para la table function s3cluster, HDFSCluster o hive, no podemos obtener el AccessType correcto con StorageFactory::instance().getSourceAccessType(getStorageTypeName()). Este PR lo corrige. #35365 (李扬).
  • Se elimina la opción --testmode para clickhouse-client y se habilita de forma incondicional. #35354 (Kseniia Sumarokova).
  • No permitir la operación wchc (comando de cuatro letras) en clickhouse-keeper. #35320 (zhangyuli1).
  • Se añade la función getTypeSerializationStreams. Para un tipo especificado (que se detecta a partir de la columna), devuelve un array con todas las rutas de los subflujos de serialización. Esta función resulta útil principalmente para desarrolladores. #35290 (李扬).
  • Si no se especifica port en la configuración del clúster, se usará el puerto predeterminado del servidor. Con esto se cierra #34769. #34772 (Alexey Milovidov).
  • Use el índice minmax para archivos orc/parquet en Hive Engine. PR relacionada: https://github.com/ClickHouse/arrow/pull/10. #34631 (李扬).
  • Las tablas de registro del sistema ahora permiten especificar COMMENT en la declaración de ENGINE. Cierra #33768. #34536 (Maksim Kita).
  • Compatibilidad adecuada con la configuración max_rows_to_read al leer según el orden de la clave de ordenación y con un límite especificado. Anteriormente, podía lanzarse la excepción Limit for rows or bytes to read exceeded incluso si la consulta en realidad requería leer una cantidad menor de filas. #33230 (Anton Popov).
  • Respetar solo quota & period de cgroups e ignorar shares (que en realidad no limitan la cantidad de núcleos que se pueden usar). #35815 (filimonov).

Mejoras de compilación/pruebas/empaquetado

  • Añadir el siguiente lote de configuraciones de aleatorización en las pruebas funcionales. #35047 (Kruglov Pavel).
  • Añadir una comprobación de compatibilidad con versiones anteriores en la prueba de estrés. Cierra #25088. #27928 (Kruglov Pavel).
  • Migrar la compilación de paquetes a nfpm - Dejar obsoleto el script release en favor de packages/build - Compilar todo en la imagen clickhouse/binary-builder (limpieza: clickhouse/deb-builder) - Añadir el stripping de símbolos a cmake (pendiente: usar prefix/lib/prefix/lib/bin_dir/clickhouse/$binary.debug) - Corregir el problema con los símbolos DWARF - Añadir paquetes APK de Alpine - Renombrar alien a additional_pkgs. #33664 (Mikhail f. Shiryaev).
  • Añadir un escaneo nocturno y la carga de resultados para Coverity. #34895 (Boris Kuschel).
  • Un paquete pequeño específico para clickhouse-keeper. #35308 (Mikhail f. Shiryaev).
  • La ejecución con podman estaba fallando: se queja de que el mismo volumen se especifica dos veces. #35978 (Roman Nikonov).
  • Mejora menor en la configuración de compilación de contrib/krb5. #35832 (Anton Kozlov).
  • Añadir una etiqueta para identificar una tarea de compilación para cada imagen. #35583 (Mikhail f. Shiryaev).
  • Aplicar el formateador black al código Python y añadir una comprobación por commit. #35466 (Mikhail f. Shiryaev).
  • Rehacer la imagen de Alpine para usar un Dockerfile limpio. Crear un script en tests/ci para compilar imágenes tanto de Ubuntu como de Alpine. Añadir la imagen de clickhouse-keeper (cc @nikitamikhaylov). Añadir una comprobación de compilación a PullRequestCI. Añadir un job a ReleaseCI. Añadir un job a MasterCI para compilar y publicar las imágenes clickhouse/clickhouse-server:head y clickhouse/clickhouse-keeper:head para cada PR fusionada. #35211 (Mikhail f. Shiryaev).
  • Corregir el informe de la prueba de estrés en CI; ahora cargamos el runlog con información sobre las pruebas de estrés iniciadas una sola vez. #35093 (Mikhail f. Shiryaev).
  • Cambiar a libcxx / libcxxabi de LLVM 14. #34906 (Raúl Marín).
  • Actualizar unixodbc para mitigar CVE-2018-7485. Nota: este CVE no es relevante para ClickHouse, ya que implementa su propia capa de aislamiento para ODBC. #35943 (Mikhail f. Shiryaev).

Corrección de errores

  • Se añadieron las configuraciones input_format_ipv4_default_on_conversion_error, input_format_ipv6_default_on_conversion_error para permitir insertar en las tablas, como valores predeterminados, direcciones IP no válidas. Cierra #35726. #35733 (Maksim Kita).
  • Evitar borrar columnas de un bloque si no existen al leer datos de Hive. #35393 (lgbo).
  • Añadir comprobación de tipos al crear una vista materializada. Cierra: #23684. #24896 (hexiaoting).
  • Se corrigió el formato de las consultas INSERT INFILE (faltaban comillas). #35886 (Azat Khuzhin).
  • Se deshabilita session_log porque se detectó un problema de seguridad de memoria mediante fuzzing. Véase #35714. #35873 (Alexey Milovidov).
  • Evita procesar varias veces el TTL por columna. #35820 (Azat Khuzhin).
  • Se corrigen las inserciones en columnas de tipo Object cuando hay datos correspondientes a varias particiones en la consulta de inserción. #35806 (Anton Popov).
  • Se corrige un error en los índices de columnas no incluidas en los formatos -WithNames que provocaba el error INCORRECT_NUMBER_OF_COLUMNS cuando el número de columnas supera las 256. Cierra #35793. #35803 (Kruglov Pavel).
  • Soluciona #35751. #35799 (Nikolay Degterinsky).
  • Corrección para leer desde HDFS en formato Snappy. #35771 (shuchaome).
  • Corrige un error en la conversión de tipos personalizados a String que podía provocar un segfault o mensajes de error inesperados. Cierra #35752. #35755 (Kruglov Pavel).
  • Se corrigió la implementación de any/all (subconsulta). Cierra #35489. #35727 (Kseniia Sumarokova).
  • Se corrige la eliminación de una base de datos no vacía en clickhouse-local. Cierra #35692. #35711 (Kseniia Sumarokova).
  • Se corrige un error al crear una vista materializada con una subconsulta tras reiniciar el servidor. La vista materializada no se actualizaba después de insertar datos en la tabla subyacente tras reiniciar el servidor. Cierra #35511. #35691 (Kruglov Pavel).
  • Se corrige la posible excepción Can't adjust last granule al leer subcolumnas del tipo experimental Object. #35687 (Anton Popov).
  • Se habilita de forma predeterminada la compilación con JIT. #35683 (Maksim Kita).
  • Corrige una posible pérdida de subcolumnas en el tipo experimental Object. #35682 (Anton Popov).
  • Se corrige la comprobación de nulabilidad de la clave de ASOF JOIN, cierra #35565. #35674 (Vladimir C).
  • Corrige la lógica de comprobación para partes con proyecciones. Se producía un error cuando la proyección y la parte principal tenían tipos diferentes. Es similar a https://github.com/ClickHouse/ClickHouse/pull/33774 . El error fue corregido por @caoyang10. #35667 (Amos Bird).
  • Corrige el fallo del servidor al pasar un gran número de argumentos a la función format. Consulta el archivo de prueba para ver cómo reproducir el fallo. #35651 (Amos Bird).
  • Se corrigió el uso de las cuotas con inserciones asíncronas. #35645 (Anton Popov).
  • Corrige los argumentos posicionales con alias. Cierra #35600. #35620 (Kseniia Sumarokova).
  • Comprobar remote_url_allow_hosts antes de la inferencia de esquema en el motor URL. Cierra #35064. #35619 (Kruglov Pavel).
  • Se corrige HashJoin cuando se usan columnas de tipo LowCardinality. Esto cierra #35548. #35616 (Antonio Andelic).
  • Corrige un posible fallo de segmentación en MaterializedPostgreSQL que se producía si ocurría una excepción al sincronizar los datos recopilados en memoria con las tablas subyacentes. Cierra #35611. #35614 (Kseniia Sumarokova).
  • La configuración database_atomic_wait_for_drop_and_detach_synchronously funcionaba de forma incorrecta para la consulta ATTACH TABLE cuando una tabla previamente desasociada seguía en uso. Esto ya se ha corregido. #35594 (tavplubix).
  • Corrige las cabeceras HTTP con colecciones nombradas, añade compression_method. Cierra #35273. Cierra #35269. #35593 (Kseniia Sumarokova).
  • Se corrige la obtención de columnas virtuales por parte del motor S3. Cierra #35411. #35586 (Kseniia Sumarokova).
  • Se corrigió la deducción del tipo de retorno de caseWithExpression. Ahora se tiene correctamente en cuenta el tipo de la rama ELSE. #35576 (Antonio Andelic).
  • Se corrige el análisis de direcciones IPv6 con más de 39 caracteres. Cierra #34022. #35539 (Maksim Kita).
  • Se corrige CAST a direcciones IPv4 e IPv6 en la sección IN. Corrige #35528. #35534 (Maksim Kita).
  • Se corrige el fallo durante la evaluación de funciones con cortocircuito cuando uno de los argumentos es una constante Nullable. Cierra #35497. Cierra #35496. #35502 (Maksim Kita).
  • Se corrige un bloqueo de la función throwIf con argumentos constantes. #35500 (Maksim Kita).
  • Se corrige un error en Keeper que puede provocar inestabilidad en las conexiones de los clientes. Introducido en #35031. #35498 (alesapin).
  • Se corrige un error en la función if cuando el tipo de la columna resultante difería del tipo de dato resultante, lo que daba lugar a errores lógicos como Logical error: 'Bad cast from type DB::ColumnVector<int> to DB::ColumnVector<long>'.. Cierra #35367. #35476 (Kruglov Pavel).
  • Corrige el exceso de registros al usar S3 como backend de MergeTree o como motor de tabla o función independientes. Corrige #30559. #35434 (alesapin).
  • Ahora, las operaciones de merge ejecutadas con replicación zero copy (experimental) ya no llenarán los logs con el mensaje Found parts with the same min block and with the same max block as the missing part _ on replica _. Hoping that it will eventually appear as a result of a merge.. #35430 (alesapin).
  • Se evita una posible excepción si aparecen fragmentos vacíos en GroupingAggregatedTransform. #35417 (Nikita Taranov).
  • Se corrige el manejo de columnas que no son necesarias en la consulta en los formatos Arrow/Parquet/ORC; esto evita posibles errores como Unsupported <format> type <type> of an input column <column_name> cuando el archivo contiene una columna con un tipo no compatible y no se usa en la consulta. #35406 (Kruglov Pavel).
  • Corrección de la caché local para el sistema de archivos remoto (funcionalidad experimental) en casos límite con alta concurrencia. #35381 (Kseniia Sumarokova). Se corrige un posible interbloqueo en la caché. #35378 (Kseniia Sumarokova).
  • Se corrige la poda de particiones al comparar con una constante en WHERE. Si la columna y la constante tenían tipos distintos, podía producirse un desbordamiento. La consulta podía devolver incorrectamente un resultado vacío. Esto corrige #35304. #35334 (Amos Bird).
  • Se corrige la inferencia de esquema para el formato TSKV al usar un max&#95;read&#95;buffer&#95;size pequeño. #35332 (Kruglov Pavel).
  • Se corrigen las mutaciones en tablas con columnas dispersas habilitadas. #35284 (Anton Popov).
  • No retrasar por defecto la escritura de la parte final (corrige un posible Memory limit exceeded durante INSERT al añadir max_insert_delayed_streams_for_parallel_write, con valor predeterminado de 1000 para escrituras en S3 y deshabilitado, como antes, en los demás casos). #34780 (Azat Khuzhin).

Lanzamiento de ClickHouse v22.3-lts, 2022-03-17. Presentación, Vídeo

Cambio incompatible con versiones anteriores

  • Hacer que la función arrayCompact se comporte como otras funciones de orden superior: realizar la compactación no sobre los resultados de la función lambda, sino sobre el array original. Si usas funciones lambda no triviales en arrayCompact, puedes restaurar el comportamiento anterior envolviendo los argumentos de arrayCompact en arrayMap. Cierra #34010 #18535 #14778. #34795 (Alexandre Snarskii).
  • Cambiar el comportamiento específico de la implementación en caso de overflow de la función toDatetime. Ahora se saturará al instante mínimo o máximo compatible más cercano de datetime en lugar de hacer wraparound. Este cambio se destaca como “incompatible con versiones anteriores” porque alguien podría depender involuntariamente del comportamiento anterior. #32898 (HaiBo Li).
  • Hacer que las funciones cast(value, 'IPv4') y cast(value, 'IPv6') se comporten igual que las funciones toIPv4 y toIPv6. Se cambió el comportamiento para las direcciones IP incorrectas pasadas a las funciones toIPv4, toIPv6; ahora, si se pasa una dirección IP no válida a estas funciones, se lanzará una excepción; antes, estas funciones devolvían el valor predeterminado. Se añadieron las funciones IPv4StringToNumOrDefault, IPv4StringToNumOrNull, IPv6StringToNumOrDefault, IPv6StringOrNull toIPv4OrDefault, toIPv4OrNull, toIPv6OrDefault, toIPv6OrNull. Las funciones IPv4StringToNumOrDefault , toIPv4OrDefault , toIPv6OrDefault deben usarse si la lógica anterior dependía de que IPv4StringToNum, toIPv4, toIPv6 devolvieran el valor predeterminado para una dirección no válida. Se añadió la configuración cast_ipv4_ipv6_default_on_conversion_error; si esta configuración está habilitada, las funciones de conversión de direcciones IP se comportarán como antes. Cierra #22825. Cierra #5799. Cierra #35156. #35240 (Maksim Kita).

Nueva funcionalidad

  • Soporte para el almacenamiento en caché local de datos para sistemas de archivos remotos. Se puede habilitar para discos s3. Cierra #28961. #33717 (Kseniia Sumarokova). Mientras tanto, habilitamos la suite de pruebas en el sistema de archivos s3 y ya no hay problemas conocidos, por lo que está empezando a estar lista para producción.
  • Se añade la nueva función de tabla hive. Se puede usar de la siguiente manera: hive('<hive metastore url>', '<hive database>', '<hive table name>', '<columns definition>', '<partition columns>'), por ejemplo SELECT * FROM hive('thrift://hivetest:9083', 'test', 'demo', 'id Nullable(String), score Nullable(Int32), day Nullable(String)', 'day'). #34946 (lgbo).
  • Soporte para la autenticación de usuarios conectados mediante SSL a través de su certificado X.509. #31484 (eungenue).
  • Soporte para la inferencia de esquema al insertar en las funciones de tabla file/hdfs/s3/url. #34732 (Kruglov Pavel).
  • Ahora puede leer la tabla system.zookeeper sin restricciones de ruta ni usando la expresión like. Estas lecturas pueden generar una carga bastante alta en ZooKeeper, por lo que, para habilitar esta capacidad, debe activar el ajuste allow_unrestricted_reads_from_keeper. #34609 (Sergei Trifonov).
  • Muestra métricas de CPU y memoria en clickhouse-local. Cierra #34545. #34605 (李扬).
  • Implementa las funciones startsWith y endsWith para arrays, cierra #33982. #34368 (usurai).
  • Se añaden tres funciones para el tipo de datos Map: 1. mapReplace(map1, map2) - reemplaza los valores de las claves de map1 por los valores de las claves correspondientes de map2; añade las claves de map2 que no existen en map1. 2. mapFilter 3. mapMap. mapFilter y mapMap son funciones de orden superior que aceptan dos argumentos: el primer argumento es una función lambda con el par k, v como argumentos; el segundo argumento es una columna de tipo Map. #33698 (hexiaoting).
  • Permite obtener el usuario y la contraseña predeterminados para clickhouse-client a partir de las variables de entorno CLICKHOUSE_USER y CLICKHOUSE_PASSWORD. Cierra #34538. #34947 (DR).

Funcionalidad experimental

  • Nuevo tipo de datos Object(<schema_format>), que permite almacenar datos semiestructurados (por ahora, solo JSON). Los datos se escriben en estos tipos como una cadena. Luego, todas las rutas se extraen según el formato de los datos semiestructurados y se escriben como columnas independientes en los tipos más adecuados que puedan almacenar todos sus valores. Estas columnas pueden consultarse mediante nombres que coincidan con las rutas de los datos de origen. Por ejemplo, data.key1.key2 o con el operador CAST data.key1.key2::Int64.
  • Se añadió la configuración database_replicated_allow_only_replicated_engine. Cuando está habilitada, solo se permite crear tablas Replicated o tablas con motores sin estado en bases de datos Replicated. #35214 (Nikolai Kochetov). Tenga en cuenta que la base de datos Replicated sigue siendo una funcionalidad experimental.

Mejora del rendimiento

  • Se mejora el rendimiento de la inserción en tablas MergeTree optimizando la ordenación. Se observa una mejora de hasta 2x en benchmarks realistas. #34750 (Maksim Kita).
  • Poda de columnas al leer archivos Parquet, ORC y Arrow desde URL y S3. Cierra #34163. #34849 (Kseniia Sumarokova).
  • Poda de columnas al leer archivos Parquet, ORC y Arrow desde Hive. #34954 (lgbo).
  • Varias optimizaciones de rendimiento de un superhéroe del rendimiento. Mejora del rendimiento al procesar consultas con cláusulas IN grandes. Mejora del rendimiento del diccionario direct si su fuente es ClickHouse. Mejora del rendimiento de las funciones detectCharset y detectLanguageUnknown . #34888 (Maksim Kita).
  • Se mejora el rendimiento de la función de agregación any mediante un mayor procesamiento por lotes. #34760 (Raúl Marín).
  • Múltiples mejoras en el rendimiento de clickhouse-keeper: menos bloqueos #35010 (zhanglistar), menor uso de memoria mediante lectura y escritura en streaming de snapshot en lugar de una copia completa #34584 (zhanglistar), optimización de la compactación del almacén de logs en la implementación de RAFT #34534 (zhanglistar), versionado de la estructura de datos interna #34486 (zhanglistar).

Mejora

  • Permite inserciones asíncronas en funciones de tabla. Corrige #34864. #34866 (Anton Popov).
  • Conversión implícita de tipo del argumento key en las funciones dictGetHierarchy, dictIsIn, dictGetChildren, dictGetDescendants. Cierra #34970. #35027 (Maksim Kita).
  • La consulta EXPLAIN AST puede mostrar el AST en forma de gráfico en formato Graphviz: EXPLAIN AST graph = 1 SELECT * FROM system.parts. #35173 (李扬).
  • Al escribir archivos grandes con la función de tabla s3 o el motor de tabla, el tipo de contenido de los archivos se establecía por error como application/xml debido a un fallo en el SDK de AWS. Esto resuelve #33964. #34433 (Alexey Milovidov).
  • Ajustar ligeramente las row policies restrictivas para que sean una alternativa más sencilla a las políticas permisivas en los casos simples. Si para una tabla concreta solo existen políticas restrictivas (sin políticas permisivas), los usuarios podrán ver algunas filas. Además, SHOW CREATE ROW POLICY siempre mostrará AS permissive o AS restrictive en la definición de la row policy. #34596 (Vitaly Baranov).
  • Mejora la inferencia de esquema con globs en los motores File/S3/HDFS/URL. Intenta usar la ruta siguiente para la inferencia de esquema en caso de error. #34465 (Kruglov Pavel).
  • La UI de Play ahora detecta correctamente el tema claro u oscuro preferido del sistema operativo. #35068 (peledni).
  • Se añadió date_time_input_format = 'best_effort_us'. Cierra #34799. #34982 (WenYao).
  • Se agregan en la configuración del servidor nuevos ajustes llamados allow_plaintext_password y allow_no_password, que activan o desactivan tipos de autenticación que pueden ser potencialmente inseguros en algunos entornos. Están permitidos de forma predeterminada. #34738 (Heena Bansal).
  • Soporte para el tipo de dato DateTime64 en el formato Arrow; cierra #8280 y #28574. #34561 (李扬).
  • Recargar remote_url_allow_hosts (filtrado de las conexiones salientes) al actualizar la configuración. #35294 (Nikolai Kochetov).
  • Se añadió compatibilidad con el parámetro --testmode para clickhouse-local. Este parámetro permite interpretar las indicaciones de prueba que usamos en las pruebas funcionales. #35264 (Kseniia Sumarokova).
  • Se añade distributed_depth al registro de consultas. Es una variante más detallada de is_initial_query #35207 (李扬).
  • Se respeta remote_url_allow_hosts para las funciones de tabla MySQL y PostgreSQL. #35191 (Heena Bansal).
  • Se añadió el campo disk_name a system.part_log. #35178 (Artyom Yurkov).
  • No reintente errores no reintentables al consultar URL remotas. Cierra #35161. #35172 (Kseniia Sumarokova).
  • Admite consultas INSERT SELECT distribuidas (configuración parallel_distributed_insert_select) para la función de tabla view(). #35132 (Azat Khuzhin).
  • Seguimiento de memoria más preciso al realizar INSERT en Buffer con AggregateFunction. #35072 (Azat Khuzhin).
  • Evita la división por cero en el Query Profiler si el kernel de Linux tiene un fallo. Cierra #34787. #35032 (Alexey Milovidov).
  • Añade más comprobaciones de coherencia para la configuración de Keeper: ahora no se permite mezclar localhost y servidores no locales; además, se añaden comprobaciones para verificar que el puerto interno de raft y el puerto cliente de Keeper no tengan el mismo valor. #35004 (alesapin).
  • Actualmente, si el usuario cambia la configuración de las system tables, se generarán muchísimos logs y ClickHouse cambiará el nombre de las tablas cada minuto. Esto corrige #34929. #34949 (Nikita Mikhaylov).
  • Usar un pool de conexiones para el cliente del metastore de Hive. #34940 (lgbo).
  • Ignorar el TTL por columna en CREATE TABLE AS si el nuevo motor de tabla no lo admite (es decir, si el motor no pertenece a la familia MergeTree). #34938 (Azat Khuzhin).
  • Permitir cadenas LowCardinality en los índices ngrambf_v1/tokenbf_v1. Cierra #21865. #34911 (Lars Hiller Eidnes).
  • Permitir abrir una base de datos SQLite vacía si el archivo no existe. Cierra #33367. #34907 (Kseniia Sumarokova).
  • Implementar estadísticas de memoria para FreeBSD; esto es necesario para que max_server_memory_usage funcione correctamente. #34902 (Alexandre Snarskii).
  • En versiones anteriores, la barra de progreso de clickhouse-client puede dar un salto hacia adelante cerca del 50 % sin motivo alguno. Esto resuelve #34324. #34801 (Alexey Milovidov).
  • Ahora, las consultas ALTER TABLE DROP COLUMN columnX para los motores de tabla MergeTree funcionarán de forma instantánea cuando columnX sea una columna ALIAS. Corrige #34660. #34786 (alesapin).
  • Mostrar sugerencias cuando el usuario escriba mal el nombre de un índice de omisión de datos. Cierra #29698. #34764 (flynn).
  • Compatibilidad con las funciones de tabla remote()/cluster() para parallel_distributed_insert_select. #34728 (Azat Khuzhin).
  • No restablecer el logging configurado mediante las opciones de línea de comandos --log-file/--errorlog-file cuando haya una configuración vacía en el archivo de configuración. #34718 (Amos Bird).
  • Extraer el schema solo una vez al crear la table y evitar leer de archivos locales/fuentes externas para extraer el schema en cada inicio del server. #34684 (Kruglov Pavel).
  • Permite especificar nombres para los argumentos de UDF ejecutables. Esto es necesario en formatos en los que el nombre del argumento forma parte de la serialización, como Native y JSONEachRow. Cierra #34604. #34653 (Maksim Kita).
  • MaterializedMySQL (funcionalidad experimental) ahora admite materialized_mysql_tables_list (una lista de tablas de la base de datos MySQL separadas por comas, que serán replicadas por el engine de base de datos MaterializedMySQL. Valor predeterminado: lista vacía; significa que se replicarán todas las tablas), mencionado en #32977. #34487 (zzsmdfj).
  • Mejorar los logs de spans de OpenTelemetry para la operación INSERT en tabla distribuida. #34480 (Frank Chen).
  • Hacer que ctime y mtime del znode sean consistentes entre los servidores de ClickHouse Keeper. #33441 (小路).

Mejoras de compilación/pruebas/empaquetado

  • Migración del repositorio de paquetes a JFrog Artifactory (Mikhail f. Shiryaev).
  • Se aleatorizan algunos ajustes en las pruebas funcionales para probar más combinaciones posibles. Este es otro método de fuzzing para mejorar la cobertura de las pruebas. Esto cierra #32268. #34092 (Kruglov Pavel).
  • Eliminar PVS-Studio de nuestro CI. #34680 (Mikhail f. Shiryaev).
  • Añadir la capacidad de compilar binarios sin símbolos con CMake. En versiones anteriores esto lo realizaba dh-tools. #35196 (alesapin).
  • Versión más ligera “sin extras” de clickhouse-keeper. #35031 (alesapin).
  • Usar @robot-clickhouse como autor y committer para PR como https://github.com/ClickHouse/ClickHouse/pull/34685. #34793 (Mikhail f. Shiryaev).
  • Limitar a 4 como máximo la versión de DWARF para la información de depuración, porque nuestro simbolizador interno de trazas de pila no puede interpretar DWARF versión 5. Esto tiene sentido si compilas ClickHouse con clang-15. #34777 (Alexey Milovidov).
  • Eliminar el paquete Debian clickhouse-test por ser una complicación innecesaria. El CI usa pruebas del repositorio y ya no se admiten pruebas independientes mediante el paquete deb. #34606 (Ilya Yatsishin).

Corrección de errores (comportamiento incorrecto perceptible para el usuario en una versión oficial estable o preestable)

  • Una corrección para la integración de HDFS: cuando el tamaño del búfer interno es demasiado pequeño, NEED_MORE_INPUT en HadoopSnappyDecoder se ejecuta varias veces (>=3) para un mismo bloque comprimido. Esto hace que los datos de entrada se copien en una ubicación incorrecta dentro de HadoopSnappyDecoder::buffer. #35116 (lgbo).
  • Ignora los privilegios obsoletos en las sentencias ATTACH GRANT. Este PR corrige #34815. #34855 (Vitaly Baranov).
  • Se corrige un segfault en la base de datos Postgres al obtener la consulta CREATE TABLE si la base de datos se había creado mediante named collections. Cierra #35312. #35313 (Kseniia Sumarokova).
  • Corrige un error que provocaba filas duplicadas en partial merge join, cierra #31009. #35311 (Vladimir C).
  • Se corrigió el posible error Assertion 'position() != working_buffer.end()' failed al usar compresión bzip2 con un valor pequeño del ajuste max_read_buffer_size. El error se encontró en https://github.com/ClickHouse/ClickHouse/pull/35047. #35300 (Kruglov Pavel). Al usar compresión lz4 con un valor pequeño del ajuste max_read_buffer_size. #35296 (Kruglov Pavel). Al usar compresión lzma con un valor pequeño del ajuste max_read_buffer_size. #35295 (Kruglov Pavel). Al usar compresión brotli con un valor pequeño del ajuste max_read_buffer_size. El error se encontró en https://github.com/ClickHouse/ClickHouse/pull/35047. #35281 (Kruglov Pavel).
  • Corrige un posible segfault en la inferencia del esquema de JSONEachRow. #35291 (Kruglov Pavel).
  • Corregida la consulta CHECK TABLE cuando la tabla tiene habilitadas columnas dispersas. #35274 (Anton Popov).
  • Evita std::terminate en caso de excepción al leer desde el VFS remoto. #35257 (Azat Khuzhin).
  • Corregida la lectura del puerto desde la configuración; cierra #34776. #35193 (Vladimir C).
  • Se corrige un error en una consulta con WITH TOTALS en caso de que HAVING devolviera un resultado vacío. Esto soluciona #33711. #35186 (Amos Bird).
  • Se corrige un caso extremo de replaceRegexpAll y se cierra #35117. #35182 (Vladimir C).
  • La inferencia de esquemas no funcionaba correctamente en el caso de INSERT INTO FUNCTION s3(...) FROM ...: intentaba leer el esquema desde el archivo de S3 en lugar de hacerlo desde la consulta SELECT. #35176 (Kruglov Pavel).
  • Corrige las table overrides de MaterializedPostgreSQL (característica experimental) para partition by, etc. Cierra #35048. #35162 (Kseniia Sumarokova).
  • Se corrige MaterializedPostgreSQL (funcionalidad experimental) al añadir una nueva tabla a la replicación (ATTACH TABLE) después de eliminarla manualmente (DETACH TABLE). Cierra #33800. Cierra #34922. Cierra #34315. #35158 (Kseniia Sumarokova).
  • Se corrige el error de poda de particiones cuando se usa una función no monótona con el operador IN. Esto corrige #35136. #35146 (Amos Bird).
  • Se corrigió una traducción a XML ligeramente incorrecta de las configuraciones YAML. #35135 (Miel Donkers).
  • Se corrigió optimize_skip_unused_shards_rewrite_in para columnas con signo y valores negativos. #35134 (Azat Khuzhin).
  • La opción update_lag de la configuración del diccionario externo no se podía utilizar y mostraba el mensaje de error Unexpected key `update_lag` in dictionary source configuration. #35089 (Jason Chu).
  • Evita un posible bloqueo mutuo al apagar el servidor. #35081 (Azat Khuzhin).
  • Se corrige la ausencia de alias después de que la función se optimiza a una subcolumna cuando la configuración optimize_functions_to_subcolumns está habilitada. Cierra #33798. #35079 (qieqieplus).
  • Se corrige la lectura de la tabla system.asynchronous_inserts si existe una inserción asíncrona en una table function. #35050 (Anton Popov).
  • Corrige una posible excepción Reading for MergeTree family tables must be done with last position boundary (relevante para operaciones en VFS remotos). Cierra #34979. #35001 (Kseniia Sumarokova).
  • Se corrige el resultado inesperado al usar una aggregate function de tipo -State en el frame de una ventana. #34999 (metahys).
  • Corregido un posible fallo de segmentación en FileLog (característica experimental). Cierra #30749. #34996 (Kseniia Sumarokova).
  • Se corrige un posible error poco frecuente Cannot push block to port which already has data. #34993 (Nikolai Kochetov).
  • Corrige una inferencia de esquema errónea para fechas sin comillas en CSV. Cierra #34768. #34961 (Kruglov Pavel).
  • Integración con Hive: Se corrige un resultado inesperado al usar in en where en una consulta de Hive. #34945 (lgbo).
  • Evitar el sondeo activo en ClickHouse Keeper al buscar archivos de changelog que deben eliminarse. #34931 (Azat Khuzhin).
  • Corregida la conversión de DateTime64 desde PostgreSQL. Cierra #33364. #34910 (Kseniia Sumarokova).
  • Se corrigió un posible “El directorio de la parte no existe” durante INSERT en una tabla MergeTree basada en VFS sobre S3. #34876 (Azat Khuzhin).
  • Permitir que DDLs como CREATE USER se ejecuten en un clúster con replicación cruzada. #34860 (Jianmei Zhang).
  • Corrige errores en el group by de múltiples columnas en WindowView (funcionalidad experimental). #34859 (vxider).
  • Corrige posibles fallos en las funciones S2 cuando las consultas incluyen columnas constantes. #34745 (Bharat Nallan).
  • Se corrigió un error en las funciones H3 que contienen columnas const y provocaba que las consultas fallaran. #34743 (Bharat Nallan).
  • Se corrige No such file or directory con fsync_part_directory habilitado y la fusión vertical. #34739 (Azat Khuzhin).
  • Se corrige la serialización/visualización de las consultas del sistema RELOAD MODEL, RELOAD FUNCTION, RESTART DISK cuando se usa ON CLUSTER. Cierra #34514. #34696 (Maksim Kita).
  • Se corrige allow_experimental_projection_optimization con enable_global_with_statement (antes podía provocar el error Stack size too large en caso de varias expresiones en la cláusula WITH, y además ejecutaba las subconsultas escalares una y otra vez, por lo que ahora será más eficiente). #34650 (Azat Khuzhin).
  • Dejar de seleccionar una parte para una mutación cuando la otra réplica ya haya actualizado el registro de transacciones del motor ReplatedMergeTree. #34633 (Jianmei Zhang).
  • Corrige el resultado incorrecto de una consulta count trivial al usar la funcionalidad de movimiento de partes #34089. #34385 (nvartolomei).
  • Corrige la inconsistencia del límite de max_query_size en las subconsultas distribuidas. #34078 (Chao Ma).

Lanzamiento de ClickHouse v22.2, 2022-02-17. Presentación, Video

Notas de actualización

  • Aplicar índices de omisión de datos en consultas con FINAL puede producir resultados incorrectos. En esta versión, los índices de omisión de datos están deshabilitados de forma predeterminada para las consultas con FINAL (se introduce una nueva configuración, use_skip_indexes_if_final, deshabilitada de forma predeterminada). #34243 (Azat Khuzhin).

Nueva funcionalidad

  • Las proyecciones ya están listas para producción. allow_experimental_projection_optimization se establece de forma predeterminada y esta configuración queda obsoleta. #34456 (Nikolai Kochetov).
  • Una opción para crear archivos nuevos al insertar en los motores File/S3/HDFS. Permite sobrescribir un archivo en HDFS. De forma predeterminada, lanza una excepción al intentar sobrescribir un archivo en S3. Lanza una excepción al intentar añadir datos a un archivo en formatos que tienen un sufijo (y, por lo tanto, no admiten anexos, como Parquet, ORC). Cierra #31640 Cierra #31622 Cierra #23862 Cierra #15022 Cierra #16674. #33302 (Kruglov Pavel).
  • Añade una configuración que permite al usuario proporcionar su propia semántica de deduplicación en MergeTree/ReplicatedMergeTree. Si se proporciona, se utiliza en lugar del resumen de datos para generar el ID de bloque. Así, por ejemplo, al proporcionar un valor único para la configuración en cada sentencia INSERT, el usuario puede evitar que los mismos datos insertados se deduplicen. Esto cierra: #7461. #32304 (Igor Nikonov).
  • Se añade compatibilidad con la palabra clave DEFAULT en las sentencias INSERT. Cierra #6331. #33141 (Andrii Buriachevskyi).
  • Se añadió el especificador de columna EPHEMERAL a la consulta CREATE TABLE. Cierra #9436. #34424 (yakov-olkhovskiy).
  • Se añade compatibilidad con la cláusula IF EXISTS para la funcionalidad TTL expr TO [DISK|VOLUME] [IF EXISTS] 'xxx'. Las partes se moverán al disco o volumen solo si existen en la réplica, por lo que las reglas de MOVE TTL podrán comportarse de forma distinta en las réplicas según las políticas de almacenamiento existentes. Resuelve #34455. #34504 (Anton Popov).
  • Permite establecer un motor de tabla predeterminado y crear tablas sin especificar ENGINE. #34187 (Ilya Yatsishin).
  • Se añadió la función de tabla format(format_name, data). #34125 (Kruglov Pavel).
  • Detectar el formato en clickhouse-local a partir del nombre del archivo incluso cuando se pasa mediante stdin. #33829 (Kruglov Pavel).
  • Se añadió la inferencia de esquema para la función de tabla values. Cierra #33811. #34017 (Kruglov Pavel).
  • Recarga dinámica de los certificados TLS del servidor al recargar la configuración. Corrige #15764. #15765 (johnskopis). #31257 (Filatenkov Artur).
  • Ahora ReplicatedMergeTree puede recuperar los datos cuando algunos de sus discos se dañan. #13544 (Amos Bird).
  • Conexiones con tolerancia a fallos en clickhouse-client: clickhouse-client ... --host host1 --host host2 --port port2 --host host3 --port port --host host4. #34490 (Kruglov Pavel). #33824 (Filippov Denis).
  • Se añaden las funciones DEGREES y RADIANS para garantizar la compatibilidad con MySQL. #33769 (Bharat Nallan).
  • Se añadió la función h3ToCenterChild. #33313 (Bharat Nallan). Se añadieron nuevas funciones varias de H3: edgeLengthKm,exactEdgeLengthKm,exactEdgeLengthM,exactEdgeLengthRads,numHexagons. #33621 (Bharat Nallan).
  • Se añade la función bitSlice para extraer subsecuencias de bits de String/FixedString. #33360 (RogerYK).
  • Se implementó la función de agregación meanZTest. #33354 (achimbab).
  • Se añaden intervalos de confianza a las funciones de agregación de pruebas t. #33260 (achimbab).
  • Se agrega la función addressToLineWithInlines. Cierra #26211. #33467 (SuperDJY).
  • Se añadieron #! y # como inicios reconocidos de un comentario de una sola línea. Cierra #34138. #34230 (Aaron Katz).

Funcionalidad experimental

  • Funciones para la clasificación de texto: detección de idioma y de juego de caracteres. Véase #23271. #33314 (Nikolay Degterinsky).
  • Se añadió memory overcommit a MemoryTracker. Se añadieron ajustes guaranteed para los límites de memoria, que representan límites de memoria suaves. En caso de que se alcance el límite estricto de memoria, MemoryTracker intenta cancelar la consulta con mayor overcommit. El nuevo ajuste memory_usage_overcommit_max_wait_microseconds especifica cuánto tiempo pueden esperar las consultas a que se detenga otra consulta. Cierra #28375. #31182 (Dmitry Novik).
  • Se habilita el join entre stream y tabla en WindowView. #33729 (vxider).
  • Se añade compatibilidad con los tipos de datos SET, YEAR, TIME y GEOMETRY en MaterializedMySQL (característica experimental). Corrige #18091, #21536, #26361. #33429 (zzsmdfj).
  • Se corrigen varios problemas cuando las proyecciones están habilitadas de forma predeterminada. Cada problema se describe en un commit independiente. Esto corresponde a #33678. Esto corrige #34273. #34305 (Amos Bird).

Mejora del rendimiento

  • Se admite optimize_read_in_order si el prefijo de la clave de ordenación ya está ordenado. Por ejemplo, si tenemos la clave de ordenación ORDER BY (a, b) en una tabla y una consulta con las cláusulas WHERE a = const ORDER BY b, ahora se aplicará leyendo en el orden de la clave de ordenación en lugar de realizar una ordenación completa. #32748 (Anton Popov).
  • Mejora el rendimiento de las inserciones particionadas en las funciones de tabla URL, S3, File, HDFS. Cierra #34348. #34510 (Maksim Kita).
  • Múltiples mejoras de rendimiento en clickhouse-keeper. #34484 #34587 (zhanglistar).
  • FlatDictionary mejora el rendimiento de la carga de datos en diccionarios. #33871 (Maksim Kita).
  • Mejora el rendimiento de la función mapPopulateSeries. Cierra #33944. #34318 (Maksim Kita).
  • _file y _path, columnas virtuales (en motores de tabla de tipo archivo), pasan a ser LowCardinality; esto hará que las consultas sobre varios archivos sean más rápidas. Cierra #34300. #34317 (flynn).
  • Se acelera la carga de las partes de datos. Antes no se paralelizaba: la configuración part_loading_threads no surtía efecto. Consulta #4699. #34310 (alexey-milovidov).
  • Mejora el rendimiento del formato LineAsString. Esto cierra #34303. #34306 (alexey-milovidov).
  • Se optimiza quantilesExact{Low,High} para usar nth_element en lugar de sort. #34287 (Danila Kutenin).
  • Ligera mejora del rendimiento del formato Regexp. #34202 (alexey-milovidov).
  • Mejora menor en el análisis de subconsultas escalares. #34128 (Federico Rodriguez).
  • Hacer que ORDER BY de tupla sea casi tan rápido como ORDER BY de columnas. Tenemos optimizaciones especiales para ORDER BY de varias columnas: https://github.com/ClickHouse/ClickHouse/pull/10831 . También resulta beneficioso aplicarlas a las columnas de tupla. #34060 (Amos Bird).
  • Rediseño y reintroducción de la caché de subconsultas escalares para la ejecución de vistas materializadas. #33958 (Raúl Marín).
  • Mejora ligeramente el rendimiento de ORDER BY al añadir compatibilidad con x86-64 AVX-512 para las funciones memcmpSmall, con el fin de acelerar la comparación en memoria. Solo funciona si compilas ClickHouse por tu cuenta. #33706 (hanqf-git).
  • Mejora el rendimiento del diccionario range_hashed cuando una clave tiene muchos intervalos. Corrige #23821. #33516 (Maksim Kita).
  • Para las inserciones y fusiones en S3, escriba archivos en paralelo siempre que sea posible (TODO: comprobar si se ha fusionado). #33291 (Nikolai Kochetov).
  • Se mejora el rendimiento de clickhouse-keeper y se corrigen varias fugas de memoria en la biblioteca NuRaft. #33329 (alesapin).

Mejora

  • Se admiten las inserciones asíncronas en clickhouse-client para consultas con datos embebidos. #34267 (Anton Popov).
  • Las funciones dictGet, dictHas convierten implícitamente el argumento de clave a la estructura de clave del diccionario si son diferentes. #33672 (Maksim Kita).
  • Mejoras en los diccionarios range_hashed. Se mejoró el rendimiento del tiempo de carga cuando hay varios atributos. Se permite CREATE un diccionario sin atributos. Se añadió una opción para especificar la estrategia cuando los intervalos start y end tienen el tipo Nullable; convert_null_range_bound_to_open es true de forma predeterminada. Cierra #29791. Se permite especificar Float, Decimal, DateTime64, Int128, Int256, UInt128, UInt256 como tipos de rango. Se añadió soporte en RangeHashedDictionary para valores de rango que superan el tipo Int64. Cierra #28322. Se añadió la opción range_lookup_strategy para especificar el tipo de lookup de rango min, max; min es el valor predeterminado. Cierra #21647. Se corrigieron los cálculos de bytes asignados. Se corrigió el type name en system.dictionaries en el caso de ComplexKeyHashedDictionary. #33927 (Maksim Kita).
  • Los diccionarios flat, hashed y hashed_array ahora permiten crearse con atributos vacíos, con soporte para leer las claves y usar dictHas. Corrige #33820. #33918 (Maksim Kita).
  • Se añadió compatibilidad con el tipo de datos DateTime64 en los diccionarios. #33914 (Maksim Kita).
  • Permite usar s3(url, access_key_id, secret_access_key) (detección automática del formato de los datos y de la estructura de la tabla, pero con credenciales explícitas). #34503 (Kruglov Pavel).
  • Se añadió el envío del formato de salida al cliente, tal como se hace en el protocolo HTTP, según lo sugerido en #34362. Cierra #34362. #34499 (Vitaly Baranov).
  • Enviar estadísticas de ProfileEvents en el caso de consultas INSERT SELECT (para mostrar métricas de consulta en clickhouse-client en este tipo de consultas). #34498 (Dmitry Novik).
  • Se reconoce la extensión .jsonl para el formato JSONEachRow. #34496 (Kruglov Pavel).
  • Mejora la inferencia de esquema en clickhouse-local. Permite escribir simplemente clickhouse-local -q "select * from table" < data.format. #34495 (Kruglov Pavel).
  • Los privilegios CREATE/ALTER/DROP ROW POLICY ahora también se pueden conceder sobre una tabla o sobre database.*, así como globalmente sobre *.*. #34489 (Vitaly Baranov).
  • Permite exportar archivos de tamaño arbitrario a s3. Añade dos nuevas configuraciones: s3_upload_part_size_multiply_factor y s3_upload_part_size_multiply_parts_count_threshold. Ahora, cada vez que desde una sola consulta se suben a S3 s3_upload_part_size_multiply_parts_count_threshold partes, s3_min_upload_part_size se multiplica por s3_upload_part_size_multiply_factor. Corrige #34244. #34422 (alesapin).
  • Se permite omitir las URL no encontradas (404) en globs al usar el almacenamiento URL / función de tabla. También cierra #34359. #34392 (Kseniia Sumarokova).
  • Formatos predeterminados de entrada y salida para clickhouse-local que se pueden anular con —input-format y —output-format. Cierra #30631. #34352 (李扬).
  • Agregar opciones para clickhouse-format. Esto cierra #30528: max_query_size - max_parser_depth. #34349 (李扬).
  • Mejor gestión de las entradas previas al inicio del cliente. Esto es para #34308. #34336 (Amos Bird).
  • Alias de las funciones REGEXP_MATCHES y REGEXP_REPLACE para compatibilidad con PostgreSQL. Cierra #30885. #34334 (李扬).
  • Algunos servidores esperan una cabecera User-Agent en sus solicitudes HTTP. Se ha añadido una cabecera User-Agent a las solicitudes HTTP con el formato: User-Agent: ClickHouse/VERSION_STRING. #34330 (Saad Ur Rahman).
  • Cancelar las fusiones antes de adquirir el bloqueo de la tabla para la consulta TRUNCATE evita el error DEADLOCK_AVOIDED en algunos casos. Corrige #34302. #34304 (tavplubix).
  • Cambiar la severidad del mensaje “Se canceló la fusión de partes” en los logs, porque no es un error. Esto cierra #34148. #34232 (alexey-milovidov).
  • Se añadió la capacidad de combinar el operador de conversión de tipo :: de estilo PostgreSQL con expresiones que usan los operadores [] y . (indexación de arrays y tuplas). #34229 (Nikolay Degterinsky).
  • Se reconoce el formato YYYYMMDD-hhmmss en la función parseDateTimeBestEffort. Con esto se cierra #34206. #34208 (alexey-milovidov).
  • Se permite el retorno de carro en medio de la línea durante el análisis con el formato Regexp. Esto cierra #34200. #34205 (alexey-milovidov).
  • Permite analizar la PRIMARY KEY del Diccionario como PRIMARY KEY (id, value); anteriormente solo se admitía PRIMARY KEY id, value. Cierra #34135. #34141 (Maksim Kita).
  • Un argumento opcional para splitByChar que limita el número de elementos resultantes. Cierra #34081. #34140 (李扬).
  • Se ha mejorado la experiencia de edición de varias líneas en clickhouse-client. Se trata de una continuación de #31123. #34114 (Amos Bird).
  • Se agregó compatibilidad con UUID en el formato de entrada/salida MsgPack. #34065 (Kruglov Pavel).
  • El contexto de tracing (para OpenTelemetry) ahora se propaga a partir de los metadatos del cliente GRPC (este cambio afecta al protocolo cliente-servidor de GRPC). #34064 (andremarianiello).
  • Admite todo tipo de consultas SYSTEM con la cláusula ON CLUSTER. #34005 (小路).
  • Mejora la contabilización de memoria para las consultas que usan menos de max_untracker_memory. #34001 (Azat Khuzhin).
  • Se corrigió la búsqueda sin distinción entre mayúsculas y minúsculas en cadenas UTF-8 cuando los caracteres en minúscula y mayúscula se representan con un número diferente de bytes. Un ejemplo es y ß. Esto cierra #7334. #33992 (Harry Lee).
  • Detectar el formato y el esquema a partir de stdin en clickhouse-local. #33960 (Kruglov Pavel).
  • Gestiona correctamente el caso de una configuración incorrecta cuando varios discos usan la misma ruta en el sistema de archivos. #29072. #33905 (zhongyuankai).
  • Probar todas las direcciones IP resueltas al obtener un proxy de S3. Los proxies de S3 rara vez se usan, principalmente en Yandex Cloud. #33862 (Nikolai Kochetov).
  • Se admite la consulta EXPLAIN AST CREATE FUNCTION: EXPLAIN AST CREATE FUNCTION mycast AS (n) -> cast(n as String) devolverá EXPLAIN AST CREATE FUNCTION mycast AS n -> CAST(n, 'String'). #33819 (李扬).
  • Se añadió compatibilidad con la conversión de Map(Key, Value) a Array(Tuple(Key, Value)). #33794 (Maksim Kita).
  • Se añaden algunas mejoras y correcciones para el tipo de datos Bool. Corrige #33244. #33737 (Kruglov Pavel).
  • Analiza y almacena el trace-id de OpenTelemetry en orden big-endian. #33723 (Frank Chen).
  • Mejora en las funciones de la familia fromUnixTimestamp64.. Ahora aceptan cualquier valor entero que pueda convertirse en Int64. Esto cierra: #14648. #33505 (Andrey Zvonov).
  • Volver a implementar _shard_num a partir de constantes (véase #7624) mediante la función shardNum() (véase #27020), para evitar posibles problemas (como los detectados en #16947). #33392 (Azat Khuzhin).
  • Habilita las operaciones aritméticas binarias (suma, resta, multiplicación, división, mínimo, máximo) entre Decimal y Float. #33355 (flynn).
  • Se respetan los límites de cgroups en la autodetección de max_threads. #33342 (JaySon).
  • Se añade la nueva configuración de clickhouse-keeper min_session_timeout_ms. Ahora clickhouse-keeper determinará el timeout de sesión del cliente según la configuración min_session_timeout_ms y session_timeout_ms. #33288 (JackyWoo).
  • Se añadió compatibilidad con el tipo de datos UUID en las funciones hex y bin. #32170 (Frank Chen).
  • Se corrige la lectura de subcolumnas con puntos en sus nombres. En particular, se corrigió la lectura de las columnas Nested cuando los nombres de sus elementos contienen puntos (p. ej., Nested(`keys.name` String, `keys.id` UInt64, values UInt64)). #34228 (Anton Popov).
  • Corrige un problema por el que parallel_view_processing = 0 no funcionaba al insertar en una tabla mediante VALUES. - Corrige que view_duration_ms en query_views_log no se estableciera correctamente para las vistas materializadas. #34067 (Raúl Marín).
  • Se corrige el análisis de la estructura de las tablas desde ZooKeeper: ahora los metadatos de ZooKeeper se comparan con los metadatos locales en su forma canónica. Esto ayuda cuando los nombres canónicos de las funciones pueden cambiar entre versiones de ClickHouse. #33933 (sunny).
  • Escapar correctamente ciertos caracteres al interactuar con LDAP. #33401 (IlyaTsoi).

Mejoras de compilación/pruebas/empaquetado

  • Eliminar la compatibilidad con compilaciones no incluidas en el paquete. #33690 (Azat Khuzhin).
  • Garantizar que las pruebas no dependan del resultado de una ordenación no estable de elementos iguales. Se añadió la aleatorización de rangos de elementos iguales en modo debug después de ordenar para evitar problemas cuando se depende del orden de clasificación de elementos iguales. #34393 (Maksim Kita).
  • Añadir más detalle a una comprobación de estilo. #34289 (Mikhail f. Shiryaev).
  • Eliminar el paquete Debian clickhouse-test porque está obsoleto. #33948 (Ilya Yatsishin).
  • Varias mejoras en el sistema de compilación para eliminar la posibilidad de usar ocasionalmente paquetes del sistema operativo y garantizar compilaciones herméticas. #33695 (Amos Bird).

Corrección de errores (comportamiento incorrecto perceptible para el usuario en una versión oficial estable o preestable)

  • Se corrigió la aserción al usar allow_experimental_parallel_reading_from_replicas con max_parallel_replicas igual a 1. Esto corrige #34525. #34613 (Nikita Mikhaylov).
  • Se corrigió un error poco frecuente al leer arrays vacíos, que podía provocar el error Data compressed with different methods. Puede reproducirse si hay mayormente arrays vacíos, aunque no siempre. Además, la lectura debe realizarse en dirección inversa con ORDER BY … DESC. Es extremadamente improbable que este error llegue a producirse. #34327 (Anton Popov).
  • Corrige el resultado erróneo de round/roundBankers al redondear valores enteros de tipos pequeños. Cierra #33267. #34562 (李扬).
  • A veces, la cancelación de consultas no surtía efecto de inmediato al leer varios archivos de S3 o HDFS. Corrige #34301. Relacionado con #34397. #34539 (Dmitry Novik).
  • Soluciona la excepción Chunk should have AggregatedChunkInfo in MergingAggregatedTransform (en caso de optimize_aggregation_in_order = 1 y distributed_aggregation_memory_efficient = 0). Soluciona #34526. #34532 (Anton Popov).
  • Se corrige la comparación entre enteros y números de coma flotante en el análisis de índices. Anteriormente, esto podía provocar que se omitieran por error algunos gránulos durante la lectura. Corrige #34493. #34528 (Anton Popov).
  • Se corrige la compatibilidad con la compresión en el motor URL. #34524 (Frank Chen).
  • Corrige el posible error ‘file_size: Operation not supported’ en la detección automática del esquema de los archivos. #34479 (Kruglov Pavel).
  • Corrige una posible condición de carrera al eliminar tablas. #34416 (Kseniia Sumarokova).
  • Se corrige un posible error Cannot convert column Function to mask en la evaluación de funciones con cortocircuito. Cierra #34171. #34415 (Kruglov Pavel).
  • Corrige un posible cierre inesperado al realizar la inferencia de esquema a partir de una URL. Cierra #34147. #34405 (Kruglov Pavel).
  • En los UDFs, los permisos de acceso se comprobaron a nivel de base de datos en lugar de a nivel global, como debería haber sido. Cierra #34281. #34404 (Maksim Kita).
  • Corrige la sintaxis incorrecta del motor en el resultado de la consulta SHOW CREATE DATABASE para las bases de datos con el motor Memory. Esto cierra #34335. #34345 (alexey-milovidov).
  • Se corrigieron un par de condiciones de carrera extremadamente raras que podrían provocar un estado inconsistente de la cola de replicación y el error de “partes superpuestas”. #34297 (tavplubix).
  • Se corrigió el ancho de la barra de progreso. Se redondeaba incorrectamente a un número entero de caracteres. #34275 (alexey-milovidov).
  • Se corrigieron los campos de información del cliente current_user/current_address para la comunicación entre servidores (antes de este parche, current_user/current_address se conservaban de la consulta anterior). #34263 (Azat Khuzhin).
  • Se corrigió una fuga de memoria en caso de alguna excepción durante el procesamiento de consultas con optimize_aggregation_in_order=1. #34234 (Azat Khuzhin).
  • Se corrige la métrica Query, que muestra el número de consultas en ejecución. En las últimas versiones, siempre era 0. #34224 (Anton Popov).
  • Se corrigió la inferencia de esquemas para la función de tabla s3. #34186 (Kruglov Pavel).
  • Se corrige una condición de carrera poco frecuente e inocua en los motores de almacenamiento HDFS, S3 y URL, que puede provocar conexiones adicionales. #34172 (alesapin).
  • Corrige un error que, en raras ocasiones, puede provocar el error “Cannot read all data” al leer columnas LowCardinality de la familia de motores de tabla MergeTree que almacenan datos en un sistema de archivos remoto como S3 (el sistema de archivos virtual sobre S3 es una funcionalidad experimental que no está lista para producción). #34139 (alesapin).
  • Se corrigen las inserciones en tablas distribuidas en caso de que cambie el protocolo nativo. El último cambio se produjo en la versión 22.1, por lo que puede haber fallos en las inserciones en tablas distribuidas después de actualizar a esa versión. #34132 (Anton Popov).
  • Corrige una posible condición de carrera en el motor de tabla File que se introdujo en #33960. Cierra #34111. #34113 (Kruglov Pavel).
  • Se corrigió una condición de carrera menor que, en casos extremadamente raros, podía provocar el error de “partes superpuestas” tras perderse la conexión con ZooKeeper. #34096 (tavplubix).
  • Se corrigieron las inserciones asíncronas con el formato Native. #34068 (Anton Popov).
  • Se corrige un error que impedía que el servidor se iniciara cuando se usaban tanto el almacenamiento de accesos replicados como Keeper (integrado en clickhouse-server). Se introducen dos ajustes para el tiempo de espera del socket de Keeper, en lugar de usar los ajustes del usuario predeterminado: keeper_server.socket_receive_timeout_sec y keeper_server.socket_send_timeout_sec. Corrige #33973. #33988 (alesapin).
  • Corrige un fallo de segmentación al analizar un archivo ORC con el footer dañado. Cierra #33797. #33984 (Kruglov Pavel).
  • Corrige el análisis de IPv6 en un parámetro de consulta (sentencias preparadas) y la conversión de IPv6 a cadena. Cierra #33928. #33971 (Kruglov Pavel).
  • Se corrige un bloqueo al leer tuplas anidadas. Corrige #33838. #33956 (Anton Popov).
  • Corrige el uso de las funciones array y tuple con argumentos literales en consultas distribuidas. Anteriormente, esto podía provocar la excepción Not found columns. #33938 (Anton Popov).
  • El combinador de funciones de agregado -If no procesaba correctamente el argumento de filtro Nullable. Esto cierra #27073. #33920 (alexey-milovidov).
  • Corrige una posible condición de carrera durante la lectura desde un disco remoto (el sistema de archivos virtual sobre S3 es una funcionalidad experimental que no está lista para producción). #33912 (Amos Bird).
  • Se corrige un fallo al crear una UDF SQL con una lambda cuyos argumentos no son identificadores. Cierra #33866. #33868 (Maksim Kita).
  • Se corrigió el uso de columnas dispersas (que pueden habilitarse con la configuración experimental ratio_of_defaults_for_sparse_serialization). #33849 (Anton Popov).
  • Se corrigió el error lógico replica is not readonly en la consulta SYSTEM RESTORE REPLICA cuando la réplica estaba realmente en modo readonly. Corrige #33806. #33847 (tavplubix).
  • Se corrige una fuga de memoria en clickhouse-keeper cuando se usa compresión (por defecto). #33840 (Azat Khuzhin).
  • Se corrigió el análisis de índices cuando no había tipos comunes disponibles. #33833 (Amos Bird).
  • Se corrigió la inferencia de esquema para JSONEachRow y JSONCompactEachRow. #33830 (Kruglov Pavel).
  • Se corrigió el uso de diccionarios externos con la fuente redis y una gran cantidad de claves. #33804 (Anton Popov).
  • Se corrige un error en el cliente que provocaba ‘Connection reset by peer’ en el servidor. Cierra #33309. #33790 (Kruglov Pavel).
  • Se corrige el análisis sintáctico de la consulta INSERT INTO … VALUES SETTINGS … (…), … #33776 (Kruglov Pavel).
  • Se corrige un error en la comprobación de la tabla al crear una parte de datos con formato ancho y proyección. #33774 (李扬).
  • Se corrige una pequeña condición de carrera entre count() e INSERT/merges/… en MergeTree (es posible que se devuelva un número incorrecto de filas para SELECT con optimize_trivial_count_query). #33753 (Azat Khuzhin).
  • Generar una excepción cuando falle la solicitud de listado de directorio en el almacenamiento HDFS. #33724 (LiuNeng).
  • Se corrige la mutación cuando la tabla contiene proyecciones. Esto corrige #33010. Esto corrige #33275. #33679 (Amos Bird).
  • Determina correctamente la base de datos actual si CREATE TEMPORARY TABLE AS SELECT se ejecuta dentro de una sesión HTTP con nombre. Este es un caso de uso muy poco frecuente. Esto cierra #8340. #33676 (alexey-milovidov).
  • Permite ciertas consultas con ordenación, LIMIT BY, ARRAY JOIN y funciones lambda. Esto cierra #7462. #33675 (alexey-milovidov).
  • Corrige un error en “zero copy replication” (una funcionalidad que está en desarrollo y no debe usarse en producción) que provocaba la duplicación de datos en casos de TTL move. Corrige #33643. #33642 (alesapin).
  • Se corrigió Chunk should have AggregatedChunkInfo in GroupingAggregatedTransform (en caso de optimize_aggregation_in_order = 1). #33637 (Azat Khuzhin).
  • Se corrige el error Bad cast from type ... to DB::DataTypeArray, que puede producirse cuando una tabla tiene una columna Nested con puntos en el nombre y se le genera un valor predeterminado (por ejemplo, durante insert, cuando la columna no se incluye en la lista). Continuación de #28762. #33588 (Alexey Pavlenko).
  • Se ha corregido la exportación a archivos lz4. Cierra #31421. #31862 (Kruglov Pavel).
  • Se corrige un posible fallo si group_by_overflow_mode estaba configurado como any (GROUP BY aproximado) y la agregación se realizaba sobre una única columna de tipo LowCardinality. #34506 (DR).
  • Se corrige la inserción en tablas temporales a través del protocolo cliente-servidor gRPC. Corrige #34347, problema #2. #34364 (Vitaly Baranov).
  • Se corrige el problema #19429. #34225 (Vitaly Baranov).
  • Se corrigió el problema #18206. #33977 (Vitaly Baranov).
  • Este PR permite usar varios almacenamientos LDAP en la misma lista de directorios de usuarios. Antes funcionaba, pero se rompió porque las pruebas de LDAP están deshabilitadas (forman parte de las pruebas de testflows). #33574 (Vitaly Baranov).

Lanzamiento de ClickHouse v22.1, 2022-01-18. Presentación, Video

Notas de actualización

  • Las funciones left y right antes estaban implementadas en el analizador y ahora tienen funcionalidad completa. Las consultas distribuidas con funciones left o right sin alias pueden lanzar una excepción si el clúster contiene distintas versiones de clickhouse-server. Si está actualizando su clúster y encuentra este error, debe completar la actualización del clúster para asegurarse de que todos los nodos tengan la misma versión. También puede añadir alias (AS something) a las columnas de sus consultas para evitar este problema. #33407 (alexey-milovidov).
  • El uso de recursos de las subconsultas escalares se contabiliza por completo a partir de esta versión. Con este cambio, las filas leídas en las subconsultas escalares ahora se registran en el query_log. Si la subconsulta escalar está almacenada en caché (se repite o se llama para varias filas), las filas leídas solo se cuentan una vez. Este cambio permite finalizar consultas con KILL e informar del progreso mientras ejecutan subconsultas escalares. #32271 (Raúl Marín).

Nueva funcionalidad

  • Implementar la inferencia de esquemas de datos para los formatos de entrada. Permitir omitir la estructura (o escribir solo auto) en las funciones de tabla file, url, s3, hdfs y en los parámetros de clickhouse-local . Permitir omitir la estructura en la consulta CREATE para los motores de tabla File, HDFS, S3, URL, Merge, Buffer, Distributed y ReplicatedMergeTree (si añadimos nuevas réplicas). #32455 (Kruglov Pavel).
  • Detectar el formato a partir de la extensión del archivo en las funciones de tabla file/hdfs/s3/url y en los motores de tabla HDFS/S3/URL, así como en SELECT INTO OUTFILE e INSERT FROM INFILE #33565 (Kruglov Pavel). Cierra #30918. #33443 (OnePiece).
  • Una herramienta para recopilar datos de diagnóstico si necesita asistencia técnica. #33175 (Alexander Burmak).
  • Descubrimiento automático del clúster mediante Zoo/Keeper. Permite añadir réplicas al clúster sin cambiar la configuración en cada servidor. #31442 (vdimir).
  • Implementa el motor de tabla Hive para acceder a Apache Hive desde ClickHouse. Esto implementa: #29245. #31104 (taiyang-li).
  • Se añaden las funciones de agregación cramersV, cramersVBiasCorrected, theilsU y contingency. Estas funciones calculan la dependencia (una medida de asociación) entre valores categóricos. Todas ellas usan una tabla cruzada (un histograma de pares) para su implementación. Puede entenderse como un coeficiente de correlación, pero para cualquier valor discreto (no necesariamente numérico). #33366 (alexey-milovidov). Implementación inicial de Vanyok-All-is-OK y antikvist.
  • Se añadió la función de tabla hdfsCluster, que permite procesar en paralelo archivos de HDFS desde varios nodos de un clúster especificado, de forma similar a s3Cluster. #32400 (Zhichang Yu).
  • Se añade compatibilidad con discos basados en Azure Blob Storage, de forma similar a como se ha hecho con los discos basados en S3 de AWS. #31505 (Jakub Kuklis).
  • Se permite COMMENT en CREATE VIEW (para todos los tipos de VIEW). #31062 (Vasily Nemkov).
  • Reinicializa dinámicamente los puertos y protocolos de escucha cuando cambia la configuración. #30549 (Kevin Michel).
  • Se añadieron las funciones left, right, leftUTF8, rightUTF8. Se corrigió un error en la implementación de la función substringUTF8 con un offset negativo (desplazamiento desde el final de la cadena). #33407 (alexey-milovidov).
  • Se añaden nuevas funciones para el sistema de coordenadas H3: h3HexAreaKm2, h3CellAreaM2, h3CellAreaRads2. #33479 (Bharat Nallan).
  • Se añade la función MONTHNAME. #33436 (usurai).
  • Se añadió la función arrayLast. Cierra #33390. #33415 Se añadió la función arrayLastIndex. #33465 (Maksim Kita).
  • Se añade la función decodeURLFormComponent, ligeramente distinta de decodeURLComponent. Cierra #10298. #33451 (SuperDJY).
  • Permite separar las reglas de rollup de GraphiteMergeTree para métricas simples y etiquetadas (campo rule_type opcional). #33494 (Michail Safronov).

Mejora del rendimiento

  • Se admite mover condiciones a PREWHERE (configuración optimize_move_to_prewhere) para tablas con motor Merge si todas sus tablas subyacentes admiten PREWHERE. #33300 (Anton Popov).
  • Manejo más eficiente de globs para el almacenamiento URL. Ahora puede consultar fácilmente un millón de URL en paralelo con reintentos. Cierra #32866. #32907 (Kseniia Sumarokova).
  • Evita el backtracking exponencial en el parser. Esto cierra #20158. #33481 (alexey-milovidov).
  • El uso indebido de la función untuple provocaba una complejidad exponencial en el análisis de consultas (detectado por un fuzzer). Esto cierra #33297. #33445 (alexey-milovidov).
  • Reduce la memoria asignada a diccionarios con atributos de tipo cadena. #33466 (Maksim Kita).
  • Ligera mejora del rendimiento de la función reinterpret. #32587 (alexey-milovidov).
  • Cambio poco significativo. En casos extremadamente raros en los que se pierde una parte de datos en cada réplica, después de fusionar algunas partes de datos, las consultas posteriores pueden omitir menos particiones durante la poda de particiones. Esto prácticamente no afecta a nada. #32220 (Azat Khuzhin).
  • Mejora el rendimiento de escritura de clickhouse-keeper al optimizar la lógica de cálculo del tamaño. #32366 (zhanglistar).
  • Optimiza la materialización de proyecciones de una sola parte. Esto cierra #31669. #31885 (Amos Bird).
  • Mejora el rendimiento de las consultas en las tablas del sistema. #33312 (OnePiece).
  • Optimiza la selección de partes de MergeTree que pueden moverse entre volúmenes. #33225 (OnePiece).
  • Corrige el rendimiento del diccionario sparse_hashed con claves secuenciales (función hash incorrecta). #32536 (Azat Khuzhin).

Funcionalidad experimental

  • Lectura paralela desde múltiples réplicas dentro de un segmento durante una consulta distribuida sin usar una clave de muestreo. Para habilitar esto, establezca allow_experimental_parallel_reading_from_replicas = 1 y max_parallel_replicas en cualquier valor numérico. Esto cierra #26748. #29279 (Nikita Mikhaylov).
  • Se implementó la serialización dispersa. Puede reducir el uso de espacio en disco y mejorar el rendimiento de algunas consultas en columnas que contienen muchos valores predeterminados (cero). Puede habilitarse configurando ratio_for_sparse_serialization. La serialización dispersa se elegirá dinámicamente para una columna si la proporción entre la cantidad de valores predeterminados y la cantidad total de valores supera ese umbral. La serialización (predeterminada o dispersa) será fija para cada columna en una parte, pero puede variar entre partes. #22535 (Anton Popov).
  • Se añadió la funcionalidad “TABLE OVERRIDE” para personalizar los esquemas de tabla de MaterializedMySQL. #32325 (Stig Bakken).
  • Se añadió la consulta EXPLAIN TABLE OVERRIDE. #32836 (Stig Bakken).
  • Se añadió compatibilidad con la cláusula TABLE OVERRIDE para MaterializedPostgreSQL. RFC: #31480. #32749 (Kseniia Sumarokova).
  • Se cambió la ruta de ZooKeeper para las marks de zero-copy de shared data. Tenga en cuenta que “zero-copy replication” es una funcionalidad no apta para producción (en una fase temprana de desarrollo) que, en cualquier caso, no debería usar. Pero, si la ha usado, tenga presente este cambio. #32061 (ianton-ru).
  • Se añadió compatibilidad con la cláusula Events para la consulta watch de WINDOW VIEW. #32607 (vxider).
  • Se corrigió la ACL con hash numérico explícito en clickhouse-keeper: ahora el comportamiento es consistente con ZooKeeper y el digest generado siempre se acepta. #33249 (小路). #33246.
  • Se corrigió la eliminación inesperada de una proyección al desacoplar partes. #32067 (Amos Bird).

Mejora

  • Ahora, las funciones de conversión de fecha y hora que generen una fecha anterior a 1970-01-01 00:00:00 se saturarán a cero en lugar de provocar un desbordamiento. #29953 (Amos Bird). También corrige un error en el análisis de índices cuando la función de truncado de fecha producía un resultado anterior a la época Unix.
  • Mostrar siempre en el cliente el uso de recursos (uso total de CPU, uso total de RAM y uso máximo de RAM por host). #33271 (alexey-milovidov).
  • Se mejora la serialización y deserialización del tipo Bool y se comprueba el rango de valores. #32984 (Kruglov Pavel).
  • Si se define una configuración no válida mediante la consulta SET o mediante los parámetros de consulta de la solicitud HTTP, el mensaje de error incluirá sugerencias similares a la cadena de configuración no válida (si existe alguna). #32946 (Antonio Andelic).
  • Compatibilidad con sugerencias para nombres de configuración mal escritos en clickhouse-client y clickhouse-local. Cierra #32237. #32841 (凌涛).
  • Se permite usar columnas virtuales en las vistas materializadas. Cierra #11210. #33482 (OnePiece).
  • Se añade una configuración para deshabilitar IPv6 en clickhouse-keeper si es necesario. Esto cierra #33381. #33450 (Wu Xueyang).
  • Se añadió más información a system.build_options sobre la revisión actual de git. #33431 (taiyang-li).
  • clickhouse-local: seguimiento de la memoria con la opción --max_memory_usage_in_client. #33341 (Azat Khuzhin).
  • Permitir intervalos negativos en la función intervalLengthSum. Su duración también se sumará. Esto cierra #33323. #33335 (alexey-milovidov).
  • LineAsString se puede usar como formato de salida. Esto cierra #30919. #33331 (Sergei Trifonov).
  • Se admite <secure/> en la configuración del clúster, como forma alternativa de <secure>1</secure>. Cierra #33270. #33330 (SuperDJY).
  • Al pulsar Ctrl+C dos veces, clickhouse-benchmark se terminará de inmediato sin esperar a las consultas en curso. Esto cierra #32586. #33303 (alexey-milovidov).
  • Se admite timestamp de Unix con milisegundos en la función parseDateTimeBestEffort. #33276 (Ben).
  • Permite cancelar la consulta mientras se leen datos de una tabla externa en los formatos Arrow / Parquet / ORC; antes no se podía cancelar en el caso de archivos grandes cuando input_format_allow_seeks estaba establecido en false. Cierra #29678. #33238 (Kseniia Sumarokova).
  • Si el motor de la tabla admite la cláusula SETTINGS, se permite pasar la configuración como pares clave-valor o mediante la configuración. Se añade esta compatibilidad para MySQL. #33231 (Kseniia Sumarokova).
  • Impedir correctamente las claves primarias Nullable cuando sea necesario. Esto es para #32780. #33218 (Amos Bird).
  • Añadir reintentos para las conexiones de PostgreSQL en caso de que aún no se haya obtenido nada. Cierra #33199. #33209 (Kseniia Sumarokova).
  • Validar las claves de configuración de los diccionarios externos. #33095. #33130 (Kseniia Sumarokova).
  • Enviar información de perfil desde clickhouse-local. Cierra #33093. #33097 (Kseniia Sumarokova).
  • Evaluación de cortocircuito: compatibilidad con la función throwIf. Cierra #32969. #32973 (Maksim Kita).
  • (Esto solo ocurre en compilaciones no oficiales). Se corrigió un segfault al insertar datos en columnas comprimidas de tipo Decimal, String, FixedString y Array. Esto resuelve #32939. #32940 (N. Kolotov).
  • Se añadió compatibilidad para especificar una subconsulta como una función definida por el usuario en SQL. Ejemplo: CREATE FUNCTION test AS () -> (SELECT 1). Cierra #30755. #32758 (Maksim Kita).
  • Mejora la compatibilidad con la compresión de gRPC para #28671. #32747 (Vitaly Baranov).
  • Volcar todas las partes de datos en memoria cuando WAL no está habilitado al apagar el servidor o desacoplar la tabla. #32742 (nauta).
  • Permite controlar los tiempos de espera de conexión para MySQL (anteriormente, esto solo era compatible con el origen del Diccionario). Cierra #16669. Antes, el valor predeterminado de connect_timeout era bastante bajo; ahora es configurable. #32734 (Kseniia Sumarokova).
  • Se admite la opción authSource para el almacenamiento MongoDB. Cierra #32594. #32702 (Kseniia Sumarokova).
  • Se admite el tipo Date32 en la función de tabla genarateRandom. #32643 (nauta).
  • Se añaden las configuraciones max_concurrent_select_queries y max_concurrent_insert_queries para controlar las consultas concurrentes según el tipo de consulta. Cierra #3575. #32609 (SuperDJY).
  • Mejora en el manejo de estructuras anidadas con columnas faltantes al leer datos en formato Protobuf. Como continuación de https://github.com/ClickHouse/ClickHouse/pull/31988. #32531 (Vitaly Baranov).
  • Permitir credenciales vacías para el motor MongoDB. Cierra #26267. #32460 (Kseniia Sumarokova).
  • Deshabilita algunas optimizaciones de las funciones de ventana que pueden provocar excepciones. Cierra #31535. Cierra #31620. #32453 (Kseniia Sumarokova).
  • Permite la conexión a MongoDB 5.0. Cierra #31483. #32416 (Kseniia Sumarokova).
  • Se habilita la comparación entre Decimal y Float. Cierra #22626. #31966 (flynn).
  • Se agregaron las configuraciones command_read_timeout y command_write_timeout para StorageExecutable, StorageExecutablePool, ExecutableDictionary, ExecutablePoolDictionary y ExecutableUserDefinedFunctions. La configuración command_read_timeout controla el tiempo de espera para leer datos desde la salida estándar (stdout) del comando, en milisegundos. La configuración command_write_timeout controla el tiempo de espera para escribir datos en la entrada estándar (stdin) del comando, en milisegundos. Se agregó la configuración command_termination_timeout para ExecutableUserDefinedFunction, ExecutableDictionary y StorageExecutable. Se agregó la configuración execute_direct para ExecutableUserDefinedFunction; su valor predeterminado es true. Se agregó la configuración execute_direct para ExecutableDictionary y ExecutablePoolDictionary; su valor predeterminado es false. #30957 (Maksim Kita).
  • Las funciones de agregación de bitmap devolverán el resultado correcto para argumentos fuera de rango, en lugar de hacer wraparound. #33127 (DR).
  • Se corrige el análisis sintáctico de consultas incorrectas con la sentencia FROM INFILE. #33521 (Kruglov Pavel).
  • No se permite escribir en S3 si la ruta contiene globs. #33142 (Kruglov Pavel).
  • La opción --echo no se usaba en clickhouse-client en modo por lotes con una sola consulta. #32843 (N. Kolotov).
  • Usa la opción --database con clickhouse-local. #32797 (Kseniia Sumarokova).
  • Se corrigió un código sorprendentemente deficiente en la función SQL ordinaria file. Ahora admite enlaces simbólicos. #32640 (alexey-milovidov).
  • Actualización de modification_time de la parte de datos en system.parts tras mover la parte #32964. #32965 (save-my-heart).
  • Posible problema, no es explotable: puede producirse un desbordamiento de enteros al redimensionar un array. #33024 (varadarajkumar).

Mejoras de compilación/pruebas/empaquetado

  • Se añadieron paquetes, pruebas funcionales y compilaciones de Docker para la versión AArch64 (ARM) de ClickHouse. #32911 (Mikhail f. Shiryaev). #32415
  • Se preparó ClickHouse para compilarse con musl-libc. No está habilitado de forma predeterminada. #33134 (alexey-milovidov).
  • Se hizo que el script de instalación funcionara en FreeBSD. Esto cierra #33384. #33418 (alexey-milovidov).
  • Se añadió actionlint para los flujos de trabajo de GitHub Actions y se verificaron los archivos del flujo de trabajo con act --list para comprobar que la sintaxis fuera correcta. #33612 (Mikhail f. Shiryaev).
  • Se añadieron más pruebas para la funcionalidad de clave primaria Nullable. También se añadieron más pruebas con distintos types y tipos de MergeTree, además de datos generados aleatoriamente. #33228 (Amos Bird).
  • Se añadió una herramienta sencilla para visualizar pruebas inestables en el navegador web. #33185 (alexey-milovidov).
  • Se habilitó la compilación hermética para las builds compartidas. Esto es principalmente para desarrolladores. #32968 (Amos Bird).
  • Se actualizaron libc++ y libc++abi a la versión más reciente. #32484 (Raúl Marín).
  • Se añadió una prueba de integración para el cliente externo de .NET (ClickHouse.Client). #23230 (Oleg V. Kozlyuk).
  • Se inyectó información de git en el archivo binary de clickhouse. Así, podemos obtener fácilmente la revisión del código fuente a partir del archivo binary de clickhouse. #33124 (taiyang-li).
  • Se eliminó código obsoleto de ConfigProcessor. El código específico de Yandex ya no se usa. Contenía un defecto menor. Este defecto fue reportado por Mallik Hassan en #33032. Esto cierra #33032. #33026 (alexey-milovidov).

Corrección de errores (fallo visible para el usuario en una versión oficial estable o preestable)

  • Varias correcciones en el análisis de formatos. Esto es relevante si un adversario tiene acceso de escritura a clickhouse-server. Los datos de entrada específicamente diseñados para el formato Native pueden provocar la lectura de memoria no inicializada o un fallo. Esto es relevante si un adversario tiene acceso de escritura a clickhouse-server. #33050 (Heena Bansal). Se corrigió un problema de índice fuera de rango en el tipo Union de Apache Avro en el formato binario de Apache Avro. #33022 (Harry Lee). Se corrigió una desreferenciación de puntero nulo en datos LowCardinality al deserializar datos LowCardinality en el formato Native. #33021 (Harry Lee).
  • El manejador de ClickHouse Keeper eliminará correctamente la operación una vez enviada la respuesta. #32988 (JackyWoo).
  • Posible error de cálculo por desfase de una unidad en las cuotas: no se alcanzó el límite de la cuota, pero aun así se excedió. Esto corrige #31174. #31656 (sunny).
  • Se corrigió la conversión mediante CAST de String a IPv4 o IPv6, y viceversa. Se corrigió el mensaje de error en caso de que la conversión fallara. #29224 (Dmitry Novik) #27914 (Vasily Nemkov).
  • Se corrigió una excepción del tipo Unknown aggregate function nothing durante la ejecución en un servidor remoto. Esto corrige #16689. #26074 (hexiaoting).
  • Se corrigió la base de datos incorrecta para JOIN sin una base de datos explícita en consultas distribuidas (Corrige: #10471). #33611 (Azat Khuzhin).
  • Se corrige un segfault en el formato Apache Avro que aparece después de la segunda inserción en un archivo. #33566 (Kruglov Pavel).
  • Se corrigió un segfault en el formato Apache Arrow si el esquema contiene el tipo Dictionary. Cierra #33507. #33529 (Kruglov Pavel).
  • La configuración de offset y limit fuera de banda puede aplicarse de forma incorrecta a las vistas. Cierra #33289 #33518 (hexiaoting).
  • Se corrige una excepción, Block structure mismatch, que puede producirse durante la inserción en una tabla con una columna anidada LowCardinality predeterminada. Corrige #33028. #33504 (Nikolai Kochetov).
  • Se corrigen las expresiones del Diccionario para los atributos de rango mínimo y máximo de range_hashed cuando se crean mediante DDL. Cierra #30809. #33478 (Maksim Kita).
  • Se corrige un posible uso de memoria después de liberarla en INSERT sobre una vista materializada con DROP concurrente (Azat Khuzhin).
  • No intente leer más allá de EOF (como solución temporal para un error del kernel de Linux); este error puede reproducirse en kernels (3.14..5.9) y requiere index_granularity_bytes=0 (es decir, desactivar la granularidad adaptativa del índice). #33372 (Azat Khuzhin).
  • Los comandos SYSTEM SUSPEND y SYSTEM ... THREAD FUZZER no tenían control de acceso. Se ha corregido. Autor: Kevin Michel. #33333 (alexey-milovidov).
  • Se corrige un problema por el que COMMENT de los diccionarios no aparece en system.tables ni en system.dictionaries. Se permite modificar el comentario del motor Dictionary. Cierra #33251. #33261 (Maksim Kita).
  • Se agregan las inserciones asíncronas (con la opción async_insert habilitada) al registro de consultas. Antes, estas consultas no aparecían en el registro de consultas. #33239 (Anton Popov).
  • Se corrige el envío de expresiones WHERE 1 = 0 en consultas a bases de datos externas. Cierra #33152. #33214 (Kseniia Sumarokova).
  • Corrige la validación de DDL para MaterializedPostgreSQL. Corrige el ajuste materialized_postgresql_allow_automatic_update. Cierra #29535. #33200 (Kseniia Sumarokova). Garantiza que los slots de replicación no utilizados se eliminen siempre. Detectado en #26952. #33187 (Kseniia Sumarokova). Corrige detach/attach de MaterializedPostreSQL (eliminación/adición a la replicación) para tablas con un esquema distinto del predeterminado. Detectado en #29535. #33179 (Kseniia Sumarokova). Corrige DROP de la base de datos MaterializedPostgreSQL. #33468 (Kseniia Sumarokova).
  • La métrica StorageBufferBytes a veces se calculó incorrectamente. #33159 (xuyatian).
  • Corregido el error Invalid version for SerializationLowCardinality key column al leer una columna LowCardinality con local_filesystem_read_prefetch o remote_filesystem_read_prefetch habilitado. #33046 (Nikolai Kochetov).
  • Se corrige la table function s3 al leer archivos vacíos. Cierra #33008. #33037 (Kseniia Sumarokova).
  • Se corrige una fuga de Context en el caso de cancel_http_readonly_queries_on_client_close (es decir, la fuga de tablas externas que se habían subido al servidor y de otros recursos). #32982 (Azat Khuzhin).
  • Corrige la salida incorrecta de tuplas en formato CSV cuando se usa un delimitador CSV personalizado. #32981 (Kruglov Pavel).
  • Se corrige la comprobación de la URL de HDFS, que no permitía usar la dirección del namenode de alta disponibilidad. El error se introdujo en https://github.com/ClickHouse/ClickHouse/pull/31042. #32976 (Kruglov Pavel).
  • Se corrige una excepción del tipo positional argument out of bounds que se producía con argumentos no posicionales. Cierra #31173#event-5789668239. #32961 (Kseniia Sumarokova).
  • Corregir UB en caso de EOF inesperado durante el llenado de un Set desde una consulta por HTTP (es decir, si el cliente interrumpe a mitad del proceso; por ejemplo, timeout 0.15s curl -Ss -F 's=@t.csv;' 'http://127.0.0.1:8123/?s_structure=key+Int&query=SELECT+dummy+IN+s' y con un t.csv lo bastante grande). #32955 (Azat Khuzhin).
  • Corrige una regresión en la función replaceRegexpAll. La función se comportaba incorrectamente cuando la subcadena coincidente estaba vacía. Esto cierra #32777. Esto cierra #30245. #32945 (alexey-milovidov).
  • Se corrige la lectura de stripe en el formato ORC. #32929 (kreuzerkrieg).
  • topKWeightedState falló con algunos tipos de entrada. #32487. #32914 (vdimir).
  • Se corrige la excepción Single chunk is expected from view inner query (LOGICAL_ERROR) en una vista materializada. Corrige #31419. #32862 (Nikolai Kochetov).
  • Corrige la optimización con seek diferido para lecturas asíncronas desde sistemas de archivos remotos. Cierra #32803. #32835 (Kseniia Sumarokova).
  • El motor de tabla MergeTree podría omitir silenciosamente algunas mutaciones si hay demasiadas mutaciones en ejecución o en caso de alto consumo de memoria; ya se ha corregido. Corrige #17882. #32814 (tavplubix).
  • Se evita reutilizar la caché de subconsultas escalares al procesar bloques de MV. Esto corrige un error que se producía cuando la consulta escalar hacía referencia a la tabla de origen, pero implica que todas las subconsultas escalares de la definición de la MV se calcularán para cada bloque. #32811 (Raúl Marín).
  • Es posible que el servidor no pudiera iniciarse si una base de datos con motor MySQL no podía conectarse al servidor MySQL; esto ya se ha corregido. Corrige #14441. #32802 (tavplubix).
  • Se corrige el bloqueo al usar la función fuzzBits; se cierra #32737. #32755 (SuperDJY).
  • Se corrige el error Column is not under aggregate function en el caso de una MV con GROUP BY (list of columns) (que se interpreta como GROUP BY tuple(...)) sobre Kafka/RabbitMQ. Corrige #32668 y #32744. #32751 (Nikolai Kochetov).
  • Se corrige la consulta ALTER TABLE ... MATERIALIZE TTL en los modos TTL ... DELETE WHERE ... y TTL ... GROUP BY .... #32695 (Anton Popov).
  • Se corrige la optimización optimize_read_in_order en los casos en que el motor de tabla sea Distributed o Merge y las tablas MergeTree subyacentes tengan una función monótona en el prefijo de la clave de ordenación. #32670 (Anton Popov).
  • Se corrige la excepción LOGICAL_ERROR cuando el destino de una vista materializada es una tabla JOIN o SET. #32669 (Raúl Marín).
  • La inserción en S3 con carga multiparte en Google Cloud Storage puede desencadenar una cancelación. #32504. #32649 (vdimir).
  • Se corrige una posible excepción al iniciar el almacenamiento RabbitMQ retrasando la creación del canal. #32584 (Kseniia Sumarokova).
  • Corregido el ciclo de vida de la tabla (es decir, un posible uso de memoria ya liberada) en caso de DROP TABLE e INSERT en paralelo. #32572 (Azat Khuzhin).
  • Se corrigen las inserciones asíncronas con los formatos CustomSeparated, Template, Regexp, MsgPack y JSONAsString. Anteriormente, las inserciones asíncronas con estos formatos no leían datos. #32530 (Kruglov Pavel).
  • Se corrige la función groupBitmapAnd en tabla distribuida. #32529 (minhthucdao).
  • Se corrige un fallo en JOIN detectado por el fuzzer; cierra #32458. #32508 (vdimir).
  • Corrección del manejo de casos con duplicación de columnas en Apache Arrow. #32507 (Dmitriy Mokhnatkin).
  • Se corrigió un problema de formato ambiguo en consultas distribuidas que provocaba errores cuando algunas columnas de la tabla se llamaban ALL o DISTINCT. Esto cierra #32391. #32490 (alexey-milovidov).
  • Corrige fallos en las consultas que intentan usar índices de omisión que aún no se han materializado. Corrige #32292 y #30343. #32359 (Anton Popov).
  • Se corrige una consulta select que fallaba cuando hay más de 2 políticas de fila en la misma columna, a partir de la segunda consulta de la misma sesión. #31606. #32291 (SuperDJY).
  • Se corrige la conversión de marcas de tiempo Unix fraccionarias a DateTime64; la parte fraccionaria estaba invertida para las marcas de tiempo Unix negativas (anteriores a 1970-01-01). #32240 (Ben).
  • Algunas entradas de la cola de replicación podrían quedarse bloqueadas durante temporary_directories_lifetime (1 día de forma predeterminada) con Directory tmp_merge_<part_name> o Part ... (state Deleting) already exists, but it will be deleted soon u otro error similar. Se ha corregido. Soluciona #29616. #32201 (tavplubix).
  • Se corrige el análisis del transformador de columnas APPLY lambda, que podía provocar un bloqueo del cliente o del servidor. #32138 (Kruglov Pavel).
  • Se corrige un problema por el que base64Encode agregaba bytes finales en cadenas pequeñas. #31797 (Kevin Michel).
  • Se corrige un posible fallo (o un resultado incorrecto) en el caso de argumentos LowCardinality en una función de ventana. Corrige #31114. #31888 (Nikolai Kochetov).
  • Se corrige el cuelgue con el comando DROP TABLE system.query_log sync. #33293 (zhanghuajie).
Última modificación el 10 de junio de 2026