Passer au contenu principal

Changements non rétrocompatibles

Changements des types de données

  • Introduction du type Geometry. Prise en charge de la lecture des formats WKB et WKT. Dans les versions précédentes, le type Geometry était un alias de String, mais il s’agit désormais d’un type à part entière. #83344 (Konstantin Vedernikov).
  • Suppression du type Object obsolète. #85718 (Pavel Kruglov).
  • Échappement des noms de fichiers créés pour les sous-colonnes du type Variant dans les data parts Wide des tables MergeTree. Ce changement rompt la compatibilité avec les anciennes tables utilisant les types de données Variant/Dynamic/JSON. Il corrige le stockage des types contenant des caractères spéciaux dans Variant (par exemple DateTime avec un fuseau horaire spécifique contenant \). L’échappement peut être désactivé en modifiant le paramètre MergeTree escape_variant_subcolumn_filenames (pour conserver la compatibilité, désactivez ce paramètre dans la config de MergeTree ou définissez le paramètre compatibility sur la version précédente avant la mise à niveau). Résout #69590. #87300 (Pavel Kruglov).

Modifications des requêtes et des fonctions

  • ALTER MODIFY COLUMN exige désormais un DEFAULT explicite lors de la conversion de colonnes Nullable en types non Nullable. Auparavant, de telles instructions ALTER pouvaient se bloquer avec des erreurs cannot convert null to not null ; désormais, les NULL sont remplacés par l’expression par défaut de la colonne. Résout #5985. #84770 (Vladimir Cherkasov).
  • Suppression des paramètres allow_not_comparable_types_in_order_by/allow_not_comparable_types_in_comparison_functions. Autoriser des types non comparables dans ORDER BY ou dans des fonctions de comparaison peut entraîner des erreurs logiques et des résultats inattendus. Résout #90028. #90527 (Pavel Kruglov).
  • Correction des fonctions bitShiftLeft et bitShiftRight afin qu’elles renvoient 0 ou une valeur vide dans le cas d’un décalage exactement égal à la taille du type. #91943 (Pablo Marcos).
  • Le tokenizer ngram ne renverra plus de ngrams plus courts que la longueur N avec laquelle il a été configuré. Text Search ne renverra aucune ligne lorsque les tokens de recherche sont vides. #89757 (George Larionov).

Changements liés au stockage et aux index

  • Suppression de la fonctionnalité obsolète LIVE VIEW. Si vous utilisez LIVE VIEW, il ne sera pas possible de mettre à niveau vers la nouvelle version. #88706 (Alexey Milovidov).
  • Il est interdit de créer plusieurs disques plain-rewritable sur un même chemin partagé de stockage objet, car cela peut entraîner un comportement indéfini en cas de collision entre différentes transactions du stockage des métadonnées. #89038 (Mikhail Artemenko).
  • Il est désormais interdit de créer des tables MergeTree spéciales (telles que ReplacingMergeTree, CollapsingMergeTree, etc.) avec une clé ORDER BY vide, car le comportement de fusion de ces tables n’est pas défini. Si vous devez malgré tout créer une telle table, activez le paramètre allow_suspicious_primary_key. #91569 (Anton Popov).
  • Plusieurs corrections ont été apportées autour des index implicites. Le schéma affiché ou stocké (métadonnées de Keeper) n’inclura pas les index implicites, comme ceux créés par les paramètres add_minmax_index_for_numeric_columns ou add_minmax_index_for_string_columns. Cela peut provoquer des erreurs de métadonnées lorsqu’une table ReplicatedMergeTree est créée ou mise à jour dans une version plus récente alors qu’une réplique existe dans une version plus ancienne. #91429 (Raúl Marín).

Modifications des paramètres et de la configuration

  • Prise en charge du balisage des exceptions dans les réponses de résultats HTTP afin de permettre aux clients d’analyser les exceptions de façon plus fiable. Résout #75175. Le paramètre http_write_exception_in_output_format est désactivé par défaut pour garantir la cohérence entre les formats. #88818 (Kaviraj Kanagaraj).
  • Corrige la priorité des paramètres SASL du moteur Kafka. Les paramètres SASL définis au niveau de la table dans les requêtes CREATE TABLE remplacent désormais correctement les paramètres spécifiques au consumer/producer provenant des fichiers de configuration. #89401 (János Benjamin Antal).
  • Les paramètres de configuration ACME refresh_certificates_task_interval ont été renommés en refresh_certificates_task_interval_seconds, et refresh_certificates_before en refresh_certificates_before_seconds. Le paramètre refresh_certificates_task_interval_seconds attend désormais une valeur en secondes. #92211 (Konstantin Bogdanov).
  • Signale la désactivation des arguments positionnels dans les projections comme un changement non rétrocompatible. En outre, introduit le paramètre enable_positional_arguments_for_projections afin de permettre une mise à niveau sûre d’un cluster ClickHouse lorsque des arguments positionnels sont présents dans les projections. #92007 (Dmitry Novik).

Modifications du client

  • Mise à jour de clickhouse-client pour qu’il renvoie un code de sortie non nul (159 - TIMEOUT_EXCEEDED) lorsqu’une requête dépasse le délai d’attente à cause de receive_timeout. Auparavant, ces dépassements de délai renvoyaient le code de sortie 0 (succès), ce qui compliquait la détection de ces échecs par les scripts et les outils d’automatisation. #91432 (Sav).

Modifications du format des statistiques

  • Lors du passage d’une colonne de String à Nullable(String), aucune mutation ne sera effectuée sur les données. En revanche, pour la fonction d’agrégation uniq, une structure de données différente est utilisée : pour une colonne nullable, AggregateFunctionNull sera utilisé avec un agrégateur uniq imbriqué. AggregateFunctionNull sérialisera un indicateur booléen supplémentaire. Cela rendra le fichier de statistiques incompatible. Le format des statistiques a changé ; le serveur plantera si des statistiques sont encore dans l’ancien format. Pour éviter cette exception, exécutez ALTER TABLE [db.]table MATERIALIZE STATISTICS ALL afin de régénérer les statistiques. #90311 (Han Fei).

Autres changements incompatibles

  • Correction de Fatal lors de la compression de données dont la taille n’est pas un multiple de celle des éléments (dans le codec T64). Résout #89282. #89432 (yanglongwei).

Nouvelles fonctionnalités

Fonctions

  • Ajout de la nouvelle instruction SQL EXECUTE AS pour prendre en charge l’impersonation d’utilisateur. Résout #39048. #70775 (Shankar).
  • Ajout de la fonction flipCoordinates, qui aplatit le nombre requis de dimensions dans un tableau et permute les pointeurs dans la colonne Tuple. Résout #79469. #79634 (Sachin Kumar Singh).
  • Amélioration de l’opérateur IS NOT DISTINCT FROM (<=>) : ajout de la prise en charge de l’inverse IS DISTINCT FROM, ainsi que d’opérandes numériques compatibles de types différents (par exemple, Nullable(UInt32) et Nullable(Int64)). #87581 (yanglongwei).
  • Ajout de la prise en charge de la fonction de fenêtre cume_dist. Corrige #86920. #88102 (Manuel).
  • Fonctions permettant de calculer l’aire et le périmètre pour le type Geometry. #89047 (Konstantin Vedernikov).
  • Implémentation de la fonction dictGetKeys, qui renvoie les clés du dictionnaire dont l’attribut est égal à la valeur spécifiée. Elle utilise un cache de recherche inverse par requête, réglé par le paramètre max_reverse_dictionary_lookup_cache_size_bytes, pour accélérer les recherches répétées. #89197 (Nihal Z. Miaji).
  • Prise en charge de arrayRemove(arr, elem) pour supprimer du tableau arr tous les éléments égaux à elem. Résout #52099. #89585 (tiwarysaurav).
  • Introduction de la fonction scalaire midpoint, qui calcule la moyenne. Résout #89029. #89679 (simonmichal).
  • Vous pouvez désormais récupérer à la fois l’argument et la valeur minimale ou maximale correspondante à l’aide des nouvelles fonctions argAndMin et argAndMax. #89884 (AbdAlRahman Gad).
  • Ajout de la fonction SQL HMAC(algorithm, message, key) dans le cadre de #73900 et #38775. #90837 (Mikhail f. Shiryaev).
  • Ajout de la prise en charge de la fonction has() pour utiliser la clé primaire et les index de saut de données lorsque le premier argument est un tableau constant. Ferme #90980. #91023 (Nihal Z. Miaji).

Tables système

  • Ajout de la table system.unicode, qui contient une liste de caractères Unicode et de leurs propriétés. Résout #80055. #80857 (wxybear).
  • Ajout d’une nouvelle table système shared_merge_tree_condemned_parts, similaire à shared_merge_tree_outdated_parts, qui répertorie les parts condamnées sur le point d’être supprimées par PartsKillerThread. (Smita Kulkarni).

Moteurs de table et stockage

  • Prise en charge d’une partie de l’API HTTP Query de Prometheus. Pour l’activer, ajoutez une règle de type query_api dans la section <prometheus> du fichier de configuration. Les handlers pris en charge sont /api/v1/query_range et /api/v1/query. #86132 (Nikita Mikhaylov).
  • Les utilisateurs peuvent désormais configurer les tables S3/Azure Queue pour déplacer ou taguer les fichiers traités, en plus des options existantes permettant de conserver ou de supprimer les fichiers. Résout #72944. #86907 (Murat Khairulin).
  • Ajout d’un nouveau paramètre MergeTree merge_max_dynamic_subcolumns_in_wide_part permettant de limiter le nombre de sous-colonnes dynamiques dans la Wide part après fusion, indépendamment des paramètres spécifiés dans le type de données. #87646 (Pavel Kruglov).
  • Intégration du catalogue Microsoft OneLake. #89366 (Konstantin Vedernikov).
  • Prise en charge de la syntaxe CREATE OR REPLACE pour les tables temporaires. Ferme #35888. #89450 (Aleksandr Musorin).
  • Prise en charge de la jointure direct (boucle imbriquée) pour les tables MergeTree. Pour l’utiliser, spécifiez-la comme seule option dans le paramètre : join_algorithm = 'direct'. #89920 (Vladimir Cherkasov).
  • Cette PR introduit des paramètres au niveau des projections, exposés via la nouvelle clause WITH SETTINGS dans ALTER TABLE ... ADD PROJECTION. Ces paramètres permettent aux projections de redéfinir certains paramètres de stockage MergeTree (par ex. index_granularity, index_granularity_bytes) pour chaque projection. #90158 (Amos Bird).

Iceberg et les data lakes

Fonctionnalités SQL et de requête

  • Ajout de l’option allow_reentry à la fonction d’agrégation windowFunnel. Lorsqu’elle est activée avec strict_order, elle ignore les événements qui ne respectent pas l’ordre au lieu d’interrompre l’analyse du funnel. Cela permet de gérer les parcours utilisateur avec des actualisations (A->A->B) ou des retours en arrière dans la navigation (A->B->A->C) sans sous-estimer les taux de conversion. #86916 (Lee ChaeRok).
  • L’utilisateur peut désormais ajouter un nouvel argument preprocessor lors de la construction d’un index textuel. Cet argument est une expression arbitraire qui transforme chaque document avant la tokenization. #88272 (Jimmy Aguilar Mena).
  • Ajout de la prise en charge de LIMIT et OFFSET fractionnaires pour sélectionner une fraction d’une table. Clôt #81892. #88755 (Ahmed Gouda).
  • Ajout du paramètre into_outfile_create_parent_directories pour créer automatiquement les répertoires parents pour INTO OUTFILE, ce qui évite les erreurs lorsque les chemins de sortie n’existent pas. Résout #88610. #88795 (Saksham).
  • Ajout du paramètre type_json_skip_invalid_typed_paths pour désactiver les exceptions lors des insertions/conversions de type vers le type JSON lorsque le JSON d’entrée ne peut pas être converti en chemins typés explicites dans le type JSON. Bascule alors vers la valeur null/zéro du chemin typé. Clôt #86917. #89886 (Max Justus Spransy).

Fonctionnalités du client et de la CLI

  • Le client CLI peut désormais masquer le message « La version du serveur ClickHouse est plus ancienne que celle du client ClickHouse. Cela peut indiquer que le serveur n’est pas à jour et peut être mis à niveau. » en utilisant --no-server-client-version-message ou en le définissant sur false. #87784 (Larry Snizek).
  • Accédez aux instances ClickHouse Cloud à l’aide des identifiants Cloud avec —login. #89261 (Krishna Mannem).
  • L’interface web propose désormais un bouton de téléchargement. Il télécharge le résultat complet même si l’interface n’en affiche qu’une partie. #89768 (Alexey Milovidov).

Configuration du serveur et surveillance

  • Ajout d’un champ memory_usage à X-ClickHouse-Progress et X-ClickHouse-Summary. Cela permet de collecter en temps réel, côté client, l’utilisation mémoire des requêtes. #88393 (Christoph Wurm).
  • Ajout du paramètre send_profile_events, qui permet aux clients de réduire le trafic réseau lorsque les événements de profil ne sont pas utilisés. #89588 (Kaviraj Kanagaraj).

Keeper

Formats d’entrée et de sortie

  • Ajout du nouveau format d’entrée/sortie Buffers. Ce format est similaire à Native ; toutefois, contrairement à Native, il ne stocke ni les noms de colonnes, ni les types de colonnes, ni aucune métadonnée supplémentaire. Résout #84017. #91156 (Nihal Z. Miaji).
  • Ajout du paramètre arrow_flight_request_descriptor_type pour prendre en charge Dremio et d’autres serveurs Arrow Flight qui nécessitent des descripteurs de type commande. Corrige #89523. #89826 (Shreyas Ganesh).
  • Ajout du paramètre kafka_schema_registry_skip_bytes au Kafka table engine pour ignorer les octets d’en-tête de l’enveloppe (par exemple, le préfixe de 19 octets d’AWS Glue Schema Registry) avant d’analyser la charge utile du message. #89621 (Taras Polishchuk).

Autres nouvelles fonctionnalités

  • Ajout d’un paramètre max_streams_for_files_processing_in_cluster_functions pour contrôler le nombre de flux lors de la lecture parallèle de fichiers dans les fonctions de table cluster. Clôt #90223. #91323 (Pavel Kruglov).
  • Permet de désactiver, pour chaque requête, le téléchargement en arrière-plan des données des parts voisines. Corrige #89524. #89668 (tanner-bruce).
  • Prise en charge expérimentale d’e2k (Elbrus-2000) comme nouvelle plateforme pour ClickHouse. #90159 (Ramil Sattarov).

Fonctionnalités expérimentales

  • Prise en charge de la récupération de certificats TLS auprès de fournisseurs ACME, RFC 8555. #66315 (Konstantin Bogdanov).
  • Une nouvelle logique permet désormais d’exécuter automatiquement les requêtes à l’aide de répliques parallèles, contrôlées par le paramètre automatic_parallel_replicas_mode. #87541 (Nikita Taranov).
  • La recherche en texte intégral est désormais en aperçu privé (après avoir été précédemment au stade expérimental). #88928 (Robert Schulze).
  • Alias passe au statut expérimental et peut être activé avec allow_experimental_alias_table_engine=1. #89712 (Kai Zhu).

Améliorations des performances

Exécution et optimisation des requêtes

  • Échouer rapidement lorsque les requêtes atteignent les limites de lignes. Résout #61872. #62804 (Sean Haynes).
  • Ajouter une optimisation pour supprimer les colonnes inutilisées dans les plans de requête. Résout #75152. #76487 (János Benjamin Antal).
  • Optimisation des grandes valeurs dans ConstantNode. Clôt #72880. #81104 (Yakov Olkhovskiy).
  • Précharger les clés pendant l’itération de la table de hachage afin de minimiser les défauts de cache. #84708 (lgbo).
  • Améliorer la vitesse de décompression de LZ4 en simplifiant le code et en ajustant l’algorithme de sélection. #88360 (Raúl Marín).
  • Implémenter la réplication lazy des colonnes dans JOIN et ARRAY JOIN. Éviter de convertir des représentations spéciales de colonnes comme Sparse et Replicated en colonnes complètes dans certains formats de sortie. Cela évite des copies de données inutiles en mémoire. #88752 (Pavel Kruglov).
  • Utiliser des opérations SIMD avancées pour les fonctions logiques via le dispatch dynamique. #90432 (Raúl Marín).
  • Améliorer les performances des fonctions JIT en évitant d’initialiser inutilement à zéro la colonne de résultat. #90449 (Raúl Marín).
  • Accélérer la décompression T64 via le dispatch dynamique. #90610 (Raúl Marín).
  • Accélérer la conversion des colonnes en bool (dans les clauses WHERE) via le dispatch dynamique. #91203 (Raúl Marín).
  • Accélérer le tri d’un seul block numérique via le dispatch dynamique. #91213 (Raúl Marín).

Optimisations des JOIN

  • Les RIGHT et FULL JOIN utilisent désormais ConcurrentHashJoin ; cela signifie que ces types de jointures s’exécutent maintenant avec un degré de parallélisme plus élevé. Cela améliore jusqu’à 2 fois divers cas de RIGHTetFULL JOIN`. Résout #78027. #78462 (Yarik Briukhovetskyi).
  • Permet de réécrire ANY LEFT JOIN ou ANY RIGHT JOIN en ALL INNER JOIN dans certains cas. #89403 (Dmitry Novik).
  • Ajout de la prise en charge des runtime filters de JOIN pour les jointures ANTI. Refactorisation également de l’implémentation des runtime filters afin de réduire la contention sur les verrous. #89710 (Dmitry Novik).
  • Ajout de la prise en charge du maintien de la lecture dans l’ordre depuis la table de gauche dans les opérations LEFT/INNER JOIN, ce qui peut être exploité par les étapes suivantes. #89815 (Vladimir Cherkasov).

Optimisations de MergeTree et du stockage

  • Requêtes SELECT jusqu’à 8x plus rapides avec un fort élagage des partitions sur des tables comportant plus de 10K parts. #85535 (James Morrison).
  • Lorsqu’une requête utilise une table de hachage fixe pour l’état d’agrégation (group by sur un petit entier), ClickHouse fusionne l’état d’agrégation en parallèle pour accélérer la requête. Résout #63666. #87366 (Jianfei Hu).
  • Parquet reader v3 est activé par défaut. #88827 (Michael Kolupaev).
  • Les requêtes peuvent désormais tirer parti simultanément de optimize_read_in_order et de query_plan_optimize_lazy_materialization. Résout #88767. #88866 (Manuel).
  • Utilise une projection d’agrégation pour les requêtes avec DISTINCT. Ferme #86925. #88894 (Nihal Z. Miaji).
  • Exécute la transformation LIMIT BY en streaming lorsque l’ordre de tri en entrée correspond aux clés de LIMIT BY. #88969 (Eduard Karacharov).
  • Ajout de la prise en charge de la sérialisation sparse pour les colonnes de type Nullable. #88999 (Amos Bird).
  • Optimise le filtrage sur place du lecteur MergeTree. Résout #87119. #90630 (Xiaozhe Yu).
  • Introduit une heuristique supplémentaire pour réduire la largeur des fusions sélectionnées. #91163 (Mikhail Artemenko).

Optimisations des index et de la recherche textuelle

  • ClickHouse utilise désormais les skip indexes pour effectuer l’analyse des index sur des clauses WHERE avec des conditions de filtrage reliées par un mélange de AND et de OR. Auparavant, la clause WHERE devait être une conjonction (AND) de conditions de filtrage pour utiliser les skip indexes. Un nouveau paramètre use_skip_indexes_for_disjunctions (par défaut : activé) contrôle cette fonctionnalité. #87781 (Shankar Iyer).
  • Amélioration des performances de filtrage pour les prédicats avec des fonctions telles que like, equals, has et d’autres, en exploitant un filtre préliminaire supplémentaire construit à partir de l’index textuel. Cette optimisation est activée via le paramètre query_plan_text_index_add_hint. #88550 (Anton Popov).
  • Amélioration des performances de l’index textuel grâce à la mise en cache des blocs de dictionnaire et à l’utilisation de tables de hachage pour les recherches de tokens à la place de la recherche binaire. #88786 (Elmi Ahmadov).
  • Comme les posting lists sont celles qui occupent le plus d’espace, leur mise en cache améliore les performances lors d’exécutions successives. #88912 (Elmi Ahmadov).
  • Optimisation des recherches répétées dans le dictionnaire inverse en effectuant des recherches plus rapides dans un ensemble précalculé de valeurs de clé possibles. Résout #7968. #88971 (Nihal Z. Miaji).
  • Optimisation des requêtes ORDER BY...LIMIT N en utilisant un skip index et un filtre à seuil dynamique afin de réduire significativement le nombre de lignes traitées. #89835 (Shankar Iyer).
  • Les utilisateurs devraient constater une latence plus faible lors de l’analyse des index lorsque de grands index minmax (des millions de granules) sont présents. #90428 (Shankar Iyer).

Optimisations de l’agrégation

  • Optimisation de AggregateFunctionHistogram en triant uniquement la fin du tableau de points et en évitant le tri pour les entrées monotones, avec un gain de performances d’environ 10 %. #85760 (MakarDev).
  • Légère accélération de certaines opérations countDistinct grâce à la réduction du surcoût de HashSetTable::merge. #89727 (Raúl Marín).
  • Amélioration des performances et du comportement de topK. #90091 (Raúl Marín).
  • Amélioration des performances des opérations de comparaison sur Decimal. Résout #28192. #90153 (Konstantin Bogdanov).

Optimisations S3 et de sauvegarde

  • S3 partitionne les objets en interne selon les préfixes de clés et s’adapte automatiquement à des taux élevés de requêtes par partition. Cette modification introduit deux nouveaux paramètres BACKUP : data_file_name_generator et data_file_name_prefix_length. Lorsque data_file_name_generator=checksum, les fichiers de données de sauvegarde sont nommés à l’aide d’un hachage de leur contenu. #88418 (Julia Kartseva).
  • Améliore les performances des query pour les tables S3 créées avec un motif glob en appliquant en amont les valeurs du filtre _path, ce qui évite les opérations d’énumération S3. Contrôlé par le paramètre s3_path_filter_limit. #91165 (Eduard Karacharov).

Optimisations du lac de données

  • Exécution distribuée : meilleure répartition des tâches selon les ID de groupes de lignes, plutôt que par fichiers. #87508 (Konstantin Vedernikov).
  • Prise en charge de l’élimination des partitions pour les fonctions Paimon. #90253 (JIaQi Tang).

Améliorations

Optimisation et exécution des requêtes

  • Autorise FETCH PARTITION lorsqu’il y a des disques défectueux dans les tables MergeTree répliquées. #58663 (Duc Canh Le).
  • Ajoute la fonction h3PolygonToCells, qui permet de remplir une géométrie avec des hexagones H3. Résout #33991. #66262 (Zacharias Knudsen).
  • Toutes les requêtes DDL ON CLUSTER s’exécutent désormais avec le contexte utilisateur de la requête d’origine, pour un meilleur contrôle des accès. #71334 (pufit).
  • Ajout du parallélisme pour les requêtes ALTER TABLE ... FREEZE. #71743 (Kirill).
  • Autorise l’utilisation de seconds arguments non constants pour IN. Prend également en charge un Tuple comme second argument. #77906 (Yarik Briukhovetskyi).
  • Cette PR permet d’utiliser des projections ordinaires comme index secondaire. Lorsqu’elle est activée, certains prédicats de requête peuvent servir à lire depuis des parties de projection et à générer des bitmaps afin de filtrer efficacement les lignes à l’étape PREWHERE. #81021 (Amos Bird).
  • Active enable_shared_storage_snapshot_in_query par défaut pour de meilleures garanties de cohérence. #82634 (Alexey Milovidov).
  • UNION doit unifier les types avec Variant si nécessaire. Résout #82772. #83246 (Mithun p).
  • Journalise les requêtes internes (celles exécutées en interne par les dictionnaires, les vues matérialisées actualisables, etc.) et ajoute la nouvelle colonne is_internal à system.query_log. #83277 (Miсhael Stetsyuk).
  • Autorise INSERT dans les colonnes ALIAS (colonnes qui font simplement référence à une colonne physique sans expression). Clôt #80060. #84154 (Shaurya Mohan).
  • Vous pouvez voir une barre de progression, des logs et des statistiques de performance pour les requêtes CREATE OR REPLACE TABLE avec SELECT dans clickhouse-client. Résout #38416. #87247 (Diskein).
  • Prend en charge les types JSON et Dynamic dans les fonctions de hachage. Résout #87734. #87791 (Pavel Kruglov).
  • La valeur par défaut de query_plan_optimize_join_order_limit passe à 10. #89312 (Alexey Milovidov).
  • L’optimisation enable_lazy_columns_replication est désormais activée par défaut, ce qui réduira l’utilisation mémoire dans les joins. #89316 (Alexey Milovidov).
  • Active le paramètre allow_statistics_optimize par défaut, afin que l’optimiseur de JOIN utilise les statistiques de colonnes. #89332 (Alexey Milovidov).
  • Activer create_table_empty_primary_key_by_default par défaut. Cela améliore la facilité d’utilisation. #89333 (Alexey Milovidov).
  • Le paramètre enable_time_time64_type est désormais activé par défaut. #89345 (Yarik Briukhovetskyi).
  • Activer le paramètre allow_special_serialization_kinds_in_output_formats par défaut. #89402 (Pavel Kruglov).
  • Ignorer ON CLUSTER dans les requêtes exécutées via Shared Catalog. (Nikolay Degterinsky).
  • Ajouter la prise en charge de ALTER DATABASE MODIFY COMMENT dans Shared Catalog. (Nikolay Degterinsky).
  • Prendre en charge CREATE OR REPLACE pour SharedSet/SharedJoin dans les bases de données Shared. (Tuan Pham Anh).
  • Éviter d’attendre d’autres requêtes lors de l’exécution de SYNC REPLICA dans SharedMergeTree. (Raúl Marín).

Améliorations du stockage et de MergeTree

  • Ajout d’une nouvelle colonne virtuelle _tags (Map(String, String)) contenant tous les tags associés au blob dans S3. Résout #72945. #77773 (Zicong Qu).
  • Ajout d’un message d’erreur indiquant que la part a été dédupliquée. #80264 (Aleksandr Musorin).
  • Utilise OpenSSL 3.5.4. #81389 (Konstantin Bogdanov).
  • Ajout d’un cache pour l’authentification bcrypt. #87115 (Nikolay Degterinsky).
  • Les timestamps Parquet sans timezone (isAdjustedToUTC=false) sont désormais lus comme DateTime64(..., 'UTC') au lieu de DateTime64(...). #87872 (Michael Kolupaev).
  • Les rôles définis en SQL peuvent désormais être attribués aux utilisateurs définis dans users.xml. #88139 (c-end).
  • Si un skip index utilisé dans une requête FINAL porte sur une colonne faisant partie de la clé primaire, l’étape supplémentaire consistant à vérifier l’intersection de la clé primaire dans d’autres parts est inutile et n’est désormais plus effectuée. Résout #85897. #88368 (Shankar Iyer).
  • Autorise les insertions dans des tables distantes et des tables de lac de données lorsque disable_insertion_and_mutation est activé. #88549 (Alexander Tokmakov).
  • Met en cache les statistiques au niveau des tables et ajoute deux paramètres : le paramètre MergeTree refresh_statistics_interval et le paramètre de session use_statistics_cache. #88670 (Han Fei).
  • Ajout d’un paramètre MergeTree alter_column_secondary_index_mode pour contrôler le traitement des index pendant les mutations. Valeurs possibles : throw, drop, rebuild et compatibility. Clôture #77797. #89335 (Raúl Marín).
  • Introduction d’un cache par table de ColumnsDescription pour les parts, réduisant l’utilisation de la mémoire lorsque les tables contiennent de nombreuses parts et de nombreuses colonnes. #89352 (Azat Khuzhin).

Tables système et monitoring

  • Ajout de plusieurs histogrammes de métriques pour le server et Keeper afin d’instrumenter la durée des différentes étapes d’exécution des requêtes Keeper. #88158 (Miсhael Stetsyuk).
  • Ajout de nouvelles statistiques de colonnes dans system.columns, indiquant les types de statistiques créés sur cette table. #89086 (Han Fei).
  • L’interface HTTP fournira les en-têtes Age et Expires lorsque le cache des résultats de requête est utilisé. Introduction de nouveaux événements de profil : QueryCacheAgeSeconds, QueryCacheReadRows, QueryCacheReadBytes, QueryCacheWrittenRows, QueryCacheWrittenBytes. #89759 (Alexey Milovidov).
  • Affiche les propriétés de la table dans le Web UI. Un clic sur le nombre de lignes ou d’octets affichera une requête issue de system.tables. #89771 (Alexey Milovidov).
  • Ajout des champs last_error_time, last_error_message, last_error_query_id et last_error_trace à la table system.error_log. #89879 (Narasimha Pakeer).
  • Stocke les identifiants des blocs de déduplication dans system.part_logs. #89928 (Sema Checherinda).
  • Modification de la valeur par défaut du paramètre check_query_single_value_result de true à false. Cela fait que CHECK TABLE renvoie des résultats détaillés par part au lieu d’un résultat agrégé. #90150 (Robert Schulze).
  • Ajout d’une nouvelle colonne parts_in_progress_names à system.mutations pour améliorer le diagnostic. #90155 (Shaohua Wang).
  • Introduction de system.background_schedule_pool{,_log} pour améliorer l’introspection des tâches en arrière-plan. #91157 (Azat Khuzhin).
  • Ajout des événements de profil FailedInitialQuery et FailedInitialSelectQuery. #91172 (RinChanNOW).
  • Ajout de trois colonnes dans system.tables pour les métriques des parts orphelines. (Han Fei).
  • Expose la valeur de distributed_cache_client.connection_pool_size comme métrique. (Francesco Ciocchetti).

Améliorations du client et de l’UI

  • L’utilisateur peut désormais annuler la requête en appuyant sur Ctrl-C lorsque le pager est actif. Résout #80778. #88935 (Grigorii Sokolik).
  • La Web UI affiche désormais des barres dans le tableau même lorsque les valeurs sont négatives. #89016 (Alexey Milovidov).
  • Les requêtes commençant par des espaces ne sont plus enregistrées dans l’historique. #89116 (Konstantin Bogdanov).
  • En mode interactif, clickhouse-client et clickhouse-local surlignent dans la ligne de commande les identifiants portant le même nom que celui actuellement sous le curseur. #89689 (Alexey Milovidov).
  • Le redimensionneur de la zone de texte des requêtes dans la Web UI occupe désormais toute la largeur. #89457 (Alexey Milovidov).
  • Les indications de type dans la Web UI ne débordent plus sur l’en-tête du tableau. #89753 (Alexey Milovidov).
  • Vous pouvez désormais commenter ou décommenter rapidement les lignes actuellement sélectionnées dans l’éditeur de requêtes de la Web UI à l’aide de Ctrl+/ (ou Cmd+/ sur Mac). #91160 (Samuel K.).
  • Ajout de la prise en charge du chargement de la configuration du client ClickHouse à partir des chemins XDG Base Directory. Résout #89882. #90306 (Wujun Jiang).

Améliorations de S3 et du stockage cloud

  • Permet d’utiliser automatiquement les régions AWS à activation explicite pour S3 lorsque la région n’est pas spécifiée dans l’endpoint. #88930 (Andrey Zvonov).
  • Définit s3_retry_attempts sur 500 par défaut pour 25.6 afin de garantir la réussite des sauvegardes lors d’un repartitionnement de S3. #89051 (Nikita Mikhaylov).
  • Met en cache les identifiants S3 utilisés lors des interactions avec l’endpoint STS afin de pouvoir les réutiliser pour différents appels de fonction. #89734 (Antonio Andelic).
  • Les URL présignées fonctionnent désormais avec S3. Résout #65032. #90827 (Yarik Briukhovetskyi).

Améliorations des lacs de données

  • Prise en charge de la lecture de DeltaLake CDF via la fonction de table deltaLake avec les paramètres delta_lake_snapshot_start_version, delta_lake_snapshot_end_version. #90431 (Kseniia Sumarokova).
  • Prise en charge des paramètres de stockage dans l’insert vers une fonction de table, par souci de cohérence avec select. Résout #89386. #91707 (Kseniia Sumarokova).
  • Renvoie une erreur « not implemented » pour les requêtes TRUNCATE sur les lacs de données, au lieu de ne rien faire silencieusement. Résout #86604. #91713 (Kseniia Sumarokova).

Améliorations de Kafka

  • Les paramètres kafka_compression_codec et kafka_compression_level peuvent désormais être utilisés pour définir la compression des producteurs Kafka. #89073 (János Benjamin Antal).
  • Ajout de kafka_consumer_reschedule_ms en tant que paramètre configurable du moteur de table Kafka. Résout #89204. #90112 (Jeremy Aguilon).

Améliorations de Keeper

  • Ajout d’une limite de taille en octets pour le batch de requêtes append dans Keeper. Cette limite est contrôlée par keeper_server.coordination_settings.max_requests_append_bytes_size. #90342 (Antonio Andelic).
  • Ajout d’une vérification côté serveur dans Keeper lors du handshake afin de rejeter les clients lorsque last_zxid_seen (provided by the client) > last_processed_zxid. #90016 (Miсhael Stetsyuk).
  • Réduction de la limite de nœuds pour la requête RemoveRecursive de Keeper lors du nettoyage de S3Queue. #90201 (Antonio Andelic).

Améliorations des formats d’entrée/sortie

  • Ajout de la prise en charge des UUID dans Parquet lorsqu’ils sont représentés par FixedString(16) avec le type logique UUID. #74484 (alekseev-maksim).
  • Prise en charge d’un tableau de chaînes en entrée des fonctions hasAnyTokens ou hasAllTokens. #89124 (Elmi Ahmadov).
  • Dans le format Pretty, les tuples nommés sont désormais affichés au format Pretty JSON. Cela résout #65022. #91779 (Mostafa Mohamed Salah).
  • Ajout d’une limite de taille pour les messages CapnProto. Elle peut être modifiée avec format_capn_proto_max_message_size. #91888 (Antonio Andelic).

Améliorations de l’index textuel

  • L’index textuel fonctionne désormais avec les tables ReplacingMergeTree. #90908 (Elmi Ahmadov).
  • Possibilité d’utiliser un index inversé dans PREWHERE. Résout #89975. #89977 (Peng Jian).
  • Le tokenizer ngrams peut désormais être créé avec ngram_length = 1. #91529 (George Larionov).
  • Ajout d’un cache pour l’en-tête désérialisé de l’index textuel afin de réduire les E/S et d’améliorer les performances des requêtes. #89513 (Elmi Ahmadov).

Autres améliorations

  • Correction de la désérialisation binaire de Array et Map afin d’utiliser le paramètre max_binary_array_size au lieu de max_binary_string_size pour valider les limites de taille. #88744 (Raufs Dunamalijevs).
  • Si la mémoire système est inférieure à 5GB, ne pas verrouiller l’exécutable en mémoire par défaut. #89751 (Alexey Milovidov).
  • Réduit l’utilisation mémoire pendant les merges dans la table system.metric_log en définissant min_bytes_for_wide_part et vertical_merge_algorithm_min_bytes_to_activate sur 128MB. #89811 (filimonov).
  • Réessaie en cas d’erreurs réseau lorsque la bibliothèque S3 analyse une réponse XML. #90216 (Sema Checherinda).
  • Met à jour les messages d’avertissement à l’approche des limites des garde-fous : affichage des valeurs actuelles et des valeurs de déclenchement. #90438 (Nikita Fomichev).
  • Diffuse les chunks dans la table system.filesystem_cache au lieu de créer un seul chunk contenant tout l’état du cache. #90508 (Kseniia Sumarokova).
  • Les entrées du cache d’index de similarité vectorielle sont désormais supprimées lorsque des table parts sont supprimées ou remplacées par des parts plus récentes. #90750 (Shankar Iyer).
  • Évite d’exposer la version du serveur ClickHouse dans les réponses d’erreur HTTP renvoyées avant l’authentification. #91003 (filimonov).
  • Ajout des nouveaux paramètres apply_row_policy_after_final et apply_prewhere_after_final pour permettre l’application des row policies et des conditions PREWHERE après le traitement FINAL. Corrige #90986. #91065 (Yarik Briukhovetskyi).
  • Prise en charge du type JSON dans tupleElement. Ferme #81630. #91327 (Pavel Kruglov).
  • Prise en charge des indexes négatifs pour l’accès aux éléments de tuple (par ex. tuple.-1). #91665 (Amos Bird).
  • Autorise la conversion implicite de type lors du cast de Array vers QBit. #91846 (Raufs Dunamalijevs).
  • Ajout d’une nouvelle colonne, elapsed_time_microseconds, à system.blob_storage_log. #92322 (Alexey Milovidov).
  • Ajout d’un nouveau paramètre database_shared_drop_table_delay_seconds permettant aux utilisateurs de contrôler le délai de drop table dans la Shared database. (Nikolay Degterinsky).
  • Chargement différé des clés chiffrées pour les named collections. (Pablo Marcos).
  • Autorise la désactivation du clients cache par buffer pour le distributed cache. (Kseniia Sumarokova).
  • Ajout d’une limite partagée pour les connections du distributed cache. (Kseniia Sumarokova).

Corrections de bugs

Cette section contient une sélection de correctifs importants. Pour la liste complète de tous les correctifs de cette version, veuillez consulter le changelog complet

Correctifs d’exécution des requêtes

  • Correction d’une valeur incorrecte de rows_before_limit_at_least lorsque plusieurs shards distants sont impliqués dans une agrégation distribuée avec fusion. #63511 (Amos Bird).
  • Correction de l’apparition de 0 rows in set après une requête INSERT INTO ... SELECT. Clôture #47800. #79462 (Engel Danila).
  • Correction de multiIf avec des arguments constants et l’évaluation en court-circuit. Clôture #72714. #84546 (Yakov Olkhovskiy).
  • Correction de LogicalError lors d’une sélection depuis une table avec une contrainte de sous-requête. Résout #84190. #85575 (Pervakov Grigorii).
  • Correction d’une erreur logique dans la réorganisation du cross join lorsque query_plan_optimize_join_order_limit > 1. Clôture #89409. #88286 (Vladimir Cherkasov).
  • Correction de résultats de JOIN incorrects lors de l’utilisation de conditions OR avec des clés uniques dans la table de droite. Résout #89391. #89512 (Vladimir Cherkasov).
  • Correction d’une erreur logique dans full_sorting_merge join avec des colonnes dupliquées. Résout #86957. #89495 (Vladimir Cherkasov).
  • Correction d’une possible erreur « Invalid number of rows in Chunk » dans un JOIN avec des colonnes dupliquées. Résout #89411. #90053 (Vladimir Cherkasov).
  • Correction d’un problème de duplication de données dans un RIGHT JOIN avec une table distribuée lorsque les répliques parallèles sont activées. #90806 (zoomxi).
  • Correction d’une erreur logique avec join_use_nulls et plusieurs joins, ainsi qu’avec cross join. #91853 (Vladimir Cherkasov).

Corrections liées aux types de données et à JSON

  • Correction de la lecture des sous-colonnes d’une colonne dont le nom contient un point dans certains cas. Résout #81261, #82058, #88169. #87205 (Pavel Kruglov).
  • Correction de la lecture de tableaux JSON mixtes contenant des Float et des Bools. Auparavant, l’insertion de telles données provoquait une exception. #88008 (Pavel Kruglov).
  • Correction du cast de LowCardinality(Nullable(T)) vers Dynamic. #86365 (Pavel Kruglov).
  • Correction d’une erreur logique possible lors de la lecture des paths et de leurs sous-colonnes dans la sérialisation JSON avancée des données partagées. Ferme #89805. #89819 (Pavel Kruglov).
  • Correction d’un possible débordement de pile lors de la désérialisation binaire des types de données. Ferme #88710. #89822 (Pavel Kruglov).
  • Correction d’un possible état incohérent des données partagées et des paths dynamiques dans JSON, pouvant entraîner des erreurs logiques et des résultats inattendus. #90816 (Pavel Kruglov).
  • Correction de la fusion des colonnes JSON dans Summing/Aggregating/Coalescing MergeTree. #91151 (Pavel Kruglov).

Correctifs pour MergeTree et le stockage

  • Correction de plusieurs problèmes dus à la suppression trop précoce de colonnes dans TTL. Résout #88002. #88860 (Amos Bird).
  • Correction d’un résultat min(PK)/max(PK) erroné lorsque PK est triée en ordre inverse. Cela corrige #83619. #88796 (Amos Bird).
  • Correction d’un sharding incorrect dans l’optimisation de JOIN lorsque la clé primaire est triée par ordre décroissant. Résout #88512. #88794 (Amos Bird).
  • Correction d’une condition de concurrence dans le chemin de lecture de l’index de projection. Résout #89497. #89762 (Peng Jian).
  • Correction d’une gestion incorrecte, lors de la fusion, des parts vidées par TTL avec des projections non vides lors de l’utilisation de deduplicate_merge_projection_mode='ignore'. Résout #89430. #89458 (Amos Bird).
  • Correction de l’erreur TOO_MANY_MARKS, qui pouvait se produire après certaines requêtes ALTER sur des parts compactes. #91980 (alesapin).

Correctifs liés à Parquet et aux formats

  • Correction d’une erreur de segmentation dans le lecteur Parquet lorsque input_format_parquet_local_file_min_bytes_for_seek est défini sur 0. Résout #78456. #88784 (Animesh).
  • Dans le module d’écriture Parquet, émission de la chaîne created_by au bon format. #87735 (Michael Kolupaev).
  • Correction d’un problème d’écriture Parquet qui ne préservait pas l’ordre d’origine lors de l’utilisation de l’écriture monothread avec le writer natif. #90126 (Arthur Passos).
  • Correction d’un bug dans le lecteur ORC lors de la lecture de colonnes de chaînes encodées avec DICTIONARY_V2 et ne contenant que des valeurs NULL. #91889 (Peng Jian).
  • Correction d’un overflow lors de la lecture du format ORC pour les types Date et DateTime64. Ferme #70976. #91572 (Yarik Briukhovetskyi).

Correctifs pour Iceberg et les lacs de données

  • Correction du protocole icebergS3Cluster. Ajout de la prise en charge de l’évolution du schéma, des suppressions positionnelles et des suppressions par égalité dans la fonction cluster Iceberg. Résout #88287. #88919 (Yang Jiang).
  • Correction d’une Exception JSON dans une table Iceberg avec une colonne timestamp lors de l’utilisation de Glue catalog. Résout #90210. #90209 (Alsu Giliazova).
  • Désormais, ClickHouse n’utilisera plus l’optimisation read-in-order pour Iceberg si l’ordre de tri n’est pas spécifié dans les fichiers manifest. Corrige #89178. #90304 (alesapin).

Correctifs de fonctions

  • Correction d’un bug dans la fonction reverseUTF8. Dans les versions précédentes, elle inversait par erreur les octets des points de code UTF8 de longueur 4. Cela clôt #88913. #88914 (Alexey Milovidov).
  • Correction du calcul du phi carré, qui entraînait des résultats incorrects dans cramersV, cramersVBiasCorrected, theilsU et contingency. #87831 (Nihal Z. Miaji).
  • Correction de top_k afin qu’il respecte le paramètre de seuil lorsqu’il est appelé avec un seul argument. Clôt #88757. #88867 (Manuel).
  • Correction de la troncature des arguments de countIf(*). Clôt #89372. #89373 (Manuel).
  • Correction des fonctions trim, ltrim et rtrim, qui ne fonctionnaient pas avec deux arguments. Clôt #90170. #90305 (Nihal Z. Miaji).
  • Correction de la fonction arrayFilter, qui ne fonctionnait pas avec un Array vide et la fonction isNull. Clôt #73849. #91105 (Nihal Z. Miaji).

Correctifs liés à la mémoire et aux plantages

  • Correction d’un plantage possible lors d’une requête distante avec ARRAY JOIN dans IN et le paramètre enable_lazy_columns_replication activé. Résout #90361. #89997 (Pavel Kruglov).
  • Correction d’un plantage lors de l’arrêt propre du serveur en raison d’un ordre de destruction incorrect. Résout #82420. #90076 (Nikita Mikhaylov).
  • Correction d’un plantage lorsqu’un état de fonction d’agrégation contient une valeur sérialisée d’une colonne LowCardinality(String). #89550 (Pavel Kruglov).
  • Correction d’un plantage dans StorageDistributed lors de l’analyse de noms de répertoire de shard mal formés. #90243 (Aleksandr Musorin).
  • Correction d’erreurs de limite mémoire intempestives lorsque le cache de pages en espace utilisateur est activé. #91361 (Michael Kolupaev).
  • Correction d’un plantage possible dans les fonctions d’agrégation après MEMORY_LIMIT_EXCEEDED. #92390 (Azat Khuzhin).
  • Amélioration du suivi de la mémoire lors de la génération des résultats des hash joins. #89560 (Azat Khuzhin).

Corrections de sécurité et d’accès

  • Corrige l’erreur ACCESS_ENTITY_NOT_FOUND lors de l’exécution de clusterAllReplicas par un utilisateur associé à un rôle inexistant. Résout #87670. #89068 (pufit).
  • Corrige la validation des accès pour les requêtes ALTER UPDATE lorsqu’une table function remote est utilisée avec localhost comme hôte cible. #90761 (pufit).
  • Corrige la vérification des grants avec joker pour une révocation partielle. #90922 (pufit).
  • Corrige la gestion des grants globaux avec des révocations utilisant des jokers. #90928 (pufit).

Correctifs de la base de données Replicated

  • Après une récupération, une réplique de base de données Replicated pouvait rester bloquée longtemps en affichant des messages comme Failed to marked query-0004647339 as finished ; ce problème est corrigé. #88671 (Alexander Tokmakov).
  • Correction d’un use-after-free dans Distributed, causé par une condition de concurrence entre l’arrêt et des INSERT en arrière-plan. Corrige #88640. #89136 (Azat Khuzhin).
  • Vue matérialisée actualisable : correction d’un crash rare du serveur si la table source était entièrement supprimée lors d’une actualisation. #89203 (Michael Kolupaev).

Correctifs de Keeper

  • Corrige la lecture des changelogs au démarrage de Keeper lorsqu’un changelog n’a pas été renommé correctement lors de la rotation. #89496 (Antonio Andelic).

Autres correctifs notables

  • Correction d’une dégradation des performances lors de l’analyse des skipping indexes. #89004 (Anton Popov).
  • Correction d’une incompatibilité du partitionnement Hive empêchant une mise à niveau fluide vers la version 25.8. #90202 (Kseniia Sumarokova).
  • Correction d’une requête WITH FILL infinie avec nan/inf. Résout #69261. #90255 (Konstantin Bogdanov).
  • Time et Time64 respectent désormais correctement les fuseaux horaires lors de la conversion depuis DateTime et DateTime64. Clôt #89896. #90310 (Yarik Briukhovetskyi).
  • Correction de résultats de requête potentiellement incorrects après des lightweight updates dans des requêtes SELECT avec le query condition cache activé. Corrige #90176. #90204 (Anton Popov).
  • Correction de la compatibilité de la sérialisation en mémoire de l’état d’agrégation String. #90880 (Antonio Andelic).
  • Correction de l’agrégation SummingMergeTree pour les colonnes Nested LowCardinality. #90927 (Ivan Babrou).
  • Correction de l’échec de system.view_refreshes avec l’erreur No macro 'replica' in config. #92203 (Michael Kolupaev).
  • Correction de la réplication d’un ALTER ajoutant indirectement une colonne à une MV avec Shared Catalog. (Nikolay Degterinsky).
  • Correction du blocage de l’application de l’état de Shared Catalog par l’échec du commit d’une MV. (Nikolay Degterinsky).
  • Correction de la vérification des contraintes de paramètres dans les ALTER sur les répliques secondaires avec Shared Catalog. (Nikolay Degterinsky).
  • Conservation du commentaire de base de données lors de la migration SharedCatalog. (Alexander Tokmakov).
  • Correction du remplacement des Materialized Views sur les répliques secondaires dans Shared Catalog. (Nikolay Degterinsky).
  • Correction des compteurs de system.distributed_cache_usage. (Kseniia Sumarokova).
  • Correction du blocage du DROP d’une table dont la création avait échoué avec une exception ILLEGAL_COLUMN dans Shared Catalog. (Nikolay Degterinsky).
  • Désactivation de CREATE OR REPLACE pour SharedSet/SharedJoin dans les bases de données Replicated. (Tuan Pham Anh).
  • Correction des exceptions UNFINISHED lors des refreshes de RMV avec la base de données Shared. (Nikolay Degterinsky).
  • Correction d’un plantage avec TABLE_ALREADY_EXISTS dans les bases de données Shared. (Nikolay Degterinsky).
  • Correction de la migration de tables avec des requêtes CREATE invalides dans Shared Catalog. (Nikolay Degterinsky).
  • Toujours utiliser les virtual parts en mémoire dans getStatus. (Mikhail Artemenko).
  • Ajout de nouvelles tentatives à l’application de l’état du Shared Catalog au démarrage. (Nikolay Degterinsky).
  • Correction du blocage de DROP DATABASE après une exception lors de la création d’une table. (Nikolay Degterinsky).
  • Correction d’une logical error dans le distributed cache. (Kseniia Sumarokova).
  • Correction d’une erreur incorrecte du distributed cache. (Kseniia Sumarokova).
  • Correction de LOGICAL_ERROR dans ~TemporaryLockForUUIDDirectory de Shared Catalog. (Nikolay Degterinsky).
  • Correction du cache de métadonnées qui renvoyait des dépendances incorrectes après le renommage d’une base de données. (Nikolay Degterinsky).
  • Shared Catalog : correction d’un cas de DROP de grandes tables sur des répliques secondaires. (Raúl Marín).
  • Distributed cache : correction d’une erreur logique dans processWriteRequest. (Kseniia Sumarokova).
  • Suppression des contrôles sur les ALTER de MV sur les répliques secondaires. (Nikolay Degterinsky).
Dernière modification le 29 juin 2026