Passer au contenu principal

Changements incompatibles avec les versions antérieures

Modifications du format des données et du schéma

  • La valeur par défaut du paramètre schema_inference_make_columns_nullable a été modifiée pour tenir compte des informations de Nullable des colonnes présentes dans les métadonnées Parquet/ORC/Arrow, au lieu de tout rendre Nullable. Aucun changement pour les formats texte. #71499 (Michael Kolupaev).

Modifications des requêtes et des fonctions

  • Le cache de résultats de requête ignore désormais le paramètre log_comment, de sorte qu’une modification du seul log_comment d’une requête ne provoque plus de cache miss. Il est possible que certains utilisateurs segmentaient volontairement leur cache en faisant varier log_comment. Cette modification change ce comportement et n’est donc pas rétrocompatible. Veuillez utiliser le paramètre query_cache_tag à cette fin. #79878 (filimonov).
  • Dans les versions précédentes, les requêtes contenant 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. Closes #81601. Closes #81977. Closes #82834. Closes #82835. Les requêtes EXPLAIN SYNTAX ne formateront pas les opérateurs ; ce nouveau comportement reflète mieux l’objectif de l’explication de la syntaxe. clickhouse-format, formatQuery et les outils similaires ne formateront pas les fonctions comme des opérateurs si la requête les contenait sous forme fonctionnelle. #82825 (Alexey Milovidov).
  • Désactivation des opérations binaires dénuées de sens avec IPv4/IPv6 : l’addition / soustraction entre une IPv4/IPv6 et un type non entier est désactivée. Auparavant, les opérations avec des types flottants étaient autorisées, et certains autres types (comme DateTime) provoquaient des erreurs logiques. #86336 (Raúl Marín).
  • Les fonctions searchAny et searchAll ont été renommées en hasAnyTokens et hasAllTokens pour une meilleure cohérence avec la fonction existante hasToken. #88109 (Robert Schulze).

Changements de type de données

  • Interdiction d’utiliser le type Dynamic dans les clés de JOIN. Cela peut entraîner des résultats inattendus lorsque le type Dynamic est comparé à un type non Dynamic. Il est préférable de convertir une colonne Dynamic vers le type requis. #86358 (Pavel Kruglov).

Changements liés au stockage et aux index

  • Le paramètre allow_dynamic_metadata_for_data_lakes est désormais obsolète. Désormais, toutes les tables Iceberg tentent de récupérer le schéma de table le plus à jour depuis le stockage avant d’exécuter chaque requête. #86366 (Daniil Ivanik).
  • L’index de texte inversé a été entièrement repensé pour pouvoir passer à l’échelle sur des ensembles de données qui ne tiennent pas en RAM. #86485 (Anton Popov).
  • Le paramètre serveur storage_metadata_write_full_object_key est désormais activé par défaut et ne peut plus être désactivé. #87335 (Sema Checherinda).
  • Suppression de cache_hits_threshold du cache du système de fichiers. cache_hits_threshold a été ajouté avant l’introduction de la policy de cache SLRU, et il n’est pas nécessaire de prendre en charge les deux. #88344 (Kseniia Sumarokova).

Modifications des paramètres et de la configuration

  • Réduction de replicated_deduplication_window_seconds d’une semaine à une heure afin de stocker moins de znodes dans ZooKeeper lorsque le taux d’insertion est faible. #87414 (Sema Checherinda).
  • Le paramètre query_plan_use_new_logical_join_step est renommé en query_plan_use_logical_join_step. #87679 (Vladimir Cherkasov).
  • La nouvelle syntaxe permet au paramètre du tokenizer d’être plus expressif. #87997 (Elmi Ahmadov).
  • Deux légères modifications du fonctionnement des paramètres min_free_disk_ratio_to_perform_insert et min_free_disk_bytes_to_perform_insert : utiliser les octets non réservés plutôt que les octets disponibles pour déterminer si une insertion doit être rejetée. Ce n’est probablement pas crucial si les réservations pour les fusions en arrière-plan et les mutations 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 toujours que des tables comme query_log continuent d’être mises à jour. Cela aide beaucoup pour le débogage. Les données écrites dans les tables système sont généralement faibles par rapport aux données réelles, elles devraient donc pouvoir continuer beaucoup plus longtemps avec un seuil min_free_disk_ratio_to_perform_insert raisonnable. #88468 (c-end).

Changements de Keeper

  • Activation du mode asynchrone pour la réplication interne de Keeper. Keeper conservera le même comportement qu’auparavant, avec d’éventuels gains de performances. Si vous effectuez une mise à jour depuis une version antérieure à 23.9, vous devez soit d’abord passer à la version 23.9+, puis à 25.10+, soit définir keeper_server.coordination_settings.async_replication sur 0 avant la mise à jour et l’activer une fois celle-ci terminée. #88515 (Antonio Andelic).

Nouvelles fonctionnalités

Fonctions

  • Ajout de la fonction naiveBayesClassifier pour classer du texte à l’aide de Naive Bayes à partir de ngrams. #78700 (Nihal Z. Miaji).
  • Ajout de la fonction arrayExcept, qui soustrait un Array d’un autre en tant que Set. #82368 (Joanna Hulboj).
  • Nouvelle fonction conv permettant de convertir des nombres entre différentes bases, avec prise en charge actuelle des bases de 2 à 36. #83058 (hp).
  • Ajout de la fonction d’agrégation studentTTestOneSample. #85436 (Dylan).
  • Ajout de la fonction isValidASCII pour vérifier si une chaîne contient uniquement des caractères ASCII. Clôture de #85377. #85786 (rajat mohan).
  • Fonctions d’agrégation timeSeriesChangesToGrid et timeSeriesResetsToGrid. Elles se comportent de manière similaire à timeSeriesRateToGrid, en acceptant des paramètres pour le timestamp de début, le timestamp de fin, le step et la window de rétrospection, ainsi que deux arguments pour les timestamps et les values, mais en exigeant au moins 1 sample par window au lieu de 2. Elles calculent changes/resets en PromQL, en comptant le nombre de fois où la valeur de l’échantillon change ou diminue dans la window spécifiée pour chaque timestamp de la grille temporelle définie par les paramètres. Le return type est Array(Nullable(Float64)). #86010 (Stephen Chi).
  • Fonction d’agrégation quantilePrometheusHistogram, qui accepte comme arguments les bornes supérieures et les valeurs cumulatives des buckets de l’histogramme, et effectue une linear interpolation entre les bornes supérieure et inférieure du bucket dans lequel se trouve la position du quantile. Elle se comporte de manière similaire à la fonction PromQL histogram_quantile() sur les histogrammes classiques. #86294 (Stephen Chi).
  • Ajout de variantes optimisées insensibles à la casse des fonctions startsWith et endsWith : startsWithCaseInsensitive, endsWithCaseInsensitive, startsWithCaseInsensitiveUTF8 et endsWithCaseInsensitiveUTF8. #87374 (Guang Zhao).

Tables système

  • Ajout d’une nouvelle table système database_replicas contenant des informations sur les répliques de base de données. #83408 (Konstantin Morozov).
  • Ajout 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 écrites périodiquement sur disque. #85102 (Miсhael Stetsyuk).
  • Ajout de la table système iceberg_metadata_log pour récupérer les fichiers de métadonnées Iceberg lors des instructions SELECT. #86152 (scanhex12).
  • Ajout d’avertissements concernant le CPU et la mémoire dans la table system.warnings. #86838 (Bharat Nallan).
  • Table système pour les fichiers de métadonnées delta lake. #87263 (scanhex12).

Moteurs de table et stockage

  • Prise en charge du moteur de table Alias. #76569 (RinChanNOW).
  • Vous pouvez désormais utiliser NATS JetStream pour consommer des messages en définissant les nouveaux paramètres nats_stream et nats_consumer pour le moteur NATS. #84799 (Dmitry Novikov).
  • Tables Iceberg et delta lake avec configuration de disque. Cela permet de définir des tables utilisateur sur un disque existant. Ajout du paramètre allowed_disks_for_table_engines, qui permet d’utiliser des disques spécifiques pour Iceberg. Example : CREATE TABLE test ENGINE = Iceberg('path/inside/disk') SETTING datalake_disk_name = '<some_user_disk>'; ### Entrée de documentation pour les changements visibles par les utilisateurs. #86778 (scanhex12).
  • Ajout d’un nouveau paramètre de table, min_level_for_wide_part, qui permet de spécifier le niveau minimum à partir duquel une part est créée au format wide part. #88179 (Christoph Wurm).

Iceberg et les data lakes

  • 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 data lake de Paimon. #84423 (JIaQi).
  • ALTER UPDATE pour le moteur de table Iceberg. #86059 (scanhex12).

Index et statistiques

  • Nouvel index de type bloom filter sparse_gram, utile pour rechercher de longues sous-chaînes. #79985 (scanhex12).
  • Ajout de la possibilité de créer automatiquement des statistiques sur toutes les colonnes adaptées des tables MergeTree. Ajout du paramètre de table auto_statistics_types, qui stocke les types de statistiques à créer, séparés par des virgules (par exemple, auto_statistics_types = 'minmax, uniq, countmin'). #87241 (Anton Popov).

Fonctionnalités SQL et de requête

  • Ajout de la prise en charge de la syntaxe LIMIT BY ALL. Comme GROUP BY ALL et ORDER BY ALL, LIMIT BY ALL se développe automatiquement pour utiliser toutes les expressions non agrégées de la clause SELECT comme clés de LIMIT BY. Par exemple, SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALL est équivalent à SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name. Cette fonctionnalité simplifie les requêtes lorsque vous souhaitez appliquer LIMIT BY à toutes les colonnes non agrégées sélectionnées sans avoir à les énumérer explicitement. Ferme #59152. #84079 (Surya Kant Ranjan).
  • Un nom de paramètre utilisé seul dans les paramètres de requête est désormais interprété comme étant égal à 1 (par ex. SELECT ... SETTINGS use_query_cache est équivalent à use_query_cache = 1). #85800 (thraeka).
  • Permet aux utilisateurs de créer des vues temporaires avec la même syntaxe que les tables temporaires. #86432 (Aly Kafoury).
  • Ajout de la prise en charge des valeurs négatives pour LIMIT et OFFSET. Ferme #28913. #88411 (Nihal Z. Miaji).

Fonctionnalités du client et de la CLI

  • Accès aux instances ClickHouse Cloud à l’aide des identifiants Cloud avec --login. #82753 (Krishna Mannem).
  • Ajout de l’option --semicolons_inline pour formater les requêtes afin que les points-virgules soient placés sur la dernière ligne plutôt que sur une nouvelle ligne. #88018 (Jan Rada).

Configuration du serveur et gestion des workloads

  • Nouvelles options de configuration : logger.startupLevel et logger.shutdownLevel permettent de surcharger le niveau de journalisation lors du démarrage et de l’arrêt de ClickHouse, respectivement. #85967 (Lennard Eijsackers).
  • Ajoute un moyen de définir des définitions WORKLOAD et RESOURCE en SQL à l’aide de la section “resources_and_workloads” de la configuration du serveur. #87430 (Sergei Trifonov).

Commandes SYSTEM

Keeper

  • Ajout des variantes récursives des commandes cp-cpr et mv-mvr dans le client Keeper. #88570 (Mikhail Artemenko).

Fonctionnalités expérimentales

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

Améliorations des performances

Exécution et optimisation des requêtes

  • Amélioration des performances des requêtes grâce à la refonte de l’ordre et de 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 de filtrage sont désormais réinjectés dans le QCC. Cela accélère considérablement les requêtes pour lesquelles 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).
  • Compression des logs et des profile events dans le protocole natif. Sur les clusters de plus de 100 répliques, les profile events non compressés représentent 1..10 MB/sec, et la barre de progression manque de réactivité sur les connexions Internet lentes. Cela corrige #82533. #83586 (Alexey Milovidov).
  • Améliore l’optimisation de PREWHERE pour des conditions telles que func(primary_column) = 'xx' et column in (xxx). #85529 (李扬).
  • Évite un balayage complet de system.tables lors d’un filtrage sur uuid (peut être utile si vous ne disposez que de l’UUID provenant des logs ou du chemin ZooKeeper). #88379 (Azat Khuzhin).

Optimisations des JOIN

  • Introduit une logique de descente des prédicats disjonctifs de JOIN. Exemple : dans TPC-H Q7, pour une condition sur 2 tables n1 et n2 telle que (n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE'), des filtres partiels distincts sont extraits pour chaque table : n1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY' pour n1 et n2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE' pour n2. #84735 (Yarik Briukhovetskyi).
  • Réécriture des JOIN implémentée : 1. Conversion de LEFT ANY JOIN et RIGHT ANY JOIN en JOIN SEMI/ANTI si la condition de filtre est toujours fausse pour les lignes correspondantes ou non correspondantes. Cette optimisation est contrôlée par un nouveau paramètre query_plan_convert_any_join_to_semi_or_anti_join. 2. Conversion de FULL ALL JOIN en JOIN LEFT ALL ou RIGHT ALL si la condition de filtre est toujours fausse pour les lignes non correspondantes d’un côté. #86028 (Dmitry Novik).
  • Les performances de HashJoin ont été légèrement optimisées dans le cas d’un JOIN LEFT/RIGHT comportant beaucoup de lignes sans correspondance. #86312 (Nikita Taranov).
  • Le réordonnancement des JOIN utilise désormais des statistiques. La fonctionnalité peut être activée en définissant allow_statistics_optimize = 1 et query_plan_optimize_join_order_limit = 10. #86822 (Han Fei).
  • Le recalcul des statistiques de hash table à l’exécution est désormais ignoré pendant l’optimisation des JOIN. Nouveaux événements de profil ajoutés : JoinOptimizeMicroseconds et QueryPlanOptimizeMicroseconds. #87683 (Vladimir Cherkasov).
  • AddedColumns::appendFromBlock a été intégré en ligne afin d’améliorer légèrement les performances des JOIN dans certains cas. #88455 (Nikita Taranov).

Optimisations des chaînes de caractères et des fonctions

  • Améliore les performances de la recherche de chaînes respectant la casse (opérations comme le filtrage, par exemple WHERE URL LIKE '%google%') grâce à la bibliothèque StringZilla, en utilisant des instructions SIMD du CPU lorsqu’elles sont disponibles. #84161 (Raúl Marín).
  • Améliore les performances de LIKE avec un préfixe ou un suffixe grâce au nouveau paramètre par défaut optimize_rewrite_like_perfect_affix. #85920 (Guang Zhao).
  • Améliore les performances des fonctions tokens, hasAllTokens, hasAnyTokens. #88416 (Anton Popov).

Optimisations de MergeTree et du stockage

  • Ajout d’une sérialisation optionnelle de la sous-colonne .size pour les colonnes String de premier niveau dans les tables MergeTree afin d’améliorer la Compression et de permettre un accès efficace aux sous-colonnes. Introduction de nouveaux paramètres MergeTree pour le contrôle de la version de sérialisation et l’optimisation des expressions pour les chaînes vides. #82850 (Amos Bird).
  • Réduction de l’allocation et de la copie de mémoire lors d’un SELECT sur une table AggregatingMergeTree avec FINAL lorsque la table comporte des colonnes de type SimpleAggregateFunction(anyLast). #84428 (Duc Canh Le).
  • Amélioration des performances des vertical merges après l’exécution d’un lightweight delete. #86169 (Anton Popov).
  • Amélioration des performances des requêtes rapides comportant de nombreuses parts dans la table (grâce à l’optimisation de MarkRanges en utilisant devector au lieu de deque). #86933 (Azat Khuzhin).
  • Amélioration des performances de l’application des patch parts en mode join. #87094 (Anton Popov).
  • Active l’enregistrement des marks dans le cache et évite les IO directs pour le lecteur MergeTreeLazy. #87989 (Nikita Taranov).
  • Une requête SELECT avec la clause FINAL sur une table ReplacingMergeTree avec la colonne is_deleted s’exécute désormais plus rapidement grâce à une meilleure parallélisation issue de 2 optimisations existantes : 1) l’optimisation do_not_merge_across_partitions_select_final pour les partitions de la table qui n’ont qu’une seule part 2) le découpage des autres ranges sélectionnées de la table en intersecting / non-intersecting, et seules les ranges intersecting doivent passer par la transformation de fusion FINAL. #88090 (Shankar Iyer).

Optimisations de l’agrégation et de GROUP BY

Optimisations des index et de la recherche textuelle

  • Amélioration des performances de création d’un index textuel pour les documents contenant majoritairement des tokens peu fréquents. #87546 (Anton Popov).

Optimisations du data lake

Optimisations internes

Améliorations

Optimisation et exécution des requêtes

  • mannWhitneyUTest ne lève plus d’exception lorsque les deux échantillons contiennent uniquement des valeurs identiques. Renvoie désormais un résultat valide, conforme à SciPy. Cela clôture : #79814. #80009 (DeanNeaht).
  • Ajout d’une optimisation expérimentale de l’ordre des jointures, capable de réordonner automatiquement les JOIN afin d’améliorer les performances (contrôlée par le paramètre query_plan_optimize_join_order_limit). Notez que l’optimisation de l’ordre des jointures offre actuellement une prise en charge limitée des statistiques et s’appuie principalement sur des estimations du nombre de lignes fournies par les moteurs de stockage ; une collecte de statistiques plus avancée ainsi qu’une meilleure estimation de la cardinalité seront ajoutées dans de futures versions. Si vous rencontrez des problèmes avec des requêtes JOIN après une mise à niveau, vous pouvez temporairement désactiver la nouvelle implémentation en définissant SET query_plan_use_new_logical_join_step = 0 et signaler le problème pour investigation. Note concernant la résolution des identifiants de la clause USING : la résolution de la colonne coalescée de la clause OUTER JOIN ... USING a été modifiée pour gagner en cohérence : auparavant, lors de la sélection simultanée de la colonne USING et de colonnes qualifiées (a, t1.a, t2.a) dans un OUTER JOIN, la colonne USING était incorrectement résolue en t1.a, 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é). #80848 (Vladimir Cherkasov).
  • Prise en charge du filtrage des data parts à l’aide de skip indexes pendant 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 certains éléments de base communs partagés avec #81021. #81526 (Amos Bird).
  • 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).
  • Rend la stratégie de nouvelle tentative S3 configurable et permet le rechargement à chaud des paramètres du S3 disk en cas de modification du fichier XML de configuration. #82642 (RinChanNOW).
  • Correction du passage d’optimisation pour une expression d’égalité redondante lorsque la LowCardinality du type résultant diffère avant et après optimisation. #82651 (Yakov Olkhovskiy).
  • Une colonne spéciale peut être utilisée pour indiquer la présence d’une partie d’un oneof. #82885 (Ilya Golshtein).
  • Les utilisateurs reçoivent désormais des instructions plus claires lorsque des paramètres incorrects sont spécifiés pour le nouveau Kafka table engine. #83701 (János Benjamin Antal).
  • Lorsque des clients HTTP définissent l’en-tête X-ClickHouse-100-Continue: defer en plus de Expect: 100-continue, ClickHouse n’envoie pas de réponse 100 Continue au client tant que la validation du quota n’a pas abouti, ce qui évite de gaspiller de la bande passante réseau en transmettant des corps de requête qui seront de toute façon rejetés. Cela concerne les requêtes INSERT, où la requête peut être envoyée dans la chaîne de requête de l’URL et les données dans le corps de la requête. L’abandon d’une requête sans envoyer l’intégralité du corps empêche la réutilisation de la connexion avec HTTP/1.1, mais la latence supplémentaire liée à 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).
  • Il n’est plus possible de spécifier de fuseaux horaires pour le type Time. #84689 (Yarik Briukhovetskyi).
  • L’autocomplétion du client est plus rapide et plus cohérente grâce à l’utilisation de system.completions au lieu d’exécuter plusieurs requêtes sur les tables système. #84694 (|2ustam).
  • Simplification (et correction de certains bugs) d’une logique liée à l’analyse de Time[64] dans un format best_effort. #84730 (Yarik Briukhovetskyi).
  • Accélération de 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 avantageux 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).
  • Vous pouvez utiliser des paramètres de requête après TO lors de la création d’une vue matérialisée, par exemple : CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_table. #84899 (Diskein).
  • Masquage des informations d’authentification S3 dans les logs lors de l’utilisation de DATABASE ENGINE = Backup avec le stockage S3. #85336 (Kenny Sun).
  • Mise à jour de jemalloc vers une version plus récente. Amélioration du profilage des allocations à partir des outils internes de jemalloc. Le profiler jemalloc global peut désormais être activé avec la config jemalloc_enable_global_profiler. Les allocations et désallocations globales échantillonnées peuvent être stockées dans system.trace_log sous le type JemallocSample en activant la config jemalloc_collect_global_profile_samples_in_trace_log. Le profilage jemalloc peut désormais être activé indépendamment pour chaque query à l’aide du setting jemalloc_enable_profiler. Le stockage des samples dans system.trace_log peut être contrôlé pour chaque query à l’aide du setting jemalloc_collect_profile_samples_in_trace_log. #85438 (Antonio Andelic).
  • Ajout de la fonction deltaLakeAzureCluster (similaire à deltaLakeAzure pour un cluster) et de la fonction deltaLakeS3Cluster (alias de deltaLakeCluster). Résout #85358. #85547 (Smita Kulkarni).
  • Renommer InterpreterSystemQuery::dropReplicaImpl en InterpreterSystemQuery::dropStorageReplica - Dans InterpreterSystemQuery::dropDatabaseReplica : - Lors de la suppression d’une base de données ou de la réplique entière : cela supprime également la réplique de chaque table de la base de données - Si ‘WITH TABLES’ est spécifié, supprimer la réplique pour chaque stockage - Sinon, la logique reste inchangée : appeler uniquement DatabaseReplicated::dropReplica sur les bases de données - Lors de la suppression d’une réplique de base de données avec le chemin Keeper : - Si ‘WITH TABLES’ est spécifié : - Restaurer la base de données en Atomic - Restaurer les tables RMT à partir de l’instruction présente dans Keeper - Supprimer la base de données (les tables restaurées sont également supprimées) - Sinon, appeler uniquement DatabaseReplicated::dropReplica sur le chemin Keeper fourni. #85637 (Tuan Pham Anh).
  • Correction du formatage incohérent de TTL lorsqu’il contient une fonction materialize. Clôt #82828. #85749 (Alexey Milovidov).
  • Appliquer le paramètre azure_max_single_part_copy_size aux opérations de copie normales de la même manière que pour les sauvegardes. #85767 (Ilya Golshtein).
  • Ralentir les threads du client S3 en cas d’erreurs réessayables dans le stockage objet S3. Cela étend le paramètre précédent backup_slow_all_threads_after_retryable_s3_error aux disques S3 et le renomme en s3_slow_all_threads_after_retryable_error, plus générique. #85918 (Julia Kartseva).
  • Marquer 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).
  • Amélioration du moteur de table S3(Azure)Queue pour lui permettre de survivre à une perte de connexion à ZooKeeper sans doublons potentiels. Nécessite d’activer le paramètre S3Queue use_persistent_processing_nodes (modifiable via ALTER TABLE MODIFY SETTING). #85995 (Kseniia Sumarokova).
  • L’état de la table Iceberg n’est plus stocké dans un objet de stockage. Cela devrait rendre Iceberg dans ClickHouse utilisable avec des requêtes concurrentes. #86062 (Daniil Ivanik).
  • 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 moins bon taux de succès du cache. #86076 (zhongyuankai).
  • Prise en charge du filtrage par chaîne d’URL complète (directive full_url) dans http_handlers (y compris le schéma et host:port). #86155 (Azat Khuzhin).
  • Ajout du paramètre expérimental allow_experimental_delta_lake_writes pour la fonctionnalité d’écriture Delta Lake, désactivé par défaut. #86180 (Kseniia Sumarokova).
  • Correction de la détection de systemd dans le script init.d (corrige la vérification “Install packages”). #86187 (Azat Khuzhin).
  • Ajoute une nouvelle métrique dimensionnelle startup_scripts_failure_reason. Cette métrique est nécessaire pour distinguer les différents types d’erreurs qui provoquent l’échec des scripts de démarrage. En particulier, à des fins d’alerte, il faut distinguer les erreurs transitoires (par exemple, MEMORY_LIMIT_EXCEEDED ou KEEPER_EXCEPTION) des erreurs non transitoires. #86202 (Miсhael Stetsyuk).
  • Prise en charge de plusieurs fichiers de données dans les écritures Iceberg. #86275 (scanhex12).
  • Prise en charge d’un plus grand nombre de types pour les partitions dans les écritures Iceberg. Ceci clôt #86206. #86298 (scanhex12).
  • Permet d’omettre la fonction identity() pour la partition d’une table Iceberg. #86314 (scanhex12).
  • Ajoute la possibilité d’activer la journalisation JSON uniquement pour un canal spécifique. Pour cela, définissez logger.formatting.channel sur l’une des valeurs syslog/console/errorlog/log. #86331 (Azat Khuzhin).
  • Ajoute une limite de lignes/octets pour les fichiers de données insérés dans Delta Lake. Contrôlé par les settings delta_lake_insert_max_rows_in_data_file et delta_lake_insert_max_bytes_in_data_file. #86357 (Kseniia Sumarokova).
  • Permet d’utiliser des nombres natifs dans WHERE. Ils peuvent déjà être utilisés comme arguments de fonctions logiques. Cela simplifie les optimisations de filter pushdown et de déplacement vers PREWHERE. #86390 (Nikolai Kochetov).
  • Corrige une erreur lors de l’exécution de SYSTEM DROP REPLICA sur un Catalog avec des métadonnées corrompues. #86391 (Nikita Mikhaylov).
  • Ajoute des retries supplémentaires pour la vérification de l’accès au disk (skip_access_check=0) dans Azure, car le provisionnement de l’accès peut prendre un certain temps. #86419 (Alexander Tokmakov).
  • Renomme le setting evaluation_time en promql_evaluation_time. #86459 (Vitaly Baranov).
  • Ajoute un setting permettant de supprimer les fichiers lors d’un drop Iceberg. Ceci clôt #86211. #86501 (scanhex12).
  • Réduit l’utilisation mémoire dans les écritures Iceberg. #86544 (scanhex12).
  • Rend la fonction today() insensible à la casse afin d’être cohérente avec d’autres fonctions liées à la date et à l’heure, comme NOW(). #86561 (Kaviraj Kanagaraj).
  • Rend la fenêtre de staleness des fonctions timeSeries*() ouverte à gauche et fermée à droite. #86588 (Vitaly Baranov).
  • Ajoute les profile events FailedInternal*Query. #86627 (Shane Andrade).
  • Rendre persistant le verrou de bucket en mode ordered de S3Queue, comme pour les processing nodes lorsque use_persistent_processing_nodes = 1. Ajouter une injection de panne Keeper dans les tests. #86628 (Kseniia Sumarokova).
  • Corriger la gestion des utilisateurs dont le nom contient un point lorsqu’ils sont ajoutés via le fichier de configuration. #86633 (Mikhail Koviazin).
  • Ajouter une métrique asynchrone pour l’utilisation de la mémoire dans les queries (QueriesMemoryUsage et QueriesPeakMemoryUsage). #86669 (Azat Khuzhin).
  • Vous pouvez utiliser l’option clickhouse-benchmark --precise pour un reporting 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 queries est comparable à l’intervalle de reporting --delay D. #86684 (Sergei Trifonov).
  • Rendre configurables les valeurs nice des threads Linux afin d’attribuer à certains threads (merge/mutate, query, materialized view, client ZooKeeper) des priorités plus élevées ou plus faibles. #86703 (Miсhael Stetsyuk).
  • Corriger l’error trompeuse « specified upload does not exist », qui se produit lorsque l’exception d’origine est perdue lors d’un multipart upload en raison d’une race condition. #86725 (Julia Kartseva).
  • Limiter la description du query plan dans la query EXPLAIN. Ne pas calculer la description pour les queries autres que EXPLAIN. Ajouter un setting query_plan_max_step_description_length. #86741 (Nikolai Kochetov).
  • Ajouter la possibilité d’ajuster les signaux en attente afin de tenter de contourner CANNOT_CREATE_TIMER (pour les query profilers, query_profiler_real_time_period_ns/query_profiler_cpu_time_period_ns). Collecter également SigQ depuis /proc/self/status pour l’introspection (si ProcessSignalQueueSize est proche de ProcessSignalQueueLimit, vous obtiendrez probablement des errors CANNOT_CREATE_TIMER). #86760 (Azat Khuzhin).
  • Prise en charge de insert/select Distributed pour les data lakes. #86783 (scanhex12).
  • Améliorer les performances de la requête RemoveRecursive dans Keeper. #86789 (Antonio Andelic).
  • Supprimer les espaces supplémentaires dans PrettyJSONEachRow lors de la sortie du JSON type. #86819 (Pavel Kruglov).
  • Augmenter la fenêtre de deduplication replicated jusqu’à 10000. #86820 (Sema Checherinda).
  • Désormais, écrire les tailles des blobs de prefix.path lors de la suppression du directory pour un disque simple réinscriptible. #86908 (alesapin).
  • Rendre la fonction yesterday() insensible à la casse et cohérente avec la fonction today(). #86914 (Kaviraj Kanagaraj).
  • Prendre en charge les tests de performance .xml 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).
  • Respect des limites mémoire dans certains composants connus pour allouer une quantité importante de mémoire (>16MiB) (tri, async inserts, file log). #87035 (Azat Khuzhin).
  • Empêche des paramètres non booléens de ne pas définir de valeur dans les requêtes. Amélioration de #85800. #87084 (thraeka).
  • Prise en charge des indications pour les noms de format. Ferme #86761. #87092 (flynn).
  • Les répliques distantes ignorent l’analyse du skip index lorsqu’il n’y a pas de projections. #87096 (zoomxi).
  • Lève une exception si le paramètre network_compression_method n’est pas un codec générique pris en charge. #87097 (Robert Schulze).
  • La table système system.query_cache renvoie désormais toutes les entrées du query result cache, alors qu’elle ne renvoyait auparavant que les entrées partagées ou les entrées non partagées du même utilisateur et rôle. Cela est acceptable, car les entrées non partagées sont censées ne pas révéler les résultats de requête, tandis que system.query_cache renvoie des chaînes de requête. Le comportement de la table système se rapproche ainsi de celui de system.query_log. #87104 (Robert Schulze).
  • Ajout de la prise en charge de l’authentification et de SSL dans la table function arrowFlight(). #87120 (Vitaly Baranov).
  • Ajout d’un nouveau paramètre au table engine S3 et à la table function s3, nommé storage_class_name, qui permet de spécifier le tiering intelligent pris en charge par AWS. Pris en charge à la fois au format key-value et au format positionnel (obsolète). #87122 (alesapin).
  • Permet de désactiver l’encodage UTF-8 pour la table ytsaurus. #87150 (MikhailBurdukov).
  • Prise en charge d’Azure pour les disques de data lake. #87173 (scanhex12).
  • Ajout d’un nouveau paramètre de text index dictionary_block_frontcoding_compression pour contrôler la compression du dictionnaire. Par défaut, il est activé afin d’utiliser la compression front-coding. #87175 (Elmi Ahmadov).
  • Active l’évaluation en court-circuit pour la fonction parseDateTime. #87184 (Pavel Kruglov).
  • Prise en charge de alter table ... materialize statistics all, qui matérialise toutes les statistiques d’une table. #87197 (Han Fei).
  • Désactive s3_slow_all_threads_after_retryable_error par défaut. #87198 (Nikita Mikhaylov).
  • Ajoute une nouvelle table system.aggregated_zookeeper_log. Cette table contient des statistiques (p. ex. nombre d’opérations, latence moyenne, erreurs) sur les opérations ZooKeeper, regroupées par identifiant de session, chemin parent et type d’opération, puis périodiquement écrites sur disque. #87208 (Miсhael Stetsyuk).
  • Renomme la table function arrowflight en arrowFlight. #87249 (Vitaly Baranov).
  • Mise à jour de clickhouse-benchmark pour accepter l’utilisation de - à la place de _ dans ses options de CLI. #87251 (Ahmed Gouda).
  • Ajout d’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). Ajout d’un paramètre de table MergeTree pour exclure une liste de skip indexes de la matérialisation pendant le merge (exclude_materialize_skip_indexes_on_merge). #87252 (George Larionov).
  • Rend synchrone le flushing vers system.crash_log lors du traitement des signaux. #87253 (Miсhael Stetsyuk).
  • Ajout d’une nouvelle colonne statistics dans system.parts_columns. #87259 (Han Fei).
  • Ajout du paramètre inject_random_order_for_select_without_order_by, qui injecte ORDER BY rand() dans les requêtes SELECT de premier niveau sans clause ORDER BY. #87261 (Rui Zhang).
  • Prise en charge d’autres formats (ORC, Avro) pour les écritures Iceberg. Cela clôt #86179. #87277 (scanhex12).
  • Améliore le message d’erreur de joinGet afin d’indiquer correctement que le nombre de join_keys n’est pas le même que celui de right_table_keys. #87279 (Isak Ellmer).
  • Regroupe les données de tous les threads avant l’insertion dans les materialized views, en fonction des paramètres min_insert_block_size_rows_for_materialized_views et min_insert_block_size_bytes_for_materialized_views. Auparavant, si parallel_view_processing était activé, chaque thread insérant dans une materialized view donnée regroupait l’insert indépendamment, ce qui pouvait entraîner la génération d’un plus grand nombre de parts. #87280 (Antonio Andelic).
  • Ce patch ajoute la possibilité de vérifier les stat d’un nœud Keeper arbitraire pendant une transaction d’écriture. Cela peut aider à détecter le problème ABA. #87282 (Mikhail Artemenko).
  • Redirige les requêtes ytsaurus lourdes vers des proxys lourds. #87342 (MikhailBurdukov).
  • Ce patch corrige les rollbacks des opérations unlink/rename/removeRecursive/removeDirectory/etc., ainsi que les comptages de hardlinks dans toutes les workloads possibles pour les metadata issues des transactions disque. Il simplifie également les interfaces pour les rendre plus génériques afin qu’elles puissent être réutilisées dans d’autres meta stores. #87358 (Mikhail Artemenko).
  • Ajout du paramètre de configuration keeper_server.tcp_nodelay, qui permet de désactiver TCP_NODELAY pour Keeper. #87363 (Copilot).
  • Prise en charge de --connection dans clickhouse-benchmarks. Comme avec clickhouse-client, vous pouvez spécifier des connections prédéfinies dans le config.xml/config.yaml du client, sous le chemin connections_credentials, afin d’éviter de devoir fournir explicitement l’utilisateur et le mot de passe en arguments de ligne de commande. Ajout également de la prise en charge de --accept-invalid-certificate dans clickhouse-benchmark. #87370 (Azat Khuzhin).
  • Désormais, le paramètre max_insert_threads prendra effet sur les tables Iceberg. #87407 (alesapin).
  • Ajout de métriques d’histogramme et de métriques dimensionnelles à PrometheusMetricsWriter. Ainsi, le handler PrometheusRequestHandler disposera de toutes les métriques essentielles et pourra être utilisé pour une collecte de métriques fiable et à faible surcoût dans le cloud. #87521 (Miсhael Stetsyuk).
  • La fonction hasToken renvoie désormais zéro correspondance pour un token vide (alors qu’auparavant cela déclenchait une exception). #87564 (Jimmy Aguilar Mena).
  • Ajout de la prise en charge de l’index de texte pour les valeurs Array et Map (mapKeys et mapValues). Les fonctions prises en charge sont mapContainsKey et has. #87602 (Elmi Ahmadov).
  • Ajout d’une nouvelle métrique ZooKeeperSessionExpired, qui indique le nombre de sessions globales ZooKeeper expirées. #87613 (Miсhael Stetsyuk).
  • Utilisation du client S3 storage avec des paramètres spécifiques aux sauvegardes (par exemple, backup_slow_all_threads_after_retryable_s3_error) pour la copie côté serveur (native) vers une destination de sauvegarde. Le paramètre s3_slow_all_threads_after_retryable_error devient obsolète. #87660 (Julia Kartseva).
  • Correction de la gestion incorrecte des paramètres max_joined_block_size_rows et max_joined_block_size_bytes lors de la sérialisation du plan de requête avec make_distributed_plan expérimental. #87675 (Vladimir Cherkasov).
  • Le paramètre enable_http_compression est désormais activé par défaut. Cela signifie que si un client accepte la compression HTTP, le serveur l’utilisera. Toutefois, ce changement présente certains inconvénients. Le client peut demander une méthode de compression coûteuse, comme bzip2, ce qui n’est pas raisonnable et augmentera la consommation de ressources du serveur (mais cela ne sera visible que lors du transfert de résultats volumineux). Le client peut demander gzip, ce qui n’est pas si mal, mais reste moins optimal que zstd. Résout #71591. #87703 (Alexey Milovidov).
  • Ajout d’un nouveau paramètre keeper_hosts qui expose la liste des hôtes [Zoo]Keeper auxquels ClickHouse peut se connecter. #87718 (Nikita Mikhaylov).
  • Ajout de ALTER TABLE REWRITE PARTS - réécrit les table parts depuis zéro en utilisant tous les nouveaux paramètres (puisque certains, comme use_const_adaptive_granularity, ne s’appliquent qu’aux nouvelles parts). #87774 (Azat Khuzhin).
  • Ajout des valeurs from et to aux tableaux de bord système afin de faciliter les investigations historiques. #87823 (Mikhail f. Shiryaev).
  • Ajout de davantage d’informations pour le suivi des performances dans les requêtes SELECT sur Iceberg. #87903 (Daniil Ivanik).
  • Ajout du nouveau paramètre joined_block_split_single_row pour réduire l’utilisation mémoire dans les jointures par hachage avec de nombreuses correspondances par clé. Cela permet de découper les résultats de jointure par hachage, même parmi les 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 d’un seul coup en mémoire. Cela réduit le pic d’utilisation mémoire, mais peut augmenter l’utilisation CPU. #87913 (Vladimir Cherkasov).
  • Amélioration du filesystem cache : réutilisation de l’itérateur de priorité du cache entre les threads qui réservent simultanément de l’espace dans le cache. #87914 (Kseniia Sumarokova).
  • Ajout de la possibilité de limiter les requêtes pour Keeper (paramètre max_request_size, identique à jute.maxbuffer pour ZooKeeper, OFF par défaut pour la compatibilité ascendante, sera activé dans les prochaines releases). #87952 (Azat Khuzhin).
  • Correction de clickhouse-benchmark afin de ne pas inclure les stacktraces dans les messages d’erreur par défaut. #87954 (Ahmed Gouda).
  • Évite d’utiliser le thread pool pour le chargement asynchrone des marks (load_marks_asynchronously=1) lorsque les marks sont dans le cache (puisque le pool peut être saturé et que les queries en subiront le coût même si les marks sont déjà dans le cache). #87967 (Azat Khuzhin).
  • Ytsaurus : permet de créer des table, table functions et dictionaries avec un sous-ensemble de columns. #87982 (MikhailBurdukov).
  • Désormais, system.zookeeper_connection_log est activé par défaut et peut être utilisé pour obtenir des informations sur les sessions Keeper. #88011 (János Benjamin Antal).
  • Rend le comportement de TCP et HTTP cohérent lorsque des external tables dupliquées sont transmises. HTTP permet de transmettre une temporary table plusieurs fois. #88032 (Sema Checherinda).
  • Suppression des MemoryPools personnalisés pour la lecture d’Arrow/ORC/Parquet. Ce composant semble inutile depuis https://github.com/ClickHouse/ClickHouse/pull/84082, car nous suivons désormais toutes les allocations dans tous les cas. #88035 (Nikita Mikhaylov).
  • Permet de créer une database Replicated sans arguments. #88044 (Pervakov Grigorii).
  • Ajout de la prise en charge de la connexion au port TLS de ClickHouse Keeper, en conservant des noms de flags identiques à ceux de clickhouse-client. #88065 (Pradeep Chhetri).
  • Ajout d’un nouvel événement de profile pour suivre le nombre de fois où une fusion en arrière-plan a été rejetée en raison d’un dépassement des memory limits. #88084 (Grant Holly).
  • Ajout du parameter facultatif start_value à la function generateSerialID pour spécifier des valeurs de départ personnalisées pour les nouvelles series. #88085 (Manuel).
  • Active l’analyzer pour la validation des expressions par défaut des columns dans CREATE/ALTER TABLE. #88087 (Max Justus Spransy).
  • Amélioration interne de la planification des queries : utilisation de JoinStepLogical pour CROSS JOIN. #88151 (Vladimir Cherkasov).
  • Prise en charge complète de l’operator IS NOT DISTINCT FROM (<=>). #88155 (simonmichal).
  • Active le Profiler global par sampling par défaut : collecte les stacktraces de tous les threads toutes les 10 Seconds de temps CPU et de temps réel. #88209 (Alexander Tokmakov).
  • Correction de la prise en charge des opérations EXCHANGE TABLES sur les tables utilisant le moteur Alias. Le moteur stocke désormais la table cible sous forme de noms de base de données et de table au lieu d’un identifiant de stockage constant, ce qui lui permet de résoudre correctement la cible après un échange de tables. #88233 (Kai Zhu).
  • Ajout du paramètre temporary_files_buffer_size pour contrôler la taille du tampon des processus d’écriture de fichiers temporaires. * Optimisation de la consommation mémoire de l’opération scatter (utilisée, par exemple, dans grace hash join) pour les colonnes LowCardinality. #88237 (Vladimir Cherkasov).
  • Ajout de la prise en charge de la lecture directe depuis les 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).
  • La fonction generateSerialID prend désormais en charge un argument non constant contenant le nom de la série. Clôt #83750. #88270 (Alexey Milovidov).
  • Base de données de catalogues de data lakes pour le traitement distribué. #88273 (scanhex12).
  • Mise à jour de l’azure sdk pour inclure le correctif sur ‘Content-Length’ observé avec les fonctionnalités de copie et de création de conteneur. #88278 (Smita Kulkarni).
  • La fonction lag devient insensible à la casse pour assurer la compatibilité avec MySQL. #88322 (Lonny Kapelushnik).
  • Ajout de 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 seront vérifiées. Sinon, seule l’ACL du nœud parent sera vérifiée. #88513 (Antonio Andelic).
  • Les colonnes JSON sont désormais affichées avec un formatage Pretty lors de l’utilisation du format Vertical. Clôt #81794. #88524 (Frank Rosner).
  • Les fichiers de clickhouse-client (par ex. l’historique des requêtes) sont désormais stockés dans les emplacements décrits par la spécification XDG Base Directories, au lieu de la racine du répertoire personnel. ~/.clickhouse-client-history sera toujours utilisé s’il est déjà présent. #88538 (Konstantin Bogdanov).
  • Correction d’une fuite mémoire due à GLOBAL IN (https://github.com/ClickHouse/ClickHouse/issues/88615). #88617 (pranav mehta).
  • Ajout d’une surcharge à hasAny/hasAllTokens pour accepter une entrée de type chaîne. #88679 (George Larionov).
  • Après ce correctif, l’heuristique 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 large, puis en filtrait le suffixe. Corrige : #85374. #88736 (Mikhail Artemenko).
  • Ajout d’une étape au script de post-installation pour clickhouse-keeper, afin d’activer le démarrage au boot. #88746 (YenchangChan).
  • Vérifier les identifiants dans l’interface web uniquement au moment du collage, plutôt qu’à chaque frappe. Cela évite un problème avec des serveurs LDAP mal configurés. Cela corrige #85777. #88769 (Alexey Milovidov).
  • Limiter la longueur du message d’exception lorsqu’une contrainte est violée. Dans les versions précédentes, il était possible d’obtenir un très long message d’exception lorsqu’une très longue chaîne était insérée, et celui-ci finissait par être écrit dans le query_log. Corrige #87032. #88801 (Alexey Milovidov).

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

  • 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 situations où une requête ALTER déjà commitée pouvait se retrouver 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 même type, tandis que d’autres restent en attente. Évite aussi les deadlocks lorsque des tâches s’attendent mutuellement. Cela est contrôlé par le paramètre serveur background_schedule_pool_max_parallel_tasks_per_type_ratio. #84008 (Alexander Tokmakov).
  • Correction d’un problème avec GeoParquet qui provoquait 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).
  • Arrête correctement les tables lors de la récupération d’une replica de base de données. Un arrêt incorrect pouvait entraîner un LOGICAL_ERROR pour certains moteurs de table pendant la récupération d’une replica 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).
  • Correction de la gestion incorrecte des dates antérieures à l’epoch avec des fractions de seconde dans diverses fonctions liées aux dates et heures, telles que parseDateTime64BestEffort, change{Year,Month,Day} et makeDateTime64. Auparavant, la partie subsecondes était soustraite des secondes au lieu de leur être ajoutée. Par exemple, parseDateTime64BestEffort('1969-01-01 00:00:00.468') renvoyait 1968-12-31 23:59:59.532 au lieu de 1969-01-01 00:00:00.468. #85396 (xiaohuanlin).
    1. LowCardinality pour les colonnes hive 2. Remplir les colonnes hive avant les colonnes virtuelles (nécessaire pour https://github.com/ClickHouse/ClickHouse/pull/81040) 3. LOGICAL_ERROR sur un format vide pour hive #85528 4. Corriger la vérification du cas où 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 de parallel_replicas_cluster avec hive 7. Utiliser un conteneur ordonné dans extractkeyValuePairs pour les utilitaires hive (nécessaire 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 du mapping de tableaux. #85546 (Yakov Olkhovskiy).
  • La correspondance entre les identifiants de source Iceberg et les noms Parquet n’était pas adaptée 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 courant. #85829 (Daniil Ivanik).
  • Corrige la lecture de la taille d’un fichier séparément de son ouverture. En lien avec https://github.com/ClickHouse/ClickHouse/pull/33372, introduite en réponse à un bug dans les noyaux Linux antérieurs à la version 5.10. #85837 (Konstantin Bogdanov).
  • ClickHouse Keeper n’échoue plus au démarrage sur les systèmes où IPv6 est désactivé au niveau du noyau (par exemple, RHEL avec ipv6.disable=1). Il tente désormais de basculer vers 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 répliques parallèles dans globalJoin. #85929 (zoomxi).
  • Corrige un pointeur nul dans OrcSchemaReader::initializeIfNeeded(). Cette PR corrige le problème suivant : #85292. #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 la mise à jour via ALTER d’une colonne dont une sous-colonne est utilisée dans l’expression matérialisée d’une autre colonne. Auparavant, une colonne matérialisée contenant une sous-colonne dans son expression n’était pas correctement mise à jour. #85985 (Pavel Kruglov).
  • Interdit la modification de colonnes dont les sous-colonnes sont utilisées dans la clé primaire ou l’expression de partition. #86005 (Pavel Kruglov).
  • Corrige les commandes ALTER COLUMN IF EXISTS qui échouaient lorsque l’état d’une colonne changeait au sein de la même instruction ALTER. Des commandes comme 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).
  • Corrige la lecture des sous-colonnes avec un mode de mapping de colonnes non par défaut dans le moteur de stockage DeltaLake. #86064 (Kseniia Sumarokova).
  • Corrige l’utilisation de valeurs par défaut incorrectes pour un chemin avec un hint Enum dans JSON. #86065 (Pavel Kruglov).
  • Analyse de l’URL du catalog hive DataLake avec assainissement des entrées. Clôt #86018. #86092 (rajat mohan).
  • Corrige une erreur logique lors du redimensionnement dynamique du filesystem cache. Ferme #86122. Ferme https://github.com/ClickHouse/clickhouse-core-incidents/issues/473. #86130 (Kseniia Sumarokova).
  • Utilise NonZeroUInt64 pour logs_to_keep dans DatabaseReplicatedSettings. #86142 (Tuan Pham Anh).
  • Une Exception était levée par une query FINAL avec skip index si la table (par ex. ReplacingMergeTree) était créée avec le paramètre index_granularity_bytes = 0. Ce problème est désormais corrigé. #86147 (Shankar Iyer).
  • Élimine de l’UB et corrige des problèmes de parsing de l’expression de partition Iceberg. #86166 (Daniil Ivanik).
  • Corrige l’inférence de Date/DateTime/DateTime64 pour les dates hors de la plage prise en charge. #86184 (Pavel Kruglov).
  • Corrige un crash en présence de blocks const et non const dans un même INSERT. #86230 (Azat Khuzhin).
  • Traite par défaut les includes de /etc/metrika.xml lors de la création de disks 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 de ALTER UPDATE Nullable(JSON). #86281 (Pavel Kruglov).
  • Corrige l’absence de la colonne definer 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 dans DeltaLake. Ferme #86175. #86367 (Kseniia Sumarokova).
  • Corrige l’erreur 416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resource lors de la lecture de blobs vides depuis Azure blob storage pour le disk plain_rewritable. #86400 (Julia Kartseva).
  • Corrige GROUP BY Nullable(JSON). #86410 (Pavel Kruglov).
  • Corrige un bug dans les Materialized Views : 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).
  • Échec si toutes les répliques sont indisponibles lors de la lecture depuis les *cluster functions. #86414 (Julian Maicher).
  • Corrige une fuite de MergesMutationsMemoryTracking due aux tables Buffer et corrige query_views_log pour le streaming depuis Kafka (et d’autres sources). #86422 (Azat Khuzhin).
  • Corrige show tables après la suppression de la table de référence du stockage d’alias. #86433 (RinChanNOW).
  • Corrige l’absence d’en-tête de chunk 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 flushes 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 pour é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 PostgreSQL avec des colonnes numériques/décimales. #86480 (Julian Maicher).
  • Corrige l’utilisation de mémoire non initialisée dans getSubcolumnType. #86498 (Raúl Marín).
  • Les fonctions searchAny et searchAll, lorsqu’elles sont appelées avec des motifs de recherche vides, renvoient désormais true (c.-à-d. “correspond à tout”). Auparavant, elles renvoyaient false. (issue #86300). #86500 (Elmi Ahmadov).
  • Corrige la fonction timeSeriesResampleToGridWithStaleness() lorsque le premier intervalle n’a pas de valeur. #86507 (Vitaly Baranov).
  • Corrige un plantage causé par merge_tree_min_read_task_size défini à 0. #86527 (yanglongwei).
  • Lors de la lecture, le format de chaque fichier de données est désormais récupéré depuis les métadonnées Iceberg (auparavant, il était récupéré à partir des arguments de table). #86529 (Daniil Ivanik).
  • Corrige un plantage où certaines données valides soumises par l’utilisateur dans une colonne AggregateFunction(quantileDD) pouvaient faire entrer les fusions en récursion infinie. #86560 (Raphaël Thériault).
  • Corrige le moteur de base de données Backup qui levait une exception lors d’une requête avec des fichiers de part de taille nulle. #86563 (Max Justus Spransy).
  • Corrige l’absence d’en-tête de chunk 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).
  • Corrections de bugs de nullabilité dans insert et l’élagage. Cela clôt #86407. #86630 (scanhex12).
  • Ne pas désactiver le cache du système de fichiers si le cache de métadonnées Iceberg est désactivé. #86635 (Daniil Ivanik).
  • Correction de l’erreur ‘Deadlock in Parquet::ReadManager (single-threaded)’ dans le lecteur Parquet v3. #86644 (Michael Kolupaev).
  • Correction de la prise en charge d’IPv6 dans listen_host pour ArrowFlight. #86664 (Vitaly Baranov).
  • Correction de l’arrêt du handler ArrowFlight. Cette PR corrige #86596. #86665 (Vitaly Baranov).
  • Correction des requêtes distribuées avec describe_compact_output=1. #86676 (Azat Khuzhin).
  • Correction de l’analyse des définitions de fenêtre et de l’application des paramètres de requête. #86720 (Azat Khuzhin).
  • Correction de l’exception Partition strategy wildcard can not be used without a '_partition_id' wildcard. lors de la création d’une table avec PARTITION BY, mais sans joker 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 requêtes parallèles tentent d’acquérir un verrou unique. #86751 (Pervakov Grigorii).
  • Correction de l’écriture de NULL dans les données partagées JSON au format d’entrée RowBinary, avec ajout de validations supplémentaires dans ColumnObject. #86812 (Pavel Kruglov).
  • Prise en charge des types JSON/Dynamic dans une table créée avec la table function cluster. #86821 (Pavel Kruglov).
  • Correction d’une permutation Tuple vide avec une limite. #86828 (Pavel Kruglov).
  • Ne pas utiliser de nœud Keeper distinct pour les nœuds de traitement persistants. Correctif pour https://github.com/ClickHouse/ClickHouse/pull/85995. Clôt #86406. #86841 (Kseniia Sumarokova).
  • Correction d’une table du moteur TimeSeries qui bloquait la création d’une nouvelle replica dans une base de données Replicated. #86845 (Nikolay Degterinsky).
  • Correction de l’interrogation de system.distributed_ddl_queue dans les cas où certaines tâches n’ont pas certains nœuds Keeper. #86848 (Antonio Andelic).
  • Correction du seek à la fin du bloc décompressé. #86906 (Pavel Kruglov).
  • Traitement de l’exception levée lors de l’exécution asynchrone de l’itérateur Iceberg. #86932 (Daniil Ivanik).
  • Correction de l’enregistrement des grosses configurations XML prétraitées. #86934 (c-end).
  • Correction du remplissage du champ de date dans la table system.iceberg_metadata_log. #86961 (Daniil Ivanik).
  • Correction du recalcul infini de TTL avec WHERE. #86965 (Anton Popov).
  • Correction du résultat non déterministe d’une fonction calculée dans une CTE au sein de la query. #86967 (Yakov Olkhovskiy).
  • Correction de LOGICAL_ERROR dans EXPLAIN avec pointInPolygon sur les colonnes de clé primaire. #86971 (Michael Kolupaev).
  • Correction d’un résultat potentiellement incorrect de la fonction uniqExact avec les modificateurs ROLLUP et CUBE. #87014 (Nikita Taranov).
  • Correction des tables de data lake dont le nom contient une séquence percent-encoded. Clôture de #86626. #87020 (Anton Ivashkin).
  • Correction de la résolution du schéma de table avec la table function url() lorsque le paramètre parallel_replicas_for_cluster_functions est défini sur 1. #87029 (Konstantin Bogdanov).
  • Conversion correcte de la sortie de PREWHERE après sa division en plusieurs étapes. #87040 (Antonio Andelic).
  • Correction des lightweight updates avec la clause ON CLUSTER. #87043 (Anton Popov).
  • Correction de la compatibilité de certains aggregate function states avec un String argument. #87049 (Pavel Kruglov).
  • Correction du comportement incorrect de IS NULL sur les colonnes Nullable dans OUTER JOIN avec optimize_functions_to_subcolumns, clôture de #78625. #87058 (Vladimir Cherkasov).
  • Correction d’un problème où le nom du modèle d’OpenAI n’était pas transmis. #87100 (Kaushik Iska).
  • EmbeddedRocksDB : le path 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 query DROP. #87112 (Nikolay Degterinsky).
  • Correction de la lecture des identifiants de field des maps et arrays dans Parquet. #87136 (scanhex12).
  • Correction de la lecture d’un array avec la subcolumn des tailles d’array en lazy materialization. #87139 (Pavel Kruglov).
  • Corrige une comptabilisation incorrecte des désallocations de données temporaires dans le suivi de la limite max_temporary_data_on_disk_size, clôt #87118. #87140 (JIaQi).
  • La fonction checkHeaders valide désormais correctement les en-têtes fournis et rejette les en-têtes interdits. Auteur original : Michael Anastasakis (@michael-anastasakis). #87172 (Raúl Marín).
  • Uniformise le comportement de toDate et toDate32 pour tous les types numériques. Corrige la vérification d’underflow de Date32 lors d’une conversion depuis int16. #87176 (Pervakov Grigorii).
  • Corrige la fonction CASE avec des arguments Dynamic. #87177 (Pavel Kruglov).
  • Corrige une erreur logique avec les répliques parallèles pour les requêtes comportant plusieurs JOIN, en particulier avec un RIGHT JOIN après un LEFT/INNER JOIN. #87178 (Igor Nikonov).
  • Respecte le paramètre input_format_try_infer_variants dans le cache d’inférence de schéma. #87180 (Pavel Kruglov).
  • Fait en sorte que pathStartsWith ne corresponde qu’aux chemins situés sous le préfixe. #87181 (Raúl Marín).
  • Corrige la lecture d’un tableau vide à partir d’une chaîne vide en CSV. #87182 (Pavel Kruglov).
  • Corrige un résultat potentiellement erroné de EXISTS non corrélé. Le problème a été introduit avec execute_exists_as_scalar_subquery=1 dans https://github.com/ClickHouse/ClickHouse/pull/85481 et affecte 25.8. Corrige #86415. #87207 (Nikolai Kochetov).
  • Corrige des erreurs logiques dans la colonne virtuelle _row_number et les suppressions positionnelles Iceberg. #87220 (Michael Kolupaev).
  • Corrige l’erreur LOGICAL_ERROR “Too large size passed to allocator” dans JOIN, due à un mélange de blocs const et non const. #87231 (Azat Khuzhin).
  • Déclenche 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).
  • Corrige les lightweight updates avec des sous-requêtes 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 policy de lignes. Suite de #85118. Clôt #69777. Clôt #83748. #87303 (Nikolai Kochetov).
  • Corrige l’application de patches à des colonnes avec une expression par défaut absentes des data parts. #87347 (Anton Popov).
  • Correction de la mise à niveau d’EmbeddedRocksDB. #87392 (Raúl Marín).
  • Correction de la lecture directe depuis l’index textuel sur le stockage objet. #87399 (Anton Popov).
  • Empêche la création d’un privilège avec un moteur inexistant. #87419 (Jitendra).
  • Ignorer uniquement les erreurs « not found » pour s3_plain_rewritable (ce qui peut entraîner toutes sortes de problèmes). #87426 (Azat Khuzhin).
  • Correction des dictionnaires avec une source YTSaurus et des layouts *range_hashed. #87490 (MikhailBurdukov).
  • Correction de la création d’un tableau de tuples vides. #87520 (Pavel Kruglov).
  • Vérification des colonnes non autorisées lors de la création d’une table temporaire. #87524 (Pavel Kruglov).
  • Ne jamais placer les colonnes de partition Hive dans l’en-tête du format. Corrige #87515. #87528 (Arthur Passos).
  • Correction de la préparation de la lecture depuis le format dans DeltaLake lorsqu’un format texte est utilisé. #87529 (Pavel Kruglov).
  • Correction de 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 pour une table S3. #87554 (Bharat Nallan).
  • Évite les fuites de mémoire comptabilisée pour la journalisation asynchrone (ce qui peut provoquer un écart important, d’environ 100 GiB sur 10 heures) et pour text&#95;log (un écart presque identique est possible). #87584 (Azat Khuzhin).
  • Correction d’un bug qui pouvait entraîner l’écrasement des paramètres serveur globaux par les paramètres SELECT d’une View ou d’une Materialized View, 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).
  • Exclure les octets du cache de pages en espace utilisateur (si possible) lors du calcul de l’avertissement de surcharge mémoire. #87610 (Bharat Nallan).
  • Correction d’un bug où un ordre incorrect des types lors de la désérialisation CSV entraînait LOGICAL_ERROR. #87622 (Yarik Briukhovetskyi).
  • Correction de la gestion incorrecte de command_read_timeout pour les dictionnaires exécutables. #87627 (Azat Khuzhin).
  • Correction du comportement incorrect de SELECT * REPLACE dans la clause WHERE avec le nouvel analyseur lors du filtrage sur des colonnes remplacées. #87630 (xiaohuanlin).
  • Correction de l’agrégation à deux niveaux lors de l’utilisation de Merge sur Distributed. #87687 (c-end).
  • Corrige la génération du bloc 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 avec parallel replicas pouvait être sélectionné de manière incorrecte s’il n’y avait aucune donnée à lire après application de l’analyse des index. Clôt #87653. #87700 (zoomxi).
  • Corrige la gestion des colonnes timestamp / timestamptz dans Glue. #87733 (Andrey Zvonov).
  • Clôt #86587. #87761 (scanhex12).
  • Corrige l’écriture des valeurs booléennes dans l’interface PostgreSQL. #87762 (Artem Yurov).
  • Corrige l’erreur de table inconnue dans une requête insert select avec CTE. #85368. #87789 (Guang Zhao).
  • Corrige la lecture d’une sous-colonne map NULL à partir de Variant qui ne peuvent pas être à l’intérieur de Nullable. #87798 (Pavel Kruglov).
  • Corrige une erreur de gestion en cas d’échec de suppression complète de la base de données sur le cluster, sur le nœud secondaire. #87802 (Tuan Pham Anh).
  • Corrige plusieurs bugs liés aux index de saut. #87817 (Raúl Marín).
  • Dans AzureBlobStorage, mise à jour pour tenter d’abord la copie native, puis basculer vers la lecture et l’écriture en cas d’erreur ‘Unauthroized’ (dans AzureBlobStorage, si les storage accounts de la source et de la destination sont différents, nous obtenons une erreur ‘Unauthorized’). Corrige également 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 Dictionary non unique. #87863 (Ilya Golshtein).
  • Corrige 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).
  • Corrige l’élimination incorrecte des granules/partitions pour les clés basées sur datetime lors de l’utilisation du paramètre session_timezone dans les requêtes. #87987 (Eduard Karacharov).
  • Renvoie le nombre de lignes affectées après la requête dans l’interface PostgreSQL. #87990 (Artem Yurov).
  • Restreint l’utilisation du filter pushdown pour PASTE JOIN, car cela peut produire des résultats incorrects. #88078 (Yarik Briukhovetskyi).
  • Applique la normalisation des URI avant l’évaluation de la vérification des droits introduite par https://github.com/ClickHouse/ClickHouse/pull/84503. #88089 (pufit).
  • Corrige une erreur logique lorsque ARRAY JOIN COLUMNS() ne correspond à aucune colonne dans le nouvel analyseur. #88091 (xiaohuanlin).
  • Corrige l’avertissement “Utilisation élevée de la mémoire de ClickHouse” (hors page cache). #88092 (Azat Khuzhin).
  • Corrige une possible corruption de données dans les tables MergeTree avec un TTL défini sur une colonne. #88095 (Anton Popov).
  • Corrige un plantage dans les fonctions mortonEncode et hilbertEncode lorsqu’elles sont appelées avec un argument tuple vide. #88110 (xiaohuanlin).
  • Désormais, les requêtes ON CLUSTER prendront moins de temps en présence de 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).
  • Annule correctement l’opération de déplacement de répertoire en cas d’erreur. Il faut réécrire tous les objets prefix.path modifiés pendant l’exécution, et pas seulement l’objet racine. #88198 (Mikhail Artemenko).
  • Corrige la propagation de l’indicateur is_shared dans ColumnLowCardinality. Cela pouvait entraîner un résultat de group-by erroné si une nouvelle valeur était insérée dans une colonne après le précalcul et la mise en cache des valeurs de hachage dans ReverseIndex. #88213 (Nikita Taranov).
  • Corrige le workload setting max_cpu_share. Il peut désormais être utilisé sans définir le workload setting max_cpus. #88217 (Neerav).
  • Corrige un bogue 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 les stockages d’objets. #88290 (alesapin).
  • Évite de tenter d’initialiser les bases de données DataLake lors de l’accès à system.projections et system.data_skipping_indices. #88330 (Azat Khuzhin).
  • Désormais, les catalogues des data lakes ne seront affichés dans les tables d’introspection système que si show_data_lake_catalogs_in_system_tables est explicitement activé. #88341 (alesapin).
  • Corrige DatabaseReplicated afin qu’il respecte 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 la complexité quadratique de la fonction countMatches. Résout #88400. #88401 (Alexey Milovidov).
  • Rend répliquées les commandes ALTER COLUMN ... COMMENT pour les tables KeeperMap afin qu’elles soient enregistrées dans les métadonnées de la base de données Replicated et propagées sur toutes les répliques. Résout #88077. #88408 (Eduard Karacharov).
  • Corrige un cas de fausse dépendance cyclique avec les vues matérialisées dans la base de données Replicated, qui empêchait l’ajout de nouvelles répliques à la base de données. #88423 (Nikolay Degterinsky).
  • Corrige l’agrégation des colonnes éparses lorsque group_by_overflow_mode est défini sur any. #88440 (Eduard Karacharov).
  • Corrige l’erreur “colonne introuvable” lors de l’utilisation de query_plan_use_logical_join_step=0 avec plusieurs clauses FULL JOIN USING. Résout #88103. #88473 (Vladimir Cherkasov).
  • Les grands clusters avec des numéros de nœud > 10 ont une forte probabilité d’échec lors de la restauration avec l’erreur [941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again. Le nœud num_hosts est écrasé par de nombreux hôtes en même temps. Le correctif rend dynamique le paramètre qui contrôle le nombre de tentatives. Résout #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, cela fonctionnait) select * from t1 s final join ( select * from t2 final ) r final on s.key = r.key join ( select * from t3 final ) c final on s.key = c.key, car JoinToSubqueryTransformVisitor réécrit cette requête SQL en SELECT `_--s.key` AS `s.key`, `_--s.value` AS `s.value`, `_--r.key` AS `r.key`, `_--r.value` AS `r.value`, `_--c.key` AS `c.key`, `_--c.value` AS `c.value` FROM ( SELECT value AS `_--s.value`, key AS `_--s.key`, r.value AS `_--r.value`, r.key AS `_--r.key` FROM t1 AS s FINAL ALL INNER JOIN ( SELECT key, value FROM t2 FINAL ) AS r FINAL ON `_--s.key` = `_--r.key` ) AS `--.s` ALL INNER JOIN ( SELECT value AS `_--c.value`, key AS `_--c.key` FROM ( SELECT key, value FROM t3 FINAL ) AS c FINAL ) AS `--.t` ON `_--s.key` = `_--c.key`. Nous voulons réécrire cette requête SQL ainsi (en déplaçant simplement le dernier FINAL) SELECT `_--s.key` AS `s.key`, `_--s.value` AS `s.value`, `_--r.key` AS `r.key`, `_--r.value` AS `r.value`, `_--c.key` AS `c.key`, `_--c.value` AS `c.value` FROM ( SELECT value AS `_--s.value`, key AS `_--s.key`, r.value AS `_--r.value`, r.key AS `_--r.key` FROM t1 AS s FINAL ALL INNER JOIN ( SELECT key, value FROM t2 FINAL ) AS r FINAL ON `_--s.key` = `_--r.key` ) AS `--.s` ALL INNER JOIN ( SELECT value AS `_--c.value`, key AS `_--c.key` FROM ( SELECT key, value FROM t3 FINAL ) AS c ) AS `--.t` FINAL ON `_--s.key` = `_--c.key`. #88491 (JIaQi).
  • Correction d’un débordement entier UBSAN dans le message d’erreur accurateCast lors de la conversion de grandes valeurs en DateTime. #88520 (xiaohuanlin).
  • Correction de CoalescingMergeTree pour les types Tuple. Cela clôt #88469. #88526 (scanhex12).
  • Interdiction des suppressions pour iceberg_format_version=1. Cela clôt #88444. #88532 (scanhex12).
  • Ce correctif corrige l’opération de déplacement des disques plain-rewritable pour des répertoires de profondeur arbitraire. #88586 (Mikhail Artemenko).
  • Correction de SQL SECURITY DEFINER avec les fonctions *cluster. #88588 (Julian Maicher).
  • Correction d’un crash potentiel causé par une mutation concurrente des colonnes const PREWHERE sous-jacentes. #88605 (Azat Khuzhin).
  • Correction de la lecture depuis l’index de texte et activation du cache des conditions de requête (avec les paramètres use_skip_indexes_on_data_read et use_query_condition_cache activés). #88660 (Anton Popov).
  • Une exception Poco::TimeoutException levée par Poco::Net::HTTPChunkedStreamBuf::readFromDevice provoque un plantage avec SIGABRT. #88668 (Miсhael Stetsyuk).
  • Correction de l’ajout à system.zookeeper_connection_log lorsque ClickHouse se connecte pour la première fois après le rechargement de la configuration. #88728 (Antonio Andelic).
  • Correction d’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).
  • Énième 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 le logging asynchrone échoue afin d’éviter l’arrêt du programme. #88814 (Raúl Marín).
Dernière modification le 29 juin 2026