Saltar al contenido principal
Cambios relevantes para los servicios de ClickHouse Cloud correspondientes a la versión v24.10.

Cambio incompatible con versiones anteriores

  • Ahora se permite escribir SETTINGS antes de FORMAT en una cadena de consultas con UNION cuando las subconsultas están entre paréntesis. Esto cierra #39712. También cambia el comportamiento cuando una consulta tiene la cláusula SETTINGS especificada dos veces en una secuencia. La cláusula SETTINGS más cercana tendrá prioridad para la subconsulta correspondiente. En versiones anteriores, la cláusula SETTINGS más externa podía tener prioridad sobre la interna. #60197#68614 (Alexey Milovidov).
  • Se reimplementa el tipo Dynamic. Ahora, cuando se alcanza el límite de tipos de datos dinámicos, los tipos nuevos no se convierten a String, sino que se almacenan en una estructura de datos especial en formato binario, con el tipo de dato codificado en binario. Ahora, cualquier tipo que se haya insertado alguna vez en una columna Dynamic puede leerse desde ella como subcolumna. #68132 (Pavel Kruglov).
  • Se admiten expresiones como a[b].c para las tuplas con nombre, así como subíndices con nombre en expresiones arbitrarias, por ejemplo, expr().name. Esto es útil para procesar JSON. Esto cierra #54965. En versiones anteriores, una expresión con la forma expr().name se interpretaba como tupleElement(expr(), name), y el analizador de consultas buscaba una columna name en lugar del elemento de tupla correspondiente; en la nueva versión, en cambio, pasa a interpretarse como tupleElement(expr(), 'name'). En la mayoría de los casos, la versión anterior no funcionaba, pero es posible imaginar un escenario muy poco habitual en el que este cambio pudiera provocar incompatibilidades: si almacenabas nombres de elementos de tupla en una columna o alias cuyo nombre era distinto del nombre del elemento de la tupla: SELECT 'b' AS a, CAST([tuple(123)] AS 'Array(Tuple(b UInt8))') AS t, t[1].a. Es muy poco probable que hayas usado consultas de este tipo, pero aun así tenemos que marcar este cambio como potencialmente incompatible con versiones anteriores. #68435 (Alexey Milovidov).
  • Cuando la configuración print_pretty_type_names está habilitada, el tipo de dato Tuple se imprimirá en formato Pretty en las sentencias SHOW CREATE TABLE, en la función formatQuery y en el modo interactivo de clickhouse-client y clickhouse-local. En versiones anteriores, esta configuración solo se aplicaba a las consultas DESCRIBE y a toTypeName. Esto cierra #65753. #68492 (Alexey Milovidov).
  • Ahora se permite, de forma predeterminada, reordenar las condiciones de filtro de la cláusula [PRE]WHERE. Puede deshabilitarse estableciendo allow_reorder_prewhere_conditions en false. #70657 (Nikita Taranov).
  • Se corrige la optimización optimize_functions_to_subcolumns (antes podía provocar el error Invalid column type for ColumnUnique::insertRangeFrom. Expected String, got LowCardinality(String)), preservando el tipo LowCardinality en mapKeys/mapValues. #70716 (Azat Khuzhin).

Nueva funcionalidad

  • Las vistas materializadas actualizables están listas para su uso en producción. #70550 (Michael Kolupaev). Las vistas materializadas actualizables ahora son compatibles con bases de datos Replicated. #60669 (Michael Kolupaev).
  • La función toStartOfInterval() ahora tiene una nueva sobrecarga que emula la función time_bucket() de TimescaleDB y la función date_bin() de PostgreSQL, respectivamente. (#55619). Permite alinear valores de fecha o timestamp con múltiplos de un intervalo dado a partir de un origen arbitrario (en lugar de 0000-01-01 00:00:00.000 como origen fijo). Por ejemplo, SELECT toStartOfInterval(toDateTime('2023-01-01 14:45:00'), INTERVAL 1 MINUTE, toDateTime('2023-01-01 14:35:30')); devuelve 2023-01-01 14:44:30, que es un múltiplo de intervalos de 1 minuto a partir del origen 2023-01-01 14:35:30. #56738 (Yarik Briukhovetskyi).
  • Integración con MongoDB refactorizada: migración al nuevo driver mongocxx desde el obsoleto Poco::MongoDB, eliminación de la compatibilidad con el antiguo protocolo obsoleto, compatibilidad con conexiones mediante URI, compatibilidad con todos los tipos de MongoDB, compatibilidad con las sentencias WHERE y ORDER BY del lado de MongoDB, restricción de expresiones no compatibles con MongoDB. #63279 (Kirill Nikiforov).
  • Una nueva opción --progress-table en clickhouse-client imprime una tabla con métricas que cambian durante la ejecución de la consulta; la nueva opción --enable-progress-table-toggle está asociada con --progress-table y permite alternar la visualización de la tabla de progreso pulsando la tecla Espacio. #63689 (Maria Khristenko).
  • Esto permite conceder acceso a prefijos con comodines. GRANT SELECT ON db.table_pefix_* TO user. #65311 (pufit).
  • Se introdujo el formato JSONCompactWithProgress, en el que ClickHouse devuelve cada fila como un objeto JSON delimitado por saltos de línea, incluidos metadatos, datos, progreso, totales y estadísticas. #66205 (Alexey Korepanov).
  • Se añade system.query_metric_log, que contiene el historial de los valores de memoria y de las métricas de la tabla system.events para consultas individuales, volcados periódicamente a disco. #66532 (Pablo Marcos).
  • Añade la configuración input_format_json_empty_as_default, que, cuando está activada, trata los campos vacíos de las entradas JSON como valores predeterminados. Cierra #59339. #66782 (Alexis Arnaud).
  • Se añadieron las funciones overlay y overlayUTF8, que sustituyen partes de una cadena por otra. Ejemplo: SELECT overlay('Hello New York', 'Jersey', 11) devuelve Hello New Jersey. #66933 (李扬).
  • Se agrega un nuevo comando, eliminación ligera en partición DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr; ``` VM-114-29-tos :) select * from ads_app_poster_ip_source_channel_di_replicated_local;. #67805 (sunny).
  • Se implementó la comparación de los valores del tipo de datos Interval, de modo que ahora se convierten al menor supertipo. #68057 (Yarik Briukhovetskyi).
  • Añadir la configuración create_if_not_exists para que el comportamiento predeterminado en las sentencias CREATE sea IF NOT EXISTS. #68164 (Peter Nguyen).
  • Permite leer tablas Iceberg en Azure y localmente. #68210 (Daniil Ivanik).
  • Se añaden las funciones de agregación distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypes para facilitar la introspección del contenido del tipo de columna JSON. #68463 (Pavel Kruglov).
  • Ahora se pueden eliminar las entradas de la caché de consultas por etiqueta. Por ejemplo, la entrada de la caché de consultas creada por SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc' ahora puede eliminarse con SYSTEM DROP QUERY CACHE TAG 'abc' (o, por supuesto, simplemente con SYSTEM DROP QUERY CACHE, que borrará toda la caché de consultas). #68477 (Michał Tabaszewski).
  • Se puede escribir una consulta SELECT simple usando SELECT implícito para habilitar expresiones tipo calculadora; por ejemplo, ch "1 + 2". Esto se controla mediante una nueva configuración, implicit_select. #68502 (Alexey Milovidov).
  • Se añade compatibilidad con el modo —copy para clickhouse local como acceso directo para la conversión de formato #68503. #68583 (Denis Hananein).
  • Se añadió la función ripeMD160, que calcula el hash criptográfico RIPEMD-160 de una cadena de texto. Ejemplo: SELECT hex(ripeMD160('The quick brown fox jumps over the lazy dog')) devuelve 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B. #68639 (Dergousov Maxim).
  • Se añade la columna virtual _headers para el motor de tabla URL. Cierra #65026. #68867 (flynn).
  • Se añade la tabla system.projections para hacer seguimiento de las proyecciones disponibles. #68901 (Jordi Villar).
  • Se añade compatibilidad con la función arrayUnion. #68989 (Peter Nguyen).
  • Se añade la nueva función arrayZipUnaligned para compatibilidad con Spark(arrays_zip), que permite arrays no alineados basados en la arrayZip original. ``` sql SELECT arrayZipUnaligned([1], [1, 2, 3]). #69030 (李扬).
  • Se admite la función de agregado quantileExactWeightedInterpolated, que es una versión interpolada basada en quantileExactWeighted. Algunas personas pueden preguntarse por qué necesitamos una nueva quantileExactWeightedInterpolated si ya existe quantileExactInterpolatedWeighted. La razón es que la nueva es más precisa que la anterior. Además, sirve para la compatibilidad con Spark en Apache Gluten. #69619 (李扬).
  • Se añadió compatibilidad con la función arrayElementOrNull. Devuelve null si el índice del array está fuera de rango o no se encuentra la clave del mapa. #69646 (李扬).
  • Compatibilidad con el tipo Dynamic en la mayoría de las funciones al ejecutarlas sobre los tipos internos dentro de Dynamic. #69691 (Pavel Kruglov).
  • Añade el argumento scale (valor predeterminado: true) a la función arrayAUC, lo que permite omitir el paso de normalización (issue #69609). #69717 (gabrielmcg44).
  • Se ha vuelto a añadir la función RIPEMD160, que calcula el hash criptográfico RIPEMD-160 de una cadena. Ejemplo: SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog')) devuelve 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B. #70087 (Dergousov Maxim).
  • Permite almacenar en caché los archivos leídos en motores de tabla de almacenamiento de objetos y lagos de datos usando el hash de ETag + la ruta del archivo como clave de caché. #70135 (Kseniia Sumarokova).
  • Se admite la lectura de tablas Iceberg en HDFS. #70268 (flynn).
  • Permite leer y escribir el tipo JSON como cadena binaria en formato RowBinary mediante las configuraciones input_format_binary_read_json_as_string/output_format_binary_write_json_as_string. #70288 (Pavel Kruglov).
  • Permite serializar/deserializar una columna JSON como una sola columna String en Native format. Para la salida, use la configuración output_format_native_write_json_as_string. Para la entrada, use la versión de serialización 1 antes de los datos de la columna. #70312 (Pavel Kruglov).
  • Admite CTE estándar y with insert, ya que anteriormente solo admitía insert ... with .... #70593 (Shichao Jin).
Última modificación el 10 de junio de 2026