Table des matières
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
StringversNullable(String), aucune mutation ne sera effectuée sur les données. En revanche, pour la fonction d’agrégationuniq, une structure de données différente est utilisée : pour une colonne nullable,AggregateFunctionNullest utilisé avec un agrégateur uniq imbriqué.AggregateFunctionNullsé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écutezALTER TABLE table MATERIALIZE STATISTICS ALLafin 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_resulta été modifiée detrueàfalse. Cela fait queCHECK TABLErenvoie 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_columnsouadd_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
MergeTreespéciales (telles queReplacingMergeTree,CollapsingMergeTree, etc.) avec une cléORDER BYvide, car le merge behavior de ces tables n’est pas défini. Si vous devez malgré tout créer une telle table, activez le settingallow_suspicious_primary_key. #91569 (Anton Popov). - Correction des fonctions
bitShiftLeftetbitShiftRightafin 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_projectionsafin 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
compatibilitysur la version précédente ou de définir les paramètres MergeTreedynamic_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’actionafter_processingdoit être appliquée). La valeur par défaut estfalse; correction de la vérification des MV attachées lors d’unSELECT. #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ètremax_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_pathspour 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 BYdans l’opérationCREATEpour Iceberg, ainsi que du tri dansINSERT. Résout #89916. #90141 (Konstantin Vedernikov). - Introduction de paramètres au niveau des projections, exposés via la nouvelle clause
WITH SETTINGSdansALTER TABLE ... ADD PROJECTION. Ces paramètres permettent aux projections de surcharger certains paramètres de stockage de MergeTree (par exempleindex_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
haspour 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_functionspour 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 functionwindowFunnel. 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_modepour 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
TimeetTime64sont prêts pour la production, le paramètreenable_time_time64_typeest désormais activé par défaut. #89345 (Yarik Briukhovetskyi). - Prise en charge de la lecture de DeltaLake CDF via la fonction de table
deltaLakeavec les paramètresdelta_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 viadelta.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_formatpour améliorer les requêtesINSERTdans les tables comportant des colonnesAggregateFunction, 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 Nen 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
ANDetOR. Auparavant, la clause WHERE devait être une conjonction (AND) de conditions de filtre pour tirer parti des skip indexes. Un nouveau settinguse_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 settingread_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
histogramen 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,haset 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 settingquery_plan_text_index_add_hint. Améliore également l’utilisation de l’index de texte pour les colonnes de type de donnéesMap. #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
T64via 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ètres3_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_limitpasse à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éfinissantmin_bytes_for_wide_partetvertical_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_finalqui 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_idetlast_error_traceà la tablesystem.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-messageoufalse. #87784 (Larry Snizek). - Ajout d’un message d’erreur indiquant que la part a été dédupliquée. #80264 (Aleksandr Musorin).
- Ajout des colonnes
dependenciesetmissing_dependenciesàsystem.kafka_consumerspour signaler les tables cibles de vues matérialisées pour les tables Kafka. Ajout du CounterKafkaMVNotReady. #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-rewritabledispose de sa propre implémentation et de son propre layout. Ne le basons pas sur les disksplainclassiques. #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_mscomme paramètre ajustable du table engineKafkaafin 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.mutationspour 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_cacheau 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_REACHEDest levée lorsque lahard_limitdes connexions des clients HTTP est atteinte. Elle est définie à20000pour 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+/(ouCmd+/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
FailedInitialQueryetFailedInitialSelectQuery. #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_poolau lieu d’utiliser systématiquement le pool de threads. #91208 (Raufs Dunamalijevs). - Prise en charge du type
JSONdanstupleElement. 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 pourSELECT. 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 avecORDER BY ALLl’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
ArrayversQBit. Les Array d’entiers et de flottants peuvent désormais être insérés directement dans des colonnesQBitsans CAST explicite. #91846 (Raufs Dunamalijevs). - Ajout d’une limite de taille de message pour
CapnProto. Elle peut être modifiée avecformat_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/MarkCacheMissesont é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 surTCPpour les connexions locales. #91933 (Konstantin Bogdanov). - Le paramètre
refresh_certificates_task_intervaldans la configuration du client ACME doit désormais être exprimé en secondes. #92211 (Konstantin Bogdanov). - Journaliser les événements de parts dans
system.part_logpoursystem.*_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
TimeetTime64. Résout #84544. #84715 (Yarik Briukhovetskyi). - Initialise
DNSResolveravant 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
JOINlorsque 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 getqui se produisait lors de l’analyse d’indexSetlorsque le prédicat contenait la constanteNULL. 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
theilsUetcontingencyqui 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 deINet le paramètreenable_lazy_columns_replicationactivé. Résout #90361. #89997 (Pavel Kruglov). - Corrige une possible erreur logique lors de l’utilisation de
analyzer_compatibility_join_using_top_level_identifieravec 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 tablesystem.dead_letter_queuen’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: Replicatedlors d’une insertion utilisantARRAY JOINavec le paramètreenable_lazy_columns_replicationactivé. #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
numberslorsqu’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 schemapendant 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 FILLinfinie avecnan/inf. Résout #69261. #90255 (Konstantin Bogdanov). - Corrige l’erreur ‘column not found’ avec
query_plan_use_logical_join_step=0et 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_orderdans 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
L2DistanceTransposedqui 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
arrayUnionavec un argumentArray(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
KeyValuePairExtractorstatique 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
L2DistanceTransposedlors de l’utilisation de vecteurs de référence sous forme de tableau (par défautArray(Float64))) avec des colonnesQBitdont le type d’élément n’est pasFloat64(Float32,BFloat16). La fonction convertit désormais automatiquement le vecteur de référence pour qu’il corresponde au type d’élément deQBit. Résout #89976. #90485 (Raufs Dunamalijevs). - Corrige un bug où
toDateTimeOrNullrenvoie NULL pour un argument négatif. #90490 (Yarik Briukhovetskyi). - Corrige une erreur logique possible lors de la sortie de
LowCardinality(Bool/Date32)au formatArrow. 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
markReplicasActivelorsqu’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
concatWithSeparatorlors 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 BYavecGROUP BY, afin de produire la bonne erreurNOT_AN_AGGREGATEau lieu deNOT_FOUND_COLUMN_IN_BLOCKlorsqueLIMIT BYutilise des colonnes absentes deGROUP BY. Ferme #89713. #90665 (xiaohuanlin). - Corrige les erreurs de transtypage lors de l’utilisation de colonnes
LowCardinalitydans 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
defaultsans aucune table. #90742 (Pablo Marcos). - Corrige la validation des accès pour les requêtes
ALTER UPDATElorsqu’une table functionremoteest utilisée aveclocalhostcomme 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_selectet deformat_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 QUERYavecdictGet()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’
INSERTfré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 dansMergeTreeReadPoolParallelReplicas, 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
SummingMergeTreepour les colonnesNestedLowCardinality. #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_partsdésactivé. #91014 (Pavel Kruglov). - Corrige
std::out_of_rangedans une CTE avecdictGetsans 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 fonctionisNull. Clôture #73849. #91105 (Nihal Z. Miaji). - Correction d’une erreur logique dans
ARRAY JOINlorsque 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
dictGetDescendantscausé parNULLlorsque le type de dictionnaire prend en charge Hierarchy mais qu’aucune colonne n’estHIERARCHICAL. Clôt #92026. Clôt #92121. #91420 (Nihal Z. Miaji). - Corrige un crash dans la fonction
INlorsque 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 commeSET param_q=[1,2,3,4]; SELECT {q:QBit(Float32,4)}. #91488 (Raufs Dunamalijevs). - Corrige LOGICAL_ERROR lorsque
untupleest 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_ERRORpendant 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
ALTERsur 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
readWKTetreadWKB, 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_refreshesavec l’erreurNo 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 queremote_serverscontient certains host_ids, un avertissement est consigné au lieu de lever une exception. #92223 (Tuan Pham Anh). - Entoure les opérateurs
INetNOT INde 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_sizedéfini à0pouvait 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
Nothingdans les arguments de la fonctioncaseWithExpression. 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
- Utilisation de
clang-21en CI. #87074 (Konstantin Bogdanov). - Éviter les téléchargements via cmake lors de la compilation croisée. #90506 (Raúl Marín).
Version de ClickHouse 25.11, 2025-11-27
Changement incompatible avec les versions précédentes
- Suppression du type
Objectobsolète. #85718 (Pavel Kruglov). - Suppression de la fonctionnalité
LIVE VIEWobsolète. Si vous utilisezLIVE 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 deString, 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
Variantdans 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 MergeTreeescape_variant_subcolumn_filenames(pour conserver la compatibilité, désactivez ce paramètre dans la config de MergeTree ou définissez le paramètrecompatibilitysur 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_streampour le type de donnéesString. 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, configurezserialization_info_versionsurbasicetstring_serialization_versionsursingle_streamdans la sectionmerge_treede 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_formatest 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-rewritablesur 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 = 0pour 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 formatsWKBetWKT. Dans les versions précédentes, le typeGeometryétait un alias deString, mais c’est désormais un type pleinement fonctionnel. #83344 (scanhex12). - Ajout de la nouvelle instruction SQL
EXECUTE ASpour prendre en charge l’impersonation d’utilisateur. Résout #39048. #70775 (Shankar). - Ajout de la fonction
naiveBayesClassifierpour classifier du texte avec Naive Bayes à partir de ngrams. #88677 (Nihal Z. Miaji). - Ajout de la prise en charge de
LIMITetOFFSETfractionnaires 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_partpour 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
preprocessorlors 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-ProgressetX-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_directoriespour créer automatiquement les répertoires parents pourINTO 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 REPLACEpour les tables temporaires. Ferme #35888. #89450 (Aleksandr Musorin). - Prise en charge de
arrayRemovepour supprimer du tableauarrtous 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_typepour 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
argAndMinetargAndMax, 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_bytesau 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_apidans la section<prometheus>du fichier de configuration. Les gestionnaires pris en charge sont/api/v1/query_rangeet/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).
Aliaspasse au stade expérimental et peut être activé avecallow_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
RIGHTetFULLutilisent 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
SELECTjusqu’à 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_offsetet 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 =
abcd1234ef567890abcd1234ef567890etdata_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_orderet dequery_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 JOINouANY RIGHT JOINenALL INNER JOINdans 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
uniqExacten 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
FINALporte 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_replicationest 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
ColumnsDescriptionpar 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
Variantsi nécessaire lorsqueuse_variant_as_common_typeest 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’inverseIS DISTINCT FROM, ainsi que d’opérandes numériques compatibles de types différents (par ex.Nullable(UInt32)etNullable(Int64)). Résout #86763. #87581 (yanglongwei). clickhouse-clientetclickhouse-localen 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
AgeetExpireslorsque le cache de résultats de requête est utilisé. La présence de l’en-têteAgeindique si le résultat provient du cache, tandis queExpiresest é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_mutationest 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_querypar 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 PARTITIONlorsqu’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 CLUSTERs’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
UUIDdansParquetlorsqu’il est représenté parFixedString(16)avec le type logiqueUUID. #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 TABLEavecSELECTdans clickhouse-client. Cette requête ne provoquera plus de timeout, même si leSELECTest assez long à exécuter. Résout #38416. #87247 (Diskein). - Prise en charge des types
JSONetDynamicdans 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êteEXPLAINpour 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_intervaldéfinit l’intervalle de rafraîchissement du cache de statistiques, 0 signifiant qu’aucun cache ne sera créé. Le paramètre de sessionuse_statistics_cacheindique 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
ArrayetMap, qui utilise désormais le paramètremax_binary_array_sizeau lieu demax_binary_string_sizelors de la validation des limites de taille. Cela garantit que les limites appropriées sont appliquées lors de la lecture au formatRowBinary. #88744 (Raufs Dunamalijevs). - Introduction de la classe
LockGuardWithStopWatchet 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 deMergeMutateSelectedEntryvers la méthodefinalizeafin d’éviter de conserver le verrou trop longtemps dans l’exécuteurMergeTreeBackground. #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_nodesafin de réduire la quantité de metadata queSharedMergeTreestocke dans Keeper. #89036 (Alexander Tokmakov). - Fait en sorte que
S3Queuerespecte le server settingdisable_insertion_and_mutation. #89048 (Raúl Marín). - Définit
s3_retry_attemptssur 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_codecetkafka_compression_levelpeuvent 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
statisticsdanssystem.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
hasAnyTokensouhasAllTokens. #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_defaultpar 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 avecSHOW CREATE DATABASEou lors de l’interrogation deengine_fulldepuissystem.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
chdigvers 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
FilesystemCacheByteserroné (et d’autres) danssystem.asynchronous_metrics. Exécuter les requêtesSYSTEMsur les caches du système de fichiers une seule fois. Vue atomique pour les caches qui pointent vers le même chemin danssystem.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 afficheSHOW TABLES. #89771 (Alexey Milovidov). - Prise en charge de
non_replicated_deduplication_windowpour 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_batcha é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 LOGSattend 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_leastlorsqu’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 setaprès une requêteINSERT INTO ... SELECT. Ferme #47800. #79462 (Engel Danila).
Correction de bogue (comportement incorrect visible par l’utilisateur dans une version stable officielle)
- Correction de
multiIfavec 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_byau bon format, par ex.ClickHouse version 25.10.1 (build 5b1dfb14925db8901a4e9202cd5d63c11ecfbb9f)au lieu deClickHouse 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,theilsUetcontingency. #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_kpour 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>:definerlors de la création d’une vue avec SQL SECURITY DEFINER. #88968 (pufit). - Correction de
LOGICAL_ERRORdansL2DistanceTransposed(vec1, vec2, p)où l’optimisation de lecture partielle deQBitsupprimait à tortNullabledu type de retour lorsquepétaitNullable. #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 JOINdu côté droit d’un JOIN lorsque le paramètreenable_lazy_columns_replicationest 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,hasAllTokensettokensavec le tokenizersparseGrams. 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_replicationactivé. 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 deoptimize_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
cancelsur 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
reverseetCAST. 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 COLUMNSetSHOW 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 JOINdansINet le paramètreenable_lazy_columns_replicationactivé. Resolves #90361. #89997 (Pavel Kruglov). - Rétroporté dans #90448 : correction, dans certains cas, de l’inférence de valeurs DateTime64 incorrectes à partir de
Stringsdans les formats texte. Resolves #89368. #90013 (Pavel Kruglov). - Correction d’une erreur logique provoquée par une colonne tuple vide dans
BSONEachRowetMsgPack. 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: Replicatedlors d’une insertion utilisantARRAY JOINavec le paramètreenable_lazy_columns_replicationactivé. #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
numberslorsqu’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 schemapendant 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_MISMATCHet 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,rtrimde 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
L2DistanceTransposedqui 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
L2DistanceTransposedlors de l’utilisation de vecteurs de référence de type tableau (qui utilisent par défautArray(Float64))) avec des colonnesQBitdont le type d’élément n’est pasFloat64(Float32,BFloat16). La fonction convertit désormais automatiquement le vecteur de référence pour qu’il corresponde au type d’élément duQBit. 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
CoalescingMergeTreepour les typesTuple. #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
initdbet 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
FindPackagedans 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_nullableest désormais activé par défaut de manière à respecter les informations de typeNullabledes 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 delog_commentseule 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 varierlog_comment. Ce changement modifie ce comportement et n’est donc pas rétrocompatible. Veuillez utiliser le paramètrequery_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,formatQueryet 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
Dynamicdans les clés deJOIN. Cela pouvait conduire à des résultats inattendus lorsqu’une valeur de typeDynamicest comparée à un type non-Dynamic. Il est préférable de convertir la colonneDynamicvers le type requis. #86358 (Pavel Kruglov). - L’option du serveur
storage_metadata_write_full_object_keyest 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_secondsd’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_stepenquery_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
searchAnyetsearchAllont été renommées enhasAnyTokensethasAllTokenspour une meilleure cohérence avec la fonction existantehasToken. #88109 (Robert Schulze). - Supprime
cache_hits_thresholddu 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_insertetmin_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 commequery_logcontinuent 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 seuilmin_free_disk_ratio_to_perform_insertraisonnable. #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_replicationsur 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
LIMITnégatif et deOFFSETnégatif. Clôt #28913. #88411 (Nihal Z. Miaji). - Le moteur
Aliascré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 tableauto_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
convpour convertir des nombres entre différentes bases, avec prise en charge actuelle des bases de2-36. #83058 (hp). - Ajout de la prise en charge de la syntaxe
LIMIT BY ALL. CommeGROUP BY ALLetORDER BY ALL,LIMIT BY ALLs’é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 ALLest é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 PromQLhistogram_quantilesur 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, commeuse_const_adaptive_granularity, ne s’appliquent qu’aux nouvelles parts). #87774 (Azat Khuzhin). - Ajout de la commande
SYSTEM RECONNECT ZOOKEEPERpour 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_warnetmax_named_collection_num_to_throw. Ajoute la nouvelle métriqueNamedCollectionet l’erreurTOO_MANY_NAMED_COLLECTIONS. #87343 (Pablo Marcos). - Ajoute des variantes optimisées insensibles à la casse des fonctions
startsWithetendsWith:startsWithCaseInsensitive,endsWithCaseInsensitive,startsWithCaseInsensitiveUTF8etendsWithCaseInsensitiveUTF8. #87374 (Guang Zhao). - Ajoute un moyen de définir
WORKLOADetRESOURCEen 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_partqui 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-cpretmv-mvrdans 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 fonctionL2DistanceTransposed, 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
searchAlletsearchAnyfonctionnent 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
.sizepour 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, etn2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE'pour n2. #84735 (Yarik Briukhovetskyi). - Améliore les performances de
LIKEavec un préfixe ou un suffixe en utilisant le nouveau paramètre activé par défautoptimize_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_rowpour 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
JoinOptimizeMicrosecondsetQueryPlanOptimizeMicroseconds. #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
FINALsur une tableReplacingMergeTreeavec la colonneis_deleteds’exécute désormais plus rapidement grâce à une meilleure parallélisation issue de deux optimisations existantes : 1. l’optimisationdo_not_merge_across_partitions_select_finalpour les partitions de la table qui n’ont qu’un seulpart; 2. la division des autres plages sélectionnées de la table enintersecting / 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.tablesavec un filtre suruuid(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::appendFromBlocken 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.completionsplutô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_compressionpour contrôler la compression du dictionnaire. Par défaut, il est activé afin d’utiliser la compressionfront-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_viewsetmin_insert_block_size_bytes_for_materialized_views. Auparavant, siparallel_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_sizepour contrôler la taille du buffer des écrivains de fichiers temporaires. * Optimise la consommation mémoire de l’opérationscatter(utilisée, par exemple, dans un grace hash join) pour les colonnesLowCardinality. #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
generateSerialIDprend 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 fonctiongenerateSerialIDpour définir des valeurs de départ personnalisées pour les nouvelles séries. #88085 (Manuel). - Ajout de l’option
--semicolons_inlinedansclickhouse-formatpour 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).
mannWhitneyUTestne 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
LowCardinalitydu 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: deferen plus deExpect: 100-continue, ClickHouse n’envoie pas de réponse100 Continueau 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_errorpar défaut. #87198 (Nikita Mikhaylov). - Renomme la fonction de table
arrowflightenarrowFlight. #87249 (Vitaly Baranov). - Mise à jour de
clickhouse-benchmarkpour accepter-à la place de_dans ses flags CLI. #87251 (Ahmed Gouda). - Rend synchrone l’écriture vers
system.crash_loglors de la gestion des signaux. #87253 (Miсhael Stetsyuk). - Ajoute un paramètre
inject_random_order_for_select_without_order_byqui injecteORDER BY rand()dans les requêtesSELECTde premier niveau sans clauseORDER BY. #87261 (Rui Zhang). - Améliore le message d’erreur de
joinGetafin d’indiquer correctement que le nombre dejoin_keysn’est pas le même que celui deright_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ésactiverTCP_NODELAYpour Keeper. #87363 (Copilot). - Prise en charge de
--connectiondansclickhouse-benchmarks. Elle fonctionne comme dansclickhouse-client: vous pouvez spécifier des connexions prédéfinies dans leconfig.xml/config.yamldu client, sous le cheminconnections_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-certificatedansclickhouse-benchmark. #87370 (Azat Khuzhin). - Désormais, le paramètre
max_insert_threadss’applique aux tables Iceberg. #87407 (alesapin). - Ajout d’histogrammes et de métriques dimensionnelles à
PrometheusMetricsWriter. Ainsi, le handlerPrometheusRequestHandlerdisposera 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
hasTokenrenvoie 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
ArrayetMap(mapKeysetmapValues). Les fonctions prises en charge sontmapContainsKeyethas. #87602 (Elmi Ahmadov). - Ajout d’une nouvelle métrique
ZooKeeperSessionExpiredqui 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_rowsetmax_joined_block_size_byteslors de la sérialisation du plan de requête avecmake_distributed_plan, encore expérimental. #87675 (Vladimir Cherkasov). - Le paramètre
enable_http_compressionest 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, commebzip2, 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 demandergzip, 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
fromettoaux 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ètremax_request_size, identique àjute.maxbufferpourZooKeeper, désactivé par défaut pour la rétrocompatibilité, sera activé dans les prochaines versions). #87952 (Azat Khuzhin). clickhouse-benchmarkn’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_logest 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
Replicatedsans 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) ethasAllTokens(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-Lengthobservé dans les fonctionnalités de copie et de création de conteneur. #88278 (Smita Kulkarni). - Rend la fonction
laginsensible à la casse pour assurer la compatibilité avec MySQL. #88322 (Lonny Kapelushnik). - Permet à
clickhouse-localde démarrer depuis le répertoireclickhouse-server. Dans les versions précédentes, cela produisait l’erreurCannot parse UUID: .Vous pouvez désormais démarrerclickhouse-localet 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
JSONsont désormais affichées avec une mise en forme Pretty lors de l’utilisation du formatVertical. 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-historyrestera 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-keeperpour 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}etmakeDateTime64. 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')renvoyait1968-12-31 23:59:59.532au lieu de1969-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 NULLsur les colonnes Nullable dansOUTER JOINavecoptimize_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
toDateettoDate32pour 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_variantsdans 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_numberet dans les suppressions positionnées Iceberg. #87220 (Michael Kolupaev). - Corrige
LOGICAL_ERROR“Too large size passed to allocator” dansJOIN, 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_timeoutpour 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
MergesurDistributed. #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/timestamptzdans 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_timezonedans 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
MergeTreeavecTTLdéfini sur une colonne de type Set. #88095 (Anton Popov). - Correction d’une exception potentiellement non interceptée lors de la lecture de
system.tablesavec des tables invalides attachées dans des bases de données externes (PostgreSQL/SQLite/…). #88105 (Azat Khuzhin). - Correction d’un crash dans les fonctions
mortonEncodeethilbertEncodelorsqu’elles sont appelées avec un argument Tuple vide. #88110 (xiaohuanlin). - Désormais, les requêtes
ON CLUSTERprendront 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.pathmodifiés pendant l’exécution, et pas seulement l’objet racine. #88198 (Mikhail Artemenko). - Correction de la propagation de l’indicateur
is_shareddansColumnLowCardinality. 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 dansReverseIndex. #88213 (Nikita Taranov). - Corrige le workload setting
max_cpu_share. Il peut désormais être utilisé sans définir le workload settingmax_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.projectionsetsystem.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_tablesest 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 ... COMMENTdes 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_modeest défini surany. #88440 (Eduard Karacharov). - Corrige l’erreur “column not found” lors de l’utilisation de
query_plan_use_logical_join_step=0avec 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œudnum_hostsest 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
accurateCastlors de la conversion de grandes valeurs en DateTime. #88520 (xiaohuanlin). - Corrige
coalescing merge treepour 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-rewritablepour 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_readetuse_query_condition_cacheactivés). #88660 (Anton Popov). - Une exception
Poco::TimeoutExceptionlevée parPoco::Net::HTTPChunkedStreamBuf::readFromDeviceprovoque 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_loglorsque 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_kpour 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>:definerlors de la création d’une vue avec SQL SECURITY DEFINER. #88968 (pufit). - Rétroporté dans #89058 : corrige une
LOGICAL_ERRORdansL2DistanceTransposed(vec1, vec2, p), où l’optimisation de lecture partielle deQBitsupprimait incorrectementNullabledu type de retour lorsquepétaitNullable. #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_HIGHERsiSpeculative Store Bypass Safen’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êtesSYSTEM ENABLE/DISABLE FAILPOINTrenvoient alors une erreurSUPPORT_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_lakesest 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 ... USINGa é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 ent1.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_streametnats_consumerpour 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
S3et à la fonction de tables3, 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 UPDATEpour le moteur de table Iceberg. #86059 (scanhex12).- Ajout de la table système
iceberg_metadata_logpour récupérer les fichiers de métadonnées Iceberg lors des instructions SELECT. #86152 (scanhex12). - Les tables
IcebergetDeltaLakeprennent en charge une configuration de disque personnalisée via le réglage de niveau de stockagedisk. #86778 (scanhex12). - Prise en charge d’Azure pour les disques de data lake. #87173 (scanhex12).
- Prise en charge du catalogue
Unitysur Azure blob storage. #80013 (Smita Kulkarni). - Prise en charge de formats supplémentaires (
ORC,Avro) pour les écrituresIceberg. Cela clôt #86179. #87277 (scanhex12). - Ajout d’une nouvelle table système
database_replicascontenant 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.shutdownLevelpermettent de remplacer respectivement le niveau de log pendant le démarrage et l’arrêt de ClickHouse. #85967 (Lennard Eijsackers). - Fonctions d’agrégation
timeSeriesChangesToGridettimeSeriesResetsToGrid. Leur comportement est similaire à celui detimeSeriesRateToGrid: 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 unchanges/resetsPromQL 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 estArray(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
oneofdans les entréesProtobuf. 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 queinput_format_protobuf_oneof_presenceest 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 danssystem.trace_logsous le typeJemallocSampleen activant la configjemalloc_collect_global_profile_samples_in_trace_log. Le profilage jemalloc peut désormais être activé indépendamment pour chaque query à l’aide du paramètrejemalloc_enable_profiler. Le stockage des échantillons danssystem.trace_logpeut être contrôlé pour chaque query à l’aide du paramètrejemalloc_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 = 1etquery_plan_optimize_join_order_limit = 10. #86822 (Han Fei). - La commande
alter table ... materialize statistics allpermet 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éfinissantSET query_plan_use_new_logical_join_step = 0et 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 clauseOUTER JOIN ... USINGa é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 ent1.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 SELECTDistributed pour les data lakes. #86783 (scanhex12).- Améliore l’optimisation PREWHERE pour des conditions telles que
func(primary_column) = 'xx'etcolumn in (xxx). #85529 (李扬). - Réécriture de JOIN implémentée : 1. Conversion de
LEFT ANY JOINetRIGHT ANY JOINen JOINSEMI/ANTIsi la filter condition est toujours fausse pour les lignes correspondantes ou non correspondantes. Cette optimisation est contrôlée par un nouveau paramètrequery_plan_convert_any_join_to_semi_or_anti_join. 2. Conversion deFULL ALL JOINen JOINLEFT ALLouRIGHT ALLsi 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
HashJoinlégèrement optimisées dans le cas d’un joinLEFT/RIGHTcomportant 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
MarkRangesgrâce à l’utilisation dedevectorau lieu dedeque). #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_fileeticeberg_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_fileetdelta_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 avecALTER TABLE MODIFY SETTING). #85995 (Kseniia Sumarokova). - Vous pouvez utiliser des paramètres de requête après
TOlors 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 àdeltaLakeAzurepour le mode cluster) et de la fonctiondeltaLakeS3Cluster(alias dedeltaLakeCluster). Résout #85358. #85547 (Smita Kulkarni). - Applique le paramètre
azure_max_single_part_copy_sizeaux 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_erroraux disques S3 et le renomme ens3_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) danshttp_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_EXCEEDEDouKEEPER_EXCEPTION) des erreurs non transitoires. #86202 (Miсhael Stetsyuk). - Possibilité d’omettre la fonction
identitypour 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.channelsur l’une des valeurssyslog/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 REPLICAsur 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 (
QueriesMemoryUsageetQueriesPeakMemoryUsage). #86669 (Azat Khuzhin). - Vous pouvez utiliser l’option
clickhouse-benchmark --precisepour 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 queEXPLAIN. Ajout du paramètrequery_plan_max_step_description_length. #86741 (Nikolai Kochetov). - Ajout de la possibilité d’ajuster les signaux en attente pour tenter de contourner
CANNOT_CREATE_TIMER(pour les query profilers,query_profiler_real_time_period_ns/query_profiler_cpu_time_period_ns). Collecte également deSigQdepuis/proc/self/statusà des fins d’introspection (siProcessSignalQueueSizeest proche deProcessSignalQueueLimit, vous obtiendrez probablement des erreursCANNOT_CREATE_TIMER). #86760 (Azat Khuzhin). - Amélioration des performances de la requête
RemoveRecursivedans Keeper. #86789 (Antonio Andelic). - Suppression des espaces superflus dans
PrettyJSONEachRowlors de la sortie du type JSON. #86819 (Pavel Kruglov). - Désormais, nous écrivons les tailles des blobs pour
prefix.pathlorsqu’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_methodn’est pas un codec générique pris en charge. #87097 (Robert Schulze). - La system table
system.query_cacherenvoie 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 quesystem.query_cacherenvoie des query strings. Le comportement de la system table est ainsi plus proche de celui desystem.query_log. #87104 (Robert Schulze). - Activation de l’évaluation en court-circuit pour la fonction
parseDateTime. #87184 (Pavel Kruglov). - Ajout d’une nouvelle colonne
statisticsdanssystem.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 serveurbackground_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_ERRORpour 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).
-
- 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
NonZeroUInt64pourlogs_to_keepdans DatabaseReplicatedSettings. #86142 (Tuan Pham Anh). - Une exception était levée par une requête
FINALavec un skip index si la table (par ex.ReplacingMergeTree) était créée avec le paramètreindex_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.xmllors 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 resourcelors 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
MergesMutationsMemoryTrackingdue aux tablesBufferet corrigequery_views_logpour le streaming depuisKafka(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
searchAnyetsearchAll, lorsqu’elles sont appelées avec des needles vides, renvoient désormaistrue(c.-à-d. « correspond à tout »). Auparavant, elles renvoyaientfalse. (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_sizedé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
insertet 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_hostpour 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 avecPARTITION 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_queuedans 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
TTLavecWHERE. #86965 (Anton Popov). - Correction d’un résultat potentiellement incorrect de la fonction
uniqExactavec les modificateursROLLUPetCUBE. #87014 (Nikita Taranov). - Correction de la résolution du schéma de la table avec la fonction de table
url()lorsque le paramètreparallel_replicas_for_cluster_functionsest 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
EXISTSnon corrélé. Le problème a été introduit avecexecute_exists_as_scalar_subquery=1dans https://github.com/ClickHouse/ClickHouse/pull/85481 et affecte25.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
- Correction de la compatibilité avec abseil-cpp 20250814.0, https://github.com/abseil/abseil-cpp/issues/1923. #85970 (Yuriy Chernyshov).
- La compilation du lexer WASM standalone est désormais placée derrière un flag. #86505 (Konstantin Bogdanov).
- Correction de la compilation de crc32c sur les anciens CPU ARM ne prenant pas en charge l’instruction
vmull_p64. #86521 (Pablo Marcos). - Utilisation de
openldap2.6.10. #86623 (Konstantin Bogdanov). - Ne plus tenter d’intercepter
memalignsur darwin. #86769 (Konstantin Bogdanov). - Utilisation de
krb51.22.1-final. #86836 (Konstantin Bogdanov). - Correction de l’extraction des noms de crate Rust dans
list-licenses.sh. #87305 (Konstantin Bogdanov).
Version de ClickHouse 25.8 LTS, 2025-08-28
Changement incompatible avec les versions précédentes
- Inférer
Array(Dynamic)au lieu d’unTuplenon nommé pour les tableaux de valeurs de types différents en JSON. Pour utiliser le comportement précédent, désactivez le paramètreinput_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
EnumenBYTE_ARRAYavec le type logiqueENUMdans 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étaitround_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éfinitfair_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,deltaLakeAzureeticebergAzureont été mises à jour pour valider correctement les autorisationsAZURE. Toutes les fonctions de variante cluster (fonctions-Cluster) vérifient désormais les autorisations par rapport à leurs équivalents hors cluster. De plus, les fonctionsicebergLocaletdeltaLakeLocalappliquent désormais des vérifications de l’autorisationFILE. #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ètrepromql_table_name='X'et exécutez des requêtes telles querate(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 fonctionsrate,deltaetincreasesont 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 moteurMerge), 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 tablepour 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_versionpour permettre la lecture d’une version de snapshot spécifique dans le table engineDeltaLake. #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_multipliera é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
s3ous3Cluster, par exemples3('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_logpour stocker l’historique des connexions ZooKeeper. #79494 (János Benjamin Antal). - Le paramètre serveur
cpu_slot_preemptionactive 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_shareetmax_burst_cpu_seconds. Plus de détails : https://clickhouse.com/docs/operations/workload-scheduling#cpu_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 deJSONExtract). #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)renvoie2025-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
dateTimeToUUIDv7pour convertir une valeur DateTime en UUIDv7. Exemple d’utilisation :SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56'))renvoie0198af18-8320-7a7d-abd3-358db23b9d5c. #84319 (samradovich). - Fonctions d’agrégation
timeSeriesDerivToGridettimeSeriesPredictLinearToGridpour 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 respectivementderivetpredict_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 Hashrenvoiee5f9e676db098fdb9530d2059d8c23ef. #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-concurrencypour l’outilclickhouse-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_v3pour 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
Curlen définissantazure_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
ALLLEFT/INNERseront automatiquement convertis enRightAnysi 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 demax_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,replaceRegexpOneetextracten 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_rowsen 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
DISTINCTs’exécutent en temps linéaire et corriger un bug danssumDistinct. 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=64afin 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ùcolumnn’est pas de typeArray. Cela améliore les performances de ce type de requêtes, qui deviennent aussi efficaces que l’opérateurIN. #83945 (Doron David). - Réduction des appels à memcpy inutiles dans CompressedReadBufferBase::readCompressedData. #83986 (Raúl Marín).
- Optimisation de
largestTriangleThreeBucketspar 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
structureToProtobufSchemaetstructureToCapnProtoScheman’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 (commelogTrace,demangle,extractURLParameter,toStringCutToZeroetencrypt/decrypt). Le layout de dictionnaireregexp_treene prenait pas en charge le traitement de chaînes contenant des octets nuls. La fonctionformatRowNoNewline, appelée avec le formatValuesou tout autre format sans retour à la ligne en fin de ligne, supprimait par erreur le dernier caractère de la sortie. La fonctionstemcontenait un défaut de sûreté vis-à-vis des exceptions pouvant entraîner une fuite mémoire dans un cas très rare. La fonctioninitcapse comportait incorrectement avec des argumentsFixedString: 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 ApacheORC, qui pouvait entraîner l’exposition de mémoire non initialisée. Le comportement de la fonctionreplaceRegexpAllet de l’alias correspondantREGEXP_REPLACEa é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 debyteSizepour 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 stockageDeltaLake. #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_bufferdans 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_rowpourWHERE. 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 versPREWHERE. #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
EXISTSnon 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ètreexecute_exists_as_scalar_subquery=1est ajouté. #85481 (Nikolai Kochetov).
Amélioration
- Ajout de paramètres
database_replicateddé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.jsoncompressé via le paramètreiceberg_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 danssystem.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_serveretmax_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’argumentaddress_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=0et 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 deS3Queue:min_insert_block_size_rows_for_materialized_viewsetmin_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 deS3Queueles 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êteALTER UPDATEouALTER DELETE. #83978 (Anton Popov). - Utilisation des informations des cgroups (le cas échéant, c.-à-d. si
memory_worker_use_cgroupest 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
Prettypour les nombresNullable. #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ètrelogs_to_keeppar 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_keyspour é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_loggingpour 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 nomsOS<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_recoveryde 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_factorpour 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 INsur 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.columnsfournit désormaiscolumncomme alias de la colonnenameexistante. #84695 (Yunchi Pang). - Nouveau paramètre MergeTree
search_orphaned_parts_drivespour 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_headersd’authentification externe désormais effectuée de manière insensible à la casse. #84737 (ingodwerust). - L’outil
encrypt_decryptprend 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-formatpour accepter--highlightcomme alias de--hilite. - Mise à jour declickhouse-clientpour accepter--hilitecomme alias de--highlight. - Mise à jour de la documentation declickhouse-formatpour 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_errorpour réduire la pression sur S3 lors de vagues de nouvelles tentatives provoquées par des erreurs telles queSlowDown, 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_thresholdetkeeper_server.coordination_settings.commit_logs_cache_entry_count_threshold. #84877 (Antonio Andelic). - Autoriser l’utilisation de
simdjsonsur des architectures non prises en charge (cela provoquait auparavant des erreursCANNOT_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
editordanspath, 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 JOINavec l’ancien analyseur. Introduction d’un nouveau paramètreanalyzer_compatibility_allow_compound_identifiers_in_unflatten_nestedpour 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.grantspour déterminer le type de source pourGRANT READ/WRITEet le moteur de table pourGRANT 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
markReplicasActivedansDDLWorkeretDatabaseReplicatedDDLWorker. #81395 (Tuan Pham Anh). - Corrige le rollback d’une Dynamic column en cas d’échec du parsing. #82169 (Pavel Kruglov).
- Si la fonction
trimest 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_functionsest 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ètreuse_query_condition_cache). #83445 (LB7666). - Historiquement, la fonction
gcsne nécessitait aucun accès pour être utilisée. Désormais, elle vérifiera la permissionGRANT READ ON S3pour 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=1ouadd_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 tableremotelorsque 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 depuisMergeTreePrefetchedReadPool). #83999 (Azat Khuzhin). - Corrige un bug rare où la requête
MATERIALIZE COLUMNpouvait entraîner la présence de fichiers inattendus danschecksums.txtet, à terme, de parties de données détachées. #84007 (alesapin). - Corrige l’erreur logique
Expected single dictionary argument for functionlors d’un JOIN sur une condition d’inégalité lorsque l’une des colonnes estLowCardinalityet l’autre une constante. Clôt #81779. #84019 (Alexey Milovidov). - Corrige un crash de
clickhouse clientlorsqu’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
WINDOWinvalides. 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_ERRORpour 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
setne prenaient pas en compte les colonnesNullablepour 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
DoubleDeltane peut désormais être appliqué qu’à des colonnes de type numérique. En particulier, les colonnesFixedStringne peuvent plus être compressées avecDoubleDelta. (corrige #80220). #84383 (Jimmy Aguilar Mena). - La comparaison avec la valeur
nann’utilisait pas les bonnes plages lors de l’évaluation de l’indexMinMax. #84386 (Elmi Ahmadov). - Corrige la lecture d’une Variant column avec matérialisation paresseuse. #84400 (Pavel Kruglov).
- Traite
zoutofmemorycomme 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_passwordtente de se connecter après que le server settingallow_no_passworda é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_rsd’avant la version 25.5 a été ramenée àfalsepour 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 = 0pouvait 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_DATAlorsque 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
ngrametno_opne 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
ReplacingMergeTreeetCollapsingMergeTree. #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
ReplicatedMergeTreeet 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
MergeTreenon répliqué après l’exécution d’une requêteALTER 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 SetpourIN (subquery)dans le paramètreadditional_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’exceptionShutdown for storage is calledest 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_offsetdans 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_erroroubackup_slow_all_threads_after_retryable_s3_errorsoit 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_commentouinsert_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
JSONExtractlors 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_ERRORlors de l’utilisation deCOMMENT COLUMN IF EXISTSdans la même instructionALTERaprèsDROP COLUMN. La clauseIF EXISTSignore 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_depthcomme indicateur de *Cluster function était incorrecte et peut entraîner une duplication des données ; utilisezclient_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
WITHpour les opérationsINSERT SELECTdistribuées en parallèle avec une table de destinationDistributed. Auparavant, la requête pouvait renvoyer une erreurUnknown expression identifier. #85811 (Nikolai Kochetov). - Masque les informations d’authentification pour
deltaLakeAzure,deltaLakeCluster,icebergS3ClustereticebergAzureCluster. #85889 (Julian Maicher). - Corrige une erreur logique lors d’une tentative de
CREATE ... AS (SELECT * FROM s3Cluster(...))avecDatabaseReplicated. #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_FOUNDlors de la restauration d’une tableMemoryvide. #86012 (Julia Kartseva). - Ajoute des vérifications de
sharding_keylors d’un ALTER de la tableDistributed. 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
clickhousedans 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 argumentunexpected_quoting_character_strategyqui contrôle le comportement lorsqu’unquoting_characterest 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,acceptoupromote.invalidignore la clé et revient à l’état d’attente d’une clé.acceptle traite comme faisant partie de la clé.promoteignore 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ètrecount_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_serveretmax_local_write_bandwidth_for_server) et distantes (max_remote_read_network_bandwidth_for_serveretmax_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_serveretmax_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 àtruepar défaut. Lorsqu’il est défini surtrue, il améliore les performances du traitement des archives dans les fonctions de cluster. Il doit être défini surfalsepour 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 REPLICASprovoquait 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 REPLICASredémarrera uniquement les répliques dans les bases de données où vous disposez de la permissionSHOW 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éfinissantlightweight_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.jsoncompressés pour Iceberg. Corrige #70874. #81451 (alesapin). - Prise en charge de
TimestampTZdans 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 :
READetWRITEpour 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 permissionsREADetWRITEpour les sources, par exemple :GRANT READ ON * TO user,GRANT WRITE ON S3 TO user. La fonctionnalité est contrôlée par le paramètreaccess_control_improvements.enable_read_write_grantset 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_queriesest 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’erreurSERVER_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
polygonsIntersectCartesianetpolygonsIntersectSphericalpour déterminer si deux polygones s’intersectent. #81882 (Paul Lamb). - Prise en charge de la colonne virtuelle
_part_granule_offsetdans 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
colorSRGBToOkLCHetcolorOkLCHToSRGBpour convertir des couleurs entre les espaces colorimétriques sRGB et OkLCH. #83679 (Fgrtue). - Prise en charge des paramètres dans les requêtes
CREATE USERpour les noms d’utilisateur. #81387 (Diskein). - La table
system.formatscontient 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
searchAnyetsearchAll, 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_metadatalié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 nonNullable, 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
HashJoinont é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érificationsnull_mapetjoin_masksont également éliminées lorsqu’elles sont toujourstrue/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_seekdansfilterPartsByQueryConditionCachepour l’aligner sur les autres méthodes de filtrage par index. #80312 (李扬). - Le pipeline après l’étape
TOTALSdevient multithreadé. #80331 (UnamedRus). - Correction du filtre par clé pour les stockages
RedisetKeeperMap. #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 PARTITIONn’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 JOINn’est pas produit si le paramètrequery_plan_correlated_subqueries_use_substitutionest 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_mapetJoinMaskde #82308 ont été appliquées au cas d’un JOIN avec plusieurs disjonctions. De plus, la structure de donnéesKnownRowsHoldera é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
HashJoinutilise le mode de sortielazy. 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
ProtobufSinglegrâ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_errorest 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-formatet dans l’écho declickhouse-client, mais elle est désormais également disponible dans l’invite de commande. #82871 (Alexey Milovidov). - La mise en évidence dans
clickhouse-formatet dans l’écho du client fonctionnera de la même manière que dans l’invite de commande. #82874 (Alexey Milovidov). - Les disques
plain_rewritablepeuvent désormais être utilisés pour les métadonnées des bases de données. Implémentation des méthodesmoveFileetreplaceFiledansplain_rewritablepour permettre son utilisation comme disque de base de données. #79424 (Tuan Pham Anh). - Autorisation des sauvegardes pour les bases de données
PostgreSQL,MySQLetDataLake. 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_conditionest 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,MarkCacheEvictedMarksetMarkCacheEvictedFilespour suivre les évictions du cache de marks. (issue #60989). #80799 (Shivji Kumar Jha). - Prise en charge de l’écriture des
enumParquet 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 APIExpressionVisitor, 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, cetExpressionVisitorpermettra 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 tableDeltaLakeCluster(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_usersetmax_network_bandwidth_for_all_usersne 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 COLUMNsi elle doit renommer une colonne actuellement affectée par une mutation de données incomplète. #81823 (Mikhail Artemenko). - L’en-tête
Connectionest 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_serveretmax_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 deTRUNCATE 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
reinterpretprend désormais en charge la conversion versArray(T)oùTest 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ètrekeeper_pathdu 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_streamingqui 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’appelerIDatabase::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
nanetinfavecNumericIndexedVector. Corrige #82239 et un peu plus. #82681 (Raufs Dunamalijevs). - Ne pas omettre les valeurs nulles dans les formats de header
X-ClickHouse-ProgressetX-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 COLUMNouDROP COLUMNsur 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
DecimalversFloat32. Implémentation de la conversion deDecimalversBFloat16. 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-serveravec 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éefailed_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/blockexiste 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
TimeetTime64aux formatsMM:SS,M:SS,SSouS. #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épassemax_replication_lag_to_enqueue. Cela devrait aider à éviterDDL task is not finished on some hostslorsqu’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 querySYSTEM SYNC DATABASE REPLICA STRICT, qui attend que le log de réplication redescende sousmax_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,
getStatuslève une exceptionErrorCodes::ABORTED. Auparavant, cela faisait échouer la requête SELECT. Désormais, nous interceptons les exceptionsErrorCodes::ABORTEDet 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éesMergeParts. #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/Date32comme entiers dans les formats d’entréeJSON. #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
--reconnectdansclickhouse-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 compteurrows_before_limit_at_leastreflè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
looplorsqu’elle est utilisée avec la famille de fonctionsremote. Garantit que la clause LIMIT est bien respectée dansloop(remote(...)). #80299 (Julia Kartseva). - Correction du comportement incorrect des fonctions
to_utc_timestampetfrom_utc_timestamplors 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 deWHERE key IN (...). #81255 (Michael Kolupaev). - Correction d’un possible crash dans
Aggregatoren cas d’exception pendant une fusion. #81450 (Nikita Taranov). - Correction de
InterpreterInsertQuery::extendQueryLogElemImplafin 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
INavectransform_null_in=1lorsqu’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
MongoDBpouvaient inclure un composant de chemin dans l’argumenthost: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 moteurMongoDBa 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 tablemongo, ni aux sources de dictionnaire et aux collections nommées. #81942 (Vladimir Cherkasov). - Correction d’un possible plantage dans
Aggregatoren 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_ERRORet 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) dehostsaid == DROPPED_MARKet qu’il n’existe aucun autre élément pour le même shard, le premier élément deshardssera un vecteur vide, ce qui entraînestd::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 columnpour les requêtes avecarrayJoindans une conditionWHEREetIndexSet. #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_setasynchronous_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
NULLdans la fonctionCASE. #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, sisession_timezoneétait défini, par exemple, dansusers.xml/les options du client sur une valeur non vide, et dans le contexte de la requête sur une valeur vide, la valeur deusers.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_idpeut 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_ERRORlors 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
mergeTreeProjectionlorsqueenable_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/groupArrayLasten 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
Memoryvide, qui entraînait l’échec de la restauration du backup avec l’erreurBACKUP_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_ptrdansTransactionLog::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 moteurMergeTreeou 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
formatDateTimelorsque le Formatter%fest 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 TABLEsans 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_requestpour 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_SUBQUERIESlorsqu’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_read_countersentre 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éfixeCache). #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.ubuntupour 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
busyboxet les outils d’installation dansclickhouse/clickhouse-serveret les images officiellesclickhouse. #83735 (Mikhail f. Shiryaev). - Ajouter la prise en charge de la variable d’environnement
CLICKHOUSE_HOSTpour spécifier l’hôte du ClickHouse server, en cohérence avec les variables d’environnement existantesCLICKHOUSE_USERetCLICKHOUSE_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
countMatchesarrêtait le comptage à la première correspondance vide, même si le motif l’acceptait. Pour corriger ce problème,countMatchescontinue 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ètrecount_matches_stop_at_empty_match. #81676 (Elmi Ahmadov). - Mineur : imposer que les paramètres serveur
backup_threadsetrestore_threadssoient non nuls. #80224 (Raúl Marín). - Mineur : correction de
bitNotpourString, 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) etTime64([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 existantetoTime. Le paramètreuse_legacy_to_timeest 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
diskpour les moteurs de base de donnéesAtomicetOrdinary, 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 PromQLdelta,rate,ideltaetirate. #80590 (Alexander Gololobov). - Ajout des fonctions
mapContainsValuesLike/mapContainsValues/mapExtractValuesLikepour 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_querypour 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
JSONversParquetet de la lecture directe des colonnesJSONdepuisParquet. #79649 (Nihal Z. Miaji). - Ajout de la prise en charge de
MultiPolygonpourpointInPolygon. #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
bech32Encodeetbech32Decodepour 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,arrayLastetarrayLastIndexfiltreront 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 nameau lieu deUSE name. #81307 (Yarik Briukhovetskyi). - Ajout d’une nouvelle table système
system.codecspour inspecter les codecs disponibles. (issue #81525). #81600 (Jimmy Aguilar Mena). - Prise en charge des fonctions de fenêtre
lagetlead. Clôt #9887. #82108 (Dmitry Novik). - La fonction
tokensprend 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
--databasedansclickhouse-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 deall_topic_partitions / active_replicas_countverrous permanents (ici,all_topic_partitionsdésigne le nombre total de partitions etactive_replicas_countle 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
tokenizerobligatoire et deux paramètres facultatifs,max_rows_per_postings_listetngram_size. #80262 (Elmi Ahmadov). - Auparavant, le stockage
packedn’é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_sidsur disque. Avec le stockagepacked, 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 entext. Les index existants de typeginpeuvent toujours être chargés, mais ils lèveront une exception (suggérant d’utiliser des indextextà 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
SLRUdans 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::mergelorsque 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 tablesKafka). #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
toFixedStringlorsque 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ètresconnect_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,
mkdirest é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] INvers la clausePREWHERElorsque c’est applicable. #79996 (Eduard Karacharov).
Amélioration
EXPLAIN SYNTAXutilise désormais un nouvel analyseur. Il renvoie un AST construit à partir de l’arbre de requête. Ajout de l’optionquery_tree_passespour 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
S3après l’erreurAuthenticationRequired. #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
_timedans les moteursS3QueueetAzureQueue. #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 deparam_<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_errorpourstartup_scripts: lorsquethrow_on_errorvaut 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_errorvaut false, ce qui préserve le comportement précédent. #79732 (Aleksandr Musorin). - Permet d’ajouter
http_response_headersà deshttp_handlersde tout type. #79975 (Andrey Zvonov). - La fonction
reverseprend désormais en charge le type de donnéesTuple. Clôt #80053. #80083 (flynn). - Résout #75817 : permet d’obtenir les données
auxiliary_zookeepersdepuis la tablesystem.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_nullsetany_respect_nullscommeSimpleAggregateFunction. #80219 (Diskein). - Supprime l’appel inutile à
adjustCreateQueryForBackuppour 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') dansclickhouse-localsans 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
EXPLAINpour 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
DiskLocalCheckThreaddémarre. #80391 (VicoWu). - Implémente la prise en charge du stockage
s3_plain_rewritableavec 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 UNFREEZEne 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 :
IndexBinarySearchAlgorithmetIndexGenericExclusionSearchAlgorithm. #80679 (Pablo Marcos). - Ne pas signaler dans les logs l’absence de prise en charge de
MADV_POPULATE_WRITEsur les anciens noyaux (pour éviter de polluer les logs). #80704 (Robert Schulze). - Ajout de la prise en charge de
Date32etDateTime64dans les expressionsTTL. #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
EXPLAINlorsqu’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_historyaffiche l’historique des bases de données des catalogs comme glue ou iceberg rest. Les colonnestable_nameetdatabase_nameont également été renommées entableetdatabasedanssystem.iceberg_historypour plus de cohérence. #80975 (alesapin). - Autoriser le mode read-only pour la table function
merge, afin que le grantCREATE TEMPORARY TABLEne 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.metricsplutôt que danssystem.asynchronouse_metrics, qui est incomplet). Ajout de la taille des caches en mémoire (en octets) dansdashboard.html.VectorSimilarityIndexCacheSize/IcebergMetadataFilesCacheSizea été renommé enVectorSimilarityIndexCacheBytes/IcebergMetadataFilesCacheBytes. #81023 (Azat Khuzhin). - Ignorer les bases de données avec des engines qui ne peuvent pas contenir de tables
RocksDBlors de la lecture desystem.rocksdb. #81083 (Pervakov Grigorii). - Autoriser
filesystem_cachesetnamed_collectionsdans le fichier de configuration declickhouse-local. #81105 (Alexey Milovidov). - Correction de la mise en évidence de
PARTITION BYdans les queriesINSERT. Dans les versions précédentes,PARTITION BYn’é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
MemoryResidentWithoutPageCachefournit 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_finaletuse_skip_indexes_if_final_exact_modeont désormaisTruecomme valeur par défaut. Les requêtes avec la clauseFINALutiliseront 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éfiniruse_skip_indexes_if_final_exact_modesur 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_strictdans les vérifications de monotonie des fonctions de conversion. Actuellement, certaines fonctions de conversion, telles quetoFloat64(UInt32)ettoDate(UInt8), renvoient à tortis_strictà false alors qu’elles devraient renvoyer true. #81359 (zoomxi). - Lors de la vérification de la correspondance entre une
KeyConditionet une plage continue, si la clé est enveloppée dans une chaîne de fonctions non stricte, unConstraint::POINTpeut devoir être converti enConstraint::RANGE. Par exemple :toDate(event_time) = '2025-06-03'implique une plage pourevent_time: [‘2025-06-03 00:00:00’, ‘2025-06-04 00:00:00’). Cette PR corrige ce comportement. #81400 (zoomxi). - Les alias
clickhouse/chinvoquerontclickhouse-clientau lieu declickhouse-localsi--hostou--portsont 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_subqueriesest 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 sectionsCONSTRAINTpour des queriesON 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
argMaxpour les typesDynamic/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
readonlydans l’object storageazure_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_functionsde la tablesystem.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
DateTimeavec fuseau horaire dans les tablesStripeLog. 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_BLOCKcausée par l’optimisation du filter-push-down à l’étape logique de JOIN lorsque l’expressionONn’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_orderactivé. #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
shardNumdans les tables Distributed avecjoin_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 avecCANNOT_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_ntzpour Unity Catalog. Corrige #79535, #79875. #80740 (alesapin). - Correction de l’erreur
THERE_IS_NO_COLUMNpour les requêtes distribuées avecIN 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’optimisationpredicate-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 existpour 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 colonnesused_executable_user_defined_functionsouused_sql_user_defined_functionssi l’UDF a été utilisée dans la requête. #81101 (Kyamran). - Correction des erreurs
Too large size ... passed to allocatorou des crashs possibles sur les inserts via HTTP protocol avec des text formats (JSON,Values, …) et des champsEnumomis. #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 identifierpourdistributed_product_mode_local=localavec 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’unsegfaultpotentiel dansDataLakeConfigurationlors de l’utilisation de la fonctionClusteravec 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
Aggregatoren 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
Npysurvenant lors de l’écriture dans une table avec le moteurURL. Cela clôt #81356. #81502 (Alexey Milovidov). - Il est possible que la Web UI affiche
NaN%(problèmes JavaScript typiques). #81507 (Alexey Milovidov). - Corrige
DatabaseReplicatedpourdatabase_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 partlors deATTACHversReplicatedMergeTree. #81647 (Azat Khuzhin). - Le paramètre de requête
use_iceberg_partition_pruningn’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 esttrue. 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_sizeafin de garantir qu’il n’est pas nul. #81693 (Bharat Nallan). - Correction de problèmes dans
clickhouse-localliés à des requêtesDROP VIEWbloquées. #81705 (Bharat Nallan). - Correction du join de StorageRedis dans certains cas. #81736 (Pervakov Grigorii).
- Correction d’un crash dans
ConcurrentHashJoinavecUSING ()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
MongoDBpouvaient inclure un composant de chemin dans l’argumenthost: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 moteurMongoDBa 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 functionmongo, ni aux dictionary sources et aux named collections. #81942 (Vladimir Cherkasov). - Correction d’un crash possible dans
Aggregatoren cas d’exception pendant un merge. #82022 (Nikita Taranov). - Correction d’une erreur de copier-coller dans
arraySimilarity, qui interdisait l’utilisation des weightsUInt32etInt32. 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
- Utiliser
postgres16.9. #81437 (Konstantin Bogdanov). - Utiliser
openssl3.2.4. #81438 (Konstantin Bogdanov). - Utiliser
abseil-cpp2025-01-27. #81440 (Konstantin Bogdanov). - Utiliser
mongo-c-driver1.30.4. #81449 (Konstantin Bogdanov). - Utiliser
krb51.21.3-final. #81453 (Konstantin Bogdanov). - Utiliser
orc2.1.2. #81455 (Konstantin Bogdanov). - Utiliser
grpc1.73.0. #81629 (Konstantin Bogdanov). - Utiliser
delta-kernel-rsv0.12.1. #81707 (Konstantin Bogdanov). - Mettre à jour
c-aresversv1.34.5. #81159 (Konstantin Bogdanov). - Mettre à niveau
curlvers 8.14 pour corriger les CVE-2025-5025 et CVE-2025-4947. #81171 (larryluogit). - Mettre à niveau
libarchivevers 3.7.9 pour corriger les vulnérabilités suivantes : CVE-2024-20696 CVE-2025-25724 CVE-2024-48958 CVE-2024-57970 CVE-2025-1632 CVE-2024-48957 CVE-2024-48615. #81174 (larryluogit). - Mettre à niveau
libxml2vers 2.14.3. #81187 (larryluogit). - Éviter de copier les sources Rust embarquées dans
CARGO_HOME. #79560 (Konstantin Bogdanov). - Supprimer la dépendance à la bibliothèque Sentry en la remplaçant par notre propre endpoint. #80236 (Alexey Milovidov).
- Mettre à jour les dépendances Python dans les images CI pour corriger les alertes Dependabot. #80658 (Raúl Marín).
- Réessayer de lire l’indicateur d’arrêt du DDL répliqué depuis Keeper au démarrage afin de rendre les tests plus robustes lorsque l’injection de fautes est activée pour Keeper. #80964 (Alexander Gololobov).
- Utiliser https pour l’URL des archives Ubuntu. #81016 (Raúl Marín).
- Mettre à jour les dépendances Python dans les images de test. #81042 (dependabot[bot]).
- Ajout de
flake.nixpour les builds Nix. #81463 (Konstantin Bogdanov). - Correction de
delta-kernel-rs, qui nécessitait un accès au réseau pendant le build. Clôt #80609. #81602 (Konstantin Bogdanov). Lisez l’article A Year of Rust in ClickHouse.
Version 25.5 de ClickHouse, 2025-05-22
Changement incompatible avec les versions précédentes
- La fonction
geoToH3accepte 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ètregeotoh3_argument_order = 'lon_lat'. #78852 (Pratima Patel). - Ajout d’un paramètre de cache du système de fichiers,
allow_dynamic_cache_resize,falsepar 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
annoyetusearch. 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 indexannoyetusearch, 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-rsdu stockageDeltaLake. #79541 (Kseniia Sumarokova). - Si la lecture depuis une
URLimplique plusieurs redirections, le paramètreenable_url_encodingest correctement appliqué à toutes les redirections de la chaîne. #79563 (Shankar Iyer). La valeur par défaut du paramètreenble_url_encodingest désormaisfalse. #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,sparseGramsUTF8pour 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éech) utilise désormais unFROM tableimplicite 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 dansclickhouse-localsi--input-formatn’est pas spécifié et qu’il traite un fichier ordinaire. #79085 (Alexey Milovidov).- Ajout des fonctions
stringBytesUniqetstringBytesEntropypour 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
getServerSettingetgetMergeTreeSetting. Clôt #78318. #78439 (NamNguyenHoai). - Ajout du nouveau paramètre
iceberg_enable_version_hintpour exploiter le fichierversion-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_offsetdans les tables de la familleMergeTree. 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,positiveModuloOrNullpour 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
icebergHasheticebergBucket. Prise en charge de l’élagage des fichiers de données dans les tablesIcebergpartitionnées à l’aide de latransformation bucket. #79262 (Daniil Ivanik).
Fonctionnalité expérimentale
- Nouveaux types de données
Time/Time64:Time(HHH:MM:SS) etTime64(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_textont été renommés engin. Cela reprend une terminologie plus familière dans PostgreSQL et d’autres bases de données. Les index existants de typefull_textpeuvent toujours être chargés, mais ils déclencheront une exception (suggérant à la place des indexgin) 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 tableReplacingMergeTreecomporte 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/AzureQueueen permettant des INSERT en parallèle (activation possible avec le paramètre de queueparallel_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, lesINSERTsont presque toujours le goulot d’étranglement. Désormais, les performances évolueront de façon presque linéaire avecprocessing_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’algorithmehashlorsque 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
uniqExactdurant 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
uniqExactpour 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
LogSeriesLimiterd’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_downsur true par défaut. Corrige également une erreur dans l’historique des modifications des paramètres. #80058 (Alexey Milovidov). - Optimise les mutations
ALTER ... DELETEpour 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_bytespour 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, demmapà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
isIPAddressInRangeaux types de donnéesString,IPv4,IPv6,Nullable(String),Nullable(IPv4)etNullable(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_offsetdans 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_queryetsource) àsystem.named_collections. Clôt #78179. #78582 (MikhailBurdukov). - Ajout d’un nouveau champ
conditionà la table systèmesystem.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
DateTime64en 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
Variantau format Values grâce à une meilleure conversion des valeurs. #78923 (Pavel Kruglov). - La fonction
tokensa été étendue pour accepter un argument “tokenizer” supplémentaire, ainsi que d’autres arguments spécifiques au tokenizer. #79001 (Elmi Ahmadov). - L’instruction
SHOW CLUSTERdé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
stderrpar 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
ParquetReadRowGroupsetParquetPrunedRowGroupspour profiler l’élagage des index Parquet. #79180 (flynn). - Prend en charge
ALTERsur 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_syntaxa é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 filesystemcache. 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’optionreconnectpour 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 PARTITIONpour les tables situées sur différents disquesplain_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_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.functionsindique 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 champis_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 modifierEXCEPT. 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
JSONgrâ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-benchmarkaffichera 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
SELECTlors de la création deVIEWavec l’analyzer activé. Clôt #75956. #76356 (Dmitry Novik). - Corrige l’application de
async_insertdepuis le serveur (viaapply_settings_from_server) (auparavant, cela entraînait des erreursUnknown packet 11 from servercô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 mismatchdans le cas d’unINSERT SELECTvers une fonction de table avec inférence de schéma siSELECTcontient 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 fonctionindoit être remplacée parglobalIn. #78749 (Yakov Olkhovskiy). - Corrige plusieurs types de requêtes
SELECTlisant depuis des tables avec le moteurMongoDBou la fonction de tablemongodb: requêtes avec conversion implicite d’une valeur constante dans la clauseWHERE(par exempleWHERE datetime = '2025-03-10 00:00:00') ; requêtes avecLIMITetGROUP 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
prewheredans 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_cacherejettent désormais les paramètresblock_sizeetwrite_buffer_sizenuls 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 dansINest 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 mismatchdans 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_requestsetallow_experimental_parallel_reading_from_replicassont 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
formatDateTimesi un Formatter de taille variable (par ex.%W, c.-à-d. le jour de la semaineMondayTuesday, etc.) est suivi d’un Formatter composé (un Formatter qui affiche plusieurs components à la fois, par ex.%D, c.-à-d. la date américaine05/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
%edans la fonction SQLparseDateTimereconnaî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 settingparsedatetime_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)enArray(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
AggregatingSortedAlgorithmetSummingSortedAlgorithm. #79056 (Nikita Taranov). enable_user_name_access_typene doit pas affecter le type d’accèsDEFINER. #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
- Permet de réutiliser le binaire
chcachecompilé au lieu de le recompiler systématiquement. #78851 (János Benjamin Antal). - Ajout de l’attente de mise en pause pour NATS. #78987 (Dmitry Novikov).
- Correction de la publication erronée d’un build ARM en tant que amd64compat. #79122 (Alexander Gololobov).
- Utilisation de code assembleur pré-généré pour OpenSSL. #79386 (Konstantin Bogdanov).
- Correctifs pour permettre la compilation avec
clang20. #79588 (Konstantin Bogdanov). chcache: prise en charge de la mise en cache Rust. #78691 (Konstantin Bogdanov).- Ajout des informations de déroulage pour les fichiers assembleur
zstd. #79288 (Michael Kolupaev).
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_selectest défini surfalse. #74481 (Christoph Wurm). - Corrige les cas où
dateTruncest utilisé avec des argumentsDate/DateTimenégatifs. #77622 (Yarik Briukhovetskyi). - L’ancienne intégration
MongoDBa été supprimée. Le paramètre serveuruse_legacy_mongodb_integrationest devenu obsolète et n’a désormais plus aucun effet. #77895 (Robert Schulze). - Améliore la validation de
SummingMergeTreeafin 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-localconservera 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 entremin_os_cpu_wait_time_ratio_to_throwetmax_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 tablesIcebergà 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 etmetadata.jsonafin d’accélérer les requêtes. #77156 (Han Fei). - Prise en charge du moteur de table
DeltaLakepour 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_sizeetvector_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
MergeTreeen 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
SASLau moteur de tableKafka. 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_codecpour 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_hostdans 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, danssystem.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-256dans le protocole de compatibilité PostgreSQL. #76839 (scanhex12). - Ajoute les fonctions
arrayLevenshteinDistance,arrayLevenshteinDistanceWeightedetarraySimilarity. #77187 (Mikhail f. Shiryaev). - Le paramètre
parallel_distributed_insert_selects’applique àINSERT SELECTdansReplicatedMergeTree(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 typeIntervalspécifique. #78723 (Andrew Davis). - Ajoute plusieurs moyens pratiques de localiser le fichier racine
metadata.jsondans 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
EXISTSdans la clauseWHERE. Résout #72459. #76078 (Dmitry Novik). - Ajout des fonctions
sparseGramsetsparseGramsHashes, 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 BYetLIMIT. #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 aveccount()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_sizelorsque 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
getindividuelles, qui auraient pu provoquer une charge importante sur Keeper avec l’augmentation du nombre de répliques, là oùmultiReadest 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
s3Clusterpour les requêtes avec une seule expansion entre crochets. #77686 (Tomáš Hromada). - Optimise ORDER BY sur une seule colonne
NullableouLowCardinality. #77789 (李扬). - Optimise l’utilisation mémoire du format
Native. #78442 (Azat Khuzhin). - Optimisation triviale : ne pas réécrire
count(if(...))encountIfsi une conversion de type est nécessaire. Résout #78564. #78565 (李扬). - La fonction
hasAllpeut désormais tirer parti des index de skipping de texte intégraltokenbf_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_typepour la tablesystem.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 surtouttransposed_with_wide_view— crée une table sous-jacente avec un schématransposed, tout en ajoutant une vue avec un schémawidequi traduit les requêtes vers la table sous-jacente. Danstransposed_with_wide_view, la résolution inférieure à la seconde n’est pas prise en charge pour la vue,event_time_microsecondsn’é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 tableDistributedutilisent 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
JSONet 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_msetmax_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
UInt128enIPv6. Cela permet d’utiliser l’opérationbitAndet l’arithmétique avecIPv6, ainsi que de reconvertir le résultat enIPv6. Closes #76752. Cela permet également de reconvertir enIPv6le résultat de l’opérationbitAndsurIPv6. See also #57707. #76928 (Muzammil Abdul Rehman). - Par défaut, n’analyse pas les valeurs spéciales de
Booldans les text formats à l’intérieur du typeVariant. Cela peut être activé à l’aide du paramètreallow_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 delibrdkafka(à 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_preadpour activer ou désactiverpreaddansHDFS. #77885 (kevinyhzou). - Ajout de profile events pour le nombre de requêtes de lecture et d’écriture
multide ZooKeeper. #77888 (JackyWoo). - Autorise la création et l’insertion dans des tables temporaires lorsque
disable_insertion_and_mutationest 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
MergeTreesera effectué dans leur ordre de block, ce qui est important pour certains algorithmes de merging spéciaux, commeReplacingMergeTree. Cela clôt #71009. #77976 (Alexey Milovidov). - Les Query masking rules peuvent désormais lever une
LOGICAL_ERRORen 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.tablespour une meilleure compatibilité avec MySQL. #78119 (Paweł Zakrzewski). - Introduction de deux nouvelles metrics :
TotalMergeFailuresetNonAbortedMergeFailures. 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,BlockQueueTimeetBlockReadTime(avant ce changement, 1 seconde était incorrectement signalée comme 0.001). #78211 (filimonov). - Respect de la limite
loading_retriespour 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_zkpour les disks d’exécution. Clôt #78177. #78470 (Kseniia Sumarokova). - Ajout d’un avertissement dynamique à la table
system.warningspour les mutations longues. #78658 (Bharat Nallan). - Ajout du champ
conditionà la table systèmesystem.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
INpourBFloat16(c.-à-d. queSELECT toBFloat16(1) IN [1, 2, 3];renvoie désormais1). Clôture de #78754. #78839 (Raufs Dunamalijevs). - Ne plus vérifier les parts sur d’autres disques pour
MergeTreesidisk = ...est défini. #78855 (Azat Khuzhin). - Enregistrement des data types dans
used_data_type_familiesdesystem.query_logavec 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 deDETACH 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_sessionn’avait aucun effet, ce qui faisait que les sessions nommées n’étaient fermées qu’aprèssession_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
FileLogvide via la fonction de tablemerge, 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
NaNdansargMin/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_BLOCKse 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
toStartOfIntervalavec un argument d’origine nul. #78096 (Yarik Briukhovetskyi). - Interdire la spécification d’un paramètre de requête
session_idvide 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êteRENAMEexécutée juste après une requêteALTER. #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êtesRENAME DATABASEouDROP TABLE. #78126 (Nikolay Degterinsky). - Correction des vérifications d’un nombre trop élevé de tables avec la base de données
Replicatedaprè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 deReplicatedMergeTreeouKeeperMap. #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 erreurBAD_ARGUMENTSpour la valeur 0 de type Int de l’argumentmax_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_settingsrenvoyait toujoursfalse. #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
mapFromArraysdans le cas d’un tableau de clés de typeLowCardinality(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_mutationd’une réplique vauttrue. Une tâche correspond à une insertion et échouera sidisable_insertion_and_mutationvauttrue. #78277 (Xu Jia). - Validation de l’accès aux tables sous-jacentes pour le moteur
Merge. #78339 (Pervakov Grigorii). - Le modificateur
FINALpeut être ignoré lors des requêtes sur une tableDistributed. #78428 (Yakov Olkhovskiy). bitmapMinrenvoie 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_efficientest 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
DeltaLakeavec 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
SELECTlisant depuis des tables avec le moteurMongoDBou la fonction de tablemongodb: requêtes avec conversion implicite d’une valeur constante dans la clauseWHERE(par exempleWHERE datetime = '2025-03-10 00:00:00') ; requêtes avecLIMITetGROUP 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
StorageDistributedlors de l’utilisation de fonctions de table autres queview. 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_cacherejettent désormais les paramètresblock_sizeetwrite_buffer_sizenuls 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
DateTimeinvalides au formatCSV. #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
- Interdiction de tronquer les bases de données Replicated. #76651 (Bharat Nallan).
- Le cache des index de skipping a été retiré. #77447 (Nikita Mikhaylov).
Nouvelle fonctionnalité
- Le type de données
JSONest prêt pour la production. Voir https://jsonbench.com/. Les types de donnéesDynamicetVariantsont 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 surround_robin(comportement précédent) oufair_round_robinpour 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,toYearNumSinceEpochettoMonthNumSinceEpoch. Prise en charge de la transformationtruncatedans l’élagage des partitions pour le moteurIceberg. #77403 (alesapin). - Prise en charge des types de données
LowCardinality(Decimal)#72256. #72833 (zhanglistar). - Les événements de profil
FilterTransformPassedRowsetFilterTransformPassedBytesafficheront 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 viasystem.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_sizelorsque 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
TRUNCATEest utilisé avecINTO OUTFILE. Résout #70323. #77181 (Onkar Deshpande). - Il n’est plus possible d’utiliser
NaNouinfcomme 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 explicitementparallel_replicas_only_with_analyzersurfalse. #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.warningset 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érationsDROPdoivent 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=Kafkane 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èssession_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_settingsousettingsdisposent d’une colonnedefaultpour la valeur par défaut, ce qui est pratique. Elle a été ajoutée àmerge_tree_settingsetreplicated_merge_tree_settings. #76942 (Diego Nieto). - Ajout de
ProfileEvents::QueryPreempted, dont la logique est similaire à celle deCurrentMetrics::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_copyprend 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
INSERTdistribué 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
toDateTimelorsquedate_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
RENAMEetRESTART REPLICA; en cas deRENAMEconcurrent avecSYSTEM RESTART REPLICA, vous pourriez redémarrer la mauvaise replica et/ou laisser l’une des tables dans l’étatTable 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 danssquashing. #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_flagdans 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 blockaprè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_ERRORgé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,
multiIfpouvait 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 correctementtrue(au lieu defalseauparavant). Le comportement est ainsi cohérent avecFloat32etFloat64. #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ùaest 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_insertavecinput. #77340 (Azat Khuzhin). - Correction :
WITH FILLpeut é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
Nullablepour la fonctionarrayResizesont désormais interdits. Auparavant, l’utilisation deNullablecomme 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
clickhouse-odbc-bridgeetclickhouse-library-bridgesont déplacés dans un dépôt distinct, https://github.com/ClickHouse/odbc-bridge/. #76225 (Alexey Milovidov).- Correction de la compilation croisée avec Rust et ajout de la possibilité de désactiver complètement Rust. #76921 (Raúl Marín).
Version 25.2 de ClickHouse, 2025-02-27
Changement incompatible avec les versions précédentes
- Active entièrement
async_load_databasespar défaut (y compris pour les installations qui ne mettent pas à jourconfig.xml). #74772 (Azat Khuzhin). - Ajoute les formats
JSONCompactEachRowWithProgressetJSONCompactStringsEachRowWithProgress. Suite de #69989.JSONCompactWithNamesetJSONCompactWithNamesAndTypesn’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_parsingne 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 resultsignifie « 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’éviterMEMORY_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 tableet par environ 10 pour des requêtes commeSELECT data FROM table LIMIT 10. #74827 (Pavel Kruglov). - Corrige une contention inutile dans
parallel_hashlorsquemax_rows_in_join = max_bytes_in_join = 0. #75155 (Nikita Taranov). - Corrige une double préallocation dans
ConcurrentHashJoinlorsque 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_partspourMATERIALIZE 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 > 5lorsque data = [1, 2, 4, 5]. #71383 (Arthur Passos). - Les queries transmises au stockage
Executablene 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
PREWHEREles predicates avec la fonctionindexHint. #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_logdispose 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_serveetmax_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 ...avecKILL QUERYet automatiquement via un timeout (max_execution_time). #75016 (Kirill). - Ajout de la prise en charge de
groupUniqArrayArrayMapen tant queSimpleAggregateFunction. #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,18446744073709551615pour un argument trop grand, lever une exception sinan. #75312 (Vitaly Baranov).- Prise en charge native de
s3.endpointdepuis la config du catalog dansDatabaseIceberg. Corrige #74558. #75375 (Kseniia Sumarokova). - Ne plus échouer silencieusement si un utilisateur exécutant
SYSTEM DROP REPLICAne 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 deusers.xmlet 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_trackerpour 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_hashdanssystem.processes. Remarque : bien qu’elle puisse être calculée facilement à la volée avec la fonctionnormalizedQueryHash, elle est nécessaire pour préparer les modifications ultérieures. #75756 (Alexey Milovidov). - Les requêtes sur
system.tablesne lèveront plus d’exception, même s’il existe une tableMergecréée sur une base de données qui n’existe plus. Suppression de la méthodegetTotalRowsdes tablesHive, 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/handledans les fonctions de tablePostgreSQLouMySQL. 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_workloadpermettant de définir le comportement d’une query dont le paramètreworkloadest défini sur une valeur inconnue : soit autoriser un accès illimité (par défaut), soit renvoyer une erreurRESOURCE_ACCESS_DENIED. Cela est utile pour forcer toutes les queries à utiliser le Workload scheduling. #75999 (Sergei Trifonov). - Ne pas réécrire les subcolumns en
getSubcolumndansARRAY JOINsi 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
/binarydu 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 versfloat64). #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ùxest 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 SELECTvia 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_errorlorsque 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_privilegesetmissing_privilegesdansquery_logpour 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...pourdatabase_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,MapetNullable(..)avec le paramètreoptimize_function_to_subcolumnsactivé. Auparavant, les indexes de ces colonnes pouvaient être ignorés. #75081 (Anton Popov). - Désactivez
flatten_nestedlors 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
BFloat16comme 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
HAVINGest 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
icebergS3eticebergAzure. #75378 (Kseniia Sumarokova). - La FUNCTION
TRIMavec 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 sizeslorsque 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_errorslorsqu’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
MergeTreeaprès plusieurs requêtesRENAMEasynchrones (avecalter_sync = 0) entre des colonnes de types différents. #75693 (Anton Popov). - Corrige l’erreur
Block structure mismatch in QueryPipeline streampour certaines requêtes avecUNION 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_DATAlors 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 JOINpour 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-bridgepermet 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,
JSONEachRowde 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èquePoco::JSONcohé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ètreenable_job_stack_tracen’é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 RENAMEnécessitait le privilègeCREATE USER. Clôt #74372. #76241 (pufit). - Correction de
reinterpretAsavecFixedStringsur 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
ALTERavec la base de données Memory. #76359 (Azat Khuzhin). - Correction d’une erreur logique dans l’analyse des index si la condition dans
WHEREutilise la fonctionpointInPolygon. #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-configpour récupérer les valeurs deusers.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
Mergeunifieront 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éfinissezmerge_table_max_tables_to_look_for_schema_inferencesur1oucompatibilitysur24.12ou 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.
DateTimedevientDateTime64(3)(au lieu deUInt32) ; le paramètreoutput_format_parquet_datetime_as_uint32permet de rétablir l’ancien comportement.DatedevientDate32(au lieu deUInt16). #70950 (Michael Kolupaev). - Les types non comparables (comme
JSON/Object/AggregateFunction) ne sont plus autorisés par défaut dansORDER BYni dans les fonctions de comparaisonless/greater/equal/etc. #73276 (Pavel Kruglov). - Le moteur de base de données obsolète
MaterializedMySQLa été supprimé et n’est plus disponible. #73879 (Alexey Milovidov). - La source de dictionnaire
mysqln’exécute plus la requêteSHOW 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 TABLEnécessitent désormais un privilègeCHECKdistinct. Dans les versions précédentes, il suffisait d’avoir le privilègeSHOW TABLESpour exécuter ces requêtes. Or, une requêteCHECK TABLEpeut être lourde, et les limites habituelles de complexité des requêtesSELECTne 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ètreh3togeo_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_integrationsur 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ètreapply_mutations_on_fly. #74877 (Anton Popov). - Implémentation du partition pruning des tables
Icebergpour 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_FLOATdepuisApache Arrow/Parquet/ORC(elles sont lues enFloat32). 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_logcontiendra deux nouvelles colonnes,symbolsetlines, 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 serveursymbolizedanstrace_loget 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 queryNpour 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_sizeetskipping_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) etadd_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_numberetscript_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 valeursDateTime64, ainsi qu’entre des valeursDateTime. #74482 (Li Yin).
Fonctionnalités expérimentales
- Le type de données
BFloat16est prêt pour une utilisation en production. #73840 (Alexey Milovidov).
Amélioration des performances
- Fonction
indexHintoptimisée. Désormais, les colonnes utilisées uniquement comme arguments de la fonctionindexHintne sont plus lues depuis la table. #74314 (Anton Popov). Si la fonctionindexHintest 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_rowspour l’algorithme de JOINparallel_hash. Cela permet d’éviter une consommation mémoire plus élevée qu’avec l’algorithmehash. #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_insertest activé. Cela permet d’utiliser plusieurs optimisations de requêtes avecFINALpour 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 à
arrayROCAUCetarrayAUCPRde 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
maskedExecuteaux 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/FileLogafin 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 (viaALTER 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’à
1000parallel 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_partitioningpar 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_printpour 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-clientetclickhouse-localdé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_toetoutput_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
Prettyplus 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ètresoutput_format_pretty_squash_consecutive_ms(50 ms par défaut) etoutput_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
Verticalsi la sortie est destinée à un terminal. Cela peut être désactivé avec le paramètreoutput_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
JSONEachRowWithProgressinclura des événements avec des métadonnées, ainsi que les totaux et les extrêmes. Il inclut égalementrows_before_limit_at_leastetrows_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ètreinteractive_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_secondsetmin_age_to_force_merge_on_partition_onlysont 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
orcavec un fuseau horaire personnalisé, au lieu d’utiliser systématiquement le fuseau horaireGMT. #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
namepourmetricàsystem.asynchronous_metrics. #71164 (megao). - Historiquement, pour une raison quelconque, la query
ALTER TABLE MOVE PARTITION TO TABLEvérifiait les droitsSELECTetALTER DELETEau 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 siSELECTetALTER DELETEsont 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_ROLEde 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_sortdé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 quemax_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_loadetwait_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êtesBACKUP/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 fonctionsleastetgreatesttraitent les argumentsNULLen renvoyant systématiquementNULL(sitrue) ou en les ignorant (sifalse). #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 desystem.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-diskssignalé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_levelpour la sortie Parquet. #73651 (Arthur Passos). - Ajoute la lecture de
fixed_size_listd’Apache Arrow comme unArrayau 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) etNull(ne conserve les backups nulle part), pour les tests. #73690 (Vitaly Baranov). concurrent_threads_soft_limit_numetconcurrent_threads_soft_limit_num_ratio_to_corespeuvent ê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 fonctionsformatReadable. #73765 (Raúl Marín). - Prend en charge TLS pour la compatibilité avec le wire protocol de Postgres. #73812 (scanhex12).
- La fonction
isIPv4Stringrenvoyait 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_opearatorspour valider les littéraux enum dans des operators commeINetNOT INpar 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 'X': 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 étapesReadFromParallelRemote*. #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_engineaprè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 = 1etallow_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éFORCEcomme alternative au mot-clé existantFINAL. #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-shiftedfonctionne 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
RESTOREsur 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_addressest défini : auparavant, le port du proxy était utilisé à tort. Ajout de la fonctioncurrentQueryID(). #73095 (Yakov Olkhovskiy). - Propage les paramètres de format à NativeWriter dans TCPHandler, afin que des paramètres comme
output_format_native_write_json_as_stringsoient 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é
%fde la fonctionformatDateTimegénère désormais systématiquement six chiffres (fractions de seconde). Cela rend le comportement compatible avec la fonction MySQLDATE_FORMAT. Le comportement précédent peut être restauré à l’aide du paramètreformatdatetime_f_prints_scale_number_of_digits = 1. #73324 (ollidraese). - Correction du filtrage sur la colonne
_etaglors de la lecture depuis le stockages3et la fonction de table. #73353 (Anton Popov). - Correction de l’erreur
Not-ready Set is passed as the second argument for function 'in'lorsqueIN (subquery)est utilisé dans une expressionJOIN 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
tupleElementpouvant apparaître, dans certains cas, pour des tuples avec des élémentsLowCardinalityet le paramètreoptimize_functions_to_subcolumnsactivé. #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 SYNTAXafin 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_BLOCKdans les requêtes avecFINALetSAMPLE. Correction d’un résultat incorrect dans les requêtesSELECTavecFINALsurCollapsingMergeTreeet activation des optimisations deFINAL. #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.txtlors 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 unMapsans 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
anyetanyLastavec 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
Loopcomme moteur de table dansCREATE 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) pourRESTOREà 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
EXCEPTouINTERSECT, afin de préserver le résultat correct de la requête. Corrige #73930. Corrige #66465. #74577 (Dmitry Novik). - Corrige les requêtes
INSERT SELECTentre des tables avec des colonnesTupleet la sérialisation sparse activée. #74698 (Anton Popov). - La fonction
rightfonctionne 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
hasColumnInTablene 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
- Le script d’installation universel proposera l’installation même sur macOS. #74339 (Alexey Milovidov).