Saltar al contenido principal

Lanzamiento de ClickHouse v21.12, 2021-12-15. Presentación, Video

Cambio incompatible con versiones anteriores

  • Una corrección para una funcionalidad que antes tenía un comportamiento no deseado. No se permite el SELECT directo para Kafka/RabbitMQ/FileLog. Se puede habilitar estableciendo stream_like_engine_allow_direct_select. El SELECT directo no estará permitido aunque se habilite mediante esta configuración si hay una vista materializada adjunta. En Kafka y RabbitMQ, el SELECT directo, si está permitido, no confirmará mensajes de forma predeterminada. Para habilitar las confirmaciones con SELECT directo, el usuario debe usar la configuración a nivel de almacenamiento kafka{rabbitmq}_commit_on_select=1 (valor predeterminado: 0). #31053 (Kseniia Sumarokova).
  • Un ligero cambio en el comportamiento de una función nueva. Devuelve una cadena sin comillas en JSON_VALUE. Cierra #27965. #31008 (Kseniia Sumarokova).
  • Cambio de nombre de una configuración. Añade compatibilidad con una representación personalizada de NULL para los formatos de entrada TSV/CSV. Corrige la deserialización de Nullable(String) en los formatos de entrada TSV/CSV/JSONCompactStringsEachRow/JSONStringsEachRow. Cambia el nombre de output_format_csv_null_representation y output_format_tsv_null_representation a format_csv_null_representation y format_tsv_null_representation, respectivamente. #30497 (Kruglov Pavel).
  • Degradación adicional de código que ya no se usaba. Esto solo es relevante si usa versiones de ClickHouse anteriores a la 20.6. Se elimina el mecanismo de “elección de líder” de ReplicatedMergeTree, porque desde la versión 20.6 se admiten varios líderes. Si está actualizando desde una versión anterior y alguna réplica con una versión antigua es líder, el servidor no podrá iniciarse después de la actualización. Detenga las réplicas con la versión antigua para que la nueva versión pueda iniciarse. Después de eso, ya no será posible volver a una versión anterior a la 20.6. #32140 (tavplubix).

Nueva característica

  • Se implementaron más comandos Four Letter Words de ZooKeeper en clickhouse-keeper: https://zookeeper.apache.org/doc/r3.4.8/zookeeperAdmin.html#sc_zkCommands. #28981 (JackyWoo). Ahora clickhouse-keeper ya ofrece todas las funcionalidades.
  • Soporte para el tipo de datos Bool. #31072 (kevin wan).
  • Compatibilidad con PARTITION BY en los almacenamientos File, URL y HDFS, y con la función de tabla INSERT INTO. Cierra #30273. #30690 (Kseniia Sumarokova).
  • Se añadió CONSTRAINT ... ASSUME ... (sin validación durante INSERT). Se añadió la transformación de consultas a CNF (https://github.com/ClickHouse/ClickHouse/issues/11749) para facilitar la optimización. Se añadió una reescritura simple de consultas mediante restricciones (por ahora solo con coincidencias simples; más adelante se mejorará para admitir <,=,>…). Se añadió la posibilidad de reemplazar columnas pesadas por columnas ligeras cuando sea posible. #18787 (Nikita Vasilev).
  • Autenticación básica para el acceso a las funciones http/url. #31648 (michael1589).
  • Se admite el tipo INTERVAL en la cláusula STEP del modificador WITH FILL. #30927 (Anton Popov).
  • Se añade soporte para la lectura en paralelo de varios archivos y para patrones glob en la cláusula FROM INFILE. #30135 (Filatenkov Artur).
  • Se añade compatibilidad con parámetros de consulta Identifier para tablas y bases de datos. Cierra #27226. #28668 (Nikolay Degterinsky).
  • TLDR: Grandes mejoras en la exhaustividad y la coherencia de los formatos de texto. Se refactorizan los formatos TSV, TSVRaw, CSV, JSONCompactEachRow y JSONCompactStringsEachRow, se elimina la duplicación de código y se añade una interfaz base para los formatos con los sufijos -WithNames y -WithNamesAndTypes. Se añaden los formatos CSVWithNamesAndTypes, TSVRawWithNames, TSVRawWithNamesAndTypes, JSONCompactEachRowWIthNames, JSONCompactStringsEachRowWIthNames, RowBinaryWithNames. Se añade compatibilidad con el parsing en paralelo para los formatos TSVWithNamesAndTypes, TSVRaw(WithNames/WIthNamesAndTypes), CSVWithNamesAndTypes, JSONCompactEachRow(WithNames/WIthNamesAndTypes) y JSONCompactStringsEachRow(WithNames/WIthNamesAndTypes). Se añade compatibilidad con el mapeo de columnas y la comprobación de tipos para el formato RowBinaryWithNamesAndTypes. Se añade la configuración input_format_with_types_use_header, que especifica si se debe comprobar que los tipos escritos en el formato <format_name>WIthNamesAndTypes coincidan con la estructura de la tabla. Se añade la configuración input_format_csv_empty_as_default y se usa en el formato CSV en lugar de input_format_defaults_for_omitted_fields (porque esta configuración no debería controlar csv_empty_as_default). Se corrige el uso de la configuración input_format_defaults_for_omitted_fields (solo se usaba como csv_empty_as_default, pero debería controlar el cálculo de las expresiones de valor predeterminado para los campos omitidos). Se corrige la entrada/salida de Nullable en el formato TSVRaw, lo que hace que este formato sea totalmente compatible con la inserción en TSV. Se corrige la inserción de NULL en LowCardinality(Nullable) cuando input_format_null_as_default está habilitado (antes se insertaban valores predeterminados en lugar de valores NULL reales). Se corrige la deserialización de cadenas en los formatos JSONStringsEachRow/JSONCompactStringsEachRow (las cadenas se parseaban solo hasta el primer ‘\n’ o ‘\t’). Se añade la posibilidad de usar la regla de escape Raw en el formato de entrada Template. Se añade información de diagnóstico para el formato de entrada JSONCompactEachRow(WithNames/WIthNamesAndTypes). Se corrige un error en el parsing en paralelo de los formatos -WithNames cuando la configuración min_chunk_bytes_for_parallel_parsing es menor que los bytes de una sola fila. #30178 (Kruglov Pavel). Se permite imprimir/parsear nombres y tipos de columnas en el formato de entrada/salida CustomSeparated. Se añaden los formatos CustomSeparatedWithNames/WithNamesAndTypes, similares a TSVWithNames/WithNamesAndTypes. #31434 (Kruglov Pavel).
  • Soporte para el almacenamiento OSS de Aliyun. #31286 (cfcz48).
  • Expone todos los parámetros del pool global de hilos en el archivo de configuración. #31285 (Tomáš Hromada).
  • Se introdujeron las funciones de ventana exponentialTimeDecayedSum, exponentialTimeDecayedMax, exponentialTimeDecayedCount y exponentialTimeDecayedAvg, que son más eficaces que exponentialMovingAverage para ventanas más grandes. Además, se abarcaron más casos de uso. #29799 (Vladimir Chebotarev).
  • Se agregó la opción de comprimir los logs antes de escribirlos en un archivo con LZ4. Cierra #23860. #29219 (Nikolay Degterinsky).
  • Se admite JOIN ON 1 = 1 con semántica de CROSS JOIN. Esto cierra #25578. #25894 (Vladimir C).
  • Se añade el combinador Map para el tipo Map. - Se renombra el anterior sum-, min-, max- Map para arrays mapeados a sum-, min-, max- MappedArrays. #24539 (Ildus Kurbangaliev).
  • Permitir reintentar la lectura desde HTTP. Cierra #29696. #29894 (Kseniia Sumarokova).

Funcionalidad experimental

  • WINDOW VIEW para habilitar el procesamiento de flujo en ClickHouse. #8331 (vxider).
  • Se elimina la compatibilidad con el uso de bases de datos Ordinary en MaterializedMySQL. #31292 (Stig Bakken).
  • Se implementan los comandos BACKUP y RESTORE para la familia Log. Esta funcionalidad está en desarrollo. #30688 (Vitaly Baranov).

Mejora del rendimiento

  • Reduce el uso de memoria al leer formatos Parquet, ORC y Arrow con s3 / url / hdfs (controlado por la configuración input_format_allow_seeks, habilitada de forma predeterminada). También se añade la configuración remote_read_min_bytes_for_seek para controlar los seeks. Cierra #10461. Cierra #16857. #30936 (Kseniia Sumarokova).
  • Añade optimizaciones para condiciones constantes en JOIN ON, ref. #26928. #27021 (Vladimir C).
  • Admite formatting en paralelo para todos los formatos de texto, excepto JSONEachRowWithProgress y PrettyCompactMonoBlock. #31489 (Kruglov Pavel).
  • Acelera count en columnas Nullable. #31806 (Raúl Marín).
  • Acelera las aggregate functions avg y sumCount. #31694 (Raúl Marín).
  • Mejora el rendimiento de los formatos de salida JSON y XML. #31673 (alexey-milovidov).
  • Mejora el rendimiento de la sincronización de datos con dispositivos de bloques. Esto cierra #31181. #31229 (zhanglistar).
  • Corrige un problema de rendimiento de consultas en tablas LiveView. Corrige #30831. #31006 (vzakaznikov).
  • Acelera el análisis de consultas. #31949 (Raúl Marín).
  • Permite dividir las reglas de rollup de GraphiteMergeTree para metrics simples y etiquetadas (campo opcional rule_type). #25122 (Michail Safronov).
  • Elimina solicitudes excesivas de DESC TABLE para remote() (en el caso de remote('127.1', system.one) —es decir, un identificador como db.table en lugar de una cadena—, había una solicitud excesiva de DESC TABLE). #32019 (Azat Khuzhin).
  • Optimiza la función tupleElement para leer subcolumns con la configuración optimize_functions_to_subcolumns habilitada. #31261 (Anton Popov).
  • Optimiza la función mapContains para leer la subcolumn key con la configuración optimize_functions_to_subcolumns habilitada. #31218 (Anton Popov).
  • Añade las configuraciones merge_tree_min_rows_for_concurrent_read_for_remote_filesystem y merge_tree_min_bytes_for_concurrent_read_for_remote_filesystem. #30970 (Kseniia Sumarokova).
  • Omite mutations de distintas particiones en StorageMergeTree. #21326 (Vladimir Chebotarev).

Mejora

  • No permitir que se elimine una tabla o diccionario si hay tablas o diccionarios que dependen de él. #30977 (tavplubix).
  • Permitir el versionado de los estados de las funciones de agregado. Ahora podemos introducir cambios retrocompatibles en el formato de serialización de los estados de las funciones de agregado. Cierra #12552. #24820 (Kseniia Sumarokova).
  • Compatibilidad con la sintaxis ALTER MODIFY COLUMN de estilo PostgreSQL. #32003 (SuperDJY).
  • Se añadió soporte para update_field en RangeHashedDictionary y ComplexKeyRangeHashedDictionary. #32185 (Maksim Kita).
  • Las funciones murmurHash3_128 y sipHash128 ahora aceptan una cantidad arbitraria de argumentos. Esto resuelve #28774. #28965 (小路).
  • Admite expresiones predeterminadas para el almacenamiento HDFS y optimiza la recuperación cuando el origen está orientado a columnas. #32256 (李扬).
  • Mejora el nombre de la operación en un span de OpenTelemetry. #32234 (Frank Chen).
  • Utilice Content-Type: application/x-ndjson (http://ndjson.org/) para el formato de salida JSONEachRow. #32223 (Dmitriy Dorofeev).
  • Se mejora la omisión de campos desconocidos con la regla de escape con comillas en los formatos Template/CustomSeparated. Antes solo se podían omitir cadenas entrecomilladas; ahora se pueden omitir valores de cualquier tipo. #32204 (Kruglov Pavel).
  • Ahora, clickhouse-keeper se niega a iniciarse o a aplicar cambios en la configuración si estos contienen IDs o endpoints duplicados. Corrige #31339. #32121 (alesapin).
  • Se establece el Content-Type en los paquetes HTTP emitidos por el motor URL. #32113 (Frank Chen).
  • Devuelve Content-Type como ‘application/json’ para el formato JSONEachRow si output_format_json_array_of_rows está habilitado. #32112 (Frank Chen).
  • Permitir interpretar + delante de los valores Float32/Float64. #32079 (Kruglov Pavel).
  • Permite que el usuario configure el parámetro hdfs_replication para DiskHDFS y StorageHDFS. Cierra #32039. #32049 (leosunli).
  • Se añadieron los campos exception y exception_code de ClickHouse al log de spans de OpenTelemetry. #32040 (Frank Chen).
  • Mejorar la duración del registro del span de OpenTelemetry: era cero a nivel de consulta si se producía una excepción en la consulta. #32038 (Frank Chen).
  • Se solucionó el problema que impedía crear LowCardinality de Int256. #31832 (alexey-milovidov).
  • Volver a crear las tablas system.*_log si engine/partition_by son diferentes. #31824 (Azat Khuzhin).
  • MaterializedMySQL: Se corrige un problema con una tabla llamada ‘table’. #31781 (Håvard Kvålen).
  • Fuente del diccionario de ClickHouse: admite conexiones predefinidas. Cierra #31705. #31749 (Kseniia Sumarokova).
  • Se permite usar la configuración predefinida de conexiones para los motores Kafka y RabbitMQ (del mismo modo que para los motores de tabla de otras integraciones). #31691 (Kseniia Sumarokova).
  • Volver a mostrar siempre el prompt al navegar por el historial en clickhouse-client. Esto mejora la usabilidad al manipular consultas muy largas que no caben en pantalla. #31675 (alexey-milovidov) (autor: Amos Bird).
  • Agregar atajos de teclado para navegar por el historial (en lugar de líneas/historial). #31641 (Azat Khuzhin).
  • Mejoradas las comprobaciones de max_execution_time. Se corrigieron algunos casos en los que no se realizaban las comprobaciones de timeout y la consulta podía ejecutarse durante demasiado tiempo. #31636 (Raúl Marín).
  • Mensaje de excepción mejorado cuando no se puede cargar users.xml debido a un hash de contraseña incorrecto. Esto cierra #24126. #31557 (Vitaly Baranov).
  • Usa el nombre del segmento y de la réplica de los argumentos de la base de datos Replicated al expandir macros en los argumentos de ReplicatedMergeTree si esas macros no están definidas en la configuración. Cierra #31471. #31488 (tavplubix).
  • Mejora del análisis de la proyección min/max/count. Ahora, con allow_experimental_projection_optimization habilitado, la proyección virtual min/max/count puede usarse junto con columnas de la clave de partición. #31474 (Amos Bird).
  • Se añadió compatibilidad con --pager en clickhouse-local. #31457 (Azat Khuzhin).
  • Se corrige la espera del editor durante la edición interactiva de consultas (waitpid() devuelve -1 con SIGWINCH y EDITOR y clickhouse-local/clickhouse-client funcionan de forma concurrente). #31456 (Azat Khuzhin).
  • Lanzar una excepción si hay datos no válidos después de un campo en el formato JSONCompactStrings(EachRow). #31455 (Kruglov Pavel).
  • El valor predeterminado de la configuración http_send_timeout y http_receive_timeout cambió de 1800 (30 minutos) a 180 (3 minutos). #31450 (tavplubix).
  • MaterializedMySQL ahora gestiona las consultas DDL CREATE TABLE ... LIKE .... #31410 (Stig Bakken).
  • Devolver una consulta CREATE artificial al ejecutar show create table sobre tablas del sistema. #31391 (SuperDJY).
  • Anteriormente, el progreso solo se mostraba para la table function numbers. Ahora también se muestra para numbers_mt. #31318 (Kseniia Sumarokova).
  • Ahora se usan los roles iniciales del usuario para determinar las políticas de fila; consulte #31080. #31262 (Vitaly Baranov).
  • Si se cambia alguna configuración obsoleta, se muestra una advertencia en system.warnings. #31252 (tavplubix).
  • Se mejoró el backoff de las tareas de limpieza en segundo plano de MergeTree. Los ajustes merge_tree_clear_old_temporary_directories_interval_seconds y merge_tree_clear_old_parts_interval_seconds pasaron de la configuración de usuario a la configuración de MergeTree. #31180 (tavplubix).
  • Ahora cada réplica enviará al cliente únicamente información incremental sobre los contadores de profile events. #31155 (Dmitry Novik). Esto hace que la opción --hardware_utilization de clickhouse-client sea útil.
  • Activar la edición multilínea en clickhouse-client de manera predeterminada. Esto soluciona #31121 . #31123 (Amos Bird).
  • Normalización de nombres de funciones para las consultas ALTER. Esto ayuda a evitar discrepancias en los metadatos entre crear tablas con índices/proyecciones y añadir índices/proyecciones mediante comandos ALTER. Este es un PR de seguimiento de https://github.com/ClickHouse/ClickHouse/pull/20174. Se clasifica como mejora, ya que no hay informes de errores y el escenario es poco frecuente. #31095 (Amos Bird).
  • Se admite el modificador IF EXISTS para la consulta RENAME DATABASE/TABLE/DICTIONARY. Si se usa esta directiva, no se producirá un error si no existe la DATABASE/TABLE/DICTIONARY que se va a renombrar. #31081 (victorgao).
  • Cancelar las fusiones verticales al eliminar una partición. Esto da continuidad a https://github.com/ClickHouse/ClickHouse/pull/25684 y https://github.com/ClickHouse/ClickHouse/pull/30996. #31057 (Amos Bird).
  • La sesión local dentro de una fuente de diccionario de ClickHouse ya no enviará sus eventos al log de sesión. Esto corrige un posible interbloqueo (alerta de TSan) durante el apagado. Además, este PR corrige la intermitencia de test_dictionaries_dependency_xml/. #31013 (Vitaly Baranov).
  • Menos bloqueos en el comando ALTER. #31010 (Amos Bird).
  • Se corrige la opción --verbose en el modo interactivo de clickhouse-local y se permite guardar el registro en un archivo. #30881 (Kseniia Sumarokova).
  • Se añadieron los comandos \l, \d y \c en clickhouse-client, como en MySQL y PostgreSQL. #30876 (Pavel Medvedev).
  • Para clickhouse-local o clickhouse-client: si la opción --interactive se usa con --query o --queries-file, primero ejecútelos como en modo no interactivo y luego inicie el modo interactivo. #30851 (Kseniia Sumarokova).
  • Corrige el posible error “El conjunto local de partes de X no coincide con el conjunto de partes en ZooKeeper” (si DROP falla al eliminar znodes de ZooKeeper). #30826 (Azat Khuzhin).
  • El formato Avro funciona con Kafka. Se añadió la opción de configuración output_format_avro_rows_in_file. #30351 (Ilya Golshtein).
  • Permite especificar uno o varios esquemas de PostgreSQL para una base de datos MaterializedPostgreSQL. Cierra #28901. Cierra #29324. #28933 (Kseniia Sumarokova).
  • Se cambiaron los puertos predeterminados para la comunicación interna de clickhouse-keeper de 44444 a 9234. Corrige #30879. #31799 (alesapin).
  • Se implementó la función transform con argumentos Decimal. #31839 (李帅).
  • Se corrige una terminación abrupta en el servidor de depuración y el error DB::Exception: std::out_of_range: basic_string en el servidor release cuando la URL de hdfs es incorrecta, añadiendo una comprobación adicional de la estructura de la URL de hdfs. #31042 (Kruglov Pavel).
  • Corrige un posible assert en la función de tabla/motor hdfs, y añade una prueba. #31036 (Kruglov Pavel).

Corrección de errores

  • Corrige los alias de GROUP BY / ORDER BY / LIMIT BY cuando están habilitados los argumentos posicionales. Cierra #31173. #31741 (Kseniia Sumarokova).
  • Se corrige el uso del motor de tabla Buffer con el tipo Map. Soluciona #30546. #31742 (Anton Popov).
  • Se corrige la lectura de tablas MergeTree con use_uncompressed_cache habilitado. #31826 (Anton Popov).
  • Se corrigió el comportamiento cuando las mutaciones que no tienen nada que hacer se quedaban atascadas (con la configuración empty_result_for_aggregation_by_empty_set habilitada). #32358 (Nikita Mikhaylov).
  • Se corrigió el problema por el que se omitían columnas al escribir protobuf. Este PR corrige #31160; véase el comentario #31160#issuecomment-980595318. #31988 (Vitaly Baranov).
  • Se corrigió un error al eliminar columnas innecesarias en una subconsulta. Si hay una función de agregación en una consulta sin GROUP BY, no debe eliminarse aunque parezca innecesaria. #32289 (dongyifeng).
  • No se alcanzó el límite de cuota, pero se superó el límite. Este PR corrige #31174. #31337 (sunny).
  • Se corrige SHOW GRANTS cuando se usan revocaciones parciales. Este PR corrige #31138. #31249 (Vitaly Baranov).
  • La cantidad de memoria se calculaba incorrectamente cuando ClickHouse se ejecutaba en contenedores con límites de cgroup. #31157 (Pavel Medvedev).
  • Se corrigen las consultas ALTER ... MATERIALIZE COLUMN ... en caso de que el tipo de datos de la expresión por defecto no coincida con el tipo de datos de la columna. #32348 (Anton Popov).
  • Se corrigió un fallo con SIGFPE en la función de agregación avgWeighted con un argumento Decimal. Corrige #32053. #32303 (tavplubix).
  • El servidor podía no iniciarse con el error Cannot attach 1 tables due to cyclic dependencies si la tabla Dictionary apuntaba a un diccionario XML con el mismo nombre; ya se ha corregido. Corrige #31315. #32288 (tavplubix).
  • Corregido un error de análisis sintáctico al deserializar NaN para Nullable(Float) con la regla de escape Quoted. #32190 (Kruglov Pavel).
  • Diccionarios XML: los identificadores usados en la consulta CREATE de la tabla pueden calificarse con default_database durante la actualización a una versión más reciente. Cierra #31963. #32187 (Maksim Kita).
  • El número de réplicas activas podía determinarse de forma incorrecta al insertar con quorum si la configuración replicated_can_become_leader está deshabilitada en algunas réplicas. Se ha corregido. #32157 (tavplubix).
  • Dictionaries: se corrigen los casos en los que {condition} no funciona para consultas personalizadas a la base de datos. #32117 (Maksim Kita).
  • Se corrige CAST desde Nullable con cast_keep_nullable (antes se producía el error PARAMETER_OUT_OF_BOUND, por ejemplo, con toUInt32OrDefault(toNullable(toUInt32(1)))). #32080 (Azat Khuzhin).
  • Se corrigió CREATE TABLE de Join Storage en algunos casos poco frecuentes. Cierra #31680. #32066 (SuperDJY).
  • Se corrigió el error Directory ... already exists and is not empty que se producía al desacoplar una parte. #32063 (tavplubix).
  • MaterializedMySQL (característica experimental): Corrige la interpretación errónea de los datos DECIMAL de MySQL. #31990 (Håvard Kvålen).
  • El motor FileLog (funcionalidad experimental) creaba innecesariamente un directorio de metadatos cuando fallaba la creación de la tabla. Corrección #31962. #31967 (flynn).
  • Algunas entradas GET_PART podrían quedar bloqueadas en la cola de replicación si una parte se pierde en todas las réplicas y no hay otras partes en la misma partición. Se ha corregido en los casos en que la clave de partición contiene solo columnas de tipo entero o Date[Time]. Corrige #31485. #31887 (tavplubix).
  • Se corrigen las funciones empty y notEmpty con argumentos de tipo UUID. Corrige #31819. #31883 (Anton Popov).
  • Cambiar la ruta de configuración de keeper_server.session_timeout_ms a keeper_server.coordination_settings.session_timeout_ms al crear un KeeperTCPHandler. Lo mismo con operation_timeout. #31859 (JackyWoo).
  • Corrige la conversión no válida del tipo Nullable cuando se usa una clave primaria Nullable. (La clave primaria Nullable es una funcionalidad desaconsejada; por favor, no la use). Esto corrige #31075. #31823 (Amos Bird).
  • Se corrige un fallo en una UDF recursiva en SQL. Cierra #30856. #31820 (Maksim Kita).
  • Corrige el fallo cuando se usa la función dictGet con tipo para un atributo de diccionario y el tipo es Nullable. Corrige #30980. #31800 (Maksim Kita).
  • Se corrige un fallo al obtener un resultado vacío en una consulta ODBC (con algunos controladores ODBC). Cierra #31465. #31766 (Kseniia Sumarokova).
  • Se corrigió la desactivación del perfilador de consultas (en caso de query_profiler_real_time_period_ns>0/query_profiler_cpu_time_period_ns>0, el perfilador de consultas podía seguir habilitado incluso después de finalizar la consulta). #31740 (Azat Khuzhin).
  • Se corrigió un segfault poco frecuente en consultas concurrentes ATTACH PARTITION. #31738 (tavplubix).
  • Se corrige una condición de carrera en el formato de salida JSONEachRowWithProgress cuando se mezclan en la salida datos y líneas de progreso. #31736 (Kruglov Pavel).
  • Se corrigió el error there are no such cluster here al ejecutar la consulta ON CLUSTER cuando el nombre del clúster especificado coincide con el de la base de datos Replicated. #31723 (tavplubix).
  • Se corrigió una excepción en algunas aplicaciones de la función decrypt sobre columnas Nullable. Esto cierra #31662. Esto cierra #31426. #31707 (alexey-milovidov).
  • Se corrigió la función ngrams cuando la cadena contiene caracteres UTF-8. #31706 (yandd).
  • Las configuraciones input_format_allow_errors_num e input_format_allow_errors_ratio no funcionaban para el análisis de tipos de dominio, como IPv4; ya se corrigió. Corrige #31686. #31697 (tavplubix).
  • Se corrigió una excepción de puntero NULL en MATERIALIZE COLUMN. #31679 (Nikolai Kochetov).
  • La consulta RENAME TABLE funcionaba de forma incorrecta al intentar cambiar el nombre de un diccionario DDL en la base de datos Ordinary; ya se ha corregido. #31638 (tavplubix).
  • Implementar la función de agregación sparkbar como estaba previsto; véase: #26175#issuecomment-960353867, comentario. #31624 (小路).
  • Corrige el JSON generado inválido cuando solo los nombres de las columnas contienen secuencias UTF-8 no válidas. #31534 (Kevin Michel).
  • Desactive partial_merge_join_left_table_buffer_bytes hasta que se corrija el error de esta optimización. Consulte #31009). Elimine la opción redundante partial_merge_join_optimizations. #31528 (Vladimir C).
  • Corrige el progreso en consultas INSERT SELECT cortas. #31510 (Azat Khuzhin).
  • Corrige el comportamiento erróneo de group by y los argumentos posicionales. Cierra #31280#issuecomment-968696186. #31420 (Kseniia Sumarokova).
  • Se corrige nullptr en el proveedor de credenciales STS para S3. #31409 (Vladimir Chebotarev).
  • Eliminar la función notLike del análisis de índices porque era incorrecta. #31169 (sundyli).
  • Se corrigió un error en Keeper que podía impedir el inicio cuando se habían perdido algunos logs de coordinación y había una instantánea más reciente que el último log. #31150 (alesapin).
  • Reescribe la tabla distribuida del lado derecho como un join local. resuelve #25809. #31105 (abel-cheng).
  • Se corrige la tabla Merge al usar alias y where (antes no funcionaba en absoluto). Cierra #28802. #31044 (Kseniia Sumarokova).
  • Se corrige JSON_VALUE/JSON_QUERY con identificadores entre comillas. Esto permite incluir espacios en la ruta JSON. Cierra #30971. #31003 (Kseniia Sumarokova).
  • El uso de la función formatRow con formatos no orientados a filas provocaba un segfault. Ya no se permite usar esta función con esos formatos (porque no tiene sentido). #31001 (Kruglov Pavel).
  • Corrige un error que hacía fallar las consultas SELECT si se ejecutaban después de eliminar una vista materializada. Detectado en #30691. #30997 (Kseniia Sumarokova).
  • Omitir la comprobación de max_partition_size_to_drop en el caso de ATTACH PARTITION … FROM y MOVE PARTITION … #30995 (Amr Alaa).
  • Corrige algunos casos extremos con los operadores INTERSECT y EXCEPT. Cierra #30803. #30965 (Kseniia Sumarokova).

Mejoras de compilación/pruebas/empaquetado

  • Se corrige un resultado de filtrado incorrecto en compilaciones no x86. Esto cierra #31417. Esto cierra #31524. #31574 (alexey-milovidov).
  • Hacer que la compilación de ClickHouse sea totalmente reproducible (idéntica byte a byte en distintas máquinas). Esto cierra #22113. #31899 (alexey-milovidov). Eliminar de los binarios la ruta del filesystem al directorio de compilación para permitir compilaciones reproducibles. Esto era necesario para #22113. #31838 (alexey-milovidov).
  • Usar nuestros propios CMakeLists para zlib-ng, cassandra, mariadb-connector-c, xz, re2, sentry, gsasl, arrow y protobuf. Esto es necesario para #20151. Parte de #9226. Un pequeño paso hacia la eliminación de basura molesta del sistema de compilación. #30599 (alexey-milovidov).
  • Compilaciones herméticas: usar una versión fija de libc y asegurarse de que no se use ningún archivo fuente ni binario del SO anfitrión durante la compilación. Esto cierra #27133. Esto cierra #21435. Esto cierra #30462. #30011 (alexey-milovidov).
  • Se añade la función getFuzzerData() para aplicar fuzzing fácilmente a funciones concretas. Esto cierra #23227. #27526 (Alexey Boykov).
  • Configuración más correcta de las capabilities dentro de Docker. #31802 (Constantine Peresypkin).
  • Habilitar las opciones de compilación de clang -fstrict-vtable-pointers, -fwhole-program-vtables. #20151 (Maksim Kita).
  • Evitar descargar tarballs de la toolchain para compilación cruzada en FreeBSD. #31672 (alexey-milovidov).
  • Compatibilidad inicial con risc-v. Consulte development/build-cross-riscv para ver las particularidades y el comando de compilación que se ha probado. #31309 (Vladimir Smirnov).
  • Compatibilidad con la compilación en una máquina arm con el parámetro “-DENABLE_TESTS=OFF”. #31007 (zhanghuajie).

Lanzamiento de ClickHouse v21.11, 2021-11-09. Presentación, Vídeo

Cambio incompatible con versiones anteriores

  • Se cambia el orden de los argumentos json_path y json en las funciones SQL/JSON (para mantener la coherencia con el estándar). Cierra #30449. #30474 (Kseniia Sumarokova).
  • Se elimina la configuración de tabla write_final_mark de MergeTree. A partir de ahora, siempre será true. #30455 (Kseniia Sumarokova). No se requiere ninguna acción; todas las tablas son compatibles con la nueva versión.
  • Se elimina la función bayesAB. Se agradecerá ayuda para recuperar esta función, actualizada. Esto cierra #26233. #29934 (alexey-milovidov).
  • Esto solo es relevante si ya ha empezado a usar el soporte experimental de clickhouse-keeper. Ahora, los snapshots de ClickHouse Keeper se comprimen con el códec ZSTD de forma predeterminada, en lugar de usar la compresión personalizada de bloques LZ4 de ClickHouse. Este comportamiento se puede desactivar con la configuración de coordination compress_snapshots_with_zstd_format (debe ser igual en todas las réplicas del quórum). Esta incompatibilidad con versiones anteriores es bastante poco frecuente y solo puede producirse cuando un nodo nuevo envía un snapshot (esto ocurre en caso de recuperación) a un nodo antiguo que no puede leer snapshots en formato ZSTD. #29417 (alesapin).

Nueva característica

  • El nuevo modo INSERT asíncrono permite acumular los datos insertados y almacenarlos en un único lote en segundo plano. En el cliente, se puede habilitar estableciendo async_insert para consultas INSERT con datos incluidos en la propia consulta o en un búfer independiente (p. ej., para consultas INSERT a través del protocolo HTTP). Si wait_for_async_insert es true (de forma predeterminada), el cliente esperará hasta que los datos se escriban en la tabla. En el servidor, se controla mediante los parámetros async_insert_threads, async_insert_max_data_size y async_insert_busy_timeout_ms. Implementa #18282. #27537 (Anton Popov). #20557 (Ivan). Notas sobre el rendimiento: con inserts asíncronos, se pueden realizar hasta unas 10 000 consultas INSERT individuales por segundo, por lo que se sigue recomendando insertar en lotes si desea alcanzar un rendimiento de hasta millones de filas insertadas por segundo.
  • Se añade el modo interactivo para clickhouse-local. Así, puede ejecutar simplemente clickhouse-local para obtener una interfaz de línea de comandos de ClickHouse sin conectarse a un servidor y procesar datos desde archivos y orígenes de datos externos. También se unifica el código de clickhouse-client y clickhouse-local. Cierra #7203. Cierra #25516. Cierra #22401. #26231 (Kseniia Sumarokova).
  • Se añadió compatibilidad con funciones definidas por el usuario ejecutables (scriptables). Se trata de UDFs que pueden escribirse en cualquier lenguaje de programación. #28803 (Maksim Kita).
  • Permitir conexiones predefinidas a fuentes de datos externas. Esto permite evitar especificar credenciales o direcciones al usar fuentes de datos externas, ya que se puede hacer referencia a ellas por nombre. Cierra #28367. #28577 (Kseniia Sumarokova).
  • Se añadió la base de datos INFORMATION_SCHEMA, con las vistas SCHEMATA, TABLES, VIEWS y COLUMNS, sobre las tablas correspondientes de la base de datos system. Cierra #9770. #28691 (tavplubix).
  • Se admite EXISTS (subquery). Cierra #6852. #29731 (Kseniia Sumarokova).
  • Registro de sesiones para auditoría. Registro de todos los eventos de inicio y cierre de sesión exitosos y fallidos en una nueva tabla system.session_log. #22415 (Vasily Nemkov) (Vitaly Baranov).
  • Compatibilidad con funciones multidimensionales de distancia de coseno y distancia euclidiana; distancias y normas L1, L2, Lp y Linf. Producto escalar en tuplas y diversos operadores aritméticos en tuplas. Esto resuelve por completo #4509 y más. #27933 (Alexey Boykov).
  • Se añade soporte para la compresión y descompresión en INTO OUTFILE y FROM INFILE (con autodetección o con un parámetro opcional adicional). #27135 (Filatenkov Artur).
  • Se agregó compatibilidad con CORS (intercambio de recursos entre distintos orígenes) mediante la solicitud HTTP OPTIONS. Esto significa que ahora Grafana funcionará con solicitudes serverless sin recurrir a apaños. Cierra #18693. #29155 (Filatenkov Artur).
  • Las consultas con JOIN ON ahora admiten condiciones disyuntivas (OR). #21320 (Ilya Golshtein).
  • Se añadió la función tokens. Esto permite dividir una cadena en tokens usando caracteres ASCII no alfanuméricos como separadores. #29981 (Maksim Kita). Se añadió la función ngrams para extraer ngrams de texto. Cierra #29699. #29738 (Maksim Kita).
  • Se añaden funciones para la normalización de Unicode: normalizeUTF8NFC, normalizeUTF8NFD, normalizeUTF8NFKC, normalizeUTF8NFKD. #28633 (darkkeks).
  • Consumo en streaming de archivos de logs de aplicaciones en ClickHouse con el motor de tabla FileLog. Es como el motor Kafka o RabbitMQ, pero para logs de solo anexado y rotados en el sistema de archivos local. Cierra #6953. #25969 (flynn) (Kseniia Sumarokova).
  • Se añade el formato de salida CapnProto y se refactoriza el formato de entrada CapnProto. #29291 (Kruglov Pavel).
  • Permite escribir números en una consulta como literales binarios. Ejemplo: SELECT 0b001;. #29304 (Maksim Kita).
  • Se añadió el tipo de diccionario hashed_array. Ahorra memoria al usar diccionarios con múltiples atributos. Cierra #30236. #30242 (Maksim Kita).
  • Se ha añadido la función JSONExtractKeys. #30056 (Vitaly).
  • Se añade una función getOSKernelVersion: devuelve una cadena con la versión del kernel del sistema operativo. #29755 (Memo).
  • Se añadieron las funciones MD4 y SHA384. MD4 es una función hash obsoleta e insegura; solo puede usarse en casos excepcionales en los que ya se utilice MD4 en algún sistema heredado y sea necesario obtener exactamente el mismo resultado. #29602 (Nikita Tikhomirov).
  • HSTS puede activarse en el servidor HTTP de ClickHouse configurando hsts_max_age en el archivo de configuración con un valor positivo. #29516 (凌涛).
  • Soporte para almacenamiento OBS de Huawei. Cierra #24294. #29511 (kevin wan).
  • Nueva función mapContainsKeyLike para obtener el map cuya key coincide con una expresión regular simple. #29471 (凌涛). Nueva función mapExtractKeyLike para obtener el map que solo conserva los elementos que coinciden con el patrón especificado. #30793 (凌涛).
  • Se implementó ALTER TABLE x MODIFY COMMENT. #29264 (Vasily Nemkov).
  • Añade funciones de inspección de H3 que no están en ClickHouse, pero sí están disponibles a través de la API de H3: https://h3geo.org/docs/api/inspection. #29209 (Bharat Nallan).
  • Permitir operaciones ALTER TABLE FETCH y ATTACH no replicadas en bases de datos Replicated. #29202 (Kevin Michel).
  • Se añadió la configuración output_format_csv_null_representation: es igual que output_format_tsv_null_representation, pero para la salida en CSV. #29123 (PHO).
  • Se añadió la función zookeeperSessionUptime(), que devuelve el tiempo de actividad de la sesión actual de ZooKeeper en segundos. #28983 (tavplubix).
  • Implementa la función h3ToGeoBoundary. #28952 (Ivan Veselov).
  • Se ha añadido la función de agregación exponentialMovingAverage, que puede usarse como función de ventana. Esto cierra #27511. #28914 (alexey-milovidov).
  • Permite incluir las subcolumnas de las columnas de la tabla en el resultado de la consulta DESCRIBE (se puede habilitar mediante la opción describe_include_subcolumns). #28905 (Anton Popov).
  • Executable, ExecutablePool añadieron la opción send_chunk_header. Si esta opción es true, se enviará al cliente rows&#95;count del fragmento, seguido de un salto de línea, antes del fragmento. #28833 (Maksim Kita).
  • tokenbf_v1 y ngram admiten Map con clave de tipo String de tipo FixedSring. Mejora la omisión de datos en consultas con filtros por clave de Map. sql CREATE TABLE map_tokenbf ( row_id UInt32, map Map(String, String), INDEX map_tokenbf map TYPE ngrambf_v1(4,256,2,0) GRANULARITY 1 ) Engine=MergeTree() Order by id Con la tabla anterior, la consulta select * from map_tokebf where map['K']='V' omitirá el gránulo que no contenga la clave A. Por supuesto, cuántas filas se omitirán depende de la granularity y de la index_granularity que configures. #28511 (凌涛).
  • Enviar eventos de perfil del servidor al cliente. Se introdujo un nuevo tipo de paquete ProfileEvents. Cierra #26177. #28364 (Dmitry Novik).
  • Operaciones de desplazamiento de bits en los tipos de datos FixedString y String. Esto cierra #27763. #28325 (小路).
  • Se admite añadir o eliminar tablas de la replicación desde PostgreSQL de forma dinámica en el motor de base de datos MaterializedPostgreSQL. Se admite ALTER para la configuración de la base de datos. Cierra #27573. #28301 (Kseniia Sumarokova).
  • Se añadió la función accurateCastOrDefault(x, T). Cierra #21330. Autor: @taiyang-li. #23028 (Maksim Kita).
  • Se añade la función toUUIDOrDefault, toUInt8/16/32/64/256OrDefault, toInt8/16/32/64/128/256OrDefault, que permite al usuario definir un valor predeterminado (no nulo) cuando falla el análisis de la cadena. #21330 (taiyang-li).

Mejora del rendimiento

  • Las fusiones en segundo plano pueden interrumpirse entre sí y se programan con las prioridades adecuadas. Ahora, las fusiones de larga duración no impedirán que las fusiones cortas avancen. Esto es necesario para mejorar la planificación y el control de la ejecución de las fusiones. Reduce la probabilidad de que se produzca el error “too many parts”. #22381. #25165 (Nikita Mikhaylov). Se añadió la capacidad de ejecutar más fusiones y mutaciones que el número de hilos del background pool. Las fusiones y mutaciones se ejecutarán paso a paso según su tamaño (cuanto menor sea el tamaño, mayor será la prioridad). La proporción entre el número de tareas y los hilos de ejecución se controla mediante la configuración background_merges_mutations_concurrency_ratio, 2 de forma predeterminada. #29140 (Nikita Mikhaylov).
  • Permite usar lecturas asíncronas en sistemas de archivos remotos. Reduce el número de reposicionamientos al leer desde sistemas de archivos remotos. Esto mejora enormemente el rendimiento y hace que los discos experimentales web y s3 funcionen más rápido que EBS en determinadas condiciones. #29205 (Kseniia Sumarokova). Mientras tanto, el tipo de disco web (conjunto de datos estático alojado en un servidor web) deja de ser experimental y pasa a ser apto para producción.
  • Las consultas con INTO OUTFILE en clickhouse-client utilizarán varios hilos. Se corrige el problema del parpadeo de la barra de progreso al usar INTO OUTFILE. Esto cierra #30873. Esto cierra #30872. #30886 (alexey-milovidov).
  • Reducir la cantidad de datos comprimidos redundantes leídos del disco en algunos tipos de consultas SELECT (solo para la familia de motores MergeTree). #30111 (alesapin).
  • Se eliminaron algunas llamadas redundantes a seek al leer bloques comprimidos en la familia de motores de tabla MergeTree. #29766 (alesapin).
  • Permitir que la función de tabla url procese varias URL en paralelo. Esto cierra #29670 y #29671. #29673 (alexey-milovidov).
  • Mejora del rendimiento de la agregación siguiendo el orden de la clave primaria (con la opción optimize_aggregation_in_order habilitada). #30266 (Anton Popov).
  • Ahora ClickHouse usa la caché de DNS al comunicarse con S3 externo. #29999 (alesapin).
  • Se añade soporte para el pushdown de IS NULL/IS NOT NULL a bases de datos externas (es decir, MySQL). #29463 (Azat Khuzhin). Se convierten isNull/isNotNull en IS NULL/IS NOT NULL (para bases de datos externas, es decir, MySQL). #29446 (Azat Khuzhin).
  • Las consultas SELECT en tablas de Diccionario utilizarán múltiples hilos. #30500 (Maksim Kita).
  • Mejora del rendimiento del filtrado (operación WHERE) en columnas Decimal. #30431 (Jun Jin).
  • Se eliminó el código con ramificaciones en la operación de filtrado mediante una mejor implementación con popcnt/ctz, que ofrece un mejor rendimiento. #29881 (Jun Jin).
  • Se ha mejorado el generador de máscaras de bytes para filtros (utilizado en el operador WHERE), unificándolo todo en una sola función con instrucciones SSE/AVX2/AVX512. Tenga en cuenta que, de forma predeterminada, ClickHouse solo utiliza SSE, por lo que esto solo es relevante para compilaciones personalizadas. #30014 (jasperzhu). #30670 (jasperzhu).
  • Mejora el rendimiento de la función de agregación SUM para números Nullable de coma flotante. #28906 (Raúl Marín).
  • Acelera el proceso de carga de partes cuando se utilizan varios discos. La idea es similar a https://github.com/ClickHouse/ClickHouse/pull/16423 . En producción se observa una mejora: 24 min -> 16 min . #28363 (Amos Bird).
  • Reducir el tamaño predeterminado de las partes en la carga multiparte de S3 para disminuir el uso de memoria. #28679 (ianton-ru).
  • Se aceleró la función bitmapAnd. #28332 (dddounaiking).
  • Se eliminaron las notificaciones de mutación poco óptimas en StorageMergeTree cuando los merges aún estaban en curso. #27552 (Vladimir Chebotarev).
  • Mejora del rendimiento de la comparación de cadenas. #28767 (alexey-milovidov).
  • El índice de clave primaria y el filtro de partición pueden funcionar con tuplas. #29281 (凌涛).
  • Si una consulta tiene varias funciones de agregado quantile con los mismos argumentos pero con distinto parámetro de nivel, se fusionarán y se ejecutarán en una sola pasada si la configuración optimize_syntax_fuse_functions está habilitada. #26657 (hexiaoting).
  • Ahora, la agregación min-max sobre la primera expresión de la clave primaria se optimiza mediante una proyección. Esto es para #329. #29918 (Amos Bird).

Funcionalidad experimental

  • Se añadió la posibilidad de cambiar la configuración de los nodos (en el archivo .xml) para ClickHouse Keeper. #30372 (alesapin).
  • Se añadió la función de agregación sparkbar. Esto cierra #26175. #27481 (小路). Nota: esta función tiene un defecto; su comportamiento cambiará en versiones futuras.

Mejora

  • Permite al usuario cambiar los niveles de registro sin reiniciar. #29586 (Nikolay Degterinsky).
  • Varias mejoras para las UDF de SQL. Las consultas para manipular funciones SQL definidas por el usuario ahora admiten la cláusula ON CLUSTER. Ejemplo CREATE FUNCTION test_function ON CLUSTER 'cluster' AS x -> x + 1;. Cierra #30666. #30734 (Maksim Kita). Se admiten las sintaxis CREATE OR REPLACE y CREATE IF NOT EXISTS. #30454 (Maksim Kita). Se añadió compatibilidad con DROP IF EXISTS. Ejemplo DROP FUNCTION IF EXISTS test_function. #30437 (Maksim Kita). Se admiten lambdas. Ejemplo CREATE FUNCTION lambda_function AS x -> arrayMap(element -> element * 2, x);. #30435 (Maksim Kita). Se admiten funciones SQL definidas por el usuario para clickhouse-local. #30179 (Maksim Kita).
  • Se habilitó globalmente el perfilador de memoria por consulta (establecido en memory_profiler_step = 4MiB). #29455 (Azat Khuzhin).
  • Se añadieron las columnas data_compressed_bytes, data_uncompressed_bytes, marks_bytes en system.data_skipping_indices. Se añadieron las columnas secondary_indices_compressed_bytes, secondary_indices_uncompressed_bytes, secondary_indices_marks_bytes en system.parts. Cierra #29697. #29896 (Maksim Kita).
  • Añadir el alias table a system.tables y el alias database a system.databases #29677. #29882 (kevin wan).
  • Resuelve correctamente las interdependencias entre tablas al iniciar el servidor. Cierra #8004, cierra #15170. #28373 (tavplubix).
  • Se evita el error “Division by zero” cuando el denominador es Nullable en las funciones divide, intDiv y modulo. Cierra #22621. #28352 (Kruglov Pavel).
  • Permite interpretar valores del tipo de dato Date en formatos de texto como YYYYMMDD, además de YYYY-MM-DD. Esto cierra #30870. #30871 (alexey-milovidov).
  • UI web: mostrar barras en celdas de tabla. #29792 (alexey-milovidov).
  • Ahora se pueden crear diccionarios con comentarios: CREATE DICTIONARY ... COMMENT 'vaue'#29899 (Vasily Nemkov). Ahora también se pueden establecer comentarios en la base de datos en la sentencia CREATE DATABASE#29429 (Vasily Nemkov).
  • Se introduce la configuración compiled_expression_cache_elements_size. Si alguna vez necesita usar esta configuración, ya sabrá para qué sirve. #30667 (Maksim Kita).
  • clickhouse-format ahora admite la opción --query. En versiones anteriores, había que pasar la consulta a stdin. #29325 (凌涛).
  • Se admite ALTER TABLE en tablas de bases de datos Memory. Las bases de datos Memory se utilizan en clickhouse-local. #30866 (tavplubix).
  • Ahora se admiten arrays de todos los tipos serializables en arrayStringConcat. #30840 (Nickita Taranov).
  • ClickHouse ahora tendrá en cuenta las limitaciones de docker/cgroups para determinar la cantidad de memoria del sistema. Véase #25662. #30574 (Pavel Medvedev).
  • La estructura de tabla obtenida para la base de datos PostgreSQL es ahora más fiable. #30477 (Kseniia Sumarokova).
  • Soporte completo para argumentos posicionales en GROUP BY y ORDER BY. #30433 (Kseniia Sumarokova).
  • Permite extraer como cadena un elemento que no es de tipo String usando JSONExtractString. Esto es para pull/25452#issuecomment-927123287. #30426 (Amos Bird).
  • Se añadió la posibilidad de usar la cláusula FINAL en consultas SELECT desde GraphiteMergeTree. #30360 (Nikita Mikhaylov).
  • Mejoras menores en la clonación de réplicas y en la puesta en cola de la obtención de partes dañadas, que deberían evitar que las entradas GET_PART de la cola de replicación queden colgadas en casos extremadamente raros. #30346 (tavplubix).
  • Permitir enlaces simbólicos a archivos del directorio user_files para la función de tabla file. #30309 (Kseniia Sumarokova).
  • Se corrigió la comparación entre Date32 y Date, DateTime, DateTime64 y String. #30219 (liang.huang).
  • Se permite quitar la expresión SAMPLE BY de las tablas MergeTree (ALTER TABLE <table> REMOVE SAMPLE BY). #30180 (Anton Popov).
  • Ahora Keeper (como parte de clickhouse-server) se iniciará de forma asíncrona si logra conectarse a algún otro nodo. #30170 (alesapin).
  • Ahora clickhouse-client admite la edición multilínea nativa. #30143 (Amos Bird).
  • Los diccionarios polygon (geocodificación inversa): se añadió compatibilidad para leer el contenido del diccionario mediante el método de consulta SELECT si store_polygon_key_column = true. Cierra #30090. #30142 (Maksim Kita).
  • Añadir el logotipo de ClickHouse a la UI de Play. #29674 (alexey-milovidov).
  • Mensaje de excepción mejorado al leer una columna en formatos compatibles con Arrow como Arrow, ArrowStream, Parquet y ORC. Esto cierra #29926. #29927 (alexey-milovidov).
  • Se corrigió una condición de carrera entre el vaciado y el arranque en las tablas Buffer. Esto puede darse en las pruebas. #29930 (Azat Khuzhin).
  • Se corrige lock-order-inversion entre DROP TABLE en DatabaseMemory y LiveView. Live View es una función experimental. La base de datos Memory se usa en clickhouse-local. #29929 (Azat Khuzhin).
  • Se corrigió la inversión en el orden de bloqueo entre la recarga periódica del Diccionario y la recarga de la configuración. #29928 (Azat Khuzhin).
  • Actualizados los archivos de zoneinfo a 2021c. #29925 (alexey-milovidov).
  • Se añadió la posibilidad de configurar reintentos y los retrasos entre ellos para clickhouse-copier. #29921 (Azat Khuzhin).
  • Añade la configuración del servidor shutdown_wait_unfinished_queries para permitir esperar a que las consultas en ejecución finalicen durante un tiempo máximo de shutdown_wait_unfinished. Esto corresponde a #24451. #29914 (Amos Bird).
  • Se añade la capacidad de rastrear el uso máximo de memoria (con el nuevo trace_type en system.trace_log: MemoryPeak). #29858 (Azat Khuzhin).
  • Tablas foráneas de PostgreSQL: Se añadió el prefijo de tabla particionada ‘p’ a la consulta para obtener el índice de replica identity. #29828 (Shoh Jahon).
  • Aplicar max_untracked_memory/memory_profiler_step/memory_profiler_sample_probability durante mutate/merge para generar perfiles del uso de memoria durante las fusiones. #29681 (Azat Khuzhin).
  • Ofuscador de consultas: clickhouse-format --obfuscate ahora admite más tipos de consultas. #29672 (alexey-milovidov).
  • Se solucionó el problema: clickhouse-format --obfuscate no podía procesar consultas con diccionarios embebidos (funciones regionTo...). #29667 (alexey-milovidov).
  • Corrige el manejo incorrecto de Nullable en las funciones JSON. Esto corrige #29615 . Se considera una mejora porque https://github.com/ClickHouse/ClickHouse/pull/28012 aún no se ha lanzado. #29659 (Amos Bird).
  • Aumenta listen_backlog de forma predeterminada (para ajustarlo al valor predeterminado de las versiones más recientes del kernel de Linux). #29643 (Azat Khuzhin).
  • Recarga los diccionarios, los modelos y las funciones ejecutables definidas por el usuario si cambia la configuración del servidor dictionaries_config, models_config, user_defined_executable_functions_config. Cierra #28142. #29529 (Maksim Kita).
  • Se elimina la restricción innecesaria sobre el nombre de la proyección. Ahora el nombre de la proyección puede empezar por tmp_. #29520 (Amos Bird).
  • Se corrigió el error There is no query or query context has expired en las mutaciones con subconsultas anidadas. No se permiten subconsultas en una mutación si la tabla está replicada y la configuración allow_nondeterministic_mutations está deshabilitada. #29495 (tavplubix).
  • Aplicar cambios de configuración a max_concurrent_queries en tiempo de ejecución (no es necesario reiniciar). #29414 (Raúl Marín).
  • Se añadió la opción use_skip_indexes. #29405 (Maksim Kita).
  • Se añadió compatibilidad con FREEZE para las partes en memoria (para copias de seguridad). #29376 (Mo Xuan).
  • Propagar el query&#95;id inicial para clickhouse-benchmark (anteriormente, si se ejecutaba una consulta remota mediante clickhouse-benchmark, las consultas en los segmentos no quedaban vinculadas a la consulta inicial mediante initial_query_id). #29364 (Azat Khuzhin).
  • Índices de omisión tokenbf_v1 y ngrambf_v1: se añadió compatibilidad con el tipo de dato Array con claves de tipo String y FixedString. #29280 (Maksim Kita). Los índices de omisión tokenbf_v1 y ngrambf_v1 añadieron compatibilidad con el tipo de dato Map con claves de tipo String y FixedString. Autor @lingtaolf. #29220 (Maksim Kita).
  • Función has: se añadió compatibilidad con el tipo de datos Map. #29267 (Maksim Kita).
  • Añade la configuración compress_logs de clickhouse-keeper, que permite comprimir los logs de clickhouse-keeper (de la máquina de estados replicada) en ZSTD. Implementa: #26977. #29223 (alesapin).
  • Se añade una configuración, external_table_strict_query: forzará el envío de toda la expresión WHERE en las consultas a bases de datos externas, incluso si es incompatible. #29206 (Azat Khuzhin).
  • Deshabilitar las proyecciones cuando se use ARRAY JOIN. En versiones anteriores, el análisis de proyecciones podía afectar a los alias en ARRAY JOIN. #29139 (Amos Bird).
  • Se admiten más tipos en el formato de entrada/salida MsgPack. #29077 (Kruglov Pavel).
  • Permite la lectura y escritura de columnas LowCardinality en el formato de entrada/salida ORC. #29062 (Kruglov Pavel).
  • Una consulta a system.distributed_ddl_queue podría mostrar valores incorrectos; ya está corregido. #29061 (tavplubix).
  • Comportamiento correcto ante métodos desconocidos en la conexión HTTP. Resuelve #29050. #29057 (Filatenkov Artur).
  • clickhouse-keeper: Se corrige un error en clickhouse-keeper-converter que puede provocar cierta pérdida de datos al restaurar desde los logs de ZooKeeper (no desde un snapshot). #29030 (小路). Se corrige un error en clickhouse-keeper-converter que puede provocar una deserialización incorrecta de los logs de ZooKeeper. #29071 (小路).
  • Aplicar la configuración de las consultas CREATE ... AS SELECT (soluciona: #28810). #28962 (Azat Khuzhin).
  • Respetar la configuración predeterminada de la base de datos en ALTER TABLE … ON CLUSTER … REPLACE/MOVE PARTITION FROM/TO … #28955 (anneji-dev).
  • Protocolo gRPC: permitir cambiar desde el cliente la compresión en el servidor. #28953 (Vitaly Baranov).
  • Ignorar la excepción “no data” al leer sensores térmicos para métricas asíncronas. Esto cierra #28852. #28882 (alexey-milovidov).
  • Se corrigió una condición de carrera lógica que, en raras ocasiones, podía provocar el error Dictionary not found en un diccionario existente. #28853 (tavplubix).
  • Relajar la comprobación del combinador If para funciones anidadas (pero prohibir combinadores idénticos anidados). #28828 (Azat Khuzhin).
  • Se corrige una posible excepción sin capturar al finalizar el servidor. #28761 (Azat Khuzhin).
  • Prohibir la limpieza de directorios tmp que pueda usar una mutation/merge activa si la mutation/merge dura un tiempo extraordinariamente largo. #28760 (Azat Khuzhin).
  • Se permite la optimización optimize_arithmetic_operations_in_aggregate_functions = 1 cuando se usa un alias. #28746 (Amos Bird).
  • Implementa la configuración detach_not_byte_identical_parts para ReplicatedMergeTree, que desacoplará, en lugar de eliminar, las partes no idénticas byte a byte (después de merge/mutate). #28708 (Azat Khuzhin).
  • Se implementa la configuración max_suspicious_broken_parts_bytes para MergeTree (para limitar el tamaño total de todas las partes dañadas; el valor predeterminado es 1GiB). #28707 (Azat Khuzhin).
  • Se habilita la expansión de macros en los ajustes de la tabla RabbitMQ. #28683 (Vitaly Baranov).
  • Se restablece la capacidad de leer datos de una tabla con el motor Log en varios hilos. #28125 (Vitaly Baranov).
  • Corrige el manejo incorrecto de la columna NULL en las funciones JSON. Esto corrige #27930. #28012 (Amos Bird).
  • Permite establecer el tamaño de la caché Mark/Uncompressed para los índices de omisión por separado del de las columnas. #27961 (Amos Bird).
  • Permitir usar JOIN con USING junto con otros tipos de JOIN. #23881 (darkkeks).
  • Se actualizó el submódulo aws-sdk por el throttling en Yandex Cloud S3. #30646 (ianton-ru).
  • Corregida la liberación del ID de consulta y del ID de sesión al final del procesamiento de la consulta al gestionar una llamada gRPC. #29954 (Vitaly Baranov).
  • Se corrigió el apagado de AccessControlManager para solucionar una prueba intermitente. #29951 (Vitaly Baranov).
  • Corrige una aserción fallida al leer desde HDFS. Actualiza la biblioteca libhdfs3 para que pueda ejecutarse en pruebas en modo de depuración. Cierra #29251. Cierra #27814. #29276 (Kseniia Sumarokova).

Mejora de compilación/pruebas/empaquetado

  • Se añadió compatibilidad con compilaciones de FreeBSD para máquinas Aarch64. #29952 (MikaelUrankar).
  • Los submódulos recursivos ya no son necesarios para ClickHouse. #30315 (alexey-milovidov).
  • ClickHouse ahora puede compilarse estáticamente con Musl. Esto se añade como experimento; no admite la compilación de odbc-bridge, library-bridge, la integración con CatBoost ni algunas bibliotecas. #30248 (alexey-milovidov).
  • Se habilitan Protobuf, Arrow, ORC y Parquet para compilaciones de AArch64 y Darwin (MacOS). Esto cierra #29248. Esto cierra #28018. #30015 (alexey-milovidov).
  • Se añade compilación cruzada para PowerPC (powerpc64le). Esto cierra #9589. Se habilita la interacción con MySQL para AArch64 y PowerPC. Esto cierra #26301. #30010 (alexey-milovidov).
  • Se dejan solo los archivos necesarios en las toolchains de compilación cruzada. Se incluyen como submódulos (antes se descargaban como archivos tar). #29974 (alexey-milovidov).
  • Se implementó en ClickHouse un enfoque de fuzzing basado en la estructura para el parser de sentencias select. #30012 (Paul).
  • Se activa el evaluador experimental de expresiones constexpr para clang para acelerar la compilación de código de plantillas. #29668 (myrrc).
  • Se añade la capacidad de compilar con una versión más reciente de glibc sin usar símbolos nuevos. #29594 (Azat Khuzhin).
  • Se reduce el tamaño del binario de la compilación Debug mediante una opción de optimización de clang. #28736 (flynn).
  • Ahora todas las imágenes para CI se alojarán en un repositorio independiente de Docker Hub. #28656 (alesapin).
  • Se mejora la compatibilidad con compilaciones con clang-13. #28046 (Sergei Semin).
  • Se añade la capacidad de imprimir profile events sin procesar en clickhouse-client (esto puede ser útil para debugging y pruebas). #30064 (Azat Khuzhin).
  • Se añade una dependencia temporal para la unidad de clickhouse-server (init de systemd y sysvinit). #28891 (Azat Khuzhin).
  • Se recarga la caché de stacktrace cuando se vuelve a cargar el símbolo. #28137 (Amos Bird).

Corrección de errores

  • Las funciones para la búsqueda sin distinción entre mayúsculas y minúsculas en cadenas UTF-8, como positionCaseInsensitiveUTF8 y countSubstringsCaseInsensitiveUTF8, podían encontrar subcadenas que en realidad no coincidían en casos muy poco frecuentes; ya se ha corregido. #30663 (tavplubix).
  • Se corrigió la lectura de un archivo vacío en un disco cifrado. #30494 (Vitaly Baranov).
  • Se corrigió la transformación de la cadena de disyunciones a IN (controlada por el ajuste optimize_min_equality_disjunction_chain_length) en consultas distribuidas con el ajuste legacy_column_name_of_tuple_literal = 0. #28658 (Anton Popov).
  • Permitir el uso de una columna materializada como clave de fragmentación en una tabla distribuida incluso si insert_allow_materialized_columns=0:. #28637 (Vitaly Baranov).
  • Corregido ORDER BY ... WITH FILL cuando TO y FROM están establecidos y no hay filas en el conjunto de resultados. #30888 (Anton Popov).
  • Se corrigió un problema por el que el índice set no se usaba en expresiones AND/OR cuando había más de dos operandos. Esto corrige #30416 . #30887 (Amos Bird).
  • Se corrige un fallo al materializar una proyección con una función de hash. Esto corrige #30861. El problema es similar a https://github.com/ClickHouse/ClickHouse/pull/28560 y se debe a una comprensión inadecuada de la invariante de que la cabecera esté vacía. #30877 (Amos Bird).
  • Se corrigió la ambigüedad al extraer el nombre auxiliar de ZooKeeper de la ruta de ZooKeeper en ReplicatedMergeTree. Anteriormente, el servidor podía no iniciarse con Unknown auxiliary ZooKeeper name si la ruta de ZooKeeper contenía dos puntos. Corrige #29052. Además, antes se permitía especificar una ruta de ZooKeeper que no comenzara con una barra, pero ahora está obsoleto y no se permite crear tablas nuevas con esa ruta. Tampoco se permiten barras ni dos puntos en los nombres auxiliares de ZooKeeper. #30822 (tavplubix).
  • Se limpia el directorio temporal cuando localBackup falla por algún motivo. #30797 (ianton-ru).
  • Se corrigió una condición de carrera entre REPLACE/MOVE PARTITION y la fusión en segundo plano en MergeTree no replicado, que podía hacer que parte de los datos movidos o reemplazados permaneciera en la partición. Corrige #29327. #30717 (tavplubix).
  • Se corrige PREWHERE por WHERE en caso de que PREWHERE sea siempre verdadero. #30668 (Azat Khuzhin).
  • La optimización de push down de LIMIT podía causar el error Cannot find column. Corrige #30438. #30562 (Nikolai Kochetov).
  • Agregar los paréntesis que faltan para las reescrituras de isNotNull/isNull a IS [NOT] NULL (corrige consultas con expresiones como isNotNull(1)+isNotNull(2)). #30520 (Azat Khuzhin).
  • Se corrigió un interbloqueo en ALTER con una subconsulta escalar sobre la misma tabla, cierra #30461. #30492 (Vladimir C).
  • Se corrigió un segfault que podía producirse si la sesión expiraba durante la ejecución de REPLACE PARTITION. #30432 (tavplubix).
  • Las consultas con una condición como IN (subquery) podían devolver resultados incorrectos cuando se aplicaba una proyección agregada. Se corrigió la creación de conjuntos para las proyecciones. #30310 (Amos Bird).
  • Corrige la resolución de alias de columnas en las consultas JOIN cuando la proyección está habilitada. Esto corrige #30146. #30293 (Amos Bird).
  • Se corrigió una deficiencia en la función replaceRegexpAll. #30292 (Memo).
  • Corrige el análisis de la opción preallocate en la configuración del layout de ComplexKeyHashedDictionary y ComplexKeySparseHashedDictionary. #30246 (Maksim Kita).
  • Se corrige la función [I]LIKE. Cierra #28661. #30244 (Nikolay Degterinsky).
  • Se corrigió un fallo con shortcircuit y lowcardinality en multiIf. #30243 (Raúl Marín).
  • FlatDictionary, HashedDictionary corrigen el cálculo de bytes_allocated de atributos Nullable. #30238 (Maksim Kita).
  • Permitir identificadores que comiencen con números en varios joins. #30230 (Vladimir C).
  • Se corrigió la lectura desde MergeTree con max_read_buffer_size = 0 (cuando el usuario quiere pegarse un tiro en el pie) (puede provocar excepciones Can't adjust last granule, LOGICAL_ERROR o incluso pérdida de datos). #30192 (Azat Khuzhin).
  • Se corrige pread_fake_async/pread_threadpool con min_bytes_to_use_direct_io. #30191 (Azat Khuzhin).
  • Corrige un problema por el que INSERT SELECT rellenaba incorrectamente la columna MATERIALIZED basándose en una columna Nullable. #30189 (Azat Khuzhin).
  • Se admiten argumentos Nullable en la función initializeAggregation. #30177 (Anton Popov).
  • Se corrige el error Port is already connected en consultas con GLOBAL IN y WITH TOTALS. Solo para 21.9 y 21.10. #30086 (Nikolai Kochetov).
  • Se corrige una condición de carrera entre MOVE PARTITION y las fusiones/mutaciones de MergeTree. #30074 (Azat Khuzhin).
  • La base de datos Memory eliminada podría reaparecer después de reiniciar el servidor; esto ya se ha corregido (#29795). También se añadió la configuración force_remove_data_recursively_on_drop como solución alternativa para el error Directory not empty al eliminar una base de datos Ordinary (porque no es posible eliminar manualmente los restos de datos en un entorno de nube). #30054 (tavplubix).
  • Se corrigió el fallo de sample provocado por tuple(), cierra #30004. #30016 (flynn).
  • intenta cerrar la incidencia: #29965. #29976 (hexiaoting).
  • Corrige una posible condición de carrera entre FileChecker y StorageLog/StorageStripeLog. #29959 (Azat Khuzhin).
  • Se corrige la condición de carrera entre LogSink::writeMarks() y LogSource en StorageLog. #29946 (Azat Khuzhin).
  • Corrige una posible fuga de recursos en el límite de consultas concurrentes de las tablas MergeTree introducido en https://github.com/ClickHouse/ClickHouse/pull/19544. #29879 (Amos Bird).
  • Corregir la comprobación de recreación de las tablas del sistema (no detecta cambios en los valores de tipo enum). #29857 (Azat Khuzhin).
  • MaterializedMySQL: Corrige un problema por el que, si se perdía la conexión con MySQL, solo podían procesarse partes de una transacción. #29837 (Håvard Kvålen).
  • Se evita el error Timeout exceeded: elapsed 18446744073.709553 seconds que podría producirse en casos extremadamente raros, presuntamente debido a algún error del kernel. Corrige #29154. #29811 (tavplubix).
  • Se corrige una conversión errónea en la consulta ATTACH TABLE ... FROM 'path' cuando se usa un literal no de cadena en lugar de una ruta. Esto puede provocar la lectura de memoria no inicializada. #29790 (alexey-milovidov).
  • Se corrigió el acceso concurrente a LowCardinality en GROUP BY (en combinación con tablas Buffer, podía causar problemas). #29782 (Azat Khuzhin).
  • Se corrige un GROUP BY incorrecto (varias filas con las mismas claves en el resultado) en una consulta distribuida cuando los segmentos tenían versiones mixtas <= 21.3 y >= 21.4, la clave de GROUP BY tenía varias columnas, todas de tamaño fijo, y estaba activada la agregación de dos niveles (consulte group_by_two_level_threshold y group_by_two_level_threshold_bytes). Corrige #29580. #29735 (Nikolai Kochetov).
  • Se corrigió el comportamiento incorrecto de la configuración materialized_postgresql_tables_list al reiniciar el servidor. Reportado en #28529. #29686 (Kseniia Sumarokova).
  • La condición del predicado de filtro podía perderse tras la optimización push-down. #29625 (Nikolai Kochetov).
  • Se corrige la compilación JIT de expresiones con alias y la evaluación con cortocircuito de expresiones. Cierra #29403. #29574 (Maksim Kita).
  • Corrige un segfault poco frecuente en la consulta ALTER MODIFY al usar un identificador de tabla incorrecto en una expresión DEFAULT como x.y.z... Soluciona #29184. #29573 (alesapin).
  • Se corrige la desreferenciación de nullptr en GROUP BY WITH TOTALS HAVING (cuando no se había seleccionado la columna de HAVING). #29553 (Azat Khuzhin).
  • Evita interbloqueos al leer y escribir en tablas del motor Join al mismo tiempo. #29544 (Raúl Marín).
  • Se corrigió un error en la comprobación pathStartsWith debido a un uso incorrecto de std::mismatch: The behavior is undefined if the second range is shorter than the first range.. #29531 (Kseniia Sumarokova).
  • En ODBC bridge, se añaden reintentos para el error Invalid cursor state. Es un error recuperable mediante reintentos. Cierra #29473. #29518 (Kseniia Sumarokova).
  • Se corrigió el análisis incorrecto del nombre de la tabla durante la carga de la base de datos Lazy. Corrige #29456. #29476 (tavplubix).
  • Corrige un posible Block structure mismatch en subconsultas con un predicado HAVING desplazado hacia abajo. Corrige #29010. #29475 (Nikolai Kochetov).
  • Se ha corregido el error lógico Cannot capture columns en las funciones greatest/least. Cierra #29334. #29454 (Kruglov Pavel).
  • Motor de tabla RocksDB: corrección de una condición de carrera durante la apertura de varias DB (y restauración de algunas pruebas que reproducen el problema en CI). #29393 (Azat Khuzhin).
  • Se corrigió el cierre incorrecto del almacenamiento de acceso replicado cuando estaba mal configurado. #29388 (Kevin Michel).
  • Se elimina la función de ventana nth_value, ya que no es segura en términos de memoria. Esto cierra #29347. #29348 (alexey-milovidov).
  • Se corrigen las fusiones verticales de las partes de proyección. Con esto se corrige #29253. Este PR también corrige varios problemas de fusión/mutación de proyecciones introducidos en https://github.com/ClickHouse/ClickHouse/pull/25165. #29337 (Amos Bird).
  • Se corrigen las consultas DDL que quedaban bloqueadas en la base de datos Replicated al añadir una nueva réplica. #29328 (Kevin Michel).
  • Se corrigen los tiempos de espera de conexión (send_timeout/receive_timeout). #29282 (Azat Khuzhin).
  • Se corrigió la posible excepción Table columns structure in ZooKeeper is different from local table structure al recrear o crear nuevas réplicas de ReplicatedMergeTree, cuando una de las columnas de la tabla tiene expresiones por defecto con funciones no sensibles a mayúsculas y minúsculas. #29266 (Anton Popov).
  • Enviar al cliente (a través de TCP) el error normal Database doesn't exist error (UNKNOWN_DATABASE) en lugar de Attempt to read after eof (ATTEMPT_TO_READ_AFTER_EOF). #29229 (Azat Khuzhin).
  • Se corrigió un error de segmentación al insertar en una columna de tipo LowCardinality(Nullable) en el formato de entrada Avro. #29132 (Kruglov Pavel).
  • No permitir la reutilización de credenciales previas en caso de secreto entre servidores (Antes de INSERT mediante Buffer/Kafka en una tabla distribuida con un secreto entre servidores configurado para ese clúster, podía reutilizarse el usuario establecido previamente para esa conexión). #29060 (Azat Khuzhin).
  • Gestionar any_join_distinct_right_table_keys al hacer un join con un diccionario; soluciona #29007. #29014 (Vladimir C).
  • Corrige el error “No se encontró la columna … en el bloque” al hacer join sobre una columna con alias, cierra #26980. #29008 (Vladimir C).
  • Se corrige el número de hilos utilizados en la subconsulta GLOBAL IN (se ejecutaba en un solo hilo desde la corrección del error #19414). #28997 (Nikolai Kochetov).
  • Corrige las optimizaciones incorrectas de ORDER BY si contiene WITH FILL. Esto cierra #28908. Esto cierra #26049. #28910 (alexey-milovidov).
  • Se corrigen las funciones de arrays de orden superior (SIGSEGV para arrayCompact/ILLEGAL_COLUMN para arrayDifference/arrayCumSumNonNegative) al usar constantes. #28904 (Azat Khuzhin).
  • Se corrige la espera de finalización de una mutación con mutations_sync=2. #28889 (Azat Khuzhin).
  • Se corrigen las consultas a bases de datos externas (es decir, MySQL) con varias columnas en IN (es decir, (k,v) IN ((1, 2)) ). #28888 (Azat Khuzhin).
  • Corrige un fallo con LowCardinality en la evaluación con cortocircuito de funciones. Cierra #28884. #28887 (Kruglov Pavel).
  • Se corrigió la lectura de subcolumnas de partes compactas. #28873 (Anton Popov).
  • Se corrigió una condición de carrera entre DROP PART y REPLACE/MOVE PARTITION que, en raras ocasiones, podía hacer que las réplicas divergieran. #28864 (tavplubix).
  • Se corrige la compilación de expresiones con evaluación de cortocircuito. #28821 (Azat Khuzhin).
  • Se corrige un caso extremadamente raro en el que las réplicas de ReplicatedMergeTree pueden divergir tras un reinicio forzado de todas ellas. El error aparece como: Part ... intersects (previous|next) part .... #28817 (alesapin).
  • Se mejora la comprobación de la usabilidad de la conexión y también se captura cualquier excepción durante el apagado de RabbitMQ, por si acaso. #28797 (Kseniia Sumarokova).
  • Corrige una condición de carrera benigna en ReplicatedMergeTreeQueue. No debería ser visible para el usuario, pero puede dar lugar a errores sutiles. #28734 (alesapin).
  • Se corrige un posible fallo de SELECT con una proyección agregada creada parcialmente en caso de excepción. #28700 (Amos Bird).
  • Se corrige el coredump al crear tablas distribuidas cuando los parámetros proporcionados son incorrectos. #28686 (Zhiyong Wang).
  • Se añaden los alias Settings.Names y Settings.Values para la tabla system.processes. #28685 (Vitaly).
  • Compatibilidad con la biblioteca S2 Geometry: se corrigió el número de argumentos requeridos por las funciones s2RectAdd y s2RectContains. #28663 (Bharat Nallan).
  • Se corrige la conversión no válida de tipo constante cuando se usa una clave primaria Nullable o LowCardinality. #28636 (Amos Bird).
  • Se corrige “La columna no está dentro de una función de agregado ni en GROUP BY” con PREWHERE (Soluciona: #28461). #28502 (Azat Khuzhin).

lanzamiento de ClickHouse v21.10, 2021-10-16. Presentation, Video

Cambio incompatible con versiones anteriores

  • Ahora, las siguientes configuraciones de MergeTree a nivel de tabla: replicated_max_parallel_sends, replicated_max_parallel_sends_for_table, replicated_max_parallel_fetches, replicated_max_parallel_fetches_for_table ya no tienen ningún efecto. Nunca funcionaron bien y fueron sustituidas por max_replicated_fetches_network_bandwidth, max_replicated_sends_network_bandwidth y background_fetches_pool_size. #28404 (alesapin).

Nueva característica

  • Se añade una funcionalidad para crear funciones definidas por el usuario (UDF) como expresiones lambda. Sintaxis CREATE FUNCTION {function_name} as ({parameters}) -> {function core}. Ejemplo: CREATE FUNCTION plus_one as (a) -> a + 1. Autores: @Realist007. #27796 (Maksim Kita) #23978 (Realist007).
  • Se añaden el motor de almacenamiento Executable y la función de tabla executable. Permite procesar datos con scripts externos en streaming. #28102 (Maksim Kita) (ruct).
  • Se añade el motor de almacenamiento ExecutablePool. Es similar a Executable, pero utiliza un grupo de procesos de larga duración. #28518 (Maksim Kita).
  • Se añade la consulta ALTER TABLE ... MATERIALIZE COLUMN. #27038 (Vladimir Chebotarev).
  • Se añade compatibilidad con la escritura particionada en la función de tabla s3. #23051 (Vladimir Chebotarev).
  • Se añade compatibilidad con el formato de compresión lz4 (además de gz, bz2, xz, zstd) para la importación y exportación de datos. #25310 (Bharat Nallan).
  • Se permiten argumentos posicionales con la configuración enable_positional_arguments. Cierra #2592. #27530 (Kseniia Sumarokova).
  • Se aceptan configuraciones de usuario relacionadas con formatos de archivo en la cláusula SETTINGS de la consulta CREATE para tablas s3. Esto cierra #27580. #28037 (Nikita Mikhaylov).
  • Se permite la conexión SSL para el motor RabbitMQ. #28365 (Kseniia Sumarokova).
  • Se añade la función getServerPort, que permite obtener el puerto del servidor. Si el puerto no está siendo utilizado por el servidor, se lanza una excepción. #27900 (Amos Bird).
  • Se añaden funciones de conversión entre “Snowflake ID” y DateTime, DateTime64. Véase #27058. #27704 (jasine).
  • Se añade la función SHA512. #27830 (zhanglistar).
  • Se añade la configuración log_queries_probability, que permite al usuario escribir en query_log solo una muestra de consultas. Cierra #16609. #27527 (Nikolay Degterinsky).

Funcionalidad experimental

  • Discos de tipo web para almacenar tablas readonly en un servidor web en forma de archivos estáticos. Véase #23982. #25251 (Kseniia Sumarokova). Esto se necesita principalmente para facilitar las pruebas de funcionamiento sobre almacenamiento compartido y para importar conjuntos de datos con facilidad. No se recomienda su uso antes de la versión 21.11.
  • Se añadieron los nuevos comandos BACKUP y RESTORE. #21945 (Vitaly Baranov). Esto está en desarrollo y no está pensado para usarse en la versión actual.

Mejora del rendimiento

  • Acelera las funciones de agregación sumIf y countIf. #28272 (Raúl Marín).
  • Crea una proyección virtual para el índice minmax. Ahora, cuando allow_experimental_projection_optimization está habilitado, las consultas usarán el índice minmax en lugar de leer los datos, cuando sea posible. #26286 (Amos Bird).
  • Se introducen dos comprobaciones en sequenceMatch y sequenceCount que permiten salir antes cuando falta en la lista de eventos alguna parte determinista del patrón de secuencia. Este cambio desbloquea muchas consultas que antes fallaban por alcanzar el límite de operaciones y, en general, acelera el pipeline. #27729 (Jakub Kuklis).
  • Mejora el análisis de la clave primaria con información de monotonicidad para funciones binarias, en particular la división por una constante distinta de cero. #28302 (Amos Bird).
  • Hace que la condición de filtro hasAll aproveche los índices bloom filter de omisión de datos. #27984 (Braulio Valdivielso Martínez).
  • Acelera la carga de las partes de datos al retrasar el proceso de inicio de la tabla. #28313 (Amos Bird).
  • Corrige un posible número excesivo de condiciones movidas de WHERE a PREWHERE (optimización controlada por la configuración optimize_move_to_prewhere). #28139 (lthaooo).
  • Habilita optimize_distributed_group_by_sharding_key de forma predeterminada. #28105 (Azat Khuzhin).

Mejora

  • Comprobar el nombre del clúster antes de crear la tabla Distributed; no permitir crear una tabla con un nombre de clúster incorrecto. Corrige #27832. #27927 (tavplubix).
  • Añada la función de agregación quantileBFloat16Weighted, de forma similar a otras funciones quantile…Weighted. Esto cierra #27745. #27758 (Ivan Novitskiy).
  • Se permite crear diccionarios con una lista vacía de atributos. #27905 (Maksim Kita).
  • Agregar documentación interactiva en clickhouse-client sobre cómo restablecer la contraseña. Esto resulta útil cuando un usuario instala ClickHouse, configura la contraseña y la olvida al instante. Véase #27750. #27903 (alexey-milovidov).
  • Se admite el caso en que los datos estén encerrados en un array en el formato de entrada JSONAsString. Cierra #25517. #25633 (Kruglov Pavel).
  • Se agrega una nueva columna last_queue_update_exception a la tabla system.replicas. #26843 (nvartolomei).
  • Se añade compatibilidad con reconexiones en caso de failover para las tablas MaterializedPostgreSQL. Cierra #28529. #28614 (Kseniia Sumarokova).
  • Genera un UUID único para el servidor en su primer arranque. #20089 (Bharat Nallan).
  • Se añade la configuración connection_wait_timeout (valor predeterminado: 5 segundos; 0: no esperar) para el motor MySQL. #28474 (Azat Khuzhin).
  • No permitir la creación de MaterializedPostgreSQL con argumentos incorrectos. Cierra #28423. #28430 (Kseniia Sumarokova).
  • Usa un archivo tmp real en lugar de “rows_sources” predefinido para las fusiones verticales. Esto evita generar directorios basura en discos tmp. #28299 (Amos Bird).
  • Se añadió libhdfs3_conf a la configuración del servidor en lugar de exportar la variable de entorno LIBHDFS3_CONF en clickhouse-server.service. Esto sirve para configurar la interacción con HDFS. #28268 (Zhichang Yu).
  • Se corrige la eliminación de partes en estado temporal, que puede provocar una excepción inesperada (Part %name% doesn't exist). Corrige #23661. #28221 #28221) (Azat Khuzhin).
  • Se corrige zookeeper_log.address (antes del primer parche de este PR, la dirección siempre era ::) y se reduce el número de llamadas a getpeername(2) para esta columna (como cada vez que se añade una entrada a zookeeper_log se llama a getpeername(), esta dirección se almacena en caché en el cliente de zookeeper para evitarlo). #28212 (Azat Khuzhin).
  • Se admiten conversiones implícitas entre el índice del operador [] y la clave de tipo Map (p. ej., distintos tipos de Int, String y FixedString). #28096 (Anton Popov).
  • Se admite la cláusula ON CONFLICT al insertar en el motor de tabla PostgreSQL o en la función de tabla. Cierra #27727. #28081 (Kseniia Sumarokova).
  • Se reducen las restricciones del tipo de dato Enum para permitir adjuntar datos compatibles. Cierra #26672. #28028 (Dmitry Novik).
  • Añadir una opción de configuración empty_result_for_aggregation_by_constant_keys_on_empty_set para controlar el comportamiento de la agrupación por claves constantes en un conjunto vacío. Esto recupera el comportamiento anterior de #6842. #27932 (Amos Bird).
  • Se añadió la configuración replication_wait_for_inactive_replica_timeout. Permite especificar cuánto tiempo esperar para que las réplicas inactivas ejecuten la consulta ALTER/OPTIMZE/TRUNCATE (el valor predeterminado es de 120 segundos). Si replication_alter_partitions_sync es 2 y algunas réplicas permanecen inactivas durante más de replication_wait_for_inactive_replica_timeout segundos, se lanzará UNFINISHED. #27931 (tavplubix).
  • Se admite un argumento lambda para el transformador de columnas APPLY, que permite aplicar funciones con más de un argumento. Esto corresponde a #27877. #27901 (Amos Bird).
  • Se habilitó tcp_keep_alive_timeout de forma predeterminada. #27882 (Azat Khuzhin).
  • Se mejora la cancelación remota de consultas (en caso de terminación anómala del servidor remoto). #27881 (Azat Khuzhin).
  • Usar la carga por copia multiparte para objetos grandes de S3. #27858 (ianton-ru).
  • Permitir seguir enlaces simbólicos en la ruta del diccionario de la biblioteca. #27815 (Kseniia Sumarokova).
  • Ahora, cambiar T a Nullable(T) con ALTER MODIFY COLUM no requiere mutación. #27787 (victorgao).
  • No se ignoran silenciosamente los errores ni se contabilizan los retrasos en ReadBufferFromS3. #27484 (Vladimir Chebotarev).
  • Se mejora ALTER ... MATERIALIZE TTL al recalcular solo los metadatos, sin ejecutar ninguna acción de TTL real. #27019 (lthaooo).
  • Permite leer la lista de dominios de nivel superior personalizados sin una nueva línea al final del archivo. #28213 (Azat Khuzhin).

Corrección de errores

  • Corrige los casos en los que la lectura de datos comprimidos de carbon-clickhouse falla con ‘attempt to read after end of file’. Cierra #26149. #28150 (FArthur-cmd).
  • Se corrige la comprobación de los privilegios de acceso al ejecutar la sentencia GRANT WITH REPLACE con la cláusula ON CLUSTER. Este PR mejora la solución de #27001. #27983 (Vitaly Baranov).
  • Permite realizar selecciones con extremes = 1 a partir de una columna del tipo LowCardinality(UUID). #27918 (Vitaly Baranov).
  • Se corrigió la conversión de tipo al estilo de PostgreSQL (operador ::) para números negativos. #27876 (Anton Popov).
  • Después de #26864. Se corrigió el cierre de NamedSessionStorage: los contextos de sesión almacenados en NamedSessionStorage ahora se destruyen antes de destruir el contexto global. #27875 (Vitaly Baranov).
  • Corrección de un error en el modo “strict” de windowFunnel. Esto corrige #27469. #27563 (achimbab).
  • Se corrigió un bucle infinito al leer un archivo bzip2 truncado. #28543 (Azat Khuzhin).
  • Se corrige el solapamiento de UUID en DROP TABLE para DDL interno de MaterializedMySQL. MaterializedMySQL es una característica experimental. #28533 (Azat Khuzhin).
  • Se corrigió el error There is no subcolumn al hacer SELECT sobre tablas que tienen columnas Nested y columnas escalares con un punto en el nombre y el mismo prefijo que Nested (p. ej., n.id UInt32, n.arr1 Array(UInt64), n.arr2 Array(UInt64)). #28531 (Anton Popov).
  • Se corrige un error que puede provocar el mensaje de error Existing table metadata in ZooKeeper differs in sorting key expression. después de un ALTER de ReplicatedVersionedCollapsingMergeTree. Corrige #28515. #28528 (alesapin).
  • Se corrigió una posible fuga de watches de ZooKeeper (problema menor) durante el procesamiento en segundo plano de la cola de DDL distribuido. Cierra #26036. #28446 (tavplubix).
  • Se corrigió la falta de comillas en los nombres de las tablas del motor MaterializedPostgreSQL. Cierra #28316. #28433 (Kseniia Sumarokova).
  • Corrige el comportamiento incorrecto de las filas sin coincidencia de una columna Nullable. Cierra #27691. #28349 (vdimir).
  • Se corrige la optimización del índice NOT-IN cuando no se utilizan todas las columnas de la clave. Esto corrige #28120. #28315 (Amos Bird).
  • Se corrigió el problema de partes superpuestas causado porque una parte nueva había sido reemplazada por una parte vacía. #28310 (Azat Khuzhin).
  • Se corrigió el resultado inconsistente de las consultas con ORDER BY y tablas Merge con la configuración optimize_read_in_order habilitada. #28266 (Anton Popov).
  • Corrige una posible lectura de memoria sin inicializar en consultas con el tipo Nullable(LowCardinality) y la configuración extremes establecida en 1. Corrige #28165. #28205 (Nikolai Kochetov).
  • Varias correcciones pequeñas en las proyecciones. Consulte la descripción detallada en el PR. #28178 (Amos Bird).
  • Corregidos fallos de segmentación extremadamente raros durante el apagado debido a un orden incorrecto al detener el recargador de contexto/configuración. #28088 (nvartolomei).
  • Se ha corregido el manejo del valor NULL con el tipo Nullable(String) en la función JSONExtract. Esto corrige #27929 y #27930. Esto se introdujo en https://github.com/ClickHouse/ClickHouse/pull/25452 . #27939 (Amos Bird).
  • Múltiples correcciones para la nueva herramienta clickhouse-keeper. Se corrige un error poco frecuente en clickhouse-keeper por el que el cliente podía recibir una respuesta de watch antes de la respuesta a la solicitud correspondiente. #28197 (alesapin). Se corrige un comportamiento incorrecto en clickhouse-keeper cuando los watches de lista (getChildren) se activaban con solicitudes set para nodos hijos. #28190 (alesapin). Se corrige un caso poco frecuente en el que los cambios en la configuración de clickhouse-keeper podían provocar la pérdida de logs y que el servidor se quedara bloqueado. #28360 (alesapin). Se corrige un error en clickhouse-keeper que podía provocar logs sin fin cuando se reducía rotate_logs_interval. #28152 (alesapin).

Mejora de compilación/pruebas/empaquetado

  • Se habilitó Thread Fuzzer en la prueba de estrés. Thread Fuzzer es una funcionalidad de ClickHouse que permite probar más permutaciones de la planificación de hilos y descubrir más problemas potenciales. Esto cierra #9813. Esto cierra #9814. Esto cierra #9515. Esto cierra #9516. #27538 (alexey-milovidov).
  • Se añadió un nuevo nivel de registro, test, para entornos de prueba. Es incluso más detallado que el trace predeterminado. #28559 (alesapin).
  • Se imprime la información del estado de git en la etapa de configuración de CMake. #28047 (Braulio Valdivielso Martínez).
  • Se cambió temporalmente el repositorio apt de Ubuntu al servidor espejo ru.archive.ubuntu.com, ya que el predeterminado (archive.ubuntu.com) no responde desde nuestro CI. #28016 (Ilya Yatsishin).

Lanzamiento de ClickHouse v21.9, 2021-09-09

Cambio incompatible con versiones anteriores

  • No mostrar ceros finales en la representación textual de los tipos Decimal. Ejemplo: se imprimirá 1.23 en lugar de 1.230000 para un decimal con escala 6. Esto cierra #15794. Puede introducir una ligera incompatibilidad si sus aplicaciones dependían de algún modo de esos ceros finales. La serialización en los formatos de salida puede controlarse con el ajuste output_format_decimal_trailing_zeros. La implementación de toString y la conversión a String cambian incondicionalmente. #27680 (alexey-milovidov).
  • No permitir aplicar una función de agregado paramétrica con el combinador -Merge al estado de una función de agregado si ese estado fue producido por una función de agregado con parámetros distintos. Por ejemplo, el estado de fooState(42)(x) no puede finalizarse con fooMerge(s) ni con fooMerge(123)(s); los parámetros deben especificarse explícitamente, como en fooMerge(42)(s), y deben coincidir. Esto no afecta a algunas funciones de agregado especiales como quantile y sequence*, que usan parámetros solo para la finalización. #26847 (tavplubix).
  • En clickhouse-local, tratar siempre las direcciones locales con puerto como remotas. #26736 (Raúl Marín).
  • Corregido el problema por el que, en algunas consultas complejas con alias de columna idénticos a los nombres de las expresiones, podía producirse una conversión incorrecta. Esto corrige #25447. Esto corrige #26914. Esta corrección puede introducir incompatibilidad con versiones anteriores: si hay expresiones distintas con nombres idénticos, se lanzará una excepción. Puede romper algunos casos poco frecuentes cuando enable_optimize_predicate_expression está habilitado. #26639 (alexey-milovidov).
  • Ahora, una subconsulta escalar siempre devuelve un resultado Nullable si su tipo puede ser Nullable. Esto es necesario porque, en el caso de una subconsulta vacía, su resultado debería ser Null. Antes, era posible obtener un error sobre tipos incompatibles (la deducción de tipos no ejecuta la subconsulta escalar y podía usar un tipo no anulable). Una subconsulta escalar con resultado vacío que no puede convertirse a Nullable (como Array o Tuple) ahora lanza un error. Corrige #25411. #26423 (Nikolai Kochetov).
  • Se introduce sintaxis para here-documents. Ejemplo: SELECT $doc$ VALUE $doc$. #26671 (Maksim Kita). Este cambio es incompatible con versiones anteriores si en la consulta hay identificadores que contienen $ #28768.
  • Ahora los índices pueden manejar tipos Nullable, incluidos isNull y isNotNull. #12433 y #12455 (Amos Bird) y #27250 (Azat Khuzhin). Pero esto implicó cambios en el formato en disco y, aunque el servidor nuevo puede leer datos antiguos, el servidor antiguo no puede. Además, si tiene índices de omisión de datos MINMAX, puede obtener el error Data after mutation/merge is not byte-identical, ya que el nuevo índice tendrá la extensión .idx2, mientras que antes era .idx. Por ello, no debería retrasar la actualización de todas las réplicas existentes en este caso; de lo contrario, si una réplica antigua (<21.9) descarga datos de una réplica nueva con 21.9+, no podrá aplicar el índice a la parte descargada.

Nueva característica

  • Implementación de la evaluación de funciones con cortocircuito; cierra #12587. Se añade la opción de configuración short_circuit_function_evaluation para controlar la evaluación de funciones con cortocircuito. #23367 (Kruglov Pavel).
  • Se agregó compatibilidad con los operadores INTERSECT, EXCEPT, ANY y ALL. #24757 (Kirill Ershov). (Kseniia Sumarokova).
  • Se añadió compatibilidad con el cifrado a nivel del sistema de archivos virtual (cifrado de datos en reposo) mediante el algoritmo AES-CTR. #24206 (Latysheva Alexandra). (Vitaly Baranov) #26733 #26377 #26465.
  • Se añadieron funciones de procesamiento del lenguaje natural (NLP) para la tokenización, el stemming, la lematización y la búsqueda en extensiones de sinónimos. #24997 (Nikolay Degterinsky).
  • Se añadió la integración con la biblioteca de geometría S2. #24980 (Andr0901). (Nikita Mikhaylov).
  • Se añaden el motor de tabla SQLite, la función de tabla y el motor de base de datos. #24194 (Arslan Gumerov). (Kseniia Sumarokova).
  • Se añadió compatibilidad con consultas personalizadas para la fuente de diccionario MySQL, PostgreSQL, ClickHouse, JDBC y Cassandra. Cierra #1270. #26995 (Maksim Kita).
  • Añade almacenamiento compartido (replicado) de usuarios, roles, políticas de fila, cuotas y perfiles de configuración mediante ZooKeeper. #27426 (Kevin Michel).
  • Añade compresión para INTO OUTFILE con selección automática del algoritmo de compresión. Cierra #3473. #27134 (Filatenkov Artur).
  • Se añade INSERT ... FROM INFILE, de forma similar a SELECT ... INTO OUTFILE. #27655 (Filatenkov Artur).
  • Se añadió el Diccionario complex_key_range_hashed. Cierra #22029. #27629 (Maksim Kita).
  • Se admiten expresiones en la cláusula JOIN ON. Cierra #21868. #24420 (Vladimir C).
  • Cuando el cliente se conecta al servidor, recibe información sobre todas las advertencias que el servidor ya había recopilado. (Esto se puede desactivar con la opción --no-warnings). Se añade la tabla system.warnings para recopilar advertencias sobre la configuración del servidor. #26246 (Filatenkov Artur). #26282 (Filatenkov Artur).
  • Permitir el uso de expresiones constantes de WITH y SELECT en los parámetros de las funciones de agregado. Cierra #10945. #27531 (abel-cheng).
  • Se añade tupleToNameValuePairs, una función que convierte una tupla nombrada en un array de pares. #27505 (Braulio Valdivielso Martínez).
  • Se añadió compatibilidad con el método de compresión bzip2 para la importación/exportación. Cierra #22428. #27377 (Nikolay Degterinsky).
  • Se añadió la función bitmapSubsetOffsetLimit(bitmap, offset, cardinality_limit). Crea un subconjunto del bitmap y limita los resultados a cardinality_limit con un desplazamiento de offset. #27234 (DHBin).
  • Se agrega la columna default_database a system.users. #27054 (kevin wan).
  • Se agregó compatibilidad con macros de cluster en las funciones de tabla ‘cluster’ y ‘clusterAllReplicas’. #26913 (polyprogrammist).
  • Se añaden nuevas funciones currentRoles(), enabledRoles(), defaultRoles(). #26780 (Vitaly Baranov).
  • Nuevas funciones currentProfiles(), enabledProfiles(), defaultProfiles(). #26714 (Vitaly Baranov).
  • Se añaden funciones que devuelven el (initial_)query_id de la consulta actual. Con esto se cierra #23682. #26410 (Alexey Boykov).
  • Se añadió la funcionalidad REPLACE GRANT. #26384 (Caspian).
  • La consulta EXPLAIN ahora cuenta con el modo EXPLAIN ESTIMATE ..., que mostrará información sobre las filas, marcas y partes leídas de las tablas MergeTree. Cierra #23941. #26131 (fastio).
  • Se añadió la tabla system.zookeeper_log. Todas las acciones del cliente de ZooKeeper quedan registradas en esta tabla. Implementa #25449. #26129 (tavplubix).
  • Replicación zero-copy de ReplicatedMergeTree sobre almacenamiento HDFS. #25918 (Zhichang Yu).
  • Permite insertar el tipo Nested como un array de estructuras en los formatos de entrada Arrow, ORC y Parquet. #25902 (Kruglov Pavel).
  • Añade un nuevo tipo de datos Date32 (almacena los datos como Int32), admite el mismo intervalo de fechas que DateTime64, permite cargar date32 de Parquet en Date32 de ClickHouse. Añade la nueva función toDate32, similar a toDate. #25774 (LiuNeng).
  • Permite establecer la base de datos predeterminada para el usuario. #25268. #25687 (kevin wan).
  • Agrega un parámetro opcional al motor MongoDB para aceptar opciones de cadena de conexión y admitir conexiones SSL. Cierra #21189. Cierra #21041. #22045 (Omar Bazaraa).

Característica experimental

  • Se añadió un códec de compresión AES_128_GCM_SIV que cifra columnas en lugar de comprimirlas. #19896 (PHO). Se reescribirá; no lo use.
  • Se cambió el nombre de MaterializeMySQL a MaterializedMySQL. #26822 (tavplubix).

Mejora del rendimiento

  • Mejora el rendimiento de las consultas rápidas cuando max_execution_time = 0 al reducir el número de llamadas al sistema clock_gettime. #27325 (filimonov).
  • Especializa las comparaciones relacionadas con fecha y hora para mejorar el rendimiento. Esto corrige #27083. #27122 (Amos Bird).
  • Comparte descriptores de archivo en lecturas concurrentes de los mismos archivos. No hay una diferencia de rendimiento apreciable en Linux. Pero el número de archivos abiertos será significativamente menor (entre 10 y 100 veces) en servidores típicos, lo que facilita las operaciones. Consulta #26214. #26768 (alexey-milovidov).
  • Mejora la latencia de las consultas cortas que requieren leer tablas con una gran cantidad de columnas. #26371 (Anton Popov).
  • No crea conjuntos para índices al analizar una consulta. #26365 (Raúl Marín).
  • Vectoriza la función SUM de tipos enteros Nullable con representación nativa (David Manzanares, Raúl Marín). #26248 (Raúl Marín).
  • Compila expresiones que involucran columnas con tipos Enum. #26237 (Maksim Kita).
  • Compila las funciones agregadas groupBitOr, groupBitAnd, groupBitXor. #26161 (Maksim Kita).
  • Mejora el uso de memoria con una mejor predicción del tamaño del bloque al leer columnas DEFAULT vacías. Cierra #17317. #25917 (Vladimir Chebotarev).
  • Reduce el uso de memoria y el número de filas leídas en consultas con ORDER BY primary_key. #25721 (Anton Popov).
  • Habilita distributed_push_down_limit de forma predeterminada. #27104 (Azat Khuzhin).
  • Hace que toTimeZone sea monótona cuando timeZone es un valor constante para admitir la poda de particiones al usar SQL como este:. #26261 (huangzhaowei).

Mejora

  • Marque las funciones de ventana como aptas para uso general. Elimine la configuración allow_experimental_window_functions. #27184 (Alexander Kuzmenkov).
  • Mejora la compatibilidad con desfases de zona horaria que no se expresan en minutos enteros. #27080 (Raúl Marín).
  • Si el descriptor de archivo de la tabla File es un archivo regular, permitir leerlo varias veces. Esto permite que clickhouse-local lea varias veces desde stdin (con múltiples consultas SELECT o subconsultas) si stdin es un archivo regular, como en clickhouse-local --query "SELECT * FROM table UNION ALL SELECT * FROM table" ... < file. Esto cierra #11124. En coautoría con (alexey-milovidov). #25960 (BoloniniD).
  • Elimina el análisis de índices duplicado y evita posibles comprobaciones de límites no válidas durante el análisis de proyecciones. #27742 (Amos Bird).
  • Permite enviar parámetros de consulta en el cuerpo de las solicitudes HTTP. #27706 (Hermano Lustosa).
  • Ya no se permite arrayJoin en las expresiones de partición. #27648 (Raúl Marín).
  • Registrar la dirección IP del cliente cuando falle la autenticación. #27514 (Misko Lee).
  • Usa bytes en lugar de cadenas para los datos binarios en el protocolo GRPC. #27431 (Vitaly Baranov).
  • Enviar una respuesta con un mensaje de error si el puerto HTTP no está configurado y el usuario intenta enviar una solicitud HTTP al puerto TCP. #27385 (Braulio Valdivielso Martínez).
  • Se agrega la función _CAST para uso interno, que no preservará la propiedad Nullable del tipo, mientras que la conversión no interna sí la preservará según la configuración cast_keep_nullable. Cierra #12636. #27382 (Kseniia Sumarokova).
  • Se añade la configuración log_formatted_queries para registrar una consulta formateada adicional en system.query_log. Es útil para el análisis de consultas normalizadas porque funciones como normalizeQuery y normalizeQueryKeepNames no analizan ni formatean consultas para lograr un mejor rendimiento. #27380 (Amos Bird).
  • Se agregan dos opciones de configuración, max_hyperscan_regexp_length y max_hyperscan_regexp_total_length, para evitar el uso de regexp enormes en funciones relacionadas con hyperscan, como multiMatchAny. #27378 (Amos Bird).
  • La memoria consumida por las funciones de agregado de bitmap ahora se tiene en cuenta para los límites de memoria. Esto cierra #26555. #27252 (alexey-milovidov).
  • Se añadió una caché de 10 segundos al resolvedor de proxy de S3. #27216 (ianton-ru).
  • Se dividió el mutex global en construcciones individuales de expresiones regulares. Esto ayuda a evitar que la construcción de expresiones regulares, cuando es muy grande, bloquee otros hilos relacionados. #27211 (Amos Bird).
  • Compatibilidad con esquemas para el motor de base de datos PostgreSQL. Cierra #27166. #27198 (Kseniia Sumarokova).
  • Se agregó el seguimiento del uso de memoria en clickhouse-client. #27191 (Filatenkov Artur).
  • Intentar registrar query_kind en system.query_log incluso cuando la consulta no llega a iniciarse. #27182 (Amos Bird).
  • Se añadieron las columnas replica_is_active, que asignan el nombre de la réplica a su estado de actividad, a la tabla system.replicas. Cierra #27138. #27180 (Maksim Kita).
  • Permitir pasar los ajustes de la consulta a través de la URI del servidor en la interfaz web. #27177 (kolsys).
  • Agrega una nueva métrica llamada MaxPushedDDLEntryID, que es el ID máximo de entrada DDL que el nodo actual envía a ZooKeeper. #27174 (Fuwang Hu).
  • Se mejoró la comprobación de la condición de existencia y de los nodos con cadena vacía cuando clickhouse-keeper crea un znode. #27125 (小路).
  • Merge JOIN maneja correctamente un conjunto vacío en el lado derecho. #27078 (Vladimir C).
  • Ahora las funciones pueden ser constantes a nivel de segmento, lo que significa que, si se ejecutan en el contexto de una tabla distribuida, generan una columna normal; de lo contrario, producen un valor constante. Entre las funciones más destacadas se encuentran: hostName(), tcpPort(), version(), buildId(), uptime(), etc. #27020 (Amos Bird).
  • extractAllGroupsHorizontal actualizado: ahora se puede establecer el límite máximo del número de coincidencias por fila mediante un tercer argumento opcional. #26961 (Vasily Nemkov).
  • Exponer las estadísticas de RocksDB mediante la tabla system.rocksdb. Leer las opciones de RocksDB desde la configuración de ClickHouse (claves rocksdb...). NOTA: ClickHouse no depende de RocksDB; es solo uno de los motores de almacenamiento de integración adicionales. #26821 (Azat Khuzhin).
  • Logs internos de RocksDB menos verbosos. NOTA: ClickHouse no depende de RocksDB; es solo uno de los motores de almacenamiento adicionales para integraciones. Esto cierra #26252. #26789 (alexey-milovidov).
  • Cambiar los roles predeterminados solo afecta a las nuevas sesiones. #26759 (Vitaly Baranov).
  • Watchdog está deshabilitado en docker de forma predeterminada. Corrección del problema al no manejar Ctrl+C. #26757 (Mikhail f. Shiryaev).
  • SET PROFILE ahora también aplica restricciones si están establecidas para el perfil especificado. #26730 (Vitaly Baranov).
  • Mejora el manejo de las solicitudes de KILL QUERY. #26675 (Raúl Marín).
  • La función mapPopulatesSeries admite el tipo Map. #26663 (Ildus Kurbangaliev).
  • Se corrigen los intentos de conexión excesivos (x2) al usar skip_unavailable_shards. #26658 (Azat Khuzhin).
  • Evita que clickhouse-benchmark se bloquee si falla la conexión (es decir, con EMFILE). #26656 (Azat Khuzhin).
  • Permitir que el motor Kafka use más hilos. #26642 (feihengye).
  • Se añade compatibilidad con round-robin para clickhouse-benchmark (no difiere de la ejecución habitual con varios hosts/puertos, excepto en el informe de estadísticas). #26607 (Azat Khuzhin).
  • Los diccionarios ejecutables (executable, executable_pool) permiten crearlos con una consulta DDL mediante clickhouse-local. Cierra #22355. #26510 (Maksim Kita).
  • Define el tipo de consulta del cliente para los controladores de protocolo de compatibilidad de mysql y postgresql. #26498 (anneji-dev).
  • Aplica LIMIT en los segmentos para consultas como SELECT * FROM dist ORDER BY key LIMIT 10 con distributed_push_down_limit=1. Evita ejecutar pasos de Distinct/LIMIT BY para consultas como SELECT DISTINCT shading_key FROM dist ORDER BY key. Ahora la optimización optimize_distributed_group_by_sharding_key respeta distributed_push_down_limit. #26466 (Azat Khuzhin).
  • Se actualizó protobuf a la versión 3.17.3. Los registros de cambios están disponibles en https://github.com/protocolbuffers/protobuf/releases. #26424 (Ilya Yatsishin).
  • Se habilitó la configuración use_hedged_requests, que permite mitigar la latencia de cola en clústeres grandes. #26380 (alexey-milovidov).
  • Mejora del comportamiento cuando hay un host inexistente en la lista de hosts permitidos del usuario. #26368 (ianton-ru).
  • Se añade la posibilidad de configurar los ajustes del monitor del directorio de Distributed mediante CREATE TABLE (es decir, CREATE TABLE dist (key Int) Engine=Distributed(cluster, db, table) SETTINGS monitor_batch_inserts=1 y similares). #26336 (Azat Khuzhin).
  • Guardar la dirección del servidor en las URL del historial de la UI web si difiere del origen de la UI web. Esto cierra #26044. #26322 (alexey-milovidov).
  • Se añadieron eventos de perfil para las llamadas a sleep / sleepEachRow. #26320 (Raúl Marín).
  • Permite reutilizar las conexiones a los segmentos entre distintos clústeres. También evita crear nuevas conexiones al usar la función de tabla cluster. #26318 (Amos Bird).
  • Permite controlar la frecuencia de ejecución de la limpieza de directorios temporales antiguos mediante un parámetro con valor predeterminado. #26212. #26313 (fastio).
  • Se agrega una configuración function_range_max_elements_in_block para ajustar el umbral de seguridad del volumen de datos generado por la función range. Esto cierra #26303. #26305 (alexey-milovidov).
  • Comprobar la función hash al crear la tabla, no durante el muestreo. Añadir configuración para MergeTree: si alguien crea una tabla con una columna de muestreo incorrecta pero el muestreo nunca se usa, desactivar esta configuración para iniciar el servidor sin que se produzca una excepción. #26256 (zhaoyu).
  • Se añadió la configuración output_format_avro_string_column_pattern para que las columnas String especificadas se escriban en Avro como string en lugar de bytes de forma predeterminada. Implementa #22414. #26245 (Ilya Golshtein).
  • Añade información sobre los tamaños de las columnas en la tabla system.columns para las tablas Log y TinyLog. Esto cierra #9001. #26241 (Nikolay Degterinsky).
  • No lanzar una excepción al consultar la tabla system.detached_parts si hay una configuración de disco personalizada y el directorio detached no existe en algunos discos. Esto cierra #26078. #26236 (alexey-milovidov).
  • Comprobación de funciones no deterministas en las claves, incluidas expresiones constantes como now(), today(). Esto cierra #25875. Esto cierra #11333. #26235 (alexey-milovidov).
  • convertir los tipos de datos timestamp y timestamptz a DateTime64 en el engine de tabla PostgreSQL. #26234 (jasine).
  • Aplicar un análisis agresivo de los índices IN en las proyecciones, de modo que pueda seleccionarse una mejor proyección candidata. #26218 (Amos Bird).
  • Se elimina la palabra clave GLOBAL de IN cuando se pasa una función escalar. En versiones anteriores, si el usuario especificaba GLOBAL IN f(x), se lanzaba una excepción. #26217 (Amos Bird).
  • Añadir el ID de error (como BAD_ARGUMENTS) a los mensajes de excepción. Esto cierra #25862. #26172 (alexey-milovidov).
  • Corrige la salida incorrecta con la opción --progress para clickhouse-local. La barra de progreso se eliminará al alcanzar el 100 %, igual que en clickhouse-client. Cierra #17484. #26128 (Kseniia Sumarokova).
  • Se agregó la configuración merge_selecting_sleep_ms. #26120 (lthaooo).
  • Se elimina el uso complejo de Linux AIO con lectura anticipada de un bloque y se sustituye por E/S síncrona simple con O_DIRECT. En versiones anteriores, la configuración min_bytes_to_use_direct_io podía no funcionar correctamente si max_threads era mayor que uno. La lectura con E/S directa (deshabilitada de forma predeterminada para las consultas y habilitada de forma predeterminada para las fusiones grandes) funcionará de forma menos eficiente. Esto cierra #25997. #26003 (alexey-milovidov).
  • Vaciar la tabla Distributed en la consulta REPLACE TABLE. Resuelve #24566: no reemplazar (ni crear) la tabla con la consulta [CREATE OR] REPLACE TABLE ... AS SELECT si falla la inserción en la tabla nueva. Resuelve #23175. #25895 (tavplubix).
  • Añade la columna views a system.query_log, que contiene los nombres de las vistas (materializadas o activas) ejecutadas por la consulta. Añade una nueva tabla de registro (system.query_views_log) que contiene información sobre cada vista ejecutada durante una consulta. Modifica la ejecución de vistas: cuando se lanza una excepción mientras se ejecuta una vista, cualquier vista que ya haya comenzado seguirá ejecutándose hasta que termine. Antes, este era el comportamiento con parallel_view_processing=true y ahora este comportamiento se aplica siempre. - Las vistas dependientes ahora informan del progreso de lectura al contexto. #25714 (Raúl Marín).
  • El drenaje de conexiones se realiza de forma asíncrona al terminar de ejecutar consultas distribuidas. Se añade una nueva configuración del servidor, max_threads_for_connection_collector, que especifica el número de workers para reciclar conexiones en segundo plano. Si el pool está lleno, la conexión se drenará de forma síncrona, pero de manera algo distinta a la anterior: se drena después de enviar EOS al cliente, la consulta se completará correctamente en cuanto reciba suficientes datos, y cualquier excepción se registrará en lugar de devolverse al cliente. Se añadió la configuración drain_timeout (3 segundos de forma predeterminada). El drenaje de conexiones desconectará la conexión cuando se agote el tiempo de espera. #25674 (Amos Bird).
  • Compatibilidad con múltiples inclusiones en la configuración. Es posible incluir la configuración de usuarios y la de servidores remotos desde varias fuentes. Basta con colocar el elemento <include /> con el atributo from_zk, from_env o incl, y se sustituirá por el valor correspondiente. #24404 (nvartolomei).
  • Corrige la inserción de múltiples bloques en una tabla distribuida con insert_distributed_one_random_shard = 1. Se trata de una funcionalidad menor. Marcar como mejora. #23140 (Amos Bird).
  • Se admiten claves y valores LowCardinality y FixedString para el tipo Map. #21543 (hexiaoting).
  • Se habilita la recarga de la configuración del disco local. #19526 (taiyang-li).

Corrección de errores

  • Corrige un par de errores que podrían hacer que las réplicas divergieran. #27808 (tavplubix).
  • Corrige un error poco frecuente en DROP PART que puede provocar el error Unexpected merged part intersects drop range. #27807 (alesapin).
  • Se evitaron fallos en algunos formatos cuando llegaba desde Kafka un mensaje NULL (tombstone). Cierra #19255. #27794 (filimonov).
  • Corrige el filtrado de columnas con UNION DISTINCT en una subconsulta. Cierra #27578. #27689 (Kseniia Sumarokova).
  • Se corrige una conversión de tipo errónea cuando se aplican funciones como arrayHas a Arrays de LowCardinality de Nullable de distintos tipos no numéricos, como DateTime y DateTime64. En versiones anteriores se producía una conversión incorrecta. En la nueva versión, esto provocará una excepción. Esto cierra #26330. #27682 (alexey-milovidov).
  • Corrige la función de tabla postgresql que dejaba conexiones sin cerrar. Cierra #26088. #27662 (Kseniia Sumarokova).
  • Se corrigió otro caso del error Unexpected merged part ... intersecting drop range .... #27656 (tavplubix).
  • Corrige un error en una columna con alias de una tabla Distributed. #27652 (Vladimir C).
  • Después de establecer max_memory_usage* en un valor distinto de cero, no era posible volver a ponerlo en 0 (sin límite). Ya está corregido. #27638 (tavplubix).
  • Se corrigió el infraflujo del valor temporal al construirlo a partir de sus componentes. Cierra #27193. #27605 (Vasily Nemkov).
  • Se corrige un fallo durante la materialización de proyecciones cuando algunas partes contienen columnas ausentes. Esto corrige #27512. #27528 (Amos Bird).
  • se corrigió la métrica BackgroundMessageBrokerSchedulePoolTask, quizá estaba mal escrita. #27452 (Ben).
  • Corrige las consultas distribuidas cuando hay cero segmentos y la agregación. #27427 (Azat Khuzhin).
  • Compatibilidad cuando /proc/meminfo no incluye el sufijo KB. #27361 (Mike Kot).
  • Corrige un resultado incorrecto en una consulta con seguridad a nivel de fila, PREWHERE y un filtro LowCardinality. Corrige #27179. #27329 (Nikolai Kochetov).
  • Se corrigió la validación incorrecta del identificador de partición para las tablas MergeTree creadas con la sintaxis antigua. #27328 (tavplubix).
  • Se corrige el protocolo de MySQL al usar formatos paralelos (CSV / TSV). #27326 (Raúl Marín).
  • Se soluciona el error Cannot find column en consultas con muestreo. Se introdujo en #24574. Corrige #26522. #27301 (Nikolai Kochetov).
  • Corrige errores como Expected ColumnLowCardinality, gotUInt8 o Bad cast from type DB::ColumnVector<char8_t> to DB::ColumnLowCardinality en algunas consultas con LowCardinality en PREWHERE. Y, lo que es más importante, corrige la falta de espacios en el mensaje de error. Corrige #23515. #27298 (Nikolai Kochetov).
  • Se corrige el problema de distributed_group_by_no_merge = 2 con distributed_push_down_limit = 1 o de optimize_distributed_group_by_sharding_key = 1 con LIMIT BY y LIMIT OFFSET. #27249 (Azat Khuzhin). Se trata de una combinación poco habitual de configuraciones que nadie usa.
  • Corrige una mutación atascada en particiones no válidas de MergeTree no replicado. #27248 (Azat Khuzhin).
  • En caso de ambigüedad, las funciones lambda dan prioridad a sus argumentos frente a otros alias o identificadores. #27235 (Raúl Marín).
  • Se corrige la estructura de columnas en merge join y se cierra #27091. #27217 (Vladimir C).
  • En casos excepcionales, la tabla system.detached_parts podía contener información incorrecta sobre algunas partes; esto ya se ha corregido. Corrige #27114. #27183 (tavplubix).
  • Corrige el problema de memoria no inicializada en las funciones multiSearch* con un array vacío; cierra #27169. #27181 (Vladimir C).
  • Se corrige la sincronización en GRPCServer. Este PR corrige #27024. #27064 (Vitaly Baranov).
  • Se corrigió el análisis de la configuración de cache, complex_key_cache, ssd_cache y complex_key_ssd_cache. Las opciones allow_read_expired_keys, max_update_queue_size, update_queue_push_timeout_milliseconds y query_wait_timeout_milliseconds no se analizaban en diccionarios que no eran de tipo cache. #27032 (Maksim Kita).
  • Se corrige un posible atasco de mutaciones debido a una condición de carrera con DROP_RANGE. #27002 (Azat Khuzhin).
  • Ahora se valida la corrección del ID de partición en consultas como ALTER TABLE ... PARTITION ID xxx. Corrige #25718. #26963 (alesapin).
  • Se corrige el error “Unknown column name” en algunos casos con múltiples JOINs; cierra #26899. #26957 (Vladimir C).
  • Se corrige la lectura de TLD personalizados (el procesamiento se detenía cuando el búfer era más pequeño o el archivo más grande). #26948 (Azat Khuzhin).
  • Corrige el error Missing columns: 'xxx' cuando la columna DEFAULT hace referencia a otra columna no materializada sin expresión DEFAULT. Corrige #26591. #26900 (alesapin).
  • Se corrige la carga de las claves de diccionario en library-bridge para la fuente de diccionario library. #26834 (Kseniia Sumarokova).
  • Los parámetros de las funciones de agregado podían perderse al aplicar ciertos combinadores, lo que provocaba excepciones como Conversion from AggregateFunction(topKArray, Array(String)) to AggregateFunction(topKArray(10), Array(String)) is not supported. Ya se ha corregido. Soluciona #26196 y #26433. #26814 (tavplubix).
  • Se añade el valor event_time_microseconds para REMOVE_PART en system.part_log. En versiones anteriores no se establecía. #26720 (Azat Khuzhin).
  • No elimine los datos al apagar una tabla ReplicatedMergeTree para evitar inconsistencias entre los datos y los metadatos. #26716 (nvartolomei).
  • A veces, SET ROLE podía no funcionar correctamente; este PR lo corrige. #26707 (Vitaly Baranov).
  • Algunas correcciones en el formateo en paralelo (https://github.com/ClickHouse/ClickHouse/issues/26694). #26703 (Raúl Marín).
  • Corrige una posible desreferenciación de nullptr en funciones de ventana. Soluciona #25276. #26668 (Alexander Kuzmenkov).
  • Se corrige la conversión del archivo de historial de clickhouse-client (al actualizar desde el formato de una versión de clickhouse-client de hace 3 años) si el archivo está vacío. #26589 (Azat Khuzhin).
  • Corrige los nombres de función incorrectos de groupBitmapAnd/Or/Xor (que pueden mostrarse en algunas ocasiones). Se corrige este problema. #26557 (Amos Bird).
  • Se actualiza la comprobación del comando chown en el entrypoint de Docker de clickhouse-server. Esto corrige el error que hacía que el reinicio de un pod de Kubernetes del clúster fallara (o agotara el tiempo de espera) en Kubernetes. #26545 (Ky Li).
  • Se corrige un fallo al cerrar RabbitMQ en caso de que no se hubiera iniciado su configuración. Cierra #26504. #26529 (Kseniia Sumarokova).
  • Se corrigieron problemas con la consulta CREATE DICTIONARY cuando el nombre del diccionario o de la base de datos estaba entre comillas. Se cierra #26491. #26508 (Maksim Kita).
  • Corrige la resolución incorrecta de nombres de columna tras reescribir los alias de columna. Esto corrige #26432. #26475 (Amos Bird).
  • Se corrige un fallo de msan detectado mediante fuzzing. Soluciona #22517. #26428 (Nikolai Kochetov).
  • Se corrige el flujo infinito de bloques sin unir en partial_merge_join, cierra #26325. #26374 (Vladimir C).
  • Corrige un posible cierre inesperado al iniciar sesión con un usuario eliminado. Este PR corrige #26073. #26363 (Vitaly Baranov).
  • Se corrige optimize_distributed_group_by_sharding_key para múltiples columnas (da lugar a resultados incorrectos con optimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1 y múltiples columnas en la expresión de la clave de sharding). #26353 (Azat Khuzhin).
  • Se corrigió un error poco frecuente en la recuperación de réplicas perdidas que podía hacer que las réplicas divergieran. #26321 (tavplubix).
  • Se corrige la descompresión de zstd (para la importación/exportación en formato de encapsulado zstd, no relacionado con los datos de las tablas) en caso de que haya secuencias de escape al final del búfer interno. Cierra #26013. #26314 (Kseniia Sumarokova).
  • Corregido un error lógico en join con totals, cierra #26017. #26250 (Vladimir C).
  • Se elimina el salto de línea excesivo en la columna thread_name de la tabla system.stack_trace. Esto corrige #24124. #26210 (alexey-milovidov).
  • Se corrigió un posible fallo si se utiliza más de una expresión untuple. #26179 (alexey-milovidov).
  • No lanzar una excepción en toString para Nullable Enum si Enum no tiene un valor para cero; se cierra #25806. #26123 (Vladimir C).
  • Se corrigió el sequence_id incorrecto en los paquetes del protocolo MySQL que ClickHouse envía cuando se produce una excepción durante la ejecución de la consulta. Esto podría hacer que el cliente MySQL restablezca la conexión con el servidor ClickHouse. Soluciona #21184. #26051 (tavplubix).
  • Corrección para el caso en que cutToFirstSignificantSubdomainCustom()/cutToFirstSignificantSubdomainCustomWithWWW()/firstSignificantSubdomainCustom() devuelven un tipo incorrecto para constantes y, por tanto, optimize_skip_unused_shards no funciona:. #26041 (Azat Khuzhin).
  • Corrige un posible desajuste del encabezado al usar una proyección normal con prewhere. Esto corrige #26020. #26038 (Amos Bird).
  • Se corrige sharding_key a partir de una columna sin función para remote() (antes, select * from remote('127.1', system.one, dummy) provocaba el error Unknown column: dummy, there are only columns .). #25824 (Azat Khuzhin).
  • Se corrigieron los errores Not found column ... y Missing column ... al consultar MaterializeMySQL. Soluciona #23708, #24830, #25794. #25822 (tavplubix).
  • Se corrige optimize_skip_unused_shards_rewrite_in para tipos distintos de UInt64 (puede terminar seleccionando segmentos incorrectos o provocar Cannot infer type of an empty tuple o Function tuple requires at least one argument). #25798 (Azat Khuzhin).

Mejora de compilación/pruebas/empaquetado

  • Ahora ejecutamos pruebas con estado y pruebas sin estado en zonas horarias aleatorias. Corrige #12439. La lectura de String como DateTime y la escritura de DateTime como String en formato Protobuf ahora respetan la zona horaria. La lectura de UInt16 como DateTime en los formatos Arrow y Parquet ahora lo trata como Date y luego lo convierte a DateTime respetando la zona horaria de DateTime, porque Date se serializa en Arrow y Parquet como UInt16. GraphiteMergeTree ahora respeta la zona horaria para el redondeo de tiempos. Corrige #5098. Autor: @alexey-milovidov. #15408 (alesapin).
  • clickhouse-test admite pruebas SQL con plantillas de Jinja2. #26579 (Vladimir C).
  • Se añadió compatibilidad para compilar con clang-13. Esto cierra #27705. #27714 (alexey-milovidov). #27777 (Sergei Semin)
  • Se añadieron opciones de CMake para compilar con o sin un conjunto específico de instrucciones de CPU. Esto es para #17469 y #27509. #27508 (alexey-milovidov).
  • Se corrigió el enlazado de programas auxiliares al usar bibliotecas dinámicas. #26958 (Raúl Marín).
  • Se actualizó RocksDB al master del 2021-07-16. #26411 (alexey-milovidov).

Lanzamiento de ClickHouse v21.8, 2021-08-12

Notas de actualización

  • La nueva versión usa el tipo de datos Map para las tablas de logs del sistema (system.query_log, system.query_thread_log, system.processes, system.opentelemetry_span_log). Estas tablas se crearán automáticamente con los nuevos tipos de datos. Se crean columnas virtuales para mantener la compatibilidad con las consultas anteriores. Cierra #18698. #23934, #25773 (hexiaoting, sundy-li, Maksim Kita). Si quieres downgrade de la versión 21.8 a versiones anteriores, tendrás que limpiar manualmente las tablas del sistema con logs. Consulta /var/lib/clickhouse/data/system/*_log.

Nuevas características

  • Se añade compatibilidad con parte del estándar SQL/JSON. #24148 (l1tsolaiki, Kseniia Sumarokova).
  • Se recopilan métricas comunes del sistema (en system.asynchronous_metrics y system.asynchronous_metric_log) sobre uso de CPU, uso de disco, uso de memoria, E/S, red, archivos, promedio de carga, frecuencias de CPU, sensores térmicos, contadores EDAC y tiempo de actividad del sistema; también se añadieron métricas sobre el jitter de planificación y el tiempo dedicado a recopilar dichas métricas. Funciona de forma similar a atop en ClickHouse y permite acceder a datos de monitorización incluso si no tiene herramientas adicionales instaladas. Cierra #9430. #24416 (alexey-milovidov, Yegor Levankov).
  • Se añaden el motor de tabla y el motor de base de datos MaterializedPostgreSQL. Este motor de base de datos permite replicar una base de datos completa o cualquier subconjunto de sus tablas. #20470 (Kseniia Sumarokova).
  • Se añaden las nuevas funciones leftPad(), rightPad(), leftPadUTF8(), rightPadUTF8(). #26075 (Vitaly Baranov).
  • Se añade la palabra clave FIRST al comando ADD INDEX para poder agregar el índice al principio de la lista de índices. #25904 (xjewer).
  • Se introduce la tabla system.data_skipping_indices, que contiene información sobre los índices de omisión de datos existentes. Cierra #7659. #25693 (Dmitry Novik).
  • Se añaden las funciones bin/unbin. #25609 (zhaoyu).
  • Se añade compatibilidad con los tipos Map, UInt128, Int128, UInt256 e Int256 en las funciones mapAdd y mapSubtract. #25596 (Ildus Kurbangaliev).
  • Se añade compatibilidad con la expresión DISTINCT ON (columns), cierra #25404. #25589 (Zijie Lu).
  • Se añade la posibilidad de restablecer una configuración personalizada a su valor predeterminado y eliminarla de los metadatos de la tabla. Esto permite revertir el cambio sin conocer el valor predeterminado del sistema o de la configuración. Cierra #14449. #17769 (xjewer).
  • Representa las pipelines como grafos en la UI web si se envía la consulta EXPLAIN PIPELINE graph = 1. #26067 (alexey-milovidov).

Mejoras de rendimiento

  • Compilación de funciones de agregado. Use la opción compile_aggregate_expressions para habilitarla. #24789 (Maksim Kita).
  • Mejora de la latencia de las consultas cortas que requieren leer tablas con muchas columnas. #26371 (Anton Popov).

Mejoras

  • Se usa el tipo de datos Map para las tablas de logs del sistema (system.query_log, system.query_thread_log, system.processes, system.opentelemetry_span_log). Estas tablas se crearán automáticamente con los nuevos tipos de datos. Se crean columnas virtuales para dar soporte a las consultas antiguas. Cierra #18698. #23934, #25773 (hexiaoting, sundy-li, Maksim Kita).
  • Para los diccionarios con una clave compleja que contiene solo un atributo, se permite no encapsular la expresión de clave en una tupla para las funciones dictGet, dictHas. #26130 (Maksim Kita).
  • Se implementa la función bin/hex a partir de estados de AggregateFunction. #26094 (zhaoyu).
  • Se admiten argumentos de tipo UUID para las funciones empty y notEmpty. Un UUID está vacío si está compuesto solo por ceros (UUID nulo). Cierra #3446. #25974 (zhaoyu).
  • Se añadió compatibilidad con SET SQL_SELECT_LIMIT en el protocolo MySQL. Cierra #17115. #25972 (Kseniia Sumarokova).
  • Más instrumentación para la interacción de red: se añaden contadores para los bytes recibidos/enviados; se añaden gauges para recepciones/envíos. Se añadió la documentación que faltaba. Cierra #5897. #25962 (alexey-milovidov).
  • Añade la configuración optimize_move_to_prewhere_if_final. Si una consulta incluye FINAL, la optimización move_to_prewhere solo se habilitará si tanto optimize_move_to_prewhere como optimize_move_to_prewhere_if_final están habilitadas. Cierra #8684. #25940 (Kseniia Sumarokova).
  • Permitir identificadores complejos entre comillas de tablas incluidas en JOIN. Cierra #17861. #25924 (alexey-milovidov).
  • Se añade compatibilidad con componentes Unicode (p. ej., chino, cirílico) en los tipos de datos Nested. Cierra #25594. #25923 (alexey-milovidov).
  • Permite que las funciones quantiles* funcionen con aggregate_functions_null_for_empty. Cierra #25892. #25919 (alexey-milovidov).
  • Permite que los parámetros de las funciones de agregación paramétricas sean expresiones constantes arbitrarias (p. ej., 1 + 2) y no solo literales. También permite usar parámetros de consulta (en consultas parametrizadas como {param:UInt8}) dentro de las funciones de agregación paramétricas. Cierra #11607. #25910 (alexey-milovidov).
  • Genera correctamente una excepción al intentar analizar una Date no válida. Cierra #6481. #25909 (alexey-milovidov).
  • Soporte para múltiples inclusiones en la configuración. Es posible incluir la configuración de usuarios y la configuración del servidor remoto desde múltiples fuentes. Basta con colocar el elemento <include /> con el atributo from_zk, from_env o incl, y se sustituirá por el valor correspondiente. #24404 (nvartolomei).
  • Se admiten consultas con una columna llamada "null" (debe especificarse entre acentos graves o comillas dobles) y ON CLUSTER. Cierra #24035. #25907 (alexey-milovidov).
  • Admite LowCardinality, Decimal y UUID en JSONExtract. Cierra #24606. #25900 (Kseniia Sumarokova).
  • Convierte el archivo de historial de formato readline a formato replxx. #25888 (Azat Khuzhin).
  • Se corrige un problema que puede provocar partes superpuestas después de DROP PART o de la eliminación en segundo plano de una parte vacía. #25884 (alesapin).
  • Mejor gestión de las partes perdidas en las tablas ReplicatedMergeTree. Corrige inconsistencias poco frecuentes en ReplicationQueue. Corrige #10368. #25820 (alesapin).
  • Permitir iniciar clickhouse-client aunque el directorio de trabajo no sea legible. #25817 (ianton-ru).
  • Se corrige el error “No hay columnas disponibles” para el motor de almacenamiento Merge. #25801 (Azat Khuzhin).
  • El motor MySQL ahora admite el intercambio de comentarios de las columnas entre MySQL y ClickHouse. #25795 (Storozhuk Kostiantyn).
  • Corrige el comportamiento inconsistente de la constante GROUP BY con un conjunto vacío. Cierra #6842. #25786 (Kseniia Sumarokova).
  • Cancela las fusiones que ya están en ejecución en una partición al usar DROP PARTITION y TRUNCATE en ReplicatedMergeTree. Resuelve #17151. #25684 (tavplubix).
  • Se admite el tipo de dato ENUM` en MaterializeMySQL. #25676 (Storozhuk Kostiantyn).
  • Soporta columnas materializadas y con alias en JOIN, cierra #13274. #25634 (Vladimir C).
  • Se corrige una posible condición de carrera a nivel lógico entre ALTER TABLE ... DETACH y las fusiones en segundo plano. #25605 (Azat Khuzhin).
  • La métrica NetworkReceiveElapsedMicroseconds ahora incluye correctamente el tiempo dedicado a esperar datos del cliente para INSERT. Cierra #9958. #25602 (alexey-milovidov).
  • Se ha añadido compatibilidad con TRUNCATE TABLE para S3 y HDFS. Cierra #25530. #25550 (Kseniia Sumarokova).
  • Soporte para la recarga dinámica de la configuración para cambiar el número de hilos del pool para la ejecución de trabajos en segundo plano (fusiones, mutaciones y fetches). #25548 (Nikita Mikhaylov).
  • Permitir extraer como cadena un elemento que no sea de tipo cadena mediante JSONExtract. Esto es para #25414. #25452 (Amos Bird).
  • Se admite una expresión regular en el argumento Database de StorageMerge. Cierra #776. #25064 (flynn).
  • UI web: si el valor parece una URL, generar un enlace automáticamente. #25965 (alexey-milovidov).
  • Permite que sudo service clickhouse-server start funcione en sistemas con systemd, como CentOS 8. Cierra #14298. Cierra #17799. #25921 (alexey-milovidov).

Corrección de errores

  • Se corrige el uso incorrecto de SET ROLE en algunos casos. #26707 (Vitaly Baranov).
  • Se corrige una posible desreferenciación de nullptr en las funciones de ventana. Corrige #25276. #26668 (Alexander Kuzmenkov).
  • Corrige los nombres incorrectos de las funciones groupBitmapAnd/Or/Xor. Soluciona #26557 (Amos Bird).
  • Se corrige un fallo en el apagado de RabbitMQ en caso de que no se hubiera iniciado la puesta en marcha de RabbitMQ. Cierra #26504. #26529 (Kseniia Sumarokova).
  • Se corrigen problemas con la consulta CREATE DICTIONARY si el nombre del diccionario o el nombre de la base de datos estaban entre comillas. Cierra #26491. #26508 (Maksim Kita).
  • Corrige la resolución de nombres que se rompía tras reescribir los alias de columna. Corrige #26432. #26475 (Amos Bird).
  • Corrige el flujo infinito de bloques sin join en el cierre de partial_merge_join #26325. #26374 (Vladimir C).
  • Se corrige un posible cierre inesperado al iniciar sesión con un usuario eliminado. Corrección #26073. #26363 (Vitaly Baranov).
  • Se corrige optimize_distributed_group_by_sharding_key para varias columnas (provoca resultados incorrectos con optimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1 y varias columnas en la expresión de la clave de segmentación). #26353 (Azat Khuzhin).
  • CAST de Date a DateTime (o DateTime64) no estaba usando la zona horaria del tipo DateTime. Esto también puede afectar a la comparación entre Date y DateTime. La inferencia del tipo común para Date y DateTime tampoco estaba usando la zona horaria correspondiente. Esto afectaba a los resultados de la función if y a la construcción de arrays. Cierra #24128. #24129 (Maksim Kita).
  • Se corrigió un error poco frecuente en la recuperación de réplicas perdidas que podía hacer que las réplicas divergieran. #26321 (tavplubix).
  • Se corrige la descompresión de zstd si hay secuencias de escape al final del búfer interno. Cierra #26013. #26314 (Kseniia Sumarokova).
  • Se corrige un error lógico en un join con totals; se cierra #26017. #26250 (Vladimir C).
  • Se elimina el salto de línea excesivo en la columna thread_name de la tabla system.stack_trace. Se corrige #24124. #26210 (alexey-milovidov).
  • Se corrige joinGet con columnas LowCarinality; se cierra #25993. #26118 (Vladimir C).
  • Corrige un posible bloqueo en pointInPolygon si el ajuste validate_polygons está desactivado. #26113 (alexey-milovidov).
  • Se corrige la excepción que se producía al iterar sobre un directorio remoto inexistente. #26087 (ianton-ru).
  • Se corrige un raro bloqueo del servidor debido a abort en el cliente de ZooKeeper. Corrige #25813. #26079 (alesapin).
  • Se corrige la estimación incorrecta del número de hilos para el join de la subconsulta derecha en algunos casos. Cierra #24075. #26052 (Vladimir C).
  • Se corrigió el sequence_id incorrecto en los paquetes del protocolo MySQL que ClickHouse envía cuando se produce una excepción durante la ejecución de consultas. Esto podría hacer que el cliente MySQL restablezca la conexión con el servidor ClickHouse. Corrige #21184. #26051 (tavplubix).
  • Se corrige un posible desajuste en el encabezado al usar una proyección normal con PREWHERE. Corrección de #26020. #26038 (Amos Bird).
  • Se corrige el formateo a JSON del tipo Map con claves enteras. #25982 (Anton Popov).
  • Se corrige un posible interbloqueo durante el desenrollado de la pila del perfilador de consultas. Se corrige #25968. #25970 (Maksim Kita).
  • Se corrigió un fallo al llamar a dictGet() con argumentos incorrectos. #25913 (Vitaly Baranov).
  • Se corrigió la autenticación scram-sha-256 para los motores de PostgreSQL. Cierra #24516. #25906 (Kseniia Sumarokova).
  • Corrige un backoff excesivamente largo en las tareas en segundo plano cuando el background pool está lleno. Corrige #25836. #25893 (alesapin).
  • Se corrige el manejo de excepciones en ARM con un tamaño de página distinto del predeterminado. Corrige #25512, #25044, #24901, #23183, #20221, #19703, #19028, #18391, #18121, #17994, #12483. #25854 (Maksim Kita).
  • Se corrige sharding_key de una columna sin función al usar remote() (antes, select * from remote('127.1', system.one, dummy) provocaba el error Unknown column: dummy, there are only columns .). #25824 (Azat Khuzhin).
  • Se corrigieron los errores Not found column ... y Missing column ... al seleccionar en MaterializeMySQL. Soluciona #23708, #24830, #25794. #25822 (tavplubix).
  • Se corrige optimize_skip_unused_shards_rewrite_in para tipos distintos de UInt64 (puede acabar seleccionando segmentos incorrectos o generar Cannot infer type of an empty tuple o Function tuple requires at least one argument). #25798 (Azat Khuzhin).
  • Se corrige un error poco frecuente en la consulta DROP PART para tablas ReplicatedMergeTree que puede provocar el mensaje de error Unexpected merged part intersecting drop range. #25783 (alesapin).
  • Se corrigió un error en TTL con una expresión GROUP BY que dejaba de ejecutar TTL después de la primera ejecución en una parte. #25743 (alesapin).
  • Permitir que StorageMerge acceda a las tablas con alias. Cierra #6051. #25694 (Kseniia Sumarokova).
  • Se corrige la lentitud de dict join en algunos casos, cierra #24209. #25618 (Vladimir C).
  • Se corrige ALTER MODIFY COLUMN para columnas que participan en expresiones TTL. #25554 (Anton Popov).
  • Se corrige una aserción en PREWHERE con un tipo no UInt8; se cierra #19589. #25484 (Vladimir C).
  • Corrige un fallo de msan detectado con fuzzing. Corrige #22517. #26428 (Nikolai Kochetov).
  • Se actualizó la comprobación del comando chown en el entrypoint de Docker de clickhouse-server. Corrige el error ‘fallo al reiniciar el pod de Kubernetes del clúster (o timeout)’ en Kubernetes. #26545 (Ky Li).

Lanzamiento de ClickHouse v21.7, 2021-07-09

Cambio incompatible con versiones anteriores

  • Se mejoró el rendimiento de las consultas con conjuntos grandes definidos explícitamente. Se añadió la configuración de compatibilidad legacy_column_name_of_tuple_literal. Conviene establecerla en true mientras se realiza una actualización gradual del clúster desde una versión anterior a 21.7 hasta cualquier versión posterior. De lo contrario, las consultas distribuidas con conjuntos definidos explícitamente en la cláusula IN pueden fallar durante la actualización. #25371 (Anton Popov).
  • Cambio incompatible hacia delante y hacia atrás del tamaño máximo del búfer en clickhouse-keeper (una alternativa experimental a ZooKeeper). Es mejor hacerlo ahora (antes de entrar en producción) que más adelante. #25421 (alesapin).

Nueva característica

  • Soporte para la configuración en formato YAML como alternativa a XML. Esto cierra #3607. #21858 (BoloniniD).
  • Proporciona una forma de restaurar una tabla replicada cuando los datos están (posiblemente) presentes, pero se han perdido los metadatos de ZooKeeper. Resuelve #13458. #13652 (Mike Kot).
  • Soporte para structs y maps en los formatos Arrow/Parquet/ORC, y para diccionarios en los formatos de entrada/salida Arrow. Introduce el nuevo ajuste output_format_arrow_low_cardinality_as_dictionary. #24341 (Kruglov Pavel).
  • Se añadió compatibilidad con el tipo Array en diccionarios. #25119 (Maksim Kita).
  • Se añadió la función bitPositionsToArray. Cierra #23792. Autor: [Kevin Wan] (@MaxWk). #25394 (Maksim Kita).
  • Se añadió la función dateName para devolver nombres como ‘Friday’ o ‘April’. Autor: [Daniil Kondratyev] (@dankondr). #25372 (Maksim Kita).
  • Se añadió la función toJSONString para serializar columnas en sus representaciones JSON. #25164 (Amos Bird).
  • Ahora query_log tiene dos columnas nuevas: initial_query_start_time, initial_query_start_time_microsecond, que registran la hora de inicio de una consulta distribuida, si existe. #25022 (Amos Bird).
  • Se añadió la función de agregado segmentLengthSum. #24250 (flynn).
  • Se añadió un nuevo ajuste booleano prefer_global_in_and_join que hace que todos los IN/JOIN sean GLOBAL IN/JOIN de forma predeterminada. #23434 (Amos Bird).
  • Soporte para consultas ALTER DELETE en el engine de tabla Join. #23260 (foolchi).
  • Se añadió la función de agregado quantileBFloat16, así como las correspondientes quantilesBFloat16 y medianBFloat16. Es un estimador de quantile muy simple y rápido, con un error relativo no superior al 0.390625%. Esto cierra #16641. #23204 (Ivan Novitskiy).
  • Se implementó la función sequenceNextNode(), útil para flow analysis. #19766 (achimbab).

Característica experimental

  • Se agregó compatibilidad con un sistema de archivos virtual sobre HDFS. #11058 (overshov) (Kseniia Sumarokova).
  • Ahora clickhouse-keeper (una alternativa experimental a ZooKeeper) admite ACL de digest similares a las de ZooKeeper. #24448 (alesapin).

Mejora del rendimiento

  • Se añadió una optimización que transforma algunas funciones en lecturas de subcolumnas para reducir la cantidad de datos leídos. Por ejemplo, la instrucción col IS NULL se transforma en la lectura de la subcolumna col.null. La optimización puede habilitarse mediante la configuración optimize_functions_to_subcolumns, que actualmente está desactivada de forma predeterminada. #24406 (Anton Popov).
  • Se reescriben más columnas como posibles expresiones de alias. Esto puede permitir mejores optimizaciones, como las proyecciones. #24405 (Amos Bird).
  • El índice de tipo bloom_filter puede usarse para expresiones con la función hasAny y arrays constantes. Esto cierra: #24291. #24900 (Vasily Nemkov).
  • Se añadió backoff exponencial para reprogramar el intento de lectura en caso de que las colas de RabbitMQ estén vacías. (ClickHouse admite la importación de datos desde RabbitMQ). Cierra #24340. #24415 (Kseniia Sumarokova).

Mejora

  • Permite limitar el ancho de banda de la replicación. Añade dos configuraciones de Replicated*MergeTree: max_replicated_fetches_network_bandwidth y max_replicated_sends_network_bandwidth, que permiten limitar la velocidad máxima de los fetches/envíos replicados de la tabla. Añade dos configuraciones para todo el servidor (en el perfil de usuario default): max_replicated_fetches_network_bandwidth_for_server y max_replicated_sends_network_bandwidth_for_server, que limitan la velocidad máxima de replicación para todas las tablas. Las configuraciones no se respetan con total precisión. Desactivadas de forma predeterminada. Corrige #1821. #24573 (alesapin).
  • Restricciones de recursos y aislamiento para los bridges ODBC y Library. Use un grupo y un usuario clickhouse-bridge independientes para los procesos de bridge. Configure oom_score_adj para que los bridges sean los primeros candidatos para el OOM killer. Establezca el RSS máximo en 1 GiB. Cierra #23861. #25280 (Kseniia Sumarokova).
  • Se añadió un enlace simbólico independiente clickhouse-keeper al binario principal clickhouse. Ahora es posible ejecutar la coordinación sin el servidor principal de ClickHouse. #24059 (alesapin).
  • Usar la configuración global para las consultas a VIEW. Se corrigió el comportamiento cuando las consultas a VIEW usan configuraciones locales, lo que provoca errores si la configuración de CREATE VIEW y SELECT es diferente. Por ahora, VIEW no usará estas configuraciones modificadas, pero aún puedes pasar configuraciones adicionales en la sección SETTINGS de la consulta CREATE VIEW. Cierra #20551. #24095 (Vladimir).
  • Al iniciar el servidor, las partes con un ID de partición incorrecto nunca se eliminaban, sino que siempre se marcaban como detached. #25070. #25166 (Nikolai Kochetov).
  • Aumenta el tamaño del pool de programación en segundo plano a 128 (ajuste background_schedule_pool_size). Permite evitar que la cola de replicación quede bloqueada cuando la conexión con ZooKeeper es lenta. #25072 (alesapin).
  • Añade la configuración de MergeTree max_parts_to_merge_at_once, que limita el número de partes que pueden fusionarse en segundo plano a la vez. No afecta a la consulta OPTIMIZE FINAL. Corrige #1820. #24496 (alesapin).
  • Se permite usar el operador NOT IN en la poda de particiones. #24894 (Amos Bird).
  • Reconocer como locales las direcciones IPv4 como 127.0.1.1. Esto es controvertido y resuelve #23504. Michael Filimonov probará esta función. #24316 (alexey-milovidov).
  • La base de datos de ClickHouse creada con MaterializeMySQL (es una funcionalidad experimental) ahora contiene todos los comentarios de las columnas de la base de datos de MySQL materializada. #25199 (Storozhuk Kostiantyn).
  • Se agregan ajustes (connection_auto_close/connection_max_tries/connection_pool_size) al motor de almacenamiento MySQL. #24146 (Azat Khuzhin).
  • Mejora el tiempo de arranque del motor Distributed. #25663 (Azat Khuzhin).
  • Mejora de las tablas Distributed. Se eliminan las réplicas de dirname para internal_replication=true (permite INSERT en Distributed con clústeres con cualquier número de réplicas; antes solo se admitían 15 réplicas; por encima de ese límite fallaba con ENAMETOOLONG al crear el directorio para bloques asíncronos). #25513 (Azat Khuzhin).
  • Se añadió soporte para el tipo Interval en LowCardinality. Se necesita para los valores intermedios de algunas expresiones. Cierra #21730. #25410 (Vladimir).
  • Se añade el operador == en las condiciones de tiempo para las funciones sequenceMatch y sequenceCount. Por ejemplo: sequenceMatch(’(?1)(?t==1)(?2)’)(time, data = 1, data = 2). #25299 (Christophe Kalenzaga).
  • Se añaden las configuraciones http_max_fields, http_max_field_name_size, http_max_field_value_size. #25296 (Ivan).
  • Se añadió compatibilidad para la función if con tipos Decimal e Int en sus ramas. Esto cierra #20549. Esto cierra #10142. #25283 (alexey-milovidov).
  • Actualiza el prompt de clickhouse-client y muestra un mensaje al reconectarse. Esto cierra #10577. #25281 (alexey-milovidov).
  • Se corrigió el seguimiento del uso de memoria en la función de agregación topK. Esto cierra #25259. #25260 (alexey-milovidov).
  • Se corrigió topLevelDomain para hosts IDN (es decir, example.рф); antes devolvía una cadena vacía para estos hosts. #25103 (Azat Khuzhin).
  • Detectar la versión del kernel de Linux en tiempo de ejecución (para que funcione epoll anidado, esto es necesario para async_socket_for_remote/use_hedged_requests; de lo contrario, las consultas remotas pueden quedar bloqueadas). #25067 (Azat Khuzhin).
  • Para consultas distribuidas, cuando optimize_skip_unused_shards=1, se permite omitir un segmento con una condición como (sharding key) IN (tupla de un elemento). (Las tuplas con muchos elementos eran compatibles. La tupla de un solo elemento no funcionaba porque se interpreta como un literal). #24930 (Amos Bird).
  • Se mejoraron los mensajes de registro para errores de S3; ya no hay espacios en blanco dobles cuando las claves y los buckets están vacíos. #24897 (Vladimir Chebotarev).
  • Algunas consultas requieren un análisis semántico en varias pasadas. Pruebe a reutilizar los conjuntos ya creados para IN en este caso. #24874 (Amos Bird).
  • Se tiene en cuenta max_distributed_connections para insert_distributed_sync (de lo contrario, en clústeres muy grandes y con inserción síncrona, podría agotarse max_thread_pool_size). #24754 (Azat Khuzhin).
  • Evita ocultar errores como Limit for rows or bytes to read exceeded en las subconsultas escalares. #24545 (nvartolomei).
  • Hacer más estricto el analizador de String a Int para que toInt64('+') genere una excepción. #24475 (Amos Bird).
  • Si SSD_CACHE se crea mediante una consulta DDL, solo puede crearse dentro del directorio user_files. #24466 (Maksim Kita).
  • Compatibilidad con PostgreSQL para especificar un esquema distinto del predeterminado para las consultas INSERT. Cierra #24149. #24413 (Kseniia Sumarokova).
  • Se corrige la resolución de direcciones IPv6 (es decir, se corrige select * from remote('[::1]', system.one)). #24319 (Azat Khuzhin).
  • Corrige los espacios en blanco finales en la cláusula FROM con subconsultas en modo multilínea y también modifica ligeramente la salida de las consultas para hacerla más legible. #24151 (Azat Khuzhin).
  • Mejora para las tablas distribuidas. Se añade la posibilidad de dividir el batch distribuido en caso de fallo (es decir, debido a límites de memoria o corrupciones) con distributed_directory_monitor_split_batch_on_failure (OFF de forma predeterminada). #23864 (Azat Khuzhin).
  • Se resuelven los conflictos de nombres de columnas para el motor de tabla Join. Cierra #20309. #23769 (Vladimir).
  • Mostrar el progreso del motor de tabla File en clickhouse-local y de la consulta INSERT en clickhouse-client cuando los datos se envían a stdin. Cierra #18209. #23656 (Kseniia Sumarokova).
  • Correcciones y mejoras de clickhouse-copier. Permite copiar tablas con esquemas distintos (pero compatibles). Cierra #9159. Se añadió una prueba para copiar ReplacingMergeTree. Cierra #22711. Compatibilidad con TTL en columnas e índices de omisión de datos. Simplemente los elimina para crear la tabla Distributed interna (la tabla subyacente tendrá TTL e índices de omisión). Cierra #19384. Permite copiar columnas MATERIALIZED y ALIAS. En algunos casos esto puede ser útil (p. ej., si esta columna está en PRIMARY KEY). Ahora se puede permitir estableciendo la propiedad allow_to_copy_alias_and_materialized_columns en true en la configuración de la tarea. Cierra #9177. Cierra [#11007] (https://github.com/ClickHouse/ClickHouse/issues/11007). Cierra #9514. Se añadió la propiedad allow_to_drop_target_partitions en la configuración de la tarea para eliminar una partición de la tabla original antes de mover las tablas auxiliares. Cierra #20957. Elimina la consulta OPTIMIZE DEDUPLICATE. Este truco era necesario porque ALTER TABLE MOVE PARTITION se reintentaba muchas veces y las tablas MergeTree simples no tienen deduplicación. Cierra #17966. Escribe el progreso en el nodo de ZooKeeper en la ruta task_path + /status en formato JSON. Cierra #20955. Compatibilidad con ReplicatedTables sin argumentos. Cierra #24834 .#23518 (Nikita Mikhaylov).
  • Se añadió una pausa con backoff entre los reintentos de lectura desde S3. #23461 (Vladimir Chebotarev).
  • Respeta insert_allow_materialized_columns (permite columnas materializadas) para INSERT en la tabla Distributed. #23349 (Azat Khuzhin).
  • Se añade la posibilidad de delegar LIMIT en las consultas distribuidas. #23027 (Azat Khuzhin).
  • Se corrige la replicación zero-copy con varios volúmenes de S3 (corrige #22679). #22864 (ianton-ru).
  • Determinar el número de puerto real asignado cuando un usuario solicita cualquier puerto disponible al sistema operativo para mostrarlo en el mensaje de registro. #25569 (bnaecker).
  • Se corrigió el caso en el que, a veces, la conversión de arrays de Postgres producía el tipo de datos String en lugar de un array n-dimensional, porque attndims funciona incorrectamente en algunos casos. Cierra #24804. #25538 (Kseniia Sumarokova).
  • Se corrige la conversión de DateTime con zona horaria en MySQL, PostgreSQL y ODBC. Cierra #5057. #25528 (Kseniia Sumarokova).
  • Distinguir KILL MUTATION entre distintas tablas (corrige el error inesperado Cancelled mutating parts). #25025 (Azat Khuzhin).
  • Permite declarar un disco S3 en la raíz del bucket (el sistema de archivos virtual de S3 es una característica experimental en desarrollo). #24898 (Vladimir Chebotarev).
  • Habilita la lectura de subcolumnas (p. ej., componentes de Tuples) para tablas distribuidas. #24472 (Anton Popov).
  • Una mejora para el protocolo de compatibilidad con MySQL: hacer que la función user devuelva el resultado correcto. Cierra #25697. #25697 (sundyli).

Corrección de errores

  • Mejora de la compatibilidad con versiones anteriores. Se usa la versión anterior de la función de módulo cuando se utiliza en la clave de partición. Cierra #23508. #24157 (Kseniia Sumarokova).
  • Corrige un error extremadamente raro en servidores con poca memoria que puede impedir realizar merges sin reiniciar. Posiblemente corrige #24603. #24872 (alesapin).
  • Corrige un error extremadamente raro, Tagging already tagged part, en la cola de replicación durante operaciones concurrentes de alter move/replace partition. Posiblemente corrige #22142. #24961 (alesapin).
  • Corrige un posible fallo al calcular estados de funciones de agregado mediante la agregación de estados de funciones de agregado de otras funciones de agregado (no es un caso de uso práctico). Véase #24523. #25015 (alexey-milovidov).
  • Se corrigió el comportamiento cuando la consulta SYSTEM RESTART REPLICA o SYSTEM SYNC REPLICA no finalizaba. Esto se detectó en un servidor con una cantidad extremadamente baja de RAM. #24457 (Nikita Mikhaylov).
  • Corrige un error que puede hacer que el cliente de ZooKeeper se quede colgado dentro de clickhouse-server. #24721 (alesapin).
  • Si se perdió la conexión con ZooKeeper y la réplica se clonó después de restablecerla, su cola de replicación podía contener entradas obsoletas. Se corrigió una aserción fallida cuando la cola de replicación contiene partes virtuales que se intersecan. Esto puede ocurrir en raras ocasiones si se pierde alguna parte de datos. Ahora se registra un error en el log en lugar de finalizar. #24777 (tavplubix).
  • Se corrige la pérdida de la condición WHERE en la optimización de inserción de expresiones del plan de consulta (con query_plan_filter_push_down = 1 de forma predeterminada). Corrige #25368. #25370 (Nikolai Kochetov).
  • Corrige un error que puede provocar partes solapadas después de las fusiones con TTL: Part all_40_40_0 is covered by all_40_40_1 but should be merged into all_40_41_1. This shouldn't happen often.. #25549 (alesapin).
  • Si se pierde la conexión con ZooKeeper, la tabla ReplicatedMergeTree puede esperar a que finalicen las operaciones en segundo plano antes de intentar reconectarse. Esto ya se corrigió: ahora las operaciones en segundo plano se detienen de forma forzosa. #25306 (tavplubix).
  • Se corrige el error Key expression contains comparison between inconvertible types en consultas con ARRAY JOIN cuando se usa un Array en la clave primaria. Corrige #8247. #25546 (Anton Popov).
  • Corrige los totales incorrectos para la consulta WITH TOTALS y WITH FILL. Corrige #20872. #25539 (Anton Popov).
  • Se corrigió una condición de carrera al consultar system.clusters mientras se recargaba la configuración del clúster al mismo tiempo. #25737 (Amos Bird).
  • Se solucionó el error No such file or directory al mover una tabla Distributed entre bases de datos. Corrige #24971. #25667 (tavplubix).
  • REPLACE PARTITION podía ignorarse en casos excepcionales si la partición de origen estaba vacía. Ya se ha corregido. Corrige #24869. #25665 (tavplubix).
  • Se corrigió un error en el motor de base de datos Replicated que, en raras ocasiones, podía hacer que alguna réplica omitiera una consulta DDL encolada. #24805 (tavplubix).
  • Se corrige la desreferenciación de puntero nulo en EXPLAIN AST sin consulta. #25631 (Nikolai Kochetov).
  • Corrige la espera durante la eliminación automática de partes vacías. Podía provocar la saturación total del background pool y el bloqueo de la replicación. #23315 (Anton Popov).
  • Se corrige la restauración de una tabla almacenada en el sistema de archivos virtual de S3 (se trata de una funcionalidad experimental que no está lista para producción). #25601 (ianton-ru).
  • Se corrige la desreferencia de nullptr en el formato Arrow al usar Decimal256. Se añade compatibilidad con Decimal256 en el formato Arrow. #25531 (Kruglov Pavel).
  • Se corrige el exceso de guiones bajos antes de los nombres de los archivos de configuración preprocesados. #25431 (Vitaly Baranov).
  • Corrección en la herramienta clickhouse-copier: se corrige un fallo de segmentación cuando falta sharding&#95;key en la configuración de la tarea de copier. #25419 (Nikita Mikhaylov).
  • Corrige el transformador de columnas REPLACE cuando se usa en DDL entrecomillando correctamente la consulta formateada. Esto corrige #23925. #25391 (Amos Bird).
  • Se corrige la posibilidad de un comportamiento no determinista en la función quantileDeterministic y otras similares. Esto cierra #20480. #25313 (alexey-milovidov).
  • Se añade compatibilidad con SimpleAggregateFunction(LowCardinality) para SummingMergeTree. Corrige #25134. #25300 (Nikolai Kochetov).
  • Se corrigió un error lógico relacionado con el mensaje de excepción “No se puede sumar Array/Tuple en min/maxMap”. #25298 (Kruglov Pavel).
  • Se corrige el error Bad cast from type DB::ColumnLowCardinality to DB::ColumnVector<char8_t> en consultas donde se usó el argumento LowCardinality para IN (este error apareció en la versión 21.6). Corrige #25187. #25290 (Nikolai Kochetov).
  • Corrige el comportamiento incorrecto de joinGetOrNull con columnas no anulables. Esto soluciona #24261. #25288 (Amos Bird).
  • Se corrige el comportamiento erróneo y el informe de UBSan en enteros grandes. En versiones anteriores, CAST(1e19 AS UInt128) devolvía cero. #25279 (alexey-milovidov).
  • Se corrigió un error que se producía al insertar un subconjunto de columnas en formato CSVWithNames. Soluciona #25129. #25169 (Nikita Mikhaylov).
  • No utilice la proyección de la tabla con SELECT y FINAL. Aún no es compatible. #25163 (Amos Bird).
  • Se corrige la posible pérdida de partes después de actualizar hasta la versión 21.5, en caso de que la tabla usara UUID en la clave de partición. (No se recomienda usar UUID en la clave de partición). Corrige #25070. #25127 (Nikolai Kochetov).
  • Se corrige un fallo en una consulta con CROSS JOIN y joined_subquery_requires_alias = 0. Soluciona #24011. #25082 (Nikolai Kochetov).
  • Se corrigió un error con mapas constantes en la función mapContains que provocaba el mensaje de error empty column was returned by function mapContains. Cierra #25077. #25080 (Kruglov Pavel).
  • Se elimina la posibilidad de crear tablas con columnas que se referencian a sí mismas, como a UInt32 ALIAS a + 1 o b UInt32 MATERIALIZED b. Corrige #24910, #24292. #25059 (alesapin).
  • Corrige un resultado incorrecto al usar una proyección agregada con una clave GROUP BY no vacía para ejecutar una consulta con GROUP BY sobre una clave vacía. #25055 (Amos Bird).
  • Se corrige la serialización de mensajes anidados divididos en el formato Protobuf. Este PR corrige #24647. #25000 (Vitaly Baranov).
  • Corrige la configuración de LIMIT/OFFSET para las consultas distribuidas (se ignoran en los nodos remotos). #24940 (Azat Khuzhin).
  • Se corrigió un posible heap-buffer-overflow en el formato Arrow. #24922 (Kruglov Pavel).
  • Se corrigió un posible error: ‘Cannot read from istream at offset 0’ al leer un archivo desde DiskS3 (el sistema de archivos virtual de S3 es una función experimental en desarrollo y no debe usarse en producción). #24885 (Pavel Kovalenko).
  • Se corrigió la excepción “Missing columns” al realizar un join sobre una vista materializada distribuida. #24870 (Azat Khuzhin).
  • Permite valores NULL en el protocolo de compatibilidad con PostgreSQL. Cierra #22622. #24857 (Kseniia Sumarokova).
  • Se corrige un error por el que la excepción Mutation was killed podía enviarse al cliente al esperar una mutación, cuando esta aún no se había cargado en memoria. #24809 (alesapin).
  • Se corrigió un error en la deserialización del estado del generador aleatorio que podía provocar que algunos tipos de datos, como AggregateFunction(groupArraySample(N), T)), se comportaran de forma no determinista. #24538 (tavplubix).
  • Prohibir la creación de uniqXXXXStates a partir de otros estados de agregación. #24523 (Raúl Marín). Luego se volvió a permitir tras eliminar realmente la causa raíz del problema relacionado. (alexey-milovidov).
  • Se corrige el uso de tuplas en consultas CREATE .. AS SELECT. #24464 (Anton Popov).
  • Corrige el cálculo del total de bytes en la tabla Buffer. En la versión actual de ClickHouse, el contador total_writes.bytes disminuye demasiado durante el vaciado del búfer. Esto provoca un desbordamiento del contador y hace que totalBytes devuelva algo en torno a 17.44 EB al cabo de un tiempo tras el vaciado. #24450 (DimasKovas).
  • Corrige información incorrecta sobre la monotonicidad de la función toWeek. Esto corrige #24422 . Este error se introdujo en https://github.com/ClickHouse/ClickHouse/pull/5212 , y más tarde quedó al descubierto por un mecanismo de poda de particiones más inteligente. #24446 (Amos Bird).
  • Cuando la autenticación de usuarios se gestiona mediante LDAP. Se corrigió un posible interbloqueo que puede producirse durante el (re)mapeo de roles de LDAP cuando un grupo de LDAP se asigna a un rol local inexistente. #24431 (Denis Glazachev).
  • En el mensaje “multipart/form-data”, considerar el CRLF que precede a un delimitador como parte de este. Corrige #23905. #24399 (Ivan).
  • Se corrigió DROP PARTITION con partes ficticias de INTERSECT. En casos excepcionales, puede haber partes con una versión de mutación superior al número de bloque actual. #24321 (Amos Bird).
  • Se corrigió un error al mover una vista materializada de una base de datos Ordinary a una base de datos Atomic (consulta RENAME TABLE). Ahora la tabla interna se mueve a la nueva base de datos junto con la vista materializada. Corrige #23926. #24309 (tavplubix).
  • Permite cabeceras HTTP vacías. Corrige #23901. #24285 (Ivan).
  • Procesamiento correcto de las mutaciones (ALTER UPDATE/DELETE) en tablas Memory. Soluciona #24274. #24275 (flynn).
  • Hacer que la propiedad LowCardinality de la columna en la salida de JOIN sea igual que en la entrada, cierra #23351, cierra #20315. #24061 (Vladimir).
  • Corrección para las tablas de Kafka. Corrige un error en el comportamiento de failover por el que Engine = Kafka no podía iniciar el consumo si ese mismo consumidor se había quedado previamente sin asignaciones. Cierra #21118. #21267 (filimonov).

Mejora de compilación/pruebas/empaquetado

  • Se añaden compilaciones darwin-aarch64 (Mac M1 / Apple Silicon) en CI #25560 (Ivan) y se agregan enlaces en la documentación y el sitio web (alexey-milovidov).
  • Añade la incrustación multiplataforma de recursos binarios en ejecutables. Funciona en Illumos. #25146 (bnaecker).
  • Añade opciones relacionadas con join a las pruebas de estrés para mejorar el fuzzing. #25200 (Vladimir).
  • Habilita la compilación con el módulo S3 en OSX #25217. #25218 (kevin wan).
  • Añade casos de prueba de integración para cubrir el puente JDBC. #25047 (Zhichun Wu).
  • La configuración de las pruebas de integración tiene un tratamiento especial para los diccionarios. Se eliminó la configuración manual restante de diccionarios. #24728 (Ilya Yatsishin).
  • Añade pruebas de libfuzzer para la clase YAMLParser. #24480 (BoloniniD).
  • Ahora se usa Ubuntu 20.04 para ejecutar las pruebas de integración; la versión de docker-compose utilizada para ejecutarlas se actualizó a la 1.28.2. Las variables de entorno ahora surten efecto en docker-compose. Se rehízo test_dictionaries_all_layouts_separate_sources para permitir la ejecución en paralelo. #20393 (Ilya Yatsishin).
  • Corrige un error TOCTOU en el script de instalación. #25277 (alexey-milovidov).

Lanzamiento de ClickHouse 21.6, 2021-06-05

Cambio incompatible con versiones anteriores

  • uniqState / uniqHLL12State / uniqCombinedState / uniqCombined64State producen estados incompatibles con el tipo UUID. #33607.

Notas de actualización

  • La biblioteca de compresión zstd se ha actualizado a la versión 1.5.0. Es posible que reciba mensajes de “checksum does not match” en la replicación. Estos mensajes son normales debido a la actualización del algoritmo de compresión y puede ignorarlos. Son meramente informativos y no indican ningún tipo de comportamiento no deseado.
  • La configuración compile_expressions está habilitada de forma predeterminada. Aunque se ha probado exhaustivamente en una amplia variedad de escenarios, si detecta algún comportamiento no deseado en sus servidores, puede intentar desactivar esta configuración.
  • Los valores de tipo UUID no pueden compararse con enteros. Por ejemplo, en lugar de escribir uuid != 0, escriba uuid != '00000000-0000-0000-0000-000000000000'.

Nueva característica

  • Se añade el operador de conversión de tipos al estilo de Postgres (::). P. ej.: [1, 2]::Array(UInt8), 0.1::Decimal(4, 4), number::UInt16. #23871 (Anton Popov).
  • Preparar los enteros grandes para su uso en producción. Añadir compatibilidad con el tipo de dato UInt128. Corregir problemas conocidos del tipo de dato Decimal256. Admitir enteros grandes en diccionarios. Admitir las funciones gcd/lcm para enteros grandes. Admitir enteros grandes en funciones de búsqueda en arrays y funciones condicionales. Admitir LowCardinality(UUID). Admitir enteros grandes en la función de tabla generateRandom y en clickhouse-obfuscator. Corregir el error al devolver UUID desde subconsultas escalares. Esto corrige #7834. Esto corrige #23936. Esto corrige #4176. Esto corrige #24018. Cambio incompatible con versiones anteriores: los valores de tipo UUID no pueden compararse con enteros. Por ejemplo, en lugar de escribir uuid != 0, escriba uuid != '00000000-0000-0000-0000-000000000000'. #23631 (alexey-milovidov).
  • Se admite el tipo de dato Array para insertar y seleccionar datos en los formatos Arrow, Parquet y ORC. #21770 (taylor12805).
  • Implementar comentarios en tablas. Cierra #23225. #23548 (flynn).
  • Se admite la creación de diccionarios con consultas DDL en clickhouse-local. Cierra #22354. Se añadió compatibilidad con DETACH DICTIONARY PERMANENTLY. Se añadió compatibilidad con EXCHANGE DICTIONARIES para el engine de base de datos Atomic. Se añadió compatibilidad para mover diccionarios entre bases de datos con RENAME DICTIONARY. #23436 (Maksim Kita).
  • Se añade la función de agregación uniqTheta para admitir Theta Sketch en ClickHouse. #23894. #22609 (Ping Yu).
  • Se añadió la función splitByRegexp. #24077 (abel-cheng).
  • Se añade la función arrayProduct, que acepta un array como parámetro y devuelve el producto de todos los elementos del array. Cierra #21613. #23782 (Maksim Kita).
  • Se añade la columna thread_name en system.stack_trace. Esto cierra #23256. #24124 (abel-cheng).
  • Si insert_null_as_default = 1, se insertan valores predeterminados en lugar de NULL en las consultas INSERT ... SELECT e INSERT ... SELECT ... UNION ALL .... Cierra #22832. #23524 (Kseniia Sumarokova).
  • Se añadió soporte para mostrar el progreso en clickhouse-local con la opción --progress. #23196 (Egor Savin).
  • Se añade compatibilidad con la compresión HTTP (determinada por el encabezado HTTP Content-Encoding) en la fuente de diccionario http. Esto corrige #8912. #23946 (FArthur-cmd).
  • Se añadieron SYSTEM QUERY RELOAD MODEL, SYSTEM QUERY RELOAD MODELS. Resuelve #18722. #23182 (Maksim Kita).
  • Se añade la opción json (booleana, 0 de forma predeterminada) para la consulta EXPLAIN PLAN. Cuando está habilitada, la salida de la consulta será una única fila JSON. Se recomienda usar el formato TSVRaw para evitar escapes innecesarios. #23082 (Nikolai Kochetov).
  • Se añade la opción indexes (booleano, desactivado de forma predeterminada) a la consulta EXPLAIN PIPELINE. Cuando está activada, muestra los índices utilizados y el número de partes y gránulos filtrados para cada índice aplicado. Compatible con tablas MergeTree*. #22352 (Nikolai Kochetov).
  • LDAP: se implementó la funcionalidad de detección de user DN para su uso al mapear grupos de Active Directory a roles de ClickHouse. #22228 (Denis Glazachev).
  • Nueva función de agregación deltaSumTimestamp para sumar la diferencia entre filas consecutivas, manteniendo el orden durante la fusión mediante el almacenamiento de marcas de tiempo. #21888 (Russ Frank).
  • Se añadió para S3 un proveedor de credenciales IMDS menos seguro que funciona correctamente en Docker. #21852 (Vladimir Chebotarev).
  • Vuelve a agregar la función indexHint. Esto corresponde a #21238. Revierte #9542. Corrige #9540. #21304 (Amos Bird).

Funcionalidad experimental

  • Se agregó compatibilidad con PROJECTION para las tablas MergeTree*. #20202 (Amos Bird).

Mejora de rendimiento

  • Se habilita la configuración compile_expressions de forma predeterminada. Cuando esta configuración está habilitada, las composiciones de funciones simples y operadores se compilan a código nativo con LLVM en tiempo de ejecución. #8482 (Maksim Kita, alexey-milovidov). Nota: si tienes problemas, desactiva esta opción.
  • Se actualiza la biblioteca re2. Se mejora el rendimiento de la coincidencia de expresiones regulares. Además, este PR añade compatibilidad con gcc-11. #24196 (Raúl Marín).
  • Lectura del formato de entrada ORC por stripe, en lugar de leer toda la tabla en memoria de una sola vez, lo que consume mucha memoria cuando el tamaño del archivo es muy grande. #23102 (Chao Ma).
  • Fusión de las funciones de agregación sum, count y avg de una consulta en una sola función de agregación. La optimización se controla con la configuración optimize_fuse_sum_count_avg. Esto se implementa con una nueva función de agregación sumCount. Esta función devuelve una tupla de dos campos: sum y count. #21337 (hexiaoting).
  • Se actualiza zstd a v1.5.0. El rendimiento de la compresión mejora en unos pocos puntos porcentuales. #24135 (Raúl Marín). Nota: es posible que recibas mensajes sobre “checksum does not match” en la replicación. Estos mensajes son esperables debido a la actualización del algoritmo de compresión y puedes ignorarlos.
  • Se mejora el rendimiento de las tablas Buffer: no se adquiere un bloqueo para total_bytes/total_rows en el engine Buffer. #24066 (Azat Khuzhin).
  • Se recupera la compatibilidad con la preasignación para los diccionarios hashed/sparse_hashed. #23979 (Azat Khuzhin).
  • Se habilita async_socket_for_remote de forma predeterminada (menor cantidad de threads al consultar tablas Distributed con gran fanout). #23683 (Nikolai Kochetov).

Mejora

  • Se añade la columna virtual _partition_value a la familia de tablas MergeTree. Puede utilizarse para descartar particiones de forma determinista. Es necesaria para implementar el mecanismo de coincidencia de particiones para las mutaciones. #23673 (Amos Bird).
  • Se añadió el parámetro region para el almacenamiento y el disco en S3. #23846 (Vladimir Chebotarev).
  • Permite configurar distintos niveles de registro para diferentes canales de logging. Cierra #19569. #23857 (filimonov).
  • Conserve la timezone predeterminada en las operaciones con DateTime si no se ha especificado explícitamente. Por ejemplo, si añade un segundo a un valor de tipo DateTime sin timezone, seguirá siendo DateTime sin timezone. En versiones anteriores, el valor de la timezone predeterminada se añadía explícitamente al tipo de dato devuelto, por lo que pasaba a ser DateTime(‘something’). Esto cierra #4854. #23392 (alexey-milovidov).
  • Permite que el usuario especifique una cadena vacía en lugar del nombre de la base de datos para el almacenamiento MySQL. Se usará la base de datos predeterminada para las consultas. En versiones anteriores, esto funcionaba para las consultas SELECT, y también se añadió compatibilidad con INSERT. Esto cierra #19281. Esto puede resultar útil al trabajar con Sphinx u otras bases de datos externas compatibles con MySQL. #23319 (alexey-milovidov).
  • Se corrigió quantile(s)TDigest. Se añadió un tratamiento especial para los centroides singleton de acuerdo con tdunning/t-digest 3.2+. También se corrigió un error de compresión excesiva de centroides en la implementación de una versión anterior del algoritmo. #23314 (Vladimir Chebotarev).
  • La función now64 ahora admite un argumento opcional de zona horaria. #24091 (Vasily Nemkov).
  • Se corrige un problema por el que la barra de progreso en modo interactivo de clickhouse-client, al aparecer en medio de los datos, podía sobrescribir partes de los datos visibles en el terminal. Esto cierra #19283. #23050 (alexey-milovidov).
  • Se corrige un bloqueo cuando falla la asignación de memoria en simdjson. https://github.com/simdjson/simdjson/pull/1567 . Se clasifica como mejora porque es un error muy poco frecuente. #24147 (Amos Bird).
  • Conservar los diccionarios hasta que se apague el almacenamiento (esto evitará posibles errores external dictionary 'DICT' not found al apagar el servidor durante el vaciado final del motor Buffer). #24068 (Azat Khuzhin).
  • Vaciar las tablas Buffer antes de detener las tablas (dentro de una misma base de datos), para evitar que se descarten bloques porque la tabla subyacente ya se había marcado como detached (y el error Destination table default.a_data_01870 doesn't exist. Block of data is discarded en el log). #24067 (Azat Khuzhin).
  • Ahora prefer_column_name_to_alias = 1 también dará prioridad a los nombres de las columnas en group by, having y order by. Esto corrige #23882. #24022 (Amos Bird).
  • Se añade soporte para ORDER BY WITH FILL con DateTime64. #24016 (kevin wan).
  • Se habilita DateTime64 como columna de versión en ReplacingMergeTree. #23992 (kevin wan).
  • Registrar información sobre el nombre del sistema operativo, la versión del kernel y la arquitectura de la CPU al iniciar el servidor. #23988 (Azat Khuzhin).
  • Se admite especificar el esquema de la tabla para la fuente de diccionario postgresql. Cierra #23958. #23980 (Kseniia Sumarokova).
  • Se añaden sugerencias para los nombres de los elementos Enum (se sugieren nombres en caso de errores tipográficos). Cierra #17112. #23919 (flynn).
  • Se mide la tasa de aciertos (el porcentaje de casos en los que se encontró el valor) para los diccionarios (consulte found_rate en system.dictionaries). #23916 (Azat Khuzhin).
  • Permite añadir configuraciones específicas de la queue mediante la setting de table rabbitmq_queue_settings_list. (Cierra #23737 y #23918). Permite al usuario controlar toda la configuración de RabbitMQ: si la setting de table rabbitmq_queue_consume se establece en 1, el engine de table RabbitMQ solo se conectará a la queue especificada y no realizará ninguna configuración de RabbitMQ del lado del consumer, como declarar exchange, queues y bindings. (Cierra #21757). Añade una limpieza adecuada cuando se elimina la table RabbitMQ: elimina las queues que la table haya declarado y todos los exchanges vinculados, si fueron creados por la table. #23887 (Kseniia Sumarokova).
  • Se añaden broken_data_files/broken_data_compressed_bytes a system.distribution_queue. Se añade una métrica para el número de archivos de inserción asíncrona en tablas Distributed marcados como dañados (BrokenDistributedFilesToInsert). #23885 (Azat Khuzhin).
  • Al consultar system.tables, ya no se accede a ZooKeeper. #23793 (Fuwang Hu).
  • Se respeta lock_acquire_timeout_for_background_operations en las consultas OPTIMIZE. #23623 (Azat Khuzhin).
  • Posibilidad de cambiar la configuración del disco S3 en tiempo de ejecución con el nuevo comando SQL SYSTEM RESTART DISK. #23429 (Pavel Kovalenko).
  • Si el usuario aplicó una configuración incorrecta al establecer por error max_distributed_connections en cero, cada consulta a una tabla Distributed lanzará una excepción con un mensaje que contiene “logical error”. Pero en realidad se trata de un comportamiento esperado, no de un error lógico, por lo que el mensaje de la excepción era ligeramente incorrecto. Esto también activaba comprobaciones en nuestro entorno de CI que garantizan que nunca se produzcan errores lógicos. En su lugar, trataremos max_distributed_connections configurado incorrectamente en cero como el valor mínimo posible (uno). #23348 (Azat Khuzhin).
  • Se deshabilita min_bytes_to_use_mmap_io de forma predeterminada. #23322 (Azat Khuzhin).
  • Se admite la nulabilidad en LowCardinality con join_use_nulls, cierra #15101. #23237 (vdimir).
  • Se añadió la posibilidad de restaurar partes de MergeTree al directorio detached para el disco S3. #23112 (Pavel Kovalenko).
  • Reintentos cuando se cae la conexión HTTP en S3. #22988 (Vladimir Chebotarev).
  • Se añaden las configuraciones external_storage_max_read_rows y external_storage_max_read_rows para el motor de tabla MySQL, la fuente del diccionario y las recuperaciones menores de datos de MaterializeMySQL. #22697 (TCeason).
  • MaterializeMySQL (función experimental): Anteriormente, MySQL 5.7.9 no era compatible por incompatibilidades de SQL. Ahora la verificación de parámetros de MySQL se deja en manos de MaterializeMySQL. #23413 (TCeason).
  • Se habilita la lectura de subcolumnas para tablas distribuidas. #24472 (Anton Popov).
  • Se corrige el uso de tuplas en consultas CREATE .. AS SELECT. #24464 (Anton Popov).
  • Compatibilidad con el formato Parquet en las tablas Kafka. #23412 (Chao Ma).

Corrección de errores

  • Usar la versión anterior de la función módulo cuando se use en la clave de partición y la clave primaria. Cierra #23508. #24157 (Kseniia Sumarokova). Provocaba incompatibilidades con versiones anteriores en lanzamientos previos.
  • Se corrigió el comportamiento cuando la consulta SYSTEM RESTART REPLICA o SYSTEM SYNC REPLICA quedaba procesándose indefinidamente. Esto se detectó en un servidor con una cantidad extremadamente reducida de RAM. #24457 (Nikita Mikhaylov).
  • Se corrige la monotonía incorrecta de la función toWeek. Esto corrige #24422. Este error se introdujo en #5212 y quedó expuesto más tarde por un podador de particiones más inteligente. #24446 (Amos Bird).
  • Se corrige DROP PARTITION con partes ficticias de intersect. En casos excepcionales, puede haber partes con una versión de mutación superior al número de bloque actual. #24321 (Amos Bird).
  • Se corrigió un error al mover una vista materializada de una base de datos Ordinary a Atomic (consulta RENAME TABLE). Ahora, la tabla interna se mueve a la nueva base de datos junto con la vista materializada. Corrige #23926. #24309 (tavplubix).
  • Permite encabezados HTTP vacíos en las solicitudes de cliente. Corrige #23901. #24285 (Ivan).
  • Establezca max_threads = 1 para corregir el fallo de la mutación de las tablas Memory. Cierra #24274. #24275 (flynn).
  • Se corrigió una errata en la implementación de las tablas Memory; este error se introdujo en #15127. Cierra #24192. #24193 (张中南).
  • Corrige la terminación anómala del servidor debido a que HDFS dejó de estar accesible durante la ejecución de la consulta. Cierra #24117. #24191 (Kseniia Sumarokova).
  • Se corrige un cierre inesperado al actualizar una columna Nested con una condición constante. #24183 (hexiaoting).
  • Se corrige una condición de carrera que podía producirse en RBAC con una carga elevada. Este PR corrige #24090, #24134,. #24176 (Vitaly Baranov).
  • Corrige un error poco frecuente que podía hacer que una tabla quedara parcialmente inicializada y aun así pudiera atender solicitudes de escritura (insert/alter/etc.). Ahora, esas tablas estarán en modo readonly. #24122 (alesapin).
  • Se corrigió un error: EXPLAIN PIPELINE con SELECT xxx FINAL mostraba una canalización incorrecta. (hexiaoting).
  • Se corrigió el uso de un valor DateTime constante frente a una columna DateTime64 en WHERE. #24100 (Vasily Nemkov).
  • Corrige un fallo que provocaba un cierre inesperado en merge JOIN, cierra #24010. #24013 (vdimir).
  • Algunas consultas ALTER PARTITION podían provocar los errores Part A intersects previous part B y Unexpected merged part C intersecting drop range D en la cola de replicación. Corregido. Soluciona #23296. #23997 (tavplubix).
  • Se corrige un SIGSEGV en GROUP BY externo y en la fila de desbordamiento (es decir, consultas como SELECT FROM GROUP BY WITH TOTALS SETTINGS max_bytes_before_external_group_by>0, max_rows_to_group_by>0, group_by_overflow_mode='any', totals_mode='before_having'). #23962 (Azat Khuzhin).
  • Se corrige el cómputo de las métricas de claves del diccionario CACHE cuando hay duplicados en el origen (lo que provoca desbordamientos de DictCacheKeysRequestedMiss). #23929 (Azat Khuzhin).
  • Se corrige la implementación del pool de conexiones del motor PostgreSQL. Cierra #23897. #23909 (Kseniia Sumarokova).
  • Corregido distributed_group_by_no_merge = 2 con GROUP BY y una función de agregado envuelta en una función normal (se había roto en #23546). Se lanza una excepción si alguien intenta usar distributed_group_by_no_merge = 2 con funciones de ventana. Se deshabilita optimize_distributed_group_by_sharding_key para consultas con funciones de ventana. #23906 (Azat Khuzhin).
  • Una corrección para la función de tabla s3: mejor gestión de los errores HTTP. Anteriormente se ignoraban los cuerpos de las respuestas de error HTTP. #23844 (Vladimir Chebotarev).
  • Una corrección para la s3 table function: mejor gestión de las URI. Se corrigió una incompatibilidad con las URL que contienen el símbolo +; antes no se podían leer los datos con dichas claves. #23822 (Vladimir Chebotarev).
  • Soluciona el error Can't initialize pipeline with empty pipe en consultas con GLOBAL IN/JOIN y use_hedged_requests. Corrige #23431. #23805 (Nikolai Kochetov).
  • Se corrige que CLEAR COLUMN no funcione cuando una vista materializada hace referencia a él. Cierra #23764. #23781 (flynn).
  • Se corrigió el uso de memoria del heap tras su liberación al leer desde HDFS si se utiliza el formato Values. #23761 (Kseniia Sumarokova).
  • Evita el posible error “Cannot schedule a task” (si se había producido alguna excepción) al hacer INSERT en Distributed. #23744 (Azat Khuzhin).
  • Se corrigió un error en la recuperación de una réplica ReplicatedMergeTree desactualizada. Una réplica desactualizada podía ignorar algunas actualizaciones de metadatos si se ejecutaba una consulta ALTER durante el tiempo de inactividad de la réplica. #23742 (tavplubix).
  • Soluciona un error con Join y WITH TOTALS, cierra #17718. #23549 (vdimir).
  • Corrige un posible error Block structure mismatch en consultas con UNION que podría producirse tras aplicar la optimización de pushdown de filtros. Corrige #23029. #23359 (Nikolai Kochetov).
  • Agregar la conversión de tipos cuando está habilitada la configuración optimize_skip_unused_shards_rewrite_in. Esto corrige un informe de MSan. #23219 (Azat Khuzhin).
  • Se añadió una comprobación que faltaba al actualizar subcolumnas anidadas, cierra la incidencia: #22353. #22503 (hexiaoting).

Mejora de compilación/pruebas/empaquetado

  • Soporte para la compilación en Illumos. #24144. Añade soporte para compilar en sistemas operativos derivados de Solaris. #23746 (bnaecker).
  • Se añaden más benchmarks para hash tables, incluida la Swiss Table de Google (que parecía ser más lenta que el hash map de ClickHouse en nuestro caso de uso específico). #24111 (Maksim Kita).
  • Se actualiza librdkafka de la versión 1.6.0-RC3 a la 1.6.1. #23874 (filimonov).
  • Activar siempre asynchronous-unwind-tables de forma explícita. Esto puede corregir el query profiler en AArch64. #23602 (alexey-milovidov).
  • Evitar una posible dependencia de compilación respecto de la configuración regional y del orden del filesystem. Esto permite compilaciones reproducibles. #23600 (alexey-milovidov).
  • Eliminar una fuente de no determinismo en la compilación. Ahora, las builds generadas en momentos distintos producirán binarios idénticos byte por byte. Parcialmente resuelto en #22113. #23559 (alexey-milovidov).
  • Añadir una herramienta sencilla para hacer benchmark de (Zoo)Keeper. #23038 (alesapin).

Lanzamiento de ClickHouse 21.5, 2021-05-20

Cambio incompatible con versiones anteriores

  • Se cambia la comparación entre enteros y números de punto flotante cuando el entero no puede representarse exactamente en el tipo de dato de punto flotante. En la nueva versión, la comparación devolverá false, ya que se producirá un error de redondeo. Ejemplo: 9223372036854775808.0 != 9223372036854775808, porque el número 9223372036854775808 no puede representarse exactamente como número de punto flotante (y 9223372036854775808.0 se redondea a 9223372036854776000.0). Sin embargo, en la versión anterior la comparación devolvía que los números eran iguales, porque si el número de punto flotante 9223372036854776000.0 se convertía de nuevo a UInt64, daba como resultado 9223372036854775808. Como referencia, el lenguaje de programación Python también considera estos números iguales. Pero este comportamiento dependía del modelo de CPU (con resultados distintos en AMD64 y AArch64 para algunos números fuera de rango), por lo que hacemos la comparación más precisa. Tratará los números int y float como iguales solo si el int está representado exactamente en el tipo de punto flotante. #22595 (alexey-milovidov).
  • Se elimina la compatibilidad de argMin y argMax con un único argumento Tuple. El código no era seguro en términos de memoria. Esta funcionalidad se añadió por error y resulta confusa para los usuarios. Estas funciones pueden volver a introducirse más adelante con otros nombres. Esto corrige #22384 y revierte #17359. #23393 (alexey-milovidov).

Nueva funcionalidad

  • Se añadieron las funciones dictGetChildren(dictionary, key), dictGetDescendants(dictionary, key, level). La función dictGetChildren devuelve todos los elementos hijo como un array de índices. Es una transformación inversa de dictGetHierarchy. La función dictGetDescendants devuelve todos los descendientes como si dictGetChildren se aplicara level veces de forma recursiva. Un valor de level igual a cero equivale a infinito. Se mejoró el rendimiento de las funciones dictGetHierarchy y dictIsIn. Cierra #14656. #22096 (Maksim Kita).
  • Se añadió la función dictGetOrNull. Funciona como dictGet, pero devuelve NULL si no se encuentra la clave en el Diccionario. Cierra #22375. #22413 (Maksim Kita).
  • Se añadió una table function s3Cluster, que permite procesar archivos de s3 en paralelo en cada nodo de un clúster especificado. #22012 (Nikita Mikhaylov).
  • Se añadió compatibilidad con réplicas y segmentos en el motor de tabla / table function de MySQL/PostgreSQL. Puede escribir SELECT * FROM mysql('host{1,2}-{1|2}', ...). Cierra #20969. #22217 (Kseniia Sumarokova).
  • Se añadió la consulta ALTER TABLE ... FETCH PART .... Es similar a FETCH PARTITION, pero recupera solo una parte. #22706 (turbo jason).
  • Se añadió la configuración max_distributed_depth, que limita la profundidad de las consultas recursivas sobre las tablas Distributed. Cierra #20229. #21942 (flynn).

Mejora de rendimiento

  • Se mejoró el rendimiento de intDiv mediante despacho dinámico para AVX2. Esto cierra #22314. #23000 (alexey-milovidov).
  • Se mejoró el rendimiento de la lectura con el input format ArrowStream para fuentes distintas de archivos locales (por ejemplo, URL). #22673 (nvartolomei).
  • Se deshabilitó la compresión de forma predeterminada al interactuar con localhost (con clickhouse-client o de server a server con distributed queries) mediante native protocol. Esto puede mejorar el rendimiento de algunas operaciones de importación/exportación. Esto cierra #22234. #22237 (alexey-milovidov).
  • Excluye los valores que no pertenecen al segmento de la parte derecha de la sección IN para distributed queries (en optimize_skip_unused_shards_rewrite_in, habilitado de forma predeterminada, ya que aún requiere optimize_skip_unused_shards). #21511 (Azat Khuzhin).
  • Se mejoró el rendimiento de la lectura de un subconjunto de columnas con motores de tabla similares a File y formatos orientados a columnas como Parquet, Arrow u ORC. Esto cierra #issue:20129. #21302 (keenwolf).
  • Se permite mover más conditions a PREWHERE, como ocurría antes de la versión 21.1 (ajuste de heurísticas internas). Un número insuficiente de conditions movidas podía dar lugar a un peor rendimiento. #23397 (Anton Popov).
  • Se mejoró el rendimiento de las conexiones ODBC y se corrigieron todos los problemas pendientes del backlog. Se usa la biblioteca nanodbc en lugar de Poco::ODBC. Cierra #9678. Se añadió soporte para DateTime64 y Decimal* para el motor de tabla ODBC. Cierra #21961. Se corrigió un problema por el que el texto en cirílico se truncaba. Cierra #16246. Se añadieron pools de conexiones para ODBC bridge. #21972 (Kseniia Sumarokova).

Mejora

  • Se aumenta max_uri_size (el tamaño máximo de la URL en la interfaz HTTP) a 1 MiB de forma predeterminada. Esto resuelve #21197. #22997 (alexey-milovidov).
  • Establezca background_fetches_pool_size en 8, ya que es más adecuado para entornos de producción con inserciones pequeñas frecuentes o con un clúster de ZooKeeper lento. #22945 (alexey-milovidov).
  • FlatDictionary incorporó las opciones initial_array_size y max_array_size. #22521 (Maksim Kita).
  • Se añade la nueva configuración non_replicated_deduplication_window para la deduplicación de inserciones en MergeTree no replicadas. #22514 (alesapin).
  • Se actualizaron las rutas de las configuraciones del modelo CatBoost durante la recarga de la configuración. #22434 (Kruglov Pavel).
  • Se añadió compatibilidad con el tipo Decimal256 en los diccionarios. Decimal256 es una función experimental. Cierra #20979. #22960 (Maksim Kita).
  • Se habilitó async_socket_for_remote de forma predeterminada (utilizando menos hilos del sistema operativo para las consultas distribuidas). #23683 (Nikolai Kochetov).
  • Se corrigió quantile(s)TDigest. Se añadió un tratamiento especial para los centroides singleton conforme a tdunning/t-digest 3.2+. También se corrigió un error de sobrecompresión de centroides en la implementación de una versión anterior del algoritmo. #23314 (Vladimir Chebotarev).
  • Hacer que el nombre de la función unhex no distinga entre mayúsculas y minúsculas para que sea compatible con MySQL. #23229 (alexey-milovidov).
  • Se implementan las funciones arrayHasAny, arrayHasAll, has, indexOf y countEqual para el caso genérico en el que los tipos de los elementos del array son diferentes. En versiones anteriores, las funciones arrayHasAny y arrayHasAll devolvían false, y has, indexOf y countEqual lanzaban una excepción. También se añade compatibilidad con Decimal y tipos de enteros grandes en las funciones has y similares. Esto cierra #20272. #23044 (alexey-milovidov).
  • Se aumentó el número máximo de coincidencias permitido en el resultado de la función extractAllGroupsHorizontal. #23036 (Vasily Nemkov).
  • No realizar optimize_skip_unused_shards en clústeres de un solo nodo. #22999 (Azat Khuzhin).
  • Se añadió la posibilidad de ejecutar clickhouse-keeper (reemplazo directo experimental de ZooKeeper) con SSL. La opción de configuración keeper_server.tcp_port_secure se puede usar para una interacción segura entre el cliente y keeper-server. keeper_server.raft_configuration.secure se puede usar para habilitar la comunicación interna segura entre nodos. #22992 (alesapin).
  • Se añadió la opción de vaciar el búfer únicamente en segundo plano para las tablas Buffer. #22986 (Azat Khuzhin).
  • Al seleccionar datos de una tabla MergeTree con NULL en la condición WHERE, en raras ocasiones se producía una excepción. Esto cierra #20019. #22978 (alexey-milovidov).
  • Se corrige el manejo de errores en Poco HTTP Client para AWS. #22973 (kreuzerkrieg).
  • Se respeta max_part_removal_threads en ReplicatedMergeTree. #22971 (Azat Khuzhin).
  • Se corrige un caso límite poco frecuente en la configuración de MergeTree inactive_parts_to_throw_insert = 0 con inactive_parts_to_delay_insert > 0. #22947 (Azat Khuzhin).
  • dateDiff ahora funciona con argumentos de tipo DateTime64 (incluso para valores fuera del rango de DateTime) #22931 (Vasily Nemkov).
  • MaterializeMySQL (funcionalidad experimental): se añadió la capacidad de replicar bases de datos MySQL que contienen vistas sin que falle. Esto se consigue ignorando las vistas. #22760 (Christian).
  • Se permite la política de filas de RBAC a través del protocolo PostgreSQL. Cierra #22658. El protocolo PostgreSQL está habilitado de forma predeterminada en la configuración. #22755 (Kseniia Sumarokova).
  • Se añade una métrica para medir cuánto tiempo se dedica a esperar el bloqueo de la capa Buffer. #22725 (Azat Khuzhin).
  • Se permite usar CTE en la definición de VIEW. Esto cierra #22491. #22657 (Amos Bird).
  • Se limpia el resto de la pantalla y se muestra el cursor en clickhouse-client si el programa anterior ha dejado residuos en el terminal. Esto cierra #16518. #22634 (alexey-milovidov).
  • Hacer que la función round se comporte de forma coherente en plataformas que no son x86_64. Se utiliza el redondeo al par más cercano en los casos de mitad (redondeo bancario). #22582 (alexey-milovidov).
  • Comprobar correctamente la estructura de los bloques de datos enviados por las tablas Distributed. #22325 (Azat Khuzhin).
  • Permite publicar errores de Kafka en una columna virtual del motor Kafka, controlado mediante la configuración kafka_handle_error_mode. #21850 (fastio).
  • Añade los alias simpleJSONExtract/simpleJSONHas a visitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String}. Corrige #21383. #21519 (fastio).
  • Se añade clickhouse-library-bridge para la fuente de diccionario de biblioteca. Cierra #9502. #21509 (Kseniia Sumarokova).
  • Se prohíbe eliminar una columna si está referenciada por una vista materializada. Cierra #21164. #21303 (flynn).
  • Admite credenciales dinámicas entre servidores (rotación de credenciales sin tiempo de inactividad). #14113 (johnskopis).
  • Se añadió compatibilidad con el almacenamiento en Kafka para mensajes en formato Arrow y ArrowStream. #23415 (Chao Ma).
  • Se corrigió el punto y coma faltante en el mensaje de excepción. Al usuario este mensaje de excepción puede resultarle desagradable de leer. #23208 (alexey-milovidov).
  • Se corrigió la ausencia de espacios en algunos mensajes de excepción sobre el tipo LowCardinality. #23207 (alexey-milovidov).
  • Algunos valores aparecían centrados en las celdas de las tablas en formato Markdown. Ya no. #23096 (alexey-milovidov).
  • Se eliminaron los detalles no esenciales de las sugerencias en clickhouse-client. Esto cierra #22158. #23040 (alexey-milovidov).
  • Cálculo correcto del campo bytes_allocated de system.dictionaries para diccionarios sparse_hashed. #22867 (Azat Khuzhin).
  • Se corrigió el cálculo aproximado del total de filas en la lectura inversa de MergeTree. #22726 (Azat Khuzhin).
  • Corrige el caso en el que era posible configurar un diccionario con un origen de ClickHouse que apuntaba a sí mismo, lo que provocaba un bucle infinito. Cierra #14314. #22479 (Maksim Kita).

Corrección de errores

  • Múltiples correcciones para las hedged requests. Se corrigió un error Can't initialize pipeline with empty pipe para consultas con GLOBAL IN/JOIN cuando el ajuste use_hedged_requests está habilitado. Corrige #23431. #23805 (Nikolai Kochetov). Se corrigió una condición de carrera en las conexiones hedged que provocaba un fallo. Esto corrige #22161. #22443 (Kruglov Pavel). Se corrigió un posible fallo en caso de que se recibiera unknown packet de una consulta remota (con async_socket_for_remote habilitado). Corrige #21167. #23309 (Nikolai Kochetov).
  • Se corrigió el comportamiento por el cual, al deshabilitar la configuración input_format_with_names_use_header , se descartaban todos los datos de entrada en formato CSVWithNames. Esto corrige #22406. #23202 (Nikita Mikhaylov).
  • Se corrigió el problema de timeout en la conexión del bridge JDBC remoto. Cierra #9609. #23771 (Maksim Kita, alexey-milovidov).
  • Corrige la lógica de la carga inicial de complex_key_hashed cuando se especifica update_field. Cierra #23800. #23824 (Maksim Kita).
  • Se corrigió un fallo cuando PREWHERE y el filtro de ROW POLICY se aplican a la vez con un resultado vacío. #23763 (Amos Bird).
  • Evitar el posible error “Cannot schedule a task” (en caso de que se hubiera producido alguna excepción) al hacer INSERT en Distributed. #23744 (Azat Khuzhin).
  • Se añadió una excepción para el caso en que ambas muestras tengan valores completamente idénticos en la función de agregación mannWhitneyUTest. Esto corrige #23646. #23654 (Nikita Mikhaylov).
  • Se corrigió un fallo del servidor que provocaba una excepción al insertar datos mediante HTTP. Esto corrige #23512. #23643 (Nikita Mikhaylov).
  • Se corrigió la interpretación errónea de algunas expresiones LIKE con secuencias de escape. #23610 (alexey-milovidov).
  • Corregido el bloqueo al ejecutar el comando de reinicio / detención. Cierra #20214. #23552 (filimonov).
  • Se corrigió el comparador COLUMNS en caso de múltiples JOINs en la consulta SELECT. Cierra #22736. #23501 (Maksim Kita).
  • Se corrigió un fallo al modificar el valor predeterminado de una columna cuando esa misma columna se usa como parámetro de ReplacingMergeTree. #23483 (hexiaoting).
  • Se corrigieron casos extremos en las fusiones verticales con ReplacingMergeTree. En casos poco frecuentes, podían hacer que las fusiones fallaran con excepciones como Incomplete granules are not allowed while blocks are granules size. #23459 (Anton Popov).
  • Se corrigió un error que impedía convertir un literal de array vacío en un array con más de 1 dimensión, por ejemplo, CAST([] AS Array(Array(String))). Cierra #14476. #23456 (Maksim Kita).
  • Se corrigió un error por el que la función de agregación deltaSum producía un resultado incorrecto después de reiniciar el contador. #23437 (Russ Frank).
  • Se corrigió el error Cannot unlink file que se producía al intentar crear sin éxito una tabla ReplicatedMergeTree con una configuración multidisco. Esto cierra #21755. #23433 (tavplubix).
  • Se corrigió la generación de expresiones constantes incompatibles durante la poda de particiones a partir de columnas virtuales. Esto corrige https://github.com/ClickHouse/ClickHouse/pull/21401#discussion&#95;r611888913. #23366 (Amos Bird).
  • Se corrigió un bloqueo cuando join&#95;algorithm se establece en ‘auto’ y se realiza un Join con un Diccionario. Cierra #23002. #23312 (Vladimir).
  • No se relajan las condiciones NOT durante la poda de particiones. Esto corrige #23305 y #21539. #23310 (Amos Bird).
  • Se corrigió una condición de carrera muy poco frecuente en la limpieza en segundo plano de bloques antiguos. Podía hacer que un bloque no se deduplicara si estaba demasiado cerca del final de la ventana de deduplicación. #23301 (tavplubix).
  • Se corrigió una condición de carrera (distribuida) muy poco frecuente entre la creación y la eliminación de tablas ReplicatedMergeTree. Podía provocar excepciones como node doesn't exist al intentar crear una tabla replicada. Corrige #21419. #23294 (tavplubix).
  • Se corrigió la creación mediante DDL de un Diccionario de clave simple si la clave primaria no es el primer atributo. Corrige #23236. #23262 (Maksim Kita).
  • Se corrigió la lectura mediante ODBC cuando una tabla tiene muchos nombres de columna largos. Cierra #8853. #23215 (Kseniia Sumarokova).
  • MaterializeMySQL (característica experimental): se corrigió el error Not found column al seleccionar de MaterializeMySQL con una condición en la columna clave. Corrige #22432. #23200 (tavplubix).
  • Corrige el manejo de alias cuando la subconsulta se optimizó como una constante. Corrige #22924. Corrige #10401. #23191 (Maksim Kita).
  • Es posible que el servidor no se iniciara si la configuración data_type_default_nullable estaba habilitada en el perfil predeterminado; ya está corregido. Corrige #22573. #23185 (tavplubix).
  • Se corrigió un fallo durante el apagado que se producía debido a un recuento incorrecto de las conexiones activas. #23154 (Vitaly Baranov).
  • Se corrigió el error Table .inner_id... doesn't exist al consultar una vista materializada después de desacoplarla de la base de datos Atomic y volver a adjuntarla. #23047 (tavplubix).
  • Corrige el error Cannot find column in ActionsDAG result, que puede producirse si la subconsulta usa untuple. Soluciona #22290. #22991 (Nikolai Kochetov).
  • Se corrige el uso de columnas constantes de tipo Map con valores que pueden ser NULL. #22939 (Anton Popov).
  • Se corrigieron formatDateTime() en DateTime64 y el especificador de formato “%C”; también se corrigió toDateTime64() para valores grandes y una escala distinta de cero. #22937 (Vasily Nemkov).
  • Se corrigió un fallo al usar mannWhitneyUTest y rankCorr con funciones de ventana. Esto corrige #22728. #22876 (Nikita Mikhaylov).
  • LIVE VIEW (función experimental): se corrigió un posible cuelgue durante el DROP/CREATE concurrente de TEMPORARY LIVE VIEW en TemporaryLiveViewCleaner, ver. #22858 (Vitaly Baranov).
  • Se corrigió el pushdown de HAVING cuando la columna del filtro se usa en la agregación. #22763 (Anton Popov).
  • Se corrigieron posibles bloqueos en las solicitudes de ZooKeeper en caso de que se produjera una excepción OOM. Corrige #22438. #22684 (Nikolai Kochetov).
  • Se corrigió la espera de mutaciones en varias réplicas para los motores de tabla ReplicatedMergeTree. Anteriormente, una consulta de mutación/ALTER podía finalizar antes de que la mutación se hubiera ejecutado realmente en otras réplicas. #22669 (alesapin).
  • Se corrigió la excepción de Log con tipos anidados sin columnas en la cláusula SELECT. #22654 (Azat Khuzhin).
  • Se corrige la espera indefinida de las solicitudes auxiliares de AWS. #22594 (Vladimir Chebotarev).
  • Se corrigió un fallo cuando el cliente cierra la conexión demasiado pronto #22579. #22591 (nvartolomei).
  • Tipo de dato Map (funcionalidad experimental): se corrigió un formato incorrecto de la función map en consultas distribuidas. #22588 (foolchi).
  • Se corrigió la deserialización de una cadena vacía sin salto de línea al final en formato TSV. Esto cierra #20244. Posible solución alternativa sin actualizar la versión: establecer input_format_null_as_default en cero. En versiones anteriores era cero. #22527 (alexey-milovidov).
  • Se corrigió el cast incorrecto de una columna de tipo LowCardinality en el algoritmo Merge Join. Se cierran #22386 y #22388. #22510 (Vladimir).
  • Era posible que se produjera un desbordamiento de búfer (durante la lectura) en el índice de texto completo tokenbf_v1. Los bytes excedentes no se usan, pero la operación de lectura puede provocar un bloqueo en casos poco frecuentes. Esto cierra #19233. #22421 (alexey-milovidov).
  • No limitar el tamaño de los fragmentos HTTP. Corrige #21907. #22322 (Ivan).
  • Se corrigió un error que provocaba una agregación incompleta de los datos cuando optimize_aggregation_in_order estaba habilitado y había muchas partes en la tabla. Se mejoró ligeramente el rendimiento de la agregación con optimize_aggregation_in_order habilitado. #21889 (Anton Popov).
  • Comprobar si la vista de función de tabla se usa como columna. Esto complementa #20350. #21465 (Amos Bird).
  • Se corrige el error “columna desconocida” en tablas con motor Merge en consultas con JOIN y agregación. Cierra #18368 y #22226. #21370 (Vladimir).
  • Se corrigieron las colisiones de nombres en la optimización de pushdown. Esto provocaba un filtrado incorrecto en WHERE después de FULL JOIN. Cierra #20497. #20622 (Vladimir).
  • Se corrigió un error muy poco frecuente por el que una inserción con quorum con quorum_parallel=1 no era realmente “quorum” debido a la deduplicación. #18215 (filimonov - reportó el problema, alesapin - lo corrigió).

Mejora de compilación/pruebas/empaquetado

Lanzamiento de ClickHouse 21.4

Lanzamiento de ClickHouse 21.4.1 2021-04-12

Cambio incompatible con versiones anteriores

  • toStartOfIntervalFunction alineará los intervalos de hora con la medianoche (en versiones anteriores se alineaban con el inicio de la época Unix). Por ejemplo, toStartOfInterval(x, INTERVAL 11 HOUR) dividirá cada día en tres intervalos: 00:00:00..10:59:59, 11:00:00..21:59:59 y 22:00:00..23:59:59. Este comportamiento se ajusta mejor a las necesidades prácticas. Esto cierra #9510. #22060 (alexey-milovidov).
  • Age y Precision en las configuraciones de rollup de Graphite deben aumentar de una retención a la siguiente. Ahora esto se comprueba y una configuración incorrecta genera una excepción. #21496 (Mikhail f. Shiryaev).
  • Se corrigió cutToFirstSignificantSubdomainCustom()/firstSignificantSubdomainCustom(), que devolvía un resultado incorrecto para dominios de 3 o más niveles presentes en la lista personalizada de dominios de nivel superior. Para los dominios de entrada que coinciden con estos dominios de nivel superior personalizados, el dominio de tercer nivel se consideraba el primero significativo. Esto ya está corregido. Este cambio puede introducir incompatibilidades si la función se usa, por ejemplo, en la clave de sharding. #21946 (Azat Khuzhin).
  • La columna keys de la tabla system.dictionaries fue sustituida por las columnas key.names y key.types. Las columnas key.names, key.types, attribute.names, attribute.types de la tabla system.dictionaries no requieren que el diccionario esté cargado. #21884 (Maksim Kita).
  • Ahora las réplicas que están procesando el comando ALTER TABLE ATTACH PART[ITION] buscan en sus carpetas detached/ antes de obtener los datos de otras réplicas. Como detalle de implementación, se introduce un nuevo comando ATTACH_PART en el log replicado. Las partes se buscan y comparan por sus sumas de comprobación. #18978 (Mike Kot). Nota:
    • Las consultas ATTACH PART[ITION] pueden no funcionar durante la actualización del cluster.
    • No es posible volver a una versión anterior de ClickHouse después de ejecutar la consulta ALTER ... ATTACH en la nueva versión, ya que los servidores antiguos no podrían procesar la entrada ATTACH_PART en el log replicado.
  • En esta versión, un elemento vacío <remote_url_allow_hosts></remote_url_allow_hosts> bloqueará todo el acceso a hosts remotos, mientras que en versiones anteriores no hacía nada. Si desea mantener el comportamiento anterior y tiene un elemento remote_url_allow_hosts vacío en el archivo de configuración, elimínelo. #20058 (Vladimir Chebotarev).

Nueva funcionalidad

  • Se amplió el rango de DateTime64 para admitir fechas desde 1925 hasta 2283. Se mejoró la compatibilidad de DateTime con la fecha cero (1970-01-01). #9404 (alexey-milovidov, Vasily Nemkov). No todas las funciones de fecha y hora funcionan con este rango ampliado de fechas.
  • Se añadió compatibilidad con la autenticación de Kerberos para usuarios preconfigurados y solicitudes HTTP (GSS-SPNEGO). #14995 (Denis Glazachev).
  • Se agregó la configuración prefer_column_name_to_alias para usar los nombres de columna originales en lugar de alias. Es necesaria para que la compatibilidad con las reglas habituales de alias de las bases de datos más comunes sea mayor. Esto corresponde a #9715 y #9887. #22044 (Amos Bird).
  • Se añadieron las funciones dictGetChildren(dictionary, key), dictGetDescendants(dictionary, key, level). La función dictGetChildren devuelve todos los elementos secundarios como un array de índices. Es una transformación inversa de dictGetHierarchy. La función dictGetDescendants devuelve todos los descendientes como si dictGetChildren se hubiera aplicado recursivamente level veces. Un valor de level igual a cero equivale a infinito. Cierra #14656. #22096 (Maksim Kita).
  • Se añadió la fuente de diccionario executable_pool. Cierra #14528. #21321 (Maksim Kita).
  • Se añadió la función de tabla dictionary. Funciona de la misma manera que el motor Dictionary. Cierra #21560. #21910 (Maksim Kita).
  • Se admite el tipo Nullable para el atributo PolygonDictionary. #21890 (Maksim Kita).
  • Las funciones dictGet, dictHas usan el nombre de la base de datos actual si este no se especifica para los diccionarios creados con DDL. Cierra #21632. #21859 (Maksim Kita).
  • Se añadió la función dictGetOrNull. Funciona como dictGet, pero devuelve Null si no se encuentra la clave en el diccionario. Cierra #22375. #22413 (Maksim Kita).
  • Se añadió la actualización asíncrona en los diccionarios ComplexKeyCache, SSDCache y SSDComplexKeyCache. Se añadió compatibilidad con el tipo Nullable en los diccionarios Cache, ComplexKeyCache, SSDCache y SSDComplexKeyCache. Se añadió compatibilidad con la obtención de varios atributos mediante las funciones dictGet y dictGetOrDefault. Corrige #21517. #20595 (Maksim Kita).
  • Se admite la función dictHas para RangeHashedDictionary. Corrige #6680. #19816 (Maksim Kita).
  • Se agregó la función timezoneOf, que devuelve el nombre de la zona horaria de los tipos de datos DateTime o DateTime64. Esto no cierra #9959. Se corrigieron las inconsistencias en los nombres de las funciones: se agregaron los alias timezone y timeZone, así como toTimezone y toTimeZone, y timezoneOf y timeZoneOf. #22001 (alexey-milovidov).
  • Añade una nueva cláusula opcional GRANTEES para los comandos CREATE/ALTER USER. Especifica qué usuarios o roles pueden recibir grants de este usuario, con la condición de que este usuario también tenga todos los permisos necesarios concedidos con la opción de grant. De forma predeterminada, se usa GRANTEES ANY, lo que significa que un usuario con la opción de grant puede conceder permisos a cualquiera. Sintaxis: CREATE USER ... GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]. #21641 (Vitaly Baranov).
  • Añadir la nueva columna slowdowns_count a system.clusters. Al usar hedged requests, muestra cuántas veces cambiamos a otra réplica porque esta respondía lentamente. Mostrar también el valor real de errors_count en system.clusters. #21480 (Kruglov Pavel).
  • Agregar la columna virtual _partition_id para los motores MergeTree*. Permitir descartar particiones por _partition_id. Agregar la función partitionID() para calcular la cadena con el ID de la partición. #21401 (Amos Bird).
  • Se añade la función isIPAddressInRange para comprobar si una dirección IPv4 o IPv6 está contenida en un prefijo de red CIDR determinado. #21329 (PHO).
  • Se añadió un nuevo comando SQL ALTER TABLE 'table_name' UNFREEZE [PARTITION 'part_expr'] WITH NAME 'backup_name'. Este comando es necesario para eliminar correctamente las particiones ‘congeladas’ de todos los discos. #21142 (Pavel Kovalenko).
  • Admite la conversión implícita del tipo de las claves en JOIN. #19885 (Vladimir).

Funcionalidad experimental

  • Compatibilidad con el marco RANGE OFFSET (para funciones de ventana) en tipos de coma flotante. Se implementan las funciones de ventana lagInFrame/leadInFrame, análogas a lag/lead, pero que respetan el marco de la ventana. Son idénticas cuando el marco es between unbounded preceding and unbounded following. Esto cierra #5485. #21895 (Alexander Kuzmenkov).
  • Replicación zero-copy para ReplicatedMergeTree en almacenamiento S3. #16240 (ianton-ru).
  • Se añadió la posibilidad de migrar un disco S3 existente al esquema con capacidades de copia de seguridad y restauración. #22070 (Pavel Kovalenko).

Mejoras de rendimiento

  • Se añadió compatibilidad con formatting en paralelo en clickhouse-local y en el resto de casos. #21630 (Nikita Mikhaylov).
  • Se añadió compatibilidad con parsing en paralelo para los formatos CSVWithNames y TSVWithNames. Esto cierra #21085. #21149 (Nikita Mikhaylov).
  • Se habilitó la lectura con mmap IO para rangos de archivos a partir de 64 MiB (la configuración min_bytes_to_use_mmap_io). Esto puede suponer una mejora moderada del rendimiento. #22326 (alexey-milovidov).
  • Se añadió una cache para los archivos leídos con la configuración min_bytes_to_use_mmap_io. Esto aporta una mejora significativa del rendimiento (2x o más) cuando el valor de la configuración es pequeño, al evitar llamadas frecuentes a mmap/munmap y los consiguientes fallos de página. Tenga en cuenta que mmap IO tiene importantes inconvenientes que lo hacen menos fiable en producción (por ejemplo, bloqueos o SIGBUS en discos defectuosos; uso de memoria menos controlable). No obstante, funciona bien en benchmarks. #22206 (alexey-milovidov).
  • Se evita la copia innecesaria de datos al usar el codec NONE. Tenga en cuenta que el codec NONE suele ser poco útil: se recomienda usar siempre compresión (LZ4 se usa de forma predeterminada). A pesar de la creencia generalizada, desactivar la compresión puede no mejorar el rendimiento (incluso puede producir el efecto contrario). El codec NONE es útil en algunos casos: - cuando los datos no se pueden comprimir; - para benchmarks sintéticos. #22145 (alexey-milovidov).
  • GROUP BY más rápido con un max_rows_to_group_by pequeño y group_by_overflow_mode='any'. #21856 (Nikolai Kochetov).
  • Se optimizó el rendimiento de queries como SELECT ... FINAL ... WHERE. Ahora, en las queries con FINAL, se permite mover a PREWHERE las columnas que forman parte de la sorting key. #21830 (foolchi).
  • Se mejoró el rendimiento al sustituir memcpy por otra implementación. Esto cierra #18583. #21520 (alexey-milovidov).
  • Se mejoró el rendimiento de la aggregation en el orden de la sorting key (con la configuración optimize_aggregation_in_order habilitada). #19401 (Anton Popov).

Mejora

  • Se añade un pool de conexiones para el motor de tabla o de base de datos de PostgreSQL y para el origen del diccionario. Debería corregir #21444. #21839 (Kseniia Sumarokova).
  • Admite esquemas de tablas no predeterminados para storage/table-function de Postgres. Cierra #21701. #21711 (Kseniia Sumarokova).
  • Compatibilidad con la prioridad de réplicas para la fuente de diccionario de Postgres. #21710 (Kseniia Sumarokova).
  • Se introduce una nueva configuración de MergeTree, min_bytes_to_rebalance_partition_over_jbod, que permite asignar nuevas partes a distintos discos de un volumen JBOD de forma equilibrada. #16481 (Amos Bird).
  • Se añadieron los valores Grant, Revoke y System en la columna query_kind para las consultas correspondientes de system.query_log. #21102 (Vasily Nemkov).
  • Permite configurar de forma independiente los tiempos de espera de las conexiones HTTP utilizadas para la replicación respecto de otros tiempos de espera HTTP. #20088 (nvartolomei).
  • Mejor mensaje de excepción en el cliente en caso de que se produzca una excepción mientras el servidor escribe bloques. En versiones anteriores, el cliente podía recibir un mensaje confuso como Data compressed with different methods. #22427 (alexey-milovidov).
  • Corrige el error Directory tmp_fetch_XXX already exists, que podía producirse después de un fallo al obtener una parte. Elimina el directorio temporal de obtención si ya existe. Corrige #14197. #22411 (nvartolomei).
  • Se corrige el informe de MSan de la función range con el argumento UInt256 (la compatibilidad con enteros grandes es experimental). Esto cierra #22157. #22387 (alexey-milovidov).
  • Se añadió la columna current_database a la tabla system.processes. Contiene la base de datos actual de la consulta. #22365 (Alexander Kuzmenkov).
  • Se añade la búsqueda y navegación en el historial sin distinguir entre mayúsculas y minúsculas, así como funciones para moverse por subpalabras, a clickhouse-client. #22105 (Amos Bird).
  • Si una tupla de NULL, p. ej., (NULL, NULL), está en el lado izquierdo del operador IN y a la derecha hay tuplas sin NULL, p. ej., SELECT (NULL, NULL) IN ((0, 0), (3, 1)), devuelve 0 en lugar de lanzar una excepción por tipos incompatibles. La expresión también puede aparecer debido a la optimización de algo como SELECT (NULL, NULL) = (8, 0) OR (NULL, NULL) = (3, 2) OR (NULL, NULL) = (0, 0) OR (NULL, NULL) = (3, 1). Esto cierra #22017. #22063 (alexey-milovidov).
  • Se actualiza la versión utilizada de simdjson a la 0.9.1. Esto corrige #21984. #22057 (Vitaly Baranov).
  • Se añadieron alias sin distinción entre mayúsculas y minúsculas para las funciones CONNECTION_ID() y VERSION(). Esto corrige #22028. #22042 (Eugene Klimov).
  • Se añadió la opción strict_increase a la función windowFunnel para calcular cada evento una sola vez (resuelve #21835). #22025 (Vladimir).
  • Si la clave de partición de una tabla MergeTree no incluye columnas Date o DateTime, pero sí incluye exactamente una columna DateTime64, sus valores se exponen en las columnas min_time y max_time de las tablas system.parts y system.parts_columns. Se añaden las columnas min_time y max_time a la tabla system.parts_columns (esto corregía una inconsistencia con la tabla system.parts). Esto cierra #18244. #22011 (alexey-milovidov).
  • Se añadió compatibilidad con la configuración replication_alter_partitions_sync=1 en clickhouse-copier para mover particiones desde la tabla auxiliar hasta el destino. Se redujeron los tiempos de espera predeterminados. Corrige #21911. #21912 (turbo jason).
  • Mostrar la ruta del directorio de datos de las tablas EmbeddedRocksDB en las tablas del sistema. #21903 (tavplubix).
  • Se añadió el evento de perfil HedgedRequestsChangeReplica y se cambió el tiempo de espera de lectura de datos de s a ms. #21886 (Kruglov Pavel).
  • DiskS3 (funcionalidad experimental en desarrollo). Se corrigió un error que impedía mover el directorio si el destino no estaba vacío y se utilizaba un disco de caché. #21837 (Pavel Kovalenko).
  • Mejoras en el formato de los tipos de datos Array y Map en la interfaz web. #21798 (alexey-milovidov).
  • Actualizar los clústeres solo si se actualizaron sus configuraciones. #21685 (Kruglov Pavel).
  • Se propagan las configuraciones de consulta y de sesión para las consultas DDL distribuidas. Establezca distributed_ddl_entry_format_version en 2 para habilitar esta función. Se añadió la configuración distributed_ddl_output_mode. Modos admitidos: none, throw (predeterminado), null_status_on_timeout y never_throw. Correcciones y mejoras varias para el engine de base de datos Replicated. #21535 (tavplubix).
  • Si PODArray se instanciaba con un tamaño de elemento que no era ni una fracción ni un múltiplo de 16, podía producirse un desbordamiento de búfer. No hay errores en las versiones actuales. #21533 (alexey-milovidov).
  • Se añaden las columnas last_error_time/last_error_message/last_error_stacktrace/remote para system.errors. #21529 (Azat Khuzhin).
  • Se añaden alias simpleJSONExtract/simpleJSONHas a visitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String}. Corrige el problema #21383. #21519 (fastio).
  • Se añade la configuración optimize_skip_unused_shards_limit para limitar la cantidad de valores de la clave de sharding para optimize_skip_unused_shards. #21512 (Azat Khuzhin).
  • Mejora de clickhouse-format para que no lance una excepción cuando haya espacios de más o un comentario después de la última consulta, y para que lance una excepción de inmediato con un mensaje claro al formatear ASTInsertQuery con datos. #21311 (flynn).
  • Se mejoró la compatibilidad con claves enteras en el tipo de dato Map. #21157 (Anton Popov).
  • MaterializeMySQL: intenta reconectarse a MySQL si se pierde la conexión. #20961 (Håvard Kvålen).
  • Se amplían los casos en los que se puede reescribir CROSS JOIN como INNER JOIN. #20392 (Vladimir).
  • No crear partes vacías al hacer INSERT cuando esté habilitada la configuración optimize_on_insert. Corrige #20304. #20387 (Kruglov Pavel).
  • MaterializeMySQL: añade un índice minmax de omisión para la columna _version. #20382 (Stig Bakken).
  • Se añadió la opción --backslash a clickhouse-format, que permite añadir una barra invertida al final de cada línea de la consulta formateada. #21494 (flynn).
  • Ahora ClickHouse ya no lanzará la excepción LOGICAL_ERROR cuando intentemos mutar la parte ya cubierta. Corrige #22013. #22291 (alesapin).

Corrección de errores

  • Eliminar el socket de epoll antes de cancelar el receptor de paquetes en HedgedConnections para evitar una posible condición de carrera. Corrige #22161. #22443 (Kruglov Pavel).
  • Se agregó la contabilización de memoria (faltante) en las rutinas de parsing en paralelo. En versiones anteriores, podía producirse un OOM cuando el conjunto de resultados contenía bloques de datos muy grandes. Esto cierra #22008. #22425 (alexey-milovidov).
  • Se corrige una excepción que puede producirse cuando SELECT tiene una condición WHERE constante y la tabla de origen tiene columnas con nombres compuestos solo por dígitos. #22270 (LiuNeng).
  • Se ha corregido la cancelación de consultas con use_hedged_requests=0 y async_socket_for_remote=1. #22183 (Azat Khuzhin).
  • Se corrigió una excepción no controlada en InterserverIOHTTPHandler. #22146 (Azat Khuzhin).
  • Se corrige el entrypoint de Docker en caso de que http_port no esté en la configuración. #22132 (Ewout).
  • Se corrige el error Invalid number of rows in Chunk en JOIN con TOTALS y arrayJoin. Se cierra #19303. #22129 (Vladimir).
  • Se corrige el nombre del pool de subprocesos en segundo plano que se usaba para leer mensajes de Kafka. El motor Kafka con el pool de subprocesos defectuoso no consumirá el mensaje de la cola de mensajes. #22122 (fastio).
  • Se corrigió el problema de espera de las consultas OPTIMIZE y ALTER en los motores de tabla ReplicatedMergeTree. Ahora la consulta no se quedará bloqueada cuando la tabla se haya puesto en estado detached o se haya reiniciado. #22118 (alesapin).
  • Deshabilitar async_socket_for_remote/use_hedged_requests en versiones defectuosas del kernel de Linux. #22109 (Azat Khuzhin).
  • Entrypoint de Docker: evitar el chown de . cuando LOG_PATH está vacío. Cierra #22100. #22102 (filimonov).
  • A la función decrypt le faltaba una verificación del tamaño mínimo de los datos cifrados en modo AEAD. Esto corrige #21897. #22064 (alexey-milovidov).
  • En un caso poco frecuente, una fusión para CollapsingMergeTree puede crear un gránulo con index_granularity + 1 filas. Debido a ello, la comprobación interna, añadida en #18928 (afecta a 21.2 y 21.3), puede fallar con el error Incomplete granules are not allowed while blocks are granules size. Este error impedía fusionar las partes. #21976 (Nikolai Kochetov).
  • Se revirtió #15454, que podía provocar un aumento significativo del uso de memoria durante la carga de diccionarios externos de tipo hash. Esto cierra #21935. #21948 (Maksim Kita).
  • Evitar solapamientos en las conexiones hedged (error Unknown packet 9 from server). #21941 (Azat Khuzhin).
  • Se corrige, en algunos casos, la lectura de la solicitud HTTP POST con el tipo de contenido “multipart/form-data”. #21936 (Ivan).
  • Corrige resultados incorrectos de ORDER BY cuando una consulta contiene funciones de ventana y se aplica la optimización de lectura en orden de clave primaria. Corrige #21828. #21915 (Alexander Kuzmenkov).
  • Se corrige un interbloqueo durante la primera ejecución del modelo CatBoost. Cierra #13832. #21844 (Kruglov Pavel).
  • Se corrige un resultado de consulta incorrecto (y un posible fallo) que podía producirse cuando la condición WHERE o HAVING se aplicaba antes de GROUP BY. Corrige #21773. #21841 (Nikolai Kochetov).
  • Mejor gestión de errores y logging en WriteBufferFromS3. #21836 (Pavel Kovalenko).
  • Corrige posibles bloqueos en las funciones de agregación con el combinador Distinct al usar agregación en dos niveles. Esta es una corrección complementaria de #18365 . Solo puede reproducirse en un entorno de producción. #21818 (Amos Bird).
  • Se corrige el análisis de índices en subconsultas escalares. Esto corrige #21717 , que se introdujo en #18896. #21766 (Amos Bird).
  • Corrige un error en los motores de tabla ReplicatedMerge cuando la consulta ALTER MODIFY COLUMN no modifica el tipo de una columna Decimal si su tamaño (32 bits o 64 bits) no cambia. #21728 (alesapin).
  • Se corrige un posible bloqueo indefinido al ejecutar OPTIMIZE y DROP de forma concurrente en ReplicatedMergeTree. #21716 (Azat Khuzhin).
  • Se corrigió la función arrayElement con el tipo Map para argumentos enteros constantes. #21699 (Anton Popov).
  • Se corrige SIGSEGV en atributos no existentes de ip_trie con access_to_key_from_attributes. #21692 (Azat Khuzhin).
  • El servidor ahora solo acepta conexiones después de inicializar DDLWorker y los diccionarios. #21676 (Azat Khuzhin).
  • Se añadió la conversión de tipos para las claves de las tablas de tipo Join (antes provocaba SIGSEGV). #21646 (Azat Khuzhin).
  • Se corrigió la cancelación de solicitudes distribuidas (por ejemplo, un select simple en varios segmentos con limit, es decir, select * from remote('127.{2,3}', system.numbers) limit 100) con async_socket_for_remote=1. #21643 (Azat Khuzhin).
  • Se corrigió fsync_part_directory para la fusión horizontal. #21642 (Azat Khuzhin).
  • Eliminar las columnas desconocidas de la tabla del JOIN en WHERE para las consultas a motores de base de datos externos (MySQL, PostgreSQL). cierra #14614, cierra #19288 (dup), cierra #19645 (dup). #21640 (Vladimir).
  • Se invocaba std::terminate si se producía un error al escribir datos en S3. #21624 (Vladimir).
  • Se corrige un posible error Cannot find column cuando optimize_skip_unused_shards está habilitado y no se usa ningún segmento. #21579 (Azat Khuzhin).
  • Si una consulta tiene una condición WHERE constante y la configuración optimize_skip_unused_shards está habilitada, es posible que se omitan todos los segmentos y que la consulta devuelva incorrectamente un resultado vacío. #21550 (Amos Bird).
  • Se corrige un problema por el que la función de tabla clusterAllReplicas devolvía un _shard_num incorrecto. cierra #21481. #21498 (flynn).
  • Se corrigió el problema por el que la tabla S3 conservaba credenciales antiguas tras actualizar la configuración. #21457 (Grigory Pervakov).
  • Se corrigió una condición de carrera en el objeto SSL de SecureSocket en Poco. #21456 (Nikita Mikhaylov).
  • Corrige el análisis del formato Avro en Kafka. Soluciona #21437. #21438 (Ilya Golshtein).
  • Se corrigen los tiempos de espera de recepción y envío, y la lectura no bloqueante en un socket seguro. #21429 (Kruglov Pavel).
  • La opción force_drop_table no funcionaba con MATERIALIZED VIEW; ya se ha corregido. Soluciona #18943. #20626 (tavplubix).
  • Se corrigen conflictos de nombres en PredicateRewriteVisitor. Esto provocaba un filtrado incorrecto en WHERE después de un full join. Cierra #20497. #20622 (Vladimir).

Mejora de compilación/pruebas/empaquetado

  • Añadidas pruebas de Jepsen para ClickHouse Keeper. #21677 (alesapin).
  • Ejecutar pruebas sin estado en paralelo en CI. Depende de #22181. #22300 (alesapin).
  • Se habilitó la comprobación de estado para la ejecución de CI de SQLancer. #22015 (Ilya Yatsishin).
  • Varias mejoras preparatorias para las compilaciones de PowerPC: Habilitar el openldap integrado en ppc64le. #22487 (Kfir Itzhak). Habilitar la compilación en ppc64le con Clang. #22476 (Kfir Itzhak). Corregir la compilación de Boost en ppc64le. #22474 (Kfir Itzhak). Corregir un error de CMake relacionado con que la variable interna de CMake CMAKE_ASM_COMPILE_OBJECT no estaba establecida en ppc64le. #22469 (Kfir Itzhak). Corregir que Fedora/RHEL/CentOS no encuentre libclang_rt.builtins en ppc64le. #22458 (Kfir Itzhak). Habilitar la compilación con jemalloc en ppc64le. #22447 (Kfir Itzhak). Corregir la incrustación de la configuración de ClickHouse y de la zona horaria de cctz en ppc64le. #22445 (Kfir Itzhak). Se corrigió la compilación en ppc64le y se pasó a usar el registro correcto del puntero de instrucción en ppc64le. #22430 (Kfir Itzhak).
  • Volver a habilitar la biblioteca S3 (AWS) en aarch64. #22484 (Kfir Itzhak).
  • Se añadió tzdata a los contenedores Docker, ya que es necesario para leer formatos ORC. Esto cierra #14156. #22000 (alexey-milovidov).
  • Se introducen dos argumentos para el Dockerfile de la imagen clickhouse-server: deb_location & single_binary_location. #21977 (filimonov).
  • Se permite usar clang-tidy con compilaciones release al habilitar las aserciones, si se utiliza. #21914 (alexey-milovidov).
  • Se añadió el nombre de los binarios de llvm-12 a la búsqueda en los scripts de CMake. Conversiones implícitas de constantes para silenciar las advertencias de clang. Se actualizaron los submódulos para compilar con CMake 3.19. Se silenció la recursión en la expansión de macros de la biblioteca readpassphrase. La opción -fuse-ld, en desuso, se cambió por --ld-path para clang. #21597 (Ilya Yatsishin).
  • Actualización de docker/test/testflows/runner/dockerd-entrypoint.sh para usar el proxy de Docker Hub de Yandex, porque Docker Hub ha impuesto límites de solicitudes muy restrictivos #21551 (vzakaznikov).
  • Se corrigió la compilación de la biblioteca compartida en macOS. #20184 (nvartolomei).
  • Se añade la opción ctime a zookeeper-dump-tree. Permite volcar la hora de creación del nodo. #21842 (Ilya).

Lanzamiento de ClickHouse 21.3 (LTS)

Lanzamiento de ClickHouse v21.3, 2021-03-12

Cambio incompatible con versiones anteriores

  • Ahora ya no se permite crear tablas MergeTree con la sintaxis antigua usando TTL de tabla, porque simplemente se ignora. Sigue siendo posible hacer Attach de tablas antiguas. #20282 (alesapin).
  • Ahora todos los nombres de funciones que no distinguen entre mayúsculas y minúsculas se reescribirán a su forma canónica. Esto es necesario para el enrutamiento de consultas de proyección (la próxima funcionalidad). #20174 (Amos Bird).
  • Se corrige la creación de TTL en los casos en que su expresión es una función y coincide con la clave ORDER BY. Ahora se permite establecer una agregación personalizada para las columnas de la clave primaria en TTL con GROUP BY. Incompatible con versiones anteriores: para las columnas de la clave primaria que no están en GROUP BY y no se establecen explícitamente, ahora se aplica la función any en lugar de max cuando expira el TTL. Además, si usa TTL con WHERE o GROUP BY, puede ver excepciones durante las fusiones mientras realiza una actualización gradual. #15450 (Anton Popov).

Nueva funcionalidad

  • Se añaden configuraciones del motor File: engine_file_empty_if_not_exists y engine_file_truncate_on_insert. #20620 (M0r64n).
  • Se añade la función de agregado deltaSum para sumar las diferencias entre filas consecutivas. #20057 (Russ Frank).
  • Nueva columna event_time_microseconds en la tabla system.part_log. #20027 (Bharat Nallan).
  • Se añadió la función timezoneOffset(datetime), que devuelve el desplazamiento respecto a UTC en segundos. Esto cierra #issue:19850. #19962 (keenwolf).
  • Se añade la configuración insert_shard_id para admitir la inserción de datos en un segmento específico desde una tabla distribuida. #19961 (flynn).
  • La función reinterpretAs se actualizó para admitir enteros grandes. Corrige #19691. #19858 (Maksim Kita).
  • Se añadió compatibilidad con Server Side Encryption Customer Keys (la cabecera x-amz-server-side-encryption-customer-(key/md5)) en el cliente S3. Consulta el enlace. Cierra #19428. #19748 (Vladimir Chebotarev).
  • Se añadió la opción implicit_key para el dictionary source executable. Permite evitar imprimir la clave en cada registro si los registros llegan en el mismo orden que las claves de entrada. Implementa #14527. #19677 (Maksim Kita).
  • Se añade el tipo de cuota query_selects y query_inserts. #19603 (JackyWoo).
  • Se añade la función extractTextFromHTML #19600 (zlx19950903), (alexey-milovidov).
  • Las tablas con motor MergeTree* ahora tienen dos nuevas configuraciones a nivel de tabla para controlar la concurrencia de consultas. La configuración max_concurrent_queries limita el número de consultas que se ejecutan de forma concurrente y están relacionadas con esta tabla. La configuración min_marks_to_honor_max_concurrent_queries indica que la configuración anterior debe aplicarse solo si la consulta lee al menos esta cantidad de marks. #19544 (Amos Bird).
  • Se añadió la función file para leer archivos del directorio user_files como un String. Esto es diferente de la table function file. Esto implementa #issue:18851. #19204 (keenwolf).

Característica experimental

  • Se añade el motor de base de datos experimental Replicated. Replica consultas DDL entre varios hosts. #16193 (tavplubix).
  • Se introduce soporte experimental para las funciones de ventana, habilitado con allow_experimental_window_functions = 1. Esta es una implementación preliminar, en fase alfa, que no es apta para su uso en producción y cambiará de forma incompatible con versiones anteriores en futuras versiones. Consulte la documentación para ver la lista de características admitidas. #20337 (Alexander Kuzmenkov).
  • Se añade la posibilidad de hacer copias de seguridad y restaurar archivos de metadatos de DiskS3. #18377 (Pavel Kovalenko).

Mejora del rendimiento

  • Solicitudes especulativas para consultas remotas. Cuando use_hedged_requests está habilitado (desactivado de forma predeterminada), se permite establecer múltiples conexiones con distintas réplicas para una consulta. Se habilita una nueva conexión si las conexiones existentes con las réplicas no se establecieron dentro de hedged_connection_timeout o si no se recibieron datos dentro de receive_data_timeout. La consulta utiliza la primera conexión que envía un paquete de progreso no vacío (o un paquete de datos, si allow_changing_replica_until_first_data_packet); las demás conexiones se cancelan. Se admiten consultas con max_parallel_replicas > 1. #19291 (Kruglov Pavel). Esto permite reducir significativamente las latencias de cola en clústeres muy grandes.
  • Se agregó compatibilidad con PREWHERE (y se habilitó la optimización correspondiente) cuando las tablas tienen definidas expresiones de seguridad a nivel de fila. #19576 (Denis Glazachev).
  • La configuración distributed_aggregation_memory_efficient está activada de forma predeterminada. Reducirá el uso de memoria y mejorará el rendimiento de las consultas distribuidas. #20599 (alexey-milovidov).
  • Mejora el rendimiento de GROUP BY con varias claves de tamaño fijo. #20472 (alexey-milovidov).
  • Mejora el rendimiento de las funciones de agregación mediante un uso más estricto de alias. #19946 (alexey-milovidov).
  • Acelera la lectura desde tablas Memory en casos extremos (cuando la velocidad de lectura es del orden de 50 GB/s) mediante la simplificación del pipeline y, en consecuencia, una menor contención por bloqueos en la planificación del pipeline. #20468 (alexey-milovidov).
  • Se ha reimplementado parcialmente el servidor HTTP para que haga menos copias de los datos entrantes y salientes. Esto ofrece una mejora de rendimiento de hasta 1,5 veces al insertar registros largos a través de HTTP. #19516 (Ivan).
  • Se añade la configuración compress para las tablas Memory. Si está habilitada, la tabla usará menos RAM. En algunas máquinas y conjuntos de datos, también puede hacer que SELECT sea más rápido, pero no siempre es así. Esto cierra #20093. Nota: hay razones por las que las tablas Memory pueden ser más lentas que MergeTree: (1) falta de compresión (2) tamaño estático de los bloques (3) falta de índices y prewhere… #20168 (alexey-milovidov).
  • Código de agregación ligeramente mejorado. #20978 (alexey-milovidov).
  • Se vuelven a añadir las especializaciones de intDiv/modulo para mejorar el rendimiento. Esto corrige #21293 . La regresión se introdujo en https://github.com/ClickHouse/ClickHouse/pull/18145 . #21307 (Amos Bird).
  • No compacte demasiado los bloques en INSERT SELECT si se insertan en una tabla Memory. En versiones anteriores, tras INSERT SELECT se creaba una representación ineficiente de los datos en la tabla Memory. Esto cierra #13052. #20169 (alexey-milovidov).
  • Se corrige al menos un caso en el que el analizador sintáctico de DataType puede tener complejidad exponencial (detectado por un fuzzer). Esto cierra #20096. #20132 (alexey-milovidov).
  • Paralelización de SELECT con FINAL para una sola parte con nivel > 0 cuando la configuración do_not_merge_across_partitions_select_final es 1. #19375 (Kruglov Pavel).
  • Rellenar solo las columnas solicitadas al consultar system.parts y system.parts_columns. Cierra #19570. #21035 (Anmol Arora).
  • Optimizaciones algebraicas de expresiones aritméticas dentro de la función de agregación avg. Cierra #20092. #20183 (flynn).

Mejora

  • Métodos de compresión para funciones de tabla sin distinción entre mayúsculas y minúsculas. También se corrigió el método de compresión LZMA, que se verificaba en mayúsculas. #21416 (Vladimir Chebotarev).
  • Añade dos configuraciones para retrasar la inserción o generar un error cuando haya demasiadas partes inactivas. Esto es útil cuando el servidor no consigue limpiar las partes con la suficiente rapidez. #20178 (Amos Bird).
  • Mejora la compatibilidad con clientes de mysql. 1. mysql jdbc 2. mycli. #21367 (Amos Bird).
  • Se prohíbe eliminar una columna si una vista materializada hace referencia a ella. Cierra #21164. #21303 (flynn).
  • La fuente de diccionario MySQL ahora reintentará los fallos de conexión inesperados (Lost connection to MySQL server during query), que a veces se producen en conexiones SSL/TLS. #21237 (Alexander Kazakov).
  • Mejora de usabilidad: análisis más consistente de DateTime64: reconoce el caso en que un Unix timestamp con resolución de subsegundos se especifica como un entero escalado (como 1111111111222 en lugar de 1111111111.222). Esto resuelve #13194. #21053 (alexey-milovidov).
  • Realizar únicamente la fusión de bloques ordenados en el iniciador con distributed_group_by_no_merge. #20882 (Azat Khuzhin).
  • Al cargar la configuración del origen MySQL, ClickHouse ahora ordenará aleatoriamente la lista de réplicas con la misma prioridad para garantizar la lógica de round robin al seleccionar el endpoint de MySQL. Esto cierra #20629. #20632 (Alexander Kazakov).
  • La función ‘reinterpretAs(x, Type)’ pasó a llamarse ‘reinterpret(x, Type)’. #20611 (Maksim Kita).
  • Compatibilidad con vhost en el motor RabbitMQ #20576. #20596 (Kseniia Sumarokova).
  • Se mejoró la serialización para tipos de datos compuestos por Arrays y Tuples. Se mejoró la correspondencia entre los tipos de datos enum y el tipo enum de protobuf. Se corrigió la serialización del tipo de datos Map. Los valores omitidos ahora se asignan por defecto. #20506 (Vitaly Baranov).
  • Se corrigió una condición de carrera entre la ejecución de tareas de DDL distribuido y la limpieza de la cola de DDL. Ahora, una tarea de DDL no puede eliminarse de ZooKeeper si hay workers activos. Corrige #20016. #20448 (tavplubix).
  • Hacer que FQDN y otras funciones relacionadas con DNS funcionen correctamente en imágenes de Alpine. #20336 (filimonov).
  • No permitir la evaluación anticipada de constantes en funciones explícitamente prohibidas. #20303 (Azat Khuzhin).
  • La conversión implícita de entero a tipo Decimal podía completarse correctamente incluso cuando el valor entero no cabía en el tipo Decimal. Ahora lanza ARGUMENT_OUT_OF_BOUND. #20232 (tavplubix).
  • SYSTEM FLUSH DISTRIBUTED sin bloqueos. #20215 (Azat Khuzhin).
  • Normalizar count(constant) y sum(1) a count(). Esto es necesario para el enrutamiento de consultas a proyecciones. #20175 (Amos Bird).
  • Compatibilidad con todos los tipos enteros nativos en las funciones de bitmap. #20171 (Amos Bird).
  • Se actualizaron CacheDictionary, ComplexCacheDictionary, SSDCacheDictionary y SSDComplexKeyDictionary para que utilicen LRUHashMap como índice subyacente. #20164 (Maksim Kita).
  • La configuración access_management ahora puede configurarse al iniciar mediante CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT; de forma predeterminada está deshabilitada (0), que era el valor anterior. #20139 (Marquitos).
  • Se corrige toDateTime64(toDate()/toDateTime()) para DateTime64: se implementa el ajuste de límites de DateTime64 para que coincida con el comportamiento de DateTime. #20131 (Azat Khuzhin).
  • Mejoras en las cuotas: SHOW TABLES ahora se considera una sola consulta en los cálculos de cuota, no dos. Las consultas SYSTEM ahora consumen cuota. Se corrige el cálculo del final de interval en el consumo de cuota. #20106 (Vitaly Baranov).
  • Admite expresiones path IN (set) en la tabla system.zookeeper. #20105 (小路).
  • Mostrar toda la información de las tablas MaterializeMySQL en system.tables. #20051 (Stig Bakken).
  • Se corrigió una condición de carrera en el Diccionario ejecutable que solo podía producirse por un uso indebido (cuando el script devuelve datos ignorando la entrada). #20045 (alexey-milovidov).
  • El valor de la opción MYSQL_OPT_RECONNECT ahora puede controlarse mediante el parámetro “opt_reconnect” en la sección de configuración de la réplica de MySQL. #19998 (Alexander Kazakov).
  • Si el usuario llama a la función JSONExtract solicitando el tipo Float32, se permite una conversión inexacta al tipo de resultado. Por ejemplo, el número 0.1 en JSON es de doble precisión y no se puede representar en Float32, pero el usuario aun así quiere obtenerlo. Las versiones anteriores devolvían 0 para el tipo no Nullable y NULL para el tipo Nullable para indicar que la conversión no era precisa. La lógica era 100 % correcta, pero resultaba sorprendente para los usuarios y generaba preguntas. Esto cierra #13962. #19960 (alexey-milovidov).
  • Se añadió la conversión de la estructura del bloque para INSERT en tablas distribuidas si no coincide. #19947 (Azat Khuzhin).
  • Mejora para la tabla system.distributed_ddl_queue. Inicializa MaxDDLEntryID con el último valor después de reiniciar. Antes de este PR, MaxDDLEntryID permanecía en cero hasta que se procesara una nueva DDLTask. #19924 (Amos Bird).
  • Mostrar las tablas de MaterializeMySQL en system.parts. #19770 (Stig Bakken).
  • Se añadió una directiva de configuración independiente para el perfil Buffer. #19721 (Azat Khuzhin).
  • Traslada a la cláusula WHERE las condiciones no relacionadas con JOIN. #18720. #19685 (hexiaoting).
  • Se añadió la capacidad de limitar la velocidad de INSERT en Distributed en función de la cantidad de bytes pendientes de envío asíncrono (se añadieron los ajustes bytes_to_delay_insert/max_delay_to_insert y bytes_to_throw_insert para el motor Distributed). #19673 (Azat Khuzhin).
  • Corrige algunos casos excepcionales en los que se pueden ignorar los errores de escritura en los destructores. #19451 (Azat Khuzhin).
  • Imprimir los frames inline en las trazas de pila para errores fatales. #19317 (Ivan).

Corrección de errores

  • Se corrigen las reconexiones redundantes a ZooKeeper y la posibilidad de que haya dos sesiones activas para un mismo servidor de ClickHouse. Ambos problemas se introdujeron en #14678. #21264 (alesapin).
  • Corrige el error Bad cast from type ... to DB::ColumnLowCardinality al insertar en una tabla con una columna LowCardinality desde el formato Values. Corrige #21140 #21357 (Nikolai Kochetov).
  • Se corrige un interbloqueo en las mutaciones ALTER DELETE de motores de tabla MergeTree no replicados cuando el predicado contiene la propia tabla. Corrige #20558. #21477 (alesapin).
  • Corrige SIGSEGV en las consultas distribuidas en caso de fallo. #21434 (Azat Khuzhin).
  • Ahora, las consultas ALTER MODIFY COLUMN afectarán correctamente a los cambios en la clave de partición, los índices de omisión, los TTL, etc. Corrige #13675. #21334 (alesapin).
  • Se corrige un error relacionado con join_use_nulls y con la unión de TOTALS de subconsultas. Esto cierra #19362 y #21137. #21248 (vdimir).
  • Se corrige un fallo en EXPLAIN para una consulta que incluye UNION. Corrige #20876, #21170. #21246 (flynn).
  • Ahora solo se permiten mutaciones en los motores de tabla que las admiten (familia MergeTree, Memory, MaterializedView). Los demás motores mostrarán un error más claro. Corrige #21168. #21183 (alesapin).
  • Soluciona #21112. Se corrigió un error que podía causar duplicados con la consulta de inserción (si uno de los callbacks llegaba un poco tarde). #21138 (Kseniia Sumarokova).
  • Hacer que input_format_null_as_default surta efecto cuando los tipos sean Nullable. Esto corrige #21116. #21121 (Amos Bird).
  • Corrige un error relacionado con la conversión de Tuple a Map. Cierra #21029. #21120 (hexiaoting).
  • Se corrige la fuga de metadatos cuando se elimina un Replicated*MergeTree con un clúster de ZooKeeper personalizado (no predeterminado). #21119 (fastio).
  • Corrige el problema de incompatibilidad de tipos al usar claves LowCardinality en joinGet. Esto soluciona #21114. #21117 (Amos Bird).
  • Se corrigió que los valores default_replica_path y default_replica_name fueran inútiles en el motor Replicated(*)MergeTree cuando este necesita especificar otros parámetros. #21060 (mxzlxy).
  • Era posible acceder a memoria fuera de los límites al formatear un valor de tipo DateTime64 fuera de rango especialmente diseñado. Esto cierra #20494. Esto cierra #20543. #21023 (alexey-milovidov).
  • Bloquear las inserciones paralelas en StorageJoin. #21009 (vdimir).
  • Se corrigió el comportamiento por el que ALTER MODIFY COLUMN creaba una mutación que se sabía de antemano que fallaría. #21007 (Anton Popov).
  • Cierra #9969. Se corrigió un error de compresión HTTP de Brotli que se reproducía con grandes volúmenes de datos, una estructura algo complicada y el formato de salida JSON. Se actualizó Brotli a la versión más reciente para incluir la “corrección de un acceso poco frecuente a datos no inicializados en el búfer circular”. #20991 (Kseniia Sumarokova).
  • Se corrige ‘Empty task was returned from async task queue’ al cancelar consultas. #20881 (Azat Khuzhin).
  • La consulta USE database; no funcionaba al usar el cliente MySQL 5.7 para conectarse al servidor ClickHouse; ya se ha corregido. Corrige #18926. #20878 (tavplubix).
  • Se corrige el uso del combinador -Distinct con el combinador -State en las funciones de agregación. #20866 (Anton Popov).
  • Se corrige la subconsulta con las cláusulas UNION DISTINCT y LIMIT. Cierra #20597. #20610 (flynn).
  • Se corrigió el comportamiento inconsistente del diccionario en consultas en las que se buscan claves inexistentes en el diccionario. #20578 (Nikita Mikhaylov).
  • Se corrige el número de hilos para las subconsultas escalares y las subconsultas de índice (después de #19007, siempre se usaba un solo hilo). Corrige #20457, #20512. #20550 (Nikolai Kochetov).
  • Se corrigió un fallo que podía producirse si se recibía un paquete desconocido procedente de una consulta remove (se introdujo en #17868). #20547 (Azat Khuzhin).
  • Añade las comprobaciones adecuadas al analizar los nombres de directorio para async INSERT (corrige SIGSEGV). #20498 (Azat Khuzhin).
  • Se corrige un problema por el que la función transform no funciona correctamente con claves de punto flotante. Cierra #20460. #20479 (flynn).
  • Se soluciona un bucle infinito al propagar aliases de WITH a subconsultas. Esto corrige #20388. #20476 (Amos Bird).
  • Se corrige la finalización anómala del servidor cuando el cliente http se desconecta. #20464 (Azat Khuzhin).
  • Se corrige LOGICAL_ERROR para join_use_nulls=1 cuando JOIN contiene una constante de SELECT. #20461 (Azat Khuzhin).
  • Comprobar si se usa la función de tabla view en la lista de expresiones y lanzar un error. Esto corrige #20342. #20350 (Amos Bird).
  • Se evita una desreferenciación no válida en el diccionario RANGE_HASHED(). #20345 (Azat Khuzhin).
  • Se corrige una desreferenciación de puntero nulo con join_use_nulls=1. #20344 (Azat Khuzhin).
  • Se corrige el resultado incorrecto de las operaciones binarias entre dos decimales constantes con distinta escala. Se corrige #20283. #20339 (Maksim Kita).
  • Se corrigen los reintentos demasiado frecuentes de tareas en segundo plano fallidas en la familia de motores de tablas ReplicatedMergeTree. Esto podía dar lugar a un logging excesivamente detallado y a un mayor uso de CPU. Corrige #20203. #20335 (alesapin).
  • Limitar DROP o RENAME de la columna de versión en los motores de tabla *CollapsingMergeTree y ReplacingMergeTree. #20300 (alesapin).
  • Se corrigió el comportamiento por el que, en caso de JSON dañado, se intentaba leer el archivo completo en memoria, lo que provocaba una excepción del asignador de memoria. Corrige #19719. #20286 (Nikita Mikhaylov).
  • Se corrige una excepción durante la fusión vertical en motores de tabla de la familia MergeTree que no permiten realizar fusiones verticales. Corrige #20259. #20279 (alesapin).
  • Se corrige un fallo poco frecuente del servidor al recargar la configuración durante el apagado. Corrige #19689. #20224 (alesapin).
  • Se corrige la CTE al usarla en INSERT SELECT. Esto corrige #20187 y #20195. #20211 (Amos Bird).
  • Soluciona #19314. #20156 (Ivan).
  • corregida la función toMinute para que gestione correctamente la timezone especial. #20149 (keenwolf).
  • Corrige la caída del servidor después de una consulta con la función if, con tipo Tuple en el resultado de las ramas then/else. El tipo Tuple debe contener Array u otro tipo complejo. Corrige #18356. #20133 (alesapin).
  • El motor de tablas MongoDB ahora establece la conexión solo cuando va a leer datos. ATTACH TABLE ya no intentará conectarse. #20110 (Vitaly Baranov).
  • Corrección de un error en StorageJoin. #20079 (vdimir).
  • Se corrigió el caso en el que, al calcular el módulo de la división de un número negativo entre un divisor pequeño, el tipo de dato resultante no era lo bastante grande para representar el resultado negativo. Esto cierra #20052. #20067 (alexey-milovidov).
  • MaterializeMySQL: Se corrige la replicación de sentencias que actualizan varias tablas. #20066 (Håvard Kvålen).
  • Evitar “Connection refused” en Docker durante la ejecución del script de inicialización. #20012 (filimonov).
  • EmbeddedRocksDB es un motor de almacenamiento experimental. Se corrigió el problema de la falta de una verificación de tipos adecuada. Se simplificó el código. Esto cierra #19967. #19972 (alexey-milovidov).
  • Se corrige un fallo de segmentación en la función fromModifiedJulianDay cuando el argumento es de tipo Nullable(T) para cualquier tipo integral distinto de Int32. #19959 (PHO).
  • Corrección del fallo del índice BloomFilter. Corrige #19757. #19884 (Maksim Kita).
  • Podía producirse un interbloqueo si system.text_log está habilitado. Esto corrige #19874. #19875 (alexey-milovidov).
  • Se corrigió el inicio del servidor con tablas que tienen expresiones por defecto que contienen dictGet(). Ahora se puede obtener el tipo de retorno de dictGet() sin cargar el diccionario. #19805 (Vitaly Baranov).
  • Se corrige la excepción de abortado de clickhouse-client al ejecutar solo select. #19790 (taiyang-li).
  • Corrige un error por el que el movimiento de partes a la tabla de destino podía fallar al iniciar varios clickhouse-copiers. #19743 (madianjun).
  • El hilo en segundo plano que ejecuta consultas ON CLUSTER podía quedarse bloqueado al esperar a que una tabla replicada eliminada completara alguna operación. Ya está corregido. #19684 (yiguolei).

Mejora de compilación/pruebas/empaquetado

  • Permitir compilar ClickHouse con AVX-2 habilitado globalmente. Ofrece ligeras mejoras de rendimiento en CPU modernas. No se recomienda para producción y, por ahora, no será compatible como compilación oficial. #20180 (alexey-milovidov).
  • Corregir algunos de los problemas detectados por Coverity. Véase #19964. #20010 (alexey-milovidov).
  • Permitir iniciar con un binario modificado en gdb. En la versión anterior, si se establecía un punto de interrupción en gdb antes de iniciar, el servidor se negaba a arrancar debido a un fallo en la comprobación de integridad. #21258 (alexey-milovidov).
  • Añadir una prueba para distintos métodos de compresión en Kafka. #21111 (filimonov).
  • Se corrigió un conflicto de puertos en la prueba test_storage_kerberized_hdfs. #19974 (Ilya Yatsishin).
  • Imprimir stdout y stderr en el registro cuando no se pueda iniciar Docker en las pruebas de integración. Antes de este PR, en este caso aparecía un mensaje de error muy breve que no ayudaba a investigar los problemas. #20631 (Vitaly Baranov).

lanzamiento de ClickHouse 21.2

Lanzamiento de ClickHouse v21.2.2.8-stable, 2021-02-07

Cambio incompatible con versiones anteriores

  • Ya no se permiten las funciones a nivel de bits (bitAnd, bitOr, etc.) con argumentos de coma flotante. Ahora es necesario realizar una conversión explícita a entero. #19853 (Azat Khuzhin).
  • Ya no se permiten lcm/gcd para valores de coma flotante. #19532 (Azat Khuzhin).
  • Se corrige el seguimiento de memoria para OPTIMIZE TABLE/merges; ahora se tienen en cuenta los límites de memoria de la consulta y el sampling para OPTIMIZE TABLE/merges. #18772 (Azat Khuzhin).
  • No se permiten columnas de coma flotante como clave de partición; consulte #18421. #18464 (hexiaoting).
  • Los paréntesis excesivos en las definiciones de tipos ya no son compatibles; ejemplo: Array((UInt8)).

Nueva característica

  • Se añadió el motor de tabla PostgreSQL (tanto para select como para insert, con compatibilidad con arrays multidimensionales), también como función de tabla. Se añadió la fuente de diccionario PostgreSQL. Se añadió el motor de base de datos PostgreSQL. #18554 (Kseniia Sumarokova).
  • El tipo de dato Nested ahora admite niveles arbitrarios de anidamiento. Se introdujeron subcolumnas de tipos complejos, como size0 en Array, null en Nullable y los nombres de los elementos de Tuple, que pueden leerse sin necesidad de leer la columna completa. #17310 (Anton Popov).
  • Se añadió soporte para Nullable en FlatDictionary, HashedDictionary, ComplexKeyHashedDictionary, DirectDictionary, ComplexKeyDirectDictionary y RangeHashedDictionary. #18236 (Maksim Kita).
  • Agrega una nueva tabla llamada system.distributed_ddl_queue que muestra las consultas de la cola del worker de DDL. #17656 (Bharat Nallan).
  • Se agregó compatibilidad para asignar nombres de grupos LDAP y, en general, valores de atributos a roles locales para usuarios de directorios de usuarios LDAP. #17211 (Denis Glazachev).
  • Se admite insert en la función de tabla cluster y, para las funciones de tabla remote y cluster, también se admite distribuir los datos entre nodos especificando una clave de sharding. Cierra #16752. #18264 (flynn).
  • Se agregó la función decodeXMLComponent para decodificar caracteres en XML. Ejemplo: SELECT decodeXMLComponent('Hello,&quot;world&quot;!') #17659. #18542 (nauta).
  • Se añadieron las funciones parseDateTimeBestEffortUSOrZero, parseDateTimeBestEffortUSOrNull. #19712 (Maksim Kita).
  • Se añade la función matemática sign. #19527 (flynn).
  • Añadir a system.query_log información sobre las funcionalidades utilizadas (funciones, motores de tablas, etc.). #18495. #19371 (Kseniia Sumarokova).
  • La función formatDateTime admite el modificador %Q para dar formato a la fecha como trimestre. #19224 (Jianmei Zhang).
  • Se admite el atajo de teclado MetaKey+Enter en la UI de play. #19012 (sundyli).
  • Añade tres funciones para el tipo de dato Map: 1. mapContains(map, key) para comprobar si map.keys incluye la segunda clave del parámetro key. 2. mapKeys(map) devuelve todas las claves en formato Array 3. mapValues(map) devuelve todos los valores en formato Array. #18788 (hexiaoting).
  • Añade la configuración log_comment relacionada con #18494. #18549 (Zijie Lu).
  • Se añadió compatibilidad con argumentos de tipo tuple en las funciones argMin y argMax. #17359 (Ildus Kurbangaliev).
  • Soporte para la sintaxis EXISTS VIEW. #18552 (Du Chuan).
  • Se añade la sintaxis SELECT ALL. Cierra #18706. #18723 (flynn).

Mejora del rendimiento

  • Eliminación más rápida de partes al reducir el número de llamadas al sistema stat. Esto recupera una optimización que existía tiempo atrás. Interfaz más segura para IDisk. Esto cierra #19065. #19086 (alexey-milovidov).
  • Los alias declarados en la sentencia WITH se usan correctamente en el análisis de índices. Consultas como WITH column AS alias SELECT ... WHERE alias = ... ahora pueden usar el índice. #18896 (Amos Bird).
  • Se añade optimize_alias_column_prediction (activado de forma predeterminada), que: - tendrá en cuenta las columnas con alias en WHERE durante la poda de particiones y la omisión de datos mediante índices secundarios; - tendrá en cuenta las columnas con alias en WHERE para consultas de conteo triviales de optimize_trivial_count; - tendrá en cuenta las columnas con alias en GROUP BY/ORDER BY para optimize_aggregation_in_order/optimize_read_in_order. #16995 (sundyli).
  • Acelera la función de agregación sum. La mejora solo es visible en benchmarks sintéticos y no resulta muy práctica. #19216 (alexey-milovidov).
  • Actualiza libc++ y usa otro ABI para ofrecer un mejor rendimiento. #18914 (Danila Kutenin).
  • Reescribe las funciones sumIf() y sum(if()) como countIf() cuando son lógicamente equivalentes. #17041 (flynn).
  • Usa un pool de conexiones para S3, controlado por la configuración s3_max_connections. #13405 (Vladimir Chebotarev).
  • Añade compatibilidad con la opción long de zstd para mejorar la compresión de las columnas de cadenas y ahorrar espacio. #17184 (ygrek).
  • Mejora ligeramente la latencia del servidor al eliminar el acceso a la configuración en cada conexión. #19863 (alexey-milovidov).
  • Reduce la contención de bloqueos en múltiples capas del engine Buffer. #19379 (Azat Khuzhin).
  • Admite dividir el paso Filter del plan de consulta en un par Expression + Filter. Junto con la optimización de fusión Expression + Expression (#17458), esto puede retrasar la ejecución de algunas expresiones hasta después del paso Filter. #19253 (Nikolai Kochetov).

Mejora

  • SELECT count() FROM table ahora puede ejecutarse si se puede seleccionar al menos una columna cualquiera de la table. Este PR corrige #10639. #18233 (Vitaly Baranov).
  • Se configura el juego de caracteres como utf8mb4 al interactuar con servidores MySQL remotos. Corrige #19795. #19800 (alexey-milovidov).
  • La función de tabla S3 ahora admite el modo de compresión auto (detección automática). Esto resuelve #18754. #19793 (Vladimir Chebotarev).
  • Se muestran correctamente los argumentos infinitos para la función formatReadableTimeDelta. En versiones anteriores, había una conversión implícita a un valor entero específico de la implementación. #19791 (alexey-milovidov).
  • La función de tabla S3 usará la región global si no se puede determinar con exactitud la región. Esto cierra #10998. #19750 (Vladimir Chebotarev).
  • En las consultas distribuidas, si la opción async_socket_for_remote está habilitada, era posible provocar un desbordamiento de pila, al menos en la configuración de compilación de depuración, si se utilizaba en una tabla un tipo de dato con un anidamiento muy profundo (p. ej., Array(Array(Array(...more...)))). Esto corrige #19108. Este cambio introduce una incompatibilidad menor con versiones anteriores: ya no se admiten paréntesis superfluos en las definiciones de tipos; ejemplo: Array((UInt8)). #19736 (alexey-milovidov).
  • Añadir un pool independiente para brókeres de mensajes (RabbitMQ y Kafka). #19722 (Azat Khuzhin).
  • Corrige un caso poco frecuente en el que se excede el límite max_number_of_merges_with_ttl_in_pool (se pueden asignar más fusiones con TTL) en MergeTree no replicado. #19708 (alesapin).
  • Diccionario: mejor mensaje de error al analizar atributos. #19678 (Maksim Kita).
  • Añade una opción para desactivar la validación de las sumas de comprobación durante la lectura. Nunca debe usarse en producción. No espere obtener ningún beneficio al desactivarla. Solo puede usarse para experimentos y benchmarks. Esta configuración solo es aplicable a tablas de la familia MergeTree. Las sumas de comprobación siempre se validan en otros motores de tabla y al recibir datos a través de la red. Según mis observaciones, no hay ninguna diferencia de rendimiento o es inferior al 0,5 %. #19588 (alexey-milovidov).
  • Permite resultados constantes en la función multiIf. #19533 (Maksim Kita).
  • Habilita las funciones length/empty/notEmpty para el tipo de dato Map; length devuelve el número de claves del Map. #19530 (taiyang-li).
  • Se añadió la opción --reconnect a clickhouse-benchmark. Cuando se especifica esta opción, se reconectará antes de cada petición. Esto es necesario para las pruebas. #19872 (alexey-milovidov).
  • Compatibilidad con la nueva ubicación del archivo .debug. Esto corrige #19348. #19520 (Amos Bird).
  • La función toIPv6 interpreta direcciones IPv4. #19518 (Bharat Nallan).
  • Se añade el campo http_referer a system.query_log, system.processes, etc. Esto cierra #19389. #19390 (alexey-milovidov).
  • Mejora la compatibilidad con MySQL al hacer que más funciones no distingan entre mayúsculas y minúsculas y al añadir alias. #19387 (Daniil Kondratyev).
  • Se añaden métricas para los tipos de partes de MergeTree (Wide/Compact/InMemory). #19381 (Azat Khuzhin).
  • Permitir la ejecución de Docker con un UID arbitrario. #19374 (filimonov).
  • Se corrigió la alineación incorrecta de los valores del tipo de dato IPv4 en los formatos Pretty. Estaban alineados a la derecha, no a la izquierda. Con esto se cierra #19184. #19339 (alexey-milovidov).
  • Permite cambiar max_server_memory_usage sin reiniciar. Esto soluciona #18154. #19186 (alexey-milovidov).
  • La excepción que se produce al llamar a la función bar con determinado argumento NaN puede resultar algo engañosa en versiones anteriores. Esto corrige #19088. #19107 (alexey-milovidov).
  • Se establecen explícitamente los valores fijos (101) para el uid / gid del usuario y el grupo de clickhouse en las imágenes de clickhouse-server. #19096 (filimonov).
  • Se corrigió el error PeekableReadBuffer: Memory limit exceed al insertar datos con cadenas muy grandes. Corrige #18690. #18979 (tavplubix).
  • Imagen de Docker: varias mejoras en el entrypoint de clickhouse-server. #18954 (filimonov).
  • Se añaden normalizeQueryKeepNames y normalizedQueryHashKeepNames para normalizar consultas sin enmascarar los nombres largos con ?. Esto ayuda a analizar mejor los registros de consultas complejas. #18910 (Amos Bird).
  • Comprobar la suma de verificación por bloque del lote distribuido en el remitente antes de enviarlo (sin leer el archivo dos veces; las sumas de verificación se comprobarán durante la lectura); esto evitará que el INSERT se quede bloqueado en el receiver (si hay un archivo .bin truncado en el remitente). Evitar leer los archivos .bin dos veces en INSERT por lotes (era necesario para calcular filas/bytes y tener en cuenta el squashing; ahora esta información se incluye en el header y se mantiene la compatibilidad con versiones anteriores). #18853 (Azat Khuzhin).
  • Corrige problemas con RIGHT y FULL JOIN de tablas con estados de funciones de agregación. En versiones anteriores se lanzaba una excepción relacionada con el método cloneResized. #18818 (templarzq).
  • Se añadieron configuraciones de endpoints de S3 basadas en prefijos. #18812 (Vladimir Chebotarev).
  • Se añade compatibilidad con los tipos de argumento [UInt8, UInt16, UInt32, UInt64] para las funciones bitmapTransform, bitmapSubsetInRange, bitmapSubsetLimit y bitmapContains. Esto cierra #18713. #18791 (sundyli).
  • Permitir asignar más alias a las CTE (expresiones de tabla comunes). Propagar la CSE (eliminación de subexpresiones comunes) a las subconsultas del mismo nivel cuando enable_global_with_statement = 1. Esto corrige #17378 . Esto corrige https://github.com/ClickHouse/ClickHouse/pull/16575#issuecomment-753416235 . #18684 (Amos Bird).
  • Actualizar librdkafka a v1.6.0-RC2. Corrige #18668. #18671 (filimonov).
  • En caso de excepciones inesperadas, se reinicia automáticamente el hilo en segundo plano responsable de ejecutar consultas DDL distribuidas. Corrige #17991. #18285 (徐炘).
  • Se actualizó el SDK de AWS para C++ para utilizar regiones globales en S3. #17870 (Vladimir Chebotarev).
  • Se añadió compatibilidad con la cláusula WITH ... [AND] [PERIODIC] REFRESH [interval_in_sec] para crear tablas LIVE VIEW. #14822 (vzakaznikov).
  • Restringir las consultas MODIFY TTL para las tablas MergeTree creadas con la sintaxis antigua. Anteriormente, la consulta se ejecutaba correctamente, pero en realidad no tenía ningún efecto. #19064 (Anton Popov).

Corrección de errores

  • Se corrige el análisis de índices en funciones binarias con un argumento constante, que provocaba resultados de consulta incorrectos. Esto corrige #18364. #18373 (Amos Bird).
  • Se corrigió el inicio del servidor con tablas que tienen expresiones predeterminadas que contienen dictGet(). Ahora se puede obtener el tipo de retorno de dictGet() sin cargar el Diccionario. #19805 (Vitaly Baranov).
  • Se corrige el fallo del servidor después de una consulta con la función if cuando el resultado de las ramas then/else es de tipo Tuple. El tipo Tuple debe contener Array u otro tipo complejo. Corrige #18356. #20133 (alesapin).
  • MaterializeMySQL (función experimental): Se corrige la replicación de las sentencias que actualizan varias tablas. #20066 (Håvard Kvålen).
  • Evita “Connection refused” en Docker durante la ejecución del script de inicialización. #20012 (filimonov).
  • EmbeddedRocksDB es un motor de almacenamiento experimental. Se corrigió el problema de la falta de una comprobación de tipos adecuada. Se simplificó el código. Esto resuelve #19967. #19972 (alexey-milovidov).
  • Se corrigió un fallo de segmentación en la función fromModifiedJulianDay cuando el tipo de argumento es Nullable(T) para cualquier tipo entero distinto de Int32. #19959 (PHO).
  • La función greatCircleAngle devolvía resultados inexactos en versiones anteriores. Esto soluciona #19769. #19789 (alexey-milovidov).
  • Corrige un error poco frecuente por el cual algunas operaciones replicadas (como mutation) no pueden procesar ciertas partes tras una corrupción de datos. Corrige #19593. #19702 (alesapin).
  • El hilo en segundo plano que ejecuta consultas ON CLUSTER podía quedarse bloqueado esperando a que una tabla replicada ya eliminada hiciera algo. Se ha corregido. #19684 (yiguolei).
  • Se corrigió la deserialización incorrecta de la descripción de las columnas. Esto hacía imposible el INSERT en una tabla con una columna llamada \. #19479 (alexey-milovidov).
  • Marcar como dañado el lote distribuido en caso de que haya un bloque de datos vacío en uno de los archivos. #19449 (Azat Khuzhin).
  • Se corrigió un error muy poco frecuente que podía hacer que una mutación se quedara bloqueada después de DROP/DETACH/REPLACE/MOVE PARTITION. Ya se había corregido parcialmente en #15537 en la mayoría de los casos. #19443 (tavplubix).
  • Corrige el posible error Extremes transform was already added to pipeline. Corrige #14100. #19430 (Nikolai Kochetov).
  • Corrige el valor predeterminado en los tipos de JOIN con un valor predeterminado distinto de cero (p. ej., algunos Enum). Cierra #18197. #19360 (vdimir).
  • No marcar como dañado el archivo de marcas del envío distribuido al llegar a EOF. #19290 (Azat Khuzhin).
  • Se corrige la fuga del descriptor de archivo del pipe para async_socket_for_remote. #19153 (Azat Khuzhin).
  • Se corrige la lectura infinita de un archivo en formato ORC (introducida en #10580). Corrige #19095. #19134 (Nikolai Kochetov).
  • Se corrige un problema en el escritor de datos de MergeTree que puede dar lugar a marks con un tamaño mayor que el de la granularidad fija. Corrige #18913. #19123 (alesapin).
  • Se corrige un error de inicio por el que ClickHouse no podía leer el códec de compresión de LowCardinality(Nullable(...)) y lanzaba la excepción Attempt to read after EOF. Corrige #18340. #19101 (alesapin).
  • Simplifica la implementación de tupleHammingDistance. Se añaden compatibilidad con tuplas de cualquier longitud, siempre que sea la misma. Corrige #19029. #19084 (Nikolai Kochetov).
  • Asegúrese de que groupUniqArray devuelva el tipo correcto para un argumento de tipo Enum. Esto cierra #17875. #19019 (alexey-milovidov).
  • Corrige el posible error Expected single dictionary argument for function al usar la función ignore con el argumento LowCardinality. Corrige #14275. #19016 (Nikolai Kochetov).
  • Se corrige la inserción de la columna LowCardinality en una tabla con el motor TinyLog. Se corrige #18629. #19010 (Nikolai Kochetov).
  • Se corrige un problema menor en JOIN: Join intenta materializar columnas const, pero en otras partes de nuestro código se espera que lo sean. #18982 (Nikita Mikhaylov).
  • Se deshabilita optimize_move_functions_out_of_any porque la optimización no siempre es correcta. Esto cierra #18051. Esto cierra #18973. #18981 (alexey-milovidov).
  • Corrige una posible excepción QueryPipeline stream: different number of columns debida a la fusión de los pasos Expression del plan de consulta. Corrige #18190. #18980 (Nikolai Kochetov).
  • Se corrigió un interbloqueo muy poco frecuente durante el apagado. #18977 (tavplubix).
  • Se corrigieron fallos poco frecuentes cuando el servidor se quedaba sin memoria. #18976 (tavplubix).
  • Soluciona el comportamiento incorrecto por el que la consulta ALTER TABLE ... DROP PART 'part_name' elimina todos los bloques de deduplicación de toda la partición. Corrige #18874. #18969 (alesapin).
  • Se corrigió el problema #18894: se añadió una comprobación para evitar una excepción cuando un alias de columna largo (del estilo ‘table.column’, normalmente generado automáticamente por herramientas de BI como Looker) coincide con un nombre de tabla largo. #18968 (Daniel Qin).
  • Se corrige el error Task was not found in task queue (solo posible en consultas remotas, con async_socket_for_remote = 1). #18964 (Nikolai Kochetov).
  • Se corrige un error por el que una mutation con texto escapado (como ALTER ... UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1')) se serializaba incorrectamente. Corrige #18878. #18944 (alesapin).
  • ATTACH PARTITION reiniciará las mutaciones. #18804. #18935 (fastio).
  • Se corrige un problema con bitmapOrCardinality que puede provocar la desreferenciación de un nullptr. Esto cierra #18911. #18912 (sundyli).
  • Se corrigió el error Attempt to read after eof al intentar hacer CAST de NULL desde Nullable(String) a Nullable(Decimal(P, S)). Ahora, la función CAST devuelve NULL cuando no puede analizar un decimal a partir de una cadena anulable. Corrige #7690. #18718 (Winter Zhang).
  • Se corrige un problema en la conversión de tipos de datos del motor MySQL. #18124 (bo zeng).
  • Corregida la excepción de abort() en clickhouse-client al ejecutar solo select. #19790 (taiyang-li).

Mejora de compilación/pruebas/empaquetado

  • Ejecutar SQLancer (fuzzer lógico de SQL) en CI. #19006 (Ilya Yatsishin).
  • Query Fuzzer aplicará fuzzing más exhaustivo a las pruebas recién añadidas. Esto cierra #18916. #19185 (alexey-milovidov).
  • Integración con Big List of Naughty Strings para mejorar el fuzzing. #19480 (alexey-milovidov).
  • Se añadieron pruebas de integración ejecutadas con MSan. #18974 (alesapin).
  • Se corrigieron errores de MemorySanitizer en cyrus-sasl y musl. #19821 (Ilya Yatsishin).
  • La comprobación de argumentos insuficientes en la función positionCaseInsensitiveUTF8 activaba el sanitizador de direcciones. #19720 (alexey-milovidov).
  • Se eliminó --project-directory de docker-compose en la prueba de integración. Se corrigió el formato de los logs del contenedor de Docker. #19706 (Ilya Yatsishin).
  • Se facilitó la generación de macros.xml para las pruebas de integración. Ya no hay logging excesivo de dicttoxml. El proyecto dicttoxml lleva más de 5 años sin actividad. #19697 (Ilya Yatsishin).
  • Se permite habilitar o deshabilitar explícitamente el watchdog mediante la variable de entorno CLICKHOUSE_WATCHDOG_ENABLE. De forma predeterminada, está habilitado si el servidor no está conectado a una terminal. #19522 (alexey-milovidov).
  • Se permite compilar ClickHouse con soporte para Kafka en arm64. #19369 (filimonov).
  • Se permite compilar librdkafka sin ssl. #19337 (filimonov).
  • Se restauró la entrada de Kafka en las builds de FreeBSD. #18924 (Alexandre Snarskii).
  • Se corrigió una posible desreferenciación de nullptr en la función de tabla VALUES. #19357 (alexey-milovidov).
  • Se evitan informes de UBSan en la función arrayElement, substring y arraySum. Corrige #19305. Corrige #19287. Esto cierra #19336. #19347 (alexey-milovidov).

lanzamiento de ClickHouse 21.1

Lanzamiento de ClickHouse v21.1.3.32-stable, 2021-02-03

Corrección de errores

  • Corrección de un fallo del índice BloomFilter. Corrige #19757. #19884 (Maksim Kita).
  • Corrige un fallo al aplicar predicados a una subconsulta union distinct. Esto corrige #19855. #19861 (Amos Bird).
  • Se corrige el filtrado para valores UInt8 mayores que 127. #19799 (Anton Popov).
  • En versiones anteriores, los argumentos inusuales de la función arrayEnumerateUniq podían provocar un bloqueo o un bucle infinito. Se cierra #19787. #19788 (alexey-milovidov).
  • Se corrigió un desbordamiento de pila al usar una comparación precisa entre un tipo aritmético y el tipo String. #19773 (tavplubix).
  • Se corrige un fallo que se producía al usar un nombre de columna anidada en WHERE o PREWHERE. Corrige #19755. #19763 (Nikolai Kochetov).
  • Se corrige un fallo de segmentación en la función bitmapAndnot. Corrige #19668. #19713 (Maksim Kita).
  • Algunas funciones con enteros de gran tamaño pueden causar un fallo de segmentación. Los enteros de gran tamaño son una funcionalidad experimental. Esto cierra #19667. #19672 (alexey-milovidov).
  • Soluciona el resultado incorrecto de la función neighbor para el argumento LowCardinality. Soluciona #10333. #19617 (Nikolai Kochetov).
  • Se corrige un uso tras la liberación de CompressedWriteBuffer en Connection después de la desconexión. #19599 (Azat Khuzhin).
  • La consulta DROP/DETACH TABLE table ON CLUSTER cluster SYNC podía quedarse bloqueada; ya se ha corregido. Corrige #19568. #19572 (tavplubix).
  • Corrección de la expresión de id en la consulta CREATE DICTIONARY. #19571 (Maksim Kita).
  • Se corrigió SIGSEGV con merge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read=0/UINT64_MAX. #19528 (Azat Khuzhin).
  • Era posible un desbordamiento de búfer (al leer memoria) si se llamaba a la función addMonth con argumentos especialmente manipulados. Esto corrige #19441. Esto corrige #19413. #19472 (alexey-milovidov).
  • Era posible leer memoria no inicializada en las funciones encrypt/decrypt si se pasaba una cadena vacía como IV. Con esto se cierra #19391. #19397 (alexey-milovidov).
  • Soluciona un posible desbordamiento de búfer en la biblioteca Uber H3. Consulta https://github.com/uber/h3/issues/392. Esto cierra #19219. #19383 (alexey-milovidov).
  • Se corrigió la columna _state de system.parts (LOGICAL_ERROR al consultar esta columna debido a un orden incorrecto). #19346 (Azat Khuzhin).
  • Se corrigieron un posible resultado erróneo o un fallo de segmentación en la agregación cuando una vista materializada y su tabla de destino tienen estructuras diferentes. Corrige #18063. #19322 (tavplubix).
  • Se corrigió el error Cannot convert column now64() because it is constant but values of constants are different in source and result. Continuación de #7156. #19316 (Nikolai Kochetov).
  • Se corrige un error por el que las consultas ALTER y DROP concurrentes podían quedar bloqueadas al procesar una tabla ReplicatedMergeTree. #19237 (alesapin).
  • Se corrigió el error There is no checkpoint al insertar datos mediante la interfaz HTTP con el formato Template o CustomSeparated. Corrige #19021. #19072 (tavplubix).
  • Deshabilitar el plegado de constantes para las subconsultas en la fase de análisis cuando no se pueda calcular el resultado. #18446 (Azat Khuzhin).
  • La mutación podía quedarse bloqueada esperando alguna parte inexistente después de MOVE o REPLACE PARTITION o, en casos raros, después de DETACH o DROP PARTITION. Ya se corrigió. #15537 (tavplubix).

Lanzamiento de ClickHouse v21.1.2.15-stable 2021-01-18

Cambio incompatible con versiones anteriores

  • La configuración input_format_null_as_default está habilitada de forma predeterminada. #17525 (alexey-milovidov).
  • Se comprueban las restricciones de configuración para los ajustes de perfil definidos en la configuración. El servidor no arrancará si users.xml contiene ajustes que no cumplan las restricciones correspondientes. #18486 (tavplubix).
  • Se restringe ALTER MODIFY SETTING para impedir que cambie configuraciones de almacenamiento que afectan a las partes de datos (write_final_mark y enable_mixed_granularity_parts). #18306 (Amos Bird).
  • insert_quorum_parallel se establece en 1 de forma predeterminada. Es bastante más cómodo de usar que las inserciones con quórum “sequential”. Pero si depende de la consistencia secuencial, debe volver a establecer esta configuración en cero. #17567 (alexey-milovidov).
  • Se elimina la función sumburConsistentHash. Esto cierra #18120. #18656 (alexey-milovidov).
  • Se eliminaron las funciones de agregación timeSeriesGroupSum, timeSeriesGroupRateSum porque un amigo mío dijo que nunca funcionaron. Esto corrige #16869. Si ha tenido suerte usando estas funciones, envíe un correo electrónico a feedback@clickhouse.com. #17423 (alexey-milovidov).
  • Se prohíbe toUnixTimestamp(Date()) (antes simplemente devolvía la representación UInt16 de Date). #17376 (Azat Khuzhin).
  • Se permite usar tipos enteros extendidos (Int128, Int256, UInt256) en las funciones avg y avgWeighted. También se permite usar distintos tipos (entero, decimal, punto flotante) para el valor y el peso en la función avgWeighted. Este es un cambio incompatible con versiones anteriores: ahora las funciones avg y avgWeighted siempre devuelven Float64 (como está documentado). Antes de este cambio, el tipo de retorno para argumentos Decimal también era Decimal. #15419 (Mike).
  • La expresión toUUID(N) ya no funciona. Sustitúyala por toUUID('00000000-0000-0000-0000-000000000000'). Este cambio se debe a los resultados poco evidentes de toUUID(N) cuando N es distinto de cero.
  • Se rechazan los certificados SSL con “key usage” incorrecto. En versiones anteriores solían funcionar. Véase #19262.
  • Se eliminaron de la configuración predeterminada las referencias incl al archivo de sustituciones (/etc/metrika.xml) (<remote_servers>, <zookeeper>, <macros>, <compression>, <networks>). Si estaba usando el archivo de sustituciones y dependía de esas referencias implícitas, debe volver a añadirlas manualmente y de forma explícita agregando las secciones correspondientes con atributos incl="..." antes de la actualización. Véase #18740 (alexey-milovidov).

Nueva característica

  • Se implementó el protocolo gRPC en ClickHouse. #15111 (Vitaly Baranov).
  • Permite usar varios clusters de ZooKeeper. #17070 (fastio).
  • Se implementaron las consultas REPLACE TABLE y CREATE OR REPLACE TABLE. #18521 (tavplubix).
  • Implementa UNION DISTINCT y trata la cláusula UNION sin especificar como UNION DISTINCT de forma predeterminada. Añade una configuración union_default_mode que permite tratarla como UNION ALL o exigir que el modo se especifique explícitamente. #16338 (flynn).
  • Se añadió la función accurateCastOrNull. Esto resuelve #10290. Se añadieron conversiones de tipo en las expresiones x IN (subquery). Esto resuelve #10266. #16724 (Maksim Kita).
  • El Diccionario IP admite directamente los tipos IPv4 / IPv6. #17571 (vdimir).
  • El Diccionario IP admite la recuperación por clave. Resuelve #18241. #18480 (vdimir).
  • Añade compatibilidad con compresión y descompresión *.zst para importar y exportar datos. Permite usar *.zst en la función file() y Content-encoding: zstd en el cliente HTTP. Esto cierra #16791 . #17144 (Abi Palagashvili).
  • Se añadieron las funciones de agregación mannWitneyUTest, studentTTest y welchTTest. Se refactorizó un poco rankCorr. #16883 (Nikita Mikhaylov).
  • Se añadieron las funciones countMatches/countMatchesCaseInsensitive. #17459 (Azat Khuzhin).
  • Se implementan countSubstrings()/countSubstringsCaseInsensitive()/countSubstringsCaseInsensitiveUTF8() (Cuenta el número de apariciones de subcadenas). #17347 (Azat Khuzhin).
  • Se añade información sobre las bases de datos, tablas y columnas utilizadas en system.query_log. Se añaden los campos query_kind y normalized_query_hash. #17726 (Amos Bird).
  • Agrega una opción de configuración optimize_on_insert. Cuando está habilitada, realiza la misma transformación en el bloque de datos INSERTado que si se hubiera hecho un merge de este bloque (p. ej., Replacing, Collapsing, Aggregating…). Esta configuración está habilitada de forma predeterminada. Esto puede influir en el comportamiento de la vista materializada y de MaterializeMySQL (consulta la descripción detallada). Esto cierra #10683. #16954 (Kruglov Pavel).
  • Autenticación Kerberos para HDFS. #16621 (Ilya Golshtein).
  • Se admite la sentencia SHOW SETTINGS para mostrar parámetros de system.settings. También se admiten la sentencia SHOW CHANGED SETTINGS y la cláusula LIKE/ILIKE. #18056 (Jianmei Zhang).
  • La función position ahora admite la sintaxis POSITION(needle IN haystack) para garantizar la compatibilidad con SQL. Esto cierra #18701. … #18779 (Jianmei Zhang).
  • Ahora hay una nueva configuración de almacenamiento, max_partitions_to_read, para las tablas de la familia MergeTree. Limita el número máximo de particiones a las que se puede acceder en una sola consulta. También se ha añadido una configuración de usuario, force_max_partition_limit, para imponer esta restricción. #18712 (Amos Bird).
  • Añade la columna query_id a system.part_log para las partes insertadas. Cierra #10097. #18644 (flynn).
  • Permite CREATE TABLE AS SELECT con especificación de columnas. Ejemplo CREATE TABLE t1 (x String) ENGINE = Memory AS SELECT 1;. #18060 (Maksim Kita).
  • Se añadieron las funciones de agregación arrayMin, arrayMax y arrayAvg. #18032 (Maksim Kita).
  • Se implementó la consulta ATTACH TABLE name FROM 'path/to/data/' (col1 Type1, .... Crea una tabla nueva con la estructura proporcionada y adjunta los datos de la tabla desde el directorio especificado en user_files. #17903 (tavplubix).
  • Se añade compatibilidad con mutaciones en StorageMemory. Esto cierra #9117. #15127 (flynn).
  • Se añadió compatibilidad con la sintaxis EXISTS DATABASE name. #18458 (Du Chuan).
  • Se añade compatibilidad con las funciones integradas isIPv4String && isIPv6String, como en MySQL. #18349 (Du Chuan).
  • Se añade una nueva configuración insert_distributed_one_random_shard = 1 para permitir la inserción en una tabla distribuida con varios segmentos sin clave de distribución. #18294 (Amos Bird).
  • Se agregan los ajustes min_compress_block_size y max_compress_block_size a MergeTreeSettings, que tienen mayor prioridad que los ajustes globales y entran en vigor cuando se establecen. cierra 13890. #17867 (flynn).
  • Se añade soporte para bitmaps roaring de 64 bits. #17858 (Andy Yang).
  • Se amplió la sintaxis de OPTIMIZE ... DEDUPLICATE para permitir una lista explícita (o implícita, con asterisco/transformadores de columnas) de columnas en las que comprobar si hay duplicados. … #17846 (Vasily Nemkov).
  • Se añadieron las funciones toModifiedJulianDay, fromModifiedJulianDay, toModifiedJulianDayOrNull y fromModifiedJulianDayOrNull. Estas funciones convierten entre una fecha del calendario gregoriano proléptico y un número de día juliano modificado. #17750 (PHO).
  • Se agregó la posibilidad de usar una lista personalizada de TLD: se agregaron las funciones firstSignificantSubdomainCustom, cutToFirstSignificantSubdomainCustom. #17748 (Azat Khuzhin).
  • Se añade compatibilidad con el protocolo PROXYv1 para encapsular la interfaz TCP nativa. Permite asociar las cuotas a la dirección IP reenviada por el proxy (se aplica a la dirección PROXYv1 y a X-Forwarded-For de la interfaz HTTP). Esto resulta útil cuando se proporciona acceso a ClickHouse solo a través de un proxy de confianza (p. ej., CloudFlare), pero se desea contabilizar los recursos de los usuarios por sus direcciones IP originales. Esto corrige #17268. #17707 (alexey-milovidov).
  • Ahora, clickhouse-client permite abrir EDITOR para editar comandos. Alt-Shift-E. #17665 (Amos Bird).
  • Se añade la función encodeXMLComponent para escapar caracteres y colocar una cadena en un nodo de texto o atributo XML. #17659 (nauta).
  • Se introduce la sintaxis DETACH TABLE/VIEW ... PERMANENTLY para que, después de reiniciar, la tabla no vuelva a aparecer automáticamente (solo si se solicita explícitamente). La tabla aún puede volver a adjuntarse usando la sintaxis corta ATTACH TABLE. Implementa #5555. Corrige #13850. #17642 (filimonov).
  • Añade métricas asíncronas sobre la cantidad total de filas, bytes y partes en las tablas MergeTree. Esto corrige #11714. #17639 (flynn).
  • Se añaden las opciones de configuración limit y offset para la paginación fuera de SQL: #16176 Son útiles para crear API. Estas dos opciones de configuración afectarán a la consulta SELECT como si se añadieran así: select * from (your_original_select_query) t limit xxx offset xxx;. #17633 (hexiaoting).
  • Se incorpora un nuevo combinador de agregación: -SimpleState para crear tipos SimpleAggregateFunction mediante una consulta. Es útil para definir una MaterializedView con el motor AggregatingMergeTree, y también beneficiará a las proyecciones. #16853 (Amos Bird).
  • Se añadió el parámetro queries-file a clickhouse-client y clickhouse-local. #15930 (Maksim Kita).
  • Se añadió el parámetro query a clickhouse-benchmark. #17832 (Maksim Kita).
  • EXPLAIN AST ahora admite consultas que no sean SELECT. #18136 (taiyang-li).

Característica experimental

  • Se añadieron funciones para calcular minHash y simHash de n-gramas de texto y shingles. Están pensadas para buscar casi duplicados. También se añadieron las funciones bitHammingDistance y tupleHammingDistance. #7649 (flynn).
  • Se añadió el nuevo tipo de dato Map. Consulte #1841. La primera versión de Map solo admite el tipo String para la clave y el valor. #15806 (hexiaoting).
  • Se implementó un analizador sintáctico SQL alternativo basado en el runtime de ANTLR4 y generado a partir de una gramática EBNF. #11298 (Ivan).

Mejora del rendimiento

  • Nueva implementación del Diccionario IP, con menor consumo de memoria, mejor rendimiento en algunos casos y errores corregidos. #16804 (vdimir).
  • Formateo paralelo para la exportación de datos. #11617 (Nikita Mikhaylov).
  • Integración de LDAP: Se añadió el parámetro verification_cooldown en la configuración de conexión del servidor LDAP para permitir almacenar en caché los intentos de “bind” correctos durante un período configurable. #15988 (Denis Glazachev).
  • Se añade la opción --no-system-table para que clickhouse-local se ejecute sin tablas del sistema. Esto evita la inicialización de DateLUT, que al arrancar puede llevar un tiempo apreciable (decenas de milisegundos). #18899 (alexey-milovidov).
  • Se reemplaza PODArray por PODArrayWithStackMemory en AggregateFunctionWindowFunnelData para mejorar el rendimiento de la función windowFunnel. #18817 (flynn).
  • No enviar bloques vacíos a los segmentos al realizar un INSERT síncrono en una tabla distribuida. Se cierra #14571. #18775 (alexey-milovidov).
  • Lectura optimizada para StorageMemory. #18052 (Maksim Kita).
  • Uso del algoritmo Dragonbox para convertir float a cadena en lugar de ryu. Esto mejora significativamente el rendimiento de la conversión de float a cadena. #17831 (Maksim Kita).
  • Se aceleró la implementación de IPv6CIDRToRange. #17569 (vdimir).
  • Se añadió la configuración remerge_sort_lowered_memory_bytes_ratio (si el uso de memoria tras la remezcla no se reduce en esta proporción, se deshabilitará la remezcla). #17539 (Azat Khuzhin).
  • Mejora del rendimiento de AggregatingMergeTree con SimpleAggregateFunction(String) en PK. #17109 (Azat Khuzhin).
  • Ahora, el combinador -If se ha desvirtualizado y count está correctamente vectorizado. Corresponde a este PR. #17043 (Amos Bird).
  • Mejora el rendimiento de lectura de las tablas Merge sobre un gran número de tablas MergeTree. Corrige #7748. #16988 (Anton Popov).
  • Se mejoró el rendimiento de la función repeat. #16937 (satanson).
  • Se mejoró ligeramente el rendimiento del análisis de números de coma flotante. #16809 (Maksim Kita).
  • Se añadió la posibilidad de omitir las particiones ya fusionadas para OPTIMIZE TABLE ... FINAL. #15939 (Kruglov Pavel).
  • Integración de fast_float de Daniel Lemire para procesar números de coma flotante. #16787 (Maksim Kita). No está habilitado, porque su rendimiento sigue siendo inferior al del analizador aproximado de números de coma flotante de ClickHouse.
  • Se corrigió max_distributed_connections (afecta a prefer_localhost_replica = 1 y max_threads != max_distributed_connections). #17848 (Azat Khuzhin).
  • Elección adaptativa de subida de una sola parte o multiparte al enviar datos a S3. La subida de una sola parte se controla mediante una nueva configuración max_single_part_upload_size. #17934 (Pavel Kovalenko).
  • Soporte para tareas asíncronas en PipelineExecutor. Soporte inicial para sockets asíncronos en consultas remotas. #17868 (Nikolai Kochetov).
  • Se permite usar la optimización optimize_move_to_prewhere con partes compactas cuando se desconoce el tamaño de las columnas. #17330 (Anton Popov).

Mejora

  • Se evita el interbloqueo al ejecutar INSERT SELECT en la misma tabla con motores de tabla TinyLog o Log. Esto cierra #6802. Esto cierra #18691. Esto cierra #16812. Esto cierra #14570. #15260 (alexey-milovidov).
  • Se admite la sintaxis SHOW CREATE VIEW name, como en MySQL. #18095 (Du Chuan).
  • Se permiten todas las consultas del tipo Decimal * Float o viceversa, incluidas las de agregación (p. ej., SELECT sum(decimal_field * 1.1) o SELECT dec_col * float_col); el tipo de resultado es Float32 o Float64. #18145 (Mike).
  • Se mejoró la UI web mínima: se añadió el historial; se añadió soporte para compartir; se evitó una condición de carrera entre distintas solicitudes; se añadieron indicadores de solicitud en curso y de disponibilidad; se añadió un favicon; se detecta Ctrl+Enter si el área de texto no tiene el foco. #17293 #17770 (alexey-milovidov).
  • clickhouse-server no envió la petición close al servidor de ZooKeeper. #16837 (alesapin).
  • Evita que el servidor finalice de forma anómala cuando los límites de memoria son demasiado bajos (max_memory_usage = 1 / max_untracked_memory = 1). #17453 (Azat Khuzhin).
  • Corregido el resultado no determinista de la función windowFunnel cuando distintos eventos tienen la misma marca de tiempo. #18884 (Fuwang Hu).
  • Docker: Se establecen explícitamente el uid y el gid del usuario y el grupo de clickhouse en los valores fijos (101) en las imágenes Docker de clickhouse-server. #19096 (filimonov).
  • INSERTs asíncronos en tablas Distributed: se han añadido dos nuevos ajustes (por analogía con la familia MergeTree): - fsync_after_insert - Ejecuta fsync tras cada inserción. Disminuirá el rendimiento de las inserciones. - fsync_directories - Ejecuta fsync para el directorio temporal (que se usa solo para los INSERTs asíncronos) después de todas las operaciones (escrituras, cambios de nombre, etc.). #18864 (Azat Khuzhin).
  • El comando SYSTEM KILL comenzó a funcionar en Docker. Esto cierra #18847. #18848 (alexey-milovidov).
  • Expande las macros en la ruta de zk al ejecutar FETCH PARTITION. #18839 (fastio).
  • Aplique ALTER TABLE <replicated_table> ON CLUSTER MODIFY SETTING ... en todas las réplicas. Esto se debe a que no replicamos este tipo de comandos ALTER. #18789 (Amos Bird).
  • Permitir que el transformador de columnas EXCEPT acepte una cadena como patrón de expresión regular. Esto resuelve #18685 . #18699 (Amos Bird).
  • Se corrige SimpleAggregateFunction en SummingMergeTree. Ahora funciona como AggregateFunction. En versiones anteriores, los valores se sumaban independientemente de la función de agregado. Esto corrige #18564 . #8052. #18637 (Amos Bird). Otra corrección del uso de SimpleAggregateFunction en SummingMergeTree. Esto corrige #18676 . #18677 (Amos Bird).
  • Se corrigió un error de aserción en el asignador de memoria cuando el último argumento de la función bar era NaN. Ahora se lanza una excepción normal de ClickHouse. Esto corrige #17876. #18520 (Nikita Mikhaylov).
  • Corrige un problema de usabilidad: falta un salto de línea después del mensaje de excepción en algunas herramientas. #18444 (alexey-milovidov).
  • Se añade la posibilidad de modificar el tipo de columna de la clave primaria y de partición de LowCardinality(Type) a Type y viceversa. También se añade la posibilidad de modificar el tipo de columna de la clave primaria del tipo EnumX al tipo IntX. Corrige #5604. #18362 (alesapin).
  • Implementar el acceso a campos de untuple. #18133. #18309 (hexiaoting).
  • Permite analizar campos Array desde CSV si se representan como una cadena que contiene un array serializado como CSV anidado. Ejemplo: "[""Hello"", ""world"", ""42"""" TV""]" se analizará como ['Hello', 'world', '42" TV']. Permite analizar un array en CSV dentro de una cadena sin llaves de cierre. Ejemplo: "'Hello', 'world', '42"" TV'" se analizará como ['Hello', 'world', '42" TV']. #18271 (alexey-milovidov).
  • Mejora del cálculo de la granularidad adaptativa para las partes wide de MergeTree. #18223 (alesapin).
  • Ahora clickhouse install podría funcionar en Mac. El problema era que en esta plataforma no hay procfs. #18201 (Nikita Mikhaylov).
  • Mejores indicaciones sobre la sintaxis de las consultas SHOW .... #18183 (Du Chuan).
  • Soporte para las agregaciones de Array arrayMin, arrayMax, arraySum, arrayAvg con Int128, Int256, UInt256. #18147 (Maksim Kita).
  • Se añadió disk a la configuración de almacenamiento de Set y Join. #18112 (Grigory Pervakov).
  • Control de acceso: Ahora la función de tabla merge() requiere que el usuario actual tenga el privilegio SELECT sobre cada tabla de la que recibe datos. Este PR corrige #16964. #18104 #17983 (Vitaly Baranov).
  • Las tablas temporales ahora solo son visibles en las tablas del sistema system.tables y system.columns dentro de la sesión en la que se han creado. La base de datos interna _temporary_and_external_tables ahora está oculta en esas tablas del sistema; en su lugar, las tablas temporales se muestran como tablas con la base de datos vacía y la marca is_temporary activada. #18014 (Vitaly Baranov).
  • Se corrige un problema de renderizado de clickhouse-client cuando cambia el tamaño de la ventana del terminal. #18009 (Amos Bird).
  • Reducir la verbosidad de los eventos registrados cuando el cliente cierra la conexión, de Warning a Information. #18005 (filimonov).
  • Eliminación forzada de archivos de metadatos vacíos o dañados del sistema de archivos para DiskS3. S3 es una funcionalidad experimental. #17935 (Pavel Kovalenko).
  • Control de acceso: allow_introspection_functions=0 prohíbe el uso de las funciones de introspección, pero ya no impide conceder grants sobre ellas (quien reciba el grant tendrá que establecer allow_introspection_functions=1 por su cuenta para poder usarlo). Del mismo modo, allow_ddl=0 prohíbe el uso de comandos DDL, pero ya no impide conceder grants sobre ellos. #17908 (Vitaly Baranov).
  • Mejora de usabilidad: sugerencias para nombres de columnas. #17112. #17857 (fastio).
  • Añade información de diagnóstico cuando dos tablas Merge intentan leer los datos de la otra. #17854 (徐炘).
  • Se permite sobrescribir el valor de timeout al ejecutar scripts con la imagen de Docker de ClickHouse. #17818 (Guillaume Tassery).
  • Compruebe la gramática de la definición del motor de las tablas de registro del sistema para evitar algunos errores de configuración. Tenga en cuenta que esta comprobación gramatical no es semántica; esto significa que errores como columnas inexistentes o funciones en expresiones no se detectarán hasta que se cree la tabla. #17739 (Du Chuan).
  • Se eliminó el lanzamiento de excepciones al inicializar la tabla RabbitMQ si no había conexión (se volverá a conectar en segundo plano). #17709 (Kseniia Sumarokova).
  • No se ignoran los límites de memoria del servidor durante el vaciado de Buffer. #17646 (Azat Khuzhin).
  • Cambiar a la versión parcheada de RocksDB (de ClickHouse-Extras) para corregir el error use-after-free. #17643 (Nikita Mikhaylov).
  • Se añadió un desplazamiento al mensaje de excepción del análisis en paralelo. Esto corrige #17457. #17641 (Nikita Mikhaylov).
  • No lanzar el error “Too many parts” en medio de la consulta INSERT. #17566 (alexey-milovidov).
  • Se permiten parámetros de consulta en la instrucción UPDATE de ALTER. Corrige #10976. #17563 (alexey-milovidov).
  • Ofuscador de consultas: evitar el uso de algunas palabras clave de SQL como nombres de identificador. #17526 (alexey-milovidov).
  • Exportar la entrada máxima actual de DDL ejecutada por DDLWorker mediante una métrica del servidor. Es útil para comprobar si DDLWorker se queda bloqueado en algún punto. #17464 (Amos Bird).
  • Exporta métricas asíncronas de los hilos actuales en todos los servidores. Es útil para detectar problemas como este. #17463 (Amos Bird).
  • Incluir columnas dinámicas como MATERIALIZED / ALIAS en consultas con comodines cuando las opciones asterisk_include_materialized_columns y asterisk_include_alias_columns estén activadas. #17462 (Ken Chen).
  • Permite especificar TTL para eliminar registros antiguos de las tablas de registro del sistema, mediante el atributo <ttl> en config.xml. #17438 (Du Chuan).
  • Ahora, las consultas que llegan al servidor a través de los protocolos MySQL y PostgreSQL tienen tipos de interfaz distintos (que pueden verse en la columna interface de la tabla system.query_log): 4 para MySQL y 5 para PostgreSQL, en lugar del 1 que se usaba antes y que ahora se usa solo para el protocolo nativo. #17437 (Vitaly Baranov).
  • Se corrigió el análisis sintáctico de la cláusula SETTINGS de la consulta INSERT ... SELECT ... SETTINGS. #17414 (Azat Khuzhin).
  • Contabilización correcta de la memoria en RadixSort. #17412 (Nikita Mikhaylov).
  • Se añadió una comprobación de eof en receiveHello del server para evitar la excepción Attempt to read after eof. #17365 (Kruglov Pavel).
  • Se evita un posible desbordamiento de pila al convertir bigint. Los enteros grandes son experimentales. #17269 (flynn).
  • A partir de ahora, los índices set funcionan con GLOBAL IN. Esto corrige #17232, #5576. #17253 (Amos Bird).
  • Se agregó un límite para las redirecciones HTTP en las solicitudes al almacenamiento S3 (s3_max_redirects). #17220 (ianton-ru).
  • Al combinar el combinador -OrNull con los combinadores -If, -Merge, -MergeState y -State, debemos colocar -OrNull delante. #16935 (flynn).
  • Se admite la configuración de proxy HTTP y de endpoint HTTPS de S3. #16861 (Pavel Kovalenko).
  • Se añadió la autenticación adecuada mediante variables de entorno, ~/.aws y AssumeRole para el cliente de S3. #16856 (Vladimir Chebotarev).
  • Se añaden más spans de OpenTelemetry. Se añade un ejemplo de cómo exportar los datos de los spans a Zipkin. #16535 (Alexander Kuzmenkov).
  • Diccionarios de caché: Se eliminaron por completo los callbacks y los bloqueos necesarios para obtenerlos. Las claves no se dividen entre “no encontradas” y “caducadas”, sino que se almacenan en el mismo mapa durante la consulta. #14958 (Nikita Mikhaylov).
  • Se corrigió el hecho de que fsync_part_directory/fsync_after_insert/in_memory_parts_insert_sync nunca funcionaran (funcionalidad experimental). #18845 (Azat Khuzhin).
  • Permitir el uso del motor Atomic para la base de datos anidada del motor MaterializeMySQL. #14849 (tavplubix).

Corrección de errores

  • Se corrigió el problema por el que el servidor podía dejar de aceptar conexiones en casos muy raros. #17542 (Amos Bird, alexey-milovidov).
  • Se corrige el análisis de índices de funciones binarias con un argumento constante, que daba lugar a resultados de consulta incorrectos. Esto corrige #18364. #18373 (Amos Bird).
  • Corrige un posible análisis incorrecto del índice cuando los tipos de la comparación del índice son distintos. Esto corrige #17122. #17145 (Amos Bird).
  • Se deshabilita la escritura con AIO durante las fusiones, ya que puede provocar, en casos extremadamente raros, corrupción de datos en las columnas de la clave primaria durante la fusión. #18481 (alesapin).
  • Restringir las fusiones de partes wide a partes compact. En caso de fusión vertical, esto provocaba una parte de resultado corrupta. #18381 (Anton Popov).
  • Se corrige un posible resultado de consulta incompleto al leer desde MergeTree* en caso de read backoff (mensaje <Debug> MergeTreeReadPool: Will lower number of threads en los registros). Se introdujo en #16423. Corrige #18137. #18216 (Nikolai Kochetov).
  • Se corrigió un error de tipo use-after-free en la biblioteca rocksdb. #18862 (sundyli).
  • Se corrige la lectura infinita de un archivo en formato ORC (se introdujo en #10580). Corrige #19095. #19134 (Nikolai Kochetov).
  • Se corrige un error en el escritor de datos de MergeTree que puede generar marks de mayor tamaño que el de la granularidad fija. Corrige #18913. #19123 (alesapin).
  • Se corrigió un error de inicio cuando ClickHouse no podía leer el códec de compresión de LowCardinality(Nullable(...)) y lanzaba la excepción Attempt to read after EOF. Corrige #18340. #19101 (alesapin).
  • Restringir las consultas MODIFY TTL para las tablas MergeTree creadas con la sintaxis antigua. Antes, la consulta se aceptaba, pero en realidad no surtía efecto. #19064 (Anton Popov).
  • Asegúrese de que groupUniqArray devuelva el tipo correcto para un argumento de tipo enum. Esto cierra #17875. #19019 (alexey-milovidov).
  • Se corrige un posible error Expected single dictionary argument for function al usar la función ignore con el argumento LowCardinality. Soluciona #14275. #19016 (Nikolai Kochetov).
  • Se corrige la inserción de una columna LowCardinality en una tabla con el motor TinyLog. Corrige #18629. #19010 (Nikolai Kochetov).
  • Join intenta materializar las columnas const, pero nuestro código las necesita en otros lugares. #18982 (Nikita Mikhaylov).
  • Desactive optimize_move_functions_out_of_any porque la optimización no siempre es correcta. Esto cierra #18051. Esto cierra #18973. #18981 (alexey-milovidov).
  • Se corrige una posible excepción QueryPipeline stream: different number of columns causada por la combinación de los pasos Expression del plan de consulta. Corrige #18190. #18980 (Nikolai Kochetov).
  • Se corrigió un interbloqueo muy poco frecuente durante el apagado. #18977 (tavplubix).
  • Soluciona el comportamiento incorrecto cuando la consulta ALTER TABLE ... DROP PART 'part_name' elimina todos los bloques de deduplicación de la partición completa. Soluciona #18874. #18969 (alesapin).
  • ATTACH PARTITION debería restablecer la mutación. #18804. #18935 (fastio).
  • Se corrige un problema con bitmapOrCardinality que puede provocar la desreferenciación de un puntero nulo. Esto cierra #18911. #18912 (sundyli).
  • Corrige un posible bloqueo al cerrar clickhouse-local. Esto soluciona #18891. #18893 (alexey-milovidov).
  • Las consultas para bases de datos externas (MySQL, ODBC, JDBC) se reescribían de forma incorrecta si había una expresión de la forma x IN table. Esto corrige #9756. #18876 (alexey-milovidov).
  • Se corrige el combinador *If con función unaria y tipos Nullable. #18806 (Azat Khuzhin).
  • Se corrige el problema por el que los INSERT distribuidos asíncronos pueden ser rechazados por el servidor si la configuración network_compression_method se establece globalmente con un valor distinto del predeterminado. Esto corrige #18741. #18776 (alexey-milovidov).
  • Se corrigió el error Attempt to read after eof al intentar hacer CAST de NULL desde Nullable(String) a Nullable(Decimal(P, S)). Ahora la función CAST devuelve NULL cuando no puede interpretar un decimal a partir de una cadena Nullable. Corrige #7690. #18718 (Winter Zhang).
  • Se corrigió un problema menor con el logging. #18717 (sundyli).
  • Se corrige la eliminación de partes vacías en tablas ReplicatedMergeTree creadas con la sintaxis antigua. Corrige #18582. #18614 (Anton Popov).
  • Se corrige el error anterior cuando se producía un desbordamiento de fecha con distintos valores. El límite estricto del valor Date es “2106-02-07”; la fecha > “2106-02-07” se convierte al valor 0. #18565 (hexiaoting).
  • Se añade compatibilidad con el tipo de dato FixedString para la replicación desde MySQL. La replicación desde MySQL es una funcionalidad experimental. Este parche corrige #18450. También corrige #6556. #18553 (awesomeleo).
  • Corrige un posible error Pipeline stuck al usar ORDER BY después de una subconsulta con RIGHT o FULL JOIN. #18550 (Nikolai Kochetov).
  • Corregido un error que podía hacer que las consultas ALTER quedaran bloqueadas después de cancelar la mutación correspondiente. Descubierto por thread fuzzer. #18518 (alesapin).
  • Soporte correcto para 12AM en la función parseDateTimeBestEffort. Esto corrige #18402. #18449 (vladimir-golovchenko).
  • Se corrigió el error value is too short al ejecutar las funciones toType(...) (toDate, toUInt32, etc.) con un argumento de tipo Nullable(String). Ahora, estas funciones devuelven NULL en caso de errores de análisis en lugar de lanzar una excepción. Corrige #7673. #18445 (tavplubix).
  • Se corrigió el comportamiento inesperado de SHOW TABLES. #18431 (fastio).
  • Corrección: el combinador -SimpleState genera tipos de argumento y de retorno incompatibles. #18404 (Amos Bird).
  • Corrige una posible condición de carrera en el uso concurrente de tablas Set o Join y en las consultas a system.tables. #18385 (alexey-milovidov).
  • Se corrige el llenado de la tabla system.settings_profile_elements. Este PR corrige #18231. #18379 (Vitaly Baranov).
  • Se corrigen posibles fallos en las funciones de agregación con el combinador Distinct al usar la agregación de dos niveles. Corrige #17682. #18365 (Anton Popov).
  • Se corrigió un problema por el que el proceso clickhouse-odbc-bridge no era accesible desde el servidor en máquinas con pila dual IPv4/IPv6; se corrigió un problema por el que las actualizaciones del diccionario ODBC se realizaban mediante consultas malformadas y/o provocaban fallos del proceso odbc-bridge; posiblemente cierra #14489. #18278 (Denis Glazachev).
  • Control de acceso: SELECT count() FROM table ahora puede ejecutarse si el usuario tiene acceso al menos a una columna de la tabla. Este PR corrige #10639. #18233 (Vitaly Baranov).
  • Control de acceso: SELECT JOIN ahora requiere el privilegio SELECT en cada una de las tablas del join. Este PR corrige #17654. #18232 (Vitaly Baranov).
  • Corrige la comparación de claves entre tipos Enum e Int. Esto corrige #17989. #18214 (Amos Bird).
  • Replicación desde MySQL (funcionalidad experimental). Soluciona #18186 Soluciona #16372 Corrige el problema de conversión de claves únicas en el motor de base de datos MaterializeMySQL. #18211 (Winter Zhang).
  • Se corrigió la inconsistencia en las consultas con WITH FILL y WITH TIES #17466. #18188 (hexiaoting).
  • Se corrige la inserción de una fila con valor predeterminado si se produce un error de análisis en la última columna. Corrige #17712. #18182 (Jianmei Zhang).
  • Se corrige el error Unknown setting profile al intentar establecer un perfil de configuración. #18167 (tavplubix).
  • Se corrige un error por el que la consulta MODIFY COLUMN ... REMOVE TTL en realidad no eliminaba el TTL de la columna. #18130 (alesapin).
  • Se corrigió std::out_of_range: basic_string al analizar URL de S3. #18059 (Vladimir Chebotarev).
  • Se corrige la comparación entre DateTime64 y Date. Corrige #13804 y #11222. … #18050 (Vasily Nemkov).
  • Replicación desde MySQL (función experimental): Corrige #15187 Corrige #17912 se admite la conversión de índices de prefijo de MySQL para MaterializeMySQL. #17944 (Winter Zhang).
  • Cuando la rotación de logs del servidor se configuraba mediante el parámetro logger.size con un valor numérico superior a 2^32, los logs no rotaban correctamente. Esto se ha corregido. #17905 (Alexander Kuzmenkov).
  • La optimización trivial de consultas producía un resultado incorrecto si la consulta contenía ARRAY JOIN (por lo que en realidad la consulta no era trivial). #17887 (sundyli).
  • Corrige un posible fallo de segmentación en la función de agregación topK. Esto cierra #17404. #17845 (Maksim Kita).
  • WAL (función experimental): No restaurar las partes desde WAL si in_memory_parts_enable_wal está deshabilitado. #17802 (detailyang).
  • El mensaje de excepción sobre el tamaño máximo de tabla para eliminar se mostraba incorrectamente. #17764 (alexey-milovidov).
  • Se corrigió un posible error de segmentación cuando no había suficiente espacio al insertar en la tabla Distributed. #17737 (tavplubix).
  • Se solucionó un problema por el que ClickHouse no podía restablecer la conexión con servidores MySQL. #17681 (Alexander Kazakov).
  • Windows: Se corrigió el error Function not implemented al ejecutar la consulta RENAME en la base de datos Atomic con ClickHouse ejecutándose en Windows Subsystem for Linux. Se corrige en #17661. #17664 (tavplubix).
  • Podía determinarse incorrectamente si el clúster tenía replicación circular (cruzada) o no al ejecutar una consulta ON CLUSTER, debido a una condición de carrera cuando pool_size > 1. Se ha corregido. #17640 (tavplubix).
  • Se corrige el problema de la tabla system.stack_trace vacía cuando el servidor se ejecuta en modo daemon. #17630 (Amos Bird).
  • La excepción fmt::v7::format_error puede quedar registrada en segundo plano para las tablas MergeTree. Esto corrige #17613. #17615 (alexey-milovidov).
  • Cuando clickhouse-client se utilizaba en modo interactivo con consultas multilínea, el comentario de una sola línea se prolongaba por error hasta el final de la consulta. Esto corrige #13654. #17565 (alexey-milovidov).
  • Se corrige el bloqueo de la consulta ALTER cuando la mutación correspondiente se canceló en una réplica diferente. Corrige #16953. #17499 (alesapin).
  • Se corrigió un problema en la contabilización de la memoria cuando ClickHouse subestimaba el tamaño de la caché de marcas. Esto puede ocurrir cuando hay muchos archivos muy pequeños con marcas. #17496 (alesapin).
  • Se corrigió ORDER BY con la configuración optimize_redundant_functions_in_order_by habilitada. #17471 (Anton Popov).
  • Corrige los duplicados después de DISTINCT, que podían producirse debido a una optimización incorrecta. Corrige #17294. #17296 (li chengxiang). #17439 (Nikolai Kochetov).
  • Se corrigió el elevado uso de CPU en las tareas en segundo plano de las tablas *MergeTree. #17416 (tavplubix).
  • Corrige un posible bloqueo al leer de la tabla JOIN con tipos LowCardinality. Corrige #17228. #17397 (Nikolai Kochetov).
  • Replicación desde MySQL (funcionalidad experimental): Corrige #16835, intenta solucionar la discrepancia del encabezado en la sentencia SHOW de MySQL. #17366 (Winter Zhang).
  • Soluciona las funciones no deterministas con el optimizador de predicados. Esto soluciona #17244. #17273 (Winter Zhang).
  • Corrige un posible error Unexpected packet Data received from client en consultas distribuidas con LIMIT. #17254 (Azat Khuzhin).
  • Se corrige la invalidación del índice set cuando hay columnas const en la subconsulta. Esto corrige #17246. #17249 (Amos Bird).
  • clickhouse-copier: Corrección para las tablas sin particiones #15235. #17248 (Qi Chen).
  • Se corrigieron posibles mutaciones que no funcionaban para partes almacenadas en un disco S3 (funcionalidad experimental). #17227 (Pavel Kovalenko).
  • Corrección de un error en la función fuzzBits, problema relacionado: #16980. #17051 (hexiaoting).
  • Se corrige optimize_distributed_group_by_sharding_key para consultas con solo OFFSET. #16996 (Azat Khuzhin).
  • Corrige las consultas de tablas Merge sobre tablas Distributed con JOINs. #16993 (Azat Khuzhin).
  • Se corrige la optimización de ORDER BY con funciones monótonas. Corrige #16107. #16956 (Anton Popov).
  • Soluciona la comparación incorrecta de tipos DateTime64 con distintas escalas. Soluciona #16655#16952 (Vasily Nemkov).
  • Se corrige la optimización de group by cuando está habilitada la configuración optimize_aggregators_of_group_by_keys y se usan joins. Corrige #12604. #16951 (Anton Popov).
  • Pequeña corrección en la consulta SHOW ACCESS. #16866 (tavplubix).
  • Se corrigió el comportamiento al tener habilitada la opción optimize_trivial_count_query con un predicado de partición. #16767 (Azat Khuzhin).
  • Devuelve el número de filas afectadas para las consultas INSERT mediante el protocolo MySQL wire. Anteriormente, ClickHouse siempre devolvía 0; se ha corregido. Corrige #16605. #16715 (Winter Zhang).
  • Corrige el comportamiento inconsistente causado por select_sequential_consistency en la consulta optimizada de recuento trivial y en las tablas del sistema. #16309 (Hao Chen).
  • Genera un error cuando el transformador de columnas REPLACE se aplica a una columna que no existe. #16183 (hexiaoting).
  • Lanzar una excepción en caso de una expresión ON de join no equi en RIGH|FULL JOIN. #15162 (Artem Zuikov).

Mejoras de compilación, pruebas y empaquetado

  • Se añade una comprobación sencilla de integridad para el binario de ClickHouse. Permite detectar corrupción causada por fallos de hardware (degradación de bits en los medios de almacenamiento o cambios de bits en la RAM). #18811 (alexey-milovidov).
  • Cambiar OpenSSL por BoringSSL. Esto permite evitar problemas con los sanitizadores. Esto corrige #12490. Esto corrige #17502. Esto corrige #12952. #18129 (alexey-milovidov).
  • Simplificar el script de inicio Sys/V. No funcionaba en Ubuntu 12.04 ni en versiones anteriores. #17428 (alexey-milovidov).
  • Varias mejoras en el script ./clickhouse install. #17421 (alexey-milovidov).
  • Ahora ClickHouse puede hacerse pasar por un ZooKeeper falso. Actualmente, la implementación del almacenamiento consiste simplemente en una tabla hash en memoria, y el servidor admite parcialmente el protocolo de ZooKeeper. #16877 (alesapin).
  • Corrige la eliminación de watches de la lista de inactivos para TestKeeperStorage (un mock de ZooKeeper). #18065 (alesapin).
  • Se añade el comando SYSTEM SUSPEND para la inyección de fallos. Puede usarse para facilitar las pruebas de failover. Esto cierra #15979. #18850 (alexey-milovidov).
  • Generar el identificador de compilación cuando ClickHouse se enlaza con lld. Se descubrió que lld no lo genera de forma predeterminada en mi máquina. El identificador de compilación se utiliza para los informes de fallos y la introspección. #18808 (alexey-milovidov).
  • Se corrigieron errores de shellcheck en la comprobación de estilo. #18566 (Ilya Yatsishin).
  • Actualización de la información sobre zonas horarias a 2020e. #18531 (alesapin).
  • Corrige las advertencias de codespell. Divide las comprobaciones de estilo en partes independientes. Actualiza la imagen de Docker de las comprobaciones de estilo. #18463 (Ilya Yatsishin).
  • Comprobación automatizada de restos de marcadores de conflicto en la documentación. #18332 (alexey-milovidov).
  • Se habilitó Thread Fuzzer para la comprobación con fallos intermitentes de las pruebas sin estado. #18299 (alesapin).
  • No use la función strerror, que no es segura para hilos. #18204 (alexey-milovidov).
  • Actualizada la acción del flujo de trabajo anchore/scan-action@main (se movió de master a main). #18192 (Stig Bakken).
  • Ahora clickhouse-test realiza operaciones DROP/CREATE de bases de datos con tiempo de espera. #18098 (alesapin).
  • Se habilita la compatibilidad experimental con el framework Pytest para las pruebas sin estado. #17902 (Ivan).
  • Ahora usamos la versión más reciente del daemon de Docker en las pruebas de integración. #17671 (alesapin).
  • Enviar información sobre la compilación oficial, la memoria, la CPU y el espacio libre en disco a Sentry si esta opción está habilitada. Sentry es una función opcional para ayudar a los desarrolladores de ClickHouse. Esto cierra #17279. #17543 (alexey-milovidov).
  • Había una variable no inicializada en el código de clickhouse-copier. #17363 (Nikita Mikhaylov).
  • Se corrigió un informe de MSan de #17309. #17344 (Nikita Mikhaylov).
  • Corrección de un problema con IPv6 en la biblioteca Arrow Flight. Consulta los comentarios para más detalles. #16664 (Zhanna).
  • Se añade una biblioteca que sustituye algunas funciones de libc por trampas que finalizarán el proceso. #16366 (alexey-milovidov).
  • Proporciona información de diagnóstico en los logs del servidor en caso de desbordamiento de pila y envía un mensaje de error a clickhouse-client. Esto cierra #14840. #16346 (alexey-milovidov).
  • Ahora ya podemos ejecutar en paralelo casi todas las pruebas funcionales sin estado. #15236 (alesapin).
  • Corrige la corrupción en la descompresión con snappy de librdkafka (era un problema solo en las compilaciones con gcc10, pero las compilaciones oficiales ya usan clang, por lo que al menos las versiones oficiales recientes no se ven afectadas). #18053 (Azat Khuzhin).
  • Si el servidor finaliza por acción del OOM killer, se imprime un mensaje en el log. #13516 (alexey-milovidov).
  • PODArray: Evita llamar a memcpy con los argumentos (nullptr, 0) (corrige un informe de UBSan). Esto corrige #18525. #18526 (alexey-milovidov).
  • Mejora menor en la concatenación de rutas de ZooKeeper en DDLWorker. #17767 (Bharat Nallan).
  • Permite recargar los símbolos desde el archivo de depuración. Este PR también corrige un problema con el build-id. #17637 (Amos Bird).
Última modificación el 10 de junio de 2026