Cambios incompatibles
-
Cambiar el nombre de la columna de
duration_msaduration_microsecondsen la tablasystem.zookeeperpara reflejar que la duración se mide con resolución de microsegundos. #60774 (Duc Canh Le). -
No permitir establecer
max_parallel_replicasen 0, ya que no tiene sentido. Establecerlo en 0 podría provocar errores lógicos inesperados. Cierra #60140. #61201 (Kruglov Pavel). -
Eliminar la compatibilidad con la consulta
INSERT WATCH(parte de la funcionalidad experimentalLIVE VIEW). #62382 (Alexey Milovidov). -
Se desaconseja el uso de las funciones
neighbor,runningAccumulate,runningDifferenceStartingWithFirstValueyrunningDifference(porque son propensas a errores). En su lugar, deben usarse funciones de ventana adecuadas. Para volver a habilitarlas, establezcaallow_deprecated_error_prone_window_functions=1. #63132 (Nikita Taranov).
Cambios incompatibles con versiones anteriores
- En la nueva versión de ClickHouse, las funciones geoDistance, greatCircleDistance y greatCircleAngle usarán el tipo de datos de coma flotante de doble precisión de 64 bits para los cálculos internos y como tipo de retorno si todos los argumentos son Float64. Esto resuelve el #58476. En versiones anteriores, la función siempre usaba Float32. Puede volver al comportamiento anterior configurando geo_distance_returns_float64_on_float64_arguments en false o estableciendo compatibility en 24.2 o una versión anterior. #61848 (Alexey Milovidov).
- Las consultas a system.columns funcionarán más rápido si hay una gran cantidad de columnas, pero no se tiene concedido SHOW TABLES sobre muchas bases de datos o tablas. Tenga en cuenta que, en versiones anteriores, si concede SHOW COLUMNS a columnas individuales sin conceder SHOW TABLES a las tablas correspondientes, la tabla system.columns mostrará esas columnas, pero en la nueva versión omitirá la tabla por completo. Se eliminan los mensajes de registro de nivel trace “Access granted” y “Access denied”, que ralentizaban las consultas. #63439 (Alexey Milovidov).
- Se corrige un fallo en largestTriangleThreeBuckets. Esto cambia el comportamiento de esta función y hace que ignore los NaN de la serie proporcionada. Por lo tanto, el conjunto de resultados puede diferir del de versiones anteriores. #62646 (Raúl Marín).
Nuevas características
- El nuevo analizador está habilitado de forma predeterminada en los nuevos servicios.
- Permite eliminar varias tablas a la vez, por ejemplo con drop table a,b,c;. #58705 (zhongyuankai).
- Ahora es posible analizar CRLF con el formato TSV mediante la configuración input_format_tsv_crlf_end_of_line. Cierra #56257. #59747 (Shaun Struwig).
- El motor de tabla ahora puede otorgarse y esto no afectará al comportamiento de los usuarios existentes. #60117 (jsc0218).
- Añade el formato Form para leer y escribir un único registro en formato application/x-www-form-urlencoded. #60199 (Shaun Struwig).
- Se añadió la opción de comprimir en CROSS JOIN. #60459 (p1rattttt).
- Nueva configuración input_format_force_null_for_omitted_fields que obliga a usar valores NULL en los campos omitidos. #60887 (Constantine Peresypkin).
-
Se admite
joincon condiciones de desigualdad en las que intervienen columnas de las tablas izquierda y derecha. p. ej.,t1.y < t2.y. Para habilitarlo, SET allow_experimental_join_condition = 1. #60920 (lgbo). - Se añade una nueva función, getClientHTTPHeader. Esto cierra #54665. En coautoría con @lingtaolf. #61820 (Alexey Milovidov).
- Por comodidad, SELECT * FROM numbers() funcionará igual que SELECT * FROM system.numbers, sin límite. #61969 (YenchangChan).
- Ahora es posible modificar la configuración de la tabla memory mediante ALTER MODIFY SETTING. ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;. #62039 (zhongyuankai).
- El analizador admite CTE recursivas. #62074 (Maksim Kita).
- Antes, nuestro almacenamiento S3 y la función de tabla S3 no admitían seleccionar datos de archivos comprimidos. Creé una solución que permite iterar por los archivos dentro de archivos comprimidos en S3. #62259 (Daniil Ivanik).
- Compatibilidad con la función condicional clamp. #62377 (skyoct).
- Se añade el formato de salida npy. #62430 (豪肥肥).
- Compatibilidad del analizador con la cláusula QUALIFY. Cierra #47819. #62619 (Maksim Kita).
-
Se añadió el parámetro de consulta
rolea la interfaz HTTP. Funciona de forma similar a SET ROLE x: aplica el rol antes de ejecutar la sentencia. Esto permite superar una limitación de la interfaz HTTP, ya que no se permiten varias sentencias y no es posible enviar a la vez SET ROLE x y la propia sentencia. También es posible establecer varios roles de esta manera; por ejemplo, ?role=x&role=y, que equivale a SET ROLE x, y. #62669 (Serge Klochkov). - Se añade SYSTEM UNLOAD PRIMARY KEY. #62738 (Pablo Marcos).
- Se añadieron las funciones SQL generateUUIDv7, generateUUIDv7ThreadMonotonic y generateUUIDv7NonMonotonic (con distintos compromisos entre monotonicidad y rendimiento) para generar UUIDs de versión 7, también conocidos como UUIDs basados en timestamp con un componente aleatorio. También se añadió la nueva función UUIDToNum para extraer bytes de un UUID y la nueva función UUIDv7ToDateTime para extraer el componente de timestamp de un UUID de versión 7. #62852 (Alexey Petrunyaka).
- Raw como sinónimo de TSVRaw. #63394 (Unalian).
- Se añadió la posibilidad de realizar un cross join en un archivo temporal si el tamaño supera los límites. #63432 (p1rattttt).
Mejoras del rendimiento
- Omitir la fusión de los bloques de proyección recién creados durante los INSERT. #59405 (Nikita Taranov).
- Reducir la sobrecarga de las mutaciones para los SELECT (v2). #60856 (Azat Khuzhin).
- Mejoras en el pushdown de filtros de JOIN mediante conjuntos equivalentes. #61216 (Maksim Kita).
- Añadir una nueva pasada del analizador para optimizar IN con un único valor. #61564 (LiuNeng).
- Procesar las funciones de cadena XXXUTF8 en modo ASCII si las cadenas de entrada contienen solo caracteres ASCII. Inspirado en apache/doris#29799. Aceleración general de 1.07x~1.62x. Tenga en cuenta que el uso máximo de memoria se redujo en algunos casos. #61632 (李扬).
- Se habilitó de forma predeterminada el codificador rápido de Parquet (output_format_parquet_use_custom_encoder). #62088 (Michael Kolupaev).
- Mejorar JSONEachRowRowInputFormat omitiendo todos los campos restantes cuando ya se hayan leído todos los campos requeridos. #62210 (lgbo).
- Las funciones splitByChar y splitByRegexp se aceleraron significativamente. #62392 (李扬).
- Mejorar el insert select trivial desde archivos en las table functions file/s3/hdfs/url/… Añadir la configuración independiente max_parsing_threads para controlar el número de hilos usados en paralelo para el análisis. #62404 (Kruglov Pavel).
- Añadir compatibilidad con un búfer de escritura en paralelo para AzureBlobStorage, gestionado mediante la configuración azure_allow_parallel_part_upload. #62534 (SmitaRKulkarni).
- Las funciones to_utc_timestamp y from_utc_timestamp ahora son aproximadamente 2x más rápidas. #62583 (KevinyhZou).
- Las funciones parseDateTimeOrNull, parseDateTimeOrZero, parseDateTimeInJodaSyntaxOrNull y parseDateTimeInJodaSyntaxOrZero ahora se ejecutan significativamente más rápido (10x - 1000x) cuando la entrada contiene principalmente valores que no se pueden analizar. #62634 (LiuNeng).
- Cambiar el comportamiento de HostResolver en caso de fallo para conservar solo un registro por IP #62652 (Anton Ivashkin).
- Añadir la nueva configuración prefer_merge_sort_block_bytes para controlar el uso de memoria y acelerar 2 veces la ordenación durante la fusión cuando hay muchas columnas. #62904 (LiuNeng).
- Optimización de QueryPlan para convertir OUTER JOIN en INNER JOIN si el filtro después de JOIN siempre filtra los valores predeterminados. La optimización puede controlarse con la configuración query_plan_convert_outer_join_to_inner_join, habilitada de forma predeterminada. #62907 (Maksim Kita).
- Habilitar optimize_rewrite_sum_if_to_count_if de forma predeterminada. #62929 (Raúl Marín).
- Microoptimizaciones para el nuevo analizador. #63429 (Raúl Marín).
- El análisis de índices funcionará si DateTime se compara con DateTime64. Esto cierra #63441. #63443 (Alexey Milovidov).
- Acelerar un poco (alrededor de 1.5 veces) los índices de tipo set eliminando basura. #64098 (Alexey Milovidov).
Mejoras
- Eliminar la configuración optimize_monotonous_functions_in_order_by, ya que se está convirtiendo en un no-op. #63004 (Raúl Marín).
- Los Map ahora pueden tener Float32, Float64, Array(T), Map(K,V) y Tuple(T1, T2, …) como claves. Cierra #54537. #59318 (李扬).
- Se añade un WriteBuffer asíncrono para AzureBlobStorage, similar a S3. #59929 (SmitaRKulkarni).
- Cadenas multilínea con preservación de bordes y cambio del ancho de columna. #59940 (Volodyachan).
-
Hace que RabbitMQ marque con
nacklos mensajes defectuosos. Cierra #45350. #60312 (Kseniia Sumarokova). - Se añade una configuración, first_day_of_week, que afecta al primer día de la semana que consideran las funciones toStartOfInterval(…, INTERVAL … WEEK). Esto permite mantener la coherencia con la función toStartOfWeek, que usa el domingo como primer día de la semana de forma predeterminada. #60598 (Jordi Villar).
- Se agregó la columna virtual persistente _block_offset, que almacena el número original de la fila dentro del bloque asignado durante la inserción. La persistencia de la columna _block_offset se puede habilitar mediante la opción enable_block_offset_column. Se agregó la columna virtual _part_data_version, que contiene el número mínimo de bloque o la versión de mutación de la parte. La columna virtual persistente _block_number ya no se considera Experimental. #60676 (Anton Popov).
- Las funciones date_diff y age ahora calculan su resultado con precisión de nanosegundos en lugar de microsegundos. Ahora también admiten nanosecond (o nanoseconds o ns) como posible valor para el parámetro unit. #61409 (Austin Kothig).
- Ahora, durante las fusiones, no se cargan los marks de las partes wide. #61551 (Anton Popov).
- Habilitar output_format_pretty_row_numbers de forma predeterminada. Mejora la usabilidad. #61791 (Alexey Milovidov).
- La barra de progreso funcionará para consultas triviales con LIMIT en system.zeros, system.zeros_mt (ya funciona para system.numbers y system.numbers_mt) y la función de tabla generateRandom. Además, si el número total de registros es mayor que el límite max_rows_to_read, lanzará una excepción antes. Esto cierra #58183. #61823 (Alexey Milovidov).
- Se añade TRUNCATE ALL TABLES. #61862 (豪肥肥).
- Se añade una configuración, input_format_json_throw_on_bad_escape_sequence; al desactivarla, se pueden guardar secuencias de escape incorrectas en formatos de entrada JSON. #61889 (Kruglov Pavel).
- Se corrigió la gramática de “a” a “the” en el mensaje de advertencia. Solo hay un motor Atomic, por lo que debería ser “to the new Atomic engine” en lugar de “to a new Atomic engine”. #61952 (shabroo).
- Se corrige un error lógico al deshacer una transacción de inserción con quorum. #61953 (Han Fei).
- Inferir automáticamente tipos de columnas Nullable a partir del esquema de Apache Arrow. #61984 (Maksim Kita).
- Permite cancelar la fusión paralela de estados de agregación durante la agregación. Ejemplo: uniqExact. #61992 (Maksim Kita).
- La fuente del diccionario con INVALIDATE_QUERY no se recarga dos veces al iniciarse. #62050 (vdimir).
- OPTIMIZE FINAL para ReplicatedMergeTree ahora esperará a que terminen las fusiones activas en ese momento y luego volverá a intentar programar una fusión final. Esto lo alineará más con el comportamiento habitual de MergeTree. #62067 (Nikita Taranov).
- Al leer datos de un archivo de texto de Hive, se utilizaba la primera línea del archivo para ajustar la cantidad de campos de entrada, y a veces la cantidad de campos de esa primera línea no coincide con la definida en la tabla de Hive; por ejemplo, la tabla de Hive está definida con 3 columnas, como test_tbl(a Int32, b Int32, c Int32), pero la primera línea del archivo de texto solo tiene 2 campos. En esta situación, los campos de entrada se ajustan a 2, y si la siguiente línea del archivo de texto tiene 3 campos, el tercer campo no se puede leer y en su lugar se le asigna el valor predeterminado 0, lo cual no es correcto. #62086 (KevinyhZou).
- El resaltado sintáctico mientras se escribe en el cliente funcionará a nivel de sintaxis (anteriormente, funcionaba a nivel del lexer). #62123 (Alexey Milovidov).
-
Se corrige un problema por el que, al agregar un
= 1o= 0redundante después de una expresión booleana que involucra la clave primaria, no se utiliza el índice primario. Por ejemplo, tantoSELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1comoSELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0realizan un escaneo completo de la tabla, aunque se podría utilizar el índice primario. #62142 (josh-hildred). - Se añadió la configuración lightweight_deletes_sync (valor predeterminado: 2 - esperar a todas las réplicas de forma síncrona). Es similar a la configuración mutations_sync, pero solo afecta al comportamiento de las eliminaciones ligeras. #62195 (Anton Popov).
- Distinguir entre booleanos y enteros al interpretar valores para ajustes personalizados: SET custom_a = true; SET custom_b = 1;. #62206 (Vitaly Baranov).
- Admite el acceso a S3 mediante endpoints de interfaz de AWS Private Link. Cierra #60021, #31074 y #53761. #62208 (Arthur Passos).
- El cliente debe enviar el header ‘Keep-Alive: timeout=X’ al servidor. Si un cliente recibe una respuesta del servidor con ese header, debe usar el valor proporcionado por el servidor. Además, es preferible que el cliente no use una connection que esté a punto de expirar, para evitar una condición de carrera al cerrar la connection. #62249 (Sema Checherinda).
- Se añadieron las unidades de nanosegundos, microsegundos y milisegundos para date_trunc. #62335 (Misz606).
- La caché de consultas ya no guarda los resultados de consultas a tablas del sistema (system., information_schema., INFORMATION_SCHEMA.*). #62376 (Robert Schulze).
- La consulta MOVE PARTITION TO TABLE puede retrasarse o generar la excepción TOO_MANY_PARTS para evitar superar los límites del número de partes. Se aplican los mismos ajustes y límites que para la consulta INSERT (consulte max_parts_in_total, parts_to_delay_insert, parts_to_throw_insert, inactive_parts_to_throw_insert, inactive_parts_to_delay_insert, max_avg_part_size_for_too_many_parts, min_delay_to_insert_ms y el ajuste max_delay_to_insert). #62420 (Sergei Trifonov).
- Hacer que transform siempre devuelva la primera coincidencia. #62518 (Raúl Marín).
- Se evita evaluar las expresiones DEFAULT de la tabla al ejecutar RESTORE. #62601 (Vitaly Baranov).
- Permitir usar una clave de cuota con un esquema de autenticación distinto en las solicitudes HTTP. #62842 (Kseniia Sumarokova).
- Cerrar la sesión cuando se alcance el valid_until del usuario. #63046 (Konstantin Bogdanov).