Passer au contenu principal

Changements incompatibles avec les versions précédentes

Modifications des requêtes et de la syntaxe

  • Correction d’une mise en forme incohérente des requêtes causée par une substitution incorrecte d’alias. Remarque : lorsque l’analyseur est désactivé, certaines requêtes CREATE VIEW qui utilisent IN avec une référence à un alias peuvent ne plus être traitées. Pour éviter cela, assurez-vous que l’analyseur est activé (il l’est par défaut depuis la version 24.3). #82838 (Alexey Milovidov).
  • Une liste de colonnes vide dans JOIN USING () est désormais considérée comme une erreur de syntaxe. Auparavant, cela était signalé comme INVALID_JOIN_ON_EXPRESSION au moment de l’exécution de la requête et, dans certains cas (par exemple lors d’une jointure avec le moteur Join), pouvait provoquer une LOGICAL_ERROR. #92371 (Vladimir Cherkasov).
  • Les sous-requêtes ne sont plus autorisées dans ORDER BY ni dans les autres expressions de clé de table. #96847 (Alexey Milovidov).

Modifications des types de données

  • Ajout de la prise en charge de Nullable(Tuple). Pour l’activer, définissez allow_experimental_nullable_tuple_type = 1. #89643 (Nihal Z. Miaji).
  • Les données partagées avancées pour le type JSON sont désormais activées par défaut. Il ne sera pas possible de revenir à une version antérieure à 25.8, car les anciennes versions ne peuvent pas lire les data parts écrites avec le nouveau format JSON. Pour effectuer des mises à niveau en toute sécurité, définissez le paramètre compatibility sur la version précédente, ou les paramètres MergeTree dynamic_serialization_version='v2' et object_serialization_version='v2'. #92511 (Pavel Kruglov).
  • SKIP REGEXP dans le type JSON utilise désormais par défaut une correspondance partielle. #92847 (Pavel Kruglov).
  • Correction d’une erreur logique qui survenait en cas d’incompatibilité de type Variant. #95811 (Bharat Nallan).
  • Les colonnes DATE de PostgreSQL sont désormais inférées en Date32 dans ClickHouse (auparavant, elles étaient inférées en Date, ce qui pouvait provoquer un dépassement de capacité pour les valeurs en dehors de sa plage limitée). L’insertion de valeurs Date32 dans PostgreSQL est désormais également prise en charge. #95999 (Alexey Milovidov).

Modifications du stockage et des index

  • Amélioration de l’organisation du stockage de l’index de texte inversé pour rendre les lectures depuis le stockage objet plus efficaces, ainsi que des performances de fusion pour les tables dotées d’index de texte inversés. Si vous avez utilisé l’index de texte expérimental avant la version 25.12, vous devez supprimer l’index avant la mise à niveau, puis le reconstruire dans la nouvelle version. #91518 (Anton Popov).
  • Le format de stockage des statistiques a changé — toutes les statistiques sont désormais stockées dans un seul fichier. #93414 (Anton Popov).
  • Les noms de fichiers d’index sont désormais échappés afin d’éviter des parts corrompues. ClickHouse ne pourra pas charger les index comportant des caractères non ASCII dans leur nom s’ils ont été créés par des versions précédentes. Pour cela, utilisez le paramètre MergeTree escape_index_filenames. #94079 (Raúl Marín).

Fonctionnalités supprimées

  • Les codecs DEFLATE_QPL et ZSTD_QAT ont été supprimés. Convertissez toutes les données existantes compressées avec ces codecs à l’aide d’un autre codec avant la mise à niveau. Notez que l’utilisation de ces codecs nécessitait auparavant d’activer enable_deflate_qpl_codec ou enable_zstd_qat_codec. #92150 (Robert Schulze).
  • L’INSERT dans des colonnes ALIAS simples n’est plus pris en charge (revient sur #84154). Cette fonctionnalité ne fonctionnait pas avec des formats personnalisés et n’était pas protégée par un paramètre. #92849 (Azat Khuzhin).
  • Le moteur de base de données Lazy a été supprimé et n’est plus disponible. #93627 (Alexey Milovidov).
  • Le mode transposed_with_wide_view de metric_log a été supprimé en raison d’un bug qui le rendait inutilisable. Il n’est plus possible de définir system.metric_log avec ce mode. #93867 (Alexey Milovidov).

Modifications des paramètres et de la configuration

  • Un nouveau paramètre renvoie désormais une erreur si un catalogue de data lake n’a pas accès au stockage objet. #93606 (Konstantin Vedernikov).
  • La planification CPU des workloads est désormais préemptive par défaut. Voir le paramètre de serveur cpu_slot_preemption. #94060 (Sergei Trifonov).
  • Les paramètres exact_rows_before_limit, rows_before_aggregation, cross_to_inner_join_rewrite, regexp_dict_allow_hyperscan, regexp_dict_flag_case_insensitive, regexp_dict_flag_dotall et dictionary_use_async_executor ont été reclassés : ils passent de paramètres de format à paramètres ordinaires. Il s’agit principalement d’un changement interne, sans effet visible pour l’utilisateur, sauf si vous avez spécifié l’un d’eux dans la définition d’un moteur de table Iceberg, DeltaLake, Kafka, S3, S3Queue, Azure, Hive, RabbitMQ, Set, FileLog ou NATS — auquel cas ces définitions renverront désormais une erreur au lieu de les ignorer silencieusement. #94106 (Robert Schulze).
  • La sémantique de do_not_merge_across_partitions_select_final a été simplifiée. Auparavant, cette fonctionnalité pouvait être activée automatiquement même lorsqu’elle n’était pas explicitement définie, ce qui entraînait de la confusion et des problèmes en production. Désormais : la définir sur 1 active la fonctionnalité sans condition, et la définir sur 0 s’en remet au nouveau paramètre enable_automatic_decision_for_merging_across_partitions_for_final (valeur par défaut : 1). #96110 (Nikita Taranov).
  • Ajout de la validation du schéma S3. #96194 (Konstantin Vedernikov).
  • Le paramètre apply_row_policy_after_final est désormais activé par défaut, ce qui garantit que ROW POLICY respecte FINAL comme à l’origine. Si vous vous appuyiez auparavant sur optimize_move_to_prewhere_if_final=1 pour appliquer les politiques de lignes avant FINAL, utilisez plutôt apply_row_policy_after_final=0. #97279 (Nikolai Kochetov).

Changements relatifs à la sécurité et au contrôle d’accès

  • joinGet/joinGetOrNull appliquent désormais les privilèges SELECT sur la table Join sous-jacente. L’exécution de joinGet('db.table', 'column', key) nécessite le privilège SELECT à la fois sur les colonnes de clé et sur la colonne d’attribut récupérée. Les requêtes dépourvues de ces privilèges échoueront avec ACCESS_DENIED. Pour effectuer la migration, accordez les privilèges à l’aide de GRANT SELECT ON db.join_table TO user pour un accès complet à la table, ou de GRANT SELECT(key_col, attr_col) ON db.join_table TO user pour un accès au niveau des colonnes. #94307 (Vladimir Cherkasov).
  • Les requêtes CREATE TABLE ... AS ... nécessitent désormais le privilège SHOW COLUMNS au lieu de SHOW TABLES, qui faisait auparavant l’objet d’une vérification incorrecte. #94556 (pufit).

Modifications des insertions et de la déduplication

  • La déduplication est désormais activée par défaut pour toutes les insertions. Auparavant, elle était désactivée pour les insertions asynchrones et les vues matérialisées, mais activée pour les insertions synchrones. Pour conserver l’ancien comportement, définissez explicitement deduplicate_insert='backward_compatible_choice' (et de même pour deduplicate_blocks_in_dependent_materialized_views). #95970 (Sema Checherinda).

Changements apportés aux tables système

  • Les métadonnées en mémoire de S3Queue et AzureQueue sont désormais limitées. Les tables système ont été renommées : system.s3queue devient system.s3queue_metadata_cache, et system.azure_queue devient system.azure_queue_metadata_cache. #95809 (Kseniia Sumarokova).

Autres changements incompatibles

  • Correction des fonctions d’index H3 qui pouvaient provoquer un crash ou se bloquer lorsqu’elles étaient appelées avec des entrées non valides. #93657 (Michael Kolupaev).

Nouvelles fonctionnalités

Authentification

  • Ajout de la prise en charge de l’authentification par mot de passe à usage unique basé sur le temps (TOTP). #71273 (Vladimir Cherkasov).

Fonctions

  • Ajout de la fonction reverseBySeparator, qui inverse l’ordre des sous-chaînes d’une chaîne de caractères séparées par un séparateur donné. #91780 (Xuewei Wang).
  • Ajout des fonctions colorOKLABToSRGB et colorSRGBToOKLAB pour convertir entre les espaces colorimétriques sRGB et OKLAB. #93361 (Pranav Tiwari).
  • Ajout de la fonction cosineDistanceTransposed, qui approxime la distance cosinus entre deux points. #93621 (Raufs Dunamalijevs).
  • Ajout de la fonction de hachage xxh3_128. #96055 (Raúl Marín).
  • Ajout de la fonction mergeTreeAnalyzeIndex() pour analyser l’utilisation des index de MergeTree. #92954 (Azat Khuzhin).
  • Les fonctions prennent désormais en charge le type Variant via le nouveau FunctionVariantAdaptor. #90900 (Bharat Nallan).
  • Certaines fonctions peuvent désormais être appelées sans parenthèses en SQL. #94678 (Aly Kafoury).

Tables système

  • Ajout de la table system.user_defined_functions pour surveiller l’état de chargement des UDF et leur configuration. #90340 (Xu Jia).
  • Ajout de la table system.zookeeper_info. #90809 (Smita Kulkarni).
  • Ajout de la table system.primes et de la fonction de table primes, contenant des nombres premiers par ordre croissant. #92776 (Nihal Z. Miaji).
  • Ajout de la colonne files à system.parts, affichant le nombre de fichiers dans chaque data part. #94337 (Match).
  • Ajout de la table system.fail_points pour examiner les failpoints existants et vérifier s’ils sont activés. #96762 (Pedro Ferreira).

Moteurs de table et stockage

  • Ajout de la prise en charge des index textuels pour les colonnes Array. #89895 (Jimmy Aguilar Mena).
  • Ajout de la prise en charge du catalogue REST Paimon. #92011 (JIaQi Tang).
  • Ajout de la fonction de table icebergLocalCluster. #93323 (Anton Ivashkin).
  • Ajout du paramètre de base de données lazy_load_tables. Lorsqu’il est activé, les tables ne sont pas chargées au démarrage de la base de données — un StorageTableProxy léger est créé à la place et le véritable moteur de table est matérialisé au premier accès. #96283 (xiaohuanlin).
  • Ajout de la prise en charge d’un ZooKeeper auxiliaire pour DatabaseReplicated. #91683 (RinChanNOW).
  • Les fichiers de données et les fichiers système présents dans le cache peuvent désormais être divisés en segments distincts. #87834 (MikhailBurdukov).
  • Ajout d’un nouveau cache SLRU pour les métadonnées Parquet afin d’améliorer les performances de lecture en évitant les téléchargements de fichiers redondants. Le cache peut être supprimé avec SYSTEM DROP PARQUET METADATA CACHE. #89750 (Grant Holly).
  • Les tables du data lake prennent désormais en charge PREWHERE et PREWHERE en plusieurs étapes dans le lecteur Parquet v3. #93542 (Konstantin Vedernikov).
  • Ajout de l’analyse d’index distribuée sur plusieurs répliques, ce qui est particulièrement utile pour le stockage partagé et les grands volumes de données. #86786 (Azat Khuzhin).

Insertions et déduplication

  • La déduplication des insertions asynchrones fonctionne désormais avec les vues matérialisées dépendantes. Lorsqu’une collision de block_id se produit, le bloc d’origine est filtré pour supprimer les lignes associées au block_id en collision, puis les lignes restantes sont transformées par les requêtes de toutes les vues matérialisées concernées. #89140 (Sema Checherinda).
  • Les insertions asynchrones prennent désormais en charge le quorum parallèle : les données insérées sont répliquées jusqu’au quorum et, si des doublons sont détectés, la requête attend que les données précédemment insérées soient elles aussi répliquées. #93356 (Sema Checherinda).
  • Ajout du paramètre serveur insert_deduplication_version pour permettre la migration vers un hash de déduplication unifié. #95409 (Sema Checherinda).
  • Début de la migration des hash de déduplication. #97562 (Sema Checherinda).

SQL et fonctionnalités des requêtes

  • Ajout de la syntaxe SYSTEM CLEAR [...] CACHE comme alternative plus explicite à la syntaxe existante SYSTEM DROP [...] CACHE. L’ancienne syntaxe reste disponible. #93727 (Pranav Tiwari).
  • Ajout de la requête OPTIMIZE <table> DRY RUN PARTS <part names> pour simuler des fusions sans valider la part résultante. Utile pour vérifier la correction des fusions, reproduire des bogues liés aux fusions et évaluer les performances des fusions. #96122 (Anton Popov).
  • Les requêtes DDL avec ON CLUSTER peuvent désormais être exécutées pour les bases de données Replicated lorsque le paramètre ignore_on_cluster_for_replicated_database est activé. Le nom du cluster sera alors ignoré. #92872 (Kirill).
  • Introduction d’une nouvelle syntaxe et d’un nouveau cadre pour simplifier et étendre la fonctionnalité des index de projection. #91844 (Amos Bird).

Paramètres et configuration

  • Ajout du paramètre max_insert_block_size_bytes pour un contrôle plus fin de la formation des blocs insérés. #92833 (Kirill Kopnev).
  • Ajout du paramètre use_primary_key. Définissez-le sur false pour désactiver le granule pruning basé sur la clé primaire. #93319 (Nihal Z. Miaji).
  • Ajout du paramètre default_dictionary_database, qui permet à ClickHouse de résoudre les dictionnaires externes référencés sans qualificatif de base de données dans une base de données par défaut spécifiée. Cela simplifie la migration des dictionnaires globaux définis en XML vers des dictionnaires définis en SQL par base de données. #91412 (Dmitrii Plotnikov).
  • Ajout du paramètre check_named_collection_dependencies (activé par défaut) pour empêcher la suppression de collections nommées utilisées par des tables. #96181 (Pablo Marcos).
  • Ajout d’un ordonnanceur max-min fair pour le contrôle de la concurrence, offrant une meilleure équité en cas de forte sursouscription, lorsque de nombreuses requêtes se disputent un nombre limité de CPU slots. Le paramètre de serveur concurrent_threads_scheduler utilise désormais max_min_fair par défaut au lieu de fair_round_robin, de sorte que les requêtes de courte durée ne sont plus pénalisées par celles de longue durée. #94732 #95300 (Sergei Trifonov).
  • Ajout des options de configuration logger.startup_console_level et logger.shutdown_console_level pour remplacer respectivement le niveau de log de la console pendant le démarrage et l’arrêt de ClickHouse. #95919 (Garrett Thomas).

Monitoring

  • Ajout d’une métrique ClickHouse_Info au endpoint Prometheus /metrics, contenant des informations de version, ce qui permet de créer des graphiques pour suivre des informations détaillées sur les versions au fil du temps. #91125 (Christoph Wurm).

Fonctionnalités expérimentales

  • La recherche vectorielle peut désormais répartir la charge entre les répliques d’un cluster, ce qui permet de prendre en charge de grands index vectoriels qui dépassent la capacité mémoire d’une seule VM. #95876 (Shankar Iyer).
  • Ajout d’un AST fuzzer côté serveur, piloté par les paramètres ast_fuzzer_runs et ast_fuzzer_any_query. Une fois activé, le serveur exécute des variantes aléatoires de chaque requête après son exécution normale, puis en ignore les résultats. #97568 (Alexey Milovidov).

Améliorations

Requêtes et SQL

  • Les sous-requêtes corrélées prennent désormais en charge davantage de moteurs de table et de types de sources de données. #90175 (Dmitry Novik).
  • Les expressions IN non constantes sont désormais prises en charge pour les scalaires (par ex. val1 NOT IN if(cond, val2, val3)). #93495 (Yarik Briukhovetskyi).
  • Prise en charge ajoutée des alias de table étendus pour les JOIN (par ex. SELECT * FROM (SELECT 1) AS t(a) JOIN (SELECT 1) AS u(b) ON a = b). #95331 (Yarik Briukhovetskyi).
  • EXPLAIN indices = 1 est désormais pris en charge comme alias de EXPLAIN indexes = 1. #92774 (Pranav Tiwari).
  • Amélioration du pushdown des filtres pour les fonctions de table numbers et primes — ClickHouse peut désormais déduire des bornes de valeurs prudentes à partir des conditions WHERE afin de limiter la génération de séquences et d’éviter les scans non bornés. #96115 (Nihal Z. Miaji).
  • L’optimisation des ensembles équivalents fonctionne désormais sur plusieurs opérations INNER JOIN consécutives, de sorte que les filtres appliqués à n’importe quelle table de la chaîne sont automatiquement propagés à toutes les tables liées. #96596 (Vladimir Cherkasov).
  • Les fonctions de table cluster automatiques sont désormais utilisées pour les sous-requêtes simples dans FROM. #96332 (phulv94).
  • L’index de clé primaire est désormais utilisé lors du filtrage avec startsWithUTF8 si le préfixe ne contient que des caractères ASCII. #97055 (vkcku).
  • assumeNotNull, coalesce et ifNull permettent désormais l’élagage de la clé primaire et du skip index pour les prédicats de plage lorsque les colonnes de clé sont encapsulées dans ces fonctions. #94754 (Nihal Z. Miaji).
  • Les colonnes inutilisées sont désormais également supprimées de l’étape de lecture lors de la lecture depuis MergeTree, ce qui est particulièrement utile lorsqu’un filtre est poussé dans PREWHERE. #89982 (János Benjamin Antal).
  • L’optimisation use_join_disjunctions_push_down est désormais activée par défaut. #89313 (Alexey Milovidov).
  • L’optimisation enable_join_runtime_filters est désormais activée par défaut. #89314 (Alexey Milovidov).
  • La surcharge des filtres runtime de JOIN est désormais réduite grâce à la désactivation automatique des filtres lorsque trop de bits sont définis dans le filtre de Bloom ou que trop peu de lignes sont filtrées. #91578 (Alexander Gololobov).
  • Ajout du paramètre use_hash_table_stats_for_join_reordering (activé par défaut) pour contrôler si les statistiques de taille des tables de hachage à l’exécution sont utilisées pour le réordonnancement des jointures. #93912 (Vladimir Cherkasov).
  • L’analyse des index n’est désormais effectuée qu’une seule fois, que la requête s’exécute localement ou avec des répliques parallèles. #94854 (Nikita Taranov).
  • Si un skip index dans une requête FINAL porte sur une colonne faisant partie de la clé primaire, la vérification supplémentaire d’intersection de la clé primaire dans les autres parts est désormais ignorée. #93899 (Shankar Iyer).
  • DROP DATABASE supprime désormais les tables dans l’ordre inverse des dépendances, ce qui améliore la robustesse face aux crashs lorsque la base de données contient des tables avec des dépendances de chargement. #97057 (Alexey Milovidov).
  • L’attente synchrone des mutations respecte désormais l’annulation des requêtes et les limites de temps. #96756 (Alexey Milovidov).
  • La résurrection de données supprimées est désormais évitée si ADD COLUMN est exécuté rapidement après une mutation DROP COLUMN. #96713 (Alexey Milovidov).
  • Les expressions ALTER en conflit avec UPDATE et RENAME COLUMN lèvent désormais une exception appropriée au lieu d’une erreur logique. #96022 (Alexey Milovidov).
  • Le nombre total estimé de lignes et les statistiques NDV (nombre de valeurs distinctes) sont désormais collectés pour les colonnes de clé d’agrégation. #92812 (Alexander Gololobov).
  • Toutes les répliques peuvent désormais récupérer des plages orphelines lors de la lecture avec répliques parallèles, ce qui améliore l’équilibrage de charge et réduit la latence de queue. #91374 (zoomxi).
  • La précision de l’estimation a été améliorée pour les répliques parallèles automatiques avec des filtres PREWHERE hautement sélectifs. #97231 (Nikita Taranov).
  • joinGet prend désormais en charge les tables temporaires. #92973 (Eduard Karacharov).
  • L’agrégation externe, le tri et la jointure respectent désormais le paramètre de requête temporary_files_codec dans tous les contextes. #92388 (Vladimir Cherkasov).
  • Les optimisations du plan de recherche de similarité vectorielle ne sont désormais appliquées que lorsqu’un index existe pour la colonne de recherche. #94998 (Eduard Karacharov).

Moteurs de table et stockage

  • StorageEmbeddedRocksDB prend désormais en charge plusieurs colonnes comme clé primaire. #33917 (usurai).
  • Ajout de la syntaxe ALTER TABLE <table> ATTACH PART <part_name> FROM <directory_name>, qui permet de rattacher des parts depuis des sous-répertoires quelconques de detached/ (par ex. des parts avec les préfixes broken-on-start ou unexpected) sans avoir à les renommer manuellement dans le système de fichiers. #74816 (Anton Popov).
  • min_free_disk_bytes_to_perform_insert fonctionne désormais correctement avec les volumes JBOD. #90878 (Aleksandr Musorin).
  • max_parts_to_merge_at_once est désormais respecté lors des fusions de suppression de parts liées au TTL. #95315 (Kseniia Sumarokova).
  • Les opérations en arrière-plan (mutation, fusion) peuvent désormais être configurées indépendamment via un profil background, au lieu de partager les paramètres des requêtes classiques via le profil default. #93905 (Arsen Muk).
  • Amélioration de la lecture des sous-colonnes grâce à un calcul correct de la taille, réduisant l’utilisation mémoire et améliorant les performances. #96251 (Pavel Kruglov).
  • Limitation du nombre de flux de pipeline générés avec split_intersecting_parts_ranges_into_layers afin d’éviter une consommation mémoire excessive. #96478 (Nikita Taranov).
  • L’index textuel est désormais GA. #96794 (Robert Schulze).
  • QBit est désormais GA. #95358 (Raufs Dunamalijevs).
  • QBit prend désormais en charge les comparaisons d’égalité. #94078 (Raufs Dunamalijevs).
  • Lors de l’enregistrement du schéma de table avec enable_positional_arguments_for_projections, les expressions sont désormais substituées aux arguments positionnels, ce qui permet de redémarrer le serveur avec ce paramètre désactivé. #96372 (Alexey Milovidov).
  • Dans les bases de données Replicated, le cluster mis en cache n’est plus mis à jour pour chaque requête factice. #96897 (Tuan Pham Anh).
  • Ajout de la requête SYSTEM RESET DDL WORKER [ON CLUSTER] pour réinitialiser l’état de DDLWorker, utile pour actualiser l’activité des réplicas lorsque les ID d’hôte sont mis à jour. #93780 (Tuan Pham Anh).

Lacs de données

  • Ajout de la prise en charge des vecteurs de suppression dans DeltaLake. #93852 (Kseniia Sumarokova).
  • Les vecteurs de suppression sont désormais également pris en charge pour deltaLakeCluster. #94365 (Kseniia Sumarokova).
  • DeltaLake est désormais disponible sur macOS. #95985 (Alexey Milovidov).
  • DeltaLake utilise désormais les résultats de count() issus des métadonnées et affiche des statistiques de table correctes (nombre total d’octets et de lignes) dans system.tables. #96190 (Kseniia Sumarokova).
  • Les lectures depuis le stockage d’objet sont désormais ignorées lors des requêtes sur des tables DeltaLake depuis system.tables. #95899 (Antonio Andelic).
  • Ajout de la commande SYSTEM RELOAD DELTA KERNEL TRACING <level> pour déboguer la journalisation de delta-kernel. #96763 (Kseniia Sumarokova).
  • L’emplacement des métadonnées des tables Iceberg est désormais déduit automatiquement si metadata_location n’est pas spécifié dans les métadonnées Glue. #91994 (Andrey Zvonov).
  • Les entrées des fichiers manifest Iceberg analysent désormais les bornes inférieure et supérieure des noms de fichiers de suppression par position, ce qui améliore la sélection des fichiers de données. #93980 (Daniil Ivanik).
  • Activation de l’optimisation PREWHERE pour les tables Iceberg. #95476 (Konstantin Vedernikov).
  • Les limites de threads et de mémoire sont désormais partagées entre les lecteurs de fichiers de données et de fichiers de suppression par position dans les tables Iceberg. #94701 (Yang Jiang).
  • Ajout de la prise en charge de ALTER TABLE RENAME COLUMN pour les tables Iceberg. #97455 (murphy-4o).
  • Ajout de la prise en charge de Google Cloud Storage pour les lacs de données. #93866 (Konstantin Vedernikov).
  • Les jetons d’accès S3 sont désormais actualisés dynamiquement lors de longues requêtes avec Unity Catalog. #95069 (Konstantin Vedernikov).
  • Ajout d’un contrôle d’accès basé sur les rôles au Glue catalog via les paramètres aws_role_arn et aws_role_session_name. #90825 (Antonio Andelic).

S3Queue

  • S3Queue prend désormais en charge le partitionnement Hive en mode ordered. #81040 (Anton Ivashkin).
  • Refactorisation du traitement en mode ordered de S3Queue avec des buckets, ce qui réduit le nombre de requêtes à Keeper et améliore les performances. #92889 (Kseniia Sumarokova).
  • Ajout d’une prise en charge plus générique du partitionnement pour le mode ordered de S3Queue. #94321 (Bharat Nallan).
  • Ajout d’un bucketing basé sur la clé de partitionnement pour S3Queue en mode ordered. #94698 (Bharat Nallan).
  • Prise en charge du ZooKeeper auxiliaire pour S3Queue via le paramètre keeper_path. #95203 (Diego Nieto).
  • En mode ordered, S3(Azure)Queue nettoie désormais les nœuds en échec en assurant le suivi des limites. #94412 (Kseniia Sumarokova).

S3 et stockage d’objets

  • Les en-têtes S3 x-amz-server-side-encryption ne sont plus propagés aux requêtes HeadObject, UploadPart et CompleteMultipartUpload. #64577 (Francisco J. Jurado Moreno).
  • storage_class_name peut désormais être spécifié dans des collections nommées pour le moteur de table S3 et la fonction de table s3. #91926 (János Benjamin Antal).
  • Correction de la limitation de débit du point de terminaison des métadonnées EC2 lors de l’exécution d’un grand nombre de requêtes S3 concurrentes avec des identifiants de profil d’instance : le fournisseur d’identifiants est désormais mis en cache et partagé entre toutes les requêtes. #92891 (Sav).
  • Ajout de la prise en charge de la compatibilité MinIO dans le SDK AWS S3 C++, avec mappage des codes d’erreur pour les erreurs spécifiques à MinIO, ce qui améliore la fiabilité des clusters MinIO autohébergés. #93082 (XiaoBinMu).
  • Amélioration des messages d’erreur d’authentification S3 avec des indications invitant à vérifier les identifiants. #95648 (Gerald Latkovic).
  • Azure Blob Storage bascule désormais vers une copie en lecture-écriture lorsque la copie native échoue, quelle que soit l’erreur rencontrée (auparavant, uniquement en cas d’Unauthorized). #92888 (Smita Kulkarni).

Fonctions

  • avg() prend désormais en charge les valeurs Date, DateTime et Time en argument. #87845 (Yarik Briukhovetskyi).
  • mapContainsKeyLike et mapContainsValueLike peuvent désormais tirer parti d’un index textuel sur mapKeys() ou mapValues(). #93049 (Michael Jarrett).
  • flipCoordinates prend désormais en charge le type Geometry. #93303 (Bharat Nallan).
  • La limite de 64 jetons pour les fonctions hasAnyTokens et hasAllTokens a été supprimée. #95152 (Elmi Ahmadov).
  • distanceCosine a été ajouté comme alias de cosineDistance, en cohérence avec les autres fonctions de distance. #96065 (Raufs Dunamalijevs).
  • La fonction iif a été ajoutée à ClickHouse KQL. #94790 (happyso).
  • use_variant_as_common_type est désormais activé par défaut, ce qui autorise les types incompatibles dans Array, les requêtes UNION et les branches if/multiIf/case. #90677 (Alexey Milovidov).

Paramètres et configuration

  • use_skip_indexes_on_data_read est désormais activé par défaut. #93407 (Shankar Iyer).
  • Ajout du paramètre add_minmax_index_for_time_columns — lorsqu’il est activé, il crée automatiquement des index minmax pour toutes les colonnes Date, Date32, Time, Time64, DateTime et DateTime64. #93355 (Michael Jarrett).
  • Ajout du paramètre materialize_statistics_on_merge (activé par défaut) pour contrôler si les statistiques sont matérialisées lors des fusions. #93379 (Han Fei).
  • Ajout du paramètre input_format_binary_max_type_complexity pour limiter le nombre total de nœuds de type pouvant être décodés en format binaire, afin d’empêcher les payloads malveillants. #92519 (Raufs Dunamalijevs).
  • Ajout du paramètre trace_profile_events_list pour limiter le tracing avec trace_profile_event à des noms d’événements spécifiques. #92298 (Alexey Milovidov).
  • Ajout du paramètre type_json_allow_duplicated_key_with_literal_and_nested_object pour autoriser les chemins dupliqués dans JSON lorsqu’un chemin est un littéral et l’autre un objet imbriqué, afin d’assurer la rétrocompatibilité avec les données créées avant l’application de la déduplication des chemins. #93604 (Pavel Kruglov).
  • Ajout du paramètre MergeTree merge_max_dynamic_subcolumns_in_compact_part et du paramètre au niveau de la requête max_dynamic_subcolumns_in_json_type_parsing pour limiter les sous-colonnes dynamiques dans les colonnes JSON lors de la fusion et du parsing. #94184 (Pavel Kruglov).
  • Ajout de use_statistics comme alias de allow_statistics_optimize, en cohérence avec use_primary_key et use_skip_indexes. #94366 (Robert Schulze).
  • input_format_numbers_enum_on_conversion_error a été activé pour la conversion de Number vers Enum afin de vérifier l’existence des éléments. #94384 (Elmi Ahmadov).
  • Ajout d’un paramètre pour lever une exception lorsqu’une table a des row policies mais qu’aucune ne s’applique à l’utilisateur actuel, afin de détecter d’éventuelles erreurs de configuration. #95014 (Vitaly Baranov).
  • enable_max_bytes_limit_for_min_age_to_force_merge est désormais activé par défaut pour la version de compatibilité 26.2 et ultérieure. #95917 (Christoph Wurm).
  • core_dump.size_limit peut désormais être rechargé à chaud sans redémarrage du serveur. #96524 (Miсhael Stetsyuk).
  • Les surcharges en ligne de commande sont désormais prises en compte lors du rechargement de la configuration. #80295 (Alexey Milovidov).
  • Ajout d’une stratégie de rotation composite (taille + temps) pour les logs du serveur. #87620 (Jianmei Zhang).
  • L’analyse distribuée des index peut désormais être activée en fonction du nombre de parts (distributed_index_analysis_min_parts_to_activate) et de la taille des index (distributed_index_analysis_min_indexes_size_to_activate). #95216 (Azat Khuzhin).
  • Le cache des statistiques est désormais activé par défaut, avec une période de mise à jour de 300 secondes. #95841 (Han Fei).
  • Le paramètre de configuration path est désormais résolu par rapport au répertoire de travail au démarrage, ce qui évite que les répertoires de données soient placés à des emplacements inhabituels. #96305 (Alexey Milovidov).

Tables système et monitoring

  • Ajout de la colonne parts_postpone_reasons à system.mutations pour améliorer les diagnostics. #92206 (Shaohua Wang).
  • Ajout de la colonne creation (implicit/explicit) à system.data_skipping_indices. #92378 (Raúl Marín).
  • Les tâches en cours d’exécution sont désormais reflétées dans system.background_schedule_pool et dans la table de logs correspondante. #92587 (Azat Khuzhin).
  • Ajout de la Metric QueryNonInternal pour suivre le nombre de queries non internes en cours d’exécution, ce qui aide à surveiller la concurrence par rapport à la limite max_concurrent_queries. #94284 (Ashwath Singh).
  • Ajout d’une Metric asynchrone pour la durée écoulée du merge en cours d’exécution le plus long. #94825 (Raúl Marín).
  • Ajout de connection_address et connection_port à query_log pour refléter la connexion physique (utile en cas de connexion via un proxy). #95471 (Yakov Olkhovskiy).
  • Ajout d’informations supplémentaires à system.crash_log. #94112 (Miсhael Stetsyuk).
  • Ajout du nom du composant à system.aggregated_zookeeper_log. #95882 (Antonio Andelic).
  • Ajout de la table system.tokenizers, qui affiche tous les tokenizers disponibles. #96753 (Robert Schulze).
  • Ajout de la table system.jemalloc_stats et du point de terminaison HTTP /jemalloc.html pour la visualisation interactive des statistiques de l’allocator mémoire jemalloc. #97077 (Antonio Andelic).
  • Ajout de la table system.jemalloc_profile_text pour lire et analyser les heap profiles de jemalloc, avec prise en charge des output formats raw, symbolized et collapsed. #97218 (Antonio Andelic).
  • Ajout de mutation_ids à system.part_log pour les événements MUTATE_PART et MUTATE_PART_START. #93811 (Shaohua Wang).
  • Les server settings globaux imbriqués (par ex. logger.level) sont désormais partiellement visibles dans system.server_settings. #94001 (Hechem Selmi).
  • view_duration_ms affiche désormais la durée pendant laquelle un group était actif, plutôt que la somme des durées des threads. #94966 (Sema Checherinda).
  • system.blob_storage_log est désormais disponible pour Azure Blob Storage, Local et HDFS. Ajout de la colonne error_code. #93105 (Alexey Milovidov).
  • Les tâches d’arrière-plan plus lentes que la moyenne sont désormais consignées avec un threshold configurable (background_schedule_pool_log.duration_threshold_milliseconds, 30ms par défaut). #92965 (Azat Khuzhin).
  • Les passwords provenant du stockage URL ne sont plus affichés dans le query log. #93245 (Konstantin Vedernikov).

ClickHouse Keeper

  • Gère correctement les lacunes dans les entrées de journal de Keeper lorsque les logs se trouvent avant le dernier index validé. #90403 (Antonio Andelic).
  • Ajout du traçage OpenTelemetry pour les requêtes Keeper. #91332 (Miсhael Stetsyuk).
  • Ajout de nouvelles métriques Keeper : KeeperChangelogWrittenBytes, KeeperChangelogFileSyncMicroseconds, KeeperSnapshotWrittenBytes, KeeperSnapshotFileSyncMicroseconds, KeeperBatchSizeElements et KeeperBatchSizeBytes. #92149 (Miсhael Stetsyuk).
  • Les extensions Keeper CHECK_STAT et TRY_REMOVE sont désormais activées par défaut. #93886 (Mikhail Artemenko).
  • Keeper lève désormais une exception au lieu de s’interrompre lorsqu’il détecte un snapshot corrompu ou des changelogs incohérents, ce qui nécessite une intervention manuelle pour une récupération plus sûre. #94168 (Antonio Andelic).
  • Ajout des extensions with_data et with_stat aux requêtes Keeper getChildren, ce qui permet de récupérer les nœuds enfants avec leurs données et leurs statistiques en une seule opération. #94826 (Nikolay Degterinsky).
  • Ajout d’une vérification des erreurs de configuration de Keeper susceptibles d’entraîner des échecs lors de l’assemblage du cluster. #94682 (Konstantin Bogdanov).
  • Ajout de la prise en charge de l’extension Keeper with_data afin d’améliorer la récupération des tables dans Database Replicated. #96090 (Nikolay Degterinsky).
  • Il est désormais possible d’effectuer des insertions dans le ZooKeeper auxiliaire via system.zookeeper. #92092 (RinChanNOW).

Gestion de la mémoire

  • Optimisation de la réservation d’espace dans le cache du système de fichiers — les candidats à l’éviction sont désormais collectés sans conserver de verrou exclusif. #82764 (Kseniia Sumarokova).
  • Activation des lectures parallèles dans le tampon de lecture du cache du système de fichiers pour les moteurs de table/fonctions distants. #71781 (Kseniia Sumarokova).
  • Réduction de l’utilisation de la mémoire sur les systèmes non Linux grâce à l’activation de la purge immédiate des pages modifiées de jemalloc. #93360 (Eduard Karacharov).
  • La purge des pages modifiées de jemalloc s’exécute désormais dans un thread distinct du thread principal MemoryWorker. Ajout de la config memory_worker_purge_total_memory_threshold_ratio pour effectuer la purge en fonction du ratio d’utilisation totale de la mémoire. #94902 (Antonio Andelic).
  • Le mécanisme de decay des pages modifiées de jemalloc est désormais désactivé dynamiquement lorsque ClickHouse est soumis à une pression mémoire prolongée. #95145 (Antonio Andelic).
  • Ajout d’une vérification explicite de la consommation mémoire avant la lecture des données depuis MergeTree, avec une réduction des tailles de file d’attente du pool de threads sur la base du retour d’expérience en production. #94692 (Nikita Mikhaylov).
  • La limite totale de mémoire est désormais vérifiée avant l’authentification de l’utilisateur, avec levée de l’erreur memory limit exceeded si la limite est dépassée. #95003 (Nikolai Kochetov).
  • Correction d’une comptabilisation incorrecte de la mémoire pour le cache des conditions de requête. #95478 (Nikita Mikhaylov).
  • La détection de l’utilisation mémoire des requêtes pour le spill sur disque lors des opérations d’agrégation/de tri a été rendue plus robuste. #92500 (Azat Khuzhin).
  • L’ordonnanceur priorise désormais le thread MemoryWorker en cas de manque de CPU afin de protéger le processus. #94864 (Nikita Mikhaylov).
  • Correction d’un problème où ClickHouse ne respectait pas les limites mémoire dans certains cas lors de la lecture depuis une table. #93715 (Nikita Mikhaylov).

Formats de données

  • Le lecteur Parquet permet désormais de lire les colonnes Tuple ou Map au format JSON. #92864 (Michael Kolupaev).
  • Le lecteur Parquet prend désormais en charge les tuples vides. #92868 (Michael Kolupaev).
  • Le type Date est désormais sérialisé dans le type natif date32 d’Arrow dans les formats Arrow/ArrowStream (auparavant uint16). L’ancien comportement peut être restauré avec le paramètre output_format_arrow_date_as_uint16. #96860 (Alexey Milovidov).
  • Le format de sortie Hash est désormais indépendant de la taille des blocs. #94503 (Alexey Milovidov).
  • Les types simples au format Pretty JSON ne sont plus affichés sur des lignes distinctes. #93836 (Pavel Kruglov).
  • L’inférence de schéma respecte désormais allow_experimental_nullable_tuple_type : lorsque cette option est activée, les objets imbriqués manquants peuvent devenir NULL au lieu d’un tuple d’éléments NULL. #95525 (Nihal Z. Miaji).
  • Le formateur SQL produit désormais COMMENT avant AS SELECT au lieu d’entourer SELECT de parenthèses. #96293 (Alexey Milovidov).
  • Compression optimisée des listes de postings avec simdcomp. #92871 (Peng Jian).

Sauvegarde et restauration

  • Ajout du paramètre de sauvegarde backup_data_from_refreshable_materialized_view_targets, qui permet de contrôler si les données des vues matérialisées actualisables doivent être sauvegardées. Les cibles des RMV avec la stratégie d’actualisation APPEND sont toujours sauvegardées. #93658 (Julia Kartseva).
  • Ajout de la prise en charge des collections nommées définies en SQL dans BACKUP/RESTORE pour S3 et Azure Blob Storage. #94605 (Pablo Marcos).

Collections nommées et dictionnaires

  • Les surcharges de paramètres des collections nommées sont désormais autorisées dans la table function MongoDB. #89616 (vanchaklar).
  • Les collections nommées sont désormais prises en charge pour les dictionnaires et les tables YTsaurus. #94582 (MikhailBurdukov).
  • Il est désormais possible de transmettre des descriptions de colonnes pour les sources de dictionnaire de tables dynamiques YTsaurus. #92391 (MikhailBurdukov).
  • Le schéma de la vue paramétrée est désormais affiché lorsqu’il est explicitement spécifié. #90220 (Grigorii Sokolik).

Déduplication

  • Refonte du paramètre insert_select_deduplicate pour ajouter des options de compatibilité descendante. #92951 (Sema Checherinda).
  • La déduplication avec les async inserts est désormais autorisée lorsque des vues matérialisées sont utilisées. #93957 (Sema Checherinda).

Autres améliorations

  • Amélioration de l’UX de SYSTEM INSTRUMENT ADD/REMOVE : les noms de fonction utilisent désormais des littéraux de chaîne, toutes les fonctions correspondantes sont patchées, et function_name est pris en charge dans REMOVE. #93345 (Pablo Marcos).
  • Ajout de SYSTEM NOTIFY FAILPOINT pour les failpoints pouvant être mis en pause, ainsi que de SYSTEM WAIT FAILPOINT pour PAUSE/RESUME. #92368 (Shaohua Wang).
  • Les noms de fonctions C++ dans system.trace_log, system.symbols et la fonction demangle s’affichent désormais correctement. #93075 (Alexey Milovidov).
  • Les profils jemalloc sont désormais écrits avec les symboles, ce qui élimine la nécessité d’un binaire lors de la génération d’un heap profile. #93099 (Azat Khuzhin).
  • Correction d’un crash lors de l’attachement d’une table à une base de données MaterializedPostgreSQL si dropReplicationSlot lève une exception pendant le déroulement de pile. #96871 (Alexey Milovidov).
  • Correction des résidus potentiels laissés lorsque CREATE TABLE échoue. #94174 (Azat Khuzhin).
  • Correction d’un accès à de la mémoire non initialisée lorsqu’une clé TLS protégée par mot de passe est utilisée. #94182 (Konstantin Bogdanov).
  • Lorsque alter table ... modify setting ... expire pendant l’acquisition d’un verrou, il renvoie désormais une erreur de timeout au lieu d’une erreur logique. #93856 (Han Fei).
  • Amélioration de l’interopérabilité des profileurs CPU et temps réel avec les timeouts de socket. #96601 (Sergei Trifonov).
  • Activation du durcissement rapide de libcxx pour les builds de release (principalement les vérifications de dépassement de limites), sans impact notable sur les performances. #94757 (Miсhael Stetsyuk).

Améliorations des performances

Performances des JOIN

  • Certaines opérations de hash join ont été accélérées grâce à l’implémentation d’un dispatch dynamique pour ColumnVector::replicate. #79573 (Raúl Marín).
  • Davantage de filtres sont désormais poussés dans les JOIN. #85556 (Nikita Taranov).
  • Extension du push down des filtres depuis les conditions JOIN ON pour les joins ANY, SEMI et ANTI lorsque le filtre n’utilise des entrées que d’un seul côté. #92584 (Dmitry Novik).
  • Des sets équivalents peuvent désormais être utilisés pour pousser les filtres dans SEMI JOIN. #92837 (Dmitry Novik).
  • Le traitement des lignes non jointes dans ParallelHashJoin a été parallélisé pour les prédicats complexes, via le paramètre parallel_non_joined_rows_processing (activé par défaut). #92068 (Yarik Briukhovetskyi).
  • Le hash join ignore désormais complètement la lecture du côté gauche lorsque le côté droit est vide, évitant ainsi un travail inutile en cas de filtrage ou d’agrégation coûteux. #94062 (Alexander Gololobov).
  • Les Runtime Filters de JOIN sont désormais pris en charge pour les JOIN RIGHT OUTER. #96183 (Hechem Selmi).
  • L’optimisation PREWHERE est désormais reportée après l’optimisation des Runtime Filters de JOIN, ce qui permet aussi de pousser les Runtime Filters vers PREWHERE. #95838 (Alexander Gololobov).

Optimisation des requêtes

  • Désactivation de l’optimisation de l’ordre de tri pour les fonctions de fenêtre lorsque la clé de partitionnement correspond à la clé de tri ou en est un préfixe, ce qui améliore les performances de l’exécution parallèle. #87299 (Nikita Taranov).
  • Les filtres externes sont désormais poussés dans les vues, ce qui permet d’appliquer PREWHERE à la fois sur les nœuds locaux et distants. #88316 (Igor Nikonov).
  • Optimisation des performances et de l’utilisation de la mémoire pour les valeurs fractionnaires de LIMIT et OFFSET. #91167 (Ahmed Gouda).
  • Les filtres constants sur les colonnes virtuelles ne sont plus évalués inutilement plusieurs fois. #91588 (c-end).
  • Toute expression déterministe dans la clé primaire (par ex. ORDER BY cityHash64(user_id)) peut désormais être utilisée pour le data skipping. ClickHouse applique l’expression aux constantes de la requête et utilise le résultat pour les recherches dans l’index de clé primaire avec =, IN et has. Pour les expressions injectives, les formes négatives (!=, NOT IN, NOT has) sont également prises en charge. #92952 (Nihal Z. Miaji).
  • L’optimisation de lecture ordonnée détecte désormais lorsque les colonnes de ORDER BY sont constantes du fait des conditions WHERE, ce qui permet des lectures efficaces en ordre inverse. Cela profite aux requêtes multi-tenant comme WHERE tenant='42' ORDER BY tenant, event_time DESC. #94103 (matanper).
  • Pour les requêtes FINAL utilisant une condition sur la clé primaire suivie de skip indexes, l’étape PrimaryKeyExpand ne vérifie désormais que les plages de clé primaire présélectionnées au départ. #94903 (Shankar Iyer).
  • L’optimisation de matérialisation paresseuse s’applique désormais à toutes les branches d’une requête UNION ALL, et non plus seulement à la première, ce qui réduit les I/O pour les requêtes qui combinent plusieurs lectures triées et limitées provenant de différentes tables MergeTree. #96832 (Federico Ginosa).

Performances des fonctions et de l’agrégation

  • La compilation JIT couvre désormais un plus grand nombre de fonctions. #88770 (Alexey Milovidov).
  • Optimisation de la fonction d’agrégation distinctJSONPaths afin de ne lire que les chemins JSON à partir des data parts, au lieu de la colonne JSON complète. #92196 (Pavel Kruglov).
  • Optimisation de uniqExact lorsque des éléments identiques se suivent souvent. #93268 (Alexey Milovidov).
  • Optimisation de isValidASCII pour les valeurs d’entrée entièrement en ASCII. #93347 (Robert Schulze).
  • Accélération de uniq sur les types numériques grâce au traitement des insertions par lots lorsque c’est possible (pas de valeurs nulles, pas de -If, pas de GROUP BY, ni IPv6 ni String). #95904 (Raúl Marín).

Performances du stockage et des E/S

  • Correction du Parquet Reader V3 Prefetcher pour utiliser une logique de lecture aléatoire plus rapide. #91435 (Arsen Muk).
  • Amélioration des performances de icebergCluster. #91537 (Yang Jiang).
  • Réduction de l’utilisation mémoire d’INSERT et des fusions pour les tables très larges avec des Wide parts grâce à l’activation de buffers d’écriture adaptatifs. Ajout également de la prise en charge des buffers d’écriture adaptatifs pour les disques chiffrés. #92250 (Azat Khuzhin).
  • Amélioration des performances de la recherche en texte intégral avec l’index de texte et le tokenizer sparseGrams en réduisant le nombre de tokens recherchés. #93078 (Anton Popov).
  • Accélération de la compression du codec T64 grâce au dispatch dynamique sur x86. #95881 (Raúl Marín).
  • Accélération de la décompression LZ4 des blocs de 32 octets sur x86. #96778 (Raúl Marín).
  • L’optimisation de direct read de l’index de texte fonctionne désormais partiellement : les parts disposant d’un index de texte matérialisé l’utiliseront, tandis que les parts qui n’en disposent pas reviendront à l’expression de filtre d’origine. #96411 (Anton Popov).
  • Optimisation du calcul de l’index de saut minmax lors de l’INSERT en supprimant une copie de données inutile et en activant le calcul min/max vectorisé pour les colonnes numériques. #97392 (Raúl Marín).
  • Ajout d’index secondaires minmax sur les colonnes temporelles et d’index bloom_filter sur les colonnes query_id/initial_query_id dans les tables de logs système pour accélérer le filtrage. #96712 (Alexey Milovidov).
  • Évitement d’une régression de l’utilisation mémoire sur INSERT lorsque la déduplication n’est pas activée. #96503 (Alexey Milovidov).

Optimisation de la mémoire

  • Réduction de l’empreinte mémoire de ASTLiteral par suppression des champs inutilisés lorsque la coloration syntaxique et l’analyse de VALUES ne sont pas actives. #93974 (Ilya Yatsishin).
  • Introduction d’une classe AST Enum spécialisée qui stocke les paramètres de valeur sous forme de paires chaîne/entier au lieu d’enfants ASTLiteral génériques, ce qui réduit la consommation mémoire. #94178 (Ilya Yatsishin).
  • Optimisation de la consommation mémoire des objets AST de tuple nommé en stockant directement les noms de colonnes sous forme de chaînes, au lieu de nœuds littéraux AST génériques. #94704 (Ilya Yatsishin).
  • Réduction de la taille de la structure CachedOnDiskReadBufferFromFile d’un facteur d’environ 50. #96098 (Azat Khuzhin).
  • HashTable::resize ne copie plus les anciennes données lorsque la table est vide. #96180 (Raúl Marín).

Optimisations internes

  • Adoption de la méthode « fastrange » (Daniel Lemire) pour le partitionnement des données dans le pipeline de requête, ce qui améliore le tri parallèle et les opérations JOIN. #93080 (Alexey Milovidov).
  • Amélioration de la dévirtualisation grâce à des options supplémentaires de l’éditeur de liens. #94737 (Nikita Taranov).
  • Amélioration des performances du clonage de répliques pour les tables ReplicatedMergeTree comportant de nombreuses parts grâce au traitement par lots des requêtes ZooKeeper. #94847 (c-end).
  • Réduction de plus de 20 % de l’utilisation CPU du thread de réception de ZooKeeper dans observeOperations grâce à l’adoption d’un hachage plus rapide et de compteurs sans verrou. #95962 (Miсhael Stetsyuk).

Corrections de bugs

Correctifs JOIN

  • Correction de l’erreur INCOMPATIBLE_TYPE_OF_JOIN pour le stockage Join lorsque l’optimisation convertissant une jointure externe en jointure interne était appliquée. #84292 (Vladimir Cherkasov).
  • Correction d’une erreur logique pour les requêtes comportant plusieurs JOIN avec clause USING et join_use_nulls. #92251 (Vladimir Cherkasov).
  • Correction d’une erreur logique lors du réordonnancement des jointures avec join_use_nulls. #92289 (Vladimir Cherkasov).
  • Correction d’un plantage possible avec le paramètre join_on_disk_max_files_to_merge. #92335 (Bharat Nallan).
  • Correction de LOGICAL_ERROR, causée par une modification indésirable du plan de requête lors de la conversion d’une jointure externe en jointure interne. Les contraintes de l’optimisation ont également été assouplies afin qu’elle s’applique lorsque des fonctions injectives sont utilisées sur les clés d’agrégation pendant les jointures. #92503 (János Benjamin Antal).
  • Correction d’une erreur logique avec plusieurs jointures sur une condition constante et join_use_nulls. #92892 (Vladimir Cherkasov).
  • Correction du cas NULL != NULL pour full_sorting_join sur une colonne LowCardinality(Nullable(T)). #92924 (Vladimir Cherkasov).
  • Correction des résultats de jointure lorsque la clé de jointure côté droit était une colonne sparse. #93038 (Amos Bird).
  • Correction du fonctionnement incorrect des filtres d’exécution lorsque LEFT ANTI JOIN comportait une post-condition supplémentaire. #91824 (Alexander Gololobov).
  • Correction d’une erreur logique lorsque des filtres d’exécution étaient utilisés dans une requête avec totaux pour la table de droite. #93330 (Alexander Gololobov).
  • Correction d’une erreur logique déclenchée dans certains cas lorsque des filtres d’exécution de jointure étaient ajoutés au plan de requête, en raison du renvoi incorrect de colonnes constantes dupliquées. #93144 (Alexander Gololobov).
  • Correction de la fonction __applyFilter utilisée par les filtres d’exécution de jointure, qui renvoyait ILLEGAL_TYPE_OF_ARGUMENT dans certains cas valides. #93187 (Alexander Gololobov).
  • Correction du fait que des filtres d’exécution n’étaient pas ajoutés lors d’une jointure avec une table de droite déjà remplie. #93211 (Alexander Gololobov).
  • Correction de l’erreur NOT_FOUND_COLUMN_IN_BLOCK lorsque le filtre d’exécution était activé et que les tables jointes renvoyaient plusieurs fois la même colonne. #93526 (Alexander Gololobov).
  • Correction du fait que FilterStep n’était pas correctement ajouté lorsqu’un filtre d’exécution de jointure était appliqué à une table Merge. #94021 (Alexander Gololobov).
  • Correction de la conversion de type vers un supertype lors de l’opération de jointure du stockage Join avec clause USING. #94000 (Dmitry Novik).
  • Correction des requêtes avec répliques parallèles et JOIN sur une table non-MergeTree. #93902 (Igor Nikonov).
  • Correction d’une condition de concurrence sur une colonne de jointure Nullable dans les runtime filters. #95775 (Hechem Selmi).
  • Correction du problème où une chaîne vide devenait NULL dans une table Join avec une clé Nullable(String). #96002 (Alexey Milovidov).
  • Correction de l’erreur NOT_SUPPORTED lors de l’utilisation de l’algorithme de jointure direct avec une table MergeTree vide. #95935 (Vladimir Cherkasov).
  • Correction de résultats incorrects dans des requêtes impliquant des jointures externes combinées à plusieurs INNER JOIN, en raison d’un réordonnancement invalide des jointures lorsque la condition ON d’une jointure externe référençait des colonnes de plusieurs tables jointes auparavant. #96193 (Vladimir Cherkasov).
  • Correction d’une exception de runtime filter pour des colonnes Tuple avec des sous-champs Nullable. #96509 (Alexey Milovidov).
  • Correction de requêtes avec des CROSS JOIN et des répliques parallèles activées qui renvoyaient des résultats incorrects. #96848 (Igor Nikonov).
  • Correction de arrayJoin, qui produisait des lignes dupliquées lorsqu’il était utilisé avec INNER JOIN et une clause WHERE, à cause d’un push-down partiel de prédicat qui poussait incorrectement sous un JOIN des filtres contenant arrayJoin. #96989 (Alexey Milovidov).
  • Correction de LOGICAL_ERROR lorsque arrayJoin dans la clause WHERE référençait des colonnes des deux côtés d’un JOIN. #97239 (Alexey Milovidov).
  • Correction d’une erreur logique lors de l’utilisation d’un matcher (*) à l’intérieur d’une fonction lambda dans une clause VALUES au sein d’un JOIN avec USING. #95661 (Vladimir Cherkasov).
  • Correction d’une possible erreur logique avec le matcher (*, table.*) et analyzer_compatibility_join_using_top_level_identifier lorsque la colonne USING avait des types différents. #95808 (Vladimir Cherkasov).
  • Correction d’une erreur logique avec analyzer_compatibility_join_using_top_level_identifier et les colonnes ALIAS. #97297 (Vladimir Cherkasov).
  • Correction d’un plantage dans l’ancien analyseur lors de l’utilisation de JOIN avec des alias dupliqués. #96405 (Ilya Golshtein).

Correctifs pour les requêtes et l’analyseur

  • Correction d’un bug où les gestionnaires de requêtes prédéfinies interprétaient les espaces de fin comme des données lors des insertions. #83604 (Fabian Ponce).
  • Correction d’un bug d’agrégation avec projection qui produisait une exception après des ALTER ne modifiant que les métadonnées, comme l’extension des éléments d’Enum. #84143 (Alexey Milovidov).
  • Correction de count_distinct_optimization pour les fonctions de fenêtre et les appels avec plusieurs arguments. #92376 (Raúl Marín).
  • Correction du formatage incohérent de l’AST de arrayElement avec un littéral nié. #92293 (Pavel Kruglov).
  • Correction de NOT IN avec des arguments de tableau non constants qui renvoyait des valeurs incorrectes. #93314 (Yarik Briukhovetskyi).
  • Correction d’une erreur de comparaison null-safe impliquant le type Nothing. #91884 (Yarik Briukhovetskyi).
  • Correction de l’erreur Not found column pour l’optimisation use_top_k_dynamic_filtering. #93316 (Nikolai Kochetov).
  • Correction de la suppression des colonnes inutilisées dans les sous-requêtes en présence d’une sous-requête scalaire corrélée. #93273 (Dmitry Novik).
  • Correction de optimize_inverse_dictionary_lookup, qui ne fonctionnait pas avec les requêtes distribuées lorsque la clé était d’un type entier signé. #93848 (Nihal Z. Miaji).
  • Correction de lag/lead, qui ne fonctionnait pas avec les requêtes distribuées remote(). #93858 (Nihal Z. Miaji).
  • Correction d’un bug dans le mécanisme de data skipping lorsque not match(...) était utilisé dans WHERE, provoquant des résultats incorrects. #92726 (Nihal Z. Miaji).
  • Correction d’un bug dans le mécanisme de data skipping lorsque not materialize(...) ou not CAST(...) était utilisé dans WHERE, provoquant des résultats incorrects. #93017 (Nihal Z. Miaji).
  • Correction d’une erreur logique lors de l’analyse d’index lorsqu’un tableau vide était utilisé dans la fonction has. #92995 (Nihal Z. Miaji).
  • Correction d’une erreur logique dans un cas rare où un tuple vide était utilisé avec une colonne Map. #93814 (Nihal Z. Miaji).
  • Correction de requêtes utilisant le sharding par PK qui échouaient avec une condition fausse. #92815 (Yarik Briukhovetskyi).
  • Correction d’un problème de planification de requêtes du moteur de table Merge qui renvoyait ILLEGAL_COLUMN pour hostName() lors de la fusion de tables locales et distantes/Distributed. #93286 (Jinlin).
  • Correction de l’erreur NO_SUCH_COLUMN_IN_TABLE dans le moteur Merge sur des tables avec alias. #92910 (Pavel Kruglov).
  • Correction d’une requête SELECT avec un prédicat portant sur plusieurs colonnes, des skip indexes de type bloom filter et des conditions OR et NOT, qui renvoyait des résultats incohérents. #94026 (Shankar Iyer).
  • Correction de l’application d’une projection lorsque le filtre contenait des sous-colonnes. #93141 (Pavel Kruglov).
  • Correction de la corruption de _part_offset lorsque des projections étaient reconstruites pendant les fusions, et optimisation du traitement des projections en évitant des lectures inutiles. #93827 (Amos Bird).
  • Empêche que différentes colonnes interpolées fusionnent en une même colonne dans un block lorsqu’elles étaient en pratique des alias de la même colonne. #93197 (Yakov Olkhovskiy).
  • Suppression des colonnes inutilisées lorsque la projection était reconstruite pendant une fusion, réduisant l’utilisation mémoire et le nombre de parts temporaires créées. #93233 (Nikolai Kochetov).
  • Correction d’une erreur logique dans certains cas lorsque LIMIT/OFFSET négatif était utilisé dans des requêtes distribuées. #95357 (Nihal Z. Miaji).
  • Correction d’une erreur logique dans certains cas lorsque LIMIT/OFFSET fractionnaire était utilisé dans des requêtes distribuées. #96475 (Nihal Z. Miaji).
  • Correction de la fonction IN qui renvoyait des résultats incorrects avec des valeurs NULL lorsque transform_null_in était activé. #95674 (Nihal Z. Miaji).
  • Correction de l’échec de IN (col) avec une unique référence de colonne, avec l’erreur UNSUPPORTED_METHOD. #97646 (Alexey Milovidov).
  • Correction de la réécriture par optimize_syntax_fuse_functions de sum/count/avg en sumCount() lorsque l’argument d’agrégation était LowCardinality(Nullable). #96239 (Nihal Z. Miaji).
  • Correction d’un élagage des partitions incorrect pour les fonctions not IN et not has. #96241 (Nihal Z. Miaji).
  • Correction d’une erreur de filtre prewhere causée par des expressions lambda dans prewhere. #95395 (Xiaozhe Yu).
  • Correction de LOGICAL_ERROR dans l’analyseur de requêtes lorsqu’une expression lambda était transmise là où une valeur concrète était attendue. #96892 (Alexey Milovidov).
  • Correction d’un déréférencement de pointeur nul dans certaines expressions avec des fonctions lambda. #96479 (Alexey Milovidov).
  • Correction du fait que les SETTINGS par sous-requête n’étaient pas appliqués aux fonctions de table comme file dans les CTE et les sous-requêtes. #96882 (Alexey Milovidov).
  • Correction d’une collision de hachage dans le cache des conditions de requête pour les constantes repliées de CTE, ce qui pouvait entraîner des résultats de requête erronés. #96172 (Alexey Milovidov).
  • Correction de l’erreur BAD_ARGUMENTS lors de requêtes sur des tables contenant des expressions lambda dans des colonnes ALIAS via la fonction de table merge(), avec l’analyseur activé. #97551 (Alexey Milovidov).
  • Correction de EXCEPT ALL et INTERSECT ALL, qui ignoraient les multiplicités de lignes et se comportaient comme leurs équivalents DISTINCT. #96876 (Alexey Milovidov).
  • Correction d’un échec d’assertion dans WindowTransform avec un grand décalage PRECEDING. #96026 (Alexey Milovidov).
  • Correction d’une exception lors de l’utilisation de fonctions de fenêtrage avec group_by_use_nulls = 1 et CUBE/ROLLUP/GROUPING SETS. #96878 (Alexey Milovidov).
  • Correction de l’interaction entre GROUPING SETS, group_by_use_nulls et Tuple avec LowCardinality, qui produisait une structure de bloc inattendue. #96358 (Alexey Milovidov).
  • Correction d’une erreur logique pendant GROUP BY ... WITH ROLLUP/CUBE lorsque les clés incluaient LowCardinality(Nullable(...)) dans Nullable(Tuple(...)). #97647 (Alexey Milovidov).
  • Correction d’un échec d’assertion dans IfTransformStringsToEnumPass lorsque if ou transform renvoyait Nullable(String). #97002 (Alexey Milovidov).
  • Correction de ACCESS_DENIED pour les utilisateurs ne disposant pas de l’autorisation CREATE TEMPORARY TABLE lorsque optimize_inverse_dictionary_lookup réécrivait les prédicats dictGet(...). #97484 (Nihal Z. Miaji).
  • Correction d’une incompatibilité de type de la fonction if entre UInt64 et Int32 dans un cas inhabituel de requêtes distribuées avec PREWHERE et inférence de type. #96012 (Alexey Milovidov).
  • Correction des requêtes compilées par JIT impliquant des types Bool. #96013 (Alexey Milovidov).
  • Correction de résultats incorrects lorsque des expressions compilées par JIT convertissaient DateTime en DateTime64 (par exemple dans CASE/if/multiIf avec des types DateTime mixtes). #96879 (Alexey Milovidov).
  • Correction de l’utilisation d’une valeur non initialisée dans formatDateTime avec des spécificateurs de format non à largeur fixe. #96133 (Alexey Milovidov).
  • Correction de std::terminate dans indexOfAssumeSorted lorsqu’il était appelé avec des types incompatibles. #96877 (Alexey Milovidov).
  • Les fonctions géométriques acceptent désormais des sous-types géométriques individuels en plus du type Variant Geometry. #97571 (Alexey Milovidov).
  • Correction de cas où des index affectaient les résultats de requêtes avec politique de lignes/PREWHERE et FINAL. #97076 (Yarik Briukhovetskyi).
  • L’optimisation de lecture dans l’ordre peut désormais utiliser les politiques au niveau des lignes. #97538 (Janos Benjamin Antal).
  • Correction de LOGICAL_ERROR lors de l’utilisation de colonnes dotées d’un index de texte avec la clause QUALIFY. #97313 (Alexey Milovidov).
  • Correction d’un plantage possible lorsque la clause WHERE contenait plus de 32 expressions avec AND/OR. #97698 (Shankar Iyer).
  • Correction d’une incompatibilité de structure de bloc dans l’optimisation removeUnusedColumns lors de l’utilisation de indexHint avec l’expansion de l’astérisque sur des tables avec FINAL. #97622 (Alexey Milovidov).
  • Correction d’une incohérence de formatage aller-retour de l’AST pour les littéraux de tuple aliasés à l’intérieur de parenthèses. #97418 (Alexey Milovidov).
  • Correction d’une incohérence de formatage de l’AST pour NOT (1, 1, 1). #97653 (Alexey Milovidov).

Correctifs MergeTree et stockage

  • Les noms de fichiers sont désormais toujours remplacés par des hash dans MergeTree si le système de fichiers est insensible à la casse. Auparavant, sur macOS, cela pouvait entraîner une corruption des données lorsque les noms de colonne/sous-colonne ne différaient que par la casse. #86559 (Pavel Kruglov).
  • Les vues matérialisées utilisent désormais comme contexte d’exécution la base de données dans laquelle elles ont été créées, ce qui permet d’omettre la qualification explicite de la base de données dans la requête SELECT de la vue. #88193 (Dmitry Kovalev).
  • Ajout d’une vérification complète des autorisations à l’étape de création pour la requête sous-jacente à une vue matérialisée. #89180 (pufit).
  • Correction d’une erreur logique lorsqu’une mutation sans transaction modifiait des parts dans une transaction active finalement annulée. #90469 (Shaohua Wang).
  • Correction d’un problème où system.warnings ne se mettait pas correctement à jour après la conversion d’une base de données ordinaire en base de données atomic. #90473 (sdk2).
  • Correction de LOGICAL_ERROR: Storage does not support transaction pendant ATTACH AS REPLICATED. #91772 (Shaohua Wang).
  • Correction d’une possible erreur FILE_DOESNT_EXIST après la mutation d’une colonne sparse avec ratio_of_defaults_for_sparse_serialization=0.0. #92860 (Pavel Kruglov).
  • Correction d’une possible erreur FILE_DOESNT_EXIST après la mutation d’une colonne sparse lorsque ratio_of_defaults_for_sparse_serialization était passé à 1.0 via alter. #93016 (Pavel Kruglov).
  • Correction d’une possible utilisation de parts obsolètes en raison d’une condition de concurrence TOCTOU sur des parts partagées. #93022 (Azat Khuzhin).
  • Héritage des paramètres d’information de sérialisation de la part source pendant la mutation dans MergeTree, corrigeant de possibles résultats de requête incorrects sur des parts mutées après des changements de sérialisation du type de données. #92419 (Pavel Kruglov).
  • Correction d’un possible conflit entre une colonne et une sous-colonne portant le même nom, entraînant une sérialisation incorrecte et des échecs de requête. #92453 (Pavel Kruglov).
  • Correction de NOT_FOUND_COLUMN_IN_BLOCK lors d’un insert dans une table avec une sous-colonne dans l’expression de partition. #92905 (Pavel Kruglov).
  • Correction d’une possible sous-colonne manquante dans une MV lors d’un alter de la table source. #93276 (Pavel Kruglov).
  • Correction de LOGICAL_ERROR lors de la restauration de ReplicatedMergeTree en présence d’une condition de concurrence de déduplication. #93612 (Pablo Marcos).
  • Correction de l’utilisation d’une colonne sparse pour la mise à jour TTL pendant la désérialisation directe, évitant l’erreur Unexpected type of result TTL column. #93619 (Pavel Kruglov).
  • Restauration des wrappers LowCardinality sur les résultats d’expressions SET si nécessaire pendant l’agrégation TTL. #92971 (Seva Potapov).
  • Correction de Cannot add action to empty ExpressionActionsChain pour ALTER TABLE REWRITE PARTS. #92754 (Azat Khuzhin).
  • Correction de la substitution des paramètres de requête dans les méthodes d’authentification de CREATE USER lors de l’utilisation de ON CLUSTER. #92777 (xiaohuanlin).
  • Ne tente plus de supprimer les répertoires temporaires au démarrage si une table MergeTree se trouve sur un disque en lecture seule. #92748 (Alexey Milovidov).
  • Correction de la matérialisation des index de saut créés à partir de sous-colonnes. #93708 (Anton Popov).
  • Correction de CLEAR COLUMN en présence d’index dépendants. #94057 (Raúl Marín).
  • Correction du rattachement des bases de données Replicated lorsque l’hôte interserveur changeait après un redémarrage. #93779 (Tuan Pham Anh).
  • Correction d’une erreur logique avec CREATE TABLE ... AS urlCluster() et le moteur de base de données Replicated. #92418 (Kseniia Sumarokova).
  • Correction d’une condition de concurrence entre REPLACE PARTITION et les mutations en arrière-plan, qui pouvait rendre visibles à la fois les anciennes et les nouvelles données. #96955 (Alexey Milovidov).
  • Correction de la condition de concurrence restante entre REPLACE PARTITION et les mutations en arrière-plan, qui pouvait faire réapparaître d’anciennes données. #97105 (Alexey Milovidov).
  • Correction des mutations bloquées lorsque PartCheckThread remettait un GET_PART en file d’attente pour une partie déjà mutée. #97162 (Alexey Milovidov).
  • Correction de l’échec de ALTER TABLE DROP COLUMN lorsqu’une mise à jour légère avait déjà été effectuée sur la même colonne. #96861 (Anton Popov).
  • Correction d’un déréférencement de pointeur nul lors de l’application de patch parts pendant des mises à jour légères. #97583 (Alexey Milovidov).
  • Les parties avec des projections inconnues ne sont plus marquées comme définitivement perdues. #95952 (Mikhail Artemenko).
  • Correction de CREATE TABLE ... CLONE AS ..., qui ignorait le qualificatif complet de la table source. #96415 (Hasyimi Bahrudin).
  • Correction de la régénération implicite des index dans les tables répliquées lors des modifications de métadonnées. #96600 (Raúl Marín).
  • Correction des index implicites avec des colonnes alias, et ajout d’une validation complète avant leur création. #97115 (Raúl Marín).
  • Correction de min(timestamp), qui renvoyait l’époque Unix (1970-01-01) via _minmax_count_projection après une fusion TTL lorsque toutes les lignes avaient été filtrées. #96703 (Raquel Barbadillo).
  • Correction de la combinaison de use_const_adaptive_granularity et index_granularity_bytes (granularité non adaptative), qui conduisait à un calcul erroné. #96143 (Alexey Milovidov).
  • Correction de l’exception Number of rows in lazy chunk does not match number of offsets lors de la lecture de tables avec une granularité d’index non adaptative utilisant ORDER BY ... LIMIT. #97270 (Alexey Milovidov).
  • Correction d’une régression dans la réplication zero-copy : des parts partagées pouvaient être supprimées avant que d’autres répliques n’aient fini de les récupérer. #95597 (filimonov).
  • Correction d’un problème dans SYSTEM RESTART REPLICA qui faisait disparaître une table de la base de données lorsque sa recréation échouait avec une exception autre que ZooKeeper, provoquant des incohérences d’empreinte des métadonnées dans DatabaseReplicated. #97276 (Alexey Milovidov).
  • Correction de l’exception assert_cast lors de la création des statistiques de colonnes après modification du type de colonne par ALTER TABLE MODIFY COLUMN. #97027 (Alexey Milovidov).
  • Lorsqu’aucune statistique n’est définie pour une table, ClickHouse n’essaie plus de les charger, ce qui évite une surcharge inutile. #96233 (Han Fei).
  • Correction de l’erreur logique There was an error: Cannot obtain error message lors de l’attente d’un DDL distribué et de la suppression simultanée de la base de données Replicated. #95664 (Alexander Tokmakov).
  • Correction d’une erreur logique dans KeyCondition lorsqu’une table avait une clé primaire Nullable et que la requête utilisait coalesce avec un premier argument constant. #96340 (Alexey Milovidov).

Corrections relatives aux types de données et à la sérialisation

  • Correction d’une erreur possible lors de la lecture de la sous-colonne de taille des types Dynamic/JSON. #95573 (Pavel Kruglov).
  • Correction d’un crash lors de l’application de tupleElement à des tableaux de JSON. #95647 (Pavel Kruglov).
  • Correction de l’exécution de tupleElement sur JSON avec des chemins imbriqués, qui renvoyait des résultats incorrects. #95907 (Pavel Kruglov).
  • Correction de tupleElement, qui levait une exception avec JSON pour des chemins avec des indications de type. #97728 (Pavel Kruglov).
  • Correction du comportement de skipping paths dans le type de données JSON — auparavant, JSON(SKIP path) ignorait toutes les clés ayant le préfixe path (y compris des clés comme pathpath), ce qui pouvait entraîner une perte de données. Désormais, seule la clé exacte est ignorée. #95948 (Pavel Kruglov).
  • Correction de l’application de type_json_allow_duplicated_key_with_literal_and_nested_object aux chemins typés dans JSON. #97422 (Pavel Kruglov).
  • Correction de la vérification des chemins typés incompatibles dans le type JSON. #92539 (Pavel Kruglov).
  • Correction de la création d’une indication de type pour le chemin ‘skip’ dans JSON. #92842 (Pavel Kruglov).
  • Correction de la résolution des sous-colonnes dynamiques dans les alias de colonne par l’analyseur. #92583 (Pavel Kruglov).
  • Correction de l’erreur Nested columns sizes are inconsistent with local_discriminators due à une mauvaise optimisation du filtrage en place pour les colonnes Variant. #96410 (Alexey Milovidov).
  • Correction d’un crash dans ifNull avec un argument Variant utilisé dans GROUP BY. #96790 (Alexey Milovidov).
  • Correction d’une erreur logique dans FunctionVariantAdaptor avec des fonctions nécessitant des arguments constants, comme arrayROCAUC. #97116 (Bharat Nallan).
  • Correction de LOGICAL_ERROR dans FunctionVariantAdaptor lorsqu’une fonction renvoyait le type Nothing. #97213 (Alexey Milovidov).
  • Correction d’une exception logique lors de la comparaison de NULL avec une colonne Variant contenant des types LowCardinality. #97379 (Alexey Milovidov).
  • Correction de LOGICAL_ERROR dans concat lorsqu’un argument contenait un type Variant avec LowCardinality à l’intérieur. #97654 (Alexey Milovidov).
  • Correction de résultats incorrects lorsque des colonnes LowCardinality étaient converties en Nullable. #96483 (Nihal Z. Miaji).
  • Prise en charge correcte des types LowCardinality Nullable dans CAST lorsque cast_keep_nullable était activé. #95747 (Alexey Milovidov).
  • Correction de l’exception ColumnNullable is not compatible with original lors de la conversion de types imbriqués complexes. #96924 (Alexey Milovidov).
  • Correction de LOGICAL_ERROR lors de l’utilisation de isNull/isNotNull sur les sous-colonnes de types Nullable(Tuple(... Nullable(T) ...)). #97582 (Alexey Milovidov).
  • Correction de LOGICAL_ERROR lors de la conversion d’Array en QBit. #97413 (Alexey Milovidov).
  • Correction de LOGICAL_ERROR lors de la lecture simultanée d’une colonne sparse et de sa sous-colonne. #97515 (Pavel Kruglov).
  • Correction de LOGICAL_ERROR lors de la lecture de la sous-colonne .size d’un Nullable(String) sparse dans un Tuple avec PREWHERE. #97264 (Alexey Milovidov).
  • Correction d’un échec d’assertion dans Set et MergeTreeIndexSet lors du traitement de colonnes comportant des sous-colonnes sparse internes. #97493 (Alexey Milovidov).
  • Correction de l’erreur potentielle SIZES_OF_COLUMNS_DOESNT_MATCH lors du tri d’une colonne Tuple vide. #92520 (Pavel Kruglov).
  • Correction de bogues de décodage DELTA_BYTE_ARRAY dans le lecteur Parquet natif, affectant des données de chaînes très répétitives. #91929 (Daniel Muino).
  • Correction d’une assertion lors de la lecture d’un fichier Parquet lorsqu’une partie d’une expression PREWHERE était utilisée ailleurs dans la requête. #90635 (Max Kainov).
  • Correction de LOGICAL_ERROR dans le lecteur Parquet V3 natif lorsque la colonne de filtre PREWHERE contenait des valeurs UInt8 non booléennes. #96594 (Alexey Milovidov).
  • Correction de l’inférence de schéma Parquet dans l’ancien lecteur lorsqu’une colonne JSON suivait une colonne Tuple. #92867 (Michael Kolupaev).
  • Correction du schéma mis en cache pour tous les fichiers au lieu du seul fichier inféré lors de l’inférence de schéma avec glob. #92006 (Pavel Kruglov).
  • Correction de la lecture du format ProtobufList à partir de fichiers vides, qui produisait des enregistrements fantômes pour les tables vides. #96007 (Alexey Milovidov).
  • Correction d’une régression du codec Gorilla lorsqu’une taille explicitement spécifiée ne correspondait pas à la taille du type de données. #96118 (Alexey Milovidov).
  • Le moteur PostgreSQL peut désormais lire correctement BOOLEAN[]. #96006 (Alexey Milovidov).
  • Correction d’une erreur logique lors de la lecture d’une colonne UUID à partir d’une colonne SQLite TEXT. #96016 (Alexey Milovidov).
  • Correction de la conversion de types du moteur SQLite pour DateTime, Date, UUID et d’autres types. #96017 (Alexey Milovidov).
  • Correction d’un échappement incorrect des valeurs FixedString dans les requêtes vers SQLite et PostgreSQL. #96019 (Alexey Milovidov).
  • Ajout du paramètre input_format_numbers_enum_on_conversion_error pour la conversion de nombres en enums. #56240 (Nikolay Degterinsky).

Corrections des index de texte et des index de saut

  • La création et la matérialisation des index de texte sur des tables comportant des parts de plus de 4 294 967 295 lignes sont temporairement désactivées afin d’éviter des résultats de requête incorrects. #92644 (Anton Popov).
  • Correction de plusieurs crashs lors des merges d’index de texte dans les tables MergeTree. #92925 (Anton Popov).
  • Correction des merges d’index de texte construits sur des expressions complexes (telles que concat(col1, col2)). #93073 (Anton Popov).
  • Correction de l’analyse des index de texte sur des colonnes Array lorsque l’index ne contenait aucun token. #93457 (Anton Popov).
  • Correction de la reconstruction des index de texte créés sur des sous-colonnes. #93326 (Anton Popov).
  • Correction de la lecture directe depuis un index de texte avec des requêtes de recherche dupliquées. #93516 (Anton Popov).
  • Correction d’incohérences dans l’analyse des index de texte pour les fonctions has, mapContainsKey et mapContainsValue, qui pouvaient renvoyer des résultats différents selon qu’un index de texte était utilisé ou non. #93578 (Anton Popov).
  • Correction du calcul de la taille non compressée des index de texte dans system.parts. #92832 (Anton Popov).
  • Correction des index ngrambf_v1 avec une longueur de ngram > 8 qui levaient une exception. #92672 (Robert Schulze).
  • Correction de l’index ngram_bf sur des données non UTF-8, qui entraînait une lecture de mémoire non initialisée. #93663 (Alexey Milovidov).
  • Correction d’un stack-use-after-scope dans l’index de similarité vectorielle. #96259 (Alexey Milovidov).
  • Correction d’une erreur logique lorsqu’une expression de skip index produisait une colonne constante. #96880 (Alexey Milovidov).
  • Correction d’un accès mémoire invalide lors de la création d’une table avec une expression vide () comme index. #96363 (Alexey Milovidov).
  • Correction d’un use-after-free dans l’analyse des index avec use_primary_key désactivé et un très grand nombre de disjonctions. #96112 (Alexey Milovidov).
  • Correction de l’utilisation de l’index primaire dans les lightweight updates avec des sous-requêtes IN dans WHERE. #92838 (Anton Popov).
  • Utilisation du code d’erreur correct lors de la validation de l’index hypothesis. #92559 (Raúl Marín).

Correctifs du data lake

  • Correction d’un crash dans un cluster mono-nœud lors de la lecture depuis Iceberg en mode split-by-buckets. #91553 (Konstantin Vedernikov).
  • Correction du tuple ORDER BY dans Iceberg. #93225 (Konstantin Vedernikov).
  • Correction de la prise en charge des credentials Azure ADLS Gen2 fournis dans DataLakeCatalog — analyse des clés adls.sas-token.* à partir des catalogs REST Iceberg et correction de l’analyse des URL ABFSS. #93477 (Karun Anantharaman).
  • Remplacement de Date par Date32 pour Iceberg. #95322 (Konstantin Vedernikov).
  • Correction d’un crash lié à ORDER BY dans Iceberg. #96484 (Konstantin Vedernikov).
  • Correction du partitionnement dans Iceberg. #96620 (Konstantin Vedernikov).
  • Correction de bornes incorrectes pour les data files lorsque la référence de suppression par position était NULL dans les entrées de manifeste Iceberg. #96061 (Daniil Ivanik).
  • Ajout de vérifications supplémentaires pour le paramètre du fichier de métadonnées racine dans Iceberg. #96754 (Daniil Ivanik).
  • Les credentials ne sont plus consignés dans les catalogs Iceberg. #96831 (Konstantin Vedernikov).
  • Correction du squashing des données Delta Lake partitionnées. #95773 (Kseniia Sumarokova).
  • Correction d’un catalog de lac de données RESTful pour lequel un auth_header invalide cassait system.tables. #96680 (Han Fei).

Correctifs S3/Azure/stockage objet

  • Correction du cache de la clé de partitionnement du moteur de table S3 en présence de fonctions non déterministes. #92844 (Miсhael Stetsyuk).
  • Correction d’une assertion dans ReadBufferFromS3 qui survenait lorsque le cache était activé. #93809 (Kseniia Sumarokova).
  • Correction d’une erreur possible dans le thread de nettoyage de DiskObjectStorage. #87411 (Kseniia Sumarokova).
  • Correction d’interblocages possibles dans DiskObjectStorageTransaction. #93810 (Kseniia Sumarokova).
  • Correction de défaillances possibles du thread de nettoyage de DiskObjectStorage lorsque de nombreuses erreurs survenaient. #94048 (Kseniia Sumarokova).
  • Correction d’une data race dans copyS3File pour multipart_tags. #97227 (Azat Khuzhin).
  • L’exécution d’une mutation ALTER UPDATE invalide sur des tables de type fichier sur stockage objet (S3, Azure) ne provoque plus de déréférencement d’un nullptr. #96162 (Alexey Milovidov).

Correctifs S3Queue

  • Correction de l’erreur Failed to set file processing within 100 retries en mode ordonné de S3Queue (elle est désormais signalée comme un avertissement). #92814 (Kseniia Sumarokova).
  • Correction d’un bug lié au paramètre S3Queue s3queue_migrate_old_metadata_to_buckets. #93232 (Kseniia Sumarokova).
  • Correction des métadonnées pour les moteurs S3Queue/AzureQueue. #90498 (Kseniia Sumarokova).
  • Correction d’un data race dans le stockage S3Queue/AzureQueue. #95385 (Kseniia Sumarokova).
  • Correction de la déduplication pour le streaming depuis le moteur S3Queue/AzureQueue. #95467 (Kseniia Sumarokova).

Correctifs de sécurité et de contrôle d’accès

  • Correction d’un contrôle d’accès manquant dans SYSTEM SYNC FILE CACHE. #92372 (Kseniia Sumarokova).
  • Correction d’une logique incorrecte dans les vérifications des droits d’accès pour les autorisations avec caractères génériques, qui était trop restrictive. #92725 (pufit).
  • Empêche désormais les utilisateurs d’obtenir la liste des colonnes d’une table sans l’autorisation SHOW COLUMNS via le moteur de table merge. #93695 (János Benjamin Antal).
  • Correction d’une vulnérabilité de dépassement d’entier dans la désérialisation de l’état de groupConcat, qui pouvait entraîner des problèmes de sécurité mémoire. #93426 (Raufs Dunamalijevs).
  • Vérification que la taille du tampon décompressé correspond bien à celle attendue. #93690 (Raúl Marín).
  • Correction de la révocation des rôles par défaut. #96103 (Vitaly Baranov).
  • Correction de AccessRights::contains, qui renvoyait des résultats incorrects en cas de révocations partielles. #96170 (pufit).
  • Correction de la mise à jour des politiques de lignes attribuées à l’utilisateur initial dans les requêtes distribuées. #95469 (Vitaly Baranov).
  • L’argument de mot de passe de la fonction de table redis est désormais masqué dans les logs et les tables système. #95325 (Janos Benjamin Antal).
  • Correction d’une fuite mémoire des objets BIO lors de la lecture de certificats X509. #96885 (Alexey Milovidov).
  • Vérification de la witness version dans bech32 pour éviter un dépassement de tampon. #96671 (Raúl Marín).
  • Correction des lenteurs lors de l’interrogation des tables système avec un utilisateur disposant d’autorisations limitées sur de nombreuses bases de données. #95874 (pufit).

Correctifs de sauvegarde et de restauration

  • Correction de l’erreur Couldn't pack tar archive: Failed to write all bytes, causée par un en-tête de taille d’entrée d’archive incorrect. #92122 (Julia Kartseva).
  • Correction d’un plantage du serveur lorsque de nombreuses sauvegardes concurrentes entraient en conflit sur les mêmes fichiers. #93659 (Alexey Milovidov).
  • Correction d’un débordement de pile lors de la création de sauvegardes basées sur des archives (.zip, .tzst) sur un disque de stockage objet plain_rewritable. #96872 (Alexey Milovidov).
  • Correction d’un plantage du serveur lorsqu’une sauvegarde échouait à cause d’un disque plein ou d’autres erreurs d’E/S. #96873 (Alexey Milovidov).
  • Correction d’un segfault dans StorageKeeperMap lors de la sauvegarde, dû à un use-after-free. #97336 (Alexey Milovidov).

Correctifs de crash et de stabilité

  • Correction d’un crash dû à la lecture depuis une Connection déconnectée. #92807 (Raufs Dunamalijevs).
  • Correction d’un crash possible avec la fonction tokens() lorsque le deuxième argument est nul. #92586 (Raúl Marín).
  • Correction d’un crash du serveur lorsque tokens était appelé avec des paramètres de tokenizer non constants. #93383 (Robert Schulze).
  • Correction d’un crash potentiel dû à la mutation sur place des colonnes PREWHERE const sous-jacentes lors d’une réduction concurrente des colonnes ou d’un filtrage. #92588 (Arsen Muk).
  • Correction d’un blocage possible lors de l’arrêt du background schedule pool, qui pouvait entraîner des blocages du serveur à l’arrêt. #93008 (Azat Khuzhin).
  • Correction d’un problème laissant les connexions dans un état défectueux après l’annulation préliminaire de requêtes distribuées. #93029 (Azat Khuzhin).
  • Correction d’un possible Cannot finalize buffer after cancellation dans estimateCompressionRatio(). #93068 (Azat Khuzhin).
  • ZooKeeper est désormais finalisé à l’arrêt afin de corriger d’éventuels blocages. #93602 (Azat Khuzhin).
  • Correction d’une exception non interceptée lors du rechargement en arrière-plan des named collections avec le stockage ZooKeeper. #92717 (Kseniia Sumarokova).
  • Correction d’une utilisation d’une valeur non initialisée dans ReadWriteBufferFromHTTP. #94058 (Alexey Milovidov).
  • Correction du fait que la taille du buffer de TraceSender n’était pas mise à jour, ce qui provoquait des flushes entrelacés depuis différents threads. #93966 (Miсhael Stetsyuk).
  • Des pointeurs partagés vers le stockage ont été conservés dans QueryPipeline afin de garantir que les objets IStorage ne soient pas détruits tant que PipelineExecutor est actif. #93746 (Miсhael Stetsyuk).
  • Correction d’un crash possible des requêtes distribuées en cas d’annulation. #95466 (Aleksandr Musorin).
  • Correction d’un crash sur DROP WORKLOAD lors d’une exécution concurrente avec des requêtes. #95856 (Alexey Milovidov).
  • Correction d’une compétition d’accès sur DROP WORKLOAD. #96614 (Sergei Trifonov).
  • Correction de plusieurs bogues critiques liés à l’utilisation de ThreadPoolCallbackRunnerLocal. #95818 (Raúl Marín).
  • Correction d’un interblocage possible dans ProcessList dû à une inversion de verrous lorsque le memory overcommit tracker était déclenché. #96182 (Antonio Andelic).
  • Correction d’un livelock dans le thread de vérification d’annulation pour les requêtes ayant un max_execution_time élevé. #96450 (Sergei Trifonov).
  • Correction du blocage du thread de purge de MemoryWorker en raison d’une race condition. #96819 (Antonio Andelic).
  • Correction d’un plantage dans clearCaches causé par la destruction prématurée d’instantanés de stockage mis en cache. #96995 (Alexey Milovidov).
  • Correction d’un heap-use-after-free dans CREATE TABLE avec des contraintes. #96669 (Nikita Taranov).
  • Correction d’un possible use-after-free dans StorageKafka2. #97520 (Bharat Nallan).
  • Correction d’une possible data race sur shutdown_called dans DatabaseMaterializedPostgreSQL. #97554 (Alexey Milovidov).
  • Correction d’une race condition lors du chargement parallèle d’un dictionnaire HASHED segmenté, qui pouvait empêcher le chargement de certaines lignes. #96953 (Alexey Milovidov).
  • Correction d’un interblocage dans les dictionnaires lorsqu’un dictionnaire référençait une table Merge qui le référençait récursivement. #96120 (Alexey Milovidov).
  • Correction d’un accès hors limites dans BaseSettings::readBinary lorsqu’un serveur plus récent envoyait un paramètre inconnu pendant la désérialisation du plan de requête. #97585 (Michael Stetsyuk).
  • Correction d’un plantage lors du rattachement d’une table à une base de données MaterializedPostgreSQL si dropReplicationSlot levait une exception pendant le déroulement de la pile. #96871 (Alexey Milovidov).
  • Libération du flux de requête dans insert select afin d’éviter la fermeture de la connexion HTTP. #92175 (Sema Checherinda).
  • Correction d’un interblocage pour SHOW CREATE DATABASE avec la base de données Backup. #92541 (Azat Khuzhin).

Autres corrections de bugs

  • Correction de la gestion des tableaux vides par handleAllTokens dans les fonctions hasAllTokens et hasAnyTokens. #93328 (Anton Popov).
  • Correction de la période des profileurs globaux — une valeur tronquée était utilisée au lieu de la valeur définie, ce qui provoquait des réveils plus fréquents. #96048 (Antonio Andelic).
  • Correction de event_date dans system.asynchronous_metric_log. #95947 (Raúl Marín).
  • Correction de system.functions, qui affichait une chaîne vide au lieu de categories = 'Internal' pour les fonctions internes. #97315 (Robert Schulze).
  • Correction d’une possible erreur logique dans le dictionnaire ip_trie lorsque le type de clé n’était pas String. #97555 (Bharat Nallan).
  • Correction du débogage des UDF grâce à l’activation de la capture de stderr dans system.query_log.exception. #92209 (Xu Jia).
  • Correction de filterPartsByVirtualColumns pour les prédicats toujours faux. #97620 (Bharat Nallan).
  • Correction de ColumnConst, qui n’était pas matérialisé avant le squashing. #97019 (Hasyimi Bahrudin).
Dernière modification le 29 juin 2026