Esta versión contiene correcciones de errores para la versión anterior 1.1.54318:
- Se corrigió un error con una posible condición de carrera en la replicación que podría conducir a la pérdida de datos. Este problema afecta a las versiones 1.1.54310 y 1.1.54318. Si utiliza una de estas versiones con tablas replicadas, se recomienda encarecidamente la actualización. Este problema se muestra en los registros en mensajes de advertencia como `Part ... from own log doesn't exist.` El problema es relevante incluso si no ve estos mensajes en los registros.
- La lógica de procesamiento para columnas anidadas con nombres que terminan en -Map en una tabla SummingMergeTree se extrajo a la función de agregado sumMap. Ahora puede especificar dichas columnas explícitamente.
- El tamaño máximo del diccionario IP trie se incrementa a 128M entradas.
- Se corrigieron bloqueos al insertar sincrónicamente en una tabla distribuida.
- Se corrigió la adición y eliminación no atómica de partes en tablas replicadas.
- Los datos insertados en una vista materializada no están sujetos a una deduplicación innecesaria.
- La ejecución de una consulta en una tabla distribuida para la que la réplica local está rezagada y las réplicas remotas no están disponibles ya no genera ningún error.
- Se agregó el `pointInPolygon` función para trabajar con coordenadas en un plano de coordenadas.
- Se agregó el `sumMap` función de agregado para calcular la suma de matrices, similar a `SummingMergeTree`.
- Se agregó el `trunc` función. Rendimiento mejorado de las funciones de redondeo (`round`, `floor`, `ceil`, `roundToExp2`) y corrigió la lógica de cómo funcionan. Cambió la lógica del `roundToExp2` función para fracciones y números negativos.
- El archivo ejecutable ClickHouse ahora depende menos de la versión de libc. El mismo archivo ejecutable ClickHouse se puede ejecutar en una amplia variedad de sistemas Linux. Todavía hay una dependencia al usar consultas compiladas (con la configuración `compile = 1` , que no se usa por defecto).
- Se ha reducido el tiempo necesario para la compilación dinámica de consultas.
-`SYSTEM` consultas para la administración del servidor: `SYSTEM RELOAD DICTIONARY`, `SYSTEM RELOAD DICTIONARIES`, `SYSTEM DROP DNS CACHE`, `SYSTEM SHUTDOWN`, `SYSTEM KILL`.
- Funciones añadidas para trabajar con matrices: `concat`, `arraySlice`, `arrayPushBack`, `arrayPushFront`, `arrayPopBack`, `arrayPopFront`.
- Añadir `root` y `identity` parámetros para la configuración de ZooKeeper. Esto le permite aislar usuarios individuales en el mismo clúster de ZooKeeper.
- Funciones agregadas añadidas `groupBitAnd`, `groupBitOr`, y `groupBitXor` (por compatibilidad, también están disponibles bajo los nombres `BIT_AND`, `BIT_OR`, y `BIT_XOR`).
- Los diccionarios externos se pueden cargar desde MySQL especificando un socket en el sistema de archivos.
- Los diccionarios externos se pueden cargar desde MySQL a través de SSL (`ssl_cert`, `ssl_key`, `ssl_ca` parámetros).
- Se agregó el `max_network_bandwidth_for_user` para restringir el uso general del ancho de banda para consultas por usuario.
- Soporte para `DROP TABLE` para tablas temporales.
- Soporte para lectura `DateTime` valores en formato de marca de tiempo Unix desde el `CSV` y `JSONEachRow` formato.
- Las réplicas rezagadas en las consultas distribuidas ahora se excluyen de forma predeterminada (el umbral predeterminado es de 5 minutos).
- El bloqueo FIFO se usa durante ALTER: una consulta ALTER no se bloquea indefinidamente para consultas que se ejecutan continuamente.
- Opción para establecer `umask` en el archivo de configuración.
- Rendimiento mejorado para consultas con `DISTINCT` .
- Se ha mejorado el proceso de eliminación de nodos antiguos en ZooKeeper. Anteriormente, los nodos antiguos a veces no se eliminaban si había inserciones muy frecuentes, lo que hacía que el servidor tardara en apagarse, entre otras cosas.
- Se corrigió la aleatorización al elegir hosts para la conexión a ZooKeeper.
- Se corrigió la exclusión de réplicas rezagadas en consultas distribuidas si la réplica es localhost.
- Se corrigió un error por el que una parte de datos en un `ReplicatedMergeTree` la tabla podría estar rota después de correr `ALTER MODIFY` en un elemento en un `Nested` estructura.
- Ahora hay un valor predeterminado más alto para la configuración MergeTree `max_bytes_to_merge_at_max_space_in_pool` (el tamaño total máximo de las partes de datos a fusionar, en bytes): ha aumentado de 100 GiB a 150 GiB. Esto podría dar lugar a grandes fusiones que se ejecutan después de la actualización del servidor, lo que podría provocar una mayor carga en el subsistema de disco. Si el espacio libre disponible en el servidor es inferior al doble de la cantidad total de las fusiones que se están ejecutando, esto hará que todas las demás fusiones dejen de ejecutarse, incluidas las fusiones de pequeñas partes de datos. Como resultado, las consultas INSERT fallarán con el mensaje “Merges are processing significantly slower than inserts.” Utilice el `SELECT * FROM system.merges` consulta para supervisar la situación. También puede comprobar el `DiskSpaceReservedForMerge` métrica en el `system.metrics` mesa, o en Grafito. No necesita hacer nada para solucionar esto, ya que el problema se resolverá solo una vez que finalicen las fusiones grandes. Si encuentra esto inaceptable, puede restaurar el valor anterior para el `max_bytes_to_merge_at_max_space_in_pool` configuración. Para hacer esto, vaya al `<merge_tree>` sección en config.xml, establecer ``` <merge_tree>``<max_bytes_to_merge_at_max_space_in_pool>107374182400</max_bytes_to_merge_at_max_space_in_pool> ``` y reinicie el servidor.
- Se agregó una sección WITH opcional para una consulta SELECT. Consulta de ejemplo: `WITH 1+1 AS a SELECT a, a*a`
- INSERT se puede realizar de forma sincrónica en una tabla distribuida: se devuelve OK solo después de guardar todos los datos en todos los fragmentos. Esto se activa mediante la configuración insert\_distributed\_sync=1.
- Se agregó el tipo de datos UUID para trabajar con identificadores de 16 bytes.
- Se agregaron alias de CHAR, FLOAT y otros tipos para compatibilidad con Tableau.
- Se agregaron las funciones aYYYYMM, aYYYYMMDD y aYYYYMMDDhhmmss para convertir el tiempo en números.
- Puede utilizar direcciones IP (junto con el nombre de host) para identificar servidores para consultas DDL en clúster.
- Se agregó soporte para argumentos no constantes y compensaciones negativas en la función `substring(str, pos, len).`
- Se agregó el parámetro max\_size para el `groupArray(max_size)(column)` función agregada, y optimizó su funcionamiento.
- Mejoras de seguridad: todos los archivos del servidor se crean con permisos 0640 (se pueden cambiar a través de `<umask>` parámetro de configuración).
- Mensajes de error mejorados para consultas con sintaxis no válida.
- Se ha reducido significativamente el consumo de memoria y se ha mejorado el rendimiento al combinar grandes secciones de datos de MergeTree.
- Aumentó significativamente el rendimiento de las fusiones de datos para el motor ReplacingMergeTree.
- Mejora del rendimiento de las inserciones asincrónicas de una tabla distribuida mediante la combinación de varias inserciones de origen. Para habilitar esta funcionalidad, utilice la configuración de directorio\_distribuido\_monitor\_batch\_inserts=1.
- Se agregó el `output_format_json_quote_denormals` configuración, que permite generar valores nan e inf en formato JSON.
- Asignación de secuencias optimizada al leer desde una tabla distribuida.
- Los ajustes se pueden configurar en modo de solo lectura si el valor no cambia.
- Se agregó la capacidad de recuperar gránulos no enteros del motor MergeTree para cumplir con las restricciones en el tamaño de bloque especificado en la configuración preferred\_block\_size\_bytes. El propósito es reducir el consumo de RAM y aumentar la localidad de caché al procesar consultas desde tablas con columnas grandes.
- Uso eficiente de índices que contienen expresiones como `toStartOfHour(x)` para condiciones como `toStartOfHour(x) op сonstexpr.`
- Se agregaron nuevas configuraciones para los motores MergeTree (la sección merge\_tree en config.XML):
- replicated\_deduplication\_window\_seconds establece el número de segundos permitidos para la deduplicación de inserciones en tablas replicadas.
- cleanup\_delay\_period establece con qué frecuencia iniciar la limpieza para eliminar datos obsoletos.
- replicated\_can\_become\_leader puede evitar que una réplica se convierta en el líder (y asigne fusiones).
- Limpieza acelerada para eliminar datos obsoletos de ZooKeeper.
- Múltiples mejoras y correcciones para consultas DDL en clúster. De particular interés es la nueva configuración distribut\_ddl\_task\_timeout, que limita el tiempo de espera para una respuesta de los servidores en el clúster. Si no se ha realizado una solicitud ddl en todos los hosts, una respuesta contendrá un error de tiempo de espera y una solicitud se ejecutará en modo asíncrono.
- Mejora de la visualización de los rastros de pila en los registros del servidor.
- Se agregó el “none” valor para el método de compresión.
- Puede usar varias secciones dictionaries\_config en config.XML.
- Es posible conectarse a MySQL a través de un socket en el sistema de archivos.
- Sistema.partes tiene una nueva columna con información sobre el tamaño de las marcas, en bytes.
- DDL distribuido (por ejemplo, `CREATE TABLE ON CLUSTER`)
- La consulta replicada `ALTER TABLE CLEAR COLUMN IN PARTITION.`
- El motor para las tablas del diccionario (acceso a los datos del diccionario en forma de tabla).
- Motor de base de datos de diccionario (este tipo de base de datos tiene automáticamente tablas de diccionario disponibles para todos los diccionarios externos conectados).
- Puede comprobar si hay actualizaciones en el diccionario enviando una solicitud al origen.
- Nombres de columna cualificados
- Citando identificadores usando comillas dobles.
- Sesiones en la interfaz HTTP.
- La consulta OPTIMIZE para una tabla replicada puede ejecutarse no solo en el líder.