Passer au contenu principal

Table des matières

Version de ClickHouse v25.12, 2025-12-18
Version de ClickHouse v25.11, 2025-11-27
Version de ClickHouse v25.10, 2025-10-30
Version de ClickHouse v25.9, 2025-09-25
Version de ClickHouse v25.8 LTS, 2025-08-28
Version de ClickHouse v25.7, 2025-07-24
Version de ClickHouse v25.6, 2025-06-26
Version de ClickHouse v25.5, 2025-05-22
Version de ClickHouse v25.4, 2025-04-22
Version de ClickHouse v25.3 LTS, 2025-03-20
Version de ClickHouse v25.2, 2025-02-27
Version de ClickHouse v25.1, 2025-01-28
Changelog 2024
Changelog 2023
Changelog 2022
Changelog 2021
Changelog 2020
Changelog 2019
Changelog 2018
Changelog 2017

Version 25.12 de ClickHouse, 2025-12-18

Changement incompatible avec les versions précédentes

  • ALTER MODIFY COLUMN exige désormais un DEFAULT explicite lors de la conversion de colonnes Nullable en types non null. Auparavant, ce type d’ALTER pouvait se bloquer avec des erreurs cannot convert null to not null ; désormais, les valeurs NULL sont remplacées par l’expression par défaut de la colonne. Résout #5985. #84770 (Vladimir Cherkasov).
  • Le tokenizer Ngram ne renverra plus de ngrams dont la longueur est inférieure à la valeur N avec laquelle il a été configuré. Search ne renverra aucune ligne lorsque les tokens de recherche sont vides. #89757 (George Larionov).
  • Lorsqu’une colonne est modifiée de String vers Nullable(String), aucune mutation ne sera effectuée sur les données. En revanche, pour la fonction d’agrégation uniq, une structure de données différente est utilisée : pour une colonne nullable, AggregateFunctionNull est utilisé avec un agrégateur uniq imbriqué. AggregateFunctionNull sérialise un indicateur booléen supplémentaire. Cela rend le fichier de statistiques incompatible. Le correctif consiste à ajouter un indicateur pour enregistrer s’il s’agit d’une colonne nullable pendant la sérialisation. Le format des statistiques a changé, et le serveur peut échouer si des statistiques existent dans l’ancien format. Cette PR #90904 corrigera le plantage et lèvera une exception lorsque les statistiques existantes utilisent l’ancien format. Pour éviter l’exception, exécutez ALTER TABLE table MATERIALIZE STATISTICS ALL afin de régénérer les statistiques et corriger le problème. #90311 (Han Fei).
  • Suppression des settings allow_not_comparable_types_in_order_by/allow_not_comparable_types_in_comparison_functions. Autoriser des types non comparables dans ORDER BY ou dans des fonctions de comparaison peut entraîner des erreurs logiques et des résultats inattendus. Résout #90028. #90527 (Pavel Kruglov).
  • La valeur par défaut du setting check_query_single_value_result a été modifiée de true à false. Cela fait que CHECK TABLE renvoie des résultats détaillés par part au lieu d’un résultat agrégé (1 = OK, 0 = erreurs détectées). Par rapport au comportement précédent, cela correspond probablement mieux à ce que l’utilisateur souhaite. #91009 (Robert Schulze).
  • Plusieurs corrections concernant les index implicites. Le schéma affiché ou stocké (métadonnées Keeper) n’inclura pas les index implicites, comme ceux créés par les settings add_minmax_index_for_numeric_columns ou add_minmax_index_for_string_columns. Cela peut provoquer des erreurs de métadonnées lorsqu’une table ReplicatedMergeTree est créée ou mise à jour dans une version plus récente, alors qu’une replica exécute encore une version plus ancienne. Dans ce cas, envoyez les DDL à l’ancienne replica jusqu’à ce que le cluster soit entièrement mis à niveau. #91429 (Raúl Marín).
  • Mise à jour de clickhouse-client afin qu’il renvoie un code de sortie non nul (159 - TIMEOUT_EXCEEDED) lorsqu’une query expire à cause de receive_timeout. Auparavant, les timeouts renvoyaient le code de sortie 0 (succès), ce qui rendait difficile la détection des échecs dus à un timeout dans les scripts et l’automatisation. #91432 (Sav).
  • Il est désormais interdit de créer des tables MergeTree spéciales (telles que ReplacingMergeTree, CollapsingMergeTree, etc.) avec une clé ORDER BY vide, car le merge behavior de ces tables n’est pas défini. Si vous devez malgré tout créer une telle table, activez le setting allow_suspicious_primary_key. #91569 (Anton Popov).
  • Correction des fonctions bitShiftLeft et bitShiftRight afin qu’elles renvoient 0 ou une valeur vide lorsque le shift est exactement égal à la taille du type. #91943 (Pablo Marcos).
  • Suite à #88380. Cette PR considère la désactivation des arguments positionnels dans les projections comme un changement non rétrocompatible. En outre, elle introduit le paramètre enable_positional_arguments_for_projections afin de permettre une mise à niveau sûre d’un cluster ClickHouse lorsque des arguments positionnels sont présents dans les projections. #92007 (Dmitry Novik).
  • Active par défaut les données partagées avancées pour JSON. Après ce changement, il ne sera plus possible de revenir à une version antérieure à 25.8, car ces versions ne pourront pas lire les nouvelles data parts avec une colonne JSON. Pour effectuer une mise à niveau en toute sécurité, il est recommandé de définir le paramètre compatibility sur la version précédente ou de définir les paramètres MergeTree dynamic_serialization_version='v2', object_serialization_version='v2'. #92511 (Pavel Kruglov).

Nouvelle fonctionnalité

  • Les utilisateurs peuvent désormais configurer les tables S3/Azure Queue pour déplacer ou étiqueter les fichiers traités, en plus des options existantes permettant de conserver ou de supprimer les fichiers. Résout #72944. #86907 (Murat Khairulin).
  • Dans le stockage S3/Azure Queue, ajout du paramètre commit_on_select (pour définir si les données traitées doivent être validées et si l’action after_processing doit être appliquée). La valeur par défaut est false ; correction de la vérification des MV attachées lors d’un SELECT. #91450 (Kseniia Sumarokova).
  • Ajout d’une instrumentation à l’exécution à l’aide de XRay pour le Débogage des problèmes en production et un profilage déterministe. Résout #74249. #89173 (Pablo Marcos).
  • Autorise l’utilisation de seconds arguments non constants pour IN. Prend également en charge un tuple comme second argument. #77906 (Yarik Briukhovetskyi).
  • Fonctions permettant de calculer l’aire et le périmètre du type Geometry. #89047 (Konstantin Vedernikov).
  • Implémentation de la fonction dictGetKeys, qui renvoie la ou les clés de dictionnaire dont l’attribut est égal à la valeur spécifiée. Elle utilise un cache de lookup inverse par requête, ajusté par le paramètre max_reverse_dictionary_lookup_cache_size_bytes, afin d’accélérer les lookups répétés. #89197 (Nihal Z. Miaji).
  • Ajout du paramètre type_json_skip_invalid_typed_paths pour désactiver les exceptions lors des insertions/conversions de type vers le type JSON lorsque le JSON d’entrée ne peut pas être converti en paths typés explicites dans le type JSON. Bascule alors sur la valeur null/zéro du path typé. #89886 (Max Justus Spransy).
  • Prise en charge de la jointure direct (boucle imbriquée) pour les tables MergeTree. Pour l’utiliser, spécifiez-la comme seule option dans le paramètre : join_algorithm = 'direct'. #89920 (Vladimir Cherkasov).
  • Prise en charge de ORDER BY dans l’opération CREATE pour Iceberg, ainsi que du tri dans INSERT. Résout #89916. #90141 (Konstantin Vedernikov).
  • Introduction de paramètres au niveau des projections, exposés via la nouvelle clause WITH SETTINGS dans ALTER TABLE ... ADD PROJECTION. Ces paramètres permettent aux projections de surcharger certains paramètres de stockage de MergeTree (par exemple index_granularity, index_granularity_bytes) projection par projection. #90158 (Amos Bird).
  • Ajout de la fonction SQL HMAC(algorithm, message, key) dans le cadre de #73900 et #38775. #90837 (Mikhail f. Shiryaev).
  • Ajout de la prise en charge de la fonction has pour utiliser la clé primaire et les indexes de saut de données lorsque le premier argument est un tableau constant. Ferme #90980. #91023 (Nihal Z. Miaji).
  • Implémente le nouveau format d’entrée/sortie Buffers. Ce format est similaire à Native ; toutefois, contrairement à Native, il ne stocke ni les noms de colonnes, ni les types de colonnes, ni aucune métadonnée supplémentaire. Résout #84017. #91156 (Nihal Z. Miaji).
  • Ajoute un paramètre max_streams_for_files_processing_in_cluster_functions pour contrôler le nombre de streams utilisés pour la lecture parallèle de fichiers dans les fonctions de table Cluster. Résout #90223. #91323 (Pavel Kruglov).
  • Masquage des données pour la sécurité au niveau des lignes (uniquement disponible dans ClickHouse Cloud). Ajout d’un parseur de policy de masquage des données pour sa prise en charge dans clickhouse-client. #90552 (pufit).
  • Ajoute l’option allow_reentry à la aggregate function windowFunnel. Lorsqu’elle est activée avec strict_order, elle ignore les événements qui ne respectent pas l’ordre au lieu d’interrompre l’analyse du funnel. Cela permet de gérer les parcours utilisateur avec des rafraîchissements (A->A->B) ou des retours en arrière (A->B->A->C) sans sous-estimer les taux de conversion. #86916 (Lee ChaeRok).
  • Compatibilité de Keeper avec zookeeper : création avec statistiques. #88797 (Konstantin Vedernikov).
  • Prise en charge des watches persistants de ZooKeeper dans ClickHouse Keeper. Suite de la partie 2 : https://github.com/ClickHouse/ClickHouse/pull/78207. #88813 (Konstantin Vedernikov).
  • Ajoute un paramètre MergeTree alter_column_secondary_index_mode pour contrôler ce qu’il faut faire des index pendant les mutations. Valeurs possibles : throw, drop, rebuild et compatibility. Résout #77797. #89335 (Raúl Marín).
  • Comme les data types Time et Time64 sont prêts pour la production, le paramètre enable_time_time64_type est désormais activé par défaut. #89345 (Yarik Briukhovetskyi).
  • Prise en charge de la lecture de DeltaLake CDF via la fonction de table deltaLake avec les paramètres delta_lake_snapshot_start_version, delta_lake_snapshot_end_version. Le CDF (Change Data Feed, une fonctionnalité qui permet de capturer et d’interroger automatiquement les changements de données au niveau des lignes — tels que les insertions, mises à jour et suppressions — entre les versions d’une table Delta) est activé dans DeltaLake via delta.enableChangeDataFeed. Les colonnes fournies avec les données sont _change_type, _commit_version, _commit_timestamp. #90431 (Kseniia Sumarokova).
  • Prise en charge des index négatifs pour l’accès aux éléments d’un tuple (par ex. tuple.-1). #91665 (Amos Bird).

Fonctionnalité expérimentale

  • Introduction du format v3 de l’index textuel et passage au statut Beta.
  • Une nouvelle logique permet désormais d’exécuter automatiquement les requêtes à l’aide de répliques parallèles, sous le contrôle du paramètre automatic_parallel_replicas_mode. Lors d’une exécution normale sur un seul nœud, ClickHouse collecte des statistiques qui seront ensuite prises en compte à l’étape de planification. Si ces statistiques indiquent que les répliques parallèles sont susceptibles d’apporter un bénéfice, ClickHouse exécutera automatiquement la requête concernée avec des répliques parallèles. L’ensemble des requêtes prises en charge reste pour l’instant assez limité. #87541 (Nikita Taranov).
  • Accédez aux instances ClickHouse Cloud à l’aide des identifiants Cloud avec —login. #89261 (Krishna Mannem).
  • Ajout du paramètre de session aggregate_function_input_format pour améliorer les requêtes INSERT dans les tables comportant des colonnes AggregateFunction, en autorisant l’insertion de données sous forme d’état sérialisé, de valeurs brutes ou de tableaux. #88088 (Punith Nandyappa Subashchandra).

Amélioration des performances

  • Optimise les requêtes ORDER BY...LIMIT N en utilisant des skip indexes et un filtre à seuil dynamique afin de réduire considérablement le nombre de lignes traitées. #89835 (Shankar Iyer).
  • ClickHouse utilise désormais les skip indexes pour effectuer l’analyse des index sur des clauses WHERE contenant des conditions de filtre mixtes reliées par AND et OR. Auparavant, la clause WHERE devait être une conjonction (AND) de conditions de filtre pour tirer parti des skip indexes. Un nouveau setting use_skip_indexes_for_disjunctions (par défaut : activé) contrôle cette fonctionnalité. (issue #75228). #87781 (Shankar Iyer).
  • Prise en charge de la conservation de la lecture dans l’ordre depuis la table de gauche dans les opérations LEFT/INNER JOIN, ce qui peut être exploité par les étapes suivantes. Peut être désactivé à l’aide du setting query_plan_read_in_order_through_join. Prise en charge de l’optimisation de ligne virtuelle pendant la lecture (voir le setting read_in_order_use_virtual_row) pour les LEFT/INNER JOIN. #89815 (Vladimir Cherkasov).
  • Améliore les performances des colonnes matérialisées à la volée avec une limite plus élevée. #90309 (Nikolai Kochetov).
  • Les utilisateurs devraient constater une latence plus faible lors de l’analyse des index en présence de gros index minmax (des millions de granules). #90428 (Shankar Iyer).
  • Implémente un algorithme simple de réordonnancement des jointures DPsize pour les INNER JOIN. Un nouveau setting expérimental contrôle quels algorithmes sont utilisés et dans quel ordre. Par exemple, query_plan_optimize_join_order_algorithm='dpsize,greedy' signifie que DPsize est essayé en premier, avec repli sur greedy. #91002 (Alexander Gololobov).
  • Échoue rapidement lorsque les requêtes atteignent les limites de lignes. Résout #61872. #62804 (Sean Haynes).
  • #84477 a ajouté des contraintes concernant les requêtes SELECT pouvant être utilisées dans les requêtes insert select from s3Cluster(...) pour une exécution distribuée parallèle. Ce changement permet d’utiliser WHERE, ce qui n’était pas possible auparavant. #84611 (Igor Nikonov).
  • Précharge les clés pendant l’itération de la table de hachage afin de minimiser les défauts de cache. #84708 (lgbo).
  • Optimise la fonction d’agrégation histogram en ne triant que la fin du tableau de points et en évitant le tri pour les entrées monotones, ce qui permet un gain de performances d’environ 10 %. #85760 (MakarDev).
  • Améliore les performances de filtrage pour les prédicats avec des fonctions telles que like, equals, has et d’autres, en s’appuyant sur un filtre préliminaire supplémentaire construit à partir de l’index de texte. Cette optimisation est activée via le setting query_plan_text_index_add_hint. Améliore également l’utilisation de l’index de texte pour les colonnes de type de données Map. #88550 (Anton Popov).
  • Optimise les recherches inverses répétées dans le dictionnaire en effectuant des recherches plus rapides dans un ensemble précalculé de valeurs de clé possibles. Closes #7968. #88971 (Nihal Z. Miaji).
  • Améliore les performances et le comportement de la fonction d’agrégation topK. #90091 (Raúl Marín).
  • Amélioration des performances des opérations de comparaison sur Decimal. Résout #28192. #90153 (Konstantin Bogdanov).
  • Prise en charge du partition pruning pour les fonctions Apache Paimon, dans la continuité de https://github.com/ClickHouse/ClickHouse/pull/84423. #90253 (JIaQi).
  • Utilisation d’opérations SIMD avancées pour les fonctions logiques via dispatch dynamique. #90432 (Raúl Marín).
  • Amélioration des performances des fonctions JIT en évitant d’initialiser inutilement à zéro la colonne de résultat. #90449 (Raúl Marín).
  • Accélération de la décompression T64 via dispatch dynamique. #90610 (Raúl Marín).
  • Optimisation du filtrage en place dans le lecteur MergeTree. Résout #87119. #90630 (Xiaozhe Yu).
  • Introduction d’une heuristique supplémentaire pour réduire la largeur des fusions sélectionnées. Effectuer des fusions plus étroites augmentera l’amplification des écritures, mais peut aussi aider à éviter les erreurs TOO_MANY_PARTS. #91163 (Mikhail Artemenko).
  • Amélioration des performances des requêtes sur les tables S3 créées avec un glob pattern en propageant les valeurs du filtre _path, ce qui permet d’éviter les opérations de listage S3. Contrôlé par le paramètre s3_path_filter_limit. #91165 (Eduard Karacharov).
  • Accélération de la conversion des colonnes en bool (dans les clauses WHERE) via dispatch dynamique. #91203 (Raúl Marín).
  • Accélération du tri d’un bloc numérique unique via dispatch dynamique. #91213 (Raúl Marín).
  • Ajout d’une optimisation pour supprimer les colonnes inutilisées dans les plans de requête. Résout #75152. #76487 (János Benjamin Antal).
  • La valeur par défaut de query_plan_optimize_join_order_limit passe à 10. #89312 (Alexey Milovidov).
  • Activation par défaut du paramètre allow_statistics_optimize, afin que l’optimiseur de JOIN utilise les statistiques de colonnes. #89332 (Alexey Milovidov).
  • Prise en charge des filtres runtime de JOIN pour les JOIN ANTI. Refactorisation également de l’implémentation des filtres runtime afin de réduire la contention sur les verrous. #89710 (Dmitry Novik).
  • Réduction de l’utilisation mémoire pendant les fusions dans la table system.metric_log (activée par défaut) en définissant min_bytes_for_wide_part et vertical_merge_algorithm_min_bytes_to_activate à 128 MB. #89811 (filimonov).
  • Activation de l’utilisation de l’index inversé dans PREWHERE. Résout #89975. #89977 (Peng Jian).
  • N’ajoutez pas de fournisseurs S3 si l’authentification OAuth de GCP est utilisée, car elle améliore les performances sur GCS. #91706 (Antonio Andelic).

Amélioration

  • Ajout d’un nouveau paramètre apply_row_policy_after_final qui permet à la requête d’appliquer la policy de ligne uniquement après final, ce qui rend le comportement de ReplacingMergeTree avec des policies de ligne plus correct. Corrige #90986. #91065 (Yarik Briukhovetskyi).
  • Dans le format Pretty, les tuples nommés sont désormais affichés au format Pretty JSON. Cela clôt #65022. #91779 (Mostafa Mohamed Salah).
  • Ajout des champs last_error_time, last_error_message, last_error_query_id et last_error_trace à la table system.error_log. #89879 (Narasimha Pakeer).
  • Le client CLI peut désormais supprimer le message ‘ClickHouse server version is older than ClickHouse client. It may indicate that the server is out of date and can be upgraded’ en spécifiant --no-server-client-version-message ou false. #87784 (Larry Snizek).
  • Ajout d’un message d’erreur indiquant que la part a été dédupliquée. #80264 (Aleksandr Musorin).
  • Ajout des colonnes dependencies et missing_dependencies à system.kafka_consumers pour signaler les tables cibles de vues matérialisées pour les tables Kafka. Ajout du Counter KafkaMVNotReady. #85346 (Ilya Golshtein).
  • Désormais, les expressions par défaut de la table fonctionnent correctement avec les insertions utilisant les protocoles remote et native. Clôt #87972. #88540 (Pervakov Grigorii).
  • Permet de désactiver la collecte des métriques asynchrones PSI_*_*. #88557 (MikhailBurdukov).
  • Ajout de la prise en charge de la sérialisation sparse pour les colonnes de type Nullable. Cela fait suite à #44539. #88999 (Amos Bird).
  • Le disk plain-rewritable dispose de sa propre implémentation et de son propre layout. Ne le basons pas sur les disks plain classiques. #89807 (Mikhail Artemenko).
  • Aucune exception HTTP ne doit jamais contenir le chunk final de valeur zéro. #89998 (Kaviraj Kanagaraj).
  • Ajout d’une vérification Keeper côté serveur lors du handshake pour rejeter les clients lorsque last_zxid_seen (provided by the client) > last_processed_zxid. Cela évite des lectures obsolètes lorsque les clients se reconnectent à des répliques en retard. #90016 (Miсhael Stetsyuk).
  • Ajout de kafka_consumer_reschedule_ms comme paramètre ajustable du table engine Kafka afin d’ajuster la durée d’attente des consumers avant l’arrivée de nouvelles données. Résout #89204. #90112 (Jeremy Aguilon).
  • Ajout d’une nouvelle colonne parts_in_progress_names à system.mutations pour améliorer le diagnostic. #90155 (Shaohua Wang).
  • Réessayer en cas d’erreurs réseau lorsque la bibliothèque S3 analyse une réponse XML. #90216 (Sema Checherinda).
  • Nous voulons exécuter les Keeper dans des processus serveur distincts et, pour éviter de surcharger Prometheus dans les grandes régions, nous devons continuer à n’exposer que les métriques liées à Keeper. #90244 (Miсhael Stetsyuk).
  • Ajout de la prise en charge du chargement de la configuration du client ClickHouse à partir des chemins XDG Base Directory (par ex. ~/.config/clickhouse/config.xml), en plus de l’emplacement historique ~/.clickhouse-client/. Résout #89882. #90306 (Wujun Jiang).
  • Ajout d’une limite de taille en octets pour le batch des requêtes append dans Keeper. La limite est contrôlée par keeper_server.coordination_settings.max_requests_append_bytes_size. #90342 (Antonio Andelic).
  • Ajout d’un paramètre pour Iceberg afin d’éviter un nombre trop élevé de partitions. #90365 (Konstantin Vedernikov).
  • Mise à jour des messages d’avertissement à l’approche des limites des garde-fous : affichage des valeurs actuelles et des valeurs throw. #90438 (Nikita Fomichev).
  • Diffusion des chunks en flux dans la table system.filesystem_cache au lieu de créer un seul chunk contenant tout l’état du cache. La lecture de l’état du cache du système de fichiers peut prendre beaucoup de temps pour les caches volumineux et consommer beaucoup de mémoire ; la diffusion en flux est donc indispensable pour les déploiements de grande taille. #90508 (Kseniia Sumarokova).
  • Correction d’un message d’exception erroné dans le partitionnement Hive : il manquait un espace. #90685 (Alexey Milovidov).
  • Les entrées du cache d’index de similarité vectorielle sont désormais supprimées lorsque des parties de table sont supprimées ou remplacées par des parties plus récentes. Auparavant, elles n’étaient supprimées qu’au fil de l’eau par éviction du cache. #90750 (Shankar Iyer).
  • Mise à niveau de chdig (un outil de diagnostic ClickHouse en ligne de commande) vers v25.12.1. #91394 (Azat Khuzhin).
  • Les URL pré-signées fonctionnent désormais avec S3. Ferme #65032. #90827 (Yarik Briukhovetskyi).
  • L’index de texte fonctionne désormais avec les tables ReplacingMergeTree. #90908 (Elmi Ahmadov).
  • Éviter d’exposer la version du serveur ClickHouse dans les réponses d’erreur HTTP renvoyées avant l’authentification. #91003 (filimonov).
  • Désormais, l’exception HTTP_CONNECTION_LIMIT_REACHED est levée lorsque la hard_limit des connexions des clients HTTP est atteinte. Elle est définie à 20000 pour les connexions disque. #91016 (Sema Checherinda).
  • Introduction de system.background_schedule_pool{,_log} pour améliorer l’introspection des jobs en arrière-plan. #91157 (Azat Khuzhin).
  • Vous pouvez désormais commenter ou décommenter rapidement les lignes actuellement sélectionnées dans l’éditeur de requêtes de l’interface web à l’aide de Ctrl+/ (ou Cmd+/ sur Mac), ce qui permet de désactiver plus facilement certaines parties de votre requête pendant les tests. #91160 (Samuel K.).
  • Ajout de system.completions à la liste des tables toujours accessibles. #91166 (Yakov Olkhovskiy).
  • Ajout des profile events FailedInitialQuery et FailedInitialSelectQuery. #91172 (RinChanNOW).
  • Correction d’un risque de saturation du pool de threads lors de la lecture d’échantillons de colonnes pour des colonnes JSON comportant de nombreuses sous-colonnes, en respectant le paramètre merge_tree_use_prefixes_deserialization_thread_pool au lieu d’utiliser systématiquement le pool de threads. #91208 (Raufs Dunamalijevs).
  • Prise en charge du type JSON dans tupleElement. Clôt #81630. #91327 (Pavel Kruglov).
  • Correction d’erreurs de memory limit intempestives lorsque le userspace page cache est activé. #91361 (Michael Kolupaev).
  • Le tokenizer ngrams peut désormais être construit avec ngram_length = 1. #91529 (George Larionov).
  • Prise en charge des paramètres de stockage à l’intérieur des fonctions dans INSERT INTO FUNCTION, comme c’est déjà le cas pour SELECT. Clôt #89386. #91707 (Kseniia Sumarokova).
  • Renvoie désormais “not implemented” pour les requêtes TRUNCATE sur les data lakes au lieu de ne rien faire silencieusement. Clôt #86604. #91713 (Kseniia Sumarokova).
  • Définition d’une taille maximale de message pour le lecteur Parquet v3 afin d’éviter l’erreur DB::Exception: apache::thrift::transport::TTransportException: MaxMessageSize reached. #91737 (Arthur Passos).
  • Ajout du paramètre insert_select_deduplicate, qui clarifie la manière dont la déduplication à l’insertion est gérée avec INSERT SELECT. En général, il n’est pas possible d’effectuer une déduplication pour ce type de queries, mais si la table n’est pas modifiée et que le résultat est trié, alors une déduplication est possible en cas de retry. Nous ne pouvions pas vérifier que la source restait identique. En revanche, nous pouvions vérifier que le résultat de la requête SELECT était trié. En pratique, il s’est avéré que c’est très difficile à vérifier dans le cas général, mais que le cas simple avec ORDER BY ALL l’est facilement. À l’heure actuelle, cette logique est en réalité défaillante. Nous essayons de dédupliquer, mais dans la plupart des cas, les doublons entre les blocks ne sont tout simplement pas détectés, car le SELECT renvoie des données différentes. #91830 (Sema Checherinda).
  • Autorisation de la conversion implicite de type lors du CAST de Array vers QBit. Les Array d’entiers et de flottants peuvent désormais être insérés directement dans des colonnes QBit sans CAST explicite. #91846 (Raufs Dunamalijevs).
  • Ajout d’une limite de taille de message pour CapnProto. Elle peut être modifiée avec format_capn_proto_max_message_size. #91888 (Antonio Andelic).
  • Affiner les métriques du mark cache pour ne suivre que les requêtes (après #83415, MarkCacheHits/MarkCacheMisses ont également été mis à jour pour les merges ; cette PR rétablit le comportement précédent). #91910 (Azat Khuzhin).
  • Correction de client_info.interface, qui était défini sur TCP pour les connexions locales. #91933 (Konstantin Bogdanov).
  • Le paramètre refresh_certificates_task_interval dans la configuration du client ACME doit désormais être exprimé en secondes. #92211 (Konstantin Bogdanov).
  • Journaliser les événements de parts dans system.part_log pour system.*_log. #92217 (Azat Khuzhin).

Correction de bogue (comportement anormal visible par l’utilisateur dans une version stable officielle)

  • Corrige quelques bogues de PREWHERE liés aux supertypes des types de données Time et Time64. Résout #84544. #84715 (Yarik Briukhovetskyi).
  • Initialise DNSResolver avant son utilisation afin de prendre en compte les paramètres personnalisés. Corrige #76296. #81302 (Zhigao Hong).
  • Corrige, dans certains cas, la lecture de sous-colonnes depuis une colonne dont le nom contient un point. Résout #81261, #82058, #88169. #87205 (Pavel Kruglov).
  • Corrige le plantage du moteur GenerateRandom avec des paramètres non littéraux : renvoie BAD_ARGUMENTS avec un message clair au lieu de LOGICAL_ERROR. #88157 (Shafi Ahmed).
  • Corrige la suppression de colonnes de projection inutilisées en présence de UNION. Corrige #88180. #88350 (Sema Checherinda).
  • Corrige un sharding incorrect dans l’optimisation de JOIN lorsque la clé primaire est triée par ordre décroissant. Résout #88512. #88794 (Amos Bird).
  • Réactive s3queue_keeper_fault_injection_probablility et corrige des problèmes. #88800 (Kseniia Sumarokova).
  • Corrige plusieurs problèmes dus à une suppression prématurée de colonnes dans TTL. Résout #88002. #88860 (Amos Bird).
  • Lève une exception lorsque temporary_files_buffer_size est défini sur 0. Résout #88900. #88917 (Vladimir Cherkasov).
  • Corrige l’erreur Bad get qui se produisait lors de l’analyse d’index Set lorsque le prédicat contenait la constante NULL. Corrige #84856 et #82974. #89429 (Nikolai Kochetov).
  • Corrige Cannot add subcolumn X.Y: column with this name already exists. Résout #89599. #89602 (Azat Khuzhin).
  • Corrige des bogues dans les fonctions theilsU et contingency qui entraînaient des résultats incorrects. #89760 (Nihal Z. Miaji).
  • Corrige des problèmes de stabilité des alias : correction de StrictnessLevel avec SharedDatabaseCatalog, interdiction qu’une cible soit elle aussi un alias, et implémentation d’interfaces supplémentaires (getSerializationHints, supportsReplication, getStoragePolicy, totalBytesUncompressed, lifetimeRows, lifetimeBytes, storesDataOnDisk, tryLockForShare, lockForShare). Résout #89106. #89812 (Kai Zhu).
  • Corrige un possible crash lors d’une query distante avec ARRAY JOIN à l’intérieur de IN et le paramètre enable_lazy_columns_replication activé. Résout #90361. #89997 (Pavel Kruglov).
  • Corrige une possible erreur logique lors de l’utilisation de analyzer_compatibility_join_using_top_level_identifier avec plusieurs joins. #90010 (Vladimir Cherkasov).
  • Corrige, dans certains cas, l’inférence de valeurs DateTime64 incorrectes à partir de Strings dans les text formats. Résout #89368. #90013 (Pavel Kruglov).
  • Effectue des vérifications de taille lors de la désérialisation de données provenant d’aggregation states et d’autres sources. #90031 (Raúl Marín).
  • Fractionne les plages de parts selon les caractéristiques des volumes afin d’activer les merges de suppression TTL pour les volumes froids. Après ce correctif, les parts avec un TTL max < now seront supprimées du stockage froid. L’algorithme planifiera uniquement des suppressions d’une seule part. #90059 (Mikhail Artemenko).
  • Si une Kafka table a été créée avec le paramètre kafka_handle_error_mode = 'dead_letter_queue' et que la table system.dead_letter_queue n’est pas configurée, le server pouvait planter. Ce comportement est corrigé. Résout #87573. #90064 (Nikita Mikhaylov).
  • Corrige une possible erreur Column with Array type is not represented by ColumnArray column: Replicated lors d’une insertion utilisant ARRAY JOIN avec le paramètre enable_lazy_columns_replication activé. #90066 (Pavel Kruglov).
  • Corrige un crash lors de l’arrêt propre du server en raison d’un ordre de destruction incorrect. Résout #82420. #90076 (Nikita Mikhaylov).
  • Corrige une erreur logique et un bug de modulo dans la system table numbers lorsqu’un pas de grande taille est utilisé. Clôt #83398. #90123 (Nihal Z. Miaji).
  • Corrige le fait que l’écriture Parquet ne préserve pas l’ordre d’origine lors de l’utilisation d’une écriture monothread avec le writer natif. Annule partiellement https://github.com/ClickHouse/ClickHouse/pull/64424/files. #90126 (Arthur Passos).
  • N’applique pas l’optimisation des nœuds constants à l’expression LIMIT/OFFSET. Corrige #89607. #90156 (Yakov Olkhovskiy).
  • Corrige une incompatibilité de partitionnement Hive qui empêchait une mise à niveau fluide vers la version 25.8 (corrige l’erreur All hive partitioning columns must be present in the schema pendant la mise à niveau). #90202 (Kseniia Sumarokova).
  • Corrige une Exception JSON dans une table Iceberg avec une colonne timestamp lors de l’utilisation du catalog Glue. Résout #90210. #90209 (Alsu Giliazova).
  • Corrige un décalage du nombre de lignes dans MergeTreeReaderIndex lorsque l’unique part contient moins de lignes que index_granularity. Résout #89691. #90254 (Peng Jian).
  • Corrige une requête WITH FILL infinie avec nan/inf. Résout #69261. #90255 (Konstantin Bogdanov).
  • Corrige l’erreur ‘column not found’ avec query_plan_use_logical_join_step=0 et une condition résiduelle dans JOIN ON. Résout #88635. #90279 (Vladimir Cherkasov).
  • Corrige certaines requêtes avec l’optimisation des projections agrégées. #90288 (János Benjamin Antal).
  • Corrige un bug lors de la lecture des sous-colonnes depuis JSON dans des compact parts, pouvant entraîner l’erreur CANNOT_READ_ALL_DATA. Résout #90264. #90302 (Pavel Kruglov).
  • Désormais, ClickHouse n’utilisera plus l’optimisation read-in-order pour Iceberg si l’ordre de tri n’est pas indiqué dans les manifest files (ou s’il diffère de default_sort_order dans la table). Corrige #89178. #90304 (alesapin).
  • Time et Time64 respectent désormais correctement les timezones lors de la conversion depuis DateTime et DateTime64 (l’heure affichée doit correspondre à la même timezone que celle présentée à l’utilisateur pour un DateTime[64]). Ferme #89896. #90310 (Yarik Briukhovetskyi).
  • Corrige un bug où SELECT CAST(CAST(now(), 'Time'), 'Time64') produisait un résultat incorrect. Ferme #88349. #90324 (Yarik Briukhovetskyi).
  • Corrige un crash dû à un overflow d’entier dans randomStringUTF8. #90326 (Michael Kolupaev).
  • Corrige les mises à jour de Cluster Discovery dans les configurations multicluster avec multicluster_root_path, afin d’éviter les retards et les mises à jour ZooKeeper manquantes. #90341 (RinChanNOW).
  • Corrige une erreur logique possible dans prewhere sur un chemin JSON inexistant avec index_granularity_bytes=0. Résout #86924. #90375 (Pavel Kruglov).
  • Corrige un bug dans L2DistanceTransposed qui provoquait des plantages lorsque l’argument de précision dépassait la plage valide. Clôt #90401. #90405 (Raufs Dunamalijevs).
  • Corrige une erreur logique possible dans arrayUnion avec un argument Array(Dynamic). Résout #90270. #90409 (Pavel Kruglov).
  • Corrige une erreur logique possible lors du renommage et de la modification de la même colonne Nested dans une seule instruction ALTER. Résout #90406. #90412 (Pavel Kruglov).
  • Corrige l’analyse des valeurs JSON/Dynamic/Variant à partir des paramètres HTTP. Résout #88925. #90430 (Pavel Kruglov).
  • Corrige une race condition dans le partitionnement Hive, où un KeyValuePairExtractor statique provoquait une corruption des données ou des plantages lors de lectures concurrentes de fichiers. #90474 (Paresh Joshi).
  • Corrige des calculs de distance incorrects dans L2DistanceTransposed lors de l’utilisation de vecteurs de référence sous forme de tableau (par défaut Array(Float64))) avec des colonnes QBit dont le type d’élément n’est pas Float64 (Float32, BFloat16). La fonction convertit désormais automatiquement le vecteur de référence pour qu’il corresponde au type d’élément de QBit. Résout #89976. #90485 (Raufs Dunamalijevs).
  • Corrige un bug où toDateTimeOrNull renvoie NULL pour un argument négatif. #90490 (Yarik Briukhovetskyi).
  • Corrige une erreur logique possible lors de la sortie de LowCardinality(Bool/Date32) au format Arrow. Résout #83883. #90505 (Pavel Kruglov).
  • Corrige les fonctions d’analyse IPv4 (par ex. IPv4StringToNumOrDefault) qui renvoyaient des valeurs erronées pour certaines entrées invalides. Résout #90544. Résout #87583. #90545 (Michael Kolupaev).
  • Réessaie markReplicasActive lorsqu’il est impossible de résoudre l’adresse pendant la vérification de l’hôte local : affiche un avertissement dans le journal si une exception survient lors de la vérification de l’hôte local dans DDLTask. Dans DDLWorker::markReplicasActive, lève une exception pour réessayer si aucun hôte local n’est trouvé et qu’il existe des ID d’hôte dans les clusters. #90556 (Tuan Pham Anh).
  • Corrige une erreur logique causée par un cas rare dans la fonction equals. Clôt #88142. #90557 (Nihal Z. Miaji).
  • Corrige, espérons-le, les crashs de Thread sanitizer dans test_ssh/test.py::test_paramiko_password. #90612 (Govind R Nair).
  • Corrige une erreur logique dans la fonction concatWithSeparator lors de l’utilisation d’une colonne constante non textuelle. Ferme #90596. #90655 (Nihal Z. Miaji).
  • Corrige le formatage de INTO OUTFILE. Résout #90207. #90656 (Azat Khuzhin).
  • Corrige un crash potentiel lors de l’exécution de mutations avec des sous-requêtes et allow_statistics_optimize=1. Résout #90626. #90664 (Azat Khuzhin).
  • Corrige la validation de l’analyzer pour LIMIT BY avec GROUP BY, afin de produire la bonne erreur NOT_AN_AGGREGATE au lieu de NOT_FOUND_COLUMN_IN_BLOCK lorsque LIMIT BY utilise des colonnes absentes de GROUP BY. Ferme #89713. #90665 (xiaohuanlin).
  • Corrige les erreurs de transtypage lors de l’utilisation de colonnes LowCardinality dans les clés de partition. Ferme #89412. #90666 (xiaohuanlin).
  • Corrige un problème où des requêtes avec des prédicats de filtre contenant des constantes préévaluées à partir de fonctions non déterministes (par ex. shardNum()) pouvaient utiliser à tort le cache des conditions de requête. #90692 (Eduard Karacharov).
  • Corrige un segfault sur une requête avec la fonction EXISTS dans la clause JOIN ON. Désormais, la requête renvoie simplement l’erreur INVALID_JOIN_ON_EXPRESSION. Ferme #90698. #90719 (Vladimir Cherkasov).
  • Corrige l’erreur logique : ‘Inconsistent AST formatting’ pour AccessRightsElement lors de l’utilisation de la base de données default sans aucune table. #90742 (Pablo Marcos).
  • Corrige la validation des accès pour les requêtes ALTER UPDATE lorsqu’une table function remote est utilisée avec localhost comme hôte cible. #90761 (pufit).
  • Corrige l’affichage masqué des secrets dans les named collections pour qu’il dépende de display_secrets_in_show_and_select et de format_display_secrets_in_show_and_select. #90765 (Pablo Marcos).
  • Désactive enable_shared_storage_snapshot_in_query (provoque des fuites de mémoire). #90770 (Azat Khuzhin).
  • Corrige un problème de duplication de données dans RIGHT JOIN avec une table distribuée lorsque les répliques parallèles sont activées. #90806 (zoomxi).
  • Corrige un possible état incohérent des données partagées et des chemins dynamiques dans JSON, susceptible d’entraîner des erreurs logiques et des résultats inattendus. #90816 (Pavel Kruglov).
  • Corrige ALTER MODIFY QUERY avec dictGet() et le nom du dictionnaire dans la CSE pour SharedCatalog (fonctionnalité réservée au Cloud). #90860 (Azat Khuzhin).
  • Corrige la compatibilité de la sérialisation en mémoire de l’état d’aggregation de String. Une sérialisation différente pouvait entraîner des résultats en double si une aggregation query était exécutée sur des instances de versions différentes. La nouvelle sérialisation peut être activée avec serialize_string_in_memory_with_zero_byte. #90880 (Antonio Andelic).
  • Corrige le flush en arrière-plan de Buffer en cas d’INSERT fréquents. #90892 (Azat Khuzhin).
  • N’affiche plus le dossier parent contrib/ dans system.licenses. #90901 (Raúl Marín).
  • Corrige une utilisation élevée de la mémoire lors de la lecture de colonnes JSON/Dynamic/Variant. #90907 (Pavel Kruglov).
  • Corrige l’allocation du buffer pour la fonction base58Decode. #90909 (Antonio Andelic).
  • Corrige une possible logical error lors de la réception d’une autre read request d’une replica après l’envoi d’une réponse avec l’indicateur finish=true. Cela était dû à une possible race condition logique dans MergeTreeReadPoolParallelReplicas, bien que cela ait été très peu probable. #90921 (Nikita Taranov).
  • Corrige la vérification des grants avec caractère générique pour un revoke partiel. Ajout de tests supplémentaires. #90922 (pufit).
  • Corrige l’aggregation de SummingMergeTree pour les colonnes Nested LowCardinality. #90927 (Ivan Babrou).
  • Corrige la gestion des grants globaux avec des revokes génériques. Corrige le problème où la révocation d’un grant générique pouvait accidentellement révoquer certains grants au niveau global, comme CREATE USER. #90928 (pufit).
  • Corrige une possible boucle infinie lors de la liste des blobs Azure. #90947 (Julia Kartseva).
  • Corrige des flushes excessifs de Buffer (ce qui consomme du CPU et produit des tonnes de logs). #91000 (Azat Khuzhin).
  • … N’autorise pas adaptive_write_buffer_initial_size à être défini sur 0. #91001 (Pedro Ferreira).
  • Corrige un bug dans JSON lorsqu’un path peut se trouver à la fois dans les shared data et dans les paths dynamiques lors de la lecture d’un sub-object dans des compact parts avec write_marks_for_substreams_in_compact_parts désactivé. #91014 (Pavel Kruglov).
  • Corrige std::out_of_range dans une CTE avec dictGet sans arguments. Ferme #91027. #91022 (Pavel Kruglov).
  • Corrige la lecture des subcolumns dynamiques à partir de materialized columns dans les mutations. Ferme #90653. #91040 (Pavel Kruglov).
  • Correction de arrayFilter, qui ne fonctionnait pas avec un tableau vide et la fonction isNull. Clôture #73849. #91105 (Nihal Z. Miaji).
  • Correction d’une erreur logique dans ARRAY JOIN lorsque l’une des colonnes de la table est une colonne Tuple vide. Clôture #90801. #91123 (Nihal Z. Miaji).
  • Correction de la matérialisation différée d’une colonne ajoutée via alter add column dans d’anciennes parts. #91142 (Pavel Kruglov).
  • Correction de la fusion des colonnes JSON dans Summing/Aggregating/Coalescing MergeTree. Auparavant, cela pouvait entraîner des paths dynamiques inattendus lors de l’écriture dans les data parts. #91151 (Pavel Kruglov).
  • Correction d’une structure dynamique potentiellement incohérente lors de l’écriture dans des compact parts, ce qui pouvait provoquer un segfault. #91152 (Pavel Kruglov).
  • Correction de l’analyse des valeurs Float sous-normales en notation scientifique. Clôture #78903. #91162 (Nihal Z. Miaji).
  • Correction d’une inférence de schéma erronée dans INSERT SELECT à partir d’une sous-requête avec une source ayant un schéma implicite. #91204 (Pervakov Grigorii).
  • Correction de https://github.com/clickhouse/clickhouse/issues/91206 : lorsqu’une table est créée avec des statistiques, que des données y sont écrites, puis qu’une statistique est supprimée, la lecture suivante pouvait provoquer un crash. Cela venait du fait que nous supposions que la sérialisation et la désérialisation utilisaient les mêmes types de statistiques. Avec cette correction, nous vérifions si les métadonnées actuelles contiennent les statistiques sérialisées ; sinon, nous créons de fausses statistiques et ne désérialisons que pour les ignorer. #91227 (Han Fei).
  • Correction de l’insertion dans une colonne CoalescingMergeTree avec Tuple de JSON/Dynamic et LowCardinality. Clôture #91215. #91270 (Pavel Kruglov).
  • Correction de SYSTEM DROP FILESYSTEM CACHE ON CLUSTER. #91304 (Anton Ivashkin).
  • Correction d’une possible erreur logique “Bad cast from type DB::ColumnSparse to DB::ColumnNullable”. Clôture #91284. #91309 (Pavel Kruglov).
  • Correction d’un crash lorsque des flux d’octets forgés de manière malveillante sont désérialisés en types QBit imbriqués, ce qui devrait être impossible mais pouvait être exploité pour faire planter le serveur. #91313 (Raufs Dunamalijevs).
  • Correction de la table Alias avec des arguments vides dans une Replicated database. Résout #91378. #91382 (Kai Zhu).
  • Actuellement, ce paramètre est défini sur false ; ainsi, lorsque la queue d’async insert est vidée vers un serveur distant, les inserts sont toujours synchrones, même si ce paramètre est à True pour un utilisateur. #91386 (Mikhail f. Shiryaev).
  • Supprime les colonnes sparse de l’en-tête dans les algorithmes de fusion. Clôt #91377. #91396 (Pavel Kruglov).
  • Corrige un bug de partitionnement Hive dans la version 25.8, qui peut entraîner le déclenchement incorrect de l’exception A hive partitioned file can't contain only partition columns. #91403 (Kseniia Sumarokova).
  • Corrige un crash dans dictGetDescendants causé par NULL lorsque le type de dictionnaire prend en charge Hierarchy mais qu’aucune colonne n’est HIERARCHICAL. Clôt #92026. Clôt #92121. #91420 (Nihal Z. Miaji).
  • Corrige un crash dans la fonction IN lorsque des arguments Tuple lambda et non constants sont utilisés. Clôt #91379. #91446 (Nihal Z. Miaji).
  • Corrige les écritures parallèles déclenchées par des insertions dans des MaterializedView vers des storages qui ne les prennent pas en charge. #91449 (Pervakov Grigorii).
  • Gère les valeurs nulles pour les dictionnaires XML Ytsaurus. #91465 (MikhailBurdukov).
  • Corrige le type QBit, qui échouait avec des query parameters comme SET param_q=[1,2,3,4]; SELECT {q:QBit(Float32,4)}. #91488 (Raufs Dunamalijevs).
  • Corrige LOGICAL_ERROR lorsque untuple est utilisé dans une expression constante. #91507 (Pervakov Grigorii).
  • Corrige une possible condition de concurrence dans librdkafka. #91521 (János Benjamin Antal).
  • Corrige une erreur logique causée par l’argument astérisque dans la fonction remote. Clôt #90568. #91524 (Nihal Z. Miaji).
  • Corrige un overflow lors de la lecture du format ORC pour les types Date et DateTime64. Clôt #70976. #91572 (Yarik Briukhovetskyi).
  • Interdit les ALTER pour les table engines de stockage objet. Par exemple, ALTER ADD PROJECTION pouvait empêcher le redémarrage du server, car les engines de stockage objet ne prennent pas en charge les projections. #91573 (Nikolay Degterinsky).
  • Corrige L2DistanceTransposed, qui renvoyait des résultats incorrects lors de l’utilisation de vecteurs de référence non constants (par exemple, depuis une table). #91517. #91593 (Raufs Dunamalijevs).
  • Corrige un bug affectant les JOIN sur des conditions FALSE, qui renvoyaient LOGICAL_ERROR pendant l’étape de distribution. Clôt #91173. #91598 (Yarik Briukhovetskyi).
  • Corrige une augmentation de l’utilisation de la mémoire dans un JOIN avec “additional filter”. Clôt #91011. #91664 (Vladimir Cherkasov).
  • Corrige les requêtes JOIN avec vue et parallélisme entre répliques activé. #91813 (Igor Nikonov).
  • Corrige le paramètre delta lake delta_lake_snapshot_version, qui pouvait renvoyer un résultat incorrect lorsqu’il était utilisé avec un moteur de table (et non une fonction de table) et la valeur -1 (désactivé), après qu’une snapshot version avait déjà été utilisée. Clôt #87676. #91818 (Kseniia Sumarokova).
  • Corrige LOGICAL_ERROR dans RecursiveCTEChunkGenerator. #91827 (Pablo Marcos).
  • Corrige une incompatibilité de structure de bloc avec les requêtes utilisant FINAL et PREWHERE. #91847 (Antonio Andelic).
  • Corrige une logical error avec join_use_nulls, plusieurs JOIN et un CROSS JOIN. #91853 (Vladimir Cherkasov).
  • Ajoute un mécanisme de réparation pour le JSON avec chemin dupliqué dans les shared data et chemins dynamiques, ce qui pouvait se produire à cause du bug corrigé dans https://github.com/ClickHouse/ClickHouse/pull/90816. #91886 (Pavel Kruglov).
  • Corrige un bug du lecteur ORC lors de la lecture de colonnes String encodées avec DICTIONARY_V2 et ne contenant que des valeurs NULL. #91889 (Peng Jian).
  • Corrige une incohérence de sérialisation entre les substreams sparse et Nullable dans les colonnes Tuple, qui pouvait entraîner des parts corrompues ou des crashs pendant la lecture. Cela corrige https://github.com/ClickHouse/ClickHouse/pull/91851 . @Algunenano pourriez-vous vérifier si cela peut corriger le test de stress dans le dépôt privé ? @CurtizJ pourriez-vous aussi y jeter un œil, s’il vous plaît ? Merci !. #91932 (Amos Bird).
  • Corrige Directory '{}' does not exist (LOGICAL_ERROR) lors de la création de backups sur des disques réinscriptibles simples. #91935 (Julia Kartseva).
  • Empêche un crash lors de la connexion à MongoDB avec des named collections. #91959 (Antonio Andelic).
  • Corrige l’erreur “TOO_MANY_MARKS”, qui pouvait se produire après certaines requêtes ALTER sur des compact parts. #91980 (alesapin).
  • Clôt https://github.com/clickhouse/clickhouse/issues/87417 : le schéma d’écriture du format v1 comporte une erreur : le type de “added_snapshot_id” devrait être “long” plutôt que “null, long”, car il est requis. C’est un bug, car ce n’est pas compatible avec d’autres systèmes comme Spark. Quand leurs manifest files sont mélangés, le bug se produit. #92078 (Han Fei).
  • Corrige les noms incorrects de readWKT et readWKB, dont le style n’était pas correct dans les versions précédentes. #92094 (Alexey Milovidov).
  • Corrige de nombreuses erreurs logiques, des dépassements de capacité et des bogues fonctionnels dans la fonction midpoint. Clôt #91816. #92102 (Nihal Z. Miaji).
  • Corrige des résultats incorrects pouvant apparaître lors de la lecture de certaines sous-colonnes (par ex. la taille des chaînes) avec un encodage sparse. #92156 (Pavel Kruglov).
  • Corrige l’échec de system.view_refreshes avec l’erreur No macro 'replica' in config. #92203 (Michael Kolupaev).
  • Corrige le remplacement d’UDF dans le format. #92210 (Raúl Marín).
  • Dans ddlworker::markreplicasactive, si aucun hôte actif n’est trouvé et que remote_servers contient certains host_ids, un avertissement est consigné au lieu de lever une exception. #92223 (Tuan Pham Anh).
  • Entoure les opérateurs IN et NOT IN de parenthèses. Corrige #85075. #92225 (Mikhail f. Shiryaev).
  • Corrige la sauvegarde des tables KeeperMap et Memory. La création d’une sauvegarde de tables utilisant l’un de ces deux moteurs avec max_compress_block_size défini à 0 pouvait entraîner un crash. #92237 (Antonio Andelic).
  • Corrige un crash lors de la lecture simultanée de données String et de la sous-colonne .size depuis le moteur Log. Corrige #89909. Inclut certains commits de #92290. #92341 (Amos Bird).
  • Corrige une erreur logique provoquée par l’utilisation du type Nothing dans les arguments de la fonction caseWithExpression. Clôt #85354. #92351 (Nihal Z. Miaji).
  • Corrige un crash possible dans les fonctions d’agrégation après MEMORY_LIMIT_EXCEEDED. #92390 (Azat Khuzhin).

Amélioration de la compilation/des tests/du packaging

Version de ClickHouse 25.11, 2025-11-27

Changement incompatible avec les versions précédentes

  • Suppression du type Object obsolète. #85718 (Pavel Kruglov).
  • Suppression de la fonctionnalité LIVE VIEW obsolète. Si vous utilisez LIVE VIEW, la mise à niveau vers la nouvelle version ne sera pas possible. #88706 (Alexey Milovidov).
  • Dans les versions précédentes, le type Geometry était un alias de String, mais il s’agit désormais d’un type à part entière. #83344 (scanhex12).
  • Échappement des noms de fichiers créés pour les sous-colonnes de type Variant dans les Wide data parts des tables MergeTree. Ce changement rompt la compatibilité avec les anciennes tables utilisant les types de données Variant/Dynamic/JSON. Il corrige le stockage des types contenant des caractères spéciaux dans Variant (par exemple, un DateTime avec un timezone spécifique contenant \). L’échappement peut être désactivé en modifiant le paramètre MergeTree escape_variant_subcolumn_filenames (pour conserver la compatibilité, désactivez ce paramètre dans la config de MergeTree ou définissez le paramètre compatibility sur la version précédente avant la mise à niveau). Résout #69590. #87300 (Pavel Kruglov).
  • Activation par défaut du format de sérialisation with_size_stream pour le type de données String. Ce changement est rétrocompatible, mais le nouveau format de sérialisation n’est pris en charge qu’à partir de la version 25.10, ce qui signifie qu’un retour à une version antérieure à 25.10 ne sera pas possible. Si vous souhaitez conserver la possibilité de revenir à la version 25.9 ou antérieure, configurez serialization_info_version sur basic et string_serialization_version sur single_stream dans la section merge_tree de la configuration du serveur. #89329 (Alexey Milovidov).
  • Prise en charge du balisage des exceptions dans les réponses de résultats HTTP afin de permettre aux clients d’analyser les exceptions de manière plus fiable. Résout #75175. Le paramètre http_write_exception_in_output_format est désactivé par défaut pour garantir la cohérence entre les formats. #88818 (Kaviraj Kanagaraj). Bien que cela ne soit pas censé casser un comportement existant (dans le pire des cas, une chaîne étrange sera ajoutée au message d’exception), il reste pertinent d’utiliser « Backward Incompatible Change » comme catégorie du changelog par précaution (car on ne sait jamais comment certains scripts bricolés peuvent analyser le message d’exception).
  • Interdiction de créer plusieurs disques plain-rewritable sur un même path partagé d’object storage, car cela peut entraîner un comportement indéfini en cas de collision entre différentes transactions du stockage des métadonnées. #89038 (Mikhail Artemenko).
  • Correction de la priorité des paramètres SASL du stockage Kafka. Les paramètres SASL au niveau table spécifiés dans les requêtes CREATE TABLE remplacent désormais correctement les paramètres spécifiques au consumer/producteur provenant des fichiers de configuration. #89401 (János Benjamin Antal).
  • Les timestamps Parquet sans timezone (isAdjustedToUTC=false) sont désormais lus comme DateTime64(…, ‘UTC’) au lieu de DateTime64(…). C’est moins incorrect, car la conversion d’un tel timestamp UTC en chaîne produit une représentation correcte de l’heure locale. Utilisez input_format_parquet_local_time_as_utc = 0 pour obtenir l’ancien comportement. Résout #87469. #87872 (Michael Kolupaev).
  • Petite amélioration du codec T64 : il n’accepte plus les types de données non alignés sur la taille de l’élément de compression, ce qui déclenchait sinon un bug. Résout #89282. #89432 (yanglongwei).

Nouvelle fonctionnalité

  • Introduction du type Geometry. Prise en charge de la lecture des formats WKB et WKT. Dans les versions précédentes, le type Geometry était un alias de String, mais c’est désormais un type pleinement fonctionnel. #83344 (scanhex12).
  • Ajout de la nouvelle instruction SQL EXECUTE AS pour prendre en charge l’impersonation d’utilisateur. Résout #39048. #70775 (Shankar).
  • Ajout de la fonction naiveBayesClassifier pour classifier du texte avec Naive Bayes à partir de ngrams. #88677 (Nihal Z. Miaji).
  • Ajout de la prise en charge de LIMIT et OFFSET fractionnaires pour sélectionner une fraction d’une table. Ferme #81892. #88755 (Ahmed Gouda).
  • Sous-système ClickHouse pour le catalog Microsoft OneLake. #89366 (scanhex12).
  • Ajout de la fonction flipCoordinates, qui déroule le nombre requis de dimensions dans un Array et échange les pointeurs dans la colonne Tuple. Résout #79469. #79634 (Sachin Kumar Singh).
  • Ajout de la table system.unicode, qui contient une liste de caractères Unicode et de leurs propriétés. Ferme #80055. #80857 (wxybear).
  • Ajout d’un nouveau paramètre MergeTree merge_max_dynamic_subcolumns_in_wide_part pour pouvoir limiter le nombre de sous-colonnes dynamiques dans la Wide part après fusion, indépendamment des paramètres spécifiés dans le type de données. #87646 (Pavel Kruglov).
  • Ajout de la prise en charge de la window function cume_dist. Corrige #86920. #88102 (Manuel).
  • L’utilisateur peut désormais ajouter un nouvel argument preprocessor lors de la création d’un text index. Cet argument est une expression arbitraire qui transforme chaque document avant la tokenization. #88272 (Jimmy Aguilar Mena).
  • Ajout d’un champ memory_usage à X-ClickHouse-Progress et X-ClickHouse-Summary. Il peut être utilisé pour collecter l’utilisation mémoire des queries en temps réel côté client. #88393 (Christoph Wurm).
  • Ajout du paramètre into_outfile_create_parent_directories pour créer automatiquement les répertoires parents pour INTO OUTFILE, ce qui évite les erreurs lorsque les chemins de sortie n’existent pas. Cela simplifie les workflows dans lesquels des queries écrivent des résultats dans des répertoires imbriqués. Résout #88610. #88795 (Saksham).
  • Prise en charge de la syntaxe CREATE OR REPLACE pour les tables temporaires. Ferme #35888. #89450 (Aleksandr Musorin).
  • Prise en charge de arrayRemove pour supprimer du tableau arr tous les éléments égaux à elem. Cela n’est utile que pour la compatibilité avec Postgres, car ClickHouse dispose déjà d’une fonction bien plus puissante, arrayFilter. Corrige #52099. #89585 (tiwarysaurav).
  • Introduction de la fonction scalaire midpoint, qui calcule la moyenne. Corrige #89029. #89679 (simonmichal).
  • La web UI propose désormais un bouton de téléchargement. Il permet de télécharger le résultat complet même si l’UI n’en affiche qu’une partie. #89768 (Alexey Milovidov).
  • Ajout du paramètre arrow_flight_request_descriptor_type pour prendre en charge Dremio et d’autres serveurs Arrow Flight qui nécessitent des descripteurs au format commande. Implémente #89523. #89826 (Shreyas Ganesh).
  • Nouvelles fonctions d’agrégation argAndMin et argAndMax, qui renvoient l’argument et la valeur extrême correspondante. Dans les versions précédentes, il était également possible d’obtenir ce résultat en utilisant un tuple comme argument. #89884 (AbdAlRahman Gad).
  • Paramètres pour écrire et vérifier les sommes de contrôle Parquet. #79012 (Michael Kolupaev).
  • Ajout du paramètre kafka_schema_registry_skip_bytes au Kafka table engine pour ignorer les octets d’en-tête de l’enveloppe (par ex. le préfixe de 19 octets d’AWS Glue Schema Registry) avant l’analyse de la charge utile du message. Cela permet à ClickHouse de consommer des messages provenant de schema registries qui ajoutent des en-têtes de métadonnées. #89621 (Taras Polishchuk).
  • Ajout de la fonction h3PolygonToCells, qui permet de remplir une géométrie avec des hexagones H3. Corrige #33991. #66262 (Zacharias Knudsen).
  • Ajout d’une nouvelle colonne virtuelle _tags (Map(String, String)) contenant tous les tags associés au blob dans S3 (remarque : si le blob n’a aucun tag, aucune requête supplémentaire ne sera effectuée). Corrige #72945. #77773 (Zicong Qu).

Fonctionnalité expérimentale

  • Prise en charge de la récupération de certificats TLS auprès de fournisseurs ACME, RFC 8555, tels que Let’s Encrypt. Cela permet l’autoconfiguration de TLS sur les clusters distribués. #66315 (Konstantin Bogdanov).
  • Prise en charge partielle de la Prometheus HTTP Query API. Pour l’activer, ajoutez une règle de type query_api dans la section <prometheus> du fichier de configuration. Les gestionnaires pris en charge sont /api/v1/query_range et /api/v1/query. #86132 (Nikita Mikhaylov).
  • La recherche en texte intégral est désormais en bêta (alors qu’elle était auparavant au stade expérimental). #88928 (Robert Schulze).
  • Alias passe au stade expérimental et peut être activé avec allow_experimental_alias_table_engine = 1. #89712 (Kai Zhu).

Amélioration des performances

  • Le lecteur Parquet v3 est activé par défaut. #88827 (Michael Kolupaev).
  • Exécution distribuée : meilleure répartition des tâches par identifiants de groupes de lignes, et non par fichiers. #87508 (scanhex12).
  • Les JOIN RIGHT et FULL utilisent désormais ConcurrentHashJoin ; ces types de jointure s’exécutent donc maintenant avec un degré de parallélisme plus élevé. Améliore divers cas de JOIN RIGHT et FULL jusqu’à un facteur deux. Résout #78027. #78462 (Yarik Briukhovetskyi).
  • Optimisation pour les grandes valeurs d’expressions constantes dans les requêtes. Ferme #72880. #81104 (Yakov Olkhovskiy).
  • Requêtes SELECT jusqu’à 8x plus rapides avec un partition pruning important sur des tables comportant plus de 10K parts. #85535 (James Morrison).
  • Lorsqu’une requête utilise une table de hachage fixe pour l’état d’agrégation (group by sur un petit entier), ClickHouse fusionne l’état d’agrégation en parallèle afin d’accélérer la requête. #87366 (Jianfei Hu).
  • Autorise l’utilisation de projections (qui utilisent SELECT de _part_offset et un ORDER BY différent) comme index secondaire. Lorsqu’elle est activée, certains prédicats de requête peuvent être utilisés pour lire depuis les projection parts et générer des bitmaps afin de filtrer efficacement les lignes pendant l’étape PREWHERE. Il s’agit de la troisième étape de l’implémentation de l’index de projection, après #80343. #81021 (Amos Bird).
  • Correction de VDSO pour de rares systèmes Aarch64 et, potentiellement, d’autres combinaisons architecture/noyau. #86096 (Tomas Hulata).
  • Améliore la vitesse de décompression LZ4 en simplifiant le code et en ajustant l’algorithme de sélection. #88360 (Raúl Marín).
  • S3 partitionne les objets en interne en fonction des préfixes de noms de clés et s’adapte automatiquement à des taux de requêtes élevés par partition. Cette modification introduit deux nouveaux paramètres BACKUP : data_file_name_generator et data_file_name_prefix_length. Lorsque data_file_name_generator=checksum, les fichiers de données de sauvegarde sont nommés à l’aide d’un hash de leur contenu. Example : pour un checksum = abcd1234ef567890abcd1234ef567890 et data_file_name_prefix_length = 3, le chemin obtenu sera : abc/d1234ef567890abcd1234ef567890. La distribution de clés qui en résulte améliore l’équilibrage de charge entre les partitions S3 et réduit le risque de throttling. #88418 (Julia Kartseva).
  • Amélioration des performances de l’index de texte grâce à la mise en cache des blocs de dictionnaire et à l’utilisation de tables de hachage pour les lookups de jetons au lieu d’une recherche binaire. #88786 (Elmi Ahmadov).
  • Les requêtes peuvent désormais tirer parti simultanément de optimize_read_in_order et de query_plan_optimize_lazy_materialization. Résout #88767. #88866 (Manuel).
  • Utiliser une projection d’agrégation pour les requêtes avec DISTINCT. Clôt #86925. #88894 (Nihal Z. Miaji).
  • Mise en cache des posting lists pour améliorer les performances lors d’exécutions consécutives. #88912 (Elmi Ahmadov).
  • Exécuter la transformation LIMIT BY en streaming lorsque l’ordre de tri en entrée correspond aux clés LIMIT BY. #88969 (Eduard Karacharov).
  • Autoriser la réécriture de ANY LEFT JOIN ou ANY RIGHT JOIN en ALL INNER JOIN dans certains cas. #89403 (Dmitry Novik).
  • Réduire la surcharge de la journalisation : utiliser moins d’opérations atomiques par entrée. #89651 (Sergei Trifonov).
  • Lorsque les runtime filters sont activés dans une requête avec plusieurs jointures et que plusieurs runtime filters sont ajoutés, implémenter le pushdown des étapes de filtre nouvellement ajoutées sur les autres. #89725 (Alexander Gololobov).
  • Accélérer légèrement certaines opérations uniqExact en réduisant la surcharge liée à la fusion des tables de hachage. #89727 (Raúl Marín).
  • Augmenter de 10 à 100 la limite du nombre de lignes pour la matérialisation paresseuse. #89772 (Alexey Milovidov).
  • Activer par défaut le paramètre allow_special_serialization_kinds_in_output_formats. Cela réduira l’utilisation mémoire et améliorera la vitesse d’exécution des requêtes pour la sortie des colonnes Sparse/Replicated dans certains formats de sortie en lignes. #89402 (Pavel Kruglov).
  • Ajout du parallélisme pour les requêtes ALTER TABLE ... FREEZE. #71743 (Kirill).
  • Ajouter un cache pour l’authentification bcrypt. #87115 (Nikolay Degterinsky).
  • Si un skip index utilisé dans une requête avec FINAL porte sur une colonne faisant partie de la clé primaire, l’étape supplémentaire consistant à vérifier l’intersection de la clé primaire dans les autres parties est inutile et n’est désormais plus effectuée. Résout #85897. #88368 (Shankar Iyer).
  • L’optimisation enable_lazy_columns_replication est désormais activée par défaut, ce qui permettra d’économiser de la mémoire dans les jointures. #89316 (Alexey Milovidov).
  • Introduire un cache ColumnsDescription par table pour les parties, afin de réduire l’utilisation mémoire lorsque les tables contiennent de nombreuses parties et colonnes. #89352 (Azat Khuzhin).
  • Introduction d’un cache pour l’en-tête désérialisé du text index afin de réduire les E/S et d’améliorer les performances des requêtes. Le cache peut être configuré via de nouveaux paramètres serveur : - text_index_header_cache_policy - text_index_header_cache_size - text_index_header_cache_max_entries - text_index_header_cache_size_ratio. #89513 (Elmi Ahmadov).

Amélioration

  • UNION doit unifier les types avec Variant si nécessaire lorsque use_variant_as_common_type est défini. Résout #82772. #83246 (Mithun p).
  • Les rôles définis en SQL peuvent désormais être accordés aux utilisateurs définis dans users.xml. #88139 (c-end).
  • Journalise les requêtes internes (celles exécutées en interne par les dictionnaires, les vues matérialisées actualisables, etc.) et ajoute la nouvelle colonne is_internal à system.query_log. #83277 (Miсhael Stetsyuk).
  • Opérateur IS NOT DISTINCT FROM (<=>) amélioré : ajout de la prise en charge de l’inverse IS DISTINCT FROM, ainsi que d’opérandes numériques compatibles de types différents (par ex. Nullable(UInt32) et Nullable(Int64)). Résout #86763. #87581 (yanglongwei).
  • clickhouse-client et clickhouse-local en mode interactif mettront en surbrillance, dans la ligne de commande, les identifiants portant le même nom que celui actuellement sous le curseur. #89689 (Alexey Milovidov).
  • Les paramètres liés au format de sortie n’affectent désormais plus le cache des requêtes. De plus, le cache des requêtes ignorera le paramètre http_response_headers. Cela est nécessaire pour permettre l’implémentation de fonctionnalités telles que le téléchargement du résultat depuis le cache dans la web UI. #89756 (Alexey Milovidov).
  • L’interface HTTP fournira les en-têtes Age et Expires lorsque le cache de résultats de requête est utilisé. La présence de l’en-tête Age indique si le résultat provient du cache, tandis que Expires est également défini lors de la première écriture. Introduction de nouveaux événements de profil : QueryCacheAgeSeconds, QueryCacheReadRows, QueryCacheReadBytes, QueryCacheWrittenRows, QueryCacheWrittenBytes. #89759 (Alexey Milovidov).
  • Autorise les insertions dans les tables distantes et les tables de data lake lorsque disable_insertion_and_mutation est activé (ce qui signifie des warehouses en lecture seule dans ClickHouse Cloud). #88549 (Alexander Tokmakov).
  • Ajout de la requête SYSTEM DROP TEXT INDEX CACHES. #90287 (Anton Popov).
  • Active enable_shared_storage_snapshot_in_query par défaut pour de meilleures garanties de cohérence. Il ne devrait y avoir aucun inconvénient. #82634 (Alexey Milovidov).
  • Ajout du paramètre send_profile_events, qui permet aux clients de réduire le trafic réseau lorsque les événements de profil ne sont pas utilisés. #89588 (Kaviraj Kanagaraj).
  • Autorise la désactivation, requête par requête, du téléchargement en arrière-plan des segments voisins. Corrige #89524. #89668 (tanner-bruce).
  • Autorise FETCH PARTITION lorsqu’il y a des disques défectueux dans des tables MergeTree répliquées. #58663 (Duc Canh Le).
  • Corrige une exception non interceptée lors de la récupération du schéma d’une table MySQL dans le moteur de base de données MySQL. #69358 (Duc Canh Le).
  • Toutes les requêtes DDL ON CLUSTER s’exécutent désormais avec le contexte utilisateur de la requête d’origine, pour une meilleure validation des accès. #71334 (pufit).
  • Ajout de la prise en charge de UUID dans Parquet lorsqu’il est représenté par FixedString(16) avec le type logique UUID. #74484 (alekseev-maksim).
  • Désactive ThreadFuzzer par défaut dans les binaires autres que le serveur. #89115 (Raúl Marín).
  • Rend les optimisations du plan de requête visibles pour le sous-plan d’entrée de la sous-requête corrélée en retardant sa matérialisation. Fait partie de #79890. #85455 (Dmitry Novik).
  • Vous pouvez désormais voir une barre de progression, des logs et des statistiques de performance pour les requêtes CREATE OR REPLACE TABLE avec SELECT dans clickhouse-client. Cette requête ne provoquera plus de timeout, même si le SELECT est assez long à exécuter. Résout #38416. #87247 (Diskein).
  • Prise en charge des types JSON et Dynamic dans les fonctions de hachage. Résout #87734. #87791 (Pavel Kruglov).
  • Implémente les parties manquantes du serveur ArrowFlight. #88013 (Vitaly Baranov).
  • Ajoute plusieurs métriques d’histogramme pour le serveur et Keeper afin d’instrumenter la durée des différentes étapes d’exécution des requêtes Keeper. Les métriques suivantes seront ajoutées au serveur : keeper_client_queue_duration_milliseconds, keeper_client_send_duration_milliseconds, keeper_client_roundtrip_duration_milliseconds. Les métriques suivantes seront ajoutées à Keeper : keeper_server_preprocess_request_duration_milliseconds, keeper_server_process_request_duration_milliseconds, keeper_server_queue_duration_milliseconds, keeper_server_send_duration_milliseconds. #88158 (Miсhael Stetsyuk).
  • Ajoute l’option input_headers à la requête EXPLAIN pour ajouter les en-têtes d’entrée aux étapes. #88311 (János Benjamin Antal).
  • Ajoute des profile events pour compter le nombre de requêtes S3 et AzureBlobStorage retardées par les throttlers. Corrige l’incohérence entre les profile events ThrottlerCount liés au disk et ceux qui ne le sont pas. Désormais, les requêtes HTTP DELETE vers AzureBlobStorage ne sont plus limitées. #88535 (Sergei Trifonov).
  • Met en cache les statistiques au niveau des tables et ajoute deux paramètres : le paramètre MergeTree refresh_statistics_interval définit l’intervalle de rafraîchissement du cache de statistiques, 0 signifiant qu’aucun cache ne sera créé. Le paramètre de session use_statistics_cache indique s’il faut utiliser les statistiques au niveau des tables dans une requête. Dans certains cas, on peut vouloir des statistiques de meilleure qualité et donc choisir de les ignorer. #88670 (Han Fei).
  • Correction de la désérialisation binaire de Array et Map, qui utilise désormais le paramètre max_binary_array_size au lieu de max_binary_string_size lors de la validation des limites de taille. Cela garantit que les limites appropriées sont appliquées lors de la lecture au format RowBinary. #88744 (Raufs Dunamalijevs).
  • Introduction de la classe LockGuardWithStopWatch et utilisation de celle-ci dans le background pool pour exécuter les merges. Si un mutex est détenu pendant une seconde, ou si un thread met plus d’une seconde à l’obtenir, un message d’avertissement sera affiché. Le code lourd a été déplacé du destructor de MergeMutateSelectedEntry vers la méthode finalize afin d’éviter de conserver le verrou trop longtemps dans l’exécuteur MergeTreeBackground. #88898 (Nikita Mikhaylov).
  • Autorise désormais l’utilisation automatique des régions AWS opt-in pour S3 lorsque la Region n’est pas spécifiée dans l’endpoint. Référence : opt-in AWS regions. #88930 (Andrey Zvonov).
  • L’utilisateur peut désormais annuler la query dans clickhouse-client en appuyant sur Ctrl-C lorsque le pager est actif. Résout #80778. #88935 (Grigorii).
  • La web UI affichera des barres dans la table même lorsque les values sont négatives. Elle peut ainsi afficher un chart en barres bilatéral avec des couleurs différentes pour les parties négatives et positives. #89016 (Alexey Milovidov).
  • Désactive shared_merge_tree_create_per_replica_metadata_nodes afin de réduire la quantité de metadata que SharedMergeTree stocke dans Keeper. #89036 (Alexander Tokmakov).
  • Fait en sorte que S3Queue respecte le server setting disable_insertion_and_mutation. #89048 (Raúl Marín).
  • Définit s3_retry_attempts sur 500 par défaut pour 25.6 afin de garantir la réussite des backups lorsqu’il y a un repartitionnement S3 et que S3 renvoie des erreurs de ralentissement pendant plus de 10 minutes. #89051 (Nikita Mikhaylov).
  • Les settings kafka_compression_codec et kafka_compression_level peuvent désormais être utilisés pour spécifier la compression des producteurs Kafka dans les deux Kafka engines. #89073 (János Benjamin Antal).
  • Ajout d’une nouvelle column statistics dans system.columns, indiquant les types de statistiques construites sur cette table. Si un type de statistiques est créé automatiquement, il apparaîtra avec le suffixe (auto). #89086 (Han Fei).
  • Améliore le message d’error lorsqu’une expansion générique est transmise à la place d’un nom de cluster à une table function *Cluster. #89093 (Konstantin Bogdanov).
  • YTsaurus : autorise l’utilisation d’une replicated_table comme data source. #89107 (MikhailBurdukov).
  • Les queries commençant par des espaces ne sont plus enregistrées dans l’history de la CLI. #89116 (Konstantin Bogdanov).
  • Prise en charge de Array de String en entrée des fonctions hasAnyTokens ou hasAllTokens. #89124 (Elmi Ahmadov).
  • Modification de la manière dont les disques plain-rewritable stockent leurs metadata en mémoire, ce qui corrige de nombreux bugs liés à l’imbrication des directory et aux éléments associés. #89125 (Mikhail Artemenko).
  • Les sous-requêtes utilisées dans des expressions IN lors de l’interrogation d’une table Iceberg seront correctement précalculées avant l’analyse d’élagage des partitions. #89177 (Daniil Ivanik).
  • Activer create_table_empty_primary_key_by_default par défaut. Cela améliore la facilité d’utilisation. #89333 (Alexey Milovidov).
  • Correction d’un code incorrect dans le moteur de base de données Backup, qui pouvait générer une requête invalide avec SHOW CREATE DATABASE ou lors de l’interrogation de engine_full depuis system.databases. Clôt #89477. #89341 (Alexey Milovidov).
  • Dans les versions précédentes, le paramètre create_table_empty_primary_key_by_default était sans effet lorsque vous ne spécifiiez pas le moteur de table dans la requête CREATE TABLE. #89342 (Alexey Milovidov).
  • Mise à jour de chdig vers la v25.11.1 - inclut des améliorations majeures de la journalisation et diverses autres améliorations (notes de version pour 25.11). #89957 (Azat Khuzhin). (notes de version pour 25.10). #89452 (Azat Khuzhin).
  • Étendre le redimensionneur de la zone de texte de requête dans la Web UI sur toute la largeur, ce qui la rend un peu plus pratique. De plus, le redimensionneur natif du navigateur n’était pas disponible dans Safari sur iPad et, après ce changement, vous pouvez au moins faire glisser le bas de la zone de texte si vous savez que c’est possible. #89457 (Alexey Milovidov).
  • Amélioration du suivi de la mémoire lors de la génération des résultats de hash joins. Auparavant, les allocations temporaires pendant la génération du résultat de jointure n’étaient pas correctement suivies, ce qui pouvait entraîner des dépassements de la limite de mémoire. #89560 (Azat Khuzhin).
  • Journal du serveur asynchrone : flush plus tôt et augmentation de la taille de la file d’attente par défaut. #89597 (Raúl Marín).
  • Correction de FilesystemCacheBytes erroné (et d’autres) dans system.asynchronous_metrics. Exécuter les requêtes SYSTEM sur les caches du système de fichiers une seule fois. Vue atomique pour les caches qui pointent vers le même chemin dans system.filesystem_caches. #89640 (Azat Khuzhin).
  • Clarification de la description de certaines colonnes dans system.view_refreshes. #89701 (Tuan Pham Anh).
  • Mettre en cache les identifiants S3 utilisés lors de l’interaction avec le point de terminaison STS afin de pouvoir les réutiliser pour différents appels de fonction. Le nombre d’identifiants mis en cache peut être contrôlé avec s3_credentials_provider_max_cache_size. #89734 (Antonio Andelic).
  • Correction du pushdown du runtime filter lorsqu’il y a plusieurs étapes d’expression en dessous. #89741 (Alexander Gololobov).
  • Si la mémoire système est inférieure à 5GB, ne pas verrouiller l’exécutable en mémoire par défaut. #89751 (Alexey Milovidov).
  • Les indications de type dans la Web UI ne débordent plus sur l’en-tête du tableau. L’affichage des infobulles a également été corrigé : elles ne passent plus derrière l’en-tête du tableau. #89753 (Alexey Milovidov).
  • Affichage des propriétés des tables dans la Web UI. Un clic sur le nombre de lignes ou d’octets affiche une requête à partir de system.tables. Un clic sur le moteur de table affiche SHOW TABLES. #89771 (Alexey Milovidov).
  • Prise en charge de non_replicated_deduplication_window pour les tables avec un disque qui n’implémente pas l’écriture en mode append. Résout #87281. #89796 (Tuan Pham Anh).
  • Ajout de la possibilité de définir une liste de tables à vider dans la commande SYSTEM FLUSH ASYNC INSERT QUEUE. #89915 (Sema Checherinda).
  • Stockage des identifiants de blocs de déduplication dans system.part_log. #89928 (Sema Checherinda).
  • La valeur par défaut du paramètre de cache du système de fichiers keep_free_space_remove_batch a été modifiée de 10 à 100, car c’est plus optimal. #90030 (Kseniia Sumarokova).
  • Introduction du type de fusion TTL DROP, sans mise à jour de la planification de la prochaine fusion TTL de suppression après ce type de fusions. #90077 (Mikhail Artemenko).
  • Utilisation d’une limite de nœuds plus faible pour la requête RemoveRecursive de Keeper lors du nettoyage de S3Queue. #90201 (Antonio Andelic).
  • La requête SYSTEM FLUSH LOGS attend désormais la création de la table même lorsque les logs sont vides. #89408 (János Benjamin Antal).
  • Correction de rows_before_limit_at_least lorsqu’il y a plusieurs segments distants impliqués dans une agrégation distribuée avec fusion, ou des clauses IN avec sous-requêtes. Cela corrige #63280. #63511 (Amos Bird).
  • Correction de l’apparition de 0 rows in set après une requête INSERT INTO ... SELECT. Ferme #47800. #79462 (Engel Danila).

Correction de bogue (comportement incorrect visible par l’utilisateur dans une version stable officielle)

  • Correction de multiIf avec des arguments constants et l’évaluation à court-circuit. Clôt #72714. #84546 (Yakov Olkhovskiy).
  • Correction d’une erreur logique lors de la sélection depuis une table avec une contrainte de sous-requête. Résout #84190. #85575 (Pervakov Grigorii).
  • Correction d’un bug pour certaines requêtes spéciales utilisant une URI avec des points d’interrogation. #85663 (Yarik Briukhovetskyi).
  • Correction de colonnes parfois manquantes dans la sortie de EXPLAIN indexes = 1. Résout #86696. #87083 (Michael Kolupaev).
  • Correction d’une possible erreur Cannot add subcolumn avec les répliques parallèles. Clôt #84888. #87514 (Pavel Kruglov).
  • Dans le writer Parquet, émission de la chaîne created_by au bon format, par ex. ClickHouse version 25.10.1 (build 5b1dfb14925db8901a4e9202cd5d63c11ecfbb9f) au lieu de ClickHouse v25.9.1.1-testing. Correction de la compatibilité du lecteur Parquet avec des fichiers incorrects écrits par d’anciennes versions de parquet-mr. #87735 (Michael Kolupaev).
  • Correction du calcul du phi carré, qui provoquait des résultats incorrects dans cramersV, cramersVBiasCorrected, theilsU et contingency. #87831 (Nihal Z. Miaji).
  • Correction de la lecture d’un Array mixte de Floats et de Bools en JSON. Auparavant, l’insertion de telles données entraînait une exception. #88008 (Pavel Kruglov).
  • Utilisation de shared_ptr pour QueryState dans TCPHandler afin de détecter si l’état est invalide dans setProgressCallback, setFileProgressCallback et setBlockMarshallingCallback. #88201 (Tuan Pham Anh).
  • Correction d’une erreur logique dans la réorganisation des CROSS JOIN lorsque query_plan_optimize_join_order_limit > 1. Clôt #89409. #88286 (Vladimir Cherkasov).
  • Correction de #88426 1. Les définitions explicites de colonnes dans Alias sont désormais interdites, et les colonnes sont automatiquement chargées depuis la table cible. Cela garantit que l’alias correspond toujours au schéma de la table cible. 2. Davantage de méthodes sont relayées depuis IStorage. #88552 (Kai Zhu).
  • Après récupération, une réplique d’une base de données Replicated pouvait rester bloquée longtemps en affichant des messages comme Failed to marked query-0004647339 as finished (finished=No node, synced=No node) ; le problème est corrigé. #88671 (Alexander Tokmakov).
  • Correction d’un possible “Context has expired” avec le nouvel analyzer et les sous-requêtes. #88694 (Azat Khuzhin).
  • Correction d’une erreur de segmentation dans le lecteur Parquet lorsque input_format_parquet_local_file_min_bytes_for_seek est défini sur 0. Résout #78456. #88784 (Animesh).
  • Correction d’un résultat min(PK)/max(PK) incorrect lorsque la PK est en ordre inversé. Cela corrige #83619. #88796 (Amos Bird).
  • Correction de la propagation des restrictions de taille définies par les paramètres max_table_size_to_drop et max_partition_size_to_drop lors du DROP des tables internes. #88812 (Nikolay Degterinsky).
  • Correction de top_k pour qu’il respecte le paramètre de seuil lorsqu’il est appelé avec un seul argument. Clôt #88757. #88867 (Manuel).
  • Les sources de point de terminaison ArrowFlight nécessitant une connexion SSL (par exemple derrière un AWS ALB) peuvent désormais demander correctement un jeu de données spécifique. #88868 (alex-shchetkov).
  • Correction de la gestion des Nested(Tuple(…)) non matérialisés (ajoutés via ALTER). Corrige #83133. #88879 (Azat Khuzhin).
  • Correction d’un bug dans la fonction reverseUTF8. Dans les versions précédentes, elle inversait par erreur les octets des points de code UTF-8 sur 4 octets. Cela clôt #88913. #88914 (Alexey Milovidov).
  • Correction du protocole icebergS3Cluster. Ajout de la prise en charge de l’évolution de schéma, des suppressions positionnelles et des suppressions par égalité dans la fonction iceberg cluster. Résout #88287. #88919 (Yang Jiang).
  • Désactivation de parallel_replicas_support_projection pour les requêtes avec répliques parallèles sur des tables distribuées. Clôt #88899. #88922 (zoomxi).
  • Propagation du contexte dans les conversions de type internes. Correction de plusieurs problèmes où les paramètres de conversion de type n’étaient pas propagés. Clôt #88873. Clôt #78025. #88929 (Manuel).
  • Correction de la détection du format de fichier à partir des globs dans la fonction file(). Résout #88920. #88947 (Vitaly Baranov).
  • Ne vérifie plus l’accès SET DEFINER <current_user>:definer lors de la création d’une vue avec SQL SECURITY DEFINER. #88968 (pufit).
  • Correction de LOGICAL_ERROR dans L2DistanceTransposed(vec1, vec2, p) où l’optimisation de lecture partielle de QBit supprimait à tort Nullable du type de retour lorsque p était Nullable. #88974 (Raufs Dunamalijevs).
  • Correction d’un plantage en cas de type de catalog inconnu. Résout #88819. #88987 (scanhex12).
  • Clôt #88081. #88988 (scanhex12).
  • Correction d’une baisse de performances lors de l’analyse des skipping indexes. #89004 (Anton Popov).
  • Correction de l’erreur ACCESS_ENTITY_NOT_FOUND lors de l’exécution de clusterAllReplicas par un utilisateur ayant un rôle inexistant. Résout #87670. #89068 (pufit).
  • Correction du traitement des colonnes sparse par la contrainte CHECK. Clôt #88637. #89076 (Eduard Karacharov).
  • Correction d’un nombre de lignes incorrect lors du remplissage des colonnes virtuelles dans MergeTreeReaderTextIndex, provoquant un plantage avec LOGICAL_ERROR. #89095 (Peng Jian).
  • Empêche les fuites du compteur de fusion TTL lorsque des exceptions surviennent pendant la préparation de la fusion. Résout #89019. #89127 (save-my-heart).
  • Correction du calcul de la taille du buffer nécessaire pour les opérations d’encodage et de décodage base32/base58. #89133 (Antonio Andelic).
  • Correction d’un use-after-free dans Distributed dû à une condition de concurrence entre l’arrêt et les INSERT en arrière-plan. Résout #88640. #89136 (Azat Khuzhin).
  • Évite de possibles accès concurrents dus à des exceptions mutables lors du parsing de Parquet. Corrige #88385. #89174 (Azat Khuzhin).
  • Vue matérialisée actualisable : correction d’un plantage rare du serveur si la table source était entièrement supprimée pendant une actualisation. #89203 (Michael Kolupaev).
  • Vidage des buffers lors de l’envoi d’une erreur au milieu d’un flux compressé dans l’interface HTTP. #89256 (Alexander Tokmakov).
  • Empêche l’application incorrecte des règles de masquage des requêtes aux instructions DDL. #89272 (MikhailBurdukov).
  • Correction d’un nombre de lignes incorrect lors du remplissage des colonnes virtuelles dans MergeTreeReaderTextIndex, provoquant un plantage avec LOGICAL_ERROR. Rouvre #89095. #89303 (Jimmy Aguilar Mena).
  • Correction : Statistics countmin ne prend pas en charge l’estimation pour le type de données LowCardinality(Nullable(String)) : LOGICAL_ERROR. #89343 (Han Fei).
  • Crash/comportement indéfini possible dans la fonction IN lorsque les types des colonnes de clé primaire diffèrent des types des colonnes du côté droit de la fonction IN. Exemple : SELECT string_column, int_column FROM test_table WHERE (string_column, int_column) IN (SELECT ‘5’, ‘not a number’). Se produit lorsque de nombreuses lignes sont sélectionnées et que certaines contiennent des types incompatibles. #89367 (Ilya Golshtein).
  • Correction de la troncature des arguments de countIf(*). Clôt #89372. #89373 (Manuel).
  • Évite la perte des checksums uncompressed pour les statistiques sur les mutations. #89381 (Azat Khuzhin).
  • Correction de LOGICAL_ERROR dans L2DistanceTransposed(vec1, vec2, p), où l’optimisation de lecture partielle de QBit supprimait incorrectement Nullable du type de retour lorsque p était LowCardinality(Nullable(T)). Résout #88362. #89397 (Raufs Dunamalijevs).
  • Correction du chargement des tables avec une sérialisation sparse incorrecte pour le tuple lui-même (écrite par d’anciennes versions de ClickHouse). #89405 (Azat Khuzhin).
  • Correction de la gestion incorrecte du merge des parts vidées par TTL avec des projections non vides lors de l’utilisation de deduplicate_merge_projection_mode='ignore'. Résout #89430. #89458 (Amos Bird).
  • Correction d’une erreur logique dans le join full_sorting_merge avec des colonnes dupliquées. Résout #86957. #89495 (Vladimir Cherkasov).
  • Correction de la lecture des changelogs au démarrage de Keeper dans les cas où un changelog n’avait pas été renommé correctement pendant la rotation. #89496 (Antonio Andelic).
  • Correction de résultats de JOIN incorrects lors de l’utilisation de conditions OR avec des keys de right table uniques. Résout #89391. #89512 (Vladimir Cherkasov).
  • Correction d’un possible “Context has expired” avec l’analyzer et PK IN (subquery) (v2). Corrige #89433. #89527 (Azat Khuzhin).
  • Correction de la replication de MaterializedPostgreSQL pour les tables avec des noms de colonnes configurés en majuscules. Résout #72363. #89530 (Danylo Osipchuk).
  • Correction d’un crash lorsqu’un state d’une aggregate function contient une valeur sérialisée d’une colonne LowCardinality(String). #89550 (Pavel Kruglov).
  • Corrige un plantage lors de l’utilisation de ARRAY JOIN du côté droit d’un JOIN lorsque le paramètre enable_lazy_columns_replication est activé. #89551 (Pavel Kruglov).
  • Corrige une erreur logique liée à query_plan_convert_join_to_in. Résout #89066. #89554 (Vladimir Cherkasov).
  • Corrige une exception dans l’estimateur de statistiques lors de l’estimation de conditions avec des types de colonne et de constante incompatibles, impossibles à convertir. #89596 (Han Fei).
  • Ajoute des filtres d’exécution uniquement pour les algorithmes de jointure pris en charge, c.-à-d. les jointures par hachage. Un filtre ne peut être construit que lorsque l’algorithme de jointure lit d’abord entièrement le côté droit, puis le côté gauche, alors que FullSortingMergeJoin, par exemple, lit les deux côtés simultanément. Corrige #89220. #89652 (Alexander Gololobov).
  • Corrige les exécutions concurrentes des fonctions hasAnyTokens, hasAllTokens et tokens avec le tokenizer sparseGrams. Résout #89605. #89665 (Elmi Ahmadov).
  • Corrige une erreur logique ou un plantage lié au filtre d’exécution de jointure dans certains cas. Corrige #89062. #89666 (Alexander Gololobov).
  • Corrige une possible erreur logique lors d’un ARRAY JOIN sur une colonne Map avec enable_lazy_columns_replication activé. Clôt #89705. #89717 (Pavel Kruglov).
  • Évite un plantage dû à une lecture sur un serveur distant après une déconnexion, dans des requêtes distantes en cours d’annulation. Résout #89468. #89740 (Azat Khuzhin).
  • Corrige une condition de concurrence dans le chemin de lecture de l’index de projection. Résout #89497. #89762 (Peng Jian).
  • Corrige un bug dans la lecture de l’index de projection qui pouvait provoquer des conditions de concurrence. Résout #89497. #89775 (Amos Bird).
  • Corrige la gestion de la fonction de table Paimon pour les tables sans partition. Résout #89690. #89793 (JIaQi).
  • Corrige une possible erreur logique lors de la lecture des chemins et de leurs sous-colonnes dans la sérialisation avancée de données JSON partagées. Clôt #89805. #89819 (Pavel Kruglov).
  • Corrige un possible débordement de pile dans la désérialisation binaire des types de données. Clôt #88710. #89822 (Pavel Kruglov).
  • Correction d’une erreur logique avec un tuple vide dans la fonction IN. Closes #88343. #89850 (Nihal Z. Miaji).
  • Suppression des fonctions injectives de GROUP BY, indépendamment de optimize_injective_functions_in_group_by, dans l’ancien analyseur pour des raisons de compatibilité. Resolves #89854. #89870 (Raufs Dunamalijevs).
  • Si la fusion était interrompue, par exemple en raison d’une limite de mémoire, l’exécuteur en arrière-plan des mutations de fusion appelait cancel sur la tâche de fusion sans verrou. Dans ce cas, toutefois, la part de résultat partiellement créée n’était pas supprimée (car elle n’était pas terminée et, à ce stade, n’était pas visible). Ensuite, la tâche de fusion était détruite, ce qui déclenchait la destruction de la part de résultat. Cela annulait la transaction sur disque et entraînait la suppression des données de S3. Finalement, ce nettoyage a été exécuté sous le verrou de l’exécuteur en arrière-plan des mutations de fusion. #89875 (Mikhail Artemenko).
  • Correction d’une erreur logique avec un tuple vide dans les fonctions reverse et CAST. Closes #89137. #89908 (Nihal Z. Miaji).
  • Désormais, ClickHouse affichera par défaut la base de données du catalogue Data Lake dans la requête SHOW DATABASES. #89914 (alesapin).
  • Correction de l’utilisation de la copie native sur GCS pour les sauvegardes. En raison d’un clonage incorrect du client, la copie native GCS échouait systématiquement et utilisait une approche moins optimale, basée sur la lecture et l’écriture manuelles des données. #89923 (Antonio Andelic).
  • Correction du calcul de la taille du tampon pour base32Encode. Le calcul de base32Encode pour une colonne de chaînes de taille inférieure à 5 pouvait provoquer des plantages. Resolves #89911. #89929 (Antonio Andelic).
  • Correction d’un échappement incorrect pour les requêtes SHOW COLUMNS et SHOW FUNCTIONS. #89942 (alesapin).
  • Correction de la validation d’URL dans le moteur MongoDB lorsque le nom d’utilisateur contient le caractère ’@’. Auparavant, les noms d’utilisateur contenant ’@’ provoquaient une erreur en raison d’un encodage incorrect. #89970 (Kai Zhu).
  • Rétroporté dans #90592 : correction d’un plantage possible lors d’une requête distante avec ARRAY JOIN dans IN et le paramètre enable_lazy_columns_replication activé. Resolves #90361. #89997 (Pavel Kruglov).
  • Rétroporté dans #90448 : correction, dans certains cas, de l’inférence de valeurs DateTime64 incorrectes à partir de Strings dans les formats texte. Resolves #89368. #90013 (Pavel Kruglov).
  • Correction d’une erreur logique provoquée par une colonne tuple vide dans BSONEachRow et MsgPack. Ferme #89814. Ferme #71536. #90018 (Nihal Z. Miaji).
  • Rétroporté dans #90457 : ajout de vérifications de taille lors de la désérialisation de données provenant d’états d’agrégation et d’autres sources. #90031 (Raúl Marín).
  • Correction de l’erreur possible ‘Invalid number of rows in Chunk’ dans un JOIN avec des colonnes dupliquées. Résout #89411. #90053 (Vladimir Cherkasov).
  • Rétroporté dans #90588 : correction de l’erreur possible Column with Array type is not represented by ColumnArray column: Replicated lors d’une insertion utilisant ARRAY JOIN avec le paramètre enable_lazy_columns_replication activé. #90066 (Pavel Kruglov).
  • Prise en charge des fichiers commençant par un point dans user_files. Ferme #89662. #90079 (Raúl Marín).
  • Rétroporté dans #90647 : correction d’une erreur logique et d’un bogue de modulo dans la table système numbers lorsqu’une grande valeur de pas est utilisée. Ferme #83398. #90123 (Nihal Z. Miaji).
  • Correction d’un débordement d’entier lors de l’analyse des arguments du dictionnaire. Ferme #78506. #90171 (Raúl Marín).
  • Rétroporté dans #90468 : correction d’une incompatibilité du partitionnement Hive empêchant une mise à niveau sans heurts vers la version 25.8 (corrige l’erreur All hive partitioning columns must be present in the schema pendant la mise à niveau). #90202 (Kseniia Sumarokova).
  • Correction de résultats de requête potentiellement incorrects après des mises à jour légères dans des requêtes SELECT, lorsque le cache des conditions de requête est activé. Corrige #90176. Corrige #90054. #90204 (Anton Popov).
  • Correction d’un plantage dans StorageDistributed lors de l’analyse de noms de répertoire de shard mal formés. #90243 (Aleksandr Musorin).
  • Prise en charge de la conversion implicite d’une chaîne vers un entier ou un booléen dans LogicalExpressionOptimizerPass. Résout #89803. #90245 (Elmi Ahmadov).
  • Correction du formatage incorrect de certains index de saut dans la définition de la table, provoquant METADATA_MISMATCH et empêchant la création de nouvelles répliques dans la base de données Replicated. #90251 (Nikolay Degterinsky).
  • Rétroporté dans #90381 : corrige une incohérence du nombre de lignes dans MergeTreeReaderIndex lorsque l’unique partie contient moins de lignes que index_granularity. Résout #89691. #90254 (Peng Jian).
  • Rétroporté dans #90608 : corrige un bug lors de la lecture de sous-colonnes depuis JSON dans des parties compactes, pouvant entraîner l’erreur CANNOT_READ_ALL_DATA. Résout #90264. #90302 (Pavel Kruglov).
  • Corrige le problème empêchant les fonctions trim, ltrim, rtrim de fonctionner avec deux arguments. Ferme #90170. #90305 (Nihal Z. Miaji).
  • Rétroporté dans #90625 : corrige une possible erreur logique dans prewhere sur un chemin JSON inexistant avec index_granularity_bytes=0. Résout #86924. #90375 (Pavel Kruglov).
  • Rétroporté dans #90484 : corrige un bug dans L2DistanceTransposed qui provoquait des plantages lorsque l’argument precision dépassait la plage valide. Ferme #90401. #90405 (Raufs Dunamalijevs).
  • Rétroporté dans #90577 : corrige des calculs de distance incorrects dans L2DistanceTransposed lors de l’utilisation de vecteurs de référence de type tableau (qui utilisent par défaut Array(Float64))) avec des colonnes QBit dont le type d’élément n’est pas Float64 (Float32, BFloat16). La fonction convertit désormais automatiquement le vecteur de référence pour qu’il corresponde au type d’élément du QBit. Résout #89976. #90485 (Raufs Dunamalijevs).
  • Rétroporté dans #90601 : corrige une erreur logique causée par un cas rare dans la fonction equals. Ferme #88142. #90557 (Nihal Z. Miaji).
  • Corrige CoalescingMergeTree pour les types Tuple. #88828 (scanhex12).

Amélioration de la compilation/des tests/du packaging

  • Correction de l’erreur « Connection refused » lors de l’exécution de ClickHouse dans Docker avec des scripts SQL initdb et un port TCP redéfini. #88042 (Grigorii).
  • Prise en charge expérimentale de e2k comme nouvelle plateforme pour ClickHouse. #90159 (Ramil Sattarov).
  • Suppression des dernières utilisations de FindPackage dans CMake. Les builds ne doivent pas dépendre des paquets système. #89380 (Alexey Milovidov).
  • Utilisation du cache du compilateur dans les builds lors de la configuration de CMake (par ex. protoc). #89613 (Konstantin Bogdanov).
  • Utilisation du sysroot de FreeBSD 13.4. #89617 (Konstantin Bogdanov).

Version de ClickHouse 25.10 du 2025-10-31

Changement incompatible avec les versions précédentes

  • Le paramètre schema_inference_make_columns_nullable est désormais activé par défaut de manière à respecter les informations de type Nullable des colonnes issues des métadonnées Parquet/ORC/Arrow, au lieu de tout rendre Nullable. Aucun changement pour les formats texte. #71499 (Michael Kolupaev).
  • Le cache des résultats de requête ignorera le paramètre log_comment, de sorte qu’une modification de log_comment seule dans une requête ne provoquera plus de défaut de cache. Il existe une faible probabilité que certains utilisateurs aient intentionnellement segmenté leur cache en faisant varier log_comment. Ce changement modifie ce comportement et n’est donc pas rétrocompatible. Veuillez utiliser le paramètre query_cache_tag à cette fin. #79878 (filimonov).
  • Dans les versions précédentes, les requêtes avec des fonctions de table portant le même nom que les fonctions d’implémentation des opérateurs étaient formatées de manière incohérente. Clôt #81601. Clôt #81977. Clôt #82834. Clôt #82835. Les requêtes EXPLAIN SYNTAX ne formateront pas toujours les opérateurs : ce nouveau comportement reflète mieux l’objectif de l’explication de la syntaxe. clickhouse-format, formatQuery et autres outils similaires ne formateront pas les fonctions comme des opérateurs si la requête les contenait sous une forme fonctionnelle. #82825 (Alexey Milovidov).
  • Interdire l’utilisation du type Dynamic dans les clés de JOIN. Cela pouvait conduire à des résultats inattendus lorsqu’une valeur de type Dynamic est comparée à un type non-Dynamic. Il est préférable de convertir la colonne Dynamic vers le type requis. #86358 (Pavel Kruglov).
  • L’option du serveur storage_metadata_write_full_object_key est désormais activée par défaut et ne peut plus être désactivée. Il s’agit d’un changement rétrocompatible. Cette information est simplement portée à votre attention. Ce changement n’est compatible en amont qu’avec les versions 25.x. Cela signifie que vous ne pourrez rétrograder que vers une version 25.x si vous devez effectuer un rollback de la nouvelle version. #87335 (Sema Checherinda).
  • Réduction de replicated_deduplication_window_seconds d’une semaine à une heure afin de stocker moins de znodes dans ZooKeeper lorsque le taux d’insertion est faible. #87414 (Sema Checherinda).
  • Renomme le paramètre query_plan_use_new_logical_join_step en query_plan_use_logical_join_step. #87679 (Vladimir Cherkasov).
  • La nouvelle syntaxe permet de rendre plus expressif le paramètre de tokenizer pour l’index de texte. #87997 (Elmi Ahmadov).
  • Les fonctions searchAny et searchAll ont été renommées en hasAnyTokens et hasAllTokens pour une meilleure cohérence avec la fonction existante hasToken. #88109 (Robert Schulze).
  • Supprime cache_hits_threshold du cache du système de fichiers. Cette fonctionnalité a été ajoutée par un contributeur externe avant l’introduction de la cache policy SLRU, et maintenant que nous en disposons, il n’est plus pertinent de prendre en charge les deux. #88344 (Kseniia Sumarokova).
  • Deux légères modifications du fonctionnement des paramètres min_free_disk_ratio_to_perform_insert et min_free_disk_bytes_to_perform_insert : - utiliser les octets non réservés plutôt que les octets disponibles pour déterminer si une insertion doit être rejetée. Ce n’est probablement pas crucial si les réservations pour les fusions et mutations en arrière-plan sont faibles par rapport aux seuils configurés, mais cela semble plus correct. - Ne pas appliquer ces paramètres aux tables système. L’idée est que nous voulons tout de même que des tables comme query_log continuent d’être mises à jour. Cela aide beaucoup pour le débogage. Les données écrites dans les tables système sont généralement faibles par rapport aux données réelles ; elles devraient donc pouvoir continuer bien plus longtemps avec un seuil min_free_disk_ratio_to_perform_insert raisonnable. #88468 (c-end).
  • Activer le mode asynchrone pour la réplication interne de Keeper. Keeper conservera le même comportement qu’auparavant, avec d’éventuelles améliorations des performances. Si vous effectuez une mise à niveau depuis une version antérieure à 23.9, vous devez soit d’abord passer à la version 23.9+, puis à la version 25.10+. Vous pouvez également définir keeper_server.coordination_settings.async_replication sur 0 avant la mise à niveau, puis l’activer une fois celle-ci terminée. #88515 (Antonio Andelic).

Nouvelle fonctionnalité

  • Ajout de la prise en charge de LIMIT négatif et de OFFSET négatif. Clôt #28913. #88411 (Nihal Z. Miaji).
  • Le moteur Alias crée un proxy vers une autre table. Toutes les opérations de lecture et d’écriture sont transmises à la table cible, tandis que l’alias lui-même ne stocke aucune donnée et conserve uniquement une référence à cette table. #87965 (Kai Zhu).
  • Prise en charge complète de l’opérateur IS NOT DISTINCT FROM (<=>). #88155 (simonmichal).
  • Ajout de la possibilité de créer automatiquement des statistiques sur toutes les colonnes appropriées des tables MergeTree. Ajout du paramètre de table auto_statistics_types, qui stocke les types de statistiques à créer, séparés par des virgules (par ex. auto_statistics_types = 'minmax, uniq, countmin'). #87241 (Anton Popov).
  • Un nouvel index de bloom filter pour le texte, sparse_gram. #79985 (scanhex12).
  • Nouvelle fonction conv pour convertir des nombres entre différentes bases, avec prise en charge actuelle des bases de 2-36. #83058 (hp).
  • Ajout de la prise en charge de la syntaxe LIMIT BY ALL. Comme GROUP BY ALL et ORDER BY ALL, LIMIT BY ALL s’étend automatiquement à toutes les expressions non agrégées de la clause SELECT en tant que clés LIMIT BY. Par exemple, SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALL est équivalent à SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name. Cette fonctionnalité simplifie les requêtes lorsque vous souhaitez limiter sur toutes les colonnes non agrégées sélectionnées sans les énumérer explicitement. Clôt #59152. #84079 (Surya Kant Ranjan).
  • Ajout de la prise en charge des requêtes sur Apache Paimon dans ClickHouse. Cette intégration permettra aux utilisateurs de ClickHouse d’interagir directement avec le stockage data lake de Paimon. #84423 (JIaQi).
  • Ajout de la fonction d’agrégation studentTTestOneSample. #85436 (Dylan).
  • Fonction d’agrégation quantilePrometheusHistogram, qui accepte comme arguments les bornes supérieures et les valeurs cumulées des buckets d’histogramme, et effectue une interpolation linéaire entre les bornes supérieure et inférieure du bucket dans lequel se trouve la position du quantile. Son comportement est similaire à celui de la fonction PromQL histogram_quantile sur les histogrammes classiques. #86294 (Stephen Chi).
  • Nouvelle system table pour les fichiers de métadonnées delta lake. #87263 (scanhex12).
  • Ajout de ALTER TABLE REWRITE PARTS — réécrit les table parts depuis zéro en utilisant tous les nouveaux paramètres (car certains, comme use_const_adaptive_granularity, ne s’appliquent qu’aux nouvelles parts). #87774 (Azat Khuzhin).
  • Ajout de la commande SYSTEM RECONNECT ZOOKEEPER pour forcer la déconnexion puis la reconnexion à ZooKeeper (https://github.com/ClickHouse/ClickHouse/issues/87317). #87318 (Pradeep Chhetri).
  • Limite le nombre de collections nommées via les paramètres max_named_collection_num_to_warn et max_named_collection_num_to_throw. Ajoute la nouvelle métrique NamedCollection et l’erreur TOO_MANY_NAMED_COLLECTIONS. #87343 (Pablo Marcos).
  • Ajoute des variantes optimisées insensibles à la casse des fonctions startsWith et endsWith : startsWithCaseInsensitive, endsWithCaseInsensitive, startsWithCaseInsensitiveUTF8 et endsWithCaseInsensitiveUTF8. #87374 (Guang Zhao).
  • Ajoute un moyen de définir WORKLOAD et RESOURCE en SQL à l’aide de la section de configuration du serveur “resources_and_workloads”. #87430 (Sergei Trifonov).
  • Ajoute un nouveau paramètre de table min_level_for_wide_part qui permet de spécifier le niveau minimal à partir duquel une part est créée comme wide part. #88179 (Christoph Wurm).
  • Ajoute des variantes récursives des commandes cp-cpr et mv-mvr dans le client Keeper. #88570 (Mikhail Artemenko).
  • Ajoute un paramètre de session pour exclure une liste de skip indexes de la matérialisation lors des inserts (exclude_materialize_skip_indexes_on_insert). Ajoute un paramètre de table MergeTree pour exclure une liste de skip indexes de la matérialisation lors du merge (exclude_materialize_skip_indexes_on_merge). #87252 (George Larionov).

Fonctionnalité expérimentale

  • Implémentation du type de données QBit, qui stocke les vecteurs au format bit-sliced, et de la fonction L2DistanceTransposed, qui permet la recherche vectorielle approximative avec un compromis entre précision et vitesse contrôlé par un paramètre. #87922 (Raufs Dunamalijevs).
  • Les fonctions searchAll et searchAny fonctionnent désormais sur des ensembles de colonnes ne comportant aucune colonne de texte. Dans ce cas, elles utilisent le tokenizer par défaut. #87722 (Jimmy Aguilar Mena).

Amélioration des performances

  • Implémente la réplication différée des colonnes dans JOIN et ARRAY JOIN. Évite de convertir certaines représentations spéciales de colonnes, comme Sparse et Replicated, en colonnes complètes dans certains formats de sortie. Cela évite des copies de données inutiles en mémoire. #88752 (Pavel Kruglov).
  • Ajoute une sérialisation optionnelle de la sous-colonne .size pour les colonnes String de premier niveau dans les tables MergeTree afin d’améliorer la compression et de permettre un accès efficace aux sous-colonnes. Introduit de nouveaux paramètres MergeTree pour contrôler la version de sérialisation et optimiser les expressions sur les chaînes vides. #82850 (Amos Bird).
  • Prise en charge de la lecture dans l’ordre pour Iceberg. #88454 (scanhex12).
  • Accélère certaines requêtes JOIN en construisant un bloom filter à partir du sous-arbre droit à l’exécution, puis en transmettant ce filtre au scan du sous-arbre gauche. Cela peut être bénéfique pour des requêtes comme SELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE'. #84772 (Alexander Gololobov).
  • Améliore les performances des requêtes en remaniant l’ordre et l’intégration du Query Condition Cache (QCC) avec l’analyse des index. Le filtrage du QCC est désormais appliqué avant l’analyse de la clé primaire et des skip indexes, ce qui réduit les calculs d’index inutiles. L’analyse des index a été étendue pour prendre en charge plusieurs filtres de plage, et ses résultats sont maintenant réinjectés dans le QCC. Cela accélère considérablement les requêtes où l’analyse des index domine le temps d’exécution, en particulier celles qui s’appuient sur des skip indexes (par ex. des index vectoriels ou inversés). #82380 (Amos Bird).
  • Une série de micro-optimisations pour accélérer les petites requêtes. #83096 (Raúl Marín).
  • Compresse les logs et les profile events dans le native protocol. Sur les clusters comptant plus de 100 répliques, les profile events non compressés représentent de 1 à 10 Mo/s, et la barre de progression devient peu réactive sur les connexions Internet lentes. Cela clôt #82533. #83586 (Alexey Milovidov).
  • Améliore les performances de la recherche de chaînes sensible à la casse (opérations telles que le filtrage, par ex. WHERE URL LIKE '%google%') en s’appuyant sur la bibliothèque StringZilla et sur les instructions SIMD du CPU lorsqu’elles sont disponibles. #84161 (Raúl Marín).
  • Réduit les allocations et les copies mémoire lors d’un select depuis une table MergeTree agrégée avec FINAL lorsque la table comporte des colonnes de type SimpleAggregateFunction(anyLast). #84428 (Duc Canh Le).
  • Ajoute une logique de pushdown pour les prédicats de disjonction dans JOIN. Exemple : dans TPC-H Q7, pour une condition sur 2 tables n1 et n2 comme (n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE'), nous extrayons des filtres partiels distincts pour chaque table : n1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY' pour n1, et n2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE' pour n2. #84735 (Yarik Briukhovetskyi).
  • Améliore les performances de LIKE avec un préfixe ou un suffixe en utilisant le nouveau paramètre activé par défaut optimize_rewrite_like_perfect_affix. #85920 (Guang Zhao).
  • Corrige la dégradation des performances causée par une clé sérialisée volumineuse lors d’un regroupement par plusieurs colonnes de type String/Number. Il s’agit du suivi de #83884. #85924 (李扬).
  • Ajoute le nouveau paramètre joined_block_split_single_row pour réduire l’utilisation de la mémoire dans les hash joins avec de nombreuses correspondances par clé. Cela permet de découper les résultats de hash join en blocs, même au sein des correspondances d’une seule ligne de la table de gauche, ce qui est particulièrement utile lorsqu’une ligne de la table de gauche correspond à des milliers, voire des millions, de lignes de la table de droite. Auparavant, toutes les correspondances devaient être matérialisées en mémoire en une seule fois. Cela réduit le pic d’utilisation mémoire, mais peut augmenter l’utilisation du CPU. #87913 (Vladimir Cherkasov).
  • Améliorations de SharedMutex (amélioration des performances avec un grand nombre de requêtes concurrentes). #87491 (Raúl Marín).
  • Améliore les performances de création de l’index de texte pour les documents contenant principalement des tokens peu fréquents. #87546 (Anton Popov).
  • Accélère le cas le plus courant du destructeur de Field (amélioration des performances avec un grand nombre de petites requêtes). #87631 (Raúl Marín).
  • Ignore le recalcul à l’exécution des statistiques de la hash table pendant l’optimisation des JOIN (améliore les performances de toutes les requêtes avec des JOIN). Ajoute les nouveaux événements de profilage JoinOptimizeMicroseconds et QueryPlanOptimizeMicroseconds. #87683 (Vladimir Cherkasov).
  • Active l’enregistrement des marks dans le cache et évite les IO directs pour le lecteur MergeTreeLazy. Cela améliore les performances des requêtes avec ORDER BY et un LIMIT faible. #87989 (Nikita Taranov).
  • Une requête SELECT avec la clause FINAL sur une table ReplacingMergeTree avec la colonne is_deleted s’exécute désormais plus rapidement grâce à une meilleure parallélisation issue de deux optimisations existantes : 1. l’optimisation do_not_merge_across_partitions_select_final pour les partitions de la table qui n’ont qu’un seul part ; 2. la division des autres plages sélectionnées de la table en intersecting / non-intersecting, seules les plages intersecting devant passer par la transformation de fusion FINAL. #88090 (Shankar Iyer).
  • Réduit l’impact de la non-utilisation des fail points (le chemin de code par défaut lorsque le débogage n’est pas actif). #88196 (Raúl Marín).
  • Évite un scan complet de system.tables avec un filtre sur uuid (cela peut être utile si vous ne disposez que de l’UUID provenant des logs ou du chemin ZooKeeper). #88379 (Azat Khuzhin).
  • Améliore les performances des fonctions tokens, hasAllTokens, hasAnyTokens. #88416 (Anton Popov).
  • Déclare AddedColumns::appendFromBlock en inline pour améliorer légèrement les performances des JOIN dans certains cas. #88455 (Nikita Taranov).
  • L’autocomplétion du client est plus rapide et plus cohérente grâce à l’utilisation de system.completions plutôt qu’à l’exécution de plusieurs requêtes sur les tables système. #84694 (|2ustam).
  • Ajoute le nouveau paramètre d’index de texte dictionary_block_frontcoding_compression pour contrôler la compression du dictionnaire. Par défaut, il est activé afin d’utiliser la compression front-coding. #87175 (Elmi Ahmadov).
  • Compacte les données de tous les threads avant de les insérer dans les vues matérialisées selon les paramètres min_insert_block_size_rows_for_materialized_views et min_insert_block_size_bytes_for_materialized_views. Auparavant, si parallel_view_processing était activé, chaque thread insérant dans une vue matérialisée spécifique compactait l’insertion indépendamment, ce qui pouvait entraîner un nombre plus élevé de parts générées. #87280 (Antonio Andelic).
  • Ajoute le paramètre temporary_files_buffer_size pour contrôler la taille du buffer des écrivains de fichiers temporaires. * Optimise la consommation mémoire de l’opération scatter (utilisée, par exemple, dans un grace hash join) pour les colonnes LowCardinality. #88237 (Vladimir Cherkasov).
  • Ajout de la prise en charge de la lecture directe à partir des index de texte avec des répliques parallèles. Amélioration des performances de lecture des index de texte depuis le stockage objet. #88262 (Anton Popov).
  • Les requêtes sur des tables issues de catalogs de Data Lakes utiliseront des répliques parallèles pour le traitement distribué. #88273 (scanhex12).
  • L’heuristique interne d’ajustement de l’algorithme des fusions en arrière-plan, nommée “to_remove_small_parts_at_right”, sera exécutée avant le calcul du score de la plage de fusion. Auparavant, le sélecteur de fusion choisissait la fusion wide, puis en filtrait le suffixe. Corrige : #85374. #88736 (Mikhail Artemenko).

Amélioration

  • Désormais, la fonction generateSerialID prend en charge un argument non constant pour le nom de la série. Clôt #83750. #88270 (Alexey Milovidov).
  • Ajout d’un paramètre optionnel start_value à la fonction generateSerialID pour définir des valeurs de départ personnalisées pour les nouvelles séries. #88085 (Manuel).
  • Ajout de l’option --semicolons_inline dans clickhouse-format pour formater les requêtes de sorte que les points-virgules soient placés sur la dernière ligne plutôt que sur une ligne distincte. #88018 (Jan Rada).
  • Permet de configurer le throttling au niveau du serveur lorsque la configuration est surchargée dans Keeper. Clôt #73964. #74066 (JIaQi).
  • mannWhitneyUTest ne lève plus d’exception lorsque les deux échantillons ne contiennent que des valeurs identiques. Renvoie désormais un résultat valide, conforme à SciPy. Clôt #79814. #80009 (DeanNeaht).
  • La réécriture de la transaction de stockage objet sur disque supprime les blobs distants précédents si la transaction de métadonnées est validée. #81787 (Sema Checherinda).
  • Correction du passage d’optimisation pour une expression d’égalité redondante lorsque la LowCardinality du type résultant diffère avant et après l’optimisation. #82651 (Yakov Olkhovskiy).
  • Lorsque des clients HTTP définissent l’en-tête X-ClickHouse-100-Continue: defer en plus de Expect: 100-continue, ClickHouse n’envoie pas de réponse 100 Continue au client tant que la validation du quota n’a pas abouti, ce qui évite de gaspiller de la bande passante réseau en transmettant des corps de requête qui seront de toute façon rejetés. Cela concerne les requêtes INSERT dans lesquelles la requête peut être envoyée dans la query string de l’URL et les données dans le request body. L’abandon d’une requête sans envoyer le body complet empêche la réutilisation de la connexion avec HTTP/1.1, mais la latence supplémentaire induite par l’ouverture de nouvelles connexions est généralement négligeable par rapport à la durée totale d’un INSERT sur de grands volumes de données. #84304 (c-end).
  • Masque les credentials S3 dans les logs lors de l’utilisation de DATABASE ENGINE = Backup avec un stockage S3. #85336 (Kenny Sun).
  • Rend les optimisations du query plan visibles pour le sous-plan d’entrée de la sous-requête corrélée en retardant sa materialization. Fait partie de #79890. #85455 (Dmitry Novik).
  • Changement pour SYSTEM DROP DATABASE REPLICA : - Lors de la suppression avec une database ou de la suppression de la replica complète : la replica est également supprimée pour chaque table de la database - Si ‘WITH TABLES’ est fourni, la replica est supprimée pour chaque storage - Sinon, la logique reste inchangée et seule la replica des databases est supprimée - Lors de la suppression d’une replica de database avec le Keeper path : - Si ‘WITH TABLES’ est fourni : - Restaurer la database en Atomic - Restaurer les tables RMT à partir du statement dans Keeper - Supprimer la database (les tables restaurées sont également supprimées) - Sinon, seule la replica du Keeper path fourni est supprimée. #85637 (Tuan Pham Anh).
  • Correction du formatage incohérent de TTL lorsqu’il contient une fonction materialize. Clôt #82828. #85749 (Alexey Milovidov).
  • L’état de la table Iceberg n’est plus stocké dans un objet de stockage. Cela devrait permettre d’utiliser Iceberg dans ClickHouse avec des requêtes concurrentes. #86062 (Daniil Ivanik).
  • Rend persistant le verrou de bucket en mode ordered de S3Queue, de manière similaire aux processing nodes lorsque use_persistent_processing_nodes = 1. Ajoute une injection de fautes Keeper dans les tests. #86628 (Kseniia Sumarokova).
  • Fournit des indications lorsqu’un utilisateur fait une faute de frappe dans le nom du format. Clôt #86761. #87092 (flynn).
  • Les répliques distantes ignoreront l’analyse des index lorsqu’il n’y a pas de projections. #87096 (zoomxi).
  • Permet de désactiver l’encodage UTF8 pour la table ytsaurus. #87150 (MikhailBurdukov).
  • Désactive s3_slow_all_threads_after_retryable_error par défaut. #87198 (Nikita Mikhaylov).
  • Renomme la fonction de table arrowflight en arrowFlight. #87249 (Vitaly Baranov).
  • Mise à jour de clickhouse-benchmark pour accepter - à la place de _ dans ses flags CLI. #87251 (Ahmed Gouda).
  • Rend synchrone l’écriture vers system.crash_log lors de la gestion des signaux. #87253 (Miсhael Stetsyuk).
  • Ajoute un paramètre inject_random_order_for_select_without_order_by qui injecte ORDER BY rand() dans les requêtes SELECT de premier niveau sans clause ORDER BY. #87261 (Rui Zhang).
  • Améliore le message d’erreur de joinGet afin d’indiquer correctement que le nombre de join_keys n’est pas le même que celui de right_table_keys. #87279 (Isak Ellmer).
  • Ajoute la possibilité de vérifier les statistiques d’un nœud Keeper arbitraire pendant la transaction d’écriture. Cela peut aider à détecter les problèmes d’ABA. #87282 (Mikhail Artemenko).
  • Redirige les requêtes ytsaurus lourdes vers des proxys lourds. #87342 (MikhailBurdukov).
  • Corrige les rollbacks des opérations unlink/rename/removeRecursive/removeDirectory/etc., ainsi que le comptage des hardlinks dans toutes les workloads possibles pour les métadonnées des transactions sur disque, et simplifie les interfaces pour les rendre plus génériques afin de pouvoir les réutiliser dans d’autres magasins de métadonnées. #87358 (Mikhail Artemenko).
  • Ajoute le paramètre de configuration keeper_server.tcp_nodelay, qui permet de désactiver TCP_NODELAY pour Keeper. #87363 (Copilot).
  • Prise en charge de --connection dans clickhouse-benchmarks. Elle fonctionne comme dans clickhouse-client : vous pouvez spécifier des connexions prédéfinies dans le config.xml/config.yaml du client, sous le chemin connections_credentials, afin d’éviter d’avoir à indiquer explicitement l’utilisateur et le mot de passe dans les arguments de ligne de commande. Prise en charge également de --accept-invalid-certificate dans clickhouse-benchmark. #87370 (Azat Khuzhin).
  • Désormais, le paramètre max_insert_threads s’applique aux tables Iceberg. #87407 (alesapin).
  • Ajout d’histogrammes et de métriques dimensionnelles à PrometheusMetricsWriter. Ainsi, le handler PrometheusRequestHandler disposera de toutes les métriques essentielles et pourra être utilisé pour une collecte de métriques fiable et à faible surcharge dans le cloud. #87521 (Miсhael Stetsyuk).
  • La fonction hasToken renvoie désormais zéro correspondance pour un token vide (alors qu’auparavant, cela déclenchait une exception). #87564 (Jimmy Aguilar Mena).
  • Ajout de la prise en charge des index de texte pour les valeurs Array et Map (mapKeys et mapValues). Les fonctions prises en charge sont mapContainsKey et has. #87602 (Elmi Ahmadov).
  • Ajout d’une nouvelle métrique ZooKeeperSessionExpired qui indique le nombre de sessions ZooKeeper globales expirées. #87613 (Miсhael Stetsyuk).
  • Utilisation du client de stockage S3 avec des paramètres spécifiques aux sauvegardes (par exemple, backup_slow_all_threads_after_retryable_s3_error) pour la copie server-side (native) vers une destination de sauvegarde. Rend s3_slow_all_threads_after_retryable_error obsolète. #87660 (Julia Kartseva).
  • Correction de la gestion incorrecte des paramètres max_joined_block_size_rows et max_joined_block_size_bytes lors de la sérialisation du plan de requête avec make_distributed_plan, encore expérimental. #87675 (Vladimir Cherkasov).
  • Le paramètre enable_http_compression est désormais activé par défaut. Cela signifie que si un client accepte la compression HTTP, le serveur l’utilisera. Cependant, ce changement présente certains inconvénients. Le client peut demander une méthode de compression coûteuse, comme bzip2, ce qui est déraisonnable, et cela augmentera la consommation de ressources du serveur (mais cela ne sera visible que lors du transfert de résultats volumineux). Le client peut aussi demander gzip, ce qui n’est pas si mauvais, mais reste sous-optimal par rapport à zstd. Closes #71591. #87703 (Alexey Milovidov).
  • Ajout d’une nouvelle entrée dans system.server_settings, keeper_hosts, qui expose la liste des hôtes [Zoo]Keeper auxquels ClickHouse peut se connecter. #87718 (Nikita Mikhaylov).
  • Ajout des valeurs from et to aux dashboards système pour faciliter les investigations historiques. #87823 (Mikhail f. Shiryaev).
  • Ajout de davantage d’informations pour le suivi des performances dans les SELECT sur Iceberg. #87903 (Daniil Ivanik).
  • Amélioration du cache du système de fichiers : réutilisation de l’itérateur de priorité du cache entre les threads qui réservent simultanément de l’espace dans le cache. #87914 (Kseniia Sumarokova).
  • Ajout de la possibilité de limiter les requêtes pour Keeper (paramètre max_request_size, identique à jute.maxbuffer pour ZooKeeper, désactivé par défaut pour la rétrocompatibilité, sera activé dans les prochaines versions). #87952 (Azat Khuzhin).
  • clickhouse-benchmark n’inclut plus les traces de pile dans les messages d’erreur par défaut. #87954 (Ahmed Gouda).
  • Éviter d’utiliser le chargement asynchrone des marks via le pool de threads (load_marks_asynchronously=1) lorsque les marks sont dans le cache (car le pool peut être saturé et les requêtes subiront une pénalité même si les marks sont déjà dans le cache). #87967 (Azat Khuzhin).
  • Ytsaurus : permettre de créer des tables/fonctions de table/dictionnaires avec un sous-ensemble de colonnes. #87982 (MikhailBurdukov).
  • Désormais, system.zookeeper_connection_log est activé par défaut et peut être utilisé pour obtenir des informations sur les sessions de Keeper. #88011 (János Benjamin Antal).
  • Uniformisation du comportement de TCP et HTTP lorsque des tables externes dupliquées sont transmises. HTTP permet de transmettre une table temporaire plusieurs fois. #88032 (Sema Checherinda).
  • Suppression des MemoryPools personnalisés pour la lecture d’Arrow/ORC/Parquet. Ce composant semble inutile après #84082, car toutes les allocations sont désormais suivies dans tous les cas. #88035 (Nikita Mikhaylov).
  • Possibilité de créer une base de données Replicated sans arguments. #88044 (Pervakov Grigorii).
  • clickhouse-keeper-client : ajout de la prise en charge de la connexion au port TLS de clickhouse-keeper, en conservant les mêmes noms d’options que dans clickhouse-client. #88065 (Pradeep Chhetri).
  • Ajout d’un nouvel événement de profil pour suivre le nombre de fois où une fusion en arrière-plan a été rejetée en raison d’un dépassement de la limite mémoire. #88084 (Grant Holly).
  • Activation de l’analyseur pour la validation des expressions par défaut des colonnes dans CREATE/ALTER TABLE. #88087 (Max Justus Spransy).
  • Amélioration de la planification interne des requêtes : utilisation de JoinStepLogical pour CROSS JOIN. #88151 (Vladimir Cherkasov).
  • Ajout des alias de fonctions hasAnyTokens (hasAnyToken) et hasAllTokens (hasAllToken). #88162 (George Larionov).
  • Activation par défaut du profiler global d’échantillonnage (y compris pour les threads du serveur non liés aux requêtes) : collecte des traces de pile de tous les threads toutes les 10 secondes de temps CPU et de temps réel. #88209 (Alexander Tokmakov).
  • Mise à jour de l’Azure SDK pour inclure le correctif de Content-Length observé dans les fonctionnalités de copie et de création de conteneur. #88278 (Smita Kulkarni).
  • Rend la fonction lag insensible à la casse pour assurer la compatibilité avec MySQL. #88322 (Lonny Kapelushnik).
  • Permet à clickhouse-local de démarrer depuis le répertoire clickhouse-server. Dans les versions précédentes, cela produisait l’erreur Cannot parse UUID: . Vous pouvez désormais démarrer clickhouse-local et manipuler les bases de données du serveur sans démarrer celui-ci. #88383 (Alexey Milovidov).
  • Ajoute la config keeper_server.coordination_settings.check_node_acl_on_remove. Si elle est activée, avant chaque suppression d’un nœud, les ACL du nœud lui-même et du nœud parent sont vérifiées. Sinon, seule l’ACL du nœud parent est vérifiée. #88513 (Antonio Andelic).
  • Les colonnes JSON sont désormais affichées avec une mise en forme Pretty lors de l’utilisation du format Vertical. Ferme #81794. #88524 (Frank Rosner).
  • Stocke les fichiers de clickhouse-client (par ex. l’historique des requêtes) dans les emplacements décrits par la spécification XDG Base Directories, au lieu de la racine du répertoire personnel. ~/.clickhouse-client-history restera utilisé s’il existe déjà. #88538 (Konstantin Bogdanov).
  • Corrige une fuite de mémoire due à GLOBAL IN (https://github.com/ClickHouse/ClickHouse/issues/88615). #88617 (pranavmehta94).
  • Ajoute une surcharge à hasAny/hasAllTokens pour accepter une entrée de type chaîne. #88679 (George Larionov).
  • Ajoute une étape au script de post-installation de clickhouse-keeper pour activer le démarrage au boot. #88746 (YenchangChan).
  • Vérifie les informations d’authentification dans l’interface Web uniquement au collage, plutôt qu’à chaque frappe. Cela évite un problème avec des serveurs LDAP mal configurés. Ferme #85777. #88769 (Alexey Milovidov).
  • Limite la longueur du message d’exception lorsqu’une contrainte est violée. Dans les versions précédentes, il était possible d’obtenir un message d’exception très long lorsqu’une très longue chaîne était insérée, et celui-ci finissait par être écrit dans le query_log. Ferme #87032. #88801 (Alexey Milovidov).
  • Corrige la récupération de la structure d’un jeu de données depuis le serveur ArrowFlight lors de la création d’une table. #87542 (Vitaly Baranov).

Correction de bogue

  • Correction d’un problème dans GeoParquet provoquant des erreurs de protocole côté client. #84020 (Michael Kolupaev).
  • Correction de la résolution des fonctions dépendantes de l’hôte, comme shardNum(), dans les sous-requêtes sur le nœud initiateur. #84409 (Eduard Karacharov).
  • Correction de la gestion incorrecte des dates antérieures à l’epoch avec des secondes fractionnaires dans diverses fonctions liées aux dates et heures, comme parseDateTime64BestEffort, change{Year,Month,Day} et makeDateTime64. Auparavant, la partie sous-seconde était soustraite aux secondes au lieu d’y être ajoutée. Par exemple, parseDateTime64BestEffort('1969-01-01 00:00:00.468') renvoyait 1968-12-31 23:59:59.532 au lieu de 1969-01-01 00:00:00.468. #85396 (xiaohuanlin).
  • Correction de l’échec des commandes ALTER COLUMN IF EXISTS lorsque l’état d’une colonne change au sein de la même instruction ALTER. Les commandes telles que DROP COLUMN IF EXISTS, MODIFY COLUMN IF EXISTS, COMMENT COLUMN IF EXISTS et RENAME COLUMN IF EXISTS gèrent désormais correctement les cas où une colonne est supprimée par une commande précédente dans la même instruction. #86046 (xiaohuanlin).
  • Correction de l’inférence de Date/DateTime/DateTime64 pour des dates en dehors de la plage prise en charge. #86184 (Pavel Kruglov).
  • Correction d’un crash où certaines données valides soumises par l’utilisateur dans une colonne AggregateFunction(quantileDD) pouvaient entraîner une récursion infinie des fusions. #86560 (Raphaël Thériault).
  • Prise en charge des types JSON/Dynamic dans les tables créées avec la fonction de table cluster. #86821 (Pavel Kruglov).
  • Correction d’un résultat non déterministe pour une fonction calculée dans une CTE au sein de la requête. #86967 (Yakov Olkhovskiy).
  • Correction de LOGICAL_ERROR dans EXPLAIN avec pointInPolygon sur les colonnes de clé primaire. #86971 (Michael Kolupaev).
  • Correction des tables de data lake dont le nom contient une séquence encodée en pourcentage. Ferme #86626. #87020 (Anton Ivashkin).
  • Correction du comportement incorrect de IS NULL sur les colonnes Nullable dans OUTER JOIN avec optimize_functions_to_subcolumns, ferme #78625. #87058 (Vladimir Cherkasov).
  • Correction de la comptabilisation incorrecte des désallocations de données temporaires dans le suivi de la limite max_temporary_data_on_disk_size, ferme #87118. #87140 (JIaQi).
  • La fonction checkHeaders valide désormais correctement les en-têtes fournis et rejette les en-têtes interdits. Auteur original : Michael Anastasakis (@michael-anastasakis). #87172 (Raúl Marín).
  • Uniformise le comportement de toDate et toDate32 pour tous les types numériques. Corrige la vérification du underflow de Date32 lors d’un CAST depuis int16. #87176 (Pervakov Grigorii).
  • Corrige une logical error avec les parallel replicas pour les queries comportant plusieurs JOIN, en particulier lorsqu’un RIGHT JOIN suit un LEFT/INNER JOIN. #87178 (Igor Nikonov).
  • Respecte le paramètre input_format_try_infer_variants dans le cache de schema inference. #87180 (Pavel Kruglov).
  • Fait en sorte que pathStartsWith ne corresponde qu’aux paths situés sous le préfixe. #87181 (Raúl Marín).
  • Corrige des logical errors dans la colonne virtuelle _row_number et dans les suppressions positionnées Iceberg. #87220 (Michael Kolupaev).
  • Corrige LOGICAL_ERROR “Too large size passed to allocator” dans JOIN, dû à un mélange de blocks constants et non constants. #87231 (Azat Khuzhin).
  • Corrige les lightweight updates avec des subqueries qui lisent depuis d’autres tables MergeTree. #87285 (Anton Popov).
  • Corrige l’optimisation move-to-prewhere, qui ne fonctionnait pas en présence d’une row policy. Suite de #85118. Ferme #69777. Ferme #83748. #87303 (Nikolai Kochetov).
  • Corrige l’application de Patches aux columns avec une expression par défaut absentes des data parts. #87347 (Anton Popov).
  • Corrige un défaut de segmentation lors de l’utilisation de noms de champs de partition dupliqués dans des tables MergeTree. #87365 (xiaohuanlin).
  • Corrige la mise à niveau d’EmbeddedRocksDB. #87392 (Raúl Marín).
  • Corrige la lecture directe depuis le text index sur object storage. #87399 (Anton Popov).
  • Empêche la création d’un privilege avec un engine inexistant. #87419 (Jitendra).
  • Ignore uniquement les erreurs « not found » pour s3_plain_rewritable (ce qui peut sinon entraîner toutes sortes de problèmes). #87426 (Azat Khuzhin).
  • Corrige les Dictionaries avec une source YTSaurus et des layouts *range_hashed. #87490 (MikhailBurdukov).
  • Corrige la création d’un Array de Tuples vides. #87520 (Pavel Kruglov).
  • Vérifie la présence de columns non valides lors de la création d’une temporary table. #87524 (Pavel Kruglov).
  • Ne mettez jamais les colonnes de partition Hive dans l’en-tête du format. Corrige #87515. #87528 (Arthur Passos).
  • Corrige la préparation de la lecture depuis un format dans DeltaLake lorsqu’un format texte est utilisé. #87529 (Pavel Kruglov).
  • Corrige la validation des accès pour select et insert sur les tables Buffer. #87545 (pufit).
  • Interdit la création d’un index de saut de données sur une table S3. #87554 (Bharat Nallan).
  • Évite les fuites de mémoire comptabilisée pour la journalisation asynchrone (la dérive peut être importante, ~100GiB sur 10 heures) et text_log (une dérive quasiment identique est possible). #87584 (Azat Khuzhin).
  • Corrige un bug qui pouvait entraîner l’écrasement des paramètres serveur globaux par les paramètres SELECT d’une View ou d’une vue matérialisée, si cette vue était supprimée de manière asynchrone et que le serveur redémarrait avant la fin du nettoyage en arrière-plan. #87603 (Alexander Tokmakov).
  • Exclut les octets du cache de pages en espace utilisateur (si possible) lors du calcul de l’avertissement de surcharge mémoire. #87610 (Bharat Nallan).
  • Corrige un bug où un ordre de types incorrect lors de la désérialisation CSV entraînait LOGICAL_ERROR. #87622 (Yarik Briukhovetskyi).
  • Corrige la gestion incorrecte de command_read_timeout pour les dictionnaires exécutables. #87627 (Azat Khuzhin).
  • Corrige le comportement incorrect de SELECT * REPLACE dans la clause WHERE avec le nouvel analyseur lors du filtrage sur des colonnes remplacées. #87630 (xiaohuanlin).
  • Corrige l’agrégation à deux niveaux lors de l’utilisation de Merge sur Distributed. #87687 (c-end).
  • Corrige la génération du block de sortie dans l’algorithme HashJoin lorsque la liste de lignes de droite n’est pas utilisée. Corrige #87401. #87699 (Dmitry Novik).
  • Le mode de lecture des répliques parallèles pouvait être choisi de manière incorrecte s’il n’y avait aucune donnée à lire après application de l’analyse d’index. Ferme #87653. #87700 (zoomxi).
  • Corrige la gestion des colonnes timestamp / timestamptz dans Glue. #87733 (Andrey Zvonov).
  • Ceci ferme #86587. #87761 (scanhex12).
  • Corrige l’écriture des valeurs booléennes dans l’interface PostgreSQL. #87762 (Artem Yurov).
  • Corrige une erreur de table inconnue dans une requête insert select avec CTE. #85368. #87789 (Guang Zhao).
  • Correction de la lecture d’une sous-colonne de map NULL à partir de Variants qui ne peuvent pas se trouver à l’intérieur de Nullable. #87798 (Pavel Kruglov).
  • Correction de la gestion de l’erreur en cas d’échec de la suppression complète de la base de données sur le cluster, sur le nœud secondaire. #87802 (Tuan Pham Anh).
  • Correction de plusieurs bogues liés aux index de saut. #87817 (Raúl Marín).
  • Dans AzureBlobStorage, mise à jour pour tenter d’abord la copie native, puis basculer en lecture/écriture en cas d’erreur ‘Unauthroized’ (dans AzureBlobStorage, si les comptes de stockage diffèrent entre la source et la destination, nous obtenons l’erreur ‘Unauthorized’). Correction également de l’application de “use_native_copy” lorsqu’un endpoint est défini dans la configuration. #87826 (Smita Kulkarni).
  • ClickHouse plante si le fichier ArrowStream contient un dictionnaire non unique. #87863 (Ilya Golshtein).
  • Correction d’une erreur fatale lors de l’utilisation de approx_top_k et finalizeAggregation. #87892 (Jitendra).
  • Correction de la fusion avec des projections lorsque le dernier bloc est vide. #87928 (Raúl Marín).
  • Ne supprime pas les fonctions injectives de GROUP BY si les types des arguments ne sont pas autorisés dans GROUP BY. #87958 (Pavel Kruglov).
  • Correction de l’élimination incorrecte des granules/partitions pour les clés basées sur DateTime lors de l’utilisation du paramètre session_timezone dans les requêtes. #87987 (Eduard Karacharov).
  • Renvoie le nombre de lignes affectées après la requête dans l’interface PostgreSQL. #87990 (Artem Yurov).
  • Restreint l’utilisation du filter pushdown pour PASTE JOIN, car cela peut produire des résultats incorrects. #88078 (Yarik Briukhovetskyi).
  • Applique la normalisation d’URI avant l’évaluation pour la vérification des droits introduite par https://github.com/ClickHouse/ClickHouse/pull/84503. #88089 (pufit).
  • Correction d’une erreur logique lorsque ARRAY JOIN COLUMNS() ne correspond à aucune colonne dans le nouvel analyseur. #88091 (xiaohuanlin).
  • Correction de l’avertissement “Utilisation mémoire élevée de ClickHouse” (hors page cache). #88092 (Azat Khuzhin).
  • Correction d’une possible corruption de données dans les tables MergeTree avec TTL défini sur une colonne de type Set. #88095 (Anton Popov).
  • Correction d’une exception potentiellement non interceptée lors de la lecture de system.tables avec des tables invalides attachées dans des bases de données externes (PostgreSQL/SQLite/…). #88105 (Azat Khuzhin).
  • Correction d’un crash dans les fonctions mortonEncode et hilbertEncode lorsqu’elles sont appelées avec un argument Tuple vide. #88110 (xiaohuanlin).
  • Désormais, les requêtes ON CLUSTER prendront moins de temps lorsqu’il y a des répliques inactives dans le cluster. #88153 (alesapin).
  • Désormais, le worker DDL nettoie les hôtes obsolètes de l’ensemble des répliques. Cela réduira la quantité de métadonnées stockées dans ZooKeeper. #88154 (alesapin).
  • Correction de l’exécution de ClickHouse sans cgroups (les cgroups étaient accidentellement devenus obligatoires pour les métriques asynchrones). #88164 (Azat Khuzhin).
  • Annule correctement l’opération de déplacement de répertoire en cas d’erreur. Il faut réécrire tous les objets prefix.path modifiés pendant l’exécution, et pas seulement l’objet racine. #88198 (Mikhail Artemenko).
  • Correction de la propagation de l’indicateur is_shared dans ColumnLowCardinality. Cela pouvait entraîner un résultat de group-by incorrect si une nouvelle valeur était insérée dans une colonne après le précalcul et la mise en cache des valeurs de hachage dans ReverseIndex. #88213 (Nikita Taranov).
  • Corrige le workload setting max_cpu_share. Il peut désormais être utilisé sans définir le workload setting max_cpus. #88217 (Neerav).
  • Corrige un bug où des mutations très lourdes avec des sous-requêtes pouvaient rester bloquées à l’étape de préparation. Il est désormais possible d’arrêter ces mutations avec SYSTEM STOP MERGES. #88241 (alesapin).
  • Désormais, les sous-requêtes corrélées fonctionneront avec le stockage objet. #88290 (alesapin).
  • Évite de tenter d’initialiser des bases de données DataLake lors de l’accès à system.projections et system.data_skipping_indices. #88330 (Azat Khuzhin).
  • Désormais, les catalogues des data lakes ne seront affichés dans les tables système d’introspection que si show_data_lake_catalogs_in_system_tables est explicitement activé. #88341 (alesapin).
  • Correction de DatabaseReplicated pour respecter la configuration interserver_http_host. #88378 (xiaohuanlin).
  • Les arguments positionnels sont désormais explicitement désactivés lors de la définition des Projections, car ils n’ont pas de sens à cette étape interne de la requête. Cela corrige #48604. #88380 (Amos Bird).
  • Corrige une complexité quadratique dans la fonction countMatches. Clôture #88400. #88401 (Alexey Milovidov).
  • Rend les commandes ALTER COLUMN ... COMMENT des tables KeeperMap répliquées, afin qu’elles soient enregistrées dans les métadonnées de la base de données Replicated et propagées à toutes les répliques. Clôture #88077. #88408 (Eduard Karacharov).
  • Corrige un cas de fausse dépendance cyclique avec les vues matérialisées dans Database Replicated, qui empêchait l’ajout de nouvelles répliques à la base de données. #88423 (Nikolay Degterinsky).
  • Corrige l’agrégation des colonnes creuses lorsque group_by_overflow_mode est défini sur any. #88440 (Eduard Karacharov).
  • Corrige l’erreur “column not found” lors de l’utilisation de query_plan_use_logical_join_step=0 avec plusieurs clauses FULL JOIN USING. Clôt #88103. #88473 (Vladimir Cherkasov).
  • Les clusters de grande taille avec un nombre de nœuds > 10 ont une forte probabilité d’échouer lors de la restauration avec l’erreur [941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again. Le nœud num_hosts est réécrit par de nombreux hôtes en même temps. Le correctif rend dynamique le paramètre qui contrôle le nombre de tentatives. Clôt #87721. #88484 (Mikhail f. Shiryaev).
  • Cette PR vise uniquement à assurer la compatibilité avec la version 23.8 et les versions antérieures. Le problème de compatibilité a été introduit par cette PR : https://github.com/ClickHouse/ClickHouse/pull/54240. Cette requête SQL échoue avec enable_analyzer=0 (avant 23.8, c’était acceptable). #88491 (JIaQi).
  • Corrige un dépassement d’entier détecté par UBSAN dans le message d’erreur accurateCast lors de la conversion de grandes valeurs en DateTime. #88520 (xiaohuanlin).
  • Corrige coalescing merge tree pour les types Tuple. Cela clôt #88469. #88526 (scanhex12).
  • Interdit les suppressions pour iceberg_format_version=1. Cela clôt #88444. #88532 (scanhex12).
  • Ce correctif corrige l’opération de déplacement des disques plain-rewritable pour des dossiers d’une profondeur arbitraire. #88586 (Mikhail Artemenko).
  • Corrige SQL SECURITY DEFINER avec les fonctions *cluster. #88588 (Julian Maicher).
  • Corrige un crash potentiel causé par une mutation concurrente des colonnes const PREWHERE sous-jacentes. #88605 (Azat Khuzhin).
  • Corrige la lecture depuis l’index de texte ainsi que depuis le cache des conditions de requête lorsqu’il est activé (avec les paramètres use_skip_indexes_on_data_read et use_query_condition_cache activés). #88660 (Anton Popov).
  • Une exception Poco::TimeoutException levée par Poco::Net::HTTPChunkedStreamBuf::readFromDevice provoque un crash avec SIGABRT. #88668 (Miсhael Stetsyuk).
  • Rétroporté dans #88910 : après reprise, un replica d’une base de données Replicated pouvait rester bloqué longtemps en affichant des messages comme Failed to marked query-0004647339 as finished (finished=No node, synced=No node) ; le problème est corrigé. #88671 (Alexander Tokmakov).
  • Corrige l’ajout à system.zookeeper_connection_log lorsque ClickHouse se connecte pour la première fois après le rechargement de la configuration. #88728 (Antonio Andelic).
  • Corrige un bug où la conversion de DateTime64 en Date avec date_time_overflow_behavior = 'saturate' pouvait produire des résultats incorrects pour des valeurs hors plage lors de l’utilisation de fuseaux horaires. #88737 (Manuel).
  • Nouvelle tentative de correction de l’« erreur de zéro octet » avec le moteur de table S3 lorsque le cache est activé. #88740 (Kseniia Sumarokova).
  • Corrige la validation des accès sur SELECT pour la fonction de table loop. #88802 (pufit).
  • Intercepte les exceptions lorsque la journalisation asynchrone échoue afin d’éviter l’arrêt du programme. #88814 (Raúl Marín).
  • Rétroporté dans #89060 : corrige top_k pour qu’il respecte le paramètre de seuil lorsqu’il est appelé avec un seul argument. Ferme #88757. #88867 (Manuel).
  • Rétroporté dans #88944 : corrige un bug dans la fonction reverseUTF8. Dans les versions précédentes, elle inversait par erreur les octets des points de code UTF-8 de longueur 4. Cela ferme #88913. #88914 (Alexey Milovidov).
  • Rétroporté dans #88980 : ne vérifie pas le droit d’accès SET DEFINER <current_user>:definer lors de la création d’une vue avec SQL SECURITY DEFINER. #88968 (pufit).
  • Rétroporté dans #89058 : corrige une LOGICAL_ERROR dans L2DistanceTransposed(vec1, vec2, p), où l’optimisation de lecture partielle de QBit supprimait incorrectement Nullable du type de retour lorsque p était Nullable. #88974 (Raufs Dunamalijevs).
  • Rétroporté dans #89167 : corrige un crash en cas de type de catalogue inconnu. Résout #88819. #88987 (scanhex12).
  • Rétroporté dans #89028 : corrige une dégradation des performances lors de l’analyse des index d’évitement. #89004 (Anton Popov).

Amélioration de la compilation/des tests/du packaging

  • Utilise la version 18.0 de la bibliothèque postgres. #87647 (Konstantin Bogdanov).
  • Active ICU pour FreeBSD. #87891 (Raúl Marín).
  • Utilise SSE 4.2 lorsque le dispatch dynamique se fait vers SSE 4.2, et non vers SSE 4. #88029 (Raúl Marín).
  • N’exige pas le flag NO_ARMV81_OR_HIGHER si Speculative Store Bypass Safe n’est pas disponible. #88051 (Konstantin Bogdanov).
  • Lorsque ClickHouse est compilé avec ENABLE_LIBFIU=OFF, les fonctions liées aux failpoints deviennent des no-op et ne peuvent plus affecter les performances. Les requêtes SYSTEM ENABLE/DISABLE FAILPOINT renvoient alors une erreur SUPPORT_IS_DISABLED. #88184 (c-end).

Version 25.9 de ClickHouse, 2025-09-25

Changement incompatible avec les versions précédentes

  • Désactivation des opérations binaires dénuées de sens avec IPv4/IPv6 : l’addition / la soustraction d’une IPv4/IPv6 avec un type non entier est désactivée. Auparavant, cela autorisait les opérations avec des types à virgule flottante et levait des erreurs logiques avec certains autres types (tels que DateTime). #86336 (Raúl Marín).
  • Le paramètre allow_dynamic_metadata_for_data_lakes est déprécié. Désormais, toutes les tables Iceberg tentent de récupérer depuis le stockage le schéma de table le plus à jour avant l’exécution de chaque requête. #86366 (Daniil Ivanik).
  • La résolution de la colonne coalescée de la clause OUTER JOIN ... USING a été modifiée pour être plus cohérente : auparavant, lors de la sélection à la fois de la colonne USING et de colonnes qualifiées (a, t1.a, t2.a) dans un OUTER JOIN, la colonne USING était incorrectement résolue en t1.a, affichant 0/NULL pour les lignes de la table de droite sans correspondance à gauche. Désormais, les identifiants de la clause USING sont toujours résolus vers la colonne coalescée, tandis que les identifiants qualifiés sont résolus vers les colonnes non coalescées, quels que soient les autres identifiants présents dans la requête. Par exemple : ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) — Avant : a=0, t1.a=0, t2.a=2 (incorrect - ‘a’ résolu en t1.a) — Après : a=2, t1.a=0, t2.a=2 (correct - ‘a’ est coalescée). #80848 (Vladimir Cherkasov).
  • Augmentation de la fenêtre de déduplication répliquée jusqu’à 10000. Cela est entièrement compatible, mais on peut imaginer des scénarios où ce changement pourrait entraîner une consommation élevée de ressources en présence d’un grand nombre de tables. #86820 (Sema Checherinda).

Nouvelle fonctionnalité

  • Vous pouvez désormais utiliser NATS JetStream pour consommer des messages en spécifiant les nouveaux réglages nats_stream et nats_consumer pour le moteur NATS. #84799 (Dmitry Novikov).
  • Prise en charge de l’authentification et de SSL ajoutée dans la fonction de table arrowFlight. #87120 (Vitaly Baranov).
  • Ajout d’un nouveau paramètre au moteur de table S3 et à la fonction de table s3, nommé storage_class_name, qui permet de spécifier le tiering intelligent pris en charge par AWS. Pris en charge à la fois au format clé-valeur et au format positionnel (déconseillé). #87122 (alesapin).
  • ALTER UPDATE pour le moteur de table Iceberg. #86059 (scanhex12).
  • Ajout de la table système iceberg_metadata_log pour récupérer les fichiers de métadonnées Iceberg lors des instructions SELECT. #86152 (scanhex12).
  • Les tables Iceberg et DeltaLake prennent en charge une configuration de disque personnalisée via le réglage de niveau de stockage disk. #86778 (scanhex12).
  • Prise en charge d’Azure pour les disques de data lake. #87173 (scanhex12).
  • Prise en charge du catalogue Unity sur Azure blob storage. #80013 (Smita Kulkarni).
  • Prise en charge de formats supplémentaires (ORC, Avro) pour les écritures Iceberg. Cela clôt #86179. #87277 (scanhex12).
  • Ajout d’une nouvelle table système database_replicas contenant des informations sur les répliques de base de données. #83408 (Konstantin Morozov).
  • Ajout de la fonction arrayExcept, qui soustrait un tableau d’un autre en l’interprétant comme un ensemble. #82368 (Joanna Hulboj).
  • Ajout d’une nouvelle table system.aggregated_zookeeper_log. Cette table contient des statistiques (par exemple le nombre d’opérations, la latence moyenne et les erreurs) sur les opérations ZooKeeper, regroupées par identifiant de session, chemin parent et type d’opération, et périodiquement écrites sur disque. #85102 #87208 (Miсhael Stetsyuk).
  • Nouvelle fonction isValidASCII. Renvoie 1 si la chaîne d’entrée ou FixedString contient uniquement des octets ASCII (0x00–0x7F), sinon 0. Clôt #85377. … #85786 (rajat mohan).
  • Les réglages booléens peuvent être spécifiés sans argument, par exemple SET use_query_cache;, ce qui équivaut à les définir sur true. #85800 (thraeka).
  • Nouvelles options de configuration : logger.startupLevel & logger.shutdownLevel permettent de remplacer respectivement le niveau de log pendant le démarrage et l’arrêt de ClickHouse. #85967 (Lennard Eijsackers).
  • Fonctions d’agrégation timeSeriesChangesToGrid et timeSeriesResetsToGrid. Leur comportement est similaire à celui de timeSeriesRateToGrid : elles acceptent des paramètres pour l’horodatage de début, l’horodatage de fin, le pas et la fenêtre de rétrospection, ainsi que deux arguments pour les horodatages et les valeurs, mais exigent au moins 1 échantillon par fenêtre au lieu de 2. Elles calculent un changes/resets PromQL en comptant, pour chaque horodatage de la grille temporelle définie par les paramètres, le nombre de fois où la valeur de l’échantillon change ou diminue dans la fenêtre spécifiée. Le type de retour est Array(Nullable(Float64)). #86010 (Stephen Chi).
  • Permet aux utilisateurs de créer des vues temporaires avec une syntaxe similaire à celle des tables temporaires (CREATE TEMPORARY VIEW). #86432 (Aly Kafoury).
  • Ajoute des avertissements sur l’utilisation du CPU et de la mémoire dans la table system.warnings. #86838 (Bharat Nallan).
  • Prend en charge l’indicateur oneof dans les entrées Protobuf. Une colonne spéciale peut être utilisée pour indiquer la présence d’une partie d’un oneof. Si un message contient oneof et que input_format_protobuf_oneof_presence est défini, ClickHouse renseigne la colonne indiquant quel champ du oneof a été trouvé. #82885 (Ilya Golshtein).
  • Améliore le profilage des allocations à partir des outils internes de jemalloc. Le profileur global de jemalloc peut désormais être activé avec la config jemalloc_enable_global_profiler. Les allocations et désallocations globales échantillonnées peuvent être stockées dans system.trace_log sous le type JemallocSample en activant la config jemalloc_collect_global_profile_samples_in_trace_log. Le profilage jemalloc peut désormais être activé indépendamment pour chaque query à l’aide du paramètre jemalloc_enable_profiler. Le stockage des échantillons dans system.trace_log peut être contrôlé pour chaque query à l’aide du paramètre jemalloc_collect_profile_samples_in_trace_log. Met à jour jemalloc vers une version plus récente. #85438 (Antonio Andelic).
  • Nouveau paramètre permettant de supprimer les fichiers lors de la suppression de tables Iceberg. Cela clôt #86211. #86501 (scanhex12).

Fonctionnalité expérimentale

  • L’index textuel inversé a été entièrement repensé pour être évolutif sur des jeux de données qui ne tiennent pas en RAM. #86485 (Anton Popov).
  • La réorganisation des jointures s’appuie désormais sur des statistiques. Cette fonctionnalité peut être activée en définissant allow_statistics_optimize = 1 et query_plan_optimize_join_order_limit = 10. #86822 (Han Fei).
  • La commande alter table ... materialize statistics all permet désormais de matérialiser toutes les statistiques d’une table. #87197 (Han Fei).

Amélioration des performances

  • Prise en charge du filtrage des data parts à l’aide de skip indexes lors de la lecture afin de réduire les lectures d’index inutiles. Contrôlé par le nouveau paramètre use_skip_indexes_on_data_read (désactivé par défaut). Cela corrige #75774. Cela inclut également certains travaux préparatoires communs avec #81021. #81526 (Amos Bird).
  • Ajout d’une optimisation de l’ordre des JOIN, capable de réordonner automatiquement les JOIN pour améliorer les performances (contrôlée par le paramètre query_plan_optimize_join_order_limit). Notez que cette optimisation ne prend actuellement en charge les statistiques que de manière limitée et s’appuie principalement sur des estimations du nombre de lignes fournies par les engines de stockage — une collecte de statistiques plus avancée et une meilleure estimation de la cardinalité seront ajoutées dans de futures releases. Si vous rencontrez des problèmes avec des requêtes JOIN après une mise à niveau, vous pouvez temporairement désactiver la nouvelle implémentation en définissant SET query_plan_use_new_logical_join_step = 0 et signaler le problème pour investigation. Remarque sur la résolution des identifiants depuis la clause USING : la résolution de la colonne coalescée issue de la clause OUTER JOIN ... USING a été modifiée pour gagner en cohérence : auparavant, lors de la sélection simultanée de la colonne USING et de colonnes qualifiées (a, t1.a, t2.a) dans un OUTER JOIN, la colonne USING était incorrectement résolue en t1.a, ce qui affichait 0/NULL pour les lignes de la right table sans correspondance à gauche. Désormais, les identifiants de la clause USING sont toujours résolus vers la colonne coalescée, tandis que les identifiants qualifiés sont résolus vers les colonnes non coalescées, quels que soient les autres identifiants présents dans la requête. Par exemple : ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) — Before: a=0, t1.a=0, t2.a=2 (incorrect - ‘a’ resolved to t1.a) — After: a=2, t1.a=0, t2.a=2 (correct - ‘a’ is coalesced). #80848 (Vladimir Cherkasov).
  • INSERT SELECT Distributed pour les data lakes. #86783 (scanhex12).
  • Améliore l’optimisation PREWHERE pour des conditions telles que func(primary_column) = 'xx' et column in (xxx). #85529 (李扬).
  • Réécriture de JOIN implémentée : 1. Conversion de LEFT ANY JOIN et RIGHT ANY JOIN en JOIN SEMI/ANTI si la filter condition est toujours fausse pour les lignes correspondantes ou non correspondantes. Cette optimisation est contrôlée par un nouveau paramètre query_plan_convert_any_join_to_semi_or_anti_join. 2. Conversion de FULL ALL JOIN en JOIN LEFT ALL ou RIGHT ALL si la filter condition est toujours fausse pour les lignes non correspondantes d’un côté. #86028 (Dmitry Novik).
  • Performances des vertical merges améliorées après l’exécution d’un lightweight delete. #86169 (Anton Popov).
  • Performances de HashJoin légèrement optimisées dans le cas d’un join LEFT/RIGHT comportant de nombreuses lignes sans correspondance. #86312 (Nikita Taranov).
  • Tri radix : aide le compilateur à utiliser SIMD et à mieux effectuer le prefetching. Utilise un dispatch dynamique pour n’utiliser le software prefetching qu’avec les CPU Intel. Poursuit le travail de @taiyang-li dans https://github.com/ClickHouse/ClickHouse/pull/77029. #86378 (Raúl Marín).
  • Améliore les performances des requêtes courtes sur des tables comportant beaucoup de parts (en optimisant MarkRanges grâce à l’utilisation de devector au lieu de deque). #86933 (Azat Khuzhin).
  • Amélioration des performances de l’application des patch parts en mode de jointure. #87094 (Anton Popov).
  • Ajout du paramètre query_condition_cache_selectivity_threshold (valeur par défaut : 1.0), qui exclut de l’insertion dans le cache des conditions de requête les résultats de scan de prédicats à faible sélectivité. Cela permet de réduire la consommation de mémoire du cache des conditions de requête, au prix d’un taux de succès du cache plus faible. #86076 (zhongyuankai).
  • Réduction de l’utilisation de la mémoire lors des écritures dans Iceberg. #86544 (scanhex12).

Amélioration

  • Prise en charge de l’écriture de plusieurs fichiers de données dans Iceberg en une seule insertion. Ajout de nouveaux paramètres, iceberg_insert_max_rows_in_data_file et iceberg_insert_max_bytes_in_data_file, pour en contrôler les limites. #86275 (scanhex12).
  • Ajout d’une limite de lignes/octets pour les fichiers de données insérés dans Delta Lake. Contrôlé par les paramètres delta_lake_insert_max_rows_in_data_file et delta_lake_insert_max_bytes_in_data_file. #86357 (Kseniia Sumarokova).
  • Prise en charge d’un plus grand nombre de types de partitions pour les écritures Iceberg. Cela clôt #86206. #86298 (scanhex12).
  • La stratégie de retry de S3 est désormais configurable, et les paramètres du disque S3 peuvent être rechargés à chaud en cas de modification du fichier XML de config. #82642 (RinChanNOW).
  • Amélioration du moteur de table S3(Azure)Queue pour lui permettre de survivre à une perte de connexion à ZooKeeper sans risque de doublons. Nécessite d’activer le paramètre S3Queue use_persistent_processing_nodes (modifiable avec ALTER TABLE MODIFY SETTING). #85995 (Kseniia Sumarokova).
  • Vous pouvez utiliser des paramètres de requête après TO lors de la création d’une vue matérialisée, par exemple : CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_table. #84899 (Diskein).
  • Instructions plus claires pour les utilisateurs lorsque des paramètres incorrects sont spécifiés pour le moteur de table Kafka2. #83701 (János Benjamin Antal).
  • Il n’est plus possible de spécifier de fuseaux horaires pour le type Time (cela n’avait pas de sens). #84689 (Yarik Briukhovetskyi).
  • Simplification (et correction de certains bugs) de la logique liée à l’analyse de Time/Time64 en mode best_effort. #84730 (Yarik Briukhovetskyi).
  • Ajout de la fonction deltaLakeAzureCluster (similaire à deltaLakeAzure pour le mode cluster) et de la fonction deltaLakeS3Cluster (alias de deltaLakeCluster). Résout #85358. #85547 (Smita Kulkarni).
  • Applique le paramètre azure_max_single_part_copy_size aux opérations de copie normales, de la même manière que pour les backups. #85767 (Ilya Golshtein).
  • Ralentit les threads du client S3 en cas d’erreurs réessayables dans le stockage d’objets S3. Cela étend le paramètre précédent backup_slow_all_threads_after_retryable_s3_error aux disques S3 et le renomme en s3_slow_all_threads_after_retryable_error, plus générique. #85918 (Julia Kartseva).
  • Marque les paramètres allow_experimental_variant/dynamic/json et enable_variant/dynamic/json comme obsolètes. Désormais, les trois types sont activés sans condition. #85934 (Pavel Kruglov).
  • Prise en charge du filtrage par chaîne d’URL complète (directive full_url) dans http_handlers (y compris le schéma et l’hôte:port). #86155 (Azat Khuzhin).
  • Ajout d’un nouveau paramètre, allow_experimental_delta_lake_writes. #86180 (Kseniia Sumarokova).
  • Correction de la détection de systemd dans le script init.d (corrige la vérification “Install packages”). #86187 (Azat Khuzhin).
  • Ajout d’une nouvelle métrique dimensionnelle startup_scripts_failure_reason. Cette métrique est nécessaire pour distinguer les différents types d’erreurs à l’origine de l’échec des scripts de démarrage. En particulier, à des fins d’alerte, il faut distinguer les erreurs transitoires (par ex. MEMORY_LIMIT_EXCEEDED ou KEEPER_EXCEPTION) des erreurs non transitoires. #86202 (Miсhael Stetsyuk).
  • Possibilité d’omettre la fonction identity pour la partition d’une table Iceberg. #86314 (scanhex12).
  • Ajout de la possibilité d’activer la journalisation JSON uniquement pour un canal spécifique ; pour cela, définissez logger.formatting.channel sur l’une des valeurs syslog/console/errorlog/log. #86331 (Azat Khuzhin).
  • Possibilité d’utiliser des nombres natifs dans WHERE. Ils sont déjà autorisés comme arguments de fonctions logiques. Cela simplifie les optimisations de filter pushdown et de move to prewhere. #86390 (Nikolai Kochetov).
  • Correction d’une erreur lors de l’exécution de SYSTEM DROP REPLICA sur un catalog avec des métadonnées corrompues. #86391 (Nikita Mikhaylov).
  • Ajout de tentatives supplémentaires pour la vérification de l’accès au disque (skip_access_check = 0) dans Azure, car l’approvisionnement de l’accès peut prendre beaucoup de temps. #86419 (Alexander Tokmakov).
  • La fenêtre de staleness dans les fonctions timeSeries*() est désormais ouverte à gauche et fermée à droite. #86588 (Vitaly Baranov).
  • Ajout des profile events FailedInternal*Query. #86627 (Shane Andrade).
  • Correction de la gestion des utilisateurs dont le nom contient un point lorsqu’ils sont ajoutés via un fichier de configuration. #86633 (Mikhail Koviazin).
  • Ajout de métriques asynchrones d’utilisation de la mémoire pour les requêtes (QueriesMemoryUsage et QueriesPeakMemoryUsage). #86669 (Azat Khuzhin).
  • Vous pouvez utiliser l’option clickhouse-benchmark --precise pour obtenir un rapport plus précis du QPS et des autres métriques par intervalle. Cela permet d’obtenir un QPS cohérent lorsque la durée des requêtes est comparable à l’intervalle de rapport --delay D. #86684 (Sergei Trifonov).
  • Les valeurs nice des threads Linux sont maintenant configurables afin d’attribuer à certains threads (merge/mutate, query, materialized view, zookeeper client) des priorités plus élevées ou plus faibles. #86703 (Miсhael Stetsyuk).
  • Correction de l’erreur trompeuse « specified upload does not exist », qui se produit lorsque l’exception d’origine est perdue lors d’un multipart upload à cause d’une condition de concurrence. #86725 (Julia Kartseva).
  • Limitation de la description du query plan dans la requête EXPLAIN. Ne calculez pas la description pour les requêtes autres que EXPLAIN. Ajout du paramètre query_plan_max_step_description_length. #86741 (Nikolai Kochetov).
  • Ajout de la possibilité d’ajuster les signaux en attente pour tenter de contourner CANNOT&#95;CREATE&#95;TIMER (pour les query profilers, query_profiler_real_time_period_ns/query_profiler_cpu_time_period_ns). Collecte également de SigQ depuis /proc/self/status à des fins d’introspection (si ProcessSignalQueueSize est proche de ProcessSignalQueueLimit, vous obtiendrez probablement des erreurs CANNOT_CREATE_TIMER). #86760 (Azat Khuzhin).
  • Amélioration des performances de la requête RemoveRecursive dans Keeper. #86789 (Antonio Andelic).
  • Suppression des espaces superflus dans PrettyJSONEachRow lors de la sortie du type JSON. #86819 (Pavel Kruglov).
  • Désormais, nous écrivons les tailles des blobs pour prefix.path lorsqu’un répertoire est supprimé sur un disque réinscriptible simple. #86908 (alesapin).
  • Prise en charge des tests de performance sur des instances ClickHouse distantes, y compris ClickHouse Cloud. Exemple d’utilisation : tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user <username> --password <password> --host <hostname> --port <port> --secure. #86995 (Raufs Dunamalijevs).
  • Prise en compte des limites mémoire à certains endroits connus pour allouer une quantité importante de mémoire (>16MiB) (tri, async inserts, file log). #87035 (Azat Khuzhin).
  • Lever une exception si le paramètre network_compression_method n’est pas un codec générique pris en charge. #87097 (Robert Schulze).
  • La system table system.query_cache renvoie désormais toutes les entrées du query result cache, alors qu’auparavant elle ne renvoyait que les entrées partagées ou les entrées non partagées du même utilisateur et du même rôle. Cela est acceptable, car les entrées non partagées sont censées ne pas révéler les résultats de requête, tandis que system.query_cache renvoie des query strings. Le comportement de la system table est ainsi plus proche de celui de system.query_log. #87104 (Robert Schulze).
  • Activation de l’évaluation en court-circuit pour la fonction parseDateTime. #87184 (Pavel Kruglov).
  • Ajout d’une nouvelle colonne statistics dans system.parts_columns. #87259 (Han Fei).

Correction de bogue

  • Les résultats des requêtes ALTER ne sont validés que sur le nœud initiateur pour les bases de données Replicated et les tables répliquées en interne. Cela corrige les cas où une requête ALTER déjà validée pouvait rester bloquée sur d’autres nœuds. #83849 (János Benjamin Antal).
  • Limite le nombre de tâches de chaque type dans BackgroundSchedulePool. Évite les situations où tous les slots sont occupés par des tâches d’un seul type, tandis que les autres restent en attente. Évite également les interblocages lorsque des tâches s’attendent mutuellement. Cela est contrôlé par le paramètre serveur background_schedule_pool_max_parallel_tasks_per_type_ratio. #84008 (Alexander Tokmakov).
  • Arrête correctement les tables lors de la récupération d’une réplique de base de données. Un arrêt incorrect pouvait entraîner LOGICAL&#95;ERROR pour certains moteurs de table pendant la récupération d’une réplique de base de données. #84744 (Antonio Andelic).
  • Vérifie les droits d’accès lors de la génération de suggestions de correction de fautes de frappe pour le nom de la base de données. #85371 (Dmitry Novik).
    1. LowCardinality pour les colonnes hive 2. Renseigner les colonnes hive avant les colonnes virtuelles (requis pour https://github.com/ClickHouse/ClickHouse/pull/81040) 3. LOGICAL_ERROR sur un format vide pour hive #85528 4. Corriger la vérification lorsque les colonnes de partition hive sont les seules colonnes 5. Vérifier que toutes les colonnes hive sont spécifiées dans le schéma 6. Correction partielle pour parallel_replicas_cluster avec hive 7. Utiliser un conteneur ordonné dans extractkeyValuePairs pour les utilitaires hive (requis pour https://github.com/ClickHouse/ClickHouse/pull/81040). #85538 (Arthur Passos).
  • Empêche l’optimisation inutile du premier argument des fonctions IN, qui entraînait parfois une erreur lors de l’utilisation d’un mappage de tableaux. #85546 (Yakov Olkhovskiy).
  • Le Mapping entre les identifiants des sources Iceberg et les noms Parquet n’était pas ajusté au schéma lors de l’écriture du fichier Parquet. Cette PR traite le schéma pertinent pour chaque fichier de données Iceberg, et non le schéma actuel. #85829 (Daniil Ivanik).
  • Corrige la lecture de la taille d’un fichier séparément de son ouverture. Lié à https://github.com/ClickHouse/ClickHouse/pull/33372, introduit en réponse à un bug dans les noyaux Linux antérieurs à la version 5.10. #85837 (Konstantin Bogdanov).
  • ClickHouse Keeper ne échoue plus au démarrage sur les systèmes où IPv6 est désactivé au niveau du noyau (par ex., RHEL avec ipv6.disable=1). Il tente désormais de se rabattre sur un écouteur IPv4 si l’écouteur IPv6 initial échoue. #85901 (jskong1124).
  • Cette PR clôt #77990. Ajoute la prise en charge de TableFunctionRemote pour les parallel replicas dans globalJoin. #85929 (zoomxi).
  • Corrige un pointeur nul dans orcschemareader::initializeifneeded(). Cette PR corrige le problème suivant : #85292 ### entrée de documentation pour les changements visibles par l’utilisateur. #85951 (yanglongwei).
  • Ajoute une vérification pour n’autoriser les sous-requêtes corrélées dans la clause FROM que si elles utilisent des colonnes de la requête externe. Corrige #85469. Corrige #85402. #85966 (Dmitry Novik).
  • Corrige ALTER UPDATE d’une colonne avec une sous-colonne utilisée dans l’expression matérialisée d’une autre colonne. Auparavant, une colonne matérialisée avec une sous-colonne dans son expression n’était pas correctement mise à jour. #85985 (Pavel Kruglov).
  • Interdit de modifier des colonnes dont les sous-colonnes sont utilisées dans la PK ou dans l’expression de partition. #86005 (Pavel Kruglov).
  • Corrige la lecture des sous-colonnes avec un mode de mappage de colonnes non par défaut dans le moteur de stockage DeltaLake. #86064 (Kseniia Sumarokova).
  • Corrige l’utilisation de mauvaises valeurs par défaut pour un path avec un hint Enum dans JSON. #86065 (Pavel Kruglov).
  • Corrige l’analyse de l’URL du catalog Hive de DataLake avec assainissement des entrées. Clôt #86018. #86092 (rajat mohan).
  • Corrige une logical error lors du redimensionnement dynamique du filesystem cache. Clôt #86122. Clôt https://github.com/ClickHouse/clickhouse-core-incidents/issues/473. #86130 (Kseniia Sumarokova).
  • Utilise NonZeroUInt64 pour logs_to_keep dans DatabaseReplicatedSettings. #86142 (Tuan Pham Anh).
  • Une exception était levée par une requête FINAL avec un skip index si la table (par ex. ReplacingMergeTree) était créée avec le paramètre index_granularity_bytes = 0. Cette exception est désormais corrigée. #86147 (Shankar Iyer).
  • Supprime des comportements indéfinis et corrige des problèmes d’analyse de l’expression de partition Iceberg. #86166 (Daniil Ivanik).
  • Corrige un crash en cas de blocks const et non const dans un même INSERT. #86230 (Azat Khuzhin).
  • Traite par défaut les inclusions de /etc/metrika.xml lors de la création de disques depuis SQL. #86232 (alekar).
  • Corrige accurateCastOrNull/accurateCastOrDefault de String vers JSON. #86240 (Pavel Kruglov).
  • Prend en charge les répertoires sans ’/’ dans le moteur Iceberg. #86249 (scanhex12).
  • Corrige un crash avec replaceRegex, un haystack FixedString et un needle vide. #86270 (Raúl Marín).
  • Corrige un crash lors d’un ALTER UPDATE Nullable(JSON). #86281 (Pavel Kruglov).
  • Corrige l’absence du definer de colonne dans system.tables. #86295 (Raúl Marín).
  • Corrige le cast de LowCardinality(Nullable(T)) vers Dynamic. #86365 (Pavel Kruglov).
  • Corrige une erreur logique lors des écritures vers DeltaLake. Ferme #86175. #86367 (Kseniia Sumarokova).
  • Corrige 416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resource lors de la lecture de blobs vides depuis Azure blob storage pour le disque plain_rewritable. #86400 (Julia Kartseva).
  • Corrige GROUP BY Nullable(JSON). #86410 (Pavel Kruglov).
  • Corrige un bug dans les vues matérialisées : une MV pouvait ne pas fonctionner si elle avait été créée, supprimée, puis recréée avec le même nom. #86413 (Alexander Tokmakov).
  • Échoue si toutes les répliques sont indisponibles lors de la lecture depuis les fonctions *cluster. #86414 (Julian Maicher).
  • Corrige la fuite de MergesMutationsMemoryTracking due aux tables Buffer et corrige query_views_log pour le streaming depuis Kafka (et autres). #86422 (Azat Khuzhin).
  • Corrige SHOW TABLES après la suppression de la table de référence du stockage alias. #86433 (RinChanNOW).
  • Corrige l’absence d’en-tête de fragment lorsque send_chunk_header est activé et qu’une UDF est invoquée via le protocole HTTP. #86469 (Vladimir Cherkasov).
  • Corrige un interblocage possible lorsque les vidages du profil jemalloc sont activés. #86473 (Azat Khuzhin).
  • Corrige la lecture des sous-colonnes dans le moteur de table DeltaLake. Ferme #86204. #86477 (Kseniia Sumarokova).
  • Gère correctement l’ID d’hôte loopback afin d’éviter les collisions lors du traitement des tâches DDL:. #86479 (Tuan Pham Anh).
  • Corrige detach/attach pour les tables du moteur de base de données Postgres avec des colonnes numériques/décimales. #86480 (Julian Maicher).
  • Corrige l’utilisation de mémoire non initialisée dans getSubcolumnType. #86498 (Raúl Marín).
  • Les fonctions searchAny et searchAll, lorsqu’elles sont appelées avec des needles vides, renvoient désormais true (c.-à-d. « correspond à tout »). Auparavant, elles renvoyaient false. (issue #86300). #86500 (Elmi Ahmadov).
  • Corrige la fonction timeSeriesResampleToGridWithStaleness() lorsque le premier bucket n’a pas de valeur. #86507 (Vitaly Baranov).
  • Corrige un crash provoqué par merge_tree_min_read_task_size défini à 0. #86527 (yanglongwei).
  • Lors de la lecture, récupère le format de chaque fichier de données à partir des métadonnées Iceberg (auparavant, il était récupéré à partir des arguments de table). #86529 (Daniil Ivanik).
  • Ignore les exceptions lors du vidage du journal à l’arrêt et rend l’arrêt plus sûr (pour éviter un SIGSEGV). #86546 (Azat Khuzhin).
  • Corrige le moteur de base de données Backup qui levait une exception sur une requête avec des fichiers de part de taille nulle. #86563 (Max Justus Spransy).
  • Corrige l’absence d’en-tête de fragment lorsque send_chunk_header est activé et qu’une UDF est invoquée via le protocole HTTP. #86606 (Vladimir Cherkasov).
  • Correction de l’erreur logique S3Queue “Expected current processor to be equal to ”, due à l’expiration de la session Keeper. #86615 (Kseniia Sumarokova).
  • Correction de bugs de nullabilité dans insert et le pruning. Cela clôt #86407. #86630 (scanhex12).
  • Ne pas désactiver le cache du système de fichiers si le metadata cache d’Iceberg est désactivé. #86635 (Daniil Ivanik).
  • Correction de l’erreur ‘Deadlock in Parquet::ReadManager (single-threaded)’ dans le lecteur Parquet v3. #86644 (Michael Kolupaev).
  • Correction de la prise en charge d’IPv6 dans listen_host pour ArrowFlight. #86664 (Vitaly Baranov).
  • Correction de l’arrêt du handler ArrowFlight. Cette PR corrige #86596. #86665 (Vitaly Baranov).
  • Correction des distributed queries avec describe_compact_output=1. #86676 (Azat Khuzhin).
  • Correction de l’analyse des définitions de window et de l’application des query parameters. #86720 (Azat Khuzhin).
  • Correction de l’exception Partition strategy wildcard can not be used without a '_partition_id' wildcard. lors de la création d’une table avec PARTITION BY, mais sans caractère générique de partition, ce qui fonctionnait dans les versions antérieures à 25.8. Clôt https://github.com/ClickHouse/clickhouse-private/issues/37567. #86748 (Kseniia Sumarokova).
  • Correction d’un LogicalError lorsque des queries parallèles tentaient d’acquérir un verrou unique. #86751 (Pervakov Grigorii).
  • Correction de l’écriture de NULL dans les shared data JSON au format d’entrée RowBinary, et ajout de validations supplémentaires dans ColumnObject. #86812 (Pavel Kruglov).
  • Correction d’une permutation Tuple vide avec limite. #86828 (Pavel Kruglov).
  • Ne pas utiliser de nœud Keeper distinct pour les processing nodes persistants. Correctif pour https://github.com/ClickHouse/ClickHouse/pull/85995. Clôt #86406. #86841 (Kseniia Sumarokova).
  • Correction d’un problème où une table du moteur TimeSeries empêchait la création d’un nouveau replica dans une Replicated Database. #86845 (Nikolay Degterinsky).
  • Correction de la query sur system.distributed_ddl_queue dans les cas où certaines tasks n’ont pas certains nœuds Keeper. #86848 (Antonio Andelic).
  • Correction du seek à la fin du block décompressé. #86906 (Pavel Kruglov).
  • Traitement de l’exception levée pendant l’exécution asynchrone de l’itérateur Iceberg. #86932 (Daniil Ivanik).
  • Correction de l’enregistrement de grosses configs XML prétraitées. #86934 (c-end).
  • Correction du remplissage du champ date dans la table system.iceberg_metadata_log. #86961 (Daniil Ivanik).
  • Correction du recalcul infini de TTL avec WHERE. #86965 (Anton Popov).
  • Correction d’un résultat potentiellement incorrect de la fonction uniqExact avec les modificateurs ROLLUP et CUBE. #87014 (Nikita Taranov).
  • Correction de la résolution du schéma de la table avec la fonction de table url() lorsque le paramètre parallel_replicas_for_cluster_functions est défini sur 1. #87029 (Konstantin Bogdanov).
  • Conversion correcte de la sortie de PREWHERE après sa division en plusieurs étapes. #87040 (Antonio Andelic).
  • Correction des mises à jour légères avec la clause ON CLUSTER. #87043 (Anton Popov).
  • Correction de la compatibilité de certains états de fonctions d’agrégation avec un argument String. #87049 (Pavel Kruglov).
  • Correction d’un problème où le nom du modèle d’OpenAI n’était pas transmis. #87100 (Kaushik Iska).
  • EmbeddedRocksDB : le chemin doit se trouver dans user_files. #87109 (Raúl Marín).
  • Correction des tables KeeperMap créées avant la version 25.1, qui laissaient des données dans ZooKeeper après la requête DROP. #87112 (Nikolay Degterinsky).
  • Correction de la lecture des identifiants de champ des maps et des arrays dans Parquet. #87136 (scanhex12).
  • Correction de la lecture d’un array avec la sous-colonne des tailles d’array lors de la matérialisation paresseuse. #87139 (Pavel Kruglov).
  • Correction de la fonction CASE avec des arguments Dynamic. #87177 (Pavel Kruglov).
  • Correction de la lecture d’un array vide à partir d’une chaîne vide en CSV. #87182 (Pavel Kruglov).
  • Correction d’un résultat potentiellement erroné de EXISTS non corrélé. Le problème a été introduit avec execute_exists_as_scalar_subquery=1 dans https://github.com/ClickHouse/ClickHouse/pull/85481 et affecte 25.8. Corrige #86415. #87207 (Nikolai Kochetov).
  • Génère une erreur si iceberg_metadata_log n’est pas configuré alors que l’utilisateur tente d’obtenir des informations de débogage sur les métadonnées Iceberg. Corrige un accès à nullptr. #87250 (Daniil Ivanik).

Amélioration de la compilation/des tests/du packaging

Version de ClickHouse 25.8 LTS, 2025-08-28

Changement incompatible avec les versions précédentes

  • Inférer Array(Dynamic) au lieu d’un Tuple non nommé pour les tableaux de valeurs de types différents en JSON. Pour utiliser le comportement précédent, désactivez le paramètre input_format_json_infer_array_of_dynamic_from_array_of_different_types. #80859 (Pavel Kruglov).
  • Utiliser des histogrammes pour les métriques de latence S3, pour plus d’homogénéité et de simplicité. #82305 (Miсhael Stetsyuk).
  • Exiger des backticks autour des identifiants contenant des points dans les expressions par défaut afin d’éviter qu’ils soient analysés comme des identifiants composés. #83162 (Pervakov Grigorii).
  • La matérialisation paresseuse n’est activée qu’avec l’analyseur (par défaut), afin d’éviter de maintenir le fonctionnement sans analyseur, qui présente, d’après notre expérience, certains problèmes (par exemple lors de l’utilisation de indexHint() dans des conditions). #83791 (Igor Nikonov).
  • Écrire par défaut les valeurs de type Enum en BYTE_ARRAY avec le type logique ENUM dans le format de sortie Parquet. #84169 (Pavel Kruglov).
  • Activer par défaut le paramètre MergeTree write_marks_for_substreams_in_compact_parts. Cela améliore significativement les performances de lecture des subcolumns à partir des nouvelles parties Compact. Les serveurs dont la version est inférieure à 25.5 ne pourront pas lire les nouvelles parties Compact. #84171 (Pavel Kruglov).
  • La précédente valeur par défaut de concurrent_threads_scheduler était round_robin, ce qui s’est révélé inéquitable en présence d’un grand nombre de requêtes monothread (par ex. des INSERTs). Cette modification définit fair_round_robin, un ordonnanceur plus sûr, comme nouvelle valeur par défaut. #84747 (Sergei Trifonov).
  • ClickHouse prend en charge la syntaxe Heredoc de style PostgreSQL : $tag$ string contents... $tag$, également appelée littéraux de chaîne entre dollars. Dans les versions précédentes, les restrictions sur les tags étaient moins strictes : ils pouvaient contenir des caractères arbitraires, y compris de la ponctuation et des espaces. Cela introduit une ambiguïté d’analyse avec les identifiants qui peuvent eux aussi commencer par le caractère dollar. Or, PostgreSQL n’autorise que des caractères de mot dans les tags. Pour résoudre ce problème, nous limitons désormais les tags Heredoc aux seuls caractères de mot. Corrige #84731. #84846 (Alexey Milovidov).
  • Les fonctions azureBlobStorage, deltaLakeAzure et icebergAzure ont été mises à jour pour valider correctement les autorisations AZURE. Toutes les fonctions de variante cluster (fonctions -Cluster) vérifient désormais les autorisations par rapport à leurs équivalents hors cluster. De plus, les fonctions icebergLocal et deltaLakeLocal appliquent désormais des vérifications de l’autorisation FILE. #84938 (Nikita Mikhaylov).
  • Activer par défaut le paramètre allow_dynamic_metadata_for_data_lakes (paramètre au niveau du moteur de table). #85044 (Daniil Ivanik).
  • Désactiver par défaut la mise entre guillemets des entiers 64 bits dans les formats JSON. #74079 (Pavel Kruglov)

Nouvelle fonctionnalité

  • Une prise en charge basique du dialecte PromQL a été ajoutée. Pour l’utiliser, définissez dialect='promql' dans clickhouse-client, faites-le pointer vers la table TimeSeries à l’aide du paramètre promql_table_name='X' et exécutez des requêtes telles que rate(ClickHouseProfileEvents_ReadCompressedBytes[1m])[5m:1m]. Vous pouvez également encapsuler la requête PromQL dans du SQL : SELECT * FROM prometheusQuery('up', ...);. Pour l’instant, seules les fonctions rate, delta et increase sont prises en charge. Aucun opérateur unaire ou binaire. Pas d’API HTTP. #75036 (Vitaly Baranov).
  • La génération de SQL par IA peut désormais déduire les variables d’environnement ANTHROPIC_API_KEY et OPENAI_API_KEY si elles sont disponibles, afin de proposer une option sans configuration pour utiliser cette fonctionnalité. #83787 (Kaushik Iska).
  • Ajout de la prise en charge du protocole ArrowFlight RPC avec : - une nouvelle table function arrowflight. #74184 (zakr600).
  • Toutes les tables prennent désormais en charge la colonne virtuelle _table (et pas seulement les tables avec le moteur Merge), ce qui est particulièrement utile pour les requêtes avec UNION ALL. #63665 (Xiaozhe Yu).
  • Permet d’utiliser n’importe quelle storage policy (c.-à-d. un object storage tel que S3) pour l’aggregation/le tri externes. #84734 (Azat Khuzhin).
  • Implémentation de l’authentication AWS S3 avec un IAM role fourni explicitement. Implémentation d’OAuth pour GCS. Ces fonctionnalités n’étaient jusqu’à récemment disponibles que dans ClickHouse Cloud et sont désormais open-source. Synchronisation de certaines interfaces, comme la serialization des paramètres de connection pour les object storages. #84011 (Alexey Milovidov).
  • Prise en charge des position delete files pour le TableEngine Iceberg. #83094 (Daniil Ivanik).
  • Prise en charge des Equality Deletes pour Iceberg. #85843 (Han Fei).
  • Écriture Iceberg pour CREATE. Closes #83927. #83983 (Konstantin Vedernikov).
  • Prise en charge des Glue catalogs en écriture. #84136 (Konstantin Vedernikov).
  • Prise en charge des REST catalogs Iceberg en écriture. #84684 (Konstantin Vedernikov).
  • Fusion de tous les position delete files Iceberg dans les data files. Cela réduira le nombre et la taille des fichiers Parquet dans le stockage Iceberg. Syntaxe : OPTIMIZE TABLE table_name. #85250 (Konstantin Vedernikov).
  • Prise en charge de drop table pour Iceberg (suppression des REST/Glue catalogs et des métadonnées de la table). #85395 (Konstantin Vedernikov).
  • Prise en charge des delete mutations ALTER pour Iceberg au format merge-on-read. #85549 (Konstantin Vedernikov).
  • Prise en charge de l’écriture dans DeltaLake. Clôt #79603. #85564 (Kseniia Sumarokova).
  • Ajout du paramètre delta_lake_snapshot_version pour permettre la lecture d’une version de snapshot spécifique dans le table engine DeltaLake. #85295 (Kseniia Sumarokova).
  • Écriture de davantage de statistiques Iceberg (tailles des colonnes, bornes inférieures et supérieures) dans les métadonnées (entrées du manifest) afin d’améliorer le pruning min-max. #85746 (Konstantin Vedernikov).
  • Prise en charge de l’ajout, de la suppression et de la modification de colonnes dans Iceberg pour les types simples. #85769 (Konstantin Vedernikov).
  • Iceberg : prise en charge de l’écriture du fichier version-hint. Cela clôt #85097. #85130 (Konstantin Vedernikov).
  • Les vues créées par des utilisateurs éphémères stockeront désormais une copie d’un utilisateur réel et ne seront plus invalidées après la suppression de l’utilisateur éphémère. #84763 (pufit).
  • Le vector similarity index prend désormais en charge la quantization binaire. La quantization binaire réduit considérablement la consommation de mémoire et accélère la création d’un vector index (grâce à un calcul des distances plus rapide). De plus, le paramètre existant vector_search_postfilter_multiplier a été marqué comme Obsolete et remplacé par un paramètre plus général : vector_search_index_fetch_multiplier. #85024 (Shankar Iyer).
  • Autorise les arguments key value dans le table engine/la fonction s3 ou s3Cluster, par exemple s3('url', CSV, structure = 'a Int32', compression_method = 'gzip'). #85134 (Kseniia Sumarokova).
  • Nouvelle system table pour conserver les messages entrants erronés provenant de moteurs tels que Kafka (“dead letter queue”). #68873 (Ilya Golshtein).
  • Nouvelle commande SYSTEM RESTORE DATABASE REPLICA pour les Replicated databases, similaire à la fonctionnalité de restauration existante dans ReplicatedMergeTree. #73100 (Konstantin Morozov).
  • Le protocol PostgreSQL prend désormais en charge la commande COPY. #74344 (Konstantin Vedernikov).
  • Prise en charge du client C# pour le protocol MySQL. Cela clôt #83992. #84397 (Konstantin Vedernikov).
  • Ajout de la prise en charge des lectures et écritures avec le style de partition Hive. #76802 (Arthur Passos).
  • Ajout de la system table zookeeper_connection_log pour stocker l’historique des connexions ZooKeeper. #79494 (János Benjamin Antal).
  • Le paramètre serveur cpu_slot_preemption active l’ordonnancement CPU préemptif pour les workloads et garantit une allocation max-min équitable du temps CPU entre les workloads. De nouveaux paramètres de workload pour le throttling CPU ont été ajoutés : max_cpus, max_cpu_share et max_burst_cpu_seconds. Plus de détails : https://clickhouse.com/docs/operations/workload-scheduling#cpu&#95;scheduling. #80879 (Sergei Trifonov).
  • Fermeture de la connexion TCP après un nombre configuré de requêtes ou un seuil de temps donné. Cela permet une répartition plus uniforme des connexions entre les nœuds du cluster derrière un équilibreur de charge. Résout #68000. #81472 (Kenny Sun).
  • Les répliques parallèles prennent désormais en charge l’utilisation des projections pour les requêtes. #82659. #82807 (zoomxi).
  • Prise en charge de DESCRIBE SELECT en plus de DESCRIBE (SELECT …). #82947 (Yarik Briukhovetskyi).
  • Connexion sécurisée obligatoire pour mysql_port et postgresql_port. #82962 (tiandiwonder).
  • Vous pouvez désormais effectuer des recherches de clés JSON insensibles à la casse avec JSONExtractCaseInsensitive (et d’autres variantes de JSONExtract). #83770 (Alistair Evans).
  • Introduction de la table system.completions. Clôt #81889. #83833 (|2ustam).
  • Ajout d’une nouvelle fonction nowInBlock64. Exemple d’utilisation : SELECT nowInBlock64(6) renvoie 2025-07-29 17:09:37.775725. #84178 (Halersson Paris).
  • Ajout de extra_credentials à AzureBlobStorage pour l’authentification avec client_id et tenant_id. #84235 (Pablo Marcos).
  • Ajout de la fonction dateTimeToUUIDv7 pour convertir une valeur DateTime en UUIDv7. Exemple d’utilisation : SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56')) renvoie 0198af18-8320-7a7d-abd3-358db23b9d5c. #84319 (samradovich).
  • Fonctions d’agrégation timeSeriesDerivToGrid et timeSeriesPredictLinearToGrid pour rééchantillonner les données sur une grille temporelle définie par le timestamp de début, le timestamp de fin et le step spécifiés ; elles calculent respectivement deriv et predict_linear, avec une sémantique de type PromQL. #84328 (Stephen Chi).
  • Ajout de deux nouvelles fonctions TimeSeries : - timeSeriesRange(start_timestamp, end_timestamp, step), - timeSeriesFromGrid(start_timestamp, end_timestamp, step, values),. #85435 (Vitaly Baranov).
  • Ajout d’une nouvelle syntaxe : GRANT READ ON S3('s3://foo/.*') TO user. #84503 (pufit).
  • Ajout du format de sortie Hash. Il calcule une valeur de hachage unique pour toutes les colonnes et lignes du résultat. Cela est utile pour calculer une « empreinte » du résultat, par exemple dans les cas où le transfert de données constitue un goulot d’étranglement. Exemple : SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hash renvoie e5f9e676db098fdb9530d2059d8c23ef. #84607 (Robert Schulze).
  • Ajout de la possibilité de définir des watches arbitraires dans les requêtes Keeper Multi. #84964 (Mikhail Artemenko).
  • Ajout d’une option --max-concurrency pour l’outil clickhouse-benchmark, qui active un mode avec augmentation progressive du nombre de requêtes parallèles. #85623 (Sergei Trifonov).
  • Prise en charge des métriques partiellement agrégées. #85328 (Mikhail Artemenko).

Fonctionnalité expérimentale

  • La prise en charge des sous-requêtes corrélées est désormais activée par défaut ; elle n’est plus expérimentale. #85107 (Dmitry Novik).
  • Les catalogues de data lake Unity, Glue, Rest et Hive Metastore passent du statut expérimental au statut bêta. #85848 (Melvyn Peignon).
  • Les lightweight updates et les suppressions passent du statut expérimental au statut bêta.
  • La recherche vectorielle approximative avec des index de similarité vectorielle est désormais GA. #85888 (Robert Schulze).
  • YTsaurus table engine et fonction de table. #77606 (MikhailBurdukov).
  • Auparavant, les données de l’index textuel étaient réparties en plusieurs segments (la taille par défaut de chaque segment était de 256 MiB). Cela pouvait réduire la consommation de mémoire lors de la création de l’index textuel, mais augmentait l’espace requis sur le disque ainsi que le temps de réponse des requêtes. #84590 (Elmi Ahmadov).

Amélioration des performances

  • Nouvelle implémentation du lecteur Parquet. Elle est globalement plus rapide et prend en charge le pushdown des filtres au niveau des pages ainsi que PREWHERE. Actuellement expérimentale. Utilisez le paramètre input_format_parquet_use_native_reader_v3 pour l’activer. #82789 (Michael Kolupaev).
  • Remplace le transport HTTP officiel de la bibliothèque Azure par notre propre implémentation de client HTTP pour Azure Blob Storage. Ajoute plusieurs paramètres pour ce client, calqués sur ceux de S3. Introduit des délais d’expiration de connexion agressifs pour Azure et S3. Améliore l’introspection des profile events et des métriques Azure. Le nouveau client est activé par défaut et offre des latences nettement meilleures pour les requêtes à froid sur Azure Blob Storage. Il est possible de revenir à l’ancien client Curl en définissant azure_sdk_use_native_client=false. #83294 (alesapin). L’ancienne implémentation officielle du client Azure n’était pas adaptée à la production en raison de pics de latence désastreux, allant de cinq secondes à plusieurs minutes. Nous avons abandonné cette implémentation désastreuse et en sommes très fiers.
  • Traite les index par taille de fichier croissante. L’ordre des index donne priorité aux index minmax et vectoriels (pour leur simplicité et leur sélectivité, respectivement), puis aux petits index. Au sein des index minmax/vectoriels, les plus petits index sont également privilégiés. #84094 (Maruth Goyal).
  • Active par défaut le paramètre MergeTree write_marks_for_substreams_in_compact_parts. Cela améliore significativement les performances de lecture des sous-colonnes à partir de parties Compact nouvellement créées. Les serveurs dont la version est inférieure à 25.5 ne pourront pas lire les nouvelles parties Compact. #84171 (Pavel Kruglov).
  • Moteur de table azureBlobStorage : met en cache et réutilise les jetons d’authentication d’identité managée lorsque c’est possible afin d’éviter le throttling. #79860 (Nick Blakely).
  • Les JOIN ALL LEFT/INNER seront automatiquement convertis en RightAny si le côté droit est fonctionnellement déterminé par les colonnes de clé de jointure (toutes les lignes ont des valeurs de clé de jointure uniques). #84010 (Nikita Taranov).
  • Ajoute max_joined_block_size_bytes, en complément de max_joined_block_size_rows, pour limiter l’utilisation mémoire des JOIN avec des colonnes volumineuses. #83869 (Nikolai Kochetov).
  • Ajoute une nouvelle logique (contrôlée par le paramètre enable_producing_buckets_out_of_order_in_aggregation, activé par défaut) qui permet d’envoyer certains buckets dans le désordre lors d’une agrégation économe en mémoire. Lorsque certains buckets d’agrégation prennent significativement plus de temps à fusionner que d’autres, cela améliore les performances en permettant à l’initiateur de fusionner entre-temps des buckets ayant des identifiants plus élevés. L’inconvénient est une utilisation mémoire potentiellement plus élevée (sans que cela doive être significatif). #80179 (Nikita Taranov).
  • Introduit le paramètre optimize_rewrite_regexp_functions (activé par défaut), qui permet à l’optimiseur de réécrire certains appels à replaceRegexpAll, replaceRegexpOne et extract en formes plus simples et plus efficaces lorsque des motifs d’expression régulière spécifiques sont détectés. (issue #81981). #81992 (Amos Bird).
  • Traite max_joined_block_rows en dehors de la boucle principale du hash JOIN. Améliore légèrement les performances pour ALL JOIN. #83216 (Nikolai Kochetov).
  • Traite d’abord les index min-max de granularité plus élevée. Closes #75381. #83798 (Maruth Goyal).
  • Faire en sorte que les agrégats de fenêtre DISTINCT s’exécutent en temps linéaire et corriger un bug dans sumDistinct. Closes #79792. Closes #52253. #79859 (Nihal Z. Miaji).
  • Les requêtes de recherche vectorielle utilisant un index de similarité vectorielle s’exécutent avec une latence plus faible grâce à la réduction des lectures du stockage et de l’utilisation du CPU. #83803 (Shankar Iyer).
  • Hachage de rendez-vous afin d’améliorer la localité du cache dans la répartition de la charge de travail entre les répliques parallèles. #82511 (Anton Ivashkin).
  • Implémentation de addManyDefaults pour les combinateurs If, de sorte que les fonctions d’agrégation avec des combinateurs If fonctionnent désormais plus rapidement. #83870 (Raúl Marín).
  • Calcul de la clé sérialisée en mode colonnaire lors d’un GROUP BY sur plusieurs colonnes de type chaîne ou numérique. #83884 (李扬).
  • Élimination des balayages complets dans les cas où l’index analysis produit des plages vides pour la lecture par des répliques parallèles. #84971 (Eduard Karacharov).
  • Essai de -falign-functions=64 afin d’obtenir des tests de performance plus stables. #83920 (Azat Khuzhin).
  • L’index bloom filter est désormais utilisé pour des conditions comme has([c1, c2, ...], column), où column n’est pas de type Array. Cela améliore les performances de ce type de requêtes, qui deviennent aussi efficaces que l’opérateur IN. #83945 (Doron David).
  • Réduction des appels à memcpy inutiles dans CompressedReadBufferBase::readCompressedData. #83986 (Raúl Marín).
  • Optimisation de largestTriangleThreeBuckets par suppression des données temporaires. #84479 (Alexey Milovidov).
  • Optimisation de la désérialisation des chaînes en simplifiant le code. Closes #38564. #84561 (Alexey Milovidov).
  • Correction du calcul de la taille minimale des tâches pour les répliques parallèles. #84752 (Nikita Taranov).
  • Amélioration des performances de l’application des patch parts en mode Join. #85040 (Anton Popov).
  • Suppression de l’octet nul. Clôt #85062. Quelques bugs mineurs ont été corrigés. Les fonctions structureToProtobufSchema et structureToCapnProtoSchema n’ajoutaient pas correctement d’octet nul terminal et utilisaient à la place un retour à la ligne. Cela entraînait l’absence de retour à la ligne dans la sortie et pouvait provoquer des dépassements de tampon lors de l’utilisation d’autres fonctions dépendant de l’octet nul (comme logTrace, demangle, extractURLParameter, toStringCutToZero et encrypt/decrypt). Le layout de dictionnaire regexp_tree ne prenait pas en charge le traitement de chaînes contenant des octets nuls. La fonction formatRowNoNewline, appelée avec le format Values ou tout autre format sans retour à la ligne en fin de ligne, supprimait par erreur le dernier caractère de la sortie. La fonction stem contenait un défaut de sûreté vis-à-vis des exceptions pouvant entraîner une fuite mémoire dans un cas très rare. La fonction initcap se comportait incorrectement avec des arguments FixedString : elle ne reconnaissait pas le début d’un mot au début de la chaîne si la chaîne précédente dans un bloc se terminait par un caractère de mot. Correction d’une vulnérabilité de sécurité dans le format Apache ORC, qui pouvait entraîner l’exposition de mémoire non initialisée. Le comportement de la fonction replaceRegexpAll et de l’alias correspondant REGEXP_REPLACE a été modifié : ils peuvent désormais effectuer une correspondance vide à la fin de la chaîne, même si la correspondance précédente a traité toute la chaîne, comme dans le cas de ^a*|a*$ ou ^|.* — cela correspond à la sémantique de JavaScript, Perl, Python, PHP et Ruby, mais diffère de celle de PostgreSQL. L’implémentation de nombreuses fonctions a été simplifiée et optimisée. La documentation de plusieurs fonctions était incorrecte et a désormais été corrigée. Gardez à l’esprit que la sortie de byteSize pour les colonnes String et les types complexes composés de colonnes String a changé (de 9 octets par chaîne vide à 8 octets par chaîne vide), et c’est normal. #85063 (Alexey Milovidov).
  • Optimisation de la matérialisation des constantes lorsqu’elle n’est effectuée que pour renvoyer une seule ligne. #85071 (Alexey Milovidov).
  • Amélioration du traitement parallèle des fichiers avec le backend delta-kernel-rs. #85642 (Azat Khuzhin).
  • Un nouveau paramètre, enable_add_distinct_to_in_subqueries, a été introduit. Lorsqu’il est activé, ClickHouse ajoute automatiquement DISTINCT aux sous-requêtes dans les clauses IN pour les requêtes distribuées. Cela peut réduire significativement la taille des tables temporaires transférées entre les shards et améliorer l’efficacité du réseau. Remarque : il s’agit d’un compromis — si le volume de transfert réseau diminue, un travail supplémentaire de fusion (déduplication) est nécessaire sur chaque nœud. Activez ce paramètre lorsque le transfert réseau constitue un goulot d’étranglement et que le coût de fusion reste acceptable. #81908 (fhw12345).
  • Réduction du surcoût du suivi mémoire des requêtes pour les fonctions définies par l’utilisateur exécutables. #83929 (Eduard Karacharov).
  • Implémentation du filtrage interne de delta-kernel-rs (statistiques et élagage des partitions) dans le moteur de stockage DeltaLake. #84006 (Kseniia Sumarokova).
  • Désactivation plus granulaire des index de saut de données qui dépendent de colonnes mises à jour à la volée ou par des patch parts. Désormais, ces index ne sont désactivés que dans les parts affectées par des on-the-fly mutations ou des patch parts ; auparavant, ils l’étaient pour toutes les parts. #84241 (Anton Popov).
  • Allocation de la quantité minimale de mémoire nécessaire pour encrypted_buffer dans les named collections chiffrées. #84432 (Pablo Marcos).
  • Améliore la prise en charge des index Bloom filter (regular, ngram et token) afin qu’ils puissent être utilisés lorsque le premier argument est un tableau constant (l’ensemble) et le second la colonne indexée (le sous-ensemble), ce qui permet une exécution plus efficace des requêtes. #84700 (Doron David).
  • Réduit la contention sur le verrou de stockage dans Keeper. #84732 (Antonio Andelic).
  • Ajoute la prise en charge manquante de read_in_order_use_virtual_row pour WHERE. Cela permet d’éviter de lire davantage de parts pour les requêtes avec des filtres qui n’ont pas été entièrement poussés vers PREWHERE. #84835 (Nikolai Kochetov).
  • Permet d’itérer de manière asynchrone sur les objets d’une table Iceberg sans stocker explicitement les objets de chaque fichier de données. #85369 (Daniil Ivanik).
  • Exécute EXISTS non corrélé comme une sous-requête scalaire. Cela permet d’utiliser un cache de sous-requêtes scalaires et de préévaluer le résultat comme une constante, ce qui est utile pour les index. Pour des raisons de compatibilité, le nouveau paramètre execute_exists_as_scalar_subquery=1 est ajouté. #85481 (Nikolai Kochetov).

Amélioration

  • Ajout de paramètres database_replicated définissant les valeurs par défaut de DatabaseReplicatedSettings. Si le paramètre n’est pas présent dans la requête CREATE de la base de données Replicated, la valeur de ce paramètre est utilisée. #85127 (Tuan Pham Anh).
  • Les colonnes des tables dans l’interface web (play) peuvent désormais être redimensionnées. #84012 (Doron David).
  • Prise en charge du fichier .metadata.json compressé via le paramètre iceberg_metadata_compression_method. Il prend en charge toutes les méthodes de compression de ClickHouse. Cela corrige #84895. #85196 (Konstantin Vedernikov).
  • Affiche le nombre de plages à lire dans la sortie de EXPLAIN indexes = 1. #79938 (Christoph Wurm).
  • Introduction de paramètres permettant de définir la taille des blocs de compression ORC, avec mise à jour de la valeur par défaut de 64KB à 256KB pour rester cohérent avec Spark et Hive. #80602 (李扬).
  • Ajout du fichier columns_substreams.txt à Wide part pour suivre tous les sous-flux stockés dans la part. Cela permet de suivre les flux dynamiques dans les types JSON et Dynamic, et évite ainsi de lire un échantillon de ces colonnes pour obtenir la liste des flux dynamiques (par exemple pour calculer la taille des colonnes). De plus, tous les flux dynamiques sont désormais reflétés dans system.parts_columns. #81091 (Pavel Kruglov).
  • Ajout d’un indicateur CLI —show_secrets à clickhouse format pour masquer les données sensibles par défaut. #81524 (Nikolai Ryzhov).
  • Les requêtes de lecture et d’écriture S3 sont limitées au niveau du socket HTTP (au lieu du niveau de la requête S3 entière) afin d’éviter les problèmes liés au throttling de max_remote_read_network_bandwidth_for_server et max_remote_write_network_bandwidth_for_server. #81837 (Sergei Trifonov).
  • Autorise l’utilisation de différentes collations pour une même colonne dans différentes fenêtres (pour les window functions). #82877 (Yakov Olkhovskiy).
  • Ajout d’un outil pour simuler, visualiser et comparer les merge selectors. #71496 (Sergei Trifonov).
  • Ajout de la prise en charge des table functions remote* avec les répliques parallèles si le cluster est fourni dans l’argument address_expression. Corrige également #73295. #82904 (Igor Nikonov).
  • Définit tous les log messages d’écriture des fichiers de sauvegarde au niveau TRACE. #82907 (Hans Krutzer).
  • Les user-defined functions avec des noms inhabituels, ainsi que les codecs, peuvent être formatés de manière incohérente par le formateur SQL. Cela corrige #83092. #83644 (Alexey Milovidov).
  • Vous pouvez désormais utiliser les types Time et Time64 dans le type JSON. #83784 (Yarik Briukhovetskyi).
  • Les jointures avec des répliques parallèles utilisent désormais l’étape logique de jointure. En cas de problème avec des requêtes de jointure utilisant des répliques parallèles, essayez SET query_plan_use_new_logical_join_step=0 et signalez le problème. #83801 (Vladimir Cherkasov).
  • Correction de la compatibilité pour cluster_function_process_archive_on_multiple_nodes. #83968 (Kseniia Sumarokova).
  • Prise en charge de la modification des paramètres d’insert des vues matérialisées au niveau de la table S3Queue. Ajout de nouveaux paramètres au niveau de S3Queue : min_insert_block_size_rows_for_materialized_views et min_insert_block_size_bytes_for_materialized_views. Par défaut, les paramètres définis au niveau du profil seront utilisés, et ceux définis au niveau de S3Queue les remplaceront. #83971 (Kseniia Sumarokova).
  • Ajout de l’événement de profil MutationAffectedRowsUpperBound, qui affiche le nombre de lignes affectées par une mutation (par exemple, le nombre total de lignes qui satisfont la condition dans une requête ALTER UPDATE ou ALTER DELETE. #83978 (Anton Popov).
  • Utilisation des informations des cgroups (le cas échéant, c.-à-d. si memory_worker_use_cgroup est activé et que les cgroups sont disponibles) pour ajuster le memory tracker (memory_worker_correct_memory_tracker). #83981 (Azat Khuzhin).
  • MongoDB : parsing implicite des chaînes en types numériques. Auparavant, si une valeur sous forme de chaîne était reçue depuis une source MongoDB pour une colonne numérique d’une table ClickHouse, une exception était levée. Désormais, le moteur tente d’analyser automatiquement la valeur numérique à partir de la chaîne. Clôt #81167. #84069 (Kirill Nikiforov).
  • Mise en évidence des groupes de chiffres dans les formats Pretty pour les nombres Nullable. #84070 (Alexey Milovidov).
  • Tableau de bord : l’infobulle ne débordera plus du conteneur vers le haut. #84072 (Alexey Milovidov).
  • Points légèrement plus esthétiques sur le tableau de bord. #84074 (Alexey Milovidov).
  • Le tableau de bord a désormais un favicon légèrement amélioré. #84076 (Alexey Milovidov).
  • Interface web : permet aux navigateurs d’enregistrer le mot de passe. Elle mémorisera également les valeurs de l’URL. #84087 (Alexey Milovidov).
  • Ajout de la prise en charge de l’application d’ACL supplémentaires à des nœuds Keeper spécifiques à l’aide de la config apply_to_children. #84137 (Antonio Andelic).
  • Correction de l’utilisation de la sérialisation des discriminateurs Variant “compact” dans MergeTree. Auparavant, elle n’était pas utilisée dans certains cas où elle aurait pu l’être. #84141 (Pavel Kruglov).
  • Ajout d’un server setting, logs_to_keep, aux paramètres des bases de données répliquées, afin de permettre la modification du paramètre logs_to_keep par défaut pour les bases de données répliquées. Des valeurs plus faibles réduisent le nombre de ZNodes (en particulier s’il y a beaucoup de bases de données), tandis que des valeurs plus élevées permettent à une réplique manquante de rattraper son retard après une période plus longue. #84183 (Alexey Khatskevich).
  • Ajout du paramètre json_type_escape_dots_in_keys pour échapper les points dans les clés JSON lors de l’analyse du type JSON. Ce paramètre est désactivé par défaut. #84207 (Pavel Kruglov).
  • Vérifie si la connexion a été annulée avant de vérifier l’EOF afin d’éviter de lire depuis une connexion fermée. Corrige #83893. #84227 (Raufs Dunamalijevs).
  • Couleurs légèrement améliorées pour la sélection de texte dans la web UI. La différence n’est significative que pour les cellules de tableau sélectionnées en mode sombre. Dans les versions précédentes, le contraste entre le texte et l’arrière-plan de sélection n’était pas suffisant. #84258 (Alexey Milovidov).
  • Amélioration de la gestion de l’arrêt du server pour les connexions client grâce à une simplification des vérifications internes. #84312 (Raufs Dunamalijevs).
  • Ajout du paramètre delta_lake_enable_expression_visitor_logging pour désactiver les journaux du visiteur d’expression, car ils peuvent être trop verbeux, même avec le niveau de journalisation de test, lors du debugging. #84315 (Kseniia Sumarokova).
  • Les métriques au niveau des cgroups et les métriques system-wide sont désormais toutes remontées ensemble. Les métriques au niveau des cgroups portent les noms CGroup<Metric> et les métriques au niveau de l’OS (collectées depuis procfs) portent les noms OS<Metric>. #84317 (Nikita Taranov).
  • Graphiques légèrement améliorés dans la web UI. Pas de beaucoup, mais quand même mieux. #84326 (Alexey Milovidov).
  • La valeur par défaut du paramètre max_retries_before_automatic_recovery de la base de données Replicated passe à 10, afin d’accélérer la recovery dans certains cas. #84369 (Alexander Tokmakov).
  • Correction du formatting de CREATE USER avec des query parameters (c.-à-d. CREATE USER {username:Identifier} IDENTIFIED WITH no_password). #84376 (Azat Khuzhin).
  • Introduction de backup_restore_s3_retry_initial_backoff_ms, backup_restore_s3_retry_max_backoff_ms, backup_restore_s3_retry_jitter_factor pour configurer la stratégie de backoff des retries S3 utilisée pendant les restore operations et les sauvegardes. #84421 (Julia Kartseva).
  • Correction du mode ordered de S3Queue : arrêt plus tôt si l’arrêt a été déclenché. #84463 (Kseniia Sumarokova).
  • Prise en charge des écritures Iceberg pour permettre la lecture depuis pyiceberg. #84466 (Konstantin Vedernikov).
  • Autorise le transtypage des valeurs de Set lors du pushdown des filtres IN / GLOBAL IN sur les primary keys du stockage KeyValue (par ex. EmbeddedRocksDB, KeeperMap). #84515 (Eduard Karacharov).
  • Mise à niveau de chdig vers la version 25.7.1. #84521 (Azat Khuzhin).
  • Les erreurs de bas niveau pendant l’exécution des UDF renvoient désormais le code d’erreur UDF_EXECUTION_FAILED, alors qu’auparavant différents codes d’erreur pouvaient être renvoyés. #84547 (Xu Jia).
  • Ajout de la commande get_acl à KeeperClient. #84641 (Antonio Andelic).
  • Ajoute la version de snapshot aux table engines de lac de données. #84659 (Pete Hampton).
  • Ajout d’une métrique dimensionnelle pour la taille de ConcurrentBoundedQueue, étiquetée par type de file d’attente (c.-à-d. l’usage de la file) et par identifiant de file d’attente (c.-à-d. l’identifiant généré aléatoirement pour l’instance actuelle de la file). #84675 (Miсhael Stetsyuk).
  • La table system.columns fournit désormais column comme alias de la colonne name existante. #84695 (Yunchi Pang).
  • Nouveau paramètre MergeTree search_orphaned_parts_drives pour limiter le périmètre de recherche des parts, par exemple aux disques disposant de métadonnées locales. #84710 (Ilya Golshtein).
  • Ajout dans Keeper de 4LW, lgrq, pour activer ou désactiver la journalisation des requêtes reçues. #84719 (Antonio Andelic).
  • Correspondance des forward_headers d’authentification externe désormais effectuée de manière insensible à la casse. #84737 (ingodwerust).
  • L’outil encrypt_decrypt prend désormais en charge les connexions ZooKeeper chiffrées. #84764 (Roman Vasin).
  • Ajout d’une colonne de chaîne de format à system.errors. Cette colonne est nécessaire pour regrouper les erreurs du même type dans les règles d’alerte. #84776 (Miсhael Stetsyuk).
  • Mise à jour de clickhouse-format pour accepter --highlight comme alias de --hilite. - Mise à jour de clickhouse-client pour accepter --hilite comme alias de --highlight. - Mise à jour de la documentation de clickhouse-format pour refléter ce changement. #84806 (Rishabh Bhardwaj).
  • Correction de la lecture d’Iceberg par identifiants de champ pour les types complexes. #84821 (Konstantin Vedernikov).
  • Introduction d’un nouveau paramètre backup_slow_all_threads_after_retryable_s3_error pour réduire la pression sur S3 lors de vagues de nouvelles tentatives provoquées par des erreurs telles que SlowDown, en ralentissant tous les threads dès qu’une seule erreur réessayable est détectée. #84854 (Julia Kartseva).
  • Ignorer la création et le renommage de l’ancienne table temporaire pour les DDL RMV non append dans les bases de données Replicated. #84858 (Tuan Pham Anh).
  • Limiter la taille du cache des entrées de journal de Keeper par nombre d’entrées à l’aide de keeper_server.coordination_settings.latest_logs_cache_entry_count_threshold et keeper_server.coordination_settings.commit_logs_cache_entry_count_threshold. #84877 (Antonio Andelic).
  • Autoriser l’utilisation de simdjson sur des architectures non prises en charge (cela provoquait auparavant des erreurs CANNOT_ALLOCATE_MEMORY). #84966 (Azat Khuzhin).
  • Journalisation asynchrone : rendre les limites configurables et ajouter de l’introspection. #85105 (Raúl Marín).
  • Regrouper tous les objets supprimés pour exécuter une seule opération de suppression dans le stockage d’objets. #85316 (Mikhail Artemenko).
  • L’implémentation actuelle d’Iceberg pour les fichiers de suppression positionnelle conserve toutes les données en RAM. Cela peut être assez coûteux si les fichiers de suppression positionnelle sont volumineux, ce qui est souvent le cas. Cette implémentation ne conserve en RAM que le dernier groupe de lignes des fichiers de suppression Parquet, ce qui réduit nettement le coût. #85329 (Konstantin Vedernikov).
  • chdig : correction des artefacts à l’écran, correction d’un crash après modification d’une requête dans l’éditeur, recherche de editor dans path, mise à jour vers 25.8.1. #85341 (Azat Khuzhin).
  • Ajout de partition_columns_in_data_file, qui manquait à la configuration Azure. #85373 (Arthur Passos).
  • Autoriser un pas nul dans les fonctions timeSeries*ToGrid. Cela fait partie de #75036. #85390 (Vitaly Baranov).
  • Ajout de l’indicateur show_data_lake_catalogs_in_system_tables pour gérer l’ajout de tables de data lake dans system.tables. Résout #85384. #85411 (Smita Kulkarni).
  • Ajout de la prise en charge de l’expansion des macros dans remote_fs_zero_copy_zookeeper_path. #85437 (Mikhail Koviazin).
  • L’IA dans clickhouse-client sera légèrement mieux présentée. #85447 (Alexey Milovidov).
  • Activation par défaut de trace_log.symbolize pour les anciens déploiements. #85456 (Azat Khuzhin).
  • Prise en charge d’un plus grand nombre de cas de résolution pour les identifiants composés. En particulier, cela améliore la compatibilité de ARRAY JOIN avec l’ancien analyseur. Introduction d’un nouveau paramètre analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested pour conserver l’ancien comportement. #85492 (Nikolai Kochetov).
  • Ignorer UNKNOWN_DATABASE lors de la récupération de la taille des colonnes des tables pour system.columns. #85632 (Azat Khuzhin).
  • Ajout d’une limite (paramètre de table max_uncompressed_bytes_in_patches) pour le volume total d’octets non compressés dans les patch parts. Cela évite des ralentissements importants des requêtes SELECT après des mises à jour légères et empêche d’éventuels usages abusifs de cette fonctionnalité. #85641 (Anton Popov).
  • Ajout d’une colonne parameter à system.grants pour déterminer le type de source pour GRANT READ/WRITE et le moteur de table pour GRANT TABLE ENGINE. #85643 (MikhailBurdukov).
  • Correction de l’analyse syntaxique d’une virgule finale dans les colonnes de la requête CREATE DICTIONARY après une colonne avec paramètres, par exemple Decimal(8). Ferme #85586. #85653 (Nikolay Degterinsky).
  • Prise en charge des tableaux imbriqués internes pour la fonction nested. #85719 (Nikolai Kochetov).
  • Toutes les allocations effectuées par des bibliothèques externes sont désormais visibles pour le memory tracker de ClickHouse et correctement prises en compte. Cela peut se traduire par une utilisation mémoire « accrue » signalée pour certaines requêtes ou par des échecs avec MEMORY_LIMIT_EXCEEDED. #84082 (Nikita Mikhaylov).

Correction de bogue (comportement anormal visible par l’utilisateur dans une version stable officielle)

  • Cette PR corrige la résolution des métadonnées lors de l’interrogation de tables Iceberg via le REST catalog. … #80562 (Saurabh Kumar Ojha).
  • Corrige markReplicasActive dans DDLWorker et DatabaseReplicatedDDLWorker. #81395 (Tuan Pham Anh).
  • Corrige le rollback d’une Dynamic column en cas d’échec du parsing. #82169 (Pavel Kruglov).
  • Si la fonction trim est appelée avec des entrées toutes constantes, elle produit désormais une chaîne de sortie constante. (Bug #78796). #82900 (Robert Schulze).
  • Corrige une logical error liée à des subqueries dupliquées lorsque optimize_syntax_fuse_functions est enabled, corrige #75511. #83300 (Vladimir Cherkasov).
  • Corrige le résultat incorrect de queries avec la clause WHERE ... IN (<subquery>) lorsque le query condition cache est activé (paramètre use_query_condition_cache). #83445 (LB7666).
  • Historiquement, la fonction gcs ne nécessitait aucun accès pour être utilisée. Désormais, elle vérifiera la permission GRANT READ ON S3 pour son utilisation. Corrige #70567. #83503 (pufit).
  • Ignore les nœuds indisponibles pendant un INSERT SELECT de s3Cluster() vers un MergeTree replicated. #83676 (Igor Nikonov).
  • Corrige l’écriture avec append (dans MergeTree utilisé pour les transactions Experimental) avec les metadata types plain_rewritable/plain, qui étaient auparavant simplement ignorés. #83695 (Tuan Pham Anh).
  • Masque les détails d’authentication de l’Avro schema registry afin qu’ils ne soient pas visibles par l’utilisateur ni dans les logs. #83713 (János Benjamin Antal).
  • Corrige le problème où, si une MergeTree table est créée avec add_minmax_index_for_numeric_columns=1 ou add_minmax_index_for_string_columns=1, l’index est ensuite materialized lors d’une opération ALTER, ce qui empêche la Replicated database de s’initialiser correctement sur une nouvelle réplique. #83751 (Nikolay Degterinsky).
  • Corrige la sortie du writer Parquet qui produisait des statistiques incorrectes (min/max) pour les Decimal types. #83754 (Michael Kolupaev).
  • Corrige le tri des valeurs NaN dans le type LowCardinality(Float32|Float64|BFloat16). #83786 (Pervakov Grigorii).
  • Lors d’une restauration depuis une sauvegarde, il est possible que l’utilisateur definer ne soit pas sauvegardé, ce qui rend l’ensemble de la sauvegarde inutilisable. Pour corriger cela, nous reportons la vérification des permissions lors de la création de la target table pendant le restore et ne l’effectuons qu’au runtime. #83818 (pufit).
  • Corrige un crash du client dû à une connection laissée dans un état déconnecté après un INSERT invalide. #83842 (Azat Khuzhin).
  • Permet de référencer n’importe quelle table dans l’argument view(...) de la fonction de table remote lorsque l’analyseur est activé. Corrige #78717. Corrige #79377. #83844 (Dmitry Novik).
  • L’appel à Onprogress dans jsoneachrowwithprogress est synchronisé avec la finalisation. #83879 (Sema Checherinda).
  • Clôt #81303. #83892 (Konstantin Vedernikov).
  • Corrige colorSRGBToOKLCH/colorOKLCHToSRGB pour les combinaisons d’arguments const et non const. #83906 (Azat Khuzhin).
  • Corrige l’écriture des chemins JSON avec des valeurs NULL au format RowBinary. #83923 (Pavel Kruglov).
  • Corrige le dépassement de capacité sur les grandes valeurs (>2106-02-07) lors du transtypage de Date vers DateTime64. #83982 (Yarik Briukhovetskyi).
  • Applique toujours filesystem_prefetches_limit (et pas seulement depuis MergeTreePrefetchedReadPool). #83999 (Azat Khuzhin).
  • Corrige un bug rare où la requête MATERIALIZE COLUMN pouvait entraîner la présence de fichiers inattendus dans checksums.txt et, à terme, de parties de données détachées. #84007 (alesapin).
  • Corrige l’erreur logique Expected single dictionary argument for function lors d’un JOIN sur une condition d’inégalité lorsque l’une des colonnes est LowCardinality et l’autre une constante. Clôt #81779. #84019 (Alexey Milovidov).
  • Corrige un crash de clickhouse client lorsqu’il est utilisé en mode interactif avec la coloration syntaxique. #84025 (Bharat Nallan).
  • Corrige des résultats erronés lorsque le cache des conditions de requête est utilisé conjointement avec des CTE récursives (problème #81506). #84026 (zhongyuankai).
  • Gère correctement les exceptions lors du rafraîchissement périodique des parties de données. #84083 (Azat Khuzhin).
  • Corrige la fusion du filtre dans la condition JOIN lorsque les opérandes d’égalité ont des types différents ou référencent des constantes. Corrige #83432. #84145 (Dmitry Novik).
  • Corrige un crash rare de ClickHouse lorsque la table a une projection, que lightweight_mutation_projection_mode = 'rebuild' est défini et que l’utilisateur exécute une suppression légère qui supprime TOUTES les lignes d’un bloc quelconque de la table. #84158 (alesapin).
  • Corrige un interblocage causé par le thread de vérification des annulations en arrière-plan. #84203 (Antonio Andelic).
  • Corrige l’analyse récursive infinie des définitions WINDOW invalides. Corrige #83131. #84242 (Dmitry Novik).
  • Correction d’un bogue provoquant un encodage et un décodage Bech32 incorrects. Le bogue n’a pas été détecté initialement, car l’implémentation en ligne de l’algorithme utilisée pour les tests présentait le même problème. #84257 (George Larionov).
  • Correction d’une construction incorrecte de tuples vides dans la fonction array(). Cela corrige #84202. #84297 (Amos Bird).
  • Corrige LOGICAL_ERROR pour les requêtes avec des répliques parallèles et plusieurs INNER JOIN suivis d’un RIGHT join. N’utilisez pas de répliques parallèles pour ce type de requêtes. #84299 (Vladimir Cherkasov).
  • Auparavant, les index set ne prenaient pas en compte les colonnes Nullable pour vérifier si les granules passaient le filtre (problème #75485). #84305 (Elmi Ahmadov).
  • Désormais, ClickHouse lit les tables depuis Glue Catalog lorsque le type de table est spécifié en minuscules. #84316 (alesapin).
  • N’essayez pas de remplacer les table functions par leur alternative sur cluster en présence d’un JOIN ou d’une sous-requête. #84335 (Konstantin Bogdanov).
  • Corrige l’utilisation du logger dans IAccessStorage. #84365 (Konstantin Bogdanov).
  • Correction d’une erreur logique dans les lightweight updates qui mettent à jour toutes les colonnes de la table. #84380 (Anton Popov).
  • Le codec DoubleDelta ne peut désormais être appliqué qu’à des colonnes de type numérique. En particulier, les colonnes FixedString ne peuvent plus être compressées avec DoubleDelta. (corrige #80220). #84383 (Jimmy Aguilar Mena).
  • La comparaison avec la valeur nan n’utilisait pas les bonnes plages lors de l’évaluation de l’index MinMax. #84386 (Elmi Ahmadov).
  • Corrige la lecture d’une Variant column avec matérialisation paresseuse. #84400 (Pavel Kruglov).
  • Traite zoutofmemory comme une erreur matérielle, faute de quoi une erreur logique sera levée. Voir https://github.com/clickhouse/clickhouse-core-incidents/issues/877. #84420 (Han Fei).
  • Correction d’un crash du serveur lorsqu’un utilisateur créé avec no_password tente de se connecter après que le server setting allow_no_password a été changé à 0. #84426 (Shankar Iyer).
  • Corrige les écritures hors ordre dans le changelog de Keeper. Auparavant, il pouvait y avoir des écritures en cours dans le changelog, mais un rollback pouvait provoquer une modification concurrente du fichier de destination. Cela entraînait des logs incohérents, avec un risque de perte de données. #84434 (Antonio Andelic).
  • Désormais, si tous les TTL sont supprimés d’une table, MergeTree n’effectuera plus aucune opération liée aux TTL. #84441 (alesapin).
  • Un INSERT SELECT distribué en parallèle avec LIMIT était autorisé, ce qui n’est pas correct, car cela entraîne une duplication des données dans la table cible. #84477 (Igor Nikonov).
  • Correction du pruning des fichiers via une colonne virtuelle dans les data lakes. #84520 (Kseniia Sumarokova).
  • Correction de fuites dans Keeper avec le stockage RocksDB (les itérateurs n’étaient pas détruits). #84523 (Azat Khuzhin).
  • Correction de ALTER MODIFY ORDER BY, qui ne validait pas les colonnes TTL dans les clés de tri. Les colonnes TTL sont désormais correctement rejetées lorsqu’elles sont utilisées dans des clauses ORDER BY lors d’opérations ALTER, évitant ainsi une corruption potentielle de la table. #84536 (xiaohuanlin).
  • La valeur de allow_experimental_delta_kernel_rs d’avant la version 25.5 a été ramenée à false pour des raisons de compatibilité. #84587 (Kseniia Sumarokova).
  • Ne récupère plus le schéma à partir des fichiers manifest, mais stocke les schémas pertinents séparément pour chaque snapshot. Déduit le schéma pertinent de chaque fichier de données à partir du snapshot correspondant. Le comportement précédent ne respectait pas la spécification Iceberg pour les entrées des fichiers manifest avec un statut existant. #84588 (Daniil Ivanik).
  • Correction d’un problème où le paramètre Keeper rotate_log_storage_interval = 0 pouvait provoquer un crash de ClickHouse. (issue #83975). #84637 (George Larionov).
  • Correction de l’erreur logique S3Queue “Table is already registered”. Clôt #84433. Régression introduite après https://github.com/ClickHouse/ClickHouse/pull/83530. #84677 (Kseniia Sumarokova).
  • Verrouille ‘mutex’ lors de la récupération de ZooKeeper depuis ‘view’ dans RefreshTask. #84699 (Tuan Pham Anh).
  • Correction de l’erreur CORRUPTED_DATA lorsque des colonnes lazy sont utilisées avec un tri externe. #84738 (János Benjamin Antal).
  • Correction du Column pruning avec delta-kernel dans le stockage DeltaLake. Clôt #84543. #84745 (Kseniia Sumarokova).
  • Actualisation des credentials dans delta-kernel pour le stockage DeltaLake. #84751 (Kseniia Sumarokova).
  • Correction du lancement de backups internes superflus après des problèmes de connexion. #84755 (Vitaly Baranov).
  • Correction d’un problème où l’interrogation d’une source distante lente pouvait entraîner un dépassement des limites du vecteur. #84820 (George Larionov).
  • Les tokenizers ngram et no_op ne font plus planter l’index de texte (experimental) lorsque les tokens d’entrée sont vides. #84849 (Robert Schulze).
  • Correction des lightweight updates pour les tables utilisant les moteurs ReplacingMergeTree et CollapsingMergeTree. #84851 (Anton Popov).
  • Stockage correct de tous les paramètres dans les métadonnées de la table pour les tables utilisant le moteur object queue. #84860 (Antonio Andelic).
  • Correction du nombre total de watches renvoyé par Keeper. #84890 (Antonio Andelic).
  • Correction des lightweight updates pour les tables utilisant le moteur ReplicatedMergeTree et créées sur des serveurs avec une version antérieure à 25.7. #84933 (Anton Popov).
  • Correction des lightweight updates pour les tables utilisant le moteur MergeTree non répliqué après l’exécution d’une requête ALTER TABLE ... REPLACE PARTITION. #84941 (Anton Popov).
  • Correction de la génération des noms de colonnes pour les littéraux booléens afin d’utiliser “true”/“false” au lieu de “1”/“0”, ce qui évite les conflits de noms de colonnes entre littéraux booléens et entiers dans les requêtes. #84945 (xiaohuanlin).
  • Correction d’une dérive du suivi mémoire provenant du background schedule pool et de l’executor. #84946 (Azat Khuzhin).
  • Correction de possibles problèmes de tri imprécis dans le moteur de table Merge. #85025 (Xiaozhe Yu).
  • Implémentation des API manquantes pour DiskEncrypted. #85028 (Azat Khuzhin).
  • Ajout d’une vérification lorsqu’une sous-requête corrélée est utilisée dans un contexte distribué afin d’éviter un crash. Corrige #82205. #85030 (Dmitry Novik).
  • Désormais, Iceberg n’essaie plus de mettre en cache la snapshot version pertinente entre les requêtes select et tente toujours de résoudre le snapshot de manière fiable. La précédente tentative de mise en cache d’un snapshot Iceberg entraînait des problèmes lors de l’utilisation d’une table Iceberg avec le time travel. #85038 (Daniil Ivanik).
  • Correction d’une double libération dans AzureIteratorAsync. #85064 (Nikita Taranov).
  • Amélioration du message d’erreur lors d’une tentative de création d’un utilisateur identifié avec JWT. #85072 (Konstantin Bogdanov).
  • Correction du nettoyage des patch parts dans ReplicatedMergeTree. Auparavant, le résultat d’une lightweight update pouvait temporairement ne pas être visible sur la replica jusqu’à ce que la part fusionnée ou mutée qui matérialise les patch parts soit téléchargée depuis une autre replica. #85121 (Anton Popov).
  • Correction de illegal_type_of_argument dans mv lorsque les types sont différents. #85135 (Sema Checherinda).
  • Correction d’un segfault dans l’implémentation delta-kernel. #85160 (Kseniia Sumarokova).
  • Correction de la récupération des bases de données répliquées lorsque le déplacement du fichier de métadonnées prend beaucoup de temps. #85177 (Tuan Pham Anh).
  • Corrige Not-ready Set pour IN (subquery) dans le paramètre additional_table_filters expression. #85210 (Nikolai Kochetov).
  • Supprime les appels inutiles à getStatus() lors des requêtes SYSTEM DROP REPLICA. Corrige le cas où une table est supprimée en arrière-plan et où l’exception Shutdown for storage is called est levée. #85220 (Nikolay Degterinsky).
  • Corrige une condition de concurrence dans l’implémentation delta-kernel du moteur DeltaLake. #85221 (Kseniia Sumarokova).
  • Corrige la lecture des données partitionnées lorsque delta-kernel est désactivé dans le moteur DeltaLake. Cela ne fonctionnait plus en 25.7 (https://github.com/ClickHouse/ClickHouse/pull/81136). #85223 (Kseniia Sumarokova).
  • Ajout des vérifications manquantes de la longueur des noms de table dans les requêtes CREATE OR REPLACE et RENAME. #85326 (Michael Kolupaev).
  • Corrige la création de RMV sur une nouvelle réplique de la base de données Replicated si DEFINER a été supprimé. #85327 (Nikolay Degterinsky).
  • Corrige les écritures Iceberg pour les types complexes. #85330 (Konstantin Vedernikov).
  • L’écriture des bornes inférieures et supérieures n’est pas prise en charge pour les types complexes. #85332 (Konstantin Vedernikov).
  • Corrige une erreur logique lors de la lecture depuis des fonctions de stockage objet via une table Distributed ou la table function remote. Corrige : #84658, #85173, #52022. #85359 (alesapin).
  • Corrige la sauvegarde des parts avec des projections défectueuses. #85362 (Antonio Andelic).
  • Interdit l’utilisation de la colonne _part_offset dans les projections des versions tant qu’elle n’est pas stabilisée. #85372 (Sema Checherinda).
  • Corrige un crash et une corruption de données pendant ALTER UPDATE sur JSON. #85383 (Pavel Kruglov).
  • Les requêtes avec des répliques parallèles qui utilisent l’optimisation de lecture en ordre inverse peuvent produire des résultats incorrects. #85406 (Igor Nikonov).
  • Corrige un possible UB (crashs) en cas de MEMORY_LIMIT_EXCEEDED pendant la désérialisation de String. #85440 (Azat Khuzhin).
  • Corrige les métriques KafkaAssignedPartitions et KafkaConsumersWithAssignment incorrectes. #85494 (Ilya Golshtein).
  • Corrige la sous-estimation de la statistique des octets traités lorsque PREWHERE (explicite ou automatique) est utilisé. #85495 (Michael Kolupaev).
  • Corrige la condition de retour anticipé pour le ralentissement du débit des requêtes S3 : il suffit désormais que s3_slow_all_threads_after_network_error ou backup_slow_all_threads_after_retryable_s3_error soit vrai pour activer le ralentissement lorsque tous les threads sont en pause à cause d’une erreur réessayable, au lieu d’exiger que les deux le soient. #85505 (Julia Kartseva).
  • Cette PR corrige la résolution des métadonnées lors de l’interrogation de tables Iceberg via un catalogue REST. … #85531 (Saurabh Kumar Ojha).
  • Correction d’un plantage rare dans les inserts asynchrones qui modifient les paramètres log_comment ou insert_deduplication_token. #85540 (Anton Popov).
  • Des paramètres comme date_time_input_format étaient ignorés lors de l’utilisation de HTTP avec multipart/form-data. #85570 (Sema Checherinda).
  • Corrige le masquage des secrets dans les fonctions de table icebergS3Cluster et icebergAzureCluster. #85658 (MikhailBurdukov).
  • Corrige la perte de précision dans JSONExtract lors de la conversion de nombres JSON en types Decimal. Désormais, les valeurs numériques JSON conservent leur représentation décimale exacte, ce qui évite les erreurs d’arrondi en virgule flottante. #85665 (ssive7b).
  • Correction de LOGICAL_ERROR lors de l’utilisation de COMMENT COLUMN IF EXISTS dans la même instruction ALTER après DROP COLUMN. La clause IF EXISTS ignore désormais correctement l’opération de commentaire lorsque la colonne a été supprimée dans cette même instruction. #85688 (xiaohuanlin).
  • Corrige le comptage des lectures depuis le cache pour Delta Lake. #85704 (Kseniia Sumarokova).
  • Corrige un segfault rare dans CoalescingMergeTree avec de grandes chaînes. Cela clôt #84582. #85709 (Konstantin Vedernikov).
  • Met à jour le timestamp des métadonnées dans les écritures Iceberg. #85711 (Konstantin Vedernikov).
  • L’utilisation de distributed_depth comme indicateur de *Cluster function était incorrecte et peut entraîner une duplication des données ; utilisez client_info.collaborate_with_initiator à la place. #85734 (Konstantin Bogdanov).
  • Spark ne peut pas lire les position delete files. #85762 (Konstantin Vedernikov).
  • Corrige send_logs_source_regexp (après la refactorisation de la journalisation asynchrone dans #85105). #85797 (Azat Khuzhin).
  • Corrige une possible incohérence pour les dictionnaires avec update_field en cas d’erreurs MEMORY_LIMIT_EXCEEDED. #85807 (Azat Khuzhin).
  • Prise en charge des constantes globales de l’instruction WITH pour les opérations INSERT SELECT distribuées en parallèle avec une table de destination Distributed. Auparavant, la requête pouvait renvoyer une erreur Unknown expression identifier. #85811 (Nikolai Kochetov).
  • Masque les informations d’authentification pour deltaLakeAzure, deltaLakeCluster, icebergS3Cluster et icebergAzureCluster. #85889 (Julian Maicher).
  • Corrige une erreur logique lors d’une tentative de CREATE ... AS (SELECT * FROM s3Cluster(...)) avec DatabaseReplicated. #85904 (Konstantin Bogdanov).
  • Corrige les requêtes HTTP effectuées par la fonction de table url() afin d’inclure correctement les numéros de port dans l’en-tête Host lors de l’accès à des ports non standard. Cela résout les échecs d’authentification lors de l’utilisation d’URL présignées avec des services compatibles S3 comme MinIO exécutés sur des ports personnalisés, ce qui est courant dans les environnements de développement. (Corrige #85898). #85921 (Tom Quist).
  • Désormais, Unity Catalog ignorera les schémas avec des types de données inhabituels dans le cas des tables non-Delta. Corrige #85699. #85950 (alesapin).
  • Corrige la nullabilité des champs dans Iceberg. #85977 (Konstantin Vedernikov).
  • Corrige un bug dans la récupération de la base de données Replicated : si un nom de table contient le symbole %, la table pouvait être recréée avec un nom différent pendant la récupération. #85987 (Alexander Tokmakov).
  • Corrige les échecs de restauration de sauvegardes dus à l’erreur BACKUP_ENTRY_NOT_FOUND lors de la restauration d’une table Memory vide. #86012 (Julia Kartseva).
  • Ajoute des vérifications de sharding&#95;key lors d’un ALTER de la table Distributed. Auparavant, un ALTER incorrect pouvait casser la définition de la table et empêcher le redémarrage du serveur. #86015 (Nikolay Degterinsky).
  • N’écrit plus de fichier de suppression Iceberg vide. #86061 (Konstantin Vedernikov).
  • Corrige les valeurs de paramètres trop grandes qui perturbaient les tables S3Queue et le redémarrage des réplicas. #86074 (Nikolay Degterinsky).

Amélioration de la compilation/des tests/du packaging

  • Utilisation par défaut de disques chiffrés pour les tests avec S3. #59898 (Nikita Mikhaylov).
  • Utilisation du binaire clickhouse dans les tests d’intégration afin d’obtenir des symboles de débogage intacts. #83779 (Mikhail f. Shiryaev).
  • Mise à niveau de la version interne de libxml2 de 2.14.4 à 2.14.5. #84230 (Robert Schulze).
  • Mise à niveau de la version interne de curl de 8.14.0 à 8.15.0. #84231 (Robert Schulze).
  • Nous utilisons désormais moins de mémoire pour les caches dans la CI et disposons de meilleurs tests d’éviction. #84676 (alesapin).

Version de ClickHouse 25.7, 2025-07-24

Changement incompatible avec les versions précédentes

  • Modifications de la fonction extractKeyValuePairs : ajout d’un nouvel argument unexpected_quoting_character_strategy qui contrôle le comportement lorsqu’un quoting_character est rencontré de façon inattendue lors de la lecture d’une clé ou d’une valeur non entre guillemets. La valeur peut être l’une des suivantes : invalid, accept ou promote. invalid ignore la clé et revient à l’état d’attente d’une clé. accept le traite comme faisant partie de la clé. promote ignore le caractère précédent et commence l’analyse comme s’il s’agissait d’une clé entre guillemets. De plus, après l’analyse d’une valeur entre guillemets, la clé suivante n’est analysée que si un délimiteur de paire est trouvé. #80657 (Arthur Passos).
  • Prise en charge des correspondances de zéro octet dans la fonction countMatches. Les utilisateurs qui souhaitent conserver l’ancien comportement peuvent activer le paramètre count_matches_stop_at_empty_match. #81676 (Elmi Ahmadov).
  • Utilisation des limiteurs de débit globaux du serveur pour les opérations locales (max_local_read_bandwidth_for_server et max_local_write_bandwidth_for_server) et distantes (max_remote_read_network_bandwidth_for_server et max_remote_write_network_bandwidth_for_server) lors de la génération de BACKUPs, en plus de leurs paramètres dédiés au niveau du serveur (max_backup_bandwidth_for_server, max_mutations_bandwidth_for_server et max_merges_bandwidth_for_server). #81753 (Sergei Trifonov).
  • Interdiction de créer une table sans colonnes insérables. #81835 (Pervakov Grigorii).
  • Parallélisation des fonctions de cluster par fichier à l’intérieur des archives. Dans les versions précédentes, l’archive entière (zip, tar ou 7z, par exemple) constituait une unité de travail. Ajout d’un nouveau paramètre cluster_function_process_archive_on_multiple_nodes, égal à true par défaut. Lorsqu’il est défini sur true, il améliore les performances du traitement des archives dans les fonctions de cluster. Il doit être défini sur false pour assurer la compatibilité et éviter les erreurs lors de la mise à niveau vers 25.7+ si vous utilisez des fonctions de cluster avec des archives sur des versions antérieures. #82355 (Kseniia Sumarokova).
  • La requête SYSTEM RESTART REPLICAS provoquait le réveil de tables dans la base de données Lazy, même sans accès à cette base, et cela se produisait alors même que ces tables étaient supprimées de manière concurrente. Remarque : désormais, SYSTEM RESTART REPLICAS redémarrera uniquement les répliques dans les bases de données où vous disposez de la permission SHOW TABLES, ce qui est logique. #83321 (Alexey Milovidov).

Nouvelle fonctionnalité

  • Ajout de la prise en charge des lightweight updates pour les tables de la famille MergeTree. Les lightweight updates peuvent désormais être utilisées avec une nouvelle syntaxe : UPDATE <table> SET col1 = val1, col2 = val2, ... WHERE <condition>. Ajout également d’une implémentation des lightweight deletes via les lightweight updates. Cette fonctionnalité peut être activée en définissant lightweight_delete_mode = 'lightweight_update'. #82004 (Anton Popov).
  • Prise en charge des types complexes dans l’évolution de schéma d’Iceberg. #73714 (Konstantin Vedernikov).
  • Ajout de la prise en charge des INSERT dans les tables Iceberg. #82692 (Konstantin Vedernikov).
  • Lecture des fichiers de données Iceberg par identifiants de champ. Cela améliore la compatibilité avec Iceberg : les champs peuvent être renommés dans les métadonnées tout en étant associés à des noms différents dans les fichiers Parquet sous-jacents. Cela clôt #83065. #83653 (Konstantin Vedernikov).
  • Désormais, ClickHouse prend en charge les fichiers metadata.json compressés pour Iceberg. Corrige #70874. #81451 (alesapin).
  • Prise en charge de TimestampTZ dans le catalogue Glue. Cela clôt #81654. #83132 (Konstantin Vedernikov).
  • Ajout de la génération SQL assistée par l’IA au client ClickHouse. Vous pouvez désormais générer des requêtes SQL à partir de descriptions en langage naturel en faisant précéder votre requête de ??. Prend en charge les fournisseurs OpenAI et Anthropic avec découverte automatique du schéma. #83314 (Kaushik Iska).
  • Ajout d’une fonction permettant d’écrire des types géométriques au format WKB. #82935 (Konstantin Vedernikov).
  • Introduction de deux nouveaux types d’accès : READ et WRITE pour les sources, avec dépréciation de tous les types d’accès précédents liés aux sources. Avant : GRANT S3 ON *.* TO user, maintenant : GRANT READ, WRITE ON S3 TO user. Cela permet également de dissocier les permissions READ et WRITE pour les sources, par exemple : GRANT READ ON * TO user, GRANT WRITE ON S3 TO user. La fonctionnalité est contrôlée par le paramètre access_control_improvements.enable_read_write_grants et désactivée par défaut. #73659 (pufit).
  • NumericIndexedVector : nouvelle structure de données vectorielle reposant sur une compression bitmap Roaring bit-sliced, accompagnée de plus de 20 fonctions pour la construction, l’analyse et l’arithmétique point à point. Elle peut réduire le volume de stockage et accélérer les jointures, les filtres et les agrégations sur des données creuses. Implémente #70582 ainsi que l’article “Large-Scale Metric Computation in Online Controlled Experiment Platform” de T. Xiong et Y. Wang, VLDB 2024. #74193 (FriendLey).
  • Le paramètre de workload max_waiting_queries est désormais pris en charge. Il peut être utilisé pour limiter la taille de la file d’attente des requêtes. Si la limite est atteinte, toutes les requêtes suivantes seront interrompues avec l’erreur SERVER_OVERLOADED. #81250 (Oleg Doronin).
  • Ajout de fonctions financières : financialInternalRateOfReturnExtended (XIRR), financialInternalRateOfReturn (IRR), financialNetPresentValueExtended (XNPV), financialNetPresentValue (NPV). #81599 (Joanna Hulboj).
  • Ajout des fonctions géospatiales polygonsIntersectCartesian et polygonsIntersectSpherical pour déterminer si deux polygones s’intersectent. #81882 (Paul Lamb).
  • Prise en charge de la colonne virtuelle _part_granule_offset dans les tables de la famille MergeTree. Cette colonne indique l’index, à partir de zéro, du granule/marque auquel appartient chaque ligne au sein de son data part. Cela corrige #79572. #82341 (Amos Bird). #82341 (Amos Bird)
  • Ajout des fonctions SQL colorSRGBToOkLCH et colorOkLCHToSRGB pour convertir des couleurs entre les espaces colorimétriques sRGB et OkLCH. #83679 (Fgrtue).
  • Prise en charge des paramètres dans les requêtes CREATE USER pour les noms d’utilisateur. #81387 (Diskein).
  • La table system.formats contient désormais des informations étendues sur les formats, comme le type de contenu HTTP, les capacités d’inférence de schéma, etc. #81505 (Alexey Milovidov).

Fonctionnalité expérimentale

  • Ajout des fonctions searchAny et searchAll, qui sont des outils génériques pour rechercher dans les index textuels. #80641 (Elmi Ahmadov).
  • L’index textuel prend désormais en charge le nouveau tokenizer split. #81752 (Elmi Ahmadov).
  • Modification de la valeur par défaut de l’index granularity des index text à 64. Cela améliore les performances attendues pour la requête de test moyenne dans les benchmarks internes. #82162 (Jimmy Aguilar Mena).
  • Le bitmap 256 bits stocke les labels sortants d’un état dans un ordre défini, mais les états sortants sont enregistrés sur disque dans l’ordre où ils apparaissent dans la table de hachage. Par conséquent, un label pouvait pointer vers un mauvais état suivant lors de la lecture depuis le disque. #82783 (Elmi Ahmadov).
  • Activation de la compression zstd pour le blob de l’arbre FST dans les index textuels. #83093 (Elmi Ahmadov).
  • Passage de l’index de similarité vectorielle en bêta. Introduction du paramètre alias enable_vector_similarity_index, qui doit être activé pour utiliser l’index de similarité vectorielle. #83459 (Robert Schulze).
  • Suppression de la logique expérimentale send_metadata liée à la réplication zero-copy expérimentale. Elle n’a jamais été utilisée et ce code n’est maintenu par personne. Comme aucun test n’y était associé, il y a de fortes chances qu’il ne fonctionne plus depuis longtemps. #82508 (alesapin).
  • Intégration de StorageKafka2 à system.kafka_consumers. #82652 (János Benjamin Antal).
  • Estimation des CNF/DNF complexes, par exemple (a < 1 and a > 0) or b = 3, à l’aide de statistiques. #82663 (Han Fei).

Amélioration des performances

  • Introduction de la journalisation asynchrone. Lorsque les logs sont envoyés vers un périphérique lent, cela ne retarde plus les requêtes. #82516 (Raúl Marín). Limitation du nombre maximal d’entrées conservées dans la file d’attente. #83214 (Raúl Marín).
  • L’INSERT SELECT distribué en parallèle est activé par défaut dans le mode où INSERT SELECT est exécuté indépendamment sur chaque shard ; voir le paramètre parallel_distributed_insert_select. #83040 (Igor Nikonov).
  • Lorsqu’une requête d’agrégation contient uniquement une fonction count() sur une colonne non Nullable, la logique d’agrégation est entièrement intégrée lors du sondage de la table de hachage. Cela évite d’allouer et de maintenir un état d’agrégation, ce qui réduit significativement l’utilisation mémoire et la surcharge CPU. Cela répond partiellement à #81982. #82104 (Amos Bird).
  • Les performances de HashJoin ont été optimisées en supprimant la boucle supplémentaire sur les tables de hachage dans le cas typique d’une seule colonne clé ; les vérifications null_map et join_mask sont également éliminées lorsqu’elles sont toujours true/false. #82308 (Nikita Taranov).
  • Optimisation triviale du combinator -If. #78454 (李扬).
  • Les requêtes de vector search utilisant un vector similarity index s’exécutent avec une latence plus faible grâce à la réduction des lectures de stockage et de l’utilisation CPU. #79103 (Shankar Iyer).
  • Respect de merge_tree_min_{rows,bytes}_for_seek dans filterPartsByQueryConditionCache pour l’aligner sur les autres méthodes de filtrage par index. #80312 (李扬).
  • Le pipeline après l’étape TOTALS devient multithreadé. #80331 (UnamedRus).
  • Correction du filtre par clé pour les stockages Redis et KeeperMap. #81833 (Pervakov Grigorii).
  • Ajout du nouveau paramètre min_joined_block_size_rows (analogue à min_joined_block_size_bytes ; valeur par défaut : 65409) pour contrôler la taille minimale des blocks (en rows) pour les blocks d’entrée et de sortie de JOIN (si le join algorithm le prend en charge). Les petits blocks seront squashed. #81886 (Nikita Taranov).
  • ATTACH PARTITION n’entraîne plus la suppression de tous les caches. #82377 (Alexey Milovidov).
  • Optimisation du plan généré pour les correlated subqueries en supprimant les JOIN operations redondantes à l’aide de classes d’équivalence. S’il existe des expressions équivalentes pour toutes les correlated columns, CROSS JOIN n’est pas produit si le paramètre query_plan_correlated_subqueries_use_substitution est activé. #82435 (Dmitry Novik).
  • Lecture des seules colonnes requises dans la correlated subquery lorsqu’elle semble être un argument de la fonction EXISTS. #82443 (Dmitry Novik).
  • Accélération légère des comparaisons de query trees pendant la query analysis. #82617 (Nikolai Kochetov).
  • Ajouter un alignement dans le Counter de ProfileEvents afin de réduire le false sharing. #82697 (Jiebin Sun).
  • Les optimisations de null_map et JoinMask de #82308 ont été appliquées au cas d’un JOIN avec plusieurs disjonctions. De plus, la structure de données KnownRowsHolder a été optimisée. #83041 (Nikita Taranov).
  • Un simple std::vector<std::atomic_bool> est utilisé pour les indicateurs de jointure afin d’éviter de calculer un hash à chaque accès. #83043 (Nikita Taranov).
  • Ne pas préallouer à l’avance la mémoire des colonnes de résultat lorsque HashJoin utilise le mode de sortie lazy. Ce n’est pas optimal, en particulier lorsque le nombre de correspondances est faible. De plus, une fois la jointure terminée, nous connaissons le nombre exact de correspondances, ce qui permet une préallocation plus précise. #83304 (Nikita Taranov).
  • Réduire au minimum les copies mémoire dans les headers de port lors de la construction du pipeline. PR d’origine par heymind. #83381 (Raúl Marín).
  • Améliorer le démarrage de ClickHouse Keeper lorsqu’il utilise le stockage rocksdb. #83390 (Antonio Andelic).
  • Éviter de conserver le verrou pendant la création des données de snapshot du stockage afin de réduire la contention en cas de forte charge concurrente. #83510 (Duc Canh Le).
  • Amélioration des performances du format d’entrée ProtobufSingle grâce à la réutilisation du sérialiseur lorsqu’aucune erreur d’analyse syntaxique ne se produit. #83613 (Eduard Karacharov).
  • Améliorer les performances de construction du pipeline, ce qui accélère les requêtes courtes. #83631 (Raúl Marín).
  • Optimiser MergeTreeReadersChain::getSampleBlock, ce qui accélère les requêtes courtes. #83875 (Raúl Marín).
  • Accélérer le listage des tables dans les catalogues de données grâce à des requêtes asynchrones. #81084 (alesapin).
  • Introduire du jitter dans le mécanisme de retry de S3 lorsque la configuration s3_slow_all_threads_after_network_error est activée. #81849 (zoomxi).

Amélioration

  • Coloration des parenthèses en plusieurs couleurs pour une meilleure lisibilité. #82538 (Konstantin Bogdanov).
  • Mise en évidence des métacaractères dans les motifs LIKE/REGEXP pendant la saisie. Cette fonctionnalité existait déjà dans clickhouse-format et dans l’écho de clickhouse-client, mais elle est désormais également disponible dans l’invite de commande. #82871 (Alexey Milovidov).
  • La mise en évidence dans clickhouse-format et dans l’écho du client fonctionnera de la même manière que dans l’invite de commande. #82874 (Alexey Milovidov).
  • Les disques plain_rewritable peuvent désormais être utilisés pour les métadonnées des bases de données. Implémentation des méthodes moveFile et replaceFile dans plain_rewritable pour permettre son utilisation comme disque de base de données. #79424 (Tuan Pham Anh).
  • Autorisation des sauvegardes pour les bases de données PostgreSQL, MySQL et DataLake. La sauvegarde d’une telle base de données n’enregistre que sa définition, pas les données qu’elle contient. #79982 (Nikolay Degterinsky).
  • Le paramètre allow_experimental_join_condition est désormais marqué comme obsolète, car il est maintenant toujours autorisé. #80566 (Vladimir Cherkasov).
  • Ajout de métriques de pression aux métriques asynchrones de ClickHouse. #80779 (Xander Garbett).
  • Ajout des métriques MarkCacheEvictedBytes, MarkCacheEvictedMarks et MarkCacheEvictedFiles pour suivre les évictions du cache de marks. (issue #60989). #80799 (Shivji Kumar Jha).
  • Prise en charge de l’écriture des enum Parquet sous forme de tableaux d’octets, comme l’impose la spécification. #81090 (Arthur Passos).
  • Amélioration du moteur de table DeltaLake : delta-kernel-rs dispose d’une API ExpressionVisitor, implémentée dans cette PR et appliquée à la transformation des expressions de colonnes de partition (elle remplacera un ancien mécanisme obsolète de delta-kernel-rs utilisé jusque-là dans notre code). À l’avenir, cet ExpressionVisitor permettra aussi d’implémenter le pruning basé sur les statistiques ainsi que certaines fonctionnalités propriétaires de delta-lake. En outre, cette modification vise à prendre en charge le partition pruning dans le moteur de table DeltaLakeCluster (le résultat d’une expression analysée — ActionsDAG — sera sérialisé et envoyé par l’initiateur avec le chemin de données, car ce type d’information, nécessaire au pruning, n’est disponible sous forme de méta-informations que lors du listing des fichiers de données, effectué uniquement par l’initiateur, alors qu’il doit être appliqué aux données sur chaque serveur de lecture). #81136 (Kseniia Sumarokova).
  • Préservation des noms d’éléments lors de la dérivation des supertypes pour les tuples nommés. #81345 (lgbo).
  • Comptage manuel des messages consommés pour éviter de dépendre du précédent offset validé dans StorageKafka2. #81662 (János Benjamin Antal).
  • Ajout de clickhouse-keeper-utils, un nouvel outil en ligne de commande pour gérer et analyser les données de ClickHouse Keeper. L’outil permet d’exporter l’état à partir des snapshots et des changelogs, d’analyser les fichiers de changelog et d’extraire des plages de logs spécifiques. #81677 (Antonio Andelic).
  • Les limiteurs réseau globaux et par utilisateur ne sont jamais réinitialisés, ce qui garantit que les limites max_network_bandwidth_for_all_users et max_network_bandwidth_for_all_users ne sont jamais dépassées. #81729 (Sergei Trifonov).
  • Prise en charge de l’écriture de geoparquets en tant que format de sortie. #81784 (Konstantin Vedernikov).
  • Interdiction de démarrer une mutation ALTER RENAME COLUMN si elle doit renommer une colonne actuellement affectée par une mutation de données incomplète. #81823 (Mikhail Artemenko).
  • L’en-tête Connection est envoyé à la fin des en-têtes, une fois que l’on sait si la connexion doit être conservée. #81951 (Sema Checherinda).
  • Ajustement de la file d’attente des serveurs TCP (64 par défaut) en fonction de listen_backlog (4096 par défaut). #82045 (Azat Khuzhin).
  • Ajout de la possibilité de recharger max_local_read_bandwidth_for_server et max_local_write_bandwidth_for_server à chaud, sans redémarrer le serveur. #82083 (Kai Zhu).
  • Ajout de la prise en charge de l’effacement de tous les avertissements de la table system.warnings à l’aide de TRUNCATE TABLE system.warnings. #82087 (Vladimir Cherkasov).
  • Correction du partition pruning avec les cluster table functions de data lake. #82131 (Kseniia Sumarokova).
  • Correction de la lecture des données partitionnées dans la table function DeltaLakeCluster. Dans cette PR, la protocol version des cluster functions a été augmentée, ce qui permet d’envoyer des informations supplémentaires de l’initiateur aux répliques. Ces informations supplémentaires contiennent l’expression de transformation delta-kernel, nécessaire pour parser les partition columns (et d’autres éléments à l’avenir, comme les generated columns, etc.). #82132 (Kseniia Sumarokova).
  • La fonction reinterpret prend désormais en charge la conversion vers Array(T)T est un type de données de taille fixe (issue #82621). #83399 (Shankar Iyer).
  • La base de données Datalake renvoie désormais une exception plus claire. Correction de #81211. #82304 (alesapin).
  • Amélioration de CROSS JOIN en renvoyant false depuis HashJoin::needUsedFlagsForPerRightTableRow. #82379 (lgbo).
  • Prise en charge de la lecture et de l’écriture des colonnes map sous forme d’Array de Tuples. #82408 (MikhailBurdukov).
  • Ajout de la liste des licences des crates Rust dans system.licenses. #82440 (Raúl Marín).
  • Les macros comme {uuid} peuvent désormais être utilisées dans le paramètre keeper_path du moteur de table S3Queue. #82463 (Nikolay Degterinsky).
  • Amélioration de Keeper : déplacement des fichiers de changelog entre disques dans un thread d’arrière-plan. Auparavant, déplacer le changelog vers un autre disque bloquait globalement Keeper jusqu’à la fin de l’opération. Cela entraînait une dégradation des performances lorsque le déplacement était long (par ex. vers un disque S3). #82485 (Antonio Andelic).
  • Amélioration de Keeper : ajout d’une nouvelle config keeper_server.cleanup_old_and_ignore_new_acl. Si elle est activée, les ACL de tous les nœuds seront effacées, tandis que les ACL des nouvelles requêtes seront ignorées. Si l’objectif est de supprimer complètement les ACL des nœuds, il est important de laisser cette config activée jusqu’à la création d’un nouveau snapshot. #82496 (Antonio Andelic).
  • Ajout d’un nouveau server setting s3queue_disable_streaming qui désactive le streaming dans les tables utilisant le moteur de table S3Queue. Ce paramètre peut être modifié sans redémarrer le serveur. #82515 (Kseniia Sumarokova).
  • Refactorisation de la fonctionnalité de redimensionnement dynamique du cache du système de fichiers. Ajout de journaux supplémentaires pour l’introspection. #82556 (Kseniia Sumarokova).
  • clickhouse-server, même sans fichier de configuration, écoutera également sur le port PostgreSQL 9005, comme avec la config par défaut. #82633 (Alexey Milovidov).
  • Dans ReplicatedMergeTree::executeMetadataAlter, nous récupérons le StorageID et, sans prendre DDLGuard, nous essayons d’appeler IDatabase::alterTable. Entre-temps, il pouvait techniquement être possible d’échanger la table concernée avec une autre ; ainsi, lorsque nous récupérions la définition, nous pouvions obtenir la mauvaise. Pour éviter cela, nous ajoutons une vérification distincte de correspondance des UUIDs lors de l’appel à IDatabase::alterTable. #82666 (Nikolay Degterinsky).
  • Lors de l’attachement d’une database avec un disque distant en lecture seule, ajout manuel des UUID des tables dans DatabaseCatalog. #82670 (Tuan Pham Anh).
  • Empêche l’utilisateur d’utiliser nan et inf avec NumericIndexedVector. Corrige #82239 et un peu plus. #82681 (Raufs Dunamalijevs).
  • Ne pas omettre les valeurs nulles dans les formats de header X-ClickHouse-Progress et X-ClickHouse-Summary. #82727 (Nikita Mikhaylov).
  • Amélioration de Keeper : prise en charge de permissions spécifiques pour l’ACL world:anyone. #82755 (Antonio Andelic).
  • Ne pas autoriser RENAME COLUMN ou DROP COLUMN sur des colonnes explicitement listées pour l’addition dans SummingMergeTree. Ferme #81836. #82821 (Alexey Milovidov).
  • Amélioration de la précision de la conversion de Decimal vers Float32. Implémentation de la conversion de Decimal vers BFloat16. Ferme #82660. #82823 (Alexey Milovidov).
  • Les barres de défilement dans la Web UI seront légèrement améliorées. #82869 (Alexey Milovidov).
  • clickhouse-server avec une configuration embarquée permettra d’utiliser la Web UI en renvoyant une réponse HTTP OPTIONS. #82870 (Alexey Milovidov).
  • Ajoute la prise en charge de la spécification d’ACL Keeper supplémentaires pour des paths dans la config. Si vous souhaitez ajouter des ACL supplémentaires pour un path spécifique, définissez-les dans la config sous zookeeper.path_acls. #82898 (Antonio Andelic).
  • Désormais, le snapshot des mutations sera construit à partir du snapshot des parts visibles. De plus, les compteurs de mutation utilisés dans le snapshot seront recalculés à partir des mutations incluses. #82945 (Mikhail Artemenko).
  • Ajoute un ProfileEvent lorsque Keeper rejette une écriture en raison de la soft memory limit. #82963 (Xander Garbett).
  • Ajoute les colonnes commit_time, commit_id à system.s3queue_log. #83016 (Kseniia Sumarokova).
  • Dans certains cas, nous avons besoin de plusieurs dimensions pour nos métriques. Par exemple, compter les merges ou les mutations ayant échoué par code d’erreur plutôt que d’avoir un seul compteur. Introduit system.dimensional_metrics, qui fait précisément cela, et ajoute la première métrique dimensionnelle, appelée failed_merges. #83030 (Miсhael Stetsyuk).
  • Regroupe les avertissements concernant les settings inconnus dans le clickhouse client et les journalise sous forme de résumé. #83042 (Bharat Nallan).
  • Le client ClickHouse signale désormais le port local lorsqu’une erreur de connexion se produit. #83050 (Jianfei Hu).
  • Gestion légèrement améliorée des erreurs dans AsynchronousMetrics. Si le répertoire /sys/block existe mais n’est pas accessible, le server démarrera sans surveiller les block devices. Ferme #79229. #83115 (Alexey Milovidov).
  • Arrête SystemLogs après les tables ordinaires (et avant les system tables, au lieu d’avant les tables ordinaires). #83134 (Kseniia Sumarokova).
  • Ajoute des logs pour le processus d’arrêt de S3Queue. #83163 (Kseniia Sumarokova).
  • Possibilité d’analyser Time et Time64 aux formats MM:SS, M:SS, SS ou S. #83299 (Yarik Briukhovetskyi).
  • Lorsque distributed_ddl_output_mode='*_only_active', n’attendez pas les nouvelles replicas ni les replicas restaurées dont le replication lag dépasse max_replication_lag_to_enqueue. Cela devrait aider à éviter DDL task is not finished on some hosts lorsqu’une nouvelle replica devient active après avoir terminé l’initialisation ou la recovery, mais a accumulé un énorme log de réplication pendant l’initialisation. Implémente également la query SYSTEM SYNC DATABASE REPLICA STRICT, qui attend que le log de réplication redescende sous max_replication_lag_to_enqueue. #83302 (Alexander Tokmakov).
  • Ne pas afficher de descriptions trop longues des actions d’expression dans les messages d’exception. Clôt #83164. #83350 (Alexey Milovidov).
  • Ajouter la possibilité d’analyser le préfixe et le suffixe d’une part, ainsi que de vérifier la couverture pour les colonnes non constantes. #83377 (Mikhail Artemenko).
  • Uniformiser les noms de paramètres dans ODBC et JDBC lors de l’utilisation de collections nommées. #83410 (Andrey Zvonov).
  • Lorsque le stockage s’arrête, getStatus lève une exception ErrorCodes::ABORTED. Auparavant, cela faisait échouer la requête SELECT. Désormais, nous interceptons les exceptions ErrorCodes::ABORTED et les ignorons volontairement. #83435 (Miсhael Stetsyuk).
  • Ajouter des métriques de ressources du processus (telles que UserTimeMicroseconds, SystemTimeMicroseconds, RealTimeMicroseconds) aux profile events de part_log pour les entrées MergeParts. #83460 (Vladimir Cherkasov).
  • Activer par défaut dans Keeper les feature flags create_if_not_exists, check_not_exists, remove_recursive, qui permettent de nouveaux types de requêtes. #83488 (Antonio Andelic).
  • Arrêter le streaming S3(Azure/etc)Queue avant d’arrêter les tables lors de l’arrêt du serveur. #83530 (Kseniia Sumarokova).
  • Activer Date/Date32 comme entiers dans les formats d’entrée JSON. #83597 (MikhailBurdukov).
  • Rendre les messages d’exception plus faciles à lire dans certaines situations lors du chargement et de l’ajout de projections. #83728 (Robert Schulze).
  • Introduire une option de configuration permettant d’ignorer les contrôles d’intégrité des sommes de contrôle du binaire pour clickhouse-server. Résout #83637. #83749 (Rafael Roquetto).

Correction de bogue

  • Corrige la valeur par défaut incorrecte de l’option --reconnect dans clickhouse-benchmark. Elle a été modifiée par erreur dans #79465. #82677 (Alexey Milovidov).
  • Corrige le formatage incohérent de CREATE DICTIONARY. Clôt #82105. #82829 (Alexey Milovidov).
  • Corrige le formatage incohérent de TTL lorsqu’il contient une fonction materialize. Clôt #82828. #82831 (Alexey Milovidov).
  • Corrige le formatage incohérent de EXPLAIN AST dans une sous-requête lorsqu’elle contient des options de sortie comme INTO OUTFILE. Clôt #82826. #82840 (Alexey Milovidov).
  • Corrige le formatage incohérent des expressions entre parenthèses avec alias dans le contexte où les alias ne sont pas autorisés. Clôt #82836. Clôt #82837. #82867 (Alexey Milovidov).
  • Utilise le code d’erreur approprié lors de la multiplication de l’état d’une fonction d’agrégation par IPv4. Clôt #82817. #82818 (Alexey Milovidov).
  • Corrige une erreur logique dans le cache du système de fichiers : “Having zero bytes but range is not finished”. #81868 (Kseniia Sumarokova).
  • Recalcule l’index min-max lorsque TTL réduit le nombre de lignes afin de garantir la validité des algorithmes qui s’appuient dessus, comme minmax_count_projection. Cela résout #77091. #77166 (Amos Bird).
  • Pour les requêtes avec la combinaison ORDER BY ... LIMIT BY ... LIMIT N, lorsque ORDER BY est exécuté sous forme de PartialSorting, le compteur rows_before_limit_at_least reflète désormais le nombre de lignes consommées par la clause LIMIT plutôt que le nombre de lignes consommées par la transformation de tri. #78999 (Eduard Karacharov).
  • Corrige un skipping excessif de granules lors du filtrage sur des index token/ngram avec regexp contenant une alternance et une première alternative non littérale. #79373 (Eduard Karacharov).
  • Corrige une erreur logique avec l’opérateur <=> et le moteur Join ; désormais, la query renvoie le code d’erreur approprié. #80165 (Vladimir Cherkasov).
  • Corrige un plantage dans la fonction loop lorsqu’elle est utilisée avec la famille de fonctions remote. Garantit que la clause LIMIT est bien respectée dans loop(remote(...)). #80299 (Julia Kartseva).
  • Correction du comportement incorrect des fonctions to_utc_timestamp et from_utc_timestamp lors du traitement de dates antérieures à l’époque Unix (1970-01-01) et postérieures à la date maximale (2106-02-07 06:28:15). Désormais, ces fonctions bornent correctement les valeurs respectivement au début de l’époque Unix et à la date maximale. #80498 (Surya Kant Ranjan).
  • Pour certaines requêtes exécutées avec des répliques parallèles, les optimisations de lecture dans l’ordre pouvaient être appliquées sur l’initiateur, mais pas sur les nœuds distants. Cela entraînait l’utilisation de modes de lecture différents par le coordinateur des répliques parallèles (sur l’initiateur) et sur les nœuds distants, ce qui constitue une erreur logique. #80652 (Igor Nikonov).
  • Correction d’une erreur logique lors de la matérialisation d’une projection lorsque le type d’une colonne était changé en Nullable. #80741 (Pavel Kruglov).
  • Correction d’un recalcul incorrect du TTL dans TTL GROUP BY lors de la mise à jour du TTL. #81222 (Evgeniy Ulasik).
  • Correction d’un filtre bloom Parquet qui appliquait à tort une condition comme WHERE function(key) IN (...) comme s’il s’agissait de WHERE key IN (...). #81255 (Michael Kolupaev).
  • Correction d’un possible crash dans Aggregator en cas d’exception pendant une fusion. #81450 (Nikita Taranov).
  • Correction de InterpreterInsertQuery::extendQueryLogElemImpl afin d’ajouter des accents graves aux noms de base de données et de table lorsque nécessaire (par ex. lorsque les noms contiennent des caractères spéciaux comme -). #81528 (Ilia Shvyrialkin).
  • Correction de l’exécution de IN avec transform_null_in=1 lorsqu’il y a une valeur NULL dans l’argument de gauche et un résultat de sous-requête non Nullable. #81584 (Pavel Kruglov).
  • Ne pas valider les types expérimentaux/suspects lors de l’exécution des expressions default/materialize pendant la lecture depuis une table existante. #81618 (Pavel Kruglov).
  • Correction de « Context has expired » pendant les fusions lorsqu’un dict est utilisé dans une expression TTL. #81690 (Azat Khuzhin).
  • Correction de la monotonie de la fonction cast. #81722 (zoomxi).
  • Correction du problème où les colonnes requises ne sont pas lues lors du traitement d’une sous-requête corrélée scalaire. Corrige #81716. #81805 (Dmitry Novik).
  • Dans les versions précédentes, le serveur renvoyait un contenu excessif pour les requêtes vers /js. Cela clôt #61890. #81895 (Alexey Milovidov).
  • Auparavant, les définitions du moteur de table MongoDB pouvaient inclure un composant de chemin dans l’argument host:port, qui était ignoré silencieusement. L’intégration MongoDB refusait de charger de telles tables. Avec ce correctif, nous autorisons le chargement de telles tables et ignorons le composant de chemin si le moteur MongoDB a cinq arguments, en utilisant le nom de base de données fourni dans les arguments. Remarque : le correctif ne s’applique pas aux tables nouvellement créées ni aux requêtes utilisant la fonction de table mongo, ni aux sources de dictionnaire et aux collections nommées. #81942 (Vladimir Cherkasov).
  • Correction d’un possible plantage dans Aggregator en cas d’exception pendant la fusion. #82022 (Nikita Taranov).
  • Correction de l’analyse du filtre lorsqu’une seule colonne d’alias constante est utilisée dans la requête. Corrige #79448. #82037 (Dmitry Novik).
  • Correction de LOGICAL_ERROR et du plantage qui en résulte lors de l’utilisation de la même colonne dans le TTL pour GROUP BY et SET. #82054 (Pablo Marcos).
  • Correction de la validation des arguments de la S3 table function lors du masquage des secrets, ce qui évite un possible LOGICAL_ERROR et clôt #80620. #82056 (Vladimir Cherkasov).
  • Correction de data races dans Iceberg. #82088 (Azat Khuzhin).
  • Correction de DatabaseReplicated::getClusterImpl. Si le premier élément (ou les premiers éléments) de hosts a id == DROPPED_MARK et qu’il n’existe aucun autre élément pour le même shard, le premier élément de shards sera un vecteur vide, ce qui entraîne std::out_of_range. #82093 (Miсhael Stetsyuk).
  • Correction d’une erreur de copier-coller dans arraySimilarity, qui interdisait l’utilisation des poids UInt32 et Int32. Mise à jour des tests et de la documentation. #82103 (Mikhail f. Shiryaev).
  • Correction de l’erreur Not found column pour les requêtes avec arrayJoin dans une condition WHERE et IndexSet. #82113 (Nikolai Kochetov).
  • Correction d’un bug dans l’intégration du Glue catalog. Désormais, ClickHouse peut lire des tables avec des data types imbriqués dont certaines subcolumns contiennent des décimaux, par exemple : map<string, decimal(9, 2)>. Corrige #81301. #82114 (alesapin).
  • Correction d’une dégradation des performances dans SummingMergeTree introduite en 25.5 dans https://github.com/ClickHouse/ClickHouse/pull/79051. #82130 (Pavel Kruglov).
  • Lors du passage des settings via l’URI, la dernière valeur est prise en compte. #82137 (Sema Checherinda).
  • Correction de “Context has expired” dans Iceberg. #82146 (Azat Khuzhin).
  • Correction d’un possible interblocage pour les requêtes distantes lorsque le server subit une pression mémoire. #82160 (Kirill).
  • Correction d’un overflow dans les fonctions numericIndexedVectorPointwiseAdd, numericIndexedVectorPointwiseSubtract, numericIndexedVectorPointwiseMultiply, numericIndexedVectorPointwiseDivide, qui se produisait lorsqu’elles étaient appliquées à de grands nombres. #82165 (Raufs Dunamalijevs).
  • Correction d’un bug dans les dépendances de table qui empêchait les materialized views de recevoir les requêtes INSERT. #82222 (Nikolay Degterinsky).
  • Corrige une possible condition de concurrence entre le thread de suggestion et le thread principal du client. #82233 (Azat Khuzhin).
  • Désormais, ClickHouse peut lire des tables Iceberg depuis le Glue catalog après une évolution du schéma. Corrige #81272. #82301 (alesapin).
  • Corrige la validation des paramètres de métriques asynchrones asynchronous_metrics_update_period_s et asynchronous_heavy_metrics_update_period_s. #82310 (Bharat Nallan).
  • Corrige une erreur logique lors de la résolution du matcher dans une requête comportant plusieurs JOIN, clôt #81969. #82421 (Vladimir Cherkasov).
  • Ajoute une expiration au token AWS ECS afin qu’il puisse être rechargé. #82422 (Konstantin Bogdanov).
  • Corrige un bug lié aux arguments NULL dans la fonction CASE. #82436 (Yarik Briukhovetskyi).
  • Corrige des conditions de concurrence dans le client (en n’utilisant pas le contexte global) ainsi que les surcharges de session_timezone (auparavant, si session_timezone était défini, par exemple, dans users.xml/les options du client sur une valeur non vide, et dans le contexte de la requête sur une valeur vide, la valeur de users.xml était utilisée, ce qui était incorrect ; désormais, le contexte de la requête aura toujours priorité sur le contexte global). #82444 (Azat Khuzhin).
  • Corrige la désactivation de l’alignement sur les limites pour le buffer mis en cache dans les moteurs de table externes. Cela avait été cassé dans https://github.com/ClickHouse/ClickHouse/pull/81868. #82493 (Kseniia Sumarokova).
  • Corrige un crash lorsque le stockage key-value est joint avec une clé convertie par transtypage. #82497 (Pervakov Grigorii).
  • Corrige le masquage des valeurs de named collection dans les logs/query_log. Clôt #82405. #82510 (Kseniia Sumarokova).
  • Corrige un possible crash dans la journalisation lors de la fermeture d’une session, car user_id peut parfois être vide. #82513 (Bharat Nallan).
  • Corrige des cas où l’analyse de Time pouvait provoquer des problèmes avec msan. Corrige #82477. #82514 (Yarik Briukhovetskyi).
  • Interdit de définir threadpool_writer_pool_size à zéro afin d’éviter que les opérations du server ne se bloquent. #82532 (Bharat Nallan).
  • Corrige LOGICAL_ERROR lors de l’analyse de l’expression de ROW POLICY pour les colonnes corrélées. #82618 (Dmitry Novik).
  • Corrige l’utilisation incorrecte des métadonnées parent dans la table function mergeTreeProjection lorsque enable_shared_storage_snapshot_in_query = 1. Cela concerne #82634. #82638 (Amos Bird).
  • Les fonctions trim{Left,Right,Both} prennent désormais en charge les chaînes d’entrée de type “FixedString(N)”. Par exemple, SELECT trimBoth(toFixedString('abc', 3), 'ac') fonctionne désormais. #82691 (Robert Schulze).
  • Dans AzureBlobStorage, pour la copie native, nous comparons les méthodes d’authentification ; si une exception se produit pendant cette opération, le code bascule désormais vers une lecture suivie d’une copie (c.-à-d. une copie non native). #82693 (Smita Kulkarni).
  • Correction de la désérialisation de groupArraySample/groupArrayLast en cas d’éléments vides (la désérialisation pouvait ignorer une partie du binaire si l’entrée était vide, ce qui pouvait entraîner une corruption lors de la lecture des données ainsi que UNKNOWN_PACKET_FROM_SERVER dans le protocole TCP). Cela n’affecte pas les nombres ni les types date time. #82763 (Pedro Ferreira).
  • Correction du backup d’une table Memory vide, qui entraînait l’échec de la restauration du backup avec l’erreur BACKUP_ENTRY_NOT_FOUND. #82791 (Julia Kartseva).
  • Correction de la sécurité vis-à-vis des exceptions dans la réécriture union/intersect/except_default_mode. Ferme #82664. #82820 (Alexey Milovidov).
  • Suivi du nombre de jobs de chargement asynchrone des tables. S’il y a des jobs en cours d’exécution, ne pas mettre à jour tail_ptr dans TransactionLog::removeOldEntries. #82824 (Tuan Pham Anh).
  • Correction des data races dans Iceberg. #82841 (Azat Khuzhin).
  • L’optimisation du setting use_skip_indexes_if_final_exact_mode (introduite en 25.6) pouvait ne pas sélectionner une plage candidate pertinente selon les settings du moteur MergeTree ou la distribution des données. Ce problème est désormais résolu. #82879 (Shankar Iyer).
  • Définition du salt pour les données d’authentification lors de l’analyse depuis l’AST avec le type SCRAM_SHA256_PASSWORD. #82888 (Tuan Pham Anh).
  • Lors de l’utilisation d’une implémentation de Database sans mise en cache, les métadonnées de la table correspondante sont supprimées après le renvoi des colonnes et la référence est invalidée. #82939 (buyval01).
  • Correction de la modification du filtre pour les queries avec une expression JOIN sur une table utilisant le moteur Merge. Corrige #82092. #82950 (Dmitry Novik).
  • Correction de LOGICAL_ERROR dans QueryMetricLog : Mutex cannot be NULL. #82979 (Pablo Marcos).
  • Correction d’une sortie incorrecte de la fonction formatDateTime lorsque le Formatter %f est utilisé avec des Formatter de taille variable (par ex. %M). #83020 (Robert Schulze).
  • Correction d’une dégradation des performances avec l’analyzer activé lorsque les queries secondaires lisaient systématiquement toutes les colonnes des VIEWs. Corrige #81718. #83036 (Dmitry Novik).
  • Corrige un message d’erreur trompeur lors de la restauration d’une sauvegarde sur un disque en lecture seule. #83051 (Julia Kartseva).
  • Ne vérifie pas les dépendances cycliques lors d’un CREATE TABLE sans dépendances. Cela corrige la dégradation des performances dans les cas d’usage impliquant la création de milliers de tables, introduite dans https://github.com/ClickHouse/ClickHouse/pull/65405. #83077 (Pavel Kruglov).
  • Corrige un problème de lecture implicite de valeurs Time négatives dans une table et rend la documentation plus claire. #83091 (Yarik Briukhovetskyi).
  • N’utilise pas de parts sans rapport d’un dictionnaire partagé dans la fonction lowCardinalityKeys. #83118 (Alexey Milovidov).
  • Corrige la régression dans l’utilisation des sous-colonnes avec les vues matérialisées. Cela corrige : #82784. #83221 (Nikita Mikhaylov).
  • Corrige un crash du client dû à une connexion laissée dans un état déconnecté après un INSERT invalide. #83253 (Azat Khuzhin).
  • Corrige un crash lors du calcul de la taille d’un bloc contenant des colonnes vides. #83271 (Raúl Marín).
  • Corrige un crash possible du type Variant dans UNION. #83295 (Pavel Kruglov).
  • Corrige LOGICAL_ERROR dans clickhouse-local pour les requêtes SYSTEM non prises en charge. #83333 (Surya Kant Ranjan).
  • Corrige no_sign_request pour le client S3. Il peut être utilisé pour éviter explicitement de signer les requêtes S3. Il peut aussi être défini pour des points de terminaison spécifiques à l’aide de paramètres basés sur les points de terminaison. #83379 (Antonio Andelic).
  • Corrige un crash pouvant survenir pour une requête avec le paramètre ‘max_threads=1’ lorsqu’elle est exécutée sous charge avec l’ordonnancement CPU activé. #83387 (Fan Ziqi).
  • Corrige l’exception TOO_DEEP_SUBQUERIES lorsqu’une définition de CTE référence une autre expression de table portant le même nom. #83413 (Dmitry Novik).
  • Corrige le comportement incorrect où l’exécution de REVOKE S3 ON system.* révoque les permissions S3 pour *.*. Cela corrige #83417. #83420 (pufit).
  • Ne partage pas async&#95;read&#95;counters entre les requêtes. #83423 (Azat Khuzhin).
  • Désactive les répliques parallèles lorsqu’une sous-requête contient FINAL. #83455 (zoomxi).
  • Résout un léger dépassement d’entier dans la configuration du paramètre role_cache_expiration_time_seconds (issue #83374). #83461 (wushap).
  • Corrige un bug introduit dans https://github.com/ClickHouse/ClickHouse/pull/79963. Lors d’un insert dans une MV avec un definer, la vérification des permissions doit utiliser les privilèges du definer. Cela corrige #79951. #83502 (pufit).
  • Désactive l’élagage de fichiers basé sur les bornes pour les éléments de tableau Iceberg et les valeurs de map Iceberg, y compris tous leurs sous-champs imbriqués. #83520 (Daniil Ivanik).
  • Corrige de possibles erreurs « File Cache non initialisé » lorsqu’il est utilisé comme stockage temporaire de données. #83539 (Bharat Nallan).
  • Correctif Keeper : met correctement à jour le nombre total de watch lorsque des nœuds éphémères sont supprimés à la fermeture de la session. #83583 (Antonio Andelic).
  • Corrige un problème de gestion mémoire lié à max_untracked_memory. #83607 (Azat Khuzhin).
  • INSERT SELECT avec UNION ALL pouvait entraîner un déréférencement de pointeur nul dans un cas limite. Cela clôt #83618. #83643 (Alexey Milovidov).
  • Interdit la valeur zéro pour max_insert_block_size, car elle pouvait provoquer une erreur logique. #83688 (Bharat Nallan).
  • Corrige une boucle infinie dans estimateCompressionRatio() avec block_size_bytes=0. #83704 (Azat Khuzhin).
  • Corrige les métriques IndexUncompressedCacheBytes/IndexUncompressedCacheCells/IndexMarkCacheBytes/IndexMarkCacheFiles (elles étaient auparavant incluses dans une métrique sans le préfixe Cache). #83730 (Azat Khuzhin).
  • Corrige un possible abort (dû à la jonction des threads de la task) et, espérons-le, des blocages (dans les tests unitaires) lors de l’arrêt de BackgroundSchedulePool. #83769 (Azat Khuzhin).
  • Introduit un paramètre de rétrocompatibilité pour permettre au nouvel analyseur de référencer un alias externe dans la clause WITH en cas de conflit de noms. Corrige #82700. #83797 (Dmitry Novik).
  • Corrige un interblocage à l’arrêt dû à un verrouillage récursif du contexte pendant le nettoyage du library bridge. #83824 (Azat Khuzhin).

Amélioration de la compilation/des tests/du packaging

  • Construire une bibliothèque C minimale (10 Ko) pour le lexer de ClickHouse. Cela est nécessaire pour #80977. #81347 (Alexey Milovidov). Ajouter un test pour le lexer autonome, ainsi que le tag de test fasttest-only. #82472 (Yakov Olkhovskiy).
  • Ajouter une vérification des entrées du submodule Nix. #81691 (Konstantin Bogdanov).
  • Corriger une série de problèmes pouvant survenir lors de l’exécution des tests d’intégration sur localhost. #82135 (Oleg Doronin).
  • Compiler SymbolIndex sur Mac et FreeBSD. (Mais il ne fonctionnera que sur les systèmes ELF, Linux et FreeBSD). #82347 (Alexey Milovidov).
  • Mettre à niveau Azure SDK vers la version v1.15.0. #82747 (Smita Kulkarni).
  • Ajouter le module de stockage de google-cloud-cpp au système de build. #82881 (Pablo Marcos).
  • Modifier Dockerfile.ubuntu pour clickhouse-server afin de respecter les exigences de Docker Official Library. #83039 (Mikhail f. Shiryaev).
  • Suite à #83158, corriger le téléversement des builds sur curl clickhouse.com. #83463 (Mikhail f. Shiryaev).
  • Ajouter le binaire busybox et les outils d’installation dans clickhouse/clickhouse-server et les images officielles clickhouse. #83735 (Mikhail f. Shiryaev).
  • Ajouter la prise en charge de la variable d’environnement CLICKHOUSE_HOST pour spécifier l’hôte du ClickHouse server, en cohérence avec les variables d’environnement existantes CLICKHOUSE_USER et CLICKHOUSE_PASSWORD. Cela permet une configuration plus simple sans modifier directement le client ni les fichiers de configuration. #83659 (Doron David).

Version 25.6 de ClickHouse, 2025-06-26

Changement incompatible avec les versions précédentes

  • Auparavant, la fonction countMatches arrêtait le comptage à la première correspondance vide, même si le motif l’acceptait. Pour corriger ce problème, countMatches continue désormais son exécution en avançant d’un caractère lorsqu’une correspondance vide se produit. Les utilisateurs qui souhaitent conserver l’ancien comportement peuvent activer le paramètre count_matches_stop_at_empty_match. #81676 (Elmi Ahmadov).
  • Mineur : imposer que les paramètres serveur backup_threads et restore_threads soient non nuls. #80224 (Raúl Marín).
  • Mineur : correction de bitNot pour String, qui renverra une chaîne terminée par un caractère nul dans la représentation mémoire interne. Cela ne devrait pas affecter le comportement visible par l’utilisateur, mais l’auteur a souhaité signaler ce changement. #80791 (Azat Khuzhin).

Nouvelle fonctionnalité

  • Nouveaux types de données : Time ([H]HH:MM:SS) et Time64 ([H]HH:MM:SS[.fractional]), ainsi que quelques fonctions de conversion de type de base et des fonctions pour interagir avec d’autres types de données. Des paramètres ont été ajoutés pour assurer la compatibilité avec la fonction existante toTime. Le paramètre use_legacy_to_time est défini afin de conserver l’ancien comportement pour le moment. #81217 (Yarik Briukhovetskyi). La comparaison entre Time/Time64 est désormais prise en charge. #80327 (Yarik Briukhovetskyi).
  • Un nouvel outil CLI, chdig - une interface TUI pour ClickHouse (de type top) intégrée à ClickHouse. #79666 (Azat Khuzhin).
  • Prise en charge du paramètre disk pour les moteurs de base de données Atomic et Ordinary, permettant de spécifier le disque sur lequel stocker les fichiers de métadonnées des tables. #80546 (Tuan Pham Anh). Cela permet d’attacher des bases de données depuis des sources externes.
  • Un nouveau type de MergeTree, CoalescingMergeTree - le moteur prend la première valeur non-NULL lors des fusions en arrière-plan. Cela résout #78869. #79344 (scanhex12).
  • Prise en charge de fonctions permettant de lire du WKB (“Well-Known Binary” est un format d’encodage binaire de différents types géométriques, utilisé dans les applications SIG). Voir #43941. #80139 (scanhex12).
  • Ajout de l’ordonnancement par slots des requêtes pour les workloads ; voir workload scheduling pour plus de détails. #78415 (Sergei Trifonov).
  • Fonctions utilitaires timeSeries* pour accélérer certains scénarios lors du traitement de données de séries temporelles : - rééchantillonner les données sur une grille temporelle avec un timestamp de début, un timestamp de fin et un pas spécifiés - calculer les fonctions de type PromQL delta, rate, idelta et irate. #80590 (Alexander Gololobov).
  • Ajout des fonctions mapContainsValuesLike/mapContainsValues/mapExtractValuesLike pour filtrer sur les valeurs de map, ainsi que de leur prise en charge dans les index basés sur un bloom filter. #78171 (UnamedRus).
  • Désormais, les contraintes sur les paramètres peuvent spécifier un ensemble de valeurs non autorisées. #78499 (Bharat Nallan).
  • Ajout d’un paramètre enable_shared_storage_snapshot_in_query pour activer le partage du même snapshot de stockage entre toutes les sous-requêtes d’une même requête. Cela garantit des lectures cohérentes depuis la même table, même lorsque celle-ci est référencée plusieurs fois dans une requête. #79471 (Amos Bird).
  • Prise en charge de l’écriture des colonnes JSON vers Parquet et de la lecture directe des colonnes JSON depuis Parquet. #79649 (Nihal Z. Miaji).
  • Ajout de la prise en charge de MultiPolygon pour pointInPolygon. #79773 (Nihal Z. Miaji).
  • Ajoute la prise en charge des requêtes sur des tables Delta montées sur le système de fichiers local via la fonction de table deltaLakeLocal. #79781 (roykim98).
  • Ajoute le nouveau paramètre cast_string_to_date_time_mode, qui permet de choisir le mode d’analyse de DateTime lors d’une conversion depuis String. #80210 (Pavel Kruglov). Par exemple, vous pouvez le définir sur le mode best effort.
  • Ajout des fonctions bech32Encode et bech32Decode pour utiliser l’algorithme Bech de Bitcoin (issue #40381). #80239 (George Larionov).
  • Ajoute des fonctions SQL pour analyser les noms des parts MergeTree. #80573 (Mikhail Artemenko).
  • Permet de filtrer les parts sélectionnées pour une requête selon le disque sur lequel elles se trouvent, en introduisant une nouvelle colonne virtuelle, _disk_name. #80650 (tanner-bruce).
  • Ajoute une page d’accueil avec la liste des outils web intégrés. Elle s’ouvre lorsqu’elle est demandée par un user agent de type navigateur. #81129 (Alexey Milovidov).
  • Les fonctions arrayFirst, arrayFirstIndex, arrayLast et arrayLastIndex filtreront désormais les valeurs NULL renvoyées par l’expression de filtre. Dans les versions précédentes, les résultats de filtre de type Nullable n’étaient pas pris en charge. Corrige #81113. #81197 (Lennard Eijsackers).
  • Il est désormais possible d’écrire USE DATABASE name au lieu de USE name. #81307 (Yarik Briukhovetskyi).
  • Ajout d’une nouvelle table système system.codecs pour inspecter les codecs disponibles. (issue #81525). #81600 (Jimmy Aguilar Mena).
  • Prise en charge des fonctions de fenêtre lag et lead. Clôt #9887. #82108 (Dmitry Novik).
  • La fonction tokens prend désormais en charge un nouveau tokenizer, nommé split, particulièrement adapté aux logs. #80195 (Robert Schulze).
  • Ajoute la prise en charge de l’argument --database dans clickhouse-local. Vous pouvez basculer vers une base de données créée précédemment. Cela clôt #44115. #81465 (Alexey Milovidov).

Fonctionnalité expérimentale

  • Mise en œuvre, pour Kafka2, d’une logique de type rééquilibrage Kafka à l’aide de ClickHouse Keeper. Pour chaque réplique, nous prenons en charge deux types de verrous de partition : les verrous permanents et les verrous temporaires. La réplique essaie de conserver les verrous permanents aussi longtemps que possible ; à tout moment, elle ne détient pas plus de all_topic_partitions / active_replicas_count verrous permanents (ici, all_topic_partitions désigne le nombre total de partitions et active_replicas_count le nombre de répliques actives). Si elle en détient davantage, elle libère alors certaines partitions. Certaines partitions sont détenues temporairement par la réplique. Le nombre maximal de verrous temporaires sur une réplique évolue dynamiquement afin de laisser aux autres répliques la possibilité de convertir certaines partitions en verrous permanents. Lors de la mise à jour des verrous temporaires, la réplique les libère tous, puis essaie d’en reprendre d’autres. #78726 (Daria Fomina).
  • Amélioration de l’index textuel expérimental : les paramètres explicites sont désormais pris en charge via des paires clé-valeur. Actuellement, les paramètres pris en charge sont un tokenizer obligatoire et deux paramètres facultatifs, max_rows_per_postings_list et ngram_size. #80262 (Elmi Ahmadov).
  • Auparavant, le stockage packed n’était pas pris en charge pour l’index de texte intégral, car l’ID de segment était mis à jour à la volée par lecture et écriture du fichier .gin_sid sur disque. Avec le stockage packed, la lecture d’une valeur depuis le fichier non validé n’était pas prise en charge, ce qui posait problème. C’est désormais corrigé. #80852 (Elmi Ahmadov).
  • Les index expérimentaux de type gin (une appellation que je n’aime pas, car c’est une blague interne parmi les hackers de PostgreSQL) ont été renommés en text. Les index existants de type gin peuvent toujours être chargés, mais ils lèveront une exception (suggérant d’utiliser des index text à la place) lorsqu’on essaiera de les utiliser pour des recherches. #80855 (Robert Schulze).

Amélioration des performances

  • Ajoute la prise en charge du filtrage avec plusieurs projections, ce qui permet d’utiliser plus d’une projection pour le filtrage au niveau des parties. Cela corrige #55525. Il s’agit de la deuxième étape de l’implémentation de l’index de projection, après #78429. #80343 (Amos Bird).
  • Utilise par défaut la stratégie de cache SLRU dans le cache du système de fichiers. #75072 (Kseniia Sumarokova).
  • Supprime la contention à l’étape Resize du pipeline de requête. #77562 (Zhiguo Zhou).
  • Introduit une option permettant de déporter la (dé)compression et la (dé)sérialisation des blocs vers les threads du pipeline au lieu d’un seul thread associé à une connexion réseau. Contrôlé par le paramètre enable_parallel_blocks_marshalling. Cela devrait accélérer les requêtes distribuées qui transfèrent des volumes importants de données entre l’initiateur et les nœuds distants. #78694 (Nikita Taranov).
  • Amélioration des performances de tous les types de filtres de Bloom. Vidéo de la conférence OpenHouse #79800 (Delyan Kratunov).
  • Introduit un cas optimisé dans UniqExactSet::merge lorsque l’un des ensembles est vide. De plus, si l’ensemble LHS est à deux niveaux et le RHS à un seul niveau, la conversion du RHS en deux niveaux n’est plus effectuée. #79971 (Nikita Taranov).
  • Améliore l’efficacité de la réutilisation de la mémoire et réduit les défauts de page lors de l’utilisation de tables de hachage à deux niveaux. Cela vise à accélérer GROUP BY. #80245 (Jiebin Sun).
  • Évite les mises à jour inutiles et réduit la contention sur les verrous dans le cache des conditions de requête. #80247 (Jiebin Sun).
  • Optimisation triviale de concatenateBlocks. Il est probable que cela soit bénéfique au parallel hash join. #80328 (李扬).
  • Lors de la sélection de plages de marks à partir de la plage de clé primaire, la recherche binaire ne peut pas être utilisée si la clé primaire est enveloppée dans des fonctions. Cette PR améliore cette limitation : la recherche binaire peut toujours être appliquée lorsque la clé primaire est enveloppée dans une chaîne de fonctions toujours monotones, ou lorsque la RPN contient un élément toujours vrai. Clôt #45536. #80597 (zoomxi).
  • Améliore la vitesse d’arrêt du moteur Kafka (suppression du délai supplémentaire de 3 secondes en cas de plusieurs tables Kafka). #80796 (Azat Khuzhin).
  • Async inserts : réduit l’utilisation de la mémoire et améliore les performances des requêtes d’insertion. #80972 (Raúl Marín).
  • Ne profile pas les processeurs si la table de journal est désactivée. #81256 (Raúl Marín). Cela accélère les requêtes très courtes.
  • Accélère toFixedString lorsque la source correspond exactement à ce qui est demandé. #81257 (Raúl Marín).
  • Ne pas traiter les valeurs de quota si l’utilisateur n’est pas limité. #81549 (Raúl Marín). Cela accélère les requêtes très courtes.
  • Correction d’une régression des performances du suivi de la mémoire. #81694 (Michael Kolupaev).
  • Amélioration de l’optimisation de la clé de sharding dans les requêtes distribuées. #78452 (fhw12345).
  • Répliques parallèles : éviter d’attendre des répliques lentes et inutilisées si toutes les tâches de lecture ont été attribuées à d’autres répliques. #80199 (Igor Nikonov).
  • Les répliques parallèles utilisent un Connection timeout distinct ; voir le paramètre parallel_replicas_connect_timeout_ms. Auparavant, les paramètres connect_timeout_with_failover_ms/connect_timeout_with_failover_secure_ms étaient utilisés comme délais d’expiration de connexion pour les requêtes avec répliques parallèles (1 seconde par défaut). #80421 (Igor Nikonov).
  • Dans un système de fichiers avec journal, mkdir est écrit dans le journal du système de fichiers, qui est ensuite persisté sur disque. En cas de disque lent, cela peut prendre du temps. Ce traitement est déplacé hors de la portée du verrou de réservation. #81371 (Kseniia Sumarokova).
  • Reporter la lecture des fichiers manifest Iceberg jusqu’à la première requête de lecture. #81619 (Daniil Ivanik).
  • Autoriser le déplacement du prédicat GLOBAL [NOT] IN vers la clause PREWHERE lorsque c’est applicable. #79996 (Eduard Karacharov).

Amélioration

  • EXPLAIN SYNTAX utilise désormais un nouvel analyseur. Il renvoie un AST construit à partir de l’arbre de requête. Ajout de l’option query_tree_passes pour contrôler le nombre de passes à exécuter avant de convertir l’arbre de requête en AST. #74536 (Vladimir Cherkasov).
  • Implémente une sérialisation aplatie pour Dynamic et JSON au format Native, qui permet de sérialiser/désérialiser les données Dynamic et JSON sans structures spéciales comme shared variant pour Dynamic et shared data pour JSON. Cette sérialisation peut être activée en définissant output_format_native_use_flattened_dynamic_and_json_serialization. Elle peut être utilisée pour faciliter la prise en charge de Dynamic et JSON dans le protocole TCP par des clients écrits dans différents langages. #80499 (Pavel Kruglov).
  • Actualise les identifiants S3 après l’erreur AuthenticationRequired. #77353 (Vitaly Baranov).
  • Ajout de métriques de dictionnaires à system.asynchronous_metrics - DictionaryMaxUpdateDelay - le délai maximal (en secondes) de mise à jour d’un dictionnaire. - DictionaryTotalFailedUpdates - le nombre d’erreurs depuis le dernier chargement réussi parmi tous les dictionnaires. #78175 (Vlad).
  • Ajoute un avertissement concernant les bases de données potentiellement créées pour sauvegarder des tables endommagées. #78841 (János Benjamin Antal).
  • Ajoute la colonne virtuelle _time dans les moteurs S3Queue et AzureQueue. #78926 (Anton Ivashkin).
  • Rend rechargeables à chaud les paramètres qui contrôlent l’interruption des connexions en cas de surcharge CPU. #79052 (Alexey Katsman).
  • Ajoute le préfixe du conteneur aux chemins de données signalés dans system.tables pour les disques simples dans Azure Blob Storage, afin d’harmoniser le reporting avec S3 et GCP. #79241 (Julia Kartseva).
  • Désormais, clickhouse-client et local acceptent aussi les paramètres de requête sous la forme param-<name> (tiret), en plus de param_<name> (underscore). Cela clôt #63093. #79429 (Engel Danila).
  • Ajoute un message d’avertissement détaillé concernant la réduction de bande passante lors de la copie de données du local vers S3 distant avec checksum activé. #79464 (VicoWu).
  • Auparavant, lorsque input_format_parquet_max_block_size = 0 (une valeur invalide), ClickHouse restait bloqué. Ce comportement est désormais corrigé. Cela clôt #79394. #79601 (abashkeev).
  • Ajoute le paramètre throw_on_error pour startup_scripts : lorsque throw_on_error vaut true, le serveur ne démarrera pas tant que toutes les requêtes ne se seront pas terminées avec succès. Par défaut, throw_on_error vaut false, ce qui préserve le comportement précédent. #79732 (Aleksandr Musorin).
  • Permet d’ajouter http_response_headers à des http_handlers de tout type. #79975 (Andrey Zvonov).
  • La fonction reverse prend désormais en charge le type de données Tuple. Clôt #80053. #80083 (flynn).
  • Résout #75817 : permet d’obtenir les données auxiliary_zookeepers depuis la table system.zookeeper. #80146 (Nikolay Govorov).
  • Ajoute des métriques asynchrones sur les sockets TCP du serveur. Cela améliore l’observabilité. Clôt #80187. #80188 (Alexey Milovidov).
  • Prend en charge anyLast_respect_nulls et any_respect_nulls comme SimpleAggregateFunction. #80219 (Diskein).
  • Supprime l’appel inutile à adjustCreateQueryForBackup pour les bases de données Replicated. #80282 (Vitaly Baranov).
  • Permet d’utiliser des options supplémentaires (placées après --, par exemple -- --config.value='abc') dans clickhouse-local sans signe égal. Clôt #80292. #80293 (Alexey Milovidov).
  • Met en évidence les métacaractères dans les requêtes SHOW ... LIKE. Cela clôt #80275. #80297 (Alexey Milovidov).
  • Rend les UDF SQL persistantes dans clickhouse-local. La fonction créée précédemment sera chargée au démarrage. Cela clôt #80085. #80300 (Alexey Milovidov).
  • Corrige la description dans le plan EXPLAIN pour l’étape DISTINCT préliminaire. #80330 (UnamedRus).
  • Permet d’utiliser les named collections dans ODBC/JDBC. #80334 (Andrey Zvonov).
  • Ajoute des métriques sur le nombre de disks readonly et défectueux. Journalise un indicateur lorsque DiskLocalCheckThread démarre. #80391 (VicoWu).
  • Implémente la prise en charge du stockage s3_plain_rewritable avec les projections. Dans les versions précédentes, les objets de métadonnées dans S3 faisant référence à des projections n’étaient pas mis à jour lors de leur déplacement. Clôt #70258. #80393 (Sav).
  • La commande SYSTEM UNFREEZE ne tentera pas de rechercher des parts sur les disks readonly et en écriture unique. Cela clôt #80430. #80432 (Alexey Milovidov).
  • Abaisse le log level des messages concernant les merged parts. #80476 (Hans Krutzer).
  • Modifie le comportement par défaut du partition pruning pour les tables Iceberg. #80583 (Melvyn Peignon).
  • Ajoute deux nouveaux ProfileEvents pour l’observabilité de l’algorithme de recherche d’index : IndexBinarySearchAlgorithm et IndexGenericExclusionSearchAlgorithm. #80679 (Pablo Marcos).
  • Ne pas signaler dans les logs l’absence de prise en charge de MADV_POPULATE_WRITE sur les anciens noyaux (pour éviter de polluer les logs). #80704 (Robert Schulze).
  • Ajout de la prise en charge de Date32 et DateTime64 dans les expressions TTL. #80710 (Andrey Zvonov).
  • Ajustement des valeurs de compatibilité pour max_merge_delayed_streams_for_parallel_write. #80760 (Azat Khuzhin).
  • Correction d’un crash : si une exception est levée lors d’une tentative de suppression d’un fichier temporaire (utilisé pour le spilling de données temporaires sur disque) dans le destructeur, le programme peut s’arrêter. #80776 (Alexey Milovidov).
  • Ajout du modificateur IF EXISTS à SYSTEM SYNC REPLICA. #80810 (Raúl Marín).
  • Message d’exception concernant “Having zero bytes, but read range is not finished…” enrichi, ajout de la colonne finished_download_time à system.filesystem_cache. #80849 (Kseniia Sumarokova).
  • Ajout d’une section sur l’algorithme de recherche dans la sortie de EXPLAIN lorsqu’il est utilisé avec indexes = 1. Elle affiche soit “binary search”, soit “generic exclusion search”. #80881 (Pablo Marcos).
  • Au début de 2024, prefer_column_name_to_alias était codé en dur à true pour le handler MySQL, car le nouvel analyzer n’était pas activé par défaut. Ce codage en dur peut désormais être supprimé. #80916 (Yarik Briukhovetskyi).
  • Désormais, system.iceberg_history affiche l’historique des bases de données des catalogs comme glue ou iceberg rest. Les colonnes table_name et database_name ont également été renommées en table et database dans system.iceberg_history pour plus de cohérence. #80975 (alesapin).
  • Autoriser le mode read-only pour la table function merge, afin que le grant CREATE TEMPORARY TABLE ne soit pas requis pour l’utiliser. #80981 (Miсhael Stetsyuk).
  • Meilleure introspection des caches en mémoire (les informations sur les caches sont exposées dans system.metrics plutôt que dans system.asynchronouse_metrics, qui est incomplet). Ajout de la taille des caches en mémoire (en octets) dans dashboard.html. VectorSimilarityIndexCacheSize/IcebergMetadataFilesCacheSize a été renommé en VectorSimilarityIndexCacheBytes/IcebergMetadataFilesCacheBytes. #81023 (Azat Khuzhin).
  • Ignorer les bases de données avec des engines qui ne peuvent pas contenir de tables RocksDB lors de la lecture de system.rocksdb. #81083 (Pervakov Grigorii).
  • Autoriser filesystem_caches et named_collections dans le fichier de configuration de clickhouse-local. #81105 (Alexey Milovidov).
  • Correction de la mise en évidence de PARTITION BY dans les queries INSERT. Dans les versions précédentes, PARTITION BY n’était pas mis en évidence comme mot-clé. #81106 (Alexey Milovidov).
  • Deux petites améliorations dans l’interface Web : - gestion correcte des requêtes sans sortie, comme CREATE, INSERT (jusqu’à récemment, ces requêtes entraînaient un indicateur de chargement infini) ; - lors d’un double-clic sur une table, défilement jusqu’en haut. #81131 (Alexey Milovidov).
  • La métrique MemoryResidentWithoutPageCache fournit la quantité de mémoire physique utilisée par le processus serveur, hors userspace page cache, en octets. Cela offre une vue plus précise de l’utilisation réelle de la mémoire lorsque le userspace page cache est utilisé. Lorsque le userspace page cache est désactivé, cette valeur est égale à MemoryResident. #81233 (Jayme Bird).
  • Marquer comme journalisées les exceptions enregistrées manuellement dans le client, le serveur local, le client Keeper et l’application disks, afin qu’elles ne soient pas journalisées deux fois. #81271 (Miсhael Stetsyuk).
  • Les paramètres use_skip_indexes_if_final et use_skip_indexes_if_final_exact_mode ont désormais True comme valeur par défaut. Les requêtes avec la clause FINAL utiliseront désormais des skip indexes (le cas échéant) pour présélectionner les granules et liront également les granules supplémentaires correspondant aux plages de clé primaire correspondantes. Les utilisateurs qui ont besoin de l’ancien comportement avec des résultats approximatifs/imprécis peuvent définir use_skip_indexes_if_final_exact_mode sur FALSE après une évaluation attentive. #81331 (Shankar Iyer).
  • Lorsque vous avez plusieurs requêtes dans l’interface Web, celle située sous le curseur sera exécutée. Suite de #80977. #81354 (Alexey Milovidov).
  • Cette PR corrige des problèmes liés à l’implémentation de is_strict dans les vérifications de monotonie des fonctions de conversion. Actuellement, certaines fonctions de conversion, telles que toFloat64(UInt32) et toDate(UInt8), renvoient à tort is_strict à false alors qu’elles devraient renvoyer true. #81359 (zoomxi).
  • Lors de la vérification de la correspondance entre une KeyCondition et une plage continue, si la clé est enveloppée dans une chaîne de fonctions non stricte, un Constraint::POINT peut devoir être converti en Constraint::RANGE. Par exemple : toDate(event_time) = '2025-06-03' implique une plage pour event_time : [‘2025-06-03 00:00:00’, ‘2025-06-04 00:00:00’). Cette PR corrige ce comportement. #81400 (zoomxi).
  • Les alias clickhouse/ch invoqueront clickhouse-client au lieu de clickhouse-local si --host ou --port sont spécifiés. Suite de #79422. Résout #65252. #81509 (Alexey Milovidov).
  • Maintenant que nous disposons des données de distribution du temps de réponse de Keeper, nous pouvons ajuster les buckets de l’histogramme pour les métriques. #81516 (Miсhael Stetsyuk).
  • Ajout de l’événement de profil PageCacheReadBytes. #81742 (Kseniia Sumarokova).
  • Correction d’une erreur logique dans le filesystem cache : “Having zero bytes but range is not finished”. #81868 (Kseniia Sumarokova).

Correction de bug (comportement incorrect visible par l’utilisateur dans une version stable officielle)

  • Correction d’une parameterized view avec une requête SELECT EXCEPT. Clôture #49447. #57380 (Nikolay Degterinsky).
  • Analyzer : correction du nom de la projection de colonne après promotion du type de colonne dans une jointure. Clôture #63345. #63519 (Dmitry Novik).
  • Correction d’une erreur logique en cas de conflit de noms de colonnes lorsque analyzer_compatibility_join_using_top_level_identifier est activé. #75676 (Vladimir Cherkasov).
  • Correction de l’utilisation des CTE dans les prédicats poussés vers le bas lorsque allow_push_predicate_ast_for_distributed_subqueries est activé. Corrige #75647. Corrige #79672. #77316 (Dmitry Novik).
  • Correction d’un problème où SYSTEM SYNC REPLICA LIGHTWEIGHT ‘foo’ signalait un succès même lorsque la replica spécifiée n’existait pas. La commande vérifie désormais correctement que la replica existe dans Keeper avant de tenter la synchronisation. #78405 (Jayme Bird).
  • Correction d’un crash dans un cas très spécifique où la fonction currentDatabase était utilisée dans des sections CONSTRAINT pour des queries ON CLUSTER. Clôture #78100. #79070 (pufit).
  • Correction de la transmission des rôles externes dans les queries inter-serveurs. #79099 (Andrey Zvonov).
  • Utilise IColumn au lieu de Field dans SingleValueDataGeneric. Cela corrige des valeurs de retour incorrectes pour certaines aggregate functions comme argMax pour les types Dynamic/Variant/JSON. #79166 (Pavel Kruglov).
  • Correction de l’application des paramètres use_native_copy et allow_azure_native_copy pour Azure blob storage, avec mise à jour pour n’utiliser la copie native que lorsque les credentials correspondent. Corrige #78964. #79561 (Smita Kulkarni).
  • Correction d’erreurs logiques liées à une portée d’origine inconnue d’une colonne, produites lors de la vérification du caractère correlated de cette colonne. Corrige #78183. Corrige #79451. #79727 (Dmitry Novik).
  • Correction de résultats incorrects pour les grouping sets avec ColumnConst et Analyzer. #79743 (Andrey Zvonov).
  • Correction de la duplication du résultat du shard local lors de la lecture depuis une distributed table avec une replica locale stale. #79761 (Eduard Karacharov).
  • Correction de l’ordre de tri des NaN avec un bit de signe négatif. #79847 (Pervakov Grigorii).
  • Désormais, GROUP BY ALL ne tient plus compte de la partie GROUPING. #79915 (Yarik Briukhovetskyi).
  • Correction d’une fusion d’états incorrecte pour les fonctions TopK / TopKWeighted, qui provoquait des valeurs d’erreur excessives même lorsque la capacité n’était pas atteinte. #79939 (Joel Höner).
  • Respect du paramètre readonly dans l’object storage azure_blob_storage. #79954 (Julia Kartseva).
  • Correction de résultats de query incorrects et de plantages par manque de mémoire lors de l’utilisation de match(column, '^…') avec des caractères échappés par une barre oblique inversée. #79969 (filimonov).
  • Désactivation du partitionnement Hive pour les data lakes. Corrige partiellement https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7C79937. #80005 (Daniil Ivanik).
  • Les skip indexes avec des expressions lambda ne pouvaient pas être appliqués. Correction du cas où les fonctions de haut niveau dans la définition de l’index correspondent exactement à celles de la query. #80025 (Nikolai Kochetov).
  • Correction de la version des métadonnées lors de l’attach d’une part sur la replica exécutant la commande ATTACH_PART depuis le journal de réplication. #80038 (Aleksei Filatov).
  • Les noms des Executable User Defined Functions (eUDF) ne sont pas ajoutés à la colonne used_functions de la table system.query_log, contrairement aux autres fonctions. Cette PR ajoute le nom de l’eUDF si l’eUDF a été utilisée dans la requête. #80073 (Kyamran).
  • Correction d’une logical error dans le Arrow format avec LowCardinality(FixedString). #80156 (Pavel Kruglov).
  • Correction de la lecture des subcolumns depuis le moteur Merge. #80158 (Pavel Kruglov).
  • Correction d’un bug dans la comparaison entre types numériques dans KeyCondition. #80207 (Yarik Briukhovetskyi).
  • Correction de AMBIGUOUS_COLUMN_NAME lorsque la lazy materialization est appliquée à une table avec des projections. #80251 (Igor Nikonov).
  • Correction d’une optimisation de comptage incorrecte pour les filtres de préfixe de chaîne comme LIKE ‘ab_c%’ lors de l’utilisation de projections implicites. Cela corrige #80250. #80261 (Amos Bird).
  • Correction d’une sérialisation incorrecte de champs numériques imbriqués en chaînes dans des documents MongoDB. Suppression de la limite de profondeur maximale pour les documents MongoDB. #80289 (Kirill Nikiforov).
  • Vérifications des métadonnées moins strictes pour RMT dans la base de données Replicated. Clôt #80296. #80298 (Nikolay Degterinsky).
  • Correction de la représentation textuelle de DateTime et DateTime64 pour le stockage PostgreSQL. #80301 (Yakov Olkhovskiy).
  • Autorise DateTime avec fuseau horaire dans les tables StripeLog. Cela résout #44120. #80304 (Alexey Milovidov).
  • Désactive le filter-push-down pour les prédicats contenant une fonction non déterministe lorsque l’étape du plan de requête modifie le nombre de lignes. Corrige #40273. #80329 (Nikolai Kochetov).
  • Corrige de possibles erreurs logiques et plantages dans les projections avec des sous-colonnes. #80333 (Pavel Kruglov).
  • Corrige l’erreur NOT_FOUND_COLUMN_IN_BLOCK causée par l’optimisation du filter-push-down à l’étape logique de JOIN lorsque l’expression ON n’est pas une égalité triviale. Corrige #79647 Corrige #77848. #80360 (Nikolai Kochetov).
  • Corrige un résultat incorrect lors de la lecture de clés triées dans l’ordre inverse dans des tables partitionnées. Cela corrige #79987. #80448 (Amos Bird).
  • Corrige un tri incorrect dans les tables avec une clé Nullable et optimize_read_in_order activé. #80515 (Pervakov Grigorii).
  • Corrige le blocage de DROP d’une vue matérialisée rafraîchissable si la vue avait été mise en pause avec SYSTEM STOP REPLICATED VIEW. #80543 (Michael Kolupaev).
  • Corrige l’erreur ‘Cannot find column’ avec un Tuple constant dans une requête distribuée. #80596 (Yakov Olkhovskiy).
  • Corrige la fonction shardNum dans les tables Distributed avec join_use_nulls. #80612 (János Benjamin Antal).
  • Corrige un résultat incorrect lors de la lecture d’une colonne présente uniquement dans un sous-ensemble de tables avec le moteur Merge. #80643 (Pavel Kruglov).
  • Corrige un possible problème avec le protocole SSH (en raison d’un blocage dans replxx). #80688 (Azat Khuzhin).
  • Le timestamp dans la table iceberg_history devrait désormais être correct. #80711 (Melvyn Peignon).
  • Corrige un possible plantage en cas d’échec de l’enregistrement du dictionnaire (lorsque CREATE DICTIONARY échouait avec CANNOT_SCHEDULE_TASK, un pointeur pendant pouvait rester dans le registre des dictionnaires, ce qui entraînait ensuite un plantage). #80714 (Azat Khuzhin).
  • Corrige la gestion des globs enum à un seul élément dans les table functions pour le object storage. #80716 (Konstantin Bogdanov).
  • Corrige le type de résultat incorrect des fonctions de comparaison avec Tuple(Dynamic) et String, qui entraînait une erreur logique. #80728 (Pavel Kruglov).
  • Ajout de la prise en charge manquante du type de données timestamp_ntz pour Unity Catalog. Corrige #79535, #79875. #80740 (alesapin).
  • Correction de l’erreur THERE_IS_NO_COLUMN pour les requêtes distribuées avec IN cte. Corrige #75032. #80757 (Nikolai Kochetov).
  • Correction d’un nombre excessif de fichiers (entraînant une consommation mémoire excessive) pour ORDER BY externe. #80777 (Azat Khuzhin).
  • Cette PR pourrait clore #80742. #80783 (zoomxi).
  • Correction d’un crash dans Kafka dû au fait que get_member_id() créait une std::string à partir de NULL (le problème ne survenait probablement qu’en cas d’échec de connexion au broker). #80793 (Azat Khuzhin).
  • Attente correcte des consumers avant l’arrêt du Kafka engine (des consumers actifs après l’arrêt peuvent déclencher diverses assertions de Débogage et peuvent aussi lire des données depuis les brokers en arrière-plan après la suppression/le détachement de la table). #80795 (Azat Khuzhin).
  • Correction de NOT_FOUND_COLUMN_IN_BLOCK, provoquée par l’optimisation predicate-push-down. Corrige #80443. #80834 (Nikolai Kochetov).
  • Correction d’une erreur logique lors de la résolution du sélecteur étoile (*) dans une table function dans un JOIN avec USING. #80894 (Vladimir Cherkasov).
  • Correction de la comptabilisation mémoire pour le cache des fichiers de métadonnées Iceberg. #80904 (Azat Khuzhin).
  • Correction d’un partitionnement incorrect avec une clé de partition Nullable. #80913 (Pervakov Grigorii).
  • Correction de l’erreur Table does not exist pour les requêtes distribuées avec prédicat poussé vers le bas (allow_push_predicate_ast_for_distributed_subqueries=1) lorsque la table source n’existe pas sur l’initiateur. Corrige #77281. #80915 (Nikolai Kochetov).
  • Correction d’une erreur logique dans les fonctions imbriquées avec des fenêtres nommées. #80926 (Pervakov Grigorii).
  • Correction des extrêmes pour les colonnes Nullable et à virgule flottante. #80970 (Pervakov Grigorii).
  • Correction d’un crash possible lors de l’exécution d’une requête sur system.tables (probablement en cas de pression mémoire). #80976 (Azat Khuzhin).
  • Correction du renommage atomic avec truncate pour les fichiers dont la compression est déduite de leur extension. #80979 (Pablo Marcos).
  • Correction de ErrorCodes::getName. #81032 (RinChanNOW).
  • Correction d’un bug empêchant l’utilisateur de lister les tables dans Unity Catalog sans disposer des permissions sur l’ensemble d’entre elles. Désormais, toutes les tables sont correctement listées ; toute tentative de lecture d’une table restreinte lèvera une exception. #81044 (alesapin).
  • Désormais, ClickHouse ignorera les erreurs et les réponses inattendues des catalogues de data lake dans la requête SHOW TABLES. Corrige #79725. #81046 (alesapin).
  • Correction de l’analyse de DateTime64 à partir d’entiers dans JSONExtract et lors de l’analyse du type JSON. #81050 (Pavel Kruglov).
  • Prise en compte du paramètre date_time_input_format dans le cache d’inférence de schéma. #81052 (Pavel Kruglov).
  • Correction d’un crash sur INSERT si la table avait été DROP après le démarrage de la requête, mais avant l’envoi des colonnes. #81053 (Azat Khuzhin).
  • Correction d’une utilisation de valeur non initialisée dans quantileDeterministic. #81062 (Azat Khuzhin).
  • Correction de la gestion du nombre de hardlinks pour les transactions du disk metadatastoragefromdisk. Ajout de tests. #81066 (Sema Checherinda).
  • Les noms des User Defined Functions (UDF) ne sont pas ajoutés à la table system.query_log, contrairement aux autres fonctions. Cette PR ajoute le nom de l’UDF à l’une des deux colonnes used_executable_user_defined_functions ou used_sql_user_defined_functions si l’UDF a été utilisée dans la requête. #81101 (Kyamran).
  • Correction des erreurs Too large size ... passed to allocator ou des crashs possibles sur les inserts via HTTP protocol avec des text formats (JSON, Values, …) et des champs Enum omis. #81145 (Anton Popov).
  • Correction de LOGICAL_ERROR dans le cas d’une colonne Sparse dans un block INSERT envoyé vers une MV non-MT. #81161 (Azat Khuzhin).
  • Correction de Unknown table expression identifier pour distributed_product_mode_local=local avec réplication croisée. #81162 (Nikolai Kochetov).
  • Correction de la mise en cache incorrecte du nombre de lignes dans les fichiers Parquet après filtrage. #81184 (Michael Kolupaev).
  • Correction du paramètre fs cache max_size_to_total_space lorsqu’il est utilisé avec un chemin de cache relatif. #81237 (Kseniia Sumarokova).
  • Correction d’un crash de clickhouse-local lors de la sortie de tuples ou de maps constants au format Parquet. #81249 (Michael Kolupaev).
  • Vérification des offsets de tableaux reçus via le réseau. #81269 (Azat Khuzhin).
  • Corrige certains cas limites dans les requêtes qui effectuent des jointures sur des tables vides et utilisent des fonctions de fenêtre. Le bug entraîne une explosion du nombre de flux parallèles, ce qui provoque des OOM. #81299 (Alexander Gololobov).
  • Correctifs pour les fonctions Cluster de data lake (deltaLakeCluster, icebergCluster, etc.) : (1) correction d’un segfault potentiel dans DataLakeConfiguration lors de l’utilisation de la fonction Cluster avec l’ancien analyzer ; (2) suppression des mises à jour dupliquées des métadonnées du data lake (requêtes supplémentaires vers l’object storage) ; (3) correction d’un listage redondant dans l’object storage lorsque le format n’est pas explicitement spécifié (ce qui avait déjà été fait pour les engines de data lake non cluster). #81300 (Kseniia Sumarokova).
  • Fait en sorte que l’indicateur force_restore_data récupère les métadonnées Keeper perdues. #81324 (Raúl Marín).
  • Corrige une erreur de Region dans delta-kernel. Corrige #79914. #81353 (Kseniia Sumarokova).
  • Désactive le JIT incorrect pour divideOrNull. #81370 (Raúl Marín).
  • Corrige une erreur d’insert lorsqu’une table MergeTree a un nom de colonne de partition long. #81390 (hy123q).
  • Rétroporté dans #81957 : correction d’un crash possible dans Aggregator en cas d’exception pendant le merge. #81450 (Nikita Taranov).
  • Ne stocke pas le contenu de plusieurs manifest files en mémoire. #81470 (Daniil Ivanik).
  • Corrige un crash possible lors de l’arrêt des background pools (background_.*pool_size). #81473 (Azat Khuzhin).
  • Corrige une lecture hors limites dans le format Npy survenant lors de l’écriture dans une table avec le moteur URL. Cela clôt #81356. #81502 (Alexey Milovidov).
  • Il est possible que la Web UI affiche NaN% (problèmes JavaScript typiques). #81507 (Alexey Milovidov).
  • Corrige DatabaseReplicated pour database_replicated_enforce_synchronous_settings=1. #81564 (Azat Khuzhin).
  • Corrige l’ordre de tri pour les types LowCardinality(Nullable(...)). #81583 (Pervakov Grigorii).
  • Le server ne doit pas conserver une HTTP connection si la requête n’a pas été entièrement lue depuis le socket. #81595 (Sema Checherinda).
  • Fait en sorte que les sous-requêtes corrélées scalaires renvoient un résultat nullable de l’expression de projection. Corrige le cas où une sous-requête corrélée produit un result set vide. #81632 (Dmitry Novik).
  • Correction de Unexpected relative path for a deduplicated part lors de ATTACH vers ReplicatedMergeTree. #81647 (Azat Khuzhin).
  • Le paramètre de requête use_iceberg_partition_pruning n’est pas pris en compte pour le stockage Iceberg, car il utilise le contexte global plutôt que le contexte de la requête. Ce n’est pas critique, car sa valeur par défaut est true. Cette PR corrige le problème. #81673 (Han Fei).
  • Rétroporté dans #82128 : correction de “Context has expired” pendant les merges lorsqu’un dict est utilisé dans une expression TTL. #81690 (Azat Khuzhin).
  • Ajout d’une validation pour le paramètre MergeTree merge_max_block_size afin de garantir qu’il n’est pas nul. #81693 (Bharat Nallan).
  • Correction de problèmes dans clickhouse-local liés à des requêtes DROP VIEW bloquées. #81705 (Bharat Nallan).
  • Correction du join de StorageRedis dans certains cas. #81736 (Pervakov Grigorii).
  • Correction d’un crash dans ConcurrentHashJoin avec USING () vide et l’ancien analyseur activé. #81754 (Nikita Taranov).
  • Correction dans Keeper : blocage des commits de nouveaux logs en présence d’une entrée invalide dans les logs. Auparavant, si le leader appliquait certains logs de manière incorrecte, il continuait à commit de nouveaux logs, même si le follower détectait une incohérence de digest et s’arrêtait. #81780 (Antonio Andelic).
  • Correction du problème où les columns requises n’étaient pas lues pendant le traitement des sous-requêtes corrélées scalaires. Corrige #81716. #81805 (Dmitry Novik).
  • Quelqu’un a mis du Kusto partout dans notre code. Cela a été nettoyé. Cela clôt #81643. #81885 (Alexey Milovidov).
  • Dans les versions précédentes, le server renvoyait un contenu excessif pour les requêtes vers /js. Cela clôt #61890. #81895 (Alexey Milovidov).
  • Auparavant, les définitions du table engine MongoDB pouvaient inclure un composant de chemin dans l’argument host:port, qui était ignoré sans avertissement. L’integration MongoDB refusait de charger de telles tables. Avec cette correction, nous autorisons le chargement de telles tables et ignorons le composant de chemin si le moteur MongoDB a cinq arguments, en utilisant le nom de la base de données fourni dans les arguments. Remarque : la correction ne s’applique pas aux tables nouvellement créées ni aux requêtes utilisant la table function mongo, ni aux dictionary sources et aux named collections. #81942 (Vladimir Cherkasov).
  • Correction d’un crash possible dans Aggregator en cas d’exception pendant un merge. #82022 (Nikita Taranov).
  • Correction d’une erreur de copier-coller dans arraySimilarity, qui interdisait l’utilisation des weights UInt32 et Int32. Mise à jour des tests et de la documentation. #82103 (Mikhail f. Shiryaev).
  • Correction d’une possible condition de concurrence entre le thread de suggestion et le thread principal du client. #82233 (Azat Khuzhin).

Amélioration de la compilation/des tests/du packaging

Version 25.5 de ClickHouse, 2025-05-22

Changement incompatible avec les versions précédentes

  • La fonction geoToH3 accepte désormais les entrées dans l’ordre (lat, lon, res) (ce qui est courant pour d’autres fonctions géométriques). Les utilisateurs qui souhaitent conserver l’ordre de résultat précédent (lon, lat, res) peuvent définir le paramètre geotoh3_argument_order = 'lon_lat'. #78852 (Pratima Patel).
  • Ajout d’un paramètre de cache du système de fichiers, allow_dynamic_cache_resize, false par défaut, pour permettre le redimensionnement dynamique du cache du système de fichiers. Pourquoi : dans certains environnements (ClickHouse Cloud), tous les événements de scaling passent par un redémarrage du processus, et nous souhaitons que cette fonctionnalité soit explicitement désactivée afin de mieux contrôler le comportement, ainsi que par mesure de sécurité. Cette PR est marquée comme non rétrocompatible, car dans les anciennes versions, le redimensionnement dynamique du cache fonctionnait par défaut sans paramètre spécifique. #79148 (Kseniia Sumarokova).
  • Suppression de la prise en charge des types d’index hérités annoy et usearch. Les deux n’étaient plus que des stubs depuis longtemps, c.-à-d. que toute tentative d’utilisation de ces index hérités renvoyait de toute façon une erreur. Si vous avez encore des index annoy et usearch, veuillez les supprimer. #79802 (Robert Schulze).
  • Suppression du paramètre serveur format_alter_commands_with_parentheses. Ce paramètre a été introduit et désactivé par défaut en version 24.2. Il a été activé par défaut en version 25.2. Comme il n’existe aucune version LTS qui ne prenne pas en charge le nouveau format, nous pouvons supprimer ce paramètre. #79970 (János Benjamin Antal (János Benjamin Antal).
  • Active par défaut l’implémentation delta-kernel-rs du stockage DeltaLake. #79541 (Kseniia Sumarokova).
  • Si la lecture depuis une URL implique plusieurs redirections, le paramètre enable_url_encoding est correctement appliqué à toutes les redirections de la chaîne. #79563 (Shankar Iyer). La valeur par défaut du paramètre enble_url_encoding est désormais false. #80088 (Shankar Iyer).

Nouvelle fonctionnalité

  • Prise en charge des sous-requêtes corrélées scalaires dans la clause WHERE. Clôt #6697. #79600 (Dmitry Novik). Prise en charge des sous-requêtes corrélées dans la liste de projection dans les cas simples. #79925 (Dmitry Novik). #76078 (Dmitry Novik). La couverture de la suite de tests TPC-H atteint désormais 100 %.
  • La recherche vectorielle utilisant l’index de similarité vectorielle est désormais en bêta (elle était auparavant expérimentale). #80164 (Robert Schulze).
  • Prise en charge des types Geo au format Parquet. Cela clôt #75317. #79777 (scanhex12).
  • Nouvelles fonctions sparseGrams, sparseGramsHashes, sparseGramsHashesUTF8, sparseGramsUTF8 pour calculer des « sparse-ngrams » — un algorithme robuste pour extraire des sous-chaînes à des fins d’indexation et de recherche. #79517 (scanhex12).
  • clickhouse-local (et sa forme abrégée ch) utilise désormais un FROM table implicite lorsqu’il y a des données d’entrée à traiter. Cela clôt #65023. L’inférence du format a également été activée dans clickhouse-local si --input-format n’est pas spécifié et qu’il traite un fichier ordinaire. #79085 (Alexey Milovidov).
  • Ajout des fonctions stringBytesUniq et stringBytesEntropy pour rechercher des données potentiellement aléatoires ou chiffrées. #79350 (Sachin Kumar Singh).
  • Ajout de fonctions d’encodage et de décodage en base32. #79809 (Joanna Hulboj).
  • Ajout des fonctions getServerSetting et getMergeTreeSetting. Clôt #78318. #78439 (NamNguyenHoai).
  • Ajout du nouveau paramètre iceberg_enable_version_hint pour exploiter le fichier version-hint.text. #78594 (Arnaud Briche).
  • Permet de tronquer des tables spécifiques d’une base de données, filtrées avec le mot-clé LIKE. #78597 (Yarik Briukhovetskyi).
  • Prise en charge de la colonne virtuelle _part_starting_offset dans les tables de la famille MergeTree. Cette colonne représente le nombre cumulé de lignes de toutes les parts précédentes, calculé au moment de la requête à partir de la liste actuelle des parts. Les valeurs cumulées sont conservées pendant toute l’exécution de la requête et restent valides même après le part pruning. La logique interne correspondante a été remaniée pour prendre en charge ce comportement. #79417 (Amos Bird).
  • Ajout des fonctions divideOrNull,moduloOrNull, intDivOrNull,positiveModuloOrNull pour renvoyer NULL lorsque l’argument de droite est égal à zéro. #78276 (kevinyhzou).
  • La recherche vectorielle de ClickHouse prend désormais en charge à la fois le pré-filtrage et le post-filtrage, et fournit les paramètres associés pour un contrôle plus fin. (issue #78161). #79854 (Shankar Iyer).
  • Ajout des fonctions icebergHash et icebergBucket. Prise en charge de l’élagage des fichiers de données dans les tables Iceberg partitionnées à l’aide de la transformation bucket. #79262 (Daniil Ivanik).

Fonctionnalité expérimentale

  • Nouveaux types de données Time/Time64 : Time (HHH:MM:SS) et Time64 (HHH:MM:SS.<fractional>), ainsi que quelques fonctions de conversion de base et des fonctions permettant d’interagir avec d’autres types de données. En outre, le nom de la fonction existante a été changé de toTime en toTimeWithFixedDate, car la fonction toTime est requise pour la fonction de conversion. #75735 (Yarik Briukhovetskyi). 72459).
  • Catalogue metastore Hive pour le datalake Iceberg. #77677 (scanhex12).
  • Les index de type full_text ont été renommés en gin. Cela reprend une terminologie plus familière dans PostgreSQL et d’autres bases de données. Les index existants de type full_text peuvent toujours être chargés, mais ils déclencheront une exception (suggérant à la place des index gin) si l’on tente de les utiliser pour des recherches. #79024 (Robert Schulze).

Amélioration des performances

  • Modifie le format des parts compactes pour enregistrer des marques pour chaque sous-flux, afin de permettre la lecture de sous-colonnes individuelles. L’ancien format compact reste pris en charge en lecture et peut être activé en écriture à l’aide du paramètre MergeTree write_marks_for_substreams_in_compact_parts. Il est désactivé par défaut pour sécuriser les montées de version, car il modifie le stockage des parts compactes. Il sera activé par défaut dans l’une des prochaines versions. #77940 (Pavel Kruglov).
  • Permet de déplacer vers prewhere les conditions portant sur des sous-colonnes. #79489 (Pavel Kruglov).
  • Accélère les index secondaires en évaluant leurs expressions sur plusieurs granules à la fois. #64109 (Alexey Milovidov).
  • Active compile_expressions (compilateur JIT pour des fragments d’expressions ordinaires) par défaut. Cela clôt #51264, #56386 et #66486. #79907 (Alexey Milovidov).
  • Nouveau paramètre introduit : use_skip_indexes_in_final_exact_mode. Si une requête sur une table ReplacingMergeTree comporte la clause FINAL, lire uniquement les plages de table à partir des skip indexes peut produire un résultat incorrect. Ce paramètre permet de garantir des résultats corrects en analysant les parts les plus récentes qui chevauchent les plages de clés primaires renvoyées par le skip index. Définissez 0 pour désactiver, 1 pour activer. #78350 (Shankar Iyer).
  • Les table functions de cluster pour le stockage objet (par ex. s3Cluster) attribuent désormais les fichiers aux répliques pour la lecture à l’aide d’un consistent hash afin d’améliorer la localité du cache. #77326 (Andrej Hoos).
  • Améliore les performances de S3Queue/AzureQueue en permettant des INSERT en parallèle (activation possible avec le paramètre de queue parallel_inserts=true). Auparavant, S3Queue/AzureQueue ne pouvait exécuter en parallèle que la première partie du pipeline (téléchargement, parsing) ; les INSERT étaient single-threaded. Or, les INSERT sont presque toujours le goulot d’étranglement. Désormais, les performances évolueront de façon presque linéaire avec processing_threads_num. #77671 (Azat Khuzhin). max_processed_files_before_commit plus équitable dans S3Queue/AzureQueue. #79363 (Azat Khuzhin).
  • Introduit un seuil (réglé par le paramètre parallel_hash_join_threshold) pour revenir à l’algorithme hash lorsque la taille de la table de droite est inférieure à ce seuil. #76185 (Nikita Taranov).
  • Utilise désormais le nombre de répliques pour déterminer la taille des tâches lors de la lecture avec les répliques parallèles activées. Cela assure une meilleure répartition du travail entre les répliques lorsque la quantité de données à lire n’est pas très importante. #78695 (Nikita Taranov).
  • Permet la fusion parallèle des états uniqExact durant l’étape finale de l’agrégation distribuée. #78703 (Nikita Taranov).
  • Corrige une possible dégradation des performances de la fusion parallèle des états uniqExact pour l’agrégation avec clé. #78724 (Nikita Taranov).
  • Réduit le nombre d’appels à l’API List Blobs vers le stockage Azure. #78860 (Julia Kartseva).
  • Améliore les performances de INSERT SELECT distribué avec des répliques parallèles. #79441 (Azat Khuzhin).
  • Empêche LogSeriesLimiter d’effectuer un nettoyage à chaque initialisation, évitant ainsi la contention sur les verrous et les régressions de performances dans les scénarios de forte concurrence. #79864 (filimonov).
  • Accélère les requêtes grâce à l’optimisation triviale de count. #79945 (Raúl Marín).
  • Améliore l’inlining de certaines opérations avec Decimal. #79999 (Konstantin Bogdanov).
  • Définit input_format_parquet_bloom_filter_push_down sur true par défaut. Corrige également une erreur dans l’historique des modifications des paramètres. #80058 (Alexey Milovidov).
  • Optimise les mutations ALTER ... DELETE pour les parts dans lesquelles toutes les lignes doivent être supprimées. Désormais, dans de tels cas, une part vide est créée à la place de la part d’origine, sans exécuter de mutation. #79307 (Anton Popov).
  • Évite la copie supplémentaire du bloc lors de l’insertion dans une Compact part lorsque c’est possible. #79536 (Pavel Kruglov).
  • Ajoute le paramètre input_format_max_block_size_bytes pour limiter, en octets, la taille des blocs créés dans les formats d’entrée. Cela peut aider à éviter une utilisation élevée de la mémoire lors de l’importation de données lorsque les lignes contiennent de grandes valeurs. #79495 (Pavel Kruglov).
  • Supprime les pages de garde pour les threads et async_socket_for_remote/use_hedge_requests. Modifie la méthode d’allocation dans FiberStack, de mmap à aligned_alloc. Comme cela scinde les VMA, vm.max_map_count peut être atteint sous forte charge. #79147 (Sema Checherinda).
  • Matérialisation paresseuse avec des répliques parallèles. #79401 (Igor Nikonov).

Amélioration

  • Ajout de la possibilité d’appliquer des suppressions légères à la volée (avec les paramètres lightweight_deletes_sync = 0, apply_mutations_on_fly = 1. #79281 (Anton Popov).
  • Si des données au format Pretty sont affichées dans le terminal et qu’un bloc suivant a les mêmes largeurs de colonnes, il peut se poursuivre à la suite du bloc précédent en s’y collant par déplacement du curseur vers le haut. Cela clôt #79333. Cette fonctionnalité est contrôlée par le nouveau paramètre output_format_pretty_glue_chunks. #79339 (Alexey Milovidov).
  • Étend la fonction isIPAddressInRange aux types de données String, IPv4, IPv6, Nullable(String), Nullable(IPv4) et Nullable(IPv6). #78364 (YjyJeff).
  • Permet de modifier dynamiquement les paramètres du pooler de connexions du moteur PostgreSQL. #78414 (Samay Sharma).
  • Permet de spécifier _part_offset dans une projection normale. Il s’agit de la première étape vers la construction d’un index de projection. Cela peut être utilisé avec #58224 et peut contribuer à améliorer #63207. #78429 (Amos Bird).
  • Ajoute de nouvelles colonnes (create_query et source) à system.named_collections. Clôt #78179. #78582 (MikhailBurdukov).
  • Ajout d’un nouveau champ condition à la table système system.query_condition_cache. Il stocke la condition en clair dont le hash est utilisé comme clé dans le cache des conditions de requête. #78671 (Robert Schulze).
  • Les index de similarité vectorielle peuvent désormais être créés sur des colonnes BFloat16. #78850 (Robert Schulze).
  • Prise en charge des timestamps Unix avec partie fractionnaire dans l’analyse DateTime64 en mode best effort. #78908 (Pavel Kruglov).
  • Dans l’implémentation delta-kernel du stockage DeltaLake, correction du mode de correspondance des colonnes et ajout de tests pour l’évolution du schéma. #78921 (Kseniia Sumarokova).
  • Améliore l’insertion dans une colonne Variant au format Values grâce à une meilleure conversion des valeurs. #78923 (Pavel Kruglov).
  • La fonction tokens a été étendue pour accepter un argument “tokenizer” supplémentaire, ainsi que d’autres arguments spécifiques au tokenizer. #79001 (Elmi Ahmadov).
  • L’instruction SHOW CLUSTER développe désormais les macros (le cas échéant) dans son argument. #79006 (arf42).
  • Les fonctions de hash prennent désormais en charge les NULL à l’intérieur des tableaux, tuples et maps. (issues #48365 et #48623). #79008 (Michael Kolupaev).
  • Mise à jour de cctz vers 2025a. #79043 (Raúl Marín).
  • Remplace le traitement stderr par défaut pour les UDFs par “log_last”. C’est plus pratique à l’usage. #79066 (Alexey Milovidov).
  • Rend les onglets annulables dans la Web UI. Cela corrige #71284. #79084 (Alexey Milovidov).
  • Supprime les paramètres pendant recoverLostReplica, comme cela a déjà été fait ici : https://github.com/ClickHouse/ClickHouse/pull/78637. #79113 (Nikita Mikhaylov).
  • Ajoute les profile events ParquetReadRowGroups et ParquetPrunedRowGroups pour profiler l’élagage des index Parquet. #79180 (flynn).
  • Prend en charge ALTER sur une base de données dans un cluster. #79242 (Tuan Pham Anh).
  • Ignore explicitement les exécutions manquées de la collecte de statistiques pour QueryMetricLog, sinon le log mettra longtemps à rattraper l’heure actuelle. #79257 (Mikhail Artemenko).
  • Quelques optimisations mineures pour la lecture des formats basés sur Arrow. #79308 (Bharat Nallan).
  • Le paramètre allow_archive_path_syntax a été marqué comme expérimental par erreur. Ajoute un test pour éviter que des paramètres expérimentaux soient activés par défaut. #79320 (Alexey Milovidov).
  • Rend les paramètres du page cache ajustables au niveau de chaque requête. Cela est nécessaire pour expérimenter plus rapidement et pour permettre un réglage fin des requêtes à haut débit et à faible latence. #79337 (Alexey Milovidov).
  • N’affiche pas d’indications numériques dans les formats Pretty pour les nombres qui ressemblent à la plupart des hachages 64 bits. Cela corrige #79334. #79338 (Alexey Milovidov).
  • Les couleurs des graphiques dans les tableaux de bord avancés seront calculées à partir du hash de la requête correspondante. Cela facilite le repérage et la mémorisation d’un graphique lors du défilement du tableau de bord. #79341 (Alexey Milovidov).
  • Ajoute la metric asynchrone FilesystemCacheCapacity : capacité totale du virtual filesystem cache. C’est utile pour le monitoring global de l’infrastructure. #79348 (Alexey Milovidov).
  • Optimise l’accès à system.parts (lecture de la taille des colonnes/index uniquement à la demande). #79352 (Azat Khuzhin).
  • Calcule uniquement les champs pertinents pour la requête 'SHOW CLUSTER <name>', au lieu de tous les champs. #79368 (Tuan Pham Anh).
  • Permet de spécifier des paramètres de stockage pour DatabaseCatalog. #79407 (Kseniia Sumarokova).
  • Prise en charge du stockage local dans DeltaLake. #79416 (Kseniia Sumarokova).
  • Ajout d’un paramètre au niveau de la requête pour activer delta-kernel-rs : allow_experimental_delta_kernel_rs. #79418 (Kseniia Sumarokova).
  • Correction d’une possible boucle infinie lors du listage des blobs dans le blob storage Azure/S3. #79425 (Alexander Gololobov).
  • Ajout du paramètre de filesystem cache max_size_ratio_to_total_space. #79460 (Kseniia Sumarokova).
  • Pour clickhouse-benchmark, reconfiguration de l’option reconnect pour qu’elle accepte 0, 1 ou N comme valeurs de reconnexion, selon le comportement souhaité. #79465 (Sachin Kumar Singh).
  • Autorisation de ALTER TABLE ... MOVE|REPLACE PARTITION pour les tables situées sur différents disques plain_rewritable. #79566 (Julia Kartseva).
  • Le vector similarity index est désormais également utilisé si le vecteur de référence est de type Array(BFloat16). #79745 (Shankar Iyer).
  • Ajout de last_error_message, last_error_trace et query_id à la table système system.error&#95;log. Ticket associé : #75816. #79836 (Andrei Tinikov).
  • Activation par défaut de l’envoi des rapports de plantage. Cela peut être désactivé dans le fichier de configuration du serveur. #79838 (Alexey Milovidov).
  • La table système system.functions indique désormais dans quelle version de ClickHouse les fonctions ont été introduites pour la première fois. #79839 (Robert Schulze).
  • Ajout du paramètre access_control_improvements.enable_user_name_access_type. Ce paramètre permet d’activer ou de désactiver des grants précis pour les utilisateurs/rôles, introduits dans https://github.com/ClickHouse/ClickHouse/pull/72246. Il peut être préférable de désactiver ce paramètre si votre cluster contient des répliques antérieures à la version 25.1. #79842 (pufit).
  • L’implémentation correcte de la méthode ASTSelectWithUnionQuery::clone() prend désormais aussi en compte le champ is_normalized. Cela pourrait aider pour #77569. #79909 (Nikita Mikhaylov).
  • Correction d’un formatting incohérent de certaines queries avec l’opérateur EXCEPT. Si le côté gauche de l’opérateur EXCEPT se termine par *, la formatted query perd ses parenthèses et est alors analysée comme un * avec le modifier EXCEPT. Ces queries sont détectées par le fuzzer et ont peu de chances de se produire en pratique. Cela clôt #79950. #79952 (Alexey Milovidov).
  • Petite amélioration du parsing du type JSON grâce à l’utilisation d’un cache de l’ordre de désérialisation des variants. #79984 (Pavel Kruglov).
  • Ajouter le paramètre s3_slow_all_threads_after_network_error. #80035 (Vitaly Baranov).
  • Le niveau de journalisation des parts sélectionnées pour la fusion était incorrect (« Information »). Résout #80061. #80062 (Alexey Milovidov).
  • trace-visualizer : ajouter runtime/share dans les info-bulles et les messages d’état. #79040 (Sergei Trifonov).
  • trace-visualizer : charger les données depuis le serveur ClickHouse. #79042 (Sergei Trifonov).
  • Ajouter des métriques sur les merges en échec. #79228 (Miсhael Stetsyuk).
  • clickhouse-benchmark affichera un pourcentage basé sur le nombre maximal d’itérations, s’il est spécifié. #79346 (Alexey Milovidov).
  • Ajouter un visualiseur de la table system.parts. #79437 (Sergei Trifonov).
  • Ajouter un outil d’analyse de la latence des requêtes. #79978 (Sergei Trifonov).

Correction de bug

  • Corrige les renommages de colonnes manquants dans une part. #76346 (Anton Popov).
  • Une vue matérialisée peut démarrer trop tard, par exemple après la table Kafka qui l’alimente. #72123 (Ilya Golshtein).
  • Corrige la réécriture de requête SELECT lors de la création de VIEW avec l’analyzer activé. Clôt #75956. #76356 (Dmitry Novik).
  • Corrige l’application de async_insert depuis le serveur (via apply_settings_from_server) (auparavant, cela entraînait des erreurs Unknown packet 11 from server côté client). #77578 (Azat Khuzhin).
  • Corrige le non-fonctionnement d’une vue matérialisée actualisable dans une base de données Replicated sur les répliques nouvellement ajoutées. #77774 (Michael Kolupaev).
  • Corrige les vues matérialisées actualisables qui cassaient les sauvegardes. #77893 (Michael Kolupaev).
  • Corrige l’ancienne logical error déclenchée pour transform. #78247 (Yarik Briukhovetskyi).
  • Corrige certains cas où l’index secondaire n’était pas appliqué avec l’analyzer. Corrige #65607, corrige #69373. #78485 (Nikolai Kochetov).
  • Corrige l’export des profile events (NetworkSendElapsedMicroseconds/NetworkSendBytes) pour le protocole HTTP avec la compression activée (l’erreur ne doit pas dépasser la taille du buffer, généralement autour de 1 MiB). #78516 (Azat Khuzhin).
  • Corrige l’analyzer qui produisait LOGICAL_ERROR lorsque JOIN … USING impliquait une colonne ALIAS - il doit désormais produire l’erreur appropriée. #78618 (Yakov Olkhovskiy).
  • Corrige l’analyzer : CREATE VIEW … ON CLUSTER échoue si SELECT contient des arguments positionnels. #78663 (Yakov Olkhovskiy).
  • Corrige l’erreur Block structure mismatch dans le cas d’un INSERT SELECT vers une fonction de table avec inférence de schéma si SELECT contient des sous-requêtes scalaires. #78677 (Pervakov Grigorii).
  • Corrige l’analyzer : avec prefer_global_in_and_join=1 pour une table Distributed dans une requête SELECT, la fonction in doit être remplacée par globalIn. #78749 (Yakov Olkhovskiy).
  • Corrige plusieurs types de requêtes SELECT lisant depuis des tables avec le moteur MongoDB ou la fonction de table mongodb : requêtes avec conversion implicite d’une valeur constante dans la clause WHERE (par exemple WHERE datetime = '2025-03-10 00:00:00') ; requêtes avec LIMIT et GROUP BY. Auparavant, elles pouvaient renvoyer un résultat erroné. #78777 (Anton Popov).
  • Correction de la conversion entre différents types JSON. Elle est désormais effectuée par un simple cast via une conversion vers/depuis String. C’est moins efficace, mais exact à 100 %. #78807 (Pavel Kruglov).
  • Correction d’une erreur logique lors de la conversion du type Dynamic en Interval. #78813 (Pavel Kruglov).
  • Correction du rollback de colonne en cas d’erreur de parsing JSON. #78836 (Pavel Kruglov).
  • Correction de l’erreur ‘bad cast’ lors d’un join utilisant une colonne d’alias constante. #78848 (Vladimir Cherkasov).
  • Ne pas autoriser prewhere dans une vue matérialisée sur des colonnes ayant des types différents dans la vue et dans la table cible. #78889 (Pavel Kruglov).
  • Correction d’une erreur logique lors du parsing de données binaires invalides d’une colonne Variant. #78982 (Pavel Kruglov).
  • Lever une exception lorsque la taille de lot Parquet est définie à 0. Auparavant, lorsque output_format_parquet_batch_size = 0, ClickHouse se bloquait. Ce comportement est désormais corrigé. #78991 (daryawessely).
  • Correction de la désérialisation des discriminateurs de variant avec le format basic dans les compact parts. Ce comportement a été introduit dans https://github.com/ClickHouse/ClickHouse/pull/55518. #79000 (Pavel Kruglov).
  • Les Dictionaries de type complex_key_ssd_cache rejettent désormais les paramètres block_size et write_buffer_size nuls ou négatifs (issue #78314). #79028 (Elmi Ahmadov).
  • Éviter d’utiliser Field pour les colonnes non agrégées dans SummingMergeTree. Cela pouvait entraîner des erreurs inattendues avec les types Dynamic/Variant utilisés dans SummingMergeTree. #79051 (Pavel Kruglov).
  • Correction de la lecture depuis une Materialized View avec une table de destination Distributed et un en-tête différent dans l’analyseur. #79059 (Pavel Kruglov).
  • Correction d’un bug où arrayUnion() renvoyait des valeurs supplémentaires (incorrectes) sur des tables ayant reçu des insertions par lot. Correction de #75057. #79079 (Peter Nguyen).
  • Correction d’un segfault dans OpenSSLInitializer. Résout #79092. #79097 (Konstantin Bogdanov).
  • Toujours définir le préfixe pour S3 ListObject. #79114 (Azat Khuzhin).
  • Correction d’un bug où arrayUnion() renvoyait des valeurs supplémentaires (incorrectes) sur des tables ayant reçu des insertions par lot. Correction de #79157. #79158 (Peter Nguyen).
  • Correction d’une erreur logique après le filter pushdown. #79164 (Pervakov Grigorii).
  • Correction du table engine DeltaLake lorsque l’implémentation delta-kernel est utilisée avec des endpoints basés sur HTTP, correction de NOSIGN. Clôt #78124. #79203 (Kseniia Sumarokova).
  • Correctif Keeper : évite de déclencher des watches sur des requêtes multiples en échec. #79247 (Antonio Andelic).
  • Interdit les types Dynamic et JSON dans IN. Avec l’implémentation actuelle de IN, cela peut entraîner des résultats incorrects. Une prise en charge correcte de ces types dans IN est complexe et pourra être ajoutée à l’avenir. #79282 (Pavel Kruglov).
  • Correction de la vérification des paths dupliqués lors du parsing du type JSON. #79317 (Pavel Kruglov).
  • Correction de problèmes de connexion avec SecureStreamSocket. #79383 (Konstantin Bogdanov).
  • Correction du chargement des disks plain_rewritable contenant des données. #79439 (Julia Kartseva).
  • Correction d’un crash lors de la découverte des subcolumns dynamiques dans les wide parts de MergeTree. #79466 (Pavel Kruglov).
  • Vérifie la longueur du nom de table uniquement pour les requêtes CREATE initiales. Ne l’effectue pas pour les CREATE secondaires afin d’éviter des problèmes de backward compatibility. #79488 (Miсhael Stetsyuk).
  • Correction de l’erreur Block structure mismatch dans plusieurs cas sur des tables avec des colonnes sparse. #79491 (Anton Popov).
  • Correction de deux cas de “Logical Error: Can’t set alias of * of Asterisk on alias”. #79505 (Raúl Marín).
  • Correction de l’utilisation de paths incorrects lors du renommage d’une database atomic. #79569 (Tuan Pham Anh).
  • Correction de ORDER BY sur une JSON column avec d’autres colonnes. #79591 (Pavel Kruglov).
  • Correction d’une duplication des résultats lors de la lecture à distance lorsque use_hedged_requests et allow_experimental_parallel_reading_from_replicas sont tous deux désactivés. #79599 (Eduard Karacharov).
  • Correction d’un crash dans l’implémentation delta-kernel lors de l’utilisation de Unity Catalog. #79677 (Kseniia Sumarokova).
  • Résout les macros pour les clusters en autodiscovery. #79696 (Anton Ivashkin).
  • Gère correctement une configuration incorrecte de page_cache_limits. #79805 (Bharat Nallan).
  • Corrige le résultat de la fonction SQL formatDateTime si un Formatter de taille variable (par ex. %W, c.-à-d. le jour de la semaine Monday Tuesday, etc.) est suivi d’un Formatter composé (un Formatter qui affiche plusieurs components à la fois, par ex. %D, c.-à-d. la date américaine 05/04/25). #79835 (Robert Schulze).
  • IcebergS3 prend en charge l’optimisation de count, mais pas IcebergS3Cluster. Par conséquent, le résultat de count() renvoyé en mode cluster peut être un multiple du nombre de répliques. #79844 (wxybear).
  • Corrige l’erreur AMBIGUOUS_COLUMN_NAME avec la matérialisation différée lorsqu’aucune colonne n’est utilisée pour exécuter la requête avant la projection. Exemple : SELECT * FROM t ORDER BY rand() LIMIT 5. #79926 (Igor Nikonov).
  • Masque le mot de passe pour la requête CREATE DATABASE datalake ENGINE = DataLakeCatalog(\'http://catalog:8181\', \'admin\', \'password\'). #79941 (Han Fei).
  • Permet de spécifier un alias dans JOIN USING. Indiquez cet alias si la colonne a été renommée (par exemple, à cause de ARRAY JOIN). Corrige #73707. #79942 (Nikolai Kochetov).
  • Permet aux vues matérialisées avec des UNION de fonctionner correctement sur les nouvelles répliques. #80037 (Samay Sharma).
  • Le spécificateur de format %e dans la fonction SQL parseDateTime reconnaît désormais les jours sur un seul chiffre (par ex. 3), alors qu’il nécessitait auparavant un remplissage par espace (par ex. 3). Son comportement est ainsi désormais compatible avec MySQL. Pour conserver le comportement précédent, définissez le setting parsedatetime_e_requires_space_padding = 1. (issue #78243). #80057 (Robert Schulze).
  • Corrige les avertissements Cannot find 'kernel' in '[...]/memory.stat' dans le journal de ClickHouse (issue #77410). #80129 (Robert Schulze).
  • Vérifie la taille de pile dans FunctionComparison pour éviter un plantage dû à un débordement de pile. #78208 (Julia Kartseva).
  • Corrige une condition de concurrence lors d’un SELECT depuis system.workloads. #78743 (Sergei Trifonov).
  • Corrige la matérialisation différée dans les requêtes distribuées. #78815 (Igor Nikonov).
  • Corrige la conversion de Array(Bool) en Array(FixedString). #78863 (Nikita Taranov).
  • Rend la sélection de la version de Parquet moins confuse. #78818 (Michael Kolupaev).
  • Corrige l’auto-fusion de ReservoirSampler. #79031 (Nikita Taranov).
  • Corrige le stockage de la table d’insertion dans le contexte du client. #79046 (Pervakov Grigorii).
  • Corrige l’ordre de destruction des membres de données de AggregatingSortedAlgorithm et SummingSortedAlgorithm. #79056 (Nikita Taranov).
  • enable_user_name_access_type ne doit pas affecter le type d’accès DEFINER. #80026 (pufit).
  • Une requête vers la base de données système peut rester bloquée si les métadonnées de la base de données système sont stockées dans Keeper. #79304 (Mikhail Artemenko).

Amélioration de la compilation/des tests/du packaging

Version 25.4 de ClickHouse, 2025-04-22

Changement incompatible avec les versions précédentes

  • Vérifie que toutes les colonnes d’une vue matérialisée correspondent à celles de la table cible lorsque allow_materialized_view_with_bad_select est défini sur false. #74481 (Christoph Wurm).
  • Corrige les cas où dateTrunc est utilisé avec des arguments Date/DateTime négatifs. #77622 (Yarik Briukhovetskyi).
  • L’ancienne intégration MongoDB a été supprimée. Le paramètre serveur use_legacy_mongodb_integration est devenu obsolète et n’a désormais plus aucun effet. #77895 (Robert Schulze).
  • Améliore la validation de SummingMergeTree afin d’ignorer l’agrégation des colonnes utilisées dans les clés de partitionnement ou de tri. #78022 (Pervakov Grigorii).

Nouvelle fonctionnalité

  • Ajout de l’ordonnancement des CPU slots pour les charges de travail ; voir la documentation pour plus de détails. #77595 (Sergei Trifonov).
  • clickhouse-local conservera ses bases de données après redémarrage si vous spécifiez l’argument de ligne de commande --path. Cela résout #50647. Cela résout #49947. #71722 (Alexey Milovidov).
  • Rejet des requêtes lorsque le serveur est surchargé. La décision est prise en fonction du rapport entre le temps d’attente (OSCPUWaitMicroseconds) et le temps d’activité (OSCPUVirtualTimeMicroseconds). La requête est rejetée avec une certaine probabilité lorsque ce rapport se situe entre min_os_cpu_wait_time_ratio_to_throw et max_os_cpu_wait_time_ratio_to_throw (il s’agit de paramètres au niveau de la requête). #63206 (Alexey Katsman).
  • Time travel dans Iceberg : ajout d’un paramètre permettant d’interroger des tables Iceberg à un horodatage donné. #71072 (Brett Hoerner). #77439 (Daniil Ivanik).
  • Ajout d’un cache en mémoire pour les métadonnées Iceberg, qui stocke les fichiers manifeste/la liste des manifestes et metadata.json afin d’accélérer les requêtes. #77156 (Han Fei).
  • Prise en charge du moteur de table DeltaLake pour Azure Blob Storage. Corrige #68043. #74541 (Smita Kulkarni).
  • Ajout d’un cache en mémoire pour les index de similarité vectorielle désérialisés. Cela devrait accélérer les requêtes répétées de recherche approximative du plus proche voisin (ANN). La taille du nouveau cache est contrôlée par les paramètres du serveur vector_similarity_index_cache_size et vector_similarity_index_cache_max_entries. Cette fonctionnalité remplace le mécanisme de cache des index de skipping des versions précédentes. #77905 (Shankar Iyer).
  • Prise en charge de l’élagage des partitions dans DeltaLake. #78486 (Kseniia Sumarokova).
  • Prise en charge d’un rafraîchissement en arrière-plan dans les tables MergeTree en lecture seule, ce qui permet d’interroger des tables pouvant être mises à jour avec un nombre illimité de lecteurs distribués (data lake natif ClickHouse). #76467 (Alexey Milovidov).
  • Prise en charge de l’utilisation de disques personnalisés pour stocker les fichiers de métadonnées des bases de données. Actuellement, cela ne peut être configuré qu’au niveau global du serveur. #77365 (Tuan Pham Anh).
  • Prise en charge de ALTER TABLE … ATTACH|DETACH|MOVE|REPLACE PARTITION pour le disque plain_rewritable. #77406 (Julia Kartseva).
  • Ajout de paramètres de table pour la configuration et les identifiants SASL au moteur de table Kafka. Cela permet de configurer l’authentification SASL vers Kafka et les systèmes compatibles Kafka directement dans l’instruction CREATE TABLE plutôt que d’avoir à utiliser des fichiers de configuration ou des collections nommées. #78810 (Christoph Wurm).
  • Permet de définir default_compression_codec pour les tables MergeTree : il est utilisé lorsque la requête CREATE n’en définit pas explicitement pour les colonnes concernées. Cela corrige #42005. #66394 (gvoelfin).
  • Ajoute le paramètre bind_host dans la configuration des clusters afin que ClickHouse puisse utiliser un réseau spécifique pour les connexions distribuées. #74741 (Todd Yocum).
  • Introduit une nouvelle colonne, parametrized_view_parameters, dans system.tables. Corrige https://github.com/clickhouse/clickhouse/issues/66756. #75112 (NamNguyenHoai).
  • Permet de modifier un commentaire de base de données. Corrige #73351 ### Entrée de documentation pour les changements visibles par l’utilisateur. #75622 (NamNguyenHoai).
  • Prend en charge l’authentification SCRAM-SHA-256 dans le protocole de compatibilité PostgreSQL. #76839 (scanhex12).
  • Ajoute les fonctions arrayLevenshteinDistance, arrayLevenshteinDistanceWeighted et arraySimilarity. #77187 (Mikhail f. Shiryaev).
  • Le paramètre parallel_distributed_insert_select s’applique à INSERT SELECT dans ReplicatedMergeTree (auparavant, cela nécessitait des tables Distributed). #78041 (Igor Nikonov).
  • Introduit la fonction toInterval. Cette fonction accepte 2 arguments (valeur et unité) et convertit la valeur en un type Interval spécifique. #78723 (Andrew Davis).
  • Ajoute plusieurs moyens pratiques de localiser le fichier racine metadata.json dans une table function et un moteur Iceberg. Corrige #78455. #78475 (Daniil Ivanik).
  • Prend en charge l’authentification par mot de passe dans le protocole SSH de ClickHouse. #78586 (Nikita Mikhaylov).

Fonctionnalité expérimentale

  • Prise en charge des sous-requêtes corrélées comme argument de l’expression EXISTS dans la clause WHERE. Résout #72459. #76078 (Dmitry Novik).
  • Ajout des fonctions sparseGrams et sparseGramsHashes, avec des versions ASCII et UTF8. Auteur : scanhex12. #78176 (Pervakov Grigorii). N’utilisez pas cette fonctionnalité : l’implémentation changera dans les prochaines versions.

Amélioration des performances

  • Optimise les performances avec des colonnes chargées à la demande, qui lisent les données après ORDER BY et LIMIT. #55518 (Xiaozhe Yu).
  • Active le cache des conditions de requête par défaut. #79080 (Alexey Milovidov).
  • Accélère la construction du résultat du JOIN en dévirtualisant les appels à col->insertFrom(). #77350 (Alexander Gololobov).
  • Fusionne, si possible, les conditions d’égalité de l’étape de filtrage du plan de requête dans la condition de JOIN afin de pouvoir les utiliser comme clés de table de hachage. #78877 (Dmitry Novik).
  • Utilise le sharding dynamique pour JOIN si la clé de JOIN est un préfixe de la PK pour les deux parts. Cette optimisation est activée avec le paramètre query_plan_join_shard_by_pk_ranges (désactivé par défaut). #74733 (Nikolai Kochetov).
  • Prend en charge l’élagage des données pour Iceberg à partir des valeurs limites inférieures et supérieures des colonnes. Corrige #77638. #78242 (alesapin).
  • Implémente une optimisation triviale du comptage pour Iceberg. Désormais, les requêtes avec count() et sans filtre devraient être plus rapides. Clôt #77639. #78090 (alesapin).
  • Ajoute la possibilité de configurer le nombre de colonnes que les merges peuvent écrire en parallèle à l’aide de max_merge_delayed_streams_for_parallel_write (cela devrait réduire d’environ 25x l’utilisation mémoire des vertical merges vers S3). #77922 (Azat Khuzhin).
  • Désactive filesystem_cache_prefer_bigger_buffer_size lorsque le cache est utilisé passivement, par exemple pour les merges. Cela réduit la consommation de mémoire lors des merges. #77898 (Kseniia Sumarokova).
  • Désormais, le nombre de répliques est utilisé pour déterminer la taille des tâches de lecture lorsque les répliques parallèles sont activées. Cela permet une meilleure répartition du travail entre les répliques lorsque la quantité de données à lire n’est pas très importante. #78695 (Nikita Taranov).
  • Prend en charge le préchargement d’E/S asynchrone pour le format ORC, ce qui améliore les performances globales en masquant la latence des E/S distantes. #70534 (李扬).
  • Préalloue la mémoire utilisée par les inserts asynchrones afin d’améliorer les performances. #74945 (Ilya Golshtein).
  • Réduit le nombre de requêtes vers Keeper en supprimant l’utilisation des requêtes get individuelles, qui auraient pu provoquer une charge importante sur Keeper avec l’augmentation du nombre de répliques, là où multiRead est disponible. #56862 (Nikolay Degterinsky).
  • Une optimisation mineure pour l’exécution de fonctions sur des arguments Nullable. #76489 (李扬).
  • Optimise arraySort. #76850 (李扬).
  • Fusionne les marks d’une même part et les écrit dans le cache des conditions de requête en une seule fois afin de réduire la contention sur les verrous. #77377 (zhongyuankai).
  • Optimise les performances de s3Cluster pour les requêtes avec une seule expansion entre crochets. #77686 (Tomáš Hromada).
  • Optimise ORDER BY sur une seule colonne Nullable ou LowCardinality. #77789 (李扬).
  • Optimise l’utilisation mémoire du format Native. #78442 (Azat Khuzhin).
  • Optimisation triviale : ne pas réécrire count(if(...)) en countIf si une conversion de type est nécessaire. Résout #78564. #78565 (李扬).
  • La fonction hasAll peut désormais tirer parti des index de skipping de texte intégral tokenbf_v1, ngrambf_v1. #77662 (UnamedRus).
  • L’index de similarité vectorielle pouvait surallouer jusqu’à 2 fois la mémoire vive. Ce correctif revoit la stratégie d’allocation mémoire, réduisant la consommation mémoire et améliorant l’efficacité du cache de l’index de similarité vectorielle. (issue #78056). #78394 (Shankar Iyer).
  • Ajout du paramètre schema_type pour la table system.metric_log, afin de définir le type de schéma. Trois schémas sont autorisés : wide — schéma actuel, chaque métrique/événement se trouvant dans une colonne distincte (le plus efficace pour la lecture de colonnes distinctes), transposed — similaire à system.asynchronous_metric_log, les métriques/événements sont stockés sous forme de lignes, et surtout transposed_with_wide_view — crée une table sous-jacente avec un schéma transposed, tout en ajoutant une vue avec un schéma wide qui traduit les requêtes vers la table sous-jacente. Dans transposed_with_wide_view, la résolution inférieure à la seconde n’est pas prise en charge pour la vue, event_time_microseconds n’étant qu’un alias conservé pour la rétrocompatibilité. #78412 (alesapin).

Amélioration

  • Sérialisation du plan de requête pour les requêtes Distributed. Un nouveau paramètre, serialize_query_plan, a été ajouté. Lorsqu’il est activé, les requêtes de table Distributed utilisent un plan de requête sérialisé pour l’exécution des requêtes à distance. Cela introduit un nouveau packet type dans le protocole TCP ; <process_query_plan_packet>true</process_query_plan_packet> doit être ajouté à la configuration du serveur pour autoriser le traitement de ce paquet. #69652 (Nikolai Kochetov).
  • Prise en charge du type JSON et de la lecture de subcolumns depuis des vues. #76903 (Pavel Kruglov).
  • Prise en charge de ALTER DATABASE … ON CLUSTER. #79242 (Tuan Pham Anh).
  • Les refresh des refreshable materialized views apparaissent désormais dans system.query_log. #71333 (Michael Kolupaev).
  • Les fonctions définies par l’utilisateur (UDFs) peuvent désormais être marquées comme déterministes via un nouveau paramètre dans leur configuration. En outre, le query cache vérifie désormais si les UDFs appelées dans une requête sont déterministes. Si c’est le cas, il met en cache le résultat de la requête. (Issue #59988). #77769 (Jimmy Aguilar Mena).
  • Activation d’une logique de backoff pour tous les types de tâches répliquées. Elle permet de réduire l’utilisation du CPU, l’utilisation de la mémoire et la taille des fichiers journaux. Ajout des nouveaux paramètres max_postpone_time_for_failed_replicated_fetches_ms, max_postpone_time_for_failed_replicated_merges_ms et max_postpone_time_for_failed_replicated_tasks_ms, similaires à max_postpone_time_for_failed_mutations_ms. #74576 (MikhailBurdukov).
  • Ajout de query_id à system.errors. Closes #75815. #76581 (Vladimir Baikov).
  • Ajout de la prise en charge de la conversion de UInt128 en IPv6. Cela permet d’utiliser l’opération bitAnd et l’arithmétique avec IPv6, ainsi que de reconvertir le résultat en IPv6. Closes #76752. Cela permet également de reconvertir en IPv6 le résultat de l’opération bitAnd sur IPv6. See also #57707. #76928 (Muzammil Abdul Rehman).
  • Par défaut, n’analyse pas les valeurs spéciales de Bool dans les text formats à l’intérieur du type Variant. Cela peut être activé à l’aide du paramètre allow_special_bool_values_inside_variant. #76974 (Pavel Kruglov).
  • Prise en charge d’un temps d’attente configurable par tâche pour les requêtes de faible priority, au niveau de la session et du serveur. #77013 (VicoWu).
  • Implémentation de la comparaison pour les valeurs du type de données JSON. Les JSON objects peuvent désormais être comparés de manière similaire aux Maps. #77397 (Pavel Kruglov).
  • Meilleure gestion des permissions dans system.kafka_consumers. Transmission des erreurs internes de librdkafka (à noter que cette bibliothèque est vraiment mauvaise). #77700 (Ilya Golshtein).
  • Ajout de la validation des paramètres du moteur de table Buffer. #77840 (Pervakov Grigorii).
  • Ajout de la config enable_hdfs_pread pour activer ou désactiver pread dans HDFS. #77885 (kevinyhzou).
  • Ajout de profile events pour le nombre de requêtes de lecture et d’écriture multi de ZooKeeper. #77888 (JackyWoo).
  • Autorise la création et l’insertion dans des tables temporaires lorsque disable_insertion_and_mutation est activé. #77901 (Xu Jia).
  • Réduction de max_insert_delayed_streams_for_parallel_write (à 100). #77919 (Azat Khuzhin).
  • Correction de l’analyse de l’année en Joda syntax (issue de l’écosystème Java, si vous vous posiez la question), par exemple yyy. #77973 (李扬).
  • L’attach des parts des tables MergeTree sera effectué dans leur ordre de block, ce qui est important pour certains algorithmes de merging spéciaux, comme ReplacingMergeTree. Cela clôt #71009. #77976 (Alexey Milovidov).
  • Les Query masking rules peuvent désormais lever une LOGICAL_ERROR en cas de correspondance. Cela aidera à vérifier si un password prédéfini fuit quelque part dans les logs. #78094 (Nikita Mikhaylov).
  • Ajout de la colonne index_length_column à information_schema.tables pour une meilleure compatibilité avec MySQL. #78119 (Paweł Zakrzewski).
  • Introduction de deux nouvelles metrics : TotalMergeFailures et NonAbortedMergeFailures. Ces metrics sont nécessaires pour détecter les cas où trop de merges échouent sur une courte période. #78150 (Miсhael Stetsyuk).
  • Correction d’une analyse incorrecte des URL S3 lorsque la key n’est pas spécifiée avec le style de chemin. #78185 (Arthur Passos).
  • Correction des valeurs incorrectes des metrics asynchrones BlockActiveTime, BlockDiscardTime, BlockWriteTime, BlockQueueTime et BlockReadTime (avant ce changement, 1 seconde était incorrectement signalée comme 0.001). #78211 (filimonov).
  • Respect de la limite loading_retries pour les errors lors du push vers une materialized view pour StorageS3(Azure)Queue. Auparavant, ces errors étaient réessayées indéfiniment. #78313 (Kseniia Sumarokova).
  • Dans DeltaLake avec l’implémentation delta-kernel-rs, correction des performances et de la barre de Progress. #78368 (Kseniia Sumarokova).
  • Prise en charge de include, from_env, from_zk pour les disks d’exécution. Clôt #78177. #78470 (Kseniia Sumarokova).
  • Ajout d’un avertissement dynamique à la table system.warnings pour les mutations longues. #78658 (Bharat Nallan).
  • Ajout du champ condition à la table système system.query_condition_cache. Il stocke la condition en clair dont le hash est utilisé comme clé dans le cache des conditions de requête. #78671 (Robert Schulze).
  • Autorisation d’une valeur vide pour le partitionnement Hive. #78816 (Arthur Passos).
  • Correction de la coercition de type de la clause IN pour BFloat16 (c.-à-d. que SELECT toBFloat16(1) IN [1, 2, 3]; renvoie désormais 1). Clôture de #78754. #78839 (Raufs Dunamalijevs).
  • Ne plus vérifier les parts sur d’autres disques pour MergeTree si disk = ... est défini. #78855 (Azat Khuzhin).
  • Enregistrement des data types dans used_data_type_families de system.query_log avec des noms canoniques. #78972 (Kseniia Sumarokova).
  • Nettoyage des paramètres pendant recoverLostReplica, comme cela a été fait dans : #78637. #79113 (Nikita Mikhaylov).
  • Utilisation des colonnes d’insertion pour l’inférence de schéma d’INFILE. #78490 (Pervakov Grigorii).

Correction de bug (dysfonctionnement visible par l’utilisateur dans une version stable officielle)

  • Corrige une analyse incorrecte des projections lorsque count(Nullable) est utilisé dans des projections agrégées. Cela corrige #74495. Cette PR ajoute également des logs autour de l’analyse des projections afin de préciser pourquoi une projection est utilisée, ou non. #74498 (Amos Bird).
  • Corrige Part <...> does not contain in snapshot of previous virtual parts. (PART_IS_TEMPORARILY_LOCKED) lors de DETACH PART. #76039 (Aleksei Filatov).
  • Corrige les skip indexes qui ne fonctionnaient pas avec une expression contenant des littéraux dans l’analyseur, et supprime les transtypages triviaux lors de l’analyse des index. #77229 (Pavel Kruglov).
  • Corrige un bug où le query parameter close_session n’avait aucun effet, ce qui faisait que les sessions nommées n’étaient fermées qu’après session_timeout. #77336 (Alexey Katsman).
  • Corrige la réception de messages depuis le serveur NATS sans vues matérialisées attachées. #77392 (Dmitry Novikov).
  • Corrige une erreur logique lors de la lecture d’un FileLog vide via la fonction de table merge, clôt #75575. #77441 (Vladimir Cherkasov).
  • Utilise les paramètres de format par défaut pour la sérialisation de Dynamic à partir d’un variant partagé. #77572 (Pavel Kruglov).
  • Corrige la vérification de l’existence du chemin de données de la table sur le disque local. #77608 (Tuan Pham Anh).
  • Corrige l’envoi de valeurs constantes vers le distant pour certains types. #77634 (Pavel Kruglov).
  • Corrige un crash dû à un Context expiré dans S3/AzureQueue. #77720 (Kseniia Sumarokova).
  • Masque les informations d’authentification dans les moteurs de table RabbitMQ, Nats, Redis et AzureQueue. #77755 (Kseniia Sumarokova).
  • Corrige un comportement indéfini lors de la comparaison de NaN dans argMin/argMax. #77756 (Raúl Marín).
  • Vérifie régulièrement si les merges et les mutations ont été annulées, même lorsque l’opération ne produit aucun block à écrire. #77766 (János Benjamin Antal).
  • Corrige le fonctionnement des vues matérialisées actualisables dans une base de données Replicated sur les répliques nouvellement ajoutées. #77774 (Michael Kolupaev).
  • Corrige un crash possible lorsque l’erreur NOT_FOUND_COLUMN_IN_BLOCK se produit. #77854 (Vladimir Cherkasov).
  • Corrige un crash survenant dans S3/AzureQueue lors du remplissage des données. #77878 (Bharat Nallan).
  • Désactive la recherche approximative dans l’historique du serveur SSH (car elle nécessite la bibliothèque skim). #78002 (Azat Khuzhin).
  • Corrige un bug en raison duquel une requête de recherche vectorielle sur une colonne non indexée renvoyait des résultats incorrects si une autre colonne vectorielle de la table possédait un index de similarité vectorielle défini. (Issue #77978). #78069 (Shankar Iyer).
  • Correction d’une infime erreur dans l’invite “Le format de sortie demandé est binaire… Voulez-vous quand même l’afficher ? [y/N]”. #78095 (Azat Khuzhin).
  • Correction d’un bug dans le cas de toStartOfInterval avec un argument d’origine nul. #78096 (Yarik Briukhovetskyi).
  • Interdire la spécification d’un paramètre de requête session_id vide pour l’interface HTTP. #78098 (Alexey Katsman).
  • Correction d’un remplacement de métadonnées dans la base de données Replicated, qui pouvait se produire à la suite d’une requête RENAME exécutée juste après une requête ALTER. #78107 (Nikolay Degterinsky).
  • Correction d’un crash dans le moteur NATS. #78108 (Dmitry Novikov).
  • Ne plus essayer de créer history_file dans le client embarqué pour SSH (dans les versions précédentes, la création échouait systématiquement, mais était quand même tentée). #78112 (Azat Khuzhin).
  • Correction de system.detached_tables, qui affichait des informations incorrectes après des requêtes RENAME DATABASE ou DROP TABLE. #78126 (Nikolay Degterinsky).
  • Correction des vérifications d’un nombre trop élevé de tables avec la base de données Replicated après #77274. La vérification est également effectuée avant la création du stockage afin d’éviter la création de nœuds non comptabilisés dans Keeper dans le cas de ReplicatedMergeTree ou KeeperMap. #78127 (Nikolay Degterinsky).
  • Correction d’un crash possible dû à l’initialisation concurrente des métadonnées de S3Queue. #78131 (Azat Khuzhin).
  • Les fonctions groupArray* produisent désormais une erreur BAD_ARGUMENTS pour la valeur 0 de type Int de l’argument max_size, comme c’était déjà le cas pour UInt, au lieu d’essayer de s’exécuter avec cette valeur. #78140 (Eduard Karacharov).
  • Empêcher un crash lors de la récupération d’une réplique perdue si la table locale est supprimée avant d’être détachée. #78173 (Raúl Marín).
  • Correction du fait que la colonne “alterable” de system.s3_queue_settings renvoyait toujours false. #78187 (Kseniia Sumarokova).
  • Masquer la signature d’accès Azure afin qu’elle ne soit visible ni par l’utilisateur ni dans les logs. #78189 (Kseniia Sumarokova).
  • Correction de la prélecture des sous-flux avec préfixes dans les Wide parts. #78205 (Pavel Kruglov).
  • Correction de crashes / résultats incorrects pour mapFromArrays dans le cas d’un tableau de clés de type LowCardinality(Nullable). #78240 (Eduard Karacharov).
  • Correction des options d’authentification de delta-kernel-rs. #78255 (Kseniia Sumarokova).
  • Ne pas planifier la tâche des Refreshable Materialized Views si disable_insertion_and_mutation d’une réplique vaut true. Une tâche correspond à une insertion et échouera si disable_insertion_and_mutation vaut true. #78277 (Xu Jia).
  • Validation de l’accès aux tables sous-jacentes pour le moteur Merge. #78339 (Pervakov Grigorii).
  • Le modificateur FINAL peut être ignoré lors des requêtes sur une table Distributed. #78428 (Yakov Olkhovskiy).
  • bitmapMin renvoie uint32_max lorsque le bitmap est vide (et uint64_max lorsque le type d’entrée est plus grand), ce qui correspond au comportement du minimum d’un roaring_bitmap vide. #78444 (wxybear).
  • Désactivation de la parallélisation du traitement des requêtes immédiatement après la lecture de FROM lorsque distributed_aggregation_memory_efficient est activé, car cela peut provoquer une erreur logique. Clôt #76934. #78500 (flynn).
  • Définition d’au moins un flux de lecture lorsqu’aucun flux n’est planifié après l’application du paramètre max_streams_to_max_threads_ratio. #78505 (Eduard Karacharov).
  • Correction de l’erreur logique “Cannot unregister: table uuid is not registered” dans le moteur de stockage S3Queue. Clôt #78285. #78541 (Kseniia Sumarokova).
  • ClickHouse peut désormais détecter son cgroup v2 sur les systèmes où les cgroups v1 et v2 sont tous deux activés. #78566 (Grigory Korolev).
  • Les fonctions de table -Cluster échouaient lorsqu’elles étaient utilisées avec des paramètres au niveau de la table. #78587 (Daniil Ivanik).
  • Amélioration des vérifications lorsque les transactions ne sont pas prises en charge par ReplicatedMergeTree sur INSERT. #78633 (Azat Khuzhin).
  • Nettoyage des paramètres de requête lors de l’opération Attach. #78637 (Raúl Marín).
  • Correction d’un plantage lorsqu’un chemin non valide était spécifié dans iceberg_metadata_file_path. #78688 (alesapin).
  • Dans le moteur de table DeltaLake avec l’implémentation delta-kernel-s, correction du cas où le schéma de lecture diffère du schéma de la table et où des colonnes de partition sont également présentes, ce qui entraînait une erreur “not found column”. #78690 (Kseniia Sumarokova).
  • Correction d’un problème où, après avoir programmé la fermeture d’une session nommée (mais avant l’expiration du délai), la création d’une nouvelle session nommée avec le même nom entraînait sa fermeture au moment prévu pour la première session. #78698 (Alexey Katsman).
  • Correction de plusieurs types de requêtes SELECT lisant depuis des tables avec le moteur MongoDB ou la fonction de table mongodb : requêtes avec conversion implicite d’une valeur constante dans la clause WHERE (par exemple WHERE datetime = '2025-03-10 00:00:00') ; requêtes avec LIMIT et GROUP BY. Auparavant, elles pouvaient renvoyer un résultat erroné. #78777 (Anton Popov).
  • Ne pas bloquer l’arrêt de la table pendant l’exécution de CHECK TABLE. #78782 (Raúl Marín).
  • Correctif Keeper : correction du nombre d’éléments éphémères dans tous les cas. #78799 (Antonio Andelic).
  • Correction d’un cast incorrect dans StorageDistributed lors de l’utilisation de fonctions de table autres que view. Résout #78464. #78828 (Konstantin Bogdanov).
  • Correction de la cohérence du formatage pour tupleElement(*, 1). Résout #78639. #78832 (Konstantin Bogdanov).
  • Les Dictionaries de type ssd_cache rejettent désormais les paramètres block_size et write_buffer_size nuls ou négatifs (issue #78314). #78854 (Elmi Ahmadov).
  • Correction d’un crash dans Refreshable MATERIALIZED VIEW dans le cas d’un ALTER après un arrêt anormal. #78858 (Azat Khuzhin).
  • Correction de l’analyse des valeurs DateTime invalides au format CSV. #78919 (Pavel Kruglov).
  • Correctif Keeper : éviter de déclencher des watches sur des requêtes multiples ayant échoué. #79247 (Antonio Andelic).
  • Correction d’un échec de lecture d’une table Iceberg lorsque la valeur min-max est explicitement spécifiée mais vaut NULL. Il a été constaté que la bibliothèque Go Iceberg générait de tels fichiers aberrants. Résout #78740. #78764 (flynn).

Amélioration de la compilation/des tests/du packaging

  • Prise en compte des fonctionnalités du CPU cible en Rust et activation du LTO dans toutes les crates. #78590 (Raúl Marín).

Version de ClickHouse 25.3 LTS, 2025-03-20

Changement incompatible avec les versions précédentes

Nouvelle fonctionnalité

  • Le type de données JSON est prêt pour la production. Voir https://jsonbench.com/. Les types de données Dynamic et Variant sont prêts pour la production. #77785 (Alexey Milovidov).
  • Ajout du protocole SSH pour clickhouse-server. Il est désormais possible de se connecter à ClickHouse avec n’importe quel client SSH. Cela clôt : #74340. #74989 (George Gamezardashvili).
  • Remplacement des fonctions de table par leurs alternatives -Cluster si les répliques parallèles sont activées. Corrige #65024. #70659 (Konstantin Bogdanov).
  • Nouvelle implémentation du Userspace Page Cache, qui permet de mettre les données en cache dans la mémoire du processus au lieu de s’appuyer sur le cache de pages de l’OS, ce qui est utile lorsque les données sont stockées sur un système de fichiers virtuel distant sans cache de système de fichiers local sous-jacent. #70509 (Michael Kolupaev).
  • Ajout du paramètre serveur concurrent_threads_scheduler, qui régit la manière dont les slots CPU sont répartis entre les requêtes concurrentes. Il peut être défini sur round_robin (comportement précédent) ou fair_round_robin pour corriger la répartition inéquitable du CPU entre les requêtes INSERT et SELECT. #75949 (Sergei Trifonov).
  • Ajout de la fonction d’agrégation estimateCompressionRatio #70801. #76661 (Tariq Almawash).
  • Ajout de la fonction arraySymmetricDifference. Elle renvoie tous les éléments de plusieurs arguments de tableau qui ne sont pas présents dans tous les arguments. Exemple : SELECT arraySymmetricDifference([1, 2], [2, 3]) renvoie [1, 3]. (issue #61673). #76231 (Filipp Abapolov).
  • Possibilité de spécifier explicitement le fichier de métadonnées à lire pour Iceberg avec le paramètre de moteur de stockage/fonction de table iceberg_metadata_file_path . Corrige #47412. #77318 (alesapin).
  • Ajout de la fonction de hachage keccak256, couramment utilisée dans les implémentations de blockchain, en particulier dans les systèmes basés sur l’EVM. #76669 (Arnaud Briche).
  • Ajout de trois nouvelles fonctions : icebergTruncate, conformément à la spécification https://iceberg.apache.org/spec/#truncate-transform-details, toYearNumSinceEpoch et toMonthNumSinceEpoch. Prise en charge de la transformation truncate dans l’élagage des partitions pour le moteur Iceberg. #77403 (alesapin).
  • Prise en charge des types de données LowCardinality(Decimal) #72256. #72833 (zhanglistar).
  • Les événements de profil FilterTransformPassedRows et FilterTransformPassedBytes afficheront le nombre de lignes et d’octets filtrés pendant l’exécution de la requête. #76662 (Onkar Deshpande).
  • Prise en charge du type de métrique histogramme. L’interface reflète étroitement le client Prometheus : il suffit d’appeler observe(value) pour incrémenter le compteur dans le bucket correspondant à la valeur. Les métriques histogrammes sont exposées via system.histogram_metrics. #75736 (Miсhael Stetsyuk).
  • Prise en charge des expressions CASE non constantes pour le branchement sur des valeurs explicites. #77399 (Yarik Briukhovetskyi).

Fonctionnalité expérimentale

  • Ajout de la prise en charge de Unity Catalog pour les tables DeltaLake reposant sur AWS S3 et le système de fichiers local. #76988 (alesapin).
  • Introduction d’une intégration expérimentale avec le catalogue de services AWS Glue pour les tables Iceberg. #77257 (alesapin).
  • Ajout de la prise en charge de l’autodécouverte dynamique des clusters. Cela étend la fonctionnalité existante d’autodécouverte des nœuds. ClickHouse peut désormais détecter et enregistrer automatiquement de nouveaux clusters sous un chemin ZooKeeper commun à l’aide de <multicluster_root_path>. #76001 (Anton Ivashkin).
  • Permet les fusions de nettoyage automatiques de partitions entières après un délai configurable, grâce au nouveau paramètre enable_replacing_merge_with_cleanup_for_min_age_to_force_merge. #76440 (Christoph Wurm).

Amélioration des performances

  • Implémentation du query condition cache afin d’améliorer les performances des requêtes utilisant des conditions répétées. La plage correspondant à la portion de données qui ne satisfait pas la condition est mémorisée en tant qu’index temporaire en mémoire. Les requêtes suivantes utiliseront cet index. Closes #67768 #69236 (zhongyuankai).
  • Éviction active des données du cache lors de la suppression des parts. Évite que le cache n’augmente jusqu’à sa taille maximale lorsque le volume de données est inférieur. #76641 (Alexey Milovidov).
  • Remplacement de Int256 et UInt256 par le type intégré i256 de clang dans les calculs arithmétiques, ce qui améliore les performances #70502. #73658 (李扬).
  • Dans certains cas (par ex. une colonne de type Array vide), les data parts peuvent contenir des fichiers vides. Il est désormais possible d’ignorer l’écriture de blobs vides dans ObjectStorage et de ne stocker que les métadonnées de ces fichiers lorsque la table se trouve sur un disk avec métadonnées et object storage séparés. #75860 (Alexander Gololobov).
  • Amélioration des performances des opérations min/max pour Decimal32/Decimal64/DateTime64. #76570 (李扬).
  • La compilation des requêtes (paramètre compile_expressions) tient désormais compte du type de machine. Cela accélère considérablement ces requêtes. #76753 (ZhangLiStar).
  • Optimisation de arraySort. #76850 (李扬).
  • Désactivation de filesystem_cache_prefer_bigger_buffer_size lorsque le cache est utilisé passivement, par exemple pour les merges. #77898 (Kseniia Sumarokova).
  • Application de l’attribut preserve_most à certains endroits du code, ce qui permet une génération de code légèrement meilleure. #67778 (Nikita Taranov).
  • Arrêt plus rapide des serveurs ClickHouse (suppression du délai de 2,5 s). #76550 (Azat Khuzhin).
  • Évite les allocations excessives dans ReadBufferFromS3 et d’autres buffers de lecture distants, et réduit de moitié leur consommation mémoire. #76692 (Sema Checherinda).
  • Mise à jour de zstd de 1.5.5 à 1.5.7, ce qui peut entraîner certaines améliorations des performances. #77137 (Pradeep Chhetri).
  • Réduction de l’utilisation mémoire lors des prefetches d’une JSON column dans des Wide parts. Ceci est pertinent lorsque ClickHouse est utilisé sur un stockage partagé, comme dans ClickHouse Cloud. #77640 (Pavel Kruglov).

Amélioration

  • Prise en charge du renommage atomique lorsque TRUNCATE est utilisé avec INTO OUTFILE. Résout #70323. #77181 (Onkar Deshpande).
  • Il n’est plus possible d’utiliser NaN ou inf comme valeurs flottantes pour les paramètres. Ce n’était de toute façon pas très pertinent. #77546 (Yarik Briukhovetskyi).
  • Désactive les répliques parallèles par défaut lorsque l’analyseur est désactivé, quel que soit le paramètre compatibility. Il reste possible de modifier ce comportement en définissant explicitement parallel_replicas_only_with_analyzer sur false. #77115 (Igor Nikonov).
  • Ajoute la possibilité de définir une liste d’en-têtes transférés depuis la requête du client vers l’authentificateur HTTP externe. #77054 (inv2004).
  • Respecte la correspondance insensible à la casse des colonnes pour les champs des colonnes tuple. Ferme https://github.com/apache/incubator-gluten/issues/8324. #73780 (李扬).
  • Les paramètres du codec Gorilla seront désormais toujours enregistrés dans les métadonnées de la table, dans le fichier .sql. Cela clôt #70072. #74814 (Nikita Mikhaylov).
  • Amélioration du parsing pour certains data lakes (parsing des identifiants de séquence : ajout de la prise en charge de l’analyse des identifiants de séquence dans les fichiers manifest, ET parsing des métadonnées Avro : refonte du parseur de métadonnées Avro pour le rendre facilement extensible à l’avenir). #75010 (Daniil Ivanik).
  • Supprime trace_id du ORDER BY par défaut de system.opentelemetry_span_log. #75907 (Azat Khuzhin).
  • Le chiffrement (l’attribut encrypted_by) peut désormais être appliqué à n’importe quel fichier de configuration (config.xml, users.xml, fichiers de configuration imbriqués). Auparavant, cela ne fonctionnait que pour le fichier config.xml de premier niveau. #75911 (Mikhail Gorshkov).
  • Améliore la table system.warnings et ajoute des messages d’avertissement dynamiques pouvant être ajoutés, mis à jour ou supprimés. #76029 (Bharat Nallan).
  • Cette PR empêche d’exécuter une query ALTER USER user1 ADD PROFILES a, DROP ALL PROFILES, car toutes les opérations DROP doivent apparaître en premier. #76242 (pufit).
  • Diverses améliorations pour SYNC REPLICA (meilleurs messages d’erreur, meilleurs tests, vérifications de cohérence). #76307 (Azat Khuzhin).
  • Utilise le mécanisme de repli approprié lorsqu’une copie multipart vers S3 échoue pendant une sauvegarde avec une erreur Access Denied. La copie multipart peut générer une erreur Access Denied lorsque la sauvegarde s’effectue entre des buckets ayant des identifiants d’authentification différents. #76515 (Antonio Andelic).
  • Mise à niveau de librdkafka (qui est une grosse daube) vers la version 2.8.0 (sans que cela l’améliore vraiment) et amélioration de la séquence d’arrêt des tables Kafka, réduisant les délais lors de la suppression de tables et du redémarrage du serveur. engine=Kafka ne quitte plus explicitement le groupe de consommateurs lorsqu’une table est supprimée. À la place, le consommateur reste dans le groupe jusqu’à ce qu’il en soit automatiquement retiré après session_timeout_ms (par défaut : 45 secondes) d’inactivité. #76621 (filimonov).
  • Correction de la validation des paramètres des requêtes S3. #76658 (Vitaly Baranov).
  • Les tables système comme server_settings ou settings disposent d’une colonne default pour la valeur par défaut, ce qui est pratique. Elle a été ajoutée à merge_tree_settings et replicated_merge_tree_settings. #76942 (Diego Nieto).
  • Ajout de ProfileEvents::QueryPreempted, dont la logique est similaire à celle de CurrentMetrics::QueryPreempted. #77015 (VicoWu).
  • Auparavant, une base de données Replicated pouvait écrire dans les logs les identifiants d’authentification spécifiés dans une requête. Ce comportement a été corrigé. Cela clôture : #77123. #77133 (Nikita Mikhaylov).
  • Prise en charge de ALTER TABLE DROP PARTITION pour plain_rewritable disk. #77138 (Julia Kartseva).
  • Le paramètre de sauvegarde/restauration allow_s3_native_copy prend désormais en charge trois valeurs possibles : - False - la copie native S3 ne sera pas utilisée ; - True (ancienne valeur par défaut) - ClickHouse tentera d’abord la copie native S3, puis, en cas d’échec, reviendra à l’approche lecture+écriture ; - 'auto' (nouvelle valeur par défaut) - ClickHouse comparera d’abord les identifiants d’authentification de la source et de la destination. S’ils sont identiques, ClickHouse tentera la copie native S3 puis pourra revenir à l’approche lecture+écriture. S’ils sont différents, ClickHouse passera directement à l’approche lecture+écriture. #77401 (Vitaly Baranov).
  • Prise en charge du token de session AWS et de l’utilisation des identifiants d’authentification d’environnement dans le delta kernel pour le moteur de table DeltaLake. #77661 (Kseniia Sumarokova).

Correction de bug

  • Correction d’un blocage lors du traitement d’un batch en attente pour un INSERT distribué asynchrone (dû par exemple à No such file or directory). #72939 (Azat Khuzhin).
  • Amélioration de la conversion des datetime lors de l’analyse des index, en imposant un comportement saturant pour les conversions implicites de Date vers DateTime. Cela corrige d’éventuelles imprécisions de l’analyse des index causées par les limitations de plage des datetime. Cela corrige #73307. Cela corrige également la conversion explicite toDateTime lorsque date_time_overflow_behavior = 'ignore', qui est la valeur par défaut. #73326 (Amos Bird).
  • Correction de divers bugs dus à une condition de concurrence entre les UUID et les noms de table (par exemple, cela corrige la concurrence entre RENAME et RESTART REPLICA ; en cas de RENAME concurrent avec SYSTEM RESTART REPLICA, vous pourriez redémarrer la mauvaise replica et/ou laisser l’une des tables dans l’état Table X is being restarted). #76308 (Azat Khuzhin).
  • Correction d’une perte de données lorsque async insert est activé et qu’un insert into ... from file ... utilise des tailles de block inégales : si la taille du premier block est < async_max_size mais que celle du second block est > async_max_size, le second block n’est pas inséré. Ces données restent dans squashing. #76343 (Han Fei).
  • Le field ‘marks’ a été renommé en ‘marks_bytes’ dans system.data_skipping_indices. #76374 (Robert Schulze).
  • Correction de la gestion du redimensionnement dynamique du cache du système de fichiers en cas d’erreurs inattendues lors de l’éviction. #76466 (Kseniia Sumarokova).
  • Correction de l’initialisation de used_flag dans le hash parallèle. Cela pouvait provoquer un crash du serveur. #76580 (Nikita Taranov).
  • Correction d’une erreur logique lors de l’appel de la fonction defaultProfiles à l’intérieur d’une projection. #76627 (pufit).
  • Ne plus demander d’authentification Basic interactive dans le navigateur dans la Web UI. Clôt #76319. #76637 (Alexey Milovidov).
  • Correction de l’exception THERE_IS_NO_COLUMN lors de la sélection d’un littéral booléen depuis des tables distribuées. #76656 (Yakov Olkhovskiy).
  • Le sous-chemin à l’intérieur du répertoire de la table est désormais choisi de manière plus pertinente. #76681 (Daniil Ivanik).
  • Correction d’une erreur Not found column in block après modification d’une table avec une sous-colonne dans la PK. Après https://github.com/ClickHouse/ClickHouse/pull/72644, nécessite https://github.com/ClickHouse/ClickHouse/pull/74403. #76686 (Nikolai Kochetov).
  • Ajout de tests de performance pour le court-circuit sur NULL et correction de bugs. #76708 (李扬).
  • Vider les tampons d’écriture de sortie avant de les finaliser. Corrige LOGICAL_ERROR générée lors de la finalisation de certains formats de sortie, par ex. JSONEachRowWithProgressRowOutputFormat. #76726 (Antonio Andelic).
  • Ajout de la prise en charge de l’UUID binaire de MongoDB (#74452) - Correction du pushdown de WHERE vers MongoDB lors de l’utilisation de la table function (#72210) - Modification du type mapping entre MongoDB et ClickHouse afin que l’UUID binaire de MongoDB ne puisse être analysé qu’en UUID ClickHouse. Cela devrait éviter toute ambiguïté et les mauvaises surprises à l’avenir. - Correction du mapping OID, tout en préservant la backward compatibility. #76762 (Kirill Nikiforov).
  • Correction de la gestion des exceptions lors de la deserialization en parallèle des prefixes des JSON subcolumns. #76809 (Pavel Kruglov).
  • Correction du comportement de la fonction lgamma pour les entiers négatifs. #76840 (Ilya Kataev).
  • Correction de l’analyse des clés inversées pour les primary keys définies explicitement. Similaire à #76654. #76846 (Amos Bird).
  • Correction de l’affichage formaté des valeurs Bool au format JSON. #76905 (Pavel Kruglov).
  • Correction d’un crash possible en raison d’un rollback incorrect de JSON column en cas d’erreur pendant les async inserts. #76908 (Pavel Kruglov).
  • Auparavant, multiIf pouvait renvoyer différents types de columns pendant la planification et l’exécution principale. Cela entraînait un comportement indéfini au niveau du code C++. #76914 (Nikita Taranov).
  • Correction d’une serialization incorrecte de clés Nullable constantes dans MergeTree. Cela corrige #76939. #76985 (Amos Bird).
  • Correction du tri des valeurs BFloat16. Cela clôt #75487. Cela clôt #75669. #77000 (Alexey Milovidov).
  • Correction d’un bug avec JSON et une Variant subcolumn, en ajoutant une vérification pour ignorer les subcolumns ephemeral lors de la vérification de cohérence des parts. #72187. #77034 (Smita Kulkarni).
  • Correction d’un crash lors du parsing de Template au format Values en cas d’incompatibilité de types. #77071 (Pavel Kruglov).
  • Ne pas autoriser la création d’une table EmbeddedRocksDB avec une subcolumn dans la primary key. Auparavant, une telle table pouvait être créée, mais les requêtes SELECT échouaient. #77074 (Pavel Kruglov).
  • Correction d’une comparaison non valide dans les distributed queries, car le pushdown des predicates vers le serveur distant ne respecte pas les types des littéraux. #77093 (Duc Canh Le).
  • Correction d’un crash lors de la création d’une table Kafka avec exception. #77121 (Pavel Kruglov).
  • Prise en charge de JSON et des sous-colonnes dans les moteurs Kafka et RabbitMQ. #77122 (Pavel Kruglov).
  • Correction du désempilement de la pile des exceptions sur MacOS. #77126 (Eduard Karacharov).
  • Correction de la lecture de la sous-colonne ‘null’ dans la fonction getSubcolumn. #77163 (Pavel Kruglov).
  • Correction de l’index bloom filter avec Array et des fonctions non prises en charge. #77271 (Pavel Kruglov).
  • La restriction sur le nombre de tables ne doit être vérifiée que lors de la requête CREATE initiale. #77274 (Nikolay Degterinsky).
  • Ce n’est pas un bug : SELECT toBFloat16(-0.0) == toBFloat16(0.0) renvoie désormais correctement true (au lieu de false auparavant). Le comportement est ainsi cohérent avec Float32 et Float64. #77290 (Shankar Iyer).
  • Correction d’une possible référence incorrecte à la variable key_index non initialisée, ce qui peut provoquer un crash dans les builds de débogage (cette référence non initialisée ne causera probablement pas de problèmes dans les builds de release, car le code suivant lèvera vraisemblablement des erreurs.) ### entrée de documentation pour les changements visibles par l’utilisateur. #77305 (wxybear).
  • Correction du nom de partition pour une valeur Bool. Le problème a été introduit dans https://github.com/ClickHouse/ClickHouse/pull/74533. #77319 (Pavel Kruglov).
  • Correction de la comparaison entre des Tuples contenant des éléments Nullable et des Strings. Par exemple, avant ce changement, la comparaison entre un Tuple (1, null) et une String '(1,null)' entraînait une erreur. Autre exemple : la comparaison entre un Tuple (1, a), où a est une colonne Nullable, et une String '(1, 2)'. Ce changement corrige ces problèmes. #77323 (Alexey Katsman).
  • Correction d’un crash dans ObjectStorageQueueSource. Introduit dans https://github.com/ClickHouse/ClickHouse/pull/76358. #77325 (Pavel Kruglov).
  • Correction de async_insert avec input. #77340 (Azat Khuzhin).
  • Correction : WITH FILL peut échouer avec NOT_FOUND_COLUMN_IN_BLOCK lorsque la colonne de tri est supprimée par le planificateur. Problème similaire lié à un DAG incohérent calculé pour l’expression INTERPOLATE. #77343 (Yakov Olkhovskiy).
  • Correction de plusieurs LOGICAL_ERROR liés à la définition d’alias sur des nœuds AST invalides. #77445 (Raúl Marín).
  • Correction, dans l’implémentation du filesystem cache, du traitement des erreurs lors de l’écriture d’un segment de fichier. #77471 (Kseniia Sumarokova).
  • Fait en sorte que DatabaseIceberg utilise le fichier de métadonnées correct fourni par le catalogue. Clôt #75187. #77486 (Kseniia Sumarokova).
  • Le cache de requêtes considère désormais les UDFs comme non déterministes. Par conséquent, les résultats des requêtes contenant des UDFs ne sont plus mis en cache. Auparavant, les utilisateurs pouvaient définir des UDFs non déterministes dont les résultats étaient mis en cache par erreur (problème #77553). #77633 (Jimmy Aguilar Mena).
  • Correction de system.filesystem_cache_log, qui ne fonctionnait qu’avec le paramètre enable_filesystem_cache_log. #77650 (Kseniia Sumarokova).
  • Correction d’une erreur logique lors de l’appel de la fonction defaultRoles à l’intérieur d’une projection. Suite de #76627. #77667 (pufit).
  • Les seconds arguments de type Nullable pour la fonction arrayResize sont désormais interdits. Auparavant, l’utilisation de Nullable comme second argument pouvait provoquer aussi bien des erreurs que des résultats incorrects. (problème #48398). #77724 (Manish Gill).
  • Vérifie régulièrement si les fusions et les mutations ont été annulées, même lorsque l’opération ne produit aucun bloc à écrire. #77766 (János Benjamin Antal).

Amélioration de la compilation/des tests/du packaging

Version 25.2 de ClickHouse, 2025-02-27

Changement incompatible avec les versions précédentes

  • Active entièrement async_load_databases par défaut (y compris pour les installations qui ne mettent pas à jour config.xml). #74772 (Azat Khuzhin).
  • Ajoute les formats JSONCompactEachRowWithProgress et JSONCompactStringsEachRowWithProgress. Suite de #69989. JSONCompactWithNames et JSONCompactWithNamesAndTypes n’affichent plus « totals » — il semble qu’il s’agissait d’une erreur d’implémentation. #75037 (Alexey Milovidov).
  • Change la valeur par défaut de format_alter_operations_with_parentheses à true afin de lever l’ambiguïté dans la liste des commandes ALTER (voir https://github.com/ClickHouse/ClickHouse/pull/59532). Cela casse la réplication avec les clusters antérieurs à 24.3. Si vous mettez à niveau un cluster utilisant d’anciennes versions, désactivez ce paramètre dans la configuration du serveur ou effectuez d’abord la mise à niveau vers 24.3. #75302 (Raúl Marín).
  • Supprime la possibilité de filtrer les log messages à l’aide d’expressions régulières. L’implémentation introduisait une data race, elle doit donc être supprimée. #75577 (János Benjamin Antal).
  • Le paramètre min_chunk_bytes_for_parallel_parsing ne peut plus être égal à zéro. Cela corrige : #71110. #75239 (Nikita Mikhaylov).
  • Valide les paramètres dans la configuration du cache. Les paramètres inexistants étaient auparavant ignorés ; désormais, ils provoqueront une erreur et devront être supprimés. #75452 (Kseniia Sumarokova).

Nouvelle fonctionnalité

  • Prise en charge du type Nullable(JSON). #73556 (Pavel Kruglov).
  • Prise en charge des sous-colonnes dans les expressions DEFAULT et MATERIALIZED. #74403 (Pavel Kruglov).
  • Prise en charge de l’écriture de bloom filters Parquet à l’aide du paramètre output_format_parquet_write_bloom_filter (activé par défaut). #71681 (Michael Kolupaev).
  • L’interface web dispose désormais d’une navigation interactive dans les bases de données. #75777 (Alexey Milovidov).
  • Autorise la combinaison de disques en mode lecture seule et lecture-écriture dans la politique de stockage (sous forme de plusieurs volumes ou de plusieurs disques). Cela permet de lire les données depuis l’ensemble du volume, tandis que les insertions privilégient le disque accessible en écriture (c.-à-d. une politique de stockage Copy-on-Write). #75862 (Azat Khuzhin).
  • Ajout d’un nouveau moteur de base de données, DatabaseBackup, qui permet d’attacher instantanément une table/base de données à partir d’une sauvegarde. #75725 (Maksim Kita).
  • Prise en charge des instructions préparées dans le wire protocol Postgres. #75035 (scanhex12).
  • Ajout de la possibilité d’utiliser ATTACH sur des tables sans couche de base de données, ce qui est utile pour les tables MergeTree situées sur Web, S3 et des systèmes de fichiers virtuels externes similaires. #75788 (Azat Khuzhin).
  • Ajout d’une nouvelle fonction de comparaison de chaînes, compareSubstrings, pour comparer des parties de deux chaînes. Exemple : SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result signifie « comparer lexicographiquement 6 octets des chaînes ‘Saxon’ et ‘Anglo-Saxon’, en commençant à l’offset 0 dans la première chaîne et à l’offset 5 dans la seconde chaîne ». #74070 (lgbo).
  • Ajout d’une nouvelle fonction, initialQueryStartTime. Elle renvoie l’heure de début de la requête en cours. La valeur est identique sur tous les shards lors d’une requête distribuée. #75087 (Roman Lomonosov).
  • Ajout de la prise en charge de l’authentification SSL avec des collections nommées pour MySQL. Ferme #59111. #59452 (Nikolay Degterinsky).

Fonctionnalités expérimentales

  • Ajout d’un nouveau paramètre, enable_adaptive_memory_spill_scheduler, qui permet à plusieurs Grace JOIN dans une même requête de surveiller leur empreinte mémoire cumulée et de déclencher de manière adaptative le déversement vers un stockage externe afin d’éviter MEMORY_LIMIT_EXCEEDED. #72728 (lgbo).
  • Le nouveau table engine Kafka, expérimental, respecte désormais pleinement les feature flags de Keeper. #76004 (János Benjamin Antal).
  • Restauration du codec QPL (Intel), qui avait été supprimé dans la v24.10 en raison de problèmes de licence. #76021 (Konstantin Bogdanov).
  • Pour l’intégration avec HDFS, ajout de la prise en charge de l’option de configuration dfs.client.use.datanode.hostname. #74635 (Mikhail Tiukavkin).

Amélioration des performances

  • Améliore les performances de lecture de la JSON column complète dans les Wide parts depuis S3. Cela est obtenu en ajoutant des prefetches pour la désérialisation des préfixes de subcolumn, un cache des préfixes désérialisés et la désérialisation en parallèle des préfixes de subcolumn. Les performances de lecture de la JSON column depuis S3 sont ainsi multipliées par 4 pour des requêtes comme SELECT data FROM table et par environ 10 pour des requêtes comme SELECT data FROM table LIMIT 10. #74827 (Pavel Kruglov).
  • Corrige une contention inutile dans parallel_hash lorsque max_rows_in_join = max_bytes_in_join = 0. #75155 (Nikita Taranov).
  • Corrige une double préallocation dans ConcurrentHashJoin lorsque les côtés du join sont permutés par l’optimiseur. #75149 (Nikita Taranov).
  • Légère amélioration dans certains scénarios de join : précalcul du nombre de lignes en sortie et réservation de la mémoire correspondante. #75376 (Alexander Gololobov).
  • Pour des requêtes comme WHERE a < b AND b < c AND c < 5, il est possible d’inférer de nouvelles conditions de comparaison (a < 5 AND b < 5) afin d’améliorer le filtrage. #73164 (Shichao Jin).
  • Amélioration de Keeper : désactive le calcul du digest lors du commit dans le stockage en mémoire afin d’améliorer les performances. Il peut être réactivé avec la config keeper_server.digest_enabled_on_commit. Le digest continue d’être calculé lors du prétraitement des requêtes. #75490 (Antonio Andelic).
  • Push down de la filter expression depuis JOIN ON lorsque c’est possible. #75536 (Vladimir Cherkasov).
  • Calcule les tailles des columns et des indexes à la demande dans MergeTree. #75938 (Pavel Kruglov).
  • Rétablit la prise en compte de ttl_only_drop_parts pour MATERIALIZE TTL ; lit uniquement les columns nécessaires pour recalculer le TTL et supprime les parts en les remplaçant par des parts vides. #72751 (Andrey Zvonov).
  • Réduit la taille du buffer d’écriture pour les fichiers de metadata plain_rewritable. #75758 (Julia Kartseva).
  • Réduit la memory usage pour certaines window functions. #65647 (lgbo).
  • Évalue conjointement les bloom filters Parquet et les indexes min/max. Nécessaire pour prendre correctement en charge x = 3 or x > 5 lorsque data = [1, 2, 4, 5]. #71383 (Arthur Passos).
  • Les queries transmises au stockage Executable ne sont plus limitées à une exécution single-threaded. #70084 (yawnt).
  • Fetch les parts en parallèle dans ALTER TABLE FETCH PARTITION (la taille du thread pool est contrôlée par max_fetch_partition_thread_pool_size). #74978 (Azat Khuzhin).
  • Permet de déplacer vers PREWHERE les predicates avec la fonction indexHint. #74987 (Anton Popov).

Amélioration

  • Correction du calcul de la taille en mémoire pour les colonnes LowCardinality. #74688 (Nikita Taranov).
  • La table processors_profile_log dispose désormais d’une configuration par défaut avec un TTL de 30 jours. #66139 (Ilya Yatsishin).
  • Possibilité de nommer les shards dans la configuration du cluster. #72276 (MikhailBurdukov).
  • Le statut de succès de la réponse Prometheus remote write passe de 200/OK à 204/NoContent. #74170 (Michael Dempsey).
  • Ajout de la possibilité de recharger max_remote_read_network_bandwidth_for_serve et max_remote_write_network_bandwidth_for_server à chaud, sans redémarrer le serveur. #74206 (Kai Zhu).
  • Possibilité d’utiliser des chemins de blob pour calculer des sommes de contrôle lors de la création d’une sauvegarde. #74729 (Vitaly Baranov).
  • Ajout d’une colonne d’identifiant de requête à system.query_cache (corrige #68205). #74982 (NamHoaiNguyen).
  • Il est désormais possible d’annuler les requêtes ALTER TABLE ... FREEZE ... avec KILL QUERY et automatiquement via un timeout (max_execution_time). #75016 (Kirill).
  • Ajout de la prise en charge de groupUniqArrayArrayMap en tant que SimpleAggregateFunction. #75034 (Miel Donkers).
  • Masquage des paramètres d’identifiants du catalog dans le moteur de base de données Iceberg. Corrige #74559. #75080 (Kseniia Sumarokova).
  • intExp2 / intExp10 : définition du comportement jusque-là indéfini : retourner 0 pour un argument trop petit, 18446744073709551615 pour un argument trop grand, lever une exception si nan. #75312 (Vitaly Baranov).
  • Prise en charge native de s3.endpoint depuis la config du catalog dans DatabaseIceberg. Corrige #74558. #75375 (Kseniia Sumarokova).
  • Ne plus échouer silencieusement si un utilisateur exécutant SYSTEM DROP REPLICA ne dispose pas des permissions suffisantes. #75377 (Bharat Nallan).
  • Ajout d’un ProfileEvent sur le nombre de fois où l’un des logs système n’a pas pu être vidangé. #75466 (Alexey Milovidov).
  • Ajout d’une vérification et de logs supplémentaires pour le déchiffrement et la décompression. #75471 (Vitaly Baranov).
  • Ajout de la prise en charge du signe micro (U+00B5) dans la fonction parseTimeDelta. Désormais, le signe micro (U+00B5) et la lettre grecque mu (U+03BC) sont tous deux reconnus comme des représentations valides des microsecondes, ce qui aligne le comportement de ClickHouse sur l’implémentation de Go (voir time.go et time/format.go). #75472 (Vitaly Orlov).
  • Remplacement du paramètre serveur (send_settings_to_client) par un paramètre client (apply_settings_from_server) qui détermine si le code côté client (par ex. l’analyse des données INSERT et le formatage de la sortie des requêtes) doit utiliser les paramètres provenant de users.xml et du profil utilisateur du serveur. Sinon, seuls les paramètres définis via la ligne de commande du client, la session et la requête sont utilisés. Notez que cela s’applique uniquement au client natif (et non, par ex., à HTTP) et pas à la majeure partie du traitement des requêtes (qui s’effectue sur le serveur). #75478 (Michael Kolupaev).
  • Messages d’erreur améliorés pour les erreurs de syntaxe. Auparavant, si la requête était trop volumineuse et que le jeton dont la longueur dépassait la limite était un très long littéral de chaîne, le message expliquant la cause se retrouvait perdu au milieu de deux exemples de ce jeton très long. Correction également d’un problème où une requête en UTF-8 était tronquée incorrectement dans le message d’erreur. Correction aussi de l’usage excessif des guillemets autour des fragments de requête. Cela clôt #75473. #75561 (Alexey Milovidov).
  • Ajout d’événements de profilage dans le stockage S3(Azure)Queue. #75618 (Kseniia Sumarokova).
  • Désactivation de l’envoi des paramètres du serveur au client (send_settings_to_client=false) pour des raisons de compatibilité (cette fonctionnalité sera réimplémentée plus tard sous la forme d’un paramètre client pour une meilleure ergonomie). #75648 (Michael Kolupaev).
  • Ajout d’une config memory_worker_correct_memory_tracker pour permettre la correction du memory tracker interne à l’aide d’informations provenant de différentes sources lues périodiquement par le thread d’arrière-plan. #75714 (Antonio Andelic).
  • Ajout de la colonne normalized_query_hash dans system.processes. Remarque : bien qu’elle puisse être calculée facilement à la volée avec la fonction normalizedQueryHash, elle est nécessaire pour préparer les modifications ultérieures. #75756 (Alexey Milovidov).
  • Les requêtes sur system.tables ne lèveront plus d’exception, même s’il existe une table Merge créée sur une base de données qui n’existe plus. Suppression de la méthode getTotalRows des tables Hive, car nous ne l’autorisons pas à effectuer un travail complexe. #75772 (Alexey Milovidov).
  • Stockage de start_time/end_time avec une précision à la microseconde pour les sauvegardes. #75929 (Aleksandr Musorin).
  • Ajout de la métrique MemoryTrackingUncorrected, qui affiche la valeur du memory tracker global interne non corrigée par le RSS. #75935 (Antonio Andelic).
  • Autoriser l’analyse d’endpoints tels que localhost:1234/handle dans les fonctions de table PostgreSQL ou MySQL. Cela corrige une régression introduite dans https://github.com/ClickHouse/ClickHouse/pull/52503. #75944 (Nikita Mikhaylov).
  • Ajout d’un server setting throw_on_unknown_workload permettant de définir le comportement d’une query dont le paramètre workload est défini sur une valeur inconnue : soit autoriser un accès illimité (par défaut), soit renvoyer une erreur RESOURCE_ACCESS_DENIED. Cela est utile pour forcer toutes les queries à utiliser le Workload scheduling. #75999 (Sergei Trifonov).
  • Ne pas réécrire les subcolumns en getSubcolumn dans ARRAY JOIN si ce n’est pas nécessaire. #76018 (Pavel Kruglov).
  • Réessayer les erreurs de coordination lors du chargement des tables. #76020 (Alexander Tokmakov).
  • Prise en charge du flush de logs individuels dans SYSTEM FLUSH LOGS. #76132 (Raúl Marín).
  • Amélioration de la page /binary du serveur. Utilisation de la courbe de Hilbert au lieu de la courbe de Morton. Affiche 512 Mo d’adresses dans le carré, ce qui le remplit mieux (dans les versions précédentes, les adresses n’en remplissaient que la moitié). Colore les adresses en fonction du nom de la bibliothèque plutôt que du nom de la fonction. Permet de faire défiler un peu plus au-delà de la zone. #76192 (Alexey Milovidov).
  • Réessayer les queries ON CLUSTER en cas de TOO_MANY_SIMULTANEOUS_QUERIES. #76352 (Patrick Galbraith).
  • Ajout de la Metric asynchrone CPUOverload, qui calcule le déficit relatif de CPU du serveur. #76404 (Alexey Milovidov).
  • Modification de la valeur par défaut de output_format_pretty_max_rows, de 10000 à 1000. Je pense que c’est préférable pour la convivialité. #76407 (Alexey Milovidov).

Correction de bug (anomalie visible par l’utilisateur dans une version stable officielle)

  • Corrige la mise en forme des exceptions à l’aide d’un format personnalisé lorsqu’elles surviennent pendant l’interprétation de la requête. Dans les versions précédentes, les exceptions étaient mises en forme avec le format par défaut au lieu de celui spécifié dans la requête. Cela résout #55422. #74994 (Alexey Milovidov).
  • Corrige le mapping de types pour SQLite (types entiers vers int64, nombres à virgule flottante vers float64). #73853 (Joanna Hulboj).
  • Corrige la résolution des identifiants depuis les portées englobantes. Autorise l’utilisation d’alias pour les expressions dans la clause WITH. Corrige #58994. Corrige #62946. Corrige #63239. Corrige #65233. Corrige #71659. Corrige #71828. Corrige #68749. #66143 (Dmitry Novik).
  • Corrige la monotonie de la fonction negate. Dans les versions précédentes, la requête select * from a where -x = -42;, où x est la clé primaire, pouvait renvoyer un résultat incorrect. #71440 (Michael Kolupaev).
  • Corrige la gestion des tuples vides dans arrayIntersect. Cela corrige #72578. #72581 (Amos Bird).
  • Corrige la lecture des sous-colonnes de sous-objets JSON avec un préfixe incorrect. #73182 (Pavel Kruglov).
  • Propage correctement les paramètres du format Native pour la communication client-serveur. #73924 (Pavel Kruglov).
  • Vérifie la prise en charge des types pour certains moteurs de stockage. #74218 (Pavel Kruglov).
  • Corrige un plantage avec la requête INSERT INTO SELECT via l’interface PostgreSQL sur macOS (issue #72938). #74231 (Artem Yurov).
  • Corrige max_log_ptr non initialisé dans la base de données Replicated. #74336 (Konstantin Morozov).
  • Corrige un plantage lors de l’insertion d’un intervalle (issue #74299). #74478 (NamHoaiNguyen).
  • Corrige la mise en forme des littéraux JSON constants. Auparavant, cela pouvait entraîner des erreurs de syntaxe lors de l’envoi de la requête à un autre serveur. #74533 (Pavel Kruglov).
  • Corrige une requête CREATE incorrecte lors de l’utilisation d’expressions de partition constantes avec les projections implicites activées. Cela corrige #74596 . #74634 (Amos Bird).
  • Évite de laisser la connexion dans un état défectueux après qu’un INSERT se termine par une exception. #74740 (Azat Khuzhin).
  • Évite de réutiliser des connexions laissées dans un état intermédiaire. #74749 (Azat Khuzhin).
  • Corrige un crash lors de l’analyse d’une déclaration du type JSON lorsque le nom du type n’est pas en majuscules. #74784 (Pavel Kruglov).
  • Keeper : corrige logical_error lorsque la connexion était interrompue avant d’avoir pu être établie. #74844 (Michael Kolupaev).
  • Corrige un problème empêchant le serveur de démarrer lorsqu’une table utilisait AzureBlobStorage. Les tables sont désormais chargées sans aucune requête vers Azure. #74880 (Alexey Katsman).
  • Corrige l’absence des champs used_privileges et missing_privileges dans query_log pour les opérations BACKUP et RESTORE. #74887 (Alexey Katsman).
  • HDFS actualise le ticket krb en cas d’erreur sasl pendant une requête SELECT HDFS. #74930 (inv2004).
  • Corrige les queries vers une base de données Replicated dans startup_scripts. #74942 (Azat Khuzhin).
  • Corrige les problèmes liés aux expressions typées avec alias dans la clause JOIN ON lorsqu’une comparaison null-safe est utilisée. #74970 (Vladimir Cherkasov).
  • Rétablit l’état d’une part de deleting à outdated lorsque l’opération de suppression a échoué. #74985 (Sema Checherinda).
  • Dans les versions précédentes, en présence d’une subquery scalaire, la progression (accumulée pendant le traitement de la subquery) a commencé à être écrite lors de l’initialisation du format de données, donc avant l’écriture des en-têtes HTTP. Cela entraînait la perte des en-têtes HTTP, tels que X-ClickHouse-QueryId et X-ClickHouse-Format, ainsi que de Content-Type. #74991 (Alexey Milovidov).
  • Corrige les queries CREATE TABLE AS... pour database_replicated_allow_replicated_engine_arguments=0. #75000 (Bharat Nallan).
  • Corrige le fait que le client laisse la connexion dans un mauvais état après des exceptions INSERT. #75030 (Azat Khuzhin).
  • Corrige un crash dû à une exception non interceptée dans la réplication PSQL. #75062 (Azat Khuzhin).
  • Sasl peut faire échouer n’importe quel appel rpc ; ce correctif permet de relancer l’appel si le ticket krb5 a expiré. #75063 (inv2004).
  • Corrige l’utilisation des indexes (primaires et secondaires) pour les colonnes Array, Map et Nullable(..) avec le paramètre optimize_function_to_subcolumns activé. Auparavant, les indexes de ces colonnes pouvaient être ignorés. #75081 (Anton Popov).
  • Désactivez flatten_nested lors de la création de vues matérialisées avec des tables internes, car il ne sera pas possible d’utiliser de telles colonnes aplaties. #75085 (Christoph Wurm).
  • Correction d’un problème affectant certaines adresses IPv6 (telles que ::ffff:1.1.1.1) dans le champ forwarded_for, qui étaient interprétées à tort, entraînant une déconnexion du client avec une exception. #75133 (Yakov Olkhovskiy).
  • Correction de la gestion des JOIN null-safe pour le type de données nullable LowCardinality. Auparavant, les JOIN ON avec une comparaison null-safe, telle que IS NOT DISTINCT FROM, <=> , a IS NULL AND b IS NULL OR a == b, ne fonctionnaient pas correctement avec les colonnes LowCardinality. #75143 (Vladimir Cherkasov).
  • Vérifie que nous ne spécifions pas key_condition lors du comptage de total_number_of_rows pour NumRowsCache. #75164 (Daniil Ivanik).
  • Correction des requêtes avec interpolation inutilisée avec le nouvel analyseur. #75173 (János Benjamin Antal).
  • Correction d’un bug de crash des CTE avec Insert. #75188 (Shichao Jin).
  • Correctif Keeper : évite d’écrire dans des changelogs corrompus lors du rollback des logs. #75197 (Antonio Andelic).
  • Utilise BFloat16 comme supertype lorsque c’est approprié. Cela clôture : #74404. #75236 (Nikita Mikhaylov).
  • Correction de valeurs par défaut inattendues dans le résultat du JOIN avec any_join_distinct_right_table_keys et OR dans JOIN ON. #75262 (Vladimir Cherkasov).
  • Masque les informations d’identification du moteur de table azureblobstorage. #75319 (Garrett Thomas).
  • Correction du comportement dans les cas où ClickHouse pouvait, à tort, effectuer un pushdown de filtre vers une base de données externe comme PostgreSQL, MySQL ou SQLite. Cela clôture : #71423. #75320 (Nikita Mikhaylov).
  • Correction d’un crash dans le cache de schéma Protobuf pouvant survenir lors d’une sortie au format Protobuf et de la requête parallèle SYSTEM DROP FORMAT SCHEMA CACHE. #75357 (Pavel Kruglov).
  • Correction d’une possible erreur logique ou d’un problème de mémoire non initialisée lorsqu’un filtre de HAVING est pushed down avec des répliques parallèles. #75363 (Vladimir Cherkasov).
  • Masque les informations sensibles pour les fonctions de table et les moteurs de table icebergS3 et icebergAzure. #75378 (Kseniia Sumarokova).
  • La FUNCTION TRIM avec des caractères de trim vides calculés est désormais correctement gérée. Example : SELECT TRIM(LEADING concat('') FROM 'foo') (Issue #69922). #75399 (Manish Gill).
  • Corrige une data race dans IOutputFormat. #75448 (Pavel Kruglov).
  • Corrige l’erreur possible Elements ... and ... of Nested data structure ... (Array columns) have different array sizes lorsque des sous-colonnes JSON de type Array sont utilisées dans un JOIN sur des tables Distributed. #75512 (Pavel Kruglov).
  • Corrige une corruption de données avec CODEC(ZSTD, DoubleDelta). Clôt #70031. #75548 (Konstantin Bogdanov).
  • Corrige l’interaction entre allow_feature_tier et le paramètre de compatibilité MergeTree. #75635 (Raúl Marín).
  • Corrige la valeur incorrecte de processed_rows dans system.s3queue_log lorsqu’un fichier a fait l’objet d’une nouvelle tentative. #75666 (Kseniia Sumarokova).
  • Respecte materialized_views_ignore_errors lorsqu’une vue matérialisée écrit vers un moteur URL et qu’un problème de connectivité survient. #75679 (Christoph Wurm).
  • Corrige de rares plantages lors de la lecture d’une table MergeTree après plusieurs requêtes RENAME asynchrones (avec alter_sync = 0) entre des colonnes de types différents. #75693 (Anton Popov).
  • Corrige l’erreur Block structure mismatch in QueryPipeline stream pour certaines requêtes avec UNION ALL. #75715 (Nikolai Kochetov).
  • Reconstruit la projection lors d’un alter modify de sa colonne de clé primaire. Auparavant, cela pouvait entraîner des erreurs CANNOT_READ_ALL_DATA lors de SELECT après un alter modify de la colonne utilisée dans la clé primaire de la projection. #75720 (Pavel Kruglov).
  • Corrige le résultat incorrect de ARRAY JOIN pour les sous-requêtes scalaires (avec l’analyzer). #75732 (Nikolai Kochetov).
  • Corrige un déréférencement de pointeur nul dans DistinctSortedStreamTransform. #75734 (Nikita Taranov).
  • Corrige le comportement de allow_suspicious_ttl_expressions. #75771 (Aleksei Filatov).
  • Corrige une lecture de mémoire non initialisée dans la fonction translate. Clôt #75592. #75794 (Alexey Milovidov).
  • Propage les paramètres de format au formatage des chaînes JSON dans le Native format. #75832 (Pavel Kruglov).
  • Enregistre dans l’historique des modifications des paramètres l’activation par défaut de parallel hash comme join algorithm dans la v24.12. Cela signifie que ClickHouse continuera d’exécuter les JOIN avec un hash non parallèle si un niveau de compatibilité antérieur à la v24.12 est configuré. #75870 (Robert Schulze).
  • Correction d’un bug qui empêchait de copier dans une nouvelle table des tables avec des index min-max ajoutés implicitement (issue #75677). #75877 (Smita Kulkarni).
  • clickhouse-library-bridge permet d’ouvrir des bibliothèques arbitraires depuis le système de fichiers, ce qui ne permet de l’exécuter en toute sécurité que dans un environnement isolé. Pour éviter une vulnérabilité lorsqu’il est exécuté à proximité de clickhouse-server, nous limiterons les chemins des bibliothèques à un emplacement défini dans la configuration. Cette vulnérabilité a été découverte dans le cadre du ClickHouse Bug Bounty Program par Arseniy Dugin. #75954 (Alexey Milovidov).
  • Nous avons utilisé par erreur la sérialisation JSON pour certaines métadonnées, ce qui posait problème, car JSON ne prend pas en charge les données binaires dans les littéraux de chaîne, y compris les octets nuls. Les requêtes SQL peuvent contenir des données binaires et de l’UTF-8 invalide, nous devons donc également le prendre en charge dans nos fichiers de métadonnées. Dans le même temps, JSONEachRow de ClickHouse et des formats similaires contournent ce problème en s’écartant de la norme JSON afin de garantir un aller-retour parfait pour les données binaires. Voir les explications ici : https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790. La solution consiste à rendre la bibliothèque Poco::JSON cohérente avec la sérialisation au format JSON dans ClickHouse. Cela clôt #73668. #75963 (Alexey Milovidov).
  • Correction de la vérification des limites de commit dans le stockage S3Queue. #76104 (Kseniia Sumarokova).
  • Correction de l’attachement des tables MergeTree avec index automatiques (add_minmax_index_for_numeric_columns/add_minmax_index_for_string_columns). #76139 (Azat Khuzhin).
  • Correction d’un problème où les stack traces des threads parents d’un job (paramètre enable_job_stack_trace) n’étaient pas affichées. Correction d’un problème où le paramètre enable_job_stack_trace n’était pas correctement propagé aux threads, si bien que le contenu de la stack trace ne respectait pas toujours ce paramètre. #76191 (Yakov Olkhovskiy).
  • Correction d’une vérification incorrecte des permissions où ALTER RENAME nécessitait le privilège CREATE USER. Clôt #74372. #76241 (pufit).
  • Correction de reinterpretAs avec FixedString sur une architecture big-endian. #76253 (Azat Khuzhin).
  • Correction de l’erreur logique dans S3Queue “Le processor actuel attendu devait être égal à pour le bucket ”. #76358 (Kseniia Sumarokova).
  • Correction d’un interblocage pour ALTER avec la base de données Memory. #76359 (Azat Khuzhin).
  • Correction d’une erreur logique dans l’analyse des index si la condition dans WHERE utilise la fonction pointInPolygon. #76360 (Anton Popov).
  • Correction d’un appel potentiellement dangereux dans le gestionnaire de signaux. #76549 (Yakov Olkhovskiy).
  • Correction de la prise en charge des clés inversées dans PartsSplitter. Cela corrige #73400. #73418 (Amos Bird).

Améliorations de la compilation/des tests/du packaging

  • Prise en charge de la compilation de HDFS sur les Mac ARM et Intel. #74244 (Yan Xin).
  • Activation d’ICU et de GRPC lors de la compilation croisée pour Darwin. #75922 (Raúl Marín).
  • Mise à jour vers LLVM 19 embarqué. #75148 (Konstantin Bogdanov).
  • Désactivation de l’accès réseau pour l’utilisateur default dans l’image Docker. #75259 (Mikhail f. Shiryaev). Toutes les actions liées à clickhouse-server sont désormais regroupées dans une fonction et exécutées uniquement lors du lancement du binaire par défaut dans entrypoint.sh. Cette amélioration, attendue depuis longtemps, avait été suggérée dans #50724. Ajout de l’option --users à clickhouse-extract-from-config pour récupérer les valeurs de users.xml. #75643 (Mikhail f. Shiryaev).
  • Suppression d’environ 20 Mo de code mort du binaire. #76226 (Alexey Milovidov).

Version de ClickHouse 25.1, 2025-01-28

Changement incompatible avec les versions précédentes

  • JSONEachRowWithProgress écrira désormais la progression à chaque mise à jour de celle-ci. Dans les versions précédentes, la progression n’était affichée qu’après chaque bloc du résultat, ce qui la rendait inutilisable. L’affichage de la progression change : les valeurs à zéro ne seront plus affichées. Cela corrige #70800. #73834 (Alexey Milovidov).
  • Les tables Merge unifieront la structure des tables sous-jacentes en utilisant une union de leurs colonnes et en déduisant des types communs. Cela corrige #64864. Dans certains cas, ce changement peut être incompatible avec les versions précédentes. Par exemple, lorsqu’il n’existe aucun type commun entre les tables, mais qu’une conversion vers le type de la première table reste possible, comme entre UInt64 et Int64, ou entre n’importe quel type numérique et String. Si vous souhaitez revenir à l’ancien comportement, définissez merge_table_max_tables_to_look_for_schema_inference sur 1 ou compatibility sur 24.12 ou une version antérieure. #73956 (Alexey Milovidov).
  • Le format de sortie Parquet convertit les colonnes Date et DateTime en types date/heure pris en charge par Parquet, au lieu de les écrire sous forme de nombres bruts. DateTime devient DateTime64(3) (au lieu de UInt32) ; le paramètre output_format_parquet_datetime_as_uint32 permet de rétablir l’ancien comportement. Date devient Date32 (au lieu de UInt16). #70950 (Michael Kolupaev).
  • Les types non comparables (comme JSON/Object/AggregateFunction) ne sont plus autorisés par défaut dans ORDER BY ni dans les fonctions de comparaison less/greater/equal/etc. #73276 (Pavel Kruglov).
  • Le moteur de base de données obsolète MaterializedMySQL a été supprimé et n’est plus disponible. #73879 (Alexey Milovidov).
  • La source de dictionnaire mysql n’exécute plus la requête SHOW TABLE STATUS, car elle n’apporte aucune information utile pour les tables InnoDB ni pour les versions récentes de MySQL. Cela corrige #72636. Ce changement est rétrocompatible, mais il est placé dans cette catégorie afin d’attirer votre attention. #73914 (Alexey Milovidov).
  • Les requêtes CHECK TABLE nécessitent désormais un privilège CHECK distinct. Dans les versions précédentes, il suffisait d’avoir le privilège SHOW TABLES pour exécuter ces requêtes. Or, une requête CHECK TABLE peut être lourde, et les limites habituelles de complexité des requêtes SELECT ne s’y appliquent pas. Cela créait un risque potentiel de DoS. #74471 (Alexey Milovidov).
  • La fonction h3ToGeo() renvoie désormais les résultats dans l’ordre (lat, lon) (qui est l’ordre standard pour les fonctions géométriques). Les utilisateurs qui souhaitent conserver l’ordre historique (lon, lat) peuvent définir le paramètre h3togeo_lon_lat_result_order = true. #74719 (Manish Gill).
  • Un nouveau pilote MongoDB est désormais utilisé par défaut. Les utilisateurs qui souhaitent continuer à utiliser l’ancien pilote peuvent définir le paramètre serveur use_legacy_mongodb_integration sur true. #73359 (Robert Schulze).

Nouvelle fonctionnalité

  • Ajout de la possibilité d’appliquer les mutations non terminées (non matérialisées par le processus d’arrière-plan) pendant l’exécution des requêtes SELECT, immédiatement après leur soumission. Cette fonctionnalité peut être activée via le paramètre apply_mutations_on_fly. #74877 (Anton Popov).
  • Implémentation du partition pruning des tables Iceberg pour les opérations de transformation de partition liées au temps dans Iceberg. #72044 (Daniil Ivanik).
  • Prise en charge des sous-colonnes dans la clé de tri de MergeTree et les index de saut. #72644 (Pavel Kruglov).
  • Prise en charge de la lecture des valeurs HALF_FLOAT depuis Apache Arrow/Parquet/ORC (elles sont lues en Float32). Cela clôt #72960. Gardez à l’esprit que le half float IEEE-754 n’est pas identique à BFloat16. Clôt #73835. #73836 (Alexey Milovidov).
  • La table system.trace_log contiendra deux nouvelles colonnes, symbols et lines, contenant une pile d’appels symbolisée. Cela facilite la collecte et l’export des informations de profilage. Ce comportement est contrôlé par la valeur de configuration du serveur symbolize dans trace_log et est activé par défaut. #73896 (Alexey Milovidov).
  • Ajout d’une nouvelle fonction, generateSerialID, qui peut être utilisée pour générer des nombres auto-incrémentés dans les tables. Suite de #64310 par kazalika. Cela clôt #62485. #73950 (Alexey Milovidov).
  • Ajout de la syntaxe query1 PARALLEL WITH query2 PARALLEL WITH query3 ... PARALLEL WITH queryN pour les requêtes DDL. Cela signifie que les sous-requêtes {query1, query2, ... queryN} peuvent s’exécuter en parallèle les unes avec les autres (et c’est préférable). #73983 (Vitaly Baranov).
  • Ajout d’un cache en mémoire pour les granules d’index de saut désérialisées. Cela devrait accélérer les requêtes répétées qui utilisent des index de saut. La taille du nouveau cache est contrôlée par les paramètres du serveur skipping_index_cache_size et skipping_index_cache_max_entries. La motivation initiale de ce cache était les index de similarité vectorielle, qui sont désormais bien plus rapides. #70102 (Robert Schulze).
  • Désormais, l’interface Web intégrée dispose d’une barre de progression pendant l’exécution des requêtes. Elle permet d’annuler les requêtes. Elle affiche le nombre total d’enregistrements ainsi que des informations détaillées sur la vitesse. La table peut être rendue de manière incrémentale dès l’arrivée des données. Prise en charge de la compression HTTP. Le rendu de la table est devenu plus rapide. L’en-tête de la table est désormais fixe. Cela permet de sélectionner des cellules et d’y naviguer avec les touches fléchées. Correction d’un problème où le contour de la cellule sélectionnée la rendait plus petite. Les cellules ne s’agrandissent plus au survol de la souris, mais uniquement lors de la sélection. Le moment où arrêter le rendu des données entrantes est désormais décidé côté client plutôt que côté serveur. Mise en évidence des groupes de chiffres dans les nombres. Le design général a été rafraîchi et est devenu plus affirmé. L’interface vérifie si le serveur est joignable ainsi que la validité des identifiants, et affiche la version du serveur et sa durée de fonctionnement. L’icône cloud a un contour dans toutes les polices, même dans Safari. Les grands entiers à l’intérieur des types de données imbriqués seront mieux rendus. Les valeurs inf/nan seront affichées correctement. Les types de données seront affichés lorsque la souris passe sur un en-tête de colonne. #74204 (Alexey Milovidov).
  • Ajout de la possibilité de créer par défaut des index min-max (skipping) pour les colonnes gérées par MergeTree à l’aide des paramètres add_minmax_index_for_numeric_columns (pour les colonnes numériques) et add_minmax_index_for_string_columns (pour les colonnes de type chaîne). Pour l’instant, ces deux paramètres sont désactivés ; il n’y a donc encore aucun changement de comportement. #74266 (Smita Kulkarni).
  • Ajout des champs script_query_number et script_line_number à system.query_log, à ClientInfo dans le protocole natif, ainsi qu’aux journaux du serveur. Cela clôt #67542. Merci à pinsvin00 d’avoir initié cette fonctionnalité plus tôt dans #68133. #74477 (Alexey Milovidov).
  • Ajout de la fonction d’agrégation sequenceMatchEvents, qui renvoie les horodatages des événements appariés pour la plus longue chaîne d’événements correspondant au motif. #72349 (UnamedRus).
  • Ajout de la fonction arrayNormalizedGini. #72823 (flynn).
  • Ajout de la prise en charge de l’opérateur moins pour DateTime64, afin d’autoriser la soustraction entre des valeurs DateTime64, ainsi qu’entre des valeurs DateTime. #74482 (Li Yin).

Fonctionnalités expérimentales

Amélioration des performances

  • Fonction indexHint optimisée. Désormais, les colonnes utilisées uniquement comme arguments de la fonction indexHint ne sont plus lues depuis la table. #74314 (Anton Popov). Si la fonction indexHint est un élément central de votre architecture de données d’entreprise, cette optimisation vous sauvera la vie.
  • Comptabilisation plus précise du paramètre max_joined_block_size_rows pour l’algorithme de JOIN parallel_hash. Cela permet d’éviter une consommation mémoire plus élevée qu’avec l’algorithme hash. #74630 (Nikita Taranov).
  • Prise en charge de l’optimisation de descente des prédicats au niveau du plan de requête pour l’étape MergingAggregated. Cela améliore les performances de certaines requêtes avec l’analyseur. #74073 (Nikolai Kochetov).
  • Le découpage par hash des blocs de la table de gauche a été supprimé de la phase de probe de l’algorithme de JOIN parallel_hash. #73089 (Nikita Taranov).
  • Optimise le format d’entrée RowBinary. Clôt #63805. #65059 (Pavel Kruglov).
  • Écrit les parts au niveau 1 si optimize_on_insert est activé. Cela permet d’utiliser plusieurs optimisations de requêtes avec FINAL pour les parts nouvellement écrites. #73132 (Anton Popov).
  • Accélère la désérialisation des chaînes grâce à une optimisation de bas niveau. #65948 (Nikita Taranov).
  • Lors d’une comparaison d’égalité entre enregistrements, par exemple pendant les merges, compare d’abord les lignes des colonnes les plus susceptibles d’être différentes. #63780 (UnamedRus).
  • Améliore les performances de grace hash join en réordonnant la table droite de la jointure selon les clés. #72237 (kevinyhzou).
  • Permet à arrayROCAUC et arrayAUCPR de calculer une aire partielle de l’ensemble de la courbe, afin de paralléliser ce calcul sur de très grands jeux de données. #72904 (Emmanuel).
  • Évite de créer trop de threads inactifs. #72920 (Guo Wangyang).
  • N’énumère pas les clés du blob storage lorsque seule une expansion entre accolades est utilisée dans la table function. Clôt #73333. #73518 (Konstantin Bogdanov).
  • Optimisation par court-circuit pour les fonctions exécutées sur des arguments Nullable. #73820 (李扬).
  • N’applique pas maskedExecute aux colonnes qui ne sont pas des fonctions, ce qui améliore les performances de l’exécution en court-circuit. #73965 (lgbo).
  • Désactive l’autodétection des en-têtes dans les formats d’entrée pour Kafka/NATS/RabbitMQ/FileLog afin d’améliorer les performances. #74006 (Azat Khuzhin).
  • Exécute le pipeline avec un degré de parallélisme plus élevé après l’agrégation avec des grouping sets. #74082 (Nikita Taranov).
  • Réduit la section critique de MergeTreeReadPool. #74202 (Guo Wangyang).
  • Amélioration des performances de parallel replicas. La désérialisation des paquets sur l’initiateur de requête, pour les paquets sans lien avec le protocole de parallel replicas, s’effectue désormais toujours dans le thread du pipeline. Auparavant, elle pouvait s’effectuer dans un thread chargé de l’ordonnancement du pipeline, ce qui pouvait rendre l’initiateur moins réactif et retarder l’exécution du pipeline. #74398 (Igor Nikonov).
  • Améliore les performances des requêtes multiples de grande taille dans Keeper. #74849 (Antonio Andelic).
  • Utilise les wrappers de journalisation par valeur, sans allocation sur le tas. #74034 (Mikhail Artemenko).
  • Rétablit en arrière-plan la connexion aux répliques de dictionnaires MySQL et Postgres, afin de ne pas retarder les requêtes vers les dictionnaires correspondants. #71101 (Yakov Olkhovskiy).
  • Les parallel replicas utilisaient des informations historiques sur la disponibilité des répliques pour améliorer la sélection des répliques, mais ne mettaient pas à jour le compteur d’erreurs de la réplique lorsque la connexion était indisponible. Cette PR met désormais à jour le compteur d’erreurs de la réplique lorsqu’elle est indisponible. #72666 (zoomxi).
  • Ajout du paramètre MergeTree materialize_skip_indexes_on_merge, qui empêche la création de skip indexes lors des fusions. Cela permet de contrôler explicitement (via ALTER TABLE [..] MATERIALIZE INDEX [...]) le moment où les skip indexes sont créés. Cela peut être utile si les skip indexes sont coûteux à créer (par ex. les vector similarity indexes). #74401 (Robert Schulze).
  • Optimise les requêtes Keeper dans Storage(S3/Azure)Queue. #74410 (Kseniia Sumarokova). #74538 (Kseniia Sumarokova).
  • Utilise jusqu’à 1000 parallel replicas par défaut. #74504 (Konstantin Bogdanov).
  • Améliore la réutilisation des sessions HTTP lors de la lecture à partir du disque S3 (#72401). #74548 (Julian Maicher).

Amélioration

  • Prise en charge de SETTINGS dans une requête CREATE TABLE avec un ENGINE implicite, ainsi que du mélange des réglages de l’engine et de la requête. #73120 (Raúl Marín).
  • Activation de use_hive_partitioning par défaut. #71636 (Yarik Briukhovetskyi).
  • Prise en charge de CAST et ALTER entre des types JSON ayant des paramètres différents. #72303 (Pavel Kruglov).
  • Prise en charge de la comparaison d’égalité pour les valeurs d’une colonne JSON. #72991 (Pavel Kruglov).
  • Amélioration du formatage des identifiants avec des sous-colonnes JSON afin d’éviter les accents graves inutiles. #73085 (Pavel Kruglov).
  • Améliorations des métriques interactives. Correction de l’affichage incomplet des métriques provenant des répliques parallèles. Affichage des métriques par ordre de mise à jour la plus récente, puis par ordre lexicographique de nom. Les métriques obsolètes ne sont pas affichées. #71631 (Julia Kartseva).
  • Activer par défaut le JSON output format pretty. Ajout du nouveau réglage output_format_json_pretty_print pour le contrôler, activé lui aussi par défaut. #72148 (Pavel Kruglov).
  • Autoriser LowCardinality(UUID) par défaut. Cela s’est révélé pratique chez les clients de ClickHouse Cloud. #73826 (Alexey Milovidov).
  • Message amélioré pendant l’installation. #73827 (Alexey Milovidov).
  • Message amélioré concernant la réinitialisation du mot de passe pour ClickHouse Cloud. #73831 (Alexey Milovidov).
  • Amélioration du message d’erreur pour une table File qui ne peut pas ajouter de données à un fichier. #73832 (Alexey Milovidov).
  • Demander confirmation lorsqu’un utilisateur demande accidentellement une sortie au format binaire (comme Native, Parquet ou Avro) dans le terminal. Ceci clôt #59524. #73833 (Alexey Milovidov).
  • Mettre en évidence les espaces de fin dans les formats Pretty et Vertical dans le terminal pour une meilleure lisibilité. Cela est contrôlé par le réglage output_format_pretty_highlight_trailing_spaces. Implémentation initiale par Braden Burns dans #72996. Clôt #71590. #73847 (Alexey Milovidov).
  • clickhouse-client et clickhouse-local détecteront automatiquement la Compression de stdin lorsqu’elle est redirigée depuis un fichier. Ceci clôt #70865. #73848 (Alexey Milovidov).
  • Tronquer par défaut les noms de colonnes trop longs dans les formats Pretty. Cela est contrôlé par les paramètres output_format_pretty_max_column_name_width_cut_to et output_format_pretty_max_column_name_width_min_chars_to_cut. Cela s’inscrit dans la continuité du travail de tanmaydatta dans #66502. Cela corrige #65968. #73851 (Alexey Milovidov).
  • Rendre les formats Pretty plus esthétiques : regrouper les blocs si peu de temps s’est écoulé depuis la sortie du bloc précédent. Cela est contrôlé par les nouveaux paramètres output_format_pretty_squash_consecutive_ms (50 ms par défaut) et output_format_pretty_squash_max_wait_ms (1000 ms par défaut). Suite de #49537. Cela corrige #49153. #73852 (Alexey Milovidov).
  • Ajouter une métrique sur le nombre de parties source actuellement en cours de fusion. Cela corrige #70809. #73868 (Alexey Milovidov).
  • Mettre en surbrillance les colonnes dans le format Vertical si la sortie est destinée à un terminal. Cela peut être désactivé avec le paramètre output_format_pretty_color. #73898 (Alexey Milovidov).
  • Améliorer la compatibilité MySQL à un niveau tel que mysqlsh (une CLI MySQL avancée d’Oracle) peut désormais se connecter à ClickHouse. Cela est nécessaire pour faciliter les tests. #73912 (Alexey Milovidov).
  • Les formats Pretty peuvent afficher des champs multiligne dans une cellule de table, ce qui améliore la lisibilité. Cela est activé par défaut et peut être contrôlé par le paramètre output_format_pretty_multiline_fields. Suite du travail de Volodyachan dans #64094. Cela corrige #56912. #74032 (Alexey Milovidov).
  • Exposer les en-têtes HTTP X-ClickHouse à JavaScript dans le navigateur. Cela facilite le développement d’applications. #74180 (Alexey Milovidov).
  • Le format JSONEachRowWithProgress inclura des événements avec des métadonnées, ainsi que les totaux et les extrêmes. Il inclut également rows_before_limit_at_least et rows_before_aggregation. Le format affiche correctement l’exception si elle arrive après des résultats partiels. La progression inclut désormais le temps écoulé en nanosecondes. Un événement de progression final est émis à la fin. La progression pendant l’exécution de la requête ne sera pas affichée plus fréquemment que la valeur du paramètre interactive_delay. #74181 (Alexey Milovidov).
  • Le sablier tournera de manière fluide dans l’UI Play. #74182 (Alexey Milovidov).
  • Même si la réponse HTTP est compressée, envoyer les paquets dès leur arrivée. Cela permet au navigateur de recevoir les paquets de progression et les données compressées. #74201 (Alexey Milovidov).
  • Si le nombre d’enregistrements en sortie dépasse N = output_format_pretty_max_rows, au lieu d’afficher uniquement les N premières lignes, nous couperons la table de sortie au milieu pour afficher les N/2 premières et les N/2 dernières lignes. Suite de #64200. Cela clôt #59502. #73929 (Alexey Milovidov).
  • Autorise un algorithme de planification de jointure plus général lorsque l’algorithme de hash join est activé. #71926 (János Benjamin Antal).
  • Autorise la création d’un index bloom_filter sur des colonnes de type de données DateTime64. #66416 (Yutong Xiao).
  • Lorsque min_age_to_force_merge_seconds et min_age_to_force_merge_on_partition_only sont tous deux activés, le part merging ignore la limite maximale en octets. #73656 (Kai Zhu).
  • Ajout des HTTP headers à la table des journaux de spans OpenTelemetry pour une meilleure traçabilité. #70516 (jonymohajanGmail).
  • Prend en charge l’écriture de fichiers orc avec un fuseau horaire personnalisé, au lieu d’utiliser systématiquement le fuseau horaire GMT. #70615 (kevinyhzou).
  • Respecte les paramètres d’IO scheduling lors de l’écriture de backups entre clouds. #71093 (János Benjamin Antal).
  • Ajoute l’alias de colonne name pour metric à system.asynchronous_metrics. #71164 (megao).
  • Historiquement, pour une raison quelconque, la query ALTER TABLE MOVE PARTITION TO TABLE vérifiait les droits SELECT et ALTER DELETE au lieu du droit dédié ALTER_MOVE_PARTITION. Cette PR utilise désormais ce type d’accès. Pour des raisons de compatibilité, cette permission sera également accordée implicitement si SELECT et ALTER DELETE sont accordés, mais ce comportement sera supprimé dans de futures releases. Clôt #16403. #71632 (pufit).
  • Déclenche une exception lors d’une tentative de matérialisation d’une colonne dans la clé de tri, au lieu de permettre une rupture de l’ordre de tri. #71891 (Peter Nguyen).
  • Masque les secrets dans EXPLAIN QUERY TREE. #72025 (Yakov Olkhovskiy).
  • Prend en charge les types logiques entiers Parquet dans le lecteur “native”. #72105 (Arthur Passos).
  • Demande les credentials de manière interactive dans le navigateur si le default user nécessite un password. Dans les versions précédentes, le server renvoyait HTTP 403 ; il renvoie désormais HTTP 401. #72198 (Alexey Milovidov).
  • Convertit les types d’accès CREATE_USER, ALTER_USER, DROP_USER, CREATE_ROLE, ALTER_ROLE, DROP_ROLE de globaux à paramétrés. Cela signifie que vous pouvez désormais accorder les grants de gestion des accès avec plus de précision. #72246 (pufit).
  • Ajout de la colonne latest_fail_error_code_name à system.mutations. Cette colonne est nécessaire pour introduire une nouvelle métrique sur les mutations bloquées, l’utiliser pour créer des graphiques des erreurs rencontrées dans le cloud et, éventuellement, ajouter une nouvelle alerte moins bruyante. #72398 (Miсhael Stetsyuk).
  • Réduction du nombre d’allocations dans la requête ATTACH PARTITION. #72583 (Konstantin Morozov).
  • La limite max_bytes_before_external_sort dépend désormais de la consommation mémoire totale de la requête (auparavant, il s’agissait du nombre d’octets dans le bloc de tri d’un thread de tri ; elle a maintenant la même signification que max_bytes_before_external_group_by : c’est la limite mémoire totale de toute la requête sur l’ensemble des threads). Un paramètre supplémentaire a également été ajouté pour contrôler la taille des blocs sur disque : min_external_sort_block_bytes. #72598 (Azat Khuzhin).
  • Ignorer les restrictions mémoire pour le collecteur de traces. #72606 (Azat Khuzhin).
  • Ajout des paramètres serveur dictionaries_lazy_load et wait_dictionaries_load_at_startup à system.server_settings. #72664 (Christoph Wurm).
  • Ajout du paramètre max_backup_bandwidth à la liste des paramètres pouvant être spécifiés dans les requêtes BACKUP/RESTORE. #72665 (Christoph Wurm).
  • Réduction du niveau de journalisation pour l’apparition des parts répliquées dans le moteur ReplicatedMergeTree afin de réduire le volume de logs généré dans un cluster répliqué. #72876 (mor-akamai).
  • Amélioration de l’extraction des expressions communes dans les disjonctions. Permet de simplifier l’expression de filtre résultante même s’il n’existe pas de sous-expression commune à toutes les disjonctions. Suite de #71537. #73271 (Dmitry Novik).
  • Dans Storage S3Queue/AzureQueue, il est désormais possible d’ajouter des paramètres à une table créée sans paramètres. #73283 (Kseniia Sumarokova).
  • Introduction du paramètre least_greatest_legacy_null_behavior (par défaut : false), qui contrôle si les fonctions least et greatest traitent les arguments NULL en renvoyant systématiquement NULL (si true) ou en les ignorant (si false). #73344 (Robert Schulze).
  • Utilisation de requêtes multiples Keeper dans le thread de nettoyage d’ObjectStorageQueueMetadata. #73357 (Antonio Andelic).
  • Lorsque ClickHouse s’exécute sous un cgroup, nous continuerons à collecter des métriques asynchrones à l’échelle du système liées à la charge système, à l’ordonnancement des processus, à la mémoire, etc. Elles peuvent fournir des signaux utiles lorsque ClickHouse est le seul processus sur l’hôte à consommer beaucoup de ressources. #73369 (Nikita Taranov).
  • Dans le storage S3Queue, permettre de migrer les anciennes tables ordered créées avant la version 24.6 vers la nouvelle structure avec buckets. #73467 (Kseniia Sumarokova).
  • Ajout de system.azure_queue, sur le modèle de system.s3queue. #73477 (Kseniia Sumarokova).
  • La fonction parseDateTime64 (et ses variantes) produit désormais des résultats corrects pour les dates d’entrée antérieures à 1970 / postérieures à 2106. Example : SELECT parseDateTime64InJodaSyntax('2200-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS'). #73594 (zhanglistar).
  • Corrige plusieurs problèmes d’ergonomie de clickhouse-disks signalés par les utilisateurs. Clôture #67136. #73616 (Daniil Ivanik).
  • Permet de modifier les paramètres de commit dans le stockage S3(Azure)Queue. (Les paramètres de commit sont : max_processed_files_before_commit, max_processed_rows_before_commit, max_processed_bytes_before_commit, max_processing_time_sec_before_commit). #73635 (Kseniia Sumarokova).
  • Dans le stockage S3(Azure)Queue, agrège la progression entre les sources pour la comparer aux paramètres de limite de commit. #73641 (Kseniia Sumarokova).
  • Prend en charge les paramètres principaux dans la requête BACKUP/RESTORE. #73650 (Vitaly Baranov).
  • Prend en compte output_format_compression_level pour la sortie Parquet. #73651 (Arthur Passos).
  • Ajoute la lecture de fixed_size_list d’Apache Arrow comme un Array au lieu de le traiter comme un type non pris en charge. #73654 (Julian Meyers).
  • Ajoute deux moteurs de sauvegarde : Memory (conserve les backups dans la session utilisateur en cours) et Null (ne conserve les backups nulle part), pour les tests. #73690 (Vitaly Baranov).
  • concurrent_threads_soft_limit_num et concurrent_threads_soft_limit_num_ratio_to_cores peuvent être modifiés sans redémarrer le server. #73713 (Sergei Trifonov).
  • Ajoute la prise en charge des types numériques étendus (Decimal, grands entiers) dans les fonctions formatReadable. #73765 (Raúl Marín).
  • Prend en charge TLS pour la compatibilité avec le wire protocol de Postgres. #73812 (scanhex12).
  • La fonction isIPv4String renvoyait true si une adresse IPv4 correcte était suivie d’un octet nul, alors qu’elle devrait renvoyer false dans ce cas. Suite de #65387. #73946 (Alexey Milovidov).
  • Rend le code d’error du MySQL wire protocol compatible avec MySQL. Suite de #56831. Clôture #50957. #73948 (Alexey Milovidov).
  • Ajoute le paramètre validate_enum_literals_in_opearators pour valider les littéraux enum dans des operators comme IN et NOT IN par rapport au type enum, et throw an exception si le littéral n’est pas une valeur enum valide. #73985 (Vladimir Cherkasov).
  • Dans S3(Azure)Queue, valider tous les fichiers (dans un seul lot défini par les paramètres de commit) au sein d’une seule transaction Keeper. #73991 (Kseniia Sumarokova).
  • Désactiver la détection d’en-tête pour les UDF exécutables et les dictionnaires (cela pouvait entraîner Function &#39;X&#39;: wrong result, expected Y row(s), actual Y-1). #73992 (Azat Khuzhin).
  • Ajouter l’option distributed à EXPLAIN PLAN. Désormais, EXPLAIN distributed=1 ... ajoute le plan distant aux étapes ReadFromParallelRemote*. #73994 (Nikolai Kochetov).
  • Utiliser le bon type de retour pour not/xor avec des arguments Dynamic. #74013 (Pavel Kruglov).
  • Autoriser la modification de add_implicit_sign_column_constraint_for_collapsing_engine après la création de la table. #74014 (Christoph Wurm).
  • Prendre en charge les sous-colonnes dans la requête SELECT d’une vue matérialisée. #74030 (Pavel Kruglov).
  • Il existe désormais trois façons simples de définir un prompt personnalisé dans clickhouse-client : 1. via le paramètre de ligne de commande --prompt, 2. dans le fichier de configuration, via le paramètre <prompt>[...]</prompt>, et 3. également dans le fichier de configuration, via les paramètres propres à chaque connexion <connections_credentials><prompt>[...]</prompt></connection_credentials>. #74168 (Christoph Wurm).
  • Détecter automatiquement une connexion sécurisée lors d’une connexion au port 9440 dans ClickHouse Client. #74212 (Christoph Wurm).
  • Authentifier les utilisateurs avec le seul nom d’utilisateur pour les http_handlers (auparavant, l’utilisateur devait également fournir le mot de passe). #74221 (Azat Khuzhin).
  • La prise en charge des langages de requête alternatifs PRQL et KQL a été marquée comme expérimentale. Pour les utiliser, spécifiez les paramètres allow_experimental_prql_dialect = 1 et allow_experimental_kusto_dialect = 1. #74224 (Robert Schulze).
  • Prendre en charge le renvoi du type Enum par défaut dans davantage de fonctions d’agrégation. #74272 (Raúl Marín).
  • Dans OPTIMIZE TABLE, il est désormais possible de spécifier le mot-clé FORCE comme alternative au mot-clé existant FINAL. #74342 (Robert Schulze).
  • Ajouter la métrique IsServerShuttingDown, nécessaire pour déclencher une alerte lorsque l’arrêt du serveur prend trop de temps. #74429 (Miсhael Stetsyuk).
  • Ajouter les noms des tables Iceberg à EXPLAIN. #74485 (alekseev-maksim).
  • Fournir un meilleur message d’erreur lors de l’utilisation d’un CTE RECURSIVE avec l’ancien analyseur. #74523 (Raúl Marín).
  • Afficher des messages d’erreur détaillés dans system.errors. #74574 (Vitaly Baranov).
  • Autoriser l’utilisation d’un mot de passe pour la communication entre le client et ClickHouse Keeper. Cette fonctionnalité n’est pas très utile si vous spécifiez une configuration SSL appropriée pour le serveur et le client, mais elle peut tout de même être utile dans certains cas. Le mot de passe ne peut pas dépasser 16 caractères. Cela n’a aucun lien avec le modèle d’authentification de Keeper. #74673 (alesapin).
  • Ajouter un code d’erreur pour le rechargeur de configuration. #74746 (Garrett Thomas).
  • Ajout de la prise en charge des adresses IPv6 dans les fonctions de table et les moteurs MySQL et PostgreSQL. #74796 (Mikhail Koviazin).
  • Implémenter une optimisation par court-circuit pour divideDecimal. Corrige #74280. #74843 (Kevin Mingtarja).
  • Les utilisateurs peuvent désormais être spécifiés dans les scripts de démarrage. #74894 (pufit).
  • Ajouter la prise en charge des jetons SAS Azure. #72959 (Azat Khuzhin).

Correction de bug (dysfonctionnement visible par l’utilisateur dans une version stable officielle)

  • Définir le niveau de compression de Parquet uniquement si le codec de compression le prend en charge. #74659 (Arthur Passos).
  • Correction d’une régression où l’utilisation de locales de collation avec des modificateurs générait une erreur. Par exemple, SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shifted fonctionne désormais. #73544 (Robert Schulze).
  • Correction de l’impossibilité de créer un nœud SEQUENTIAL avec keeper-client. #64177 (Duc Canh Le).
  • Correction du comptage incorrect des caractères dans les fonctions de position. #71003 (思维).
  • Les opérations RESTORE sur les entités d’accès nécessitaient plus d’autorisations que nécessaire en raison de révocations partielles non gérées. Cette PR corrige le problème. Clôt #71853. #71958 (pufit).
  • Évite une pause après ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE. Récupère les paramètres appropriés pour l’ordonnancement des tâches en arrière-plan. #72024 (Aleksei Filatov).
  • Correction de la gestion des tuples vides dans certains formats d’entrée et de sortie (par ex. Parquet, Arrow). #72616 (Michael Kolupaev).
  • Les instructions GRANT SELECT/INSERT au niveau des colonnes sur des bases de données/tables avec caractères génériques génèrent désormais une erreur. #72646 (Johann Gan).
  • Correction du cas où un utilisateur ne peut pas exécuter REVOKE ALL ON *.* en raison d’autorisations implicites dans l’entité d’accès cible. #72872 (pufit).
  • Correction du formatage des fuseaux horaires positifs de la fonction scalaire formatDateTime. #73091 (ollidraese).
  • Correction pour refléter correctement le port source lorsqu’une connexion est établie via PROXYv1 et que auth_use_forwarded_address est défini : auparavant, le port du proxy était utilisé à tort. Ajout de la fonction currentQueryID(). #73095 (Yakov Olkhovskiy).
  • Propage les paramètres de format à NativeWriter dans TCPHandler, afin que des paramètres comme output_format_native_write_json_as_string soient correctement appliqués. #73179 (Pavel Kruglov).
  • Correction d’un crash dans StorageObjectStorageQueue. #73274 (Kseniia Sumarokova).
  • Correction d’un crash rare dans une vue matérialisée actualisable pendant l’arrêt du serveur. #73323 (Michael Kolupaev).
  • L’espace réservé %f de la fonction formatDateTime génère désormais systématiquement six chiffres (fractions de seconde). Cela rend le comportement compatible avec la fonction MySQL DATE_FORMAT. Le comportement précédent peut être restauré à l’aide du paramètre formatdatetime_f_prints_scale_number_of_digits = 1. #73324 (ollidraese).
  • Correction du filtrage sur la colonne _etag lors de la lecture depuis le stockage s3 et la fonction de table. #73353 (Anton Popov).
  • Correction de l’erreur Not-ready Set is passed as the second argument for function 'in' lorsque IN (subquery) est utilisé dans une expression JOIN ON, avec l’ancien analyseur. #73382 (Nikolai Kochetov).
  • Correction de la préparation au squashin pour les colonnes Dynamic et JSON. Auparavant, dans certains cas, de nouveaux types pouvaient être insérés dans shared variant/shared data même lorsque la limite sur les types/chemins n’était pas atteinte. #73388 (Pavel Kruglov).
  • Vérification des tailles corrompues lors du décodage binaire des types afin d’éviter des allocations trop importantes. #73390 (Pavel Kruglov).
  • Correction d’une erreur logique lors de la lecture depuis un cluster à réplique unique avec les répliques parallèles activées. #73403 (Michael Kolupaev).
  • Correction d’ObjectStorageQueue avec ZooKeeper et les anciennes versions de Keeper. #73420 (Antonio Andelic).
  • Implémente une correction nécessaire pour activer le partitionnement Hive par défaut. #73479 (Yarik Briukhovetskyi).
  • Correction d’une data race lors de la création d’un index de similarité vectorielle. #73517 (Antonio Andelic).
  • Corrige un segfault lorsque la source du dictionnaire contient une fonction avec des données incorrectes. #73535 (Yarik Briukhovetskyi).
  • Correction des tentatives de nouvelle insertion après un échec d’insert dans le stockage S3(Azure)Queue. Ferme #70951. #73546 (Kseniia Sumarokova).
  • Correction d’une erreur dans la fonction tupleElement pouvant apparaître, dans certains cas, pour des tuples avec des éléments LowCardinality et le paramètre optimize_functions_to_subcolumns activé. #73548 (Anton Popov).
  • Correction de l’analyse d’un glob enum suivi d’une plage. Corrige #73473. #73569 (Konstantin Bogdanov).
  • Correction du problème où parallel_replicas_for_non_replicated_merge_tree était ignoré dans les sous-requêtes pour les tables non répliquées. #73584 (Igor Nikonov).
  • Correction de std::logical_error levée lorsqu’une tâche ne peut pas être planifiée. Problème détecté dans les tests de stress. #73629 (Alexander Gololobov).
  • Ne pas interpréter les requêtes dans EXPLAIN SYNTAX afin d’éviter des erreurs logiques liées à une étape de traitement incorrecte pour les requêtes distribuées. Corrige #65205. #73634 (Dmitry Novik).
  • Correction d’une possible incohérence de données dans une colonne Dynamic. Corrige l’erreur logique possible Nested columns sizes are inconsistent with local_discriminators column size. #73644 (Pavel Kruglov).
  • Correction de NOT_FOUND_COLUMN_IN_BLOCK dans les requêtes avec FINAL et SAMPLE. Correction d’un résultat incorrect dans les requêtes SELECT avec FINAL sur CollapsingMergeTree et activation des optimisations de FINAL. #73682 (Anton Popov).
  • Correction d’un crash dans LIMIT BY COLUMNS. #73686 (Raúl Marín).
  • Correction d’un bug lorsque l’utilisation de la projection normale est forcée et que la requête est exactement identique à la projection définie, mais que la projection n’est pas sélectionnée, ce qui génère une erreur. #73700 (Shichao Jin).
  • Correction de la désérialisation de la structure Dynamic/Object. Cela pouvait entraîner des exceptions CANNOT_READ_ALL_DATA. #73767 (Pavel Kruglov).
  • Ignorer metadata_version.txt lors de la restauration des parts depuis une sauvegarde. #73768 (Vitaly Baranov).
  • Correction d’une faute de segmentation lors d’un CAST vers Enum avec LIKE. #73775 (zhanglistar).
  • Correction d’un problème empêchant un bucket S3 Express de fonctionner comme disk. #73777 (Sameer Tamsekar).
  • Autorisation du merging de rows avec des valeurs invalides dans la sign column des tables CollapsingMergeTree. #73864 (Christoph Wurm).
  • Correction d’une erreur lors d’une requête DDL avec une replica hors ligne. #73876 (Tuan Pham Anh).
  • Correction d’un échec occasionnel lors de la comparaison de types map(), dû à la possibilité de créer un Map sans nommage explicite (keys,values) de son tuple imbriqué. #73878 (Yakov Olkhovskiy).
  • Ignorer les window functions lors de la résolution de la clause GROUP BY ALL. Correction de #73501. #73916 (Dmitry Novik).
  • Correction des privileges implicites (ils fonctionnaient auparavant comme un caractère générique). #73932 (Azat Khuzhin).
  • Correction d’une utilisation mémoire élevée lors de la création de Maps imbriquées. #73982 (Pavel Kruglov).
  • Correction de l’analyse de JSON imbriqué avec des clés vides. #73993 (Pavel Kruglov).
  • Correction : un alias peut ne pas être ajouté à la projection s’il est référencé par un autre alias et sélectionné dans l’ordre inverse. #74033 (Yakov Olkhovskiy).
  • Ignorer les erreurs « object not found » pour Azure lors de l’initialisation du disk plain_rewritable. #74059 (Julia Kartseva).
  • Correction du comportement de any et anyLast avec les types enum et une table vide. #74061 (Joanna Hulboj).
  • Corrige le cas où l’utilisateur spécifie des arguments nommés dans le moteur de table Kafka. #74064 (Yarik Briukhovetskyi).
  • Corrige la modification des paramètres de Storage S3Queue, avec le préfixe “s3queue_” ou sans celui-ci, et inversement. #74075 (Kseniia Sumarokova).
  • Ajoute un paramètre allow_push_predicate_ast_for_distributed_subqueries. Cela ajoute la descente de prédicat basée sur l’AST pour les requêtes distribuées avec l’analyzer. Il s’agit d’une solution temporaire utilisée jusqu’à la prise en charge des requêtes distribuées avec sérialisation du plan de requête. Ferme #66878 #69472 #65638 #68030 #73718. #74085 (Nikolai Kochetov).
  • Corrige le problème où, après #73095, un port peut être présent dans le champ forwarded_for, ce qui empêche de résoudre le nom d’hôte lorsque le port est inclus. #74116 (Yakov Olkhovskiy).
  • Corrige le formatage incorrect de ALTER TABLE (DROP STATISTICS ...) (DROP STATISTICS ...). #74126 (Han Fei).
  • Corrige le problème #66112. #74128 (Anton Ivashkin).
  • Il n’est plus possible d’utiliser Loop comme moteur de table dans CREATE TABLE. Cette combinaison provoquait auparavant des segfaults. #74137 (Yarik Briukhovetskyi).
  • Corrige un problème de sécurité afin d’empêcher les injections SQL dans les fonctions de table PostgreSQL et SQLite. #74144 (Pablo Marcos).
  • Corrige un crash lors de la lecture d’une sous-colonne depuis une table compressée utilisant le moteur Memory. Corrige #74009. #74161 (Nikita Taranov).
  • Corrige une boucle infinie survenant avec des requêtes sur system.detached_tables. #74190 (Konstantin Morozov).
  • Corrige une erreur logique dans s3queue lors du marquage d’un fichier comme échoué. #74216 (Kseniia Sumarokova).
  • Corrige les paramètres de copie native (allow_s3_native_copy/allow_azure_native_copy) pour RESTORE à partir d’une sauvegarde de base. #74286 (Azat Khuzhin).
  • Corrige le problème lorsque le nombre de tables détachées dans la base de données est un multiple de max_block_size. #74289 (Konstantin Morozov).
  • Corrige la copie via ObjectStorage (c.-à-d. S3) lorsque les informations d’authentification de la source et de la destination diffèrent. #74331 (Azat Khuzhin).
  • Corrige la détection de “use the Rewrite method in the JSON API” pour la copie native sur GCS. #74338 (Azat Khuzhin).
  • Corrige le calcul incorrect de BackgroundMergesAndMutationsPoolSize (il était 2x supérieur à la valeur réelle). #74509 (alesapin).
  • Corrige une fuite de watches Keeper lors de l’activation de Cluster Discovery. #74521 (RinChanNOW).
  • Corrige un problème d’alignement mémoire signalé par UBSan #74512. #74534 (Arthur Passos).
  • Corrige le nettoyage concurrent de KeeperMap pendant la création d’une table. #74568 (Antonio Andelic).
  • Ne supprime plus les colonnes de projection inutilisées dans les sous-requêtes en présence de EXCEPT ou INTERSECT, afin de préserver le résultat correct de la requête. Corrige #73930. Corrige #66465. #74577 (Dmitry Novik).
  • Corrige les requêtes INSERT SELECT entre des tables avec des colonnes Tuple et la sérialisation sparse activée. #74698 (Anton Popov).
  • La fonction right fonctionne incorrectement avec un offset négatif constant. #74701 (Daniil Ivanik).
  • Corrige les échecs occasionnels d’insertion de données compressées en gzip dus à une décompression défectueuse côté client. #74707 (siyuan).
  • Des revoke partiels avec des grants génériques pouvaient supprimer plus de privilèges que prévu. Clôt #74263. #74751 (pufit).
  • Correctif Keeper : corrige la lecture des log entries depuis le disque. #74785 (Antonio Andelic).
  • Corrige la vérification des grants pour SYSTEM REFRESH/START/STOP VIEW : il n’est désormais plus nécessaire d’avoir ce grant sur *.* pour exécuter une requête sur une view spécifique ; seuls les grants sur cette view sont requis. #74789 (Alexander Tokmakov).
  • La fonction hasColumnInTable ne tient pas compte des colonnes alias. Correction afin qu’elle fonctionne également avec les colonnes alias. #74841 (Bharat Nallan).
  • Corrige l’erreur FILE_DOESNT_EXIST survenant pendant la fusion de data parts pour une table avec une colonne vide dans Azure Blob Storage. #74892 (Julia Kartseva).
  • Corrige le nom de la colonne de projection lors de la jointure de tables temporaires, clôt #68872. #74897 (Vladimir Cherkasov).

Amélioration de la compilation/des tests/du packaging

Dernière modification le 29 juin 2026