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_nullablea été modifiée pour tenir compte des informations deNullabledes 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 seullog_commentd’une requête ne provoque plus de cache miss. Il est possible que certains utilisateurs segmentaient volontairement leur cache en faisant varierlog_comment. Cette modification change 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 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,formatQueryet 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
searchAnyetsearchAllont été renommées enhasAnyTokensethasAllTokenspour une meilleure cohérence avec la fonction existantehasToken. #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_lakesest 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_keyest désormais activé par défaut et ne peut plus être désactivé. #87335 (Sema Checherinda). - Suppression de
cache_hits_thresholddu cache du système de fichiers.cache_hits_thresholda é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_secondsd’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_stepest renommé enquery_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_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 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 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 beaucoup plus longtemps avec un seuilmin_free_disk_ratio_to_perform_insertraisonnable. #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_replicationsur 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
naiveBayesClassifierpour 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
convpermettant de convertir des nombres entre différentes bases, avec prise en charge actuelle des bases de2à36. #83058 (hp). - Ajout de la fonction d’agrégation
studentTTestOneSample. #85436 (Dylan). - Ajout de la fonction
isValidASCIIpour vérifier si une chaîne contient uniquement des caractères ASCII. Clôture de #85377. #85786 (rajat mohan). - Fonctions d’agrégation
timeSeriesChangesToGridettimeSeriesResetsToGrid. 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 calculentchanges/resetsen 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 PromQLhistogram_quantile()sur les histogrammes classiques. #86294 (Stephen Chi). - Ajout de variantes optimisées insensibles à la casse des fonctions
startsWithetendsWith:startsWithCaseInsensitive,endsWithCaseInsensitive,startsWithCaseInsensitiveUTF8etendsWithCaseInsensitiveUTF8. #87374 (Guang Zhao).
Tables système
- Ajout d’une nouvelle table système
database_replicascontenant 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_logpour 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_streametnats_consumerpour 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 UPDATEpour 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 tableauto_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. CommeGROUP BY ALLetORDER BY ALL,LIMIT BY ALLse 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 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 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_cacheest é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
LIMITetOFFSET. 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_inlinepour 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.startupLeveletlogger.shutdownLevelpermettent 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
WORKLOADetRESOURCEen SQL à l’aide de la section “resources_and_workloads” de la configuration du serveur. #87430 (Sergei Trifonov).
Commandes SYSTEM
- Ajouter la commande
SYSTEM RECONNECT ZOOKEEPERpour forcer la déconnexion puis la reconnexion à ZooKeeper (https://github.com/ClickHouse/ClickHouse/issues/87317). #87318 (Pradeep Chhetri). - Limiter le nombre de collections nommées au moyen des paramètres
max_named_collection_num_to_warnetmax_named_collection_num_to_throw. Ajouter la nouvelle métriqueNamedCollectionet l’erreurTOO_MANY_NAMED_COLLECTIONS. #87343 (Pablo Marcos).
Keeper
- Ajout des variantes récursives des commandes
cp-cpretmv-mvrdans le client Keeper. #88570 (Mikhail Artemenko).
Fonctionnalités expérimentales
- Les fonctions
searchAlletsearchAnyfonctionnent 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 fonctionL2DistanceTransposed, 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'etcolumn in (xxx). #85529 (李扬). - Évite un balayage complet de
system.tableslors d’un filtrage suruuid(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 etn2.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 JOINetRIGHT ANY JOINen JOINSEMI/ANTIsi la condition de filtre 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 condition de filtre est toujours fausse pour les lignes non correspondantes d’un côté. #86028 (Dmitry Novik). - Les performances de
HashJoinont été légèrement optimisées dans le cas d’un JOINLEFT/RIGHTcomportant 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 = 1etquery_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 :
JoinOptimizeMicrosecondsetQueryPlanOptimizeMicroseconds. #87683 (Vladimir Cherkasov). AddedColumns::appendFromBlocka é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
LIKEavec un préfixe ou un suffixe grâce au nouveau paramètre par défautoptimize_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
.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. 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
MarkRangesen utilisantdevectorau lieu dedeque). #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
FINALsur une tableReplacingMergeTreeavec la colonneis_deleteds’exécute désormais plus rapidement grâce à une meilleure parallélisation issue de 2 optimisations existantes : 1) l’optimisationdo_not_merge_across_partitions_select_finalpour les partitions de la table qui n’ont qu’une seulepart2) le découpage des autres ranges sélectionnées de la table enintersecting / 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
- Corrige une dégradation des performances due à une clé sérialisée volumineuse lors d’un regroupement sur plusieurs colonnes de type chaîne ou numérique. Clôture https://github.com/ClickHouse/ClickHouse/pull/83884#issuecomment-3187972297 cc @mkmkme . Fait suite à https://github.com/ClickHouse/ClickHouse/pull/83884. #85924 (李扬).
- RadixSort : aide le compilateur à exploiter SIMD et le CPU à mieux effectuer le préchargement. Utilise un dispatch dynamique pour n’employer le préchargement logiciel qu’avec les CPU Intel. Poursuit le travail de @taiyang-li dans https://github.com/ClickHouse/ClickHouse/pull/77029. #86378 (Raúl Marín).
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 apportées à DB::SharedMutex. #87491 (Raúl Marín).
- Accélération du cas le plus courant du destructeur de Field. #87631 (Raúl Marín).
- Réduction de l’impact lorsque les fail points ne sont pas utilisés. #88196 (Raúl Marín).
Améliorations
Optimisation et exécution des requêtes
mannWhitneyUTestne 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éfinissantSET query_plan_use_new_logical_join_step = 0et 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 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, 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: 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, 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.completionsau 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
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). - 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 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 settingjemalloc_enable_profiler. Le stockage des samples danssystem.trace_logpeut être contrôlé pour chaque query à l’aide du settingjemalloc_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_erroraux disques S3 et le renomme ens3_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 viaALTER 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) danshttp_handlers(y compris le schéma et host:port). #86155 (Azat Khuzhin). - Ajout du paramètre expérimental
allow_experimental_delta_lake_writespour 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_EXCEEDEDouKEEPER_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.channelsur l’une des valeurssyslog/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_fileetdelta_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 REPLICAsur 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_timeenpromql_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, commeNOW(). #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 (
QueriesMemoryUsageetQueriesPeakMemoryUsage). #86669 (Azat Khuzhin). - Vous pouvez utiliser l’option
clickhouse-benchmark --precisepour 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 queEXPLAIN. Ajouter un settingquery_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 égalementSigQdepuis/proc/self/statuspour l’introspection (siProcessSignalQueueSizeest proche deProcessSignalQueueLimit, vous obtiendrez probablement des errorsCANNOT_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.pathlors 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 fonctiontoday(). #86914 (Kaviraj Kanagaraj). - Prendre en charge les tests de performance
.xmlsur 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_methodn’est pas un codec générique pris en charge. #87097 (Robert Schulze). - La table système
system.query_cacherenvoie 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 quesystem.query_cacherenvoie des chaînes de requête. Le comportement de la table système se rapproche ainsi de celui desystem.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
S3et à la table functions3, 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_compressionpour contrôler la compression du dictionnaire. Par défaut, il est activé afin d’utiliser la compressionfront-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_errorpar 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
arrowflightenarrowFlight. #87249 (Vitaly Baranov). - Mise à jour de
clickhouse-benchmarkpour 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_loglors du traitement des signaux. #87253 (Miсhael Stetsyuk). - Ajout d’une nouvelle colonne
statisticsdans system.parts_columns. #87259 (Han Fei). - Ajout du paramètre
inject_random_order_for_select_without_order_by, qui injecteORDER BY rand()dans les requêtesSELECTde premier niveau sans clauseORDER 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_keysn’est pas le même que celui deright_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_viewsetmin_insert_block_size_bytes_for_materialized_views. Auparavant, siparallel_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ésactiverTCP_NODELAYpour Keeper. #87363 (Copilot). - Prise en charge de
--connectiondansclickhouse-benchmarks. Comme avecclickhouse-client, vous pouvez spécifier des connections prédéfinies dans leconfig.xml/config.yamldu client, sous le cheminconnections_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-certificatedansclickhouse-benchmark. #87370 (Azat Khuzhin). - Désormais, le paramètre
max_insert_threadsprendra effet sur les tables Iceberg. #87407 (alesapin). - Ajout de métriques d’histogramme 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 surcoût dans le cloud. #87521 (Miсhael Stetsyuk). - La fonction
hasTokenrenvoie désormais zéro correspondance pour untokenvide (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
ArrayetMap(mapKeysetmapValues). Les fonctions prises en charge sontmapContainsKeyethas. #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_rowsetmax_joined_block_size_byteslors de la sérialisation du plan de requête avecmake_distributed_planexpé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. Toutefois, ce changement présente certains inconvénients. Le client peut demander une méthode de compression coûteuse, commebzip2, 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 demandergzip, ce qui n’est pas si mal, mais reste moins optimal quezstd. Résout #71591. #87703 (Alexey Milovidov). - Ajout d’un nouveau paramètre
keeper_hostsqui 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, commeuse_const_adaptive_granularity, ne s’appliquent qu’aux nouvelles parts). #87774 (Azat Khuzhin). - Ajout des valeurs
fromettoaux 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_rowpour 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ètremax_request_size, identique àjute.maxbufferpourZooKeeper, OFF par défaut pour la compatibilité ascendante, sera activé dans les prochaines releases). #87952 (Azat Khuzhin). - Correction de
clickhouse-benchmarkafin 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_logest 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
Replicatedsans 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 functiongenerateSerialIDpour 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 TABLESsur les tables utilisant le moteurAlias. 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_sizepour contrôler la taille du tampon des processus d’écriture de fichiers temporaires. * Optimisation de la consommation mémoire de l’opérationscatter(utilisée, par exemple, dans grace hash join) pour les colonnesLowCardinality. #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
generateSerialIDprend 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
JSONsont désormais affichées avec un formatage Pretty lors de l’utilisation du formatVertical. 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-historysera 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_rightsera 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 serveurbackground_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}etmakeDateTime64. 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')renvoyait1968-12-31 23:59:59.532au lieu de1969-01-01 00:00:00.468. #85396 (xiaohuanlin). -
- 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
NonZeroUInt64pourlogs_to_keepdans DatabaseReplicatedSettings. #86142 (Tuan Pham Anh). - Une Exception était levée par une query
FINALavec skip index si la table (par ex.ReplacingMergeTree) était créée avec le paramètreindex_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.xmllors 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 resourcelors 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
MergesMutationsMemoryTrackingdue aux tablesBufferet corrigequery_views_logpour le streaming depuisKafka(et d’autres sources). #86422 (Azat Khuzhin). - Corrige
show tablesaprè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
searchAnyetsearchAll, lorsqu’elles sont appelées avec des motifs de recherche vides, renvoient désormaistrue(c.-à-d. “correspond à tout”). Auparavant, elles renvoyaientfalse. (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_sizedé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
insertet 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_hostpour 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 avecPARTITION 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_queuedans 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
TTLavecWHERE. #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
uniqExactavec les modificateursROLLUPetCUBE. #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è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 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 NULLsur les colonnes Nullable dansOUTER JOINavecoptimize_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
toDateettoDate32pour 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_variantsdans 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
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). - Corrige des erreurs logiques dans la colonne virtuelle
_row_numberet les suppressions positionnelles Iceberg. #87220 (Michael Kolupaev). - Corrige l’erreur
LOGICAL_ERROR“Too large size passed to allocator” dansJOIN, 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_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_timeoutpour 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
MergesurDistributed. #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/timestamptzdans 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_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 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
MergeTreeavec unTTLdéfini sur une colonne. #88095 (Anton Popov). - Corrige un plantage 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 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.pathmodifiés pendant l’exécution, et pas seulement l’objet racine. #88198 (Mikhail Artemenko). - Corrige la propagation de l’indicateur
is_shareddansColumnLowCardinality. 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 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 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.projectionsetsystem.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_tablesest 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 ... COMMENTpour 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_modeest défini surany. #88440 (Eduard Karacharov). - Corrige l’erreur “colonne introuvable” lors de l’utilisation de
query_plan_use_logical_join_step=0avec 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œudnum_hostsest é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, carJoinToSubqueryTransformVisitorréécrit cette requête SQL enSELECT `_--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
accurateCastlors 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-rewritablepour 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_readetuse_query_condition_cacheactivés). #88660 (Anton Popov). - Une exception
Poco::TimeoutExceptionlevée parPoco::Net::HTTPChunkedStreamBuf::readFromDeviceprovoque un plantage avec SIGABRT. #88668 (Miсhael Stetsyuk). - Correction de l’ajout à
system.zookeeper_connection_loglorsque 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).