Modifications incompatibles avec les versions précédentes
Modifications apportées à JSON et aux formats de données
- Désactivation par défaut de la mise entre guillemets des entiers 64 bits dans les formats JSON. #74079 (Pavel Kruglov).
- Inférence de
Array(Dynamic)au lieu d’unTuplenon nommé pour les tableaux de valeurs de types différents en JSON. Pour retrouver le comportement précédent, désactivez le paramètreinput_format_json_infer_array_of_dynamic_from_array_of_different_types. #80859 (Pavel Kruglov). - Écriture par défaut des valeurs de type
Enumsous forme deBYTE_ARRAYavec le type logiqueENUMdans le format de sortie Parquet. #84169 (Pavel Kruglov).
Stockage et partitionnement
- Ajout de la prise en charge des écritures au format de partitionnement Hive et refonte de l’implémentation des lectures (les colonnes de partition Hive ne sont plus virtuelles). #76802 (Arthur Passos).
- Activation par défaut du paramètre MergeTree
write_marks_for_substreams_in_compact_parts. Cela améliore considérablement les performances de lecture des sous-colonnes à partir des nouvelles parts Compact. Les serveurs dont la version est inférieure à 25.5 ne pourront pas lire ces nouvelles parts Compact. #84171 (Pavel Kruglov). - Interdiction de
RENAME COLUMNouDROP COLUMNsur des colonnes explicitement listées pour la sommation dans SummingMergeTree. Résout #81836. #82821 (Alexey Milovidov).
Améliorations des fonctions
- Ajout d’un nouvel argument
unexpected_quoting_character_strategyà la fonctionextractKeyValuePairs, qui contrôle le comportement lorsqu’unquoting_characterest rencontré de manière inattendue. Pour plus de détails, consultez la documentation deextractKeyValuePairs. #80657 (Arthur Passos). - Auparavant, la fonction
countMatchesarrêtait le comptage à la première correspondance vide, même si le pattern l’autorise. Pour corriger ce problème,countMatchespoursuit désormais son exécution en avançant d’un seul caractère lorsqu’une correspondance vide se produit. Les utilisateurs qui souhaitent conserver l’ancien comportement peuvent activer le paramètrecount_matches_stop_at_empty_match. #81676 (Elmi Ahmadov).
Améliorations des types de données
- Amélioration de la précision de la conversion de
DecimalenFloat32. Implémentation de la conversion deDecimalenBFloat16. Résout #82660. #82823 (Alexey Milovidov).
Performances et gestion des ressources
- Auparavant, les requêtes
BACKUP, les merges et les mutations n’utilisaient pas les limiteurs à l’échelle du serveur pour le trafic local (max_local_read_bandwidth_for_serveretmax_local_write_bandwidth_for_server) et distant (max_remote_read_network_bandwidth_for_serveretmax_remote_write_network_bandwidth_for_server) ; elles étaient uniquement limitées par des paramètres serveur dédiés (max_backup_bandwidth_for_server,max_mutations_bandwidth_for_serveretmax_merges_bandwidth_for_server). Désormais, elles utilisent simultanément les deux types de limiteurs. #81753 (Sergei Trifonov). - Ajout d’un nouveau paramètre
cluster_function_process_archive_on_multiple_nodesqui améliore les performances du traitement des archives dans les fonctions de cluster lorsqu’il est défini sur true (par défaut). Il doit être défini surfalsepour des raisons de compatibilité et afin d’éviter des erreurs lors de la mise à niveau vers la version 25.7+ si vous utilisez des fonctions de cluster avec des archives sur des versions antérieures. #82355 (Kseniia Sumarokova). - La valeur par défaut précédente de
concurrent_threads_schedulerétaitround_robin, qui s’est révélé inéquitable en présence d’un grand nombre de requêtes mono-thread (par ex. desINSERT). Cette modification fait defair_round_robin, une alternative plus sûre, l’ordonnanceur par défaut. #84747 (Sergei Trifonov). - La matérialisation paresseuse est activée uniquement avec l’analyseur afin d’éviter d’avoir à la maintenir sans l’analyseur, ce qui peut poser certains problèmes (par exemple lors de l’utilisation de
indexHint()dans des conditions). #83791 (Igor Nikonov).
Schéma et syntaxe SQL
- Interdire la création d’une table sans colonnes pouvant recevoir des insertions. #81835 (Pervakov Grigorii).
- Exiger des backticks autour des identifiants contenant des points dans les expressions par défaut afin d’éviter qu’ils soient analysés comme des identifiants composés. #83162 (Pervakov Grigorii).
- Prendre en charge la syntaxe Heredoc de style PostgreSQL :
$tag$ string contents... $tag$, également appelée littéraux de chaîne délimités par des dollars. Dans les versions précédentes, les tags étaient soumis à moins de restrictions : ils pouvaient contenir des caractères arbitraires, y compris des signes de ponctuation et des espaces. Cela introduit une ambiguïté d’analyse avec les identifiants qui peuvent eux aussi commencer par le caractère dollar. Or, PostgreSQL n’autorise que des caractères de mot dans les tags. Pour résoudre ce problème, nous limitons désormais les tags heredoc à ces seuls caractères. Résout #84731. #84846 (Alexey Milovidov).
Sécurité et permissions
SYSTEM RESTART REPLICASredémarre uniquement les répliques dans les bases de données où vous disposez du droit d’exécuterSHOW TABLES. Auparavant, la requête provoquait l’activation des tables de la base de données Lazy, même sans accès à cette base, alors que ces tables étaient supprimées simultanément. #83321 (Alexey Milovidov).- Les fonctions
azureBlobStorage,deltaLakeAzureeticebergAzureont été mises à jour afin de vérifier correctement les autorisationsAZURE. Toutes les fonctions avec variante cluster (fonctions-Cluster) vérifient désormais les autorisations par rapport à leurs équivalents correspondants sans cluster. Pour éviter les erreurs d’autorisation, assurez-vous que les utilisateurs qui appellent les fonctions-Clusterdisposent des privilèges appropriés (par exemple,GRANT S3 ON *.* TO user). De plus, les fonctionsicebergLocaletdeltaLakeLocalappliquent désormais les vérifications d’autorisationFILE. #84938 ([Nikita Mikhaylov](https://github.com/nikitamikhaylov
Nouvelles fonctionnalités
Types de données
- Ajout de nouveaux types de données :
Time([H]HH:MM:SS)etTime64([H]HH:MM:SS[.fractional]), ainsi que de quelques fonctions de conversion de base et de fonctions permettant d’interagir avec d’autres types de données. Ajout de paramètres assurant la compatibilité avec l’ancienne fonctionToTime. #81217 (Yarik Briukhovetskyi).
Fonctions
- Ajoute
NumericIndexedVector, une nouvelle structure de données vectorielle reposant sur une compression bitmap roaring bit-sliced, ainsi que plus de 20 fonctions pour la construire, l’analyser et effectuer des opérations arithmétiques point à point. Peut réduire le stockage et accélérer les jointures, les filtres et les agrégations sur des données clairsemées. Implémente #70582 et l’article “Large-Scale Metric Computation in Online Controlled Experiment Platform” de T. Xiong et Y. Wang, présenté à VLDB 2024. #74193 (FriendLey). - Ajoute des fonctions financières :
financialInternalRateOfReturnExtended(XIRR),financialInternalRateOfReturn(IRR),financialNetPresentValueExtended(XNPV),financialNetPresentValue(NPV). #81599 (Joanna Hulboj). - Ajoute les fonctions géospatiales
polygonIntersectsCartesianetpolygonIntersectsSphericalpour vérifier si deux polygones se croisent. #81882 (Paul Lamb). - Prend en charge les window functions
lagetlead. Ferme #9887. #82108 (Dmitry Novik). - Ajoute les fonctions
colorSRGBToOkLCHetcolorOkLCHToSRGBpour convertir des couleurs entre les espaces colorimétriques sRGB et OkLCH. #83679 (Fgrtue). - Vous pouvez désormais effectuer des recherches de clés JSON insensibles à la casse à l’aide de
JSONExtractCaseInsensitive(ainsi que d’autres variantes deJSONExtract). #83770 (Alistair Evans). - Ajoute une nouvelle fonction
nowInBlock64. #84178 (Halersson Paris). - Ajoute la fonction
dateTimeToUUIDv7pour convertir une valeur DateTime en UUIDv7. Exemple d’utilisation :SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56'))renvoie0198af18-8320-7a7d-abd3-358db23b9d5c. #84319 (samradovich). - Ajoute les aggregate functions
timeSeriesDerivToGridettimeSeriesPredictLinearToGridpour rééchantillonner des données sur une grille temporelle définie par le timestamp de début, le timestamp de fin et le step spécifiés ; calcule respectivementderivetpredict_linear, avec une sémantique de type PromQL-like. #84328 (Stephen Chi). - Ajout des fonctions
timeSeriesRangeettimeSeriesFromGrid. #85435 (Vitaly Baranov).
Tables système
- Ajout d’une table
system.dead_letter_queuepour conserver les messages entrants erronés provenant d’engines comme Kafka. #68873 (Ilya Golshtein). - Ajout de la table système
system.zookeeper_connection_logpour stocker des informations historiques sur les connexions ZooKeeper. #79494 (János Benjamin Antal). - Ajout d’une nouvelle table système
system.codecspour examiner les codecs disponibles. (issue #81525). #81600 (Jimmy Aguilar Mena). - Ajout de la table
system.completions. Résout #81889. #83833 (|2ustam).
Iceberg et DeltaLake
- Prise en charge des types complexes dans la schema evolution d’Iceberg. #73714 (scanhex12).
- Prise en charge des écritures Iceberg pour les requêtes
insert. #82692 (scanhex12). - Prise en charge des suppressions positionnelles pour le moteur de table Iceberg. #83094 (Daniil Ivanik).
- Lecture des fichiers de données Iceberg à partir des identifiants de champ. Clôture #83065. #83653 (scanhex12).
- Écritures Iceberg pour CREATE. Clôture #83927. #83983 (scanhex12).
- Écritures pour les catalogs Glue. #84136 (scanhex12).
- Écritures pour les catalogs REST Iceberg. #84684 (scanhex12).
- Fusion de tous les position delete files Iceberg dans les fichiers de données. Cela réduira le nombre et la taille des fichiers Parquet dans le stockage Iceberg. Syntaxe :
OPTIMIZE TABLE table_name. #85250 (scanhex12). - Prise en charge de
DROP TABLEpour Iceberg (suppression des catalogs REST/Glue + suppression des métadonnées de la table). #85395 (scanhex12). - Prise en charge des mutations
ALTER DELETEpour Iceberg au format merge-on-read. #85549 (scanhex12). - Prise en charge des écritures dans DeltaLake. Clôture #79603. #85564 (Kseniia Sumarokova).
- Écriture de davantage de statistiques Iceberg (tailles des colonnes, bornes inférieures et supérieures) dans les métadonnées (entrées de manifeste) pour l’élagage min-max. #85746 (scanhex12).
- Prise en charge de l’ajout, de la suppression et de la modification de colonnes dans Iceberg pour les types simples. #85769 (scanhex12).
MergeTree et stockage
- Toutes les tables prennent désormais en charge la colonne virtuelle
_table, et plus seulement les tables de type Merge. #63665 (Xiaozhe Yu). - Ajout de SZ3 comme codec de compression avec perte, mais à erreur bornée, pour les colonnes de type
Float32etFloat64. #67161 (scanhex12). - Ajout de la prise en charge des mises à jour légères pour les tables de la famille
MergeTree. Les mises à jour légères peuvent désormais être utilisées avec une nouvelle syntaxe :UPDATE <table> SET col1 = val1, col2 = val2, ... WHERE <condition>. Ajout également de l’implémentation des suppressions légères via les mises à jour légères, activable en définissantlightweight_delete_mode = 'lightweight_update'. #82004 (Anton Popov). - Prise en charge de la colonne virtuelle
_part_granule_offsetdans les tables de la famille MergeTree. Cette colonne indique l’index, à partir de zéro, du granule/repère auquel chaque ligne appartient au sein de sa data part. Cela corrige #79572. #82341 (Amos Bird).
Prise en charge des protocoles et des clients
- Ajout de la prise en charge du protocole ArrowFlight RPC avec l’ajout du moteur de table
arrowflight. #74184 (zakr600). - Ajout de la prise en charge de la commande
COPYdu protocole PostgreSQL. #74344 (scanhex12). - Prise en charge du client C# pour le protocole MySQL. Cela clôt #83992. #84397 (scanhex12).
- Connexion sécurisée imposée pour
mysql_portetpostgresql_port. #82962 (Shaohua Wang).
Fonctionnalités SQL et des requêtes
- Prise en charge de
DESCRIBE SELECTen plus deDESCRIBE (SELECT ...). #82947 (Yarik Briukhovetskyi). - Prise en charge de la syntaxe
USE DATABASE {name}. #81307 (Yarik Briukhovetskyi). - La lecture depuis les projections est implémentée pour les répliques parallèles. Un nouveau paramètre
parallel_replicas_support_projectiona été ajouté pour déterminer si la prise en charge des projections est activée. Pour simplifier l’implémentation, cette prise en charge n’est activée que lorsqueparallel_replicas_local_planest actif. #82807 (zoomxi).
Formats
- Ajout du paramètre
format_schema_source, qui définit la source deformat_schema. #80874 (Tuan Pham Anh). - Ajout du nouveau format de sortie
Hash. Il calcule une valeur de hachage unique pour toutes les colonnes et lignes du résultat. Cela est utile pour calculer une « empreinte » du résultat, par exemple dans les cas d’usage où le transfert de données constitue un goulot d’étranglement. Exemple :SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hashrenvoiee5f9e676db098fdb9530d2059d8c23ef. #84607 (Robert Schulze).
Configuration du serveur et gestion des workloads
- Le paramètre serveur
cpu_slot_preemptionactive la planification préemptive du CPU pour les workloads et garantit une répartition max-min équitable du temps CPU entre les workloads. De nouveaux paramètres de workload de limitation du CPU ont été ajoutés :max_cpus,max_cpu_shareetmax_burst_cpu_seconds. #80879 (Sergei Trifonov). - Le paramètre de workload
max_waiting_queriesest désormais pris en charge. Il peut être utilisé pour limiter la taille de la file d’attente des requêtes. Si la limite est atteinte, toutes les requêtes suivantes sont interrompues avec l’erreurSERVER_OVERLOADED. #81250 (Oleg Doronin). - La connexion TCP est fermée après un nombre configuré de requêtes ou un seuil de durée. Résout #68000. #81472 (Kenny Sun).
Cloud storage
- Ajout de
extra_credentialsàAzureBlobStoragepour l’authentification avecclient_idettenant_id. #84235 (Pablo Marcos).
Keeper
- Possibilité de définir des watches arbitraires dans les requêtes Keeper Multi. #84964 (Mikhail Artemenko).
- Prise en charge des métriques partiellement agrégées. #85328 (Mikhail Artemenko).
Fonctionnalités expérimentales
Moteurs de table et fonctions de table
- Ajout du moteur de table YTsaurus et de la fonction de table YTsaurus. #77606 (MikhailBurdukov).
Améliorations des index de texte
- Ajout des fonctions
searchAnyetsearchAll, des outils généraux permettant d’interroger les index de texte. #80641 (Elmi Ahmadov). - L’index de texte prend désormais en charge le tokenizer
string. #81752 (Elmi Ahmadov). - La valeur par défaut de la granularité d’index des index
texta été portée à 64. Cela améliore les performances attendues de la requête de test moyenne dans les benchmarks internes. #82162 (Jimmy Aguilar Mena). - Le bitmap de 256 bits stocke les labels sortants d’un état dans l’ordre, mais les états sortants sont enregistrés sur disque dans l’ordre où ils apparaissent dans la table de hachage. Par conséquent, un label pouvait pointer vers un état suivant erroné lors de la lecture sur disque. #82783 (Elmi Ahmadov).
- Actuellement, l’arbre FST est enregistré sur disque sans compression. Cela peut entraîner des performances plus faibles ou une consommation de bande passante d’E/S plus élevée, aussi bien en écriture qu’en lecture sur disque. #83093 (Elmi Ahmadov).
Mises à jour de la maturité des fonctionnalités
- catalog est passé en bêta. #85848 (Melvyn Peignon).
- Les mises à jour légères sont passées du stade expérimental au stade bêta. #85952 (Anton Popov).
Améliorations des performances
Exécution des requêtes et agrégation
- Optimisation triviale pour le combinateur de fonction d’agrégation
-If. #78454 (李扬). - Ajout d’une nouvelle logique (contrôlée par le paramètre
enable_producing_buckets_out_of_order_in_aggregation, activé par défaut) permettant d’envoyer certains buckets dans le désordre pendant une agrégation économe en mémoire. Lorsque certains buckets d’agrégation mettent nettement plus de temps à fusionner que d’autres, cela améliore les performances en permettant à l’initiateur de fusionner entre-temps des buckets ayant des ID plus élevés. L’inconvénient est une utilisation mémoire potentiellement plus élevée (qui ne devrait pas être significative). #80179 (Nikita Taranov). - Rend le pipeline après l’étape
TOTALSmultithreadé. #80331 (UnamedRus). - Lorsque la requête d’agrégation ne contient qu’une seule fonction
COUNT()sur une colonneNOT NULL, la logique d’agrégation est entièrement intégrée lors de la recherche dans la table de hachage. Cela évite d’allouer et de maintenir un quelconque état d’agrégation, ce qui réduit considérablement l’utilisation mémoire et la surcharge CPU. Cela répond partiellement à #81982. #82104 (Amos Bird). - Calcul de la clé sérialisée en mode colonnaire lors d’un groupement sur plusieurs colonnes de type chaîne ou numérique. #83884 (李扬).
- Implémente
addManyDefaultspour les combinateurs-If. #83870 (Raúl Marín).
Optimisations de JOIN
- Ajout du nouveau paramètre
min_joined_block_size_rows(analogue àmin_joined_block_size_bytes; valeur par défaut : 65409) pour contrôler la taille minimale des blocs (en rows) des blocs d’entrée et de sortie de JOIN (si l’algorithme de join le prend en charge). Les petits blocs seront squashed. #81886 (Nikita Taranov). - Les performances de
HashJoinont été optimisées en supprimant la boucle supplémentaire sur les tables de hachage dans le cas courant d’une seule key column ; les vérifications denull_mapetjoin_masksont également supprimées lorsqu’elles valent toujourstrue/false. #82308 (Nikita Taranov). - Les optimisations de
null_mapetJoinMaskissues de #82308 ont été appliquées au cas d’un JOIN comportant plusieurs disjonctions. La data structureKnownRowsHoldera également été optimisée. #83041 (Nikita Taranov). - Un simple
std::vector<std::atomic_bool>est utilisé pour les flags de join afin d’éviter de calculer un hash à chaque accès à ces flags. #83043 (Nikita Taranov). - Traitement de
max_joined_block_rowshors de la boucle principale du hash JOIN. Performances légèrement améliorées pour ALL JOIN. #83216 (Nikolai Kochetov). - La mémoire des colonnes de résultat n’est plus préallouée à l’avance lorsque
HashJoinutilise le mode de sortielazy. Cela est sous-optimal, en particulier lorsque le nombre de correspondances est faible. De plus, le nombre exact de correspondances est connu une fois la jointure terminée, ce qui permet une préallocation plus précise. #83304 (Nikita Taranov). - Tous les JOIN
LEFT/INNERseront automatiquement convertis enRightAnysi le côté droit est fonctionnellement déterminé par les key columns de jointure (toutes les rows ont des valeurs de join key uniques). #84010 (Nikita Taranov). - Amélioration des performances lors de l’application des patch parts en mode
Join. #85040 (Anton Popov).
Améliorations des requêtes distribuées
- Ajout d’une option permettant de déporter la (dé)compression et la (dé)sérialisation des blocs vers les threads du pipeline, au lieu d’un seul thread associé à une connexion réseau. Contrôlée par le paramètre
enable_parallel_blocks_marshalling. Cela devrait accélérer les requêtes distribuées qui transfèrent des volumes importants de données entre l’initiateur et les nœuds distants. #78694 (Nikita Taranov). - Le
INSERT SELECTdistribué parallèle est activé par défaut dans le mode oùINSERT SELECTs’exécute indépendamment sur chaque shard ; voir le paramètreparallel_distributed_insert_select. #80425 (Igor Nikonov). - Compression des logs et des profile events dans le protocole natif. Sur les clusters de plus de 100 répliques, les profile events non compressés représentent de 1 à 10 Mo/s, et la barre de progression manque de réactivité sur les connexions Internet lentes. Cela corrige #82533. #82535 (Alexey Milovidov).
- Le
INSERT SELECTdistribué parallèle est activé par défaut dans le mode oùINSERT SELECTs’exécute indépendamment sur chaque shard ; voir le paramètreparallel_distributed_insert_select. #83040 (Igor Nikonov). - Correction du calcul de la taille minimale des tâches pour les répliques parallèles. #84752 (Nikita Taranov).
Améliorations des index
- Les requêtes de recherche vectorielle utilisant un index de similarité vectorielle s’exécutent avec une latence plus faible grâce à la réduction des lectures sur le stockage et de l’utilisation du CPU. #79103 (Shankar Iyer).
- Prend en compte
merge_tree_min_{rows,bytes}_for_seekdansfilterPartsByQueryConditionCacheafin de l’aligner sur les autres méthodes de filtrage par index. #80312 (李扬). - Traite d’abord les index min-max à granularité plus élevée. Clôt #75381. #83798 (Maruth Goyal).
- L’index bloom filter est désormais utilisé pour des conditions telles que
has([c1, c2, ...], column), oùcolumnn’est pas de typeArray. Cela améliore les performances de ces requêtes et les rend aussi efficaces que l’opérateurIN. #83945 (Doron David). - Traite les index par ordre croissant de taille de fichier. L’ordre global donne la priorité aux index min-max et vectoriels (en raison respectivement de leur simplicité et de leur sélectivité), puis aux petits index. Au sein des index min-max/vectoriels, les plus petits sont également privilégiés. #84094 (Maruth Goyal).
- Auparavant, les données de l’index de texte intégral étaient réparties en plusieurs segments (la taille par défaut de chaque segment était de 256 MiB). Cela pouvait réduire la consommation de mémoire lors de la construction de l’index de texte intégral, mais augmentait l’espace requis sur le disque ainsi que le temps de réponse des requêtes. #84590 (Elmi Ahmadov).
Optimisations des sous-requêtes
- Optimise le plan généré pour les sous-requêtes corrélées en supprimant les opérations
JOINredondantes à l’aide de classes d’équivalence. S’il existe des expressions équivalentes pour toutes les colonnes corrélées,CROSS JOINn’est pas généré si le paramètrequery_plan_correlated_subqueries_use_substitutionest activé. #82435 (Dmitry Novik). - Lit uniquement les colonnes nécessaires dans une sous-requête corrélée lorsqu’elle apparaît comme argument de la fonction
EXISTS. #82443 (Dmitry Novik).
Améliorations d’Azure Blob Storage
- Le moteur de table
azureBlobStoragemet désormais en cache et réutilise, lorsque c’est possible, les jetons d’authentication d’identité managée afin d’éviter toute limitation de débit. #79860 (Nick Blakely). - Remplacement du client HTTP curl par le client HTTP poco pour Azure Blob Storage. Plusieurs paramètres ont été ajoutés pour ces clients, alignés sur ceux de S3. Des délais d’expiration de connexion très courts ont été introduits pour Azure comme pour S3. La visibilité sur les profile events et les métriques Azure a été améliorée. Le nouveau client est activé par défaut et offre de bien meilleures latences pour les requêtes à froid sur Azure Blob Storage. L’ancien client
Curlpeut être rétabli en définissantazure_sdk_use_native_client=false. #83294 (alesapin).
Améliorations du moteur de stockage
- Corrige le filtrage par clé pour les stockages Redis et KeeperMap. #81833 (Pervakov Grigorii).
ATTACH PARTITIONn’entraîne plus la suppression de tous les caches. #82377 (Alexey Milovidov).- Évite de conserver le verrou pendant la création des données de snapshot du stockage afin de réduire la contention sur le verrou en cas de forte charge concurrente. #83510 (Duc Canh Le).
- La suppression des parts temporaires peut prendre du temps (en particulier avec S3), et nous la faisons actuellement en conservant un verrou global dans
MergeTreeBackgroundExecutor. Lorsque nous devons redémarrer toutes les tables en raison d’une perte de connexion et attendre la fin des tâches en arrière-plan, les tables peuvent même rester bloquées en mode readonly pendant une heure. Mais il semble que nous n’ayons pas besoin de ce verrou pour appelercancel. #84311 (Alexander Tokmakov).
Améliorations du format
- Nouvelle implémentation du lecteur Parquet. Elle est globalement plus rapide et prend en charge le pushdown des filtres au niveau des pages ainsi que
PREWHERE. Elle est actuellement Experimental. Utilisez le paramètreinput_format_parquet_use_native_reader_v3pour l’activer. #82789 (Michael Kolupaev). - Les performances du format d’entrée ProtobufSingle ont été améliorées grâce à la réutilisation du sérialiseur lorsqu’aucune erreur d’analyse ne se produit. #83613 (Eduard Karacharov).
Optimisations des types de données et de la sérialisation
- Améliore significativement les performances de lecture des sous-colonnes
JSONissues de données partagées dans MergeTree en implémentant de nouvelles sérialisations pour les données partagéesJSONdans MergeTree. #83777 (Pavel Kruglov). - Optimise la désérialisation des chaînes de caractères en simplifiant le code. Résout #38564. #84561 (Alexey Milovidov).
Améliorations du pipeline et de l’exécution
- Réduire au minimum les copies en mémoire des en-têtes de port lors de la construction du pipeline. PR initiale par heymind : #70105. #83381 (Raúl Marín).
- Améliorer les performances de construction du pipeline. #83631 (Raúl Marín).
- Optimiser MergeTreeReadersChain::getSampleBlock. #83875 (Raúl Marín).
- Optimiser la matérialisation des constantes dans les cas où elle est effectuée uniquement pour renvoyer une seule ligne. #85071 (Alexey Milovidov).
Optimisations de la mémoire et des ressources
- Ajuster certaines configurations de jemalloc pour améliorer les performances. #81807 (Antonio Andelic).
- Ajouter un alignement dans le compteur de ProfileEvents pour réduire le faux partage. #82697 (Jiebin Sun).
- Réduire les appels inutiles à
memcpydans CompressedReadBufferBase::readCompressedData. #83986 (Raúl Marín).
Planification et analyse des requêtes
- Accélération de QueryTreeHash. #82617 (Nikolai Kochetov).
Améliorations de la journalisation
- Ajout de la journalisation asynchrone. #82516 (Raúl Marín).
Optimisations des fonctions
- Optimisation de
largestTriangleThreeBucketspar suppression des données temporaires. #84479 (Alexey Milovidov). - Implémentation de nombreuses fonctions de manipulation de chaînes optimisée et simplifiée. Correction de la documentation erronée de plusieurs fonctions. Remarque : la sortie de
byteSizepour les colonnes String et les types complexes contenant des colonnes String est passée de 9 octets par chaîne vide à 8 octets par chaîne vide, ce qui correspond au comportement attendu. #85063 (Alexey Milovidov).
Améliorations de Keeper
- Ajout du chargement initial avec RocksDB pour Keeper. #83390 (Antonio Andelic).
Améliorations du data lake
- Amélioration du traitement parallèle des fichiers avec le backend delta-kernel-rs. #85642 (Azat Khuzhin).
Améliorations
Contrôle d’accès et sécurité
- Introduction de deux nouveaux types d’accès :
READetWRITEpour les sources, et dépréciation de tous les anciens types d’accès liés aux sources. Auparavant :GRANT S3 ON *.* TO user; désormais :GRANT READ, WRITE ON S3 TO user. Cela permet également de dissocier les autorisationsREADetWRITEpour les sources, par exemple :GRANT READ ON * TO user,GRANT WRITE ON S3 TO user. Cette fonctionnalité est contrôlée par le paramètreaccess_control_improvements.enable_read_write_grantset est désactivée par défaut. #73659 (pufit). - Prise en charge des paramètres dans les requêtes
CREATE USERpour les noms d’utilisateur. #81387 (Diskein). - Exclusion des données sensibles des core dumps. Ajout de deux allocateurs :
AwsNodumpMemoryManager, compatible avec la bibliothèque AWS, etJemallocNodumpSTLAllocator, compatible avec la STL. Tous deux sont des wrappers de l’allocateur Jemalloc. Ils utilisent les extent hooks de Jemalloc etmadvisepour marquer les pages mémoire comme « don’t dump ». Utilisés pour les informations d’authentification S3, les informations d’authentification utilisateur et certaines données de requête. #82441 (Miсhael Stetsyuk). - Les views créées par des utilisateurs éphémères stockeront désormais une copie de l’utilisateur réel et ne seront plus invalidées après la suppression de l’utilisateur éphémère. #84763 (pufit).
- Correspondance des
forward_headersde l’authentification externe de manière insensible à la casse. #84737 (ingodwerust). - Ajout d’une colonne
parameteràsystem.grantspour déterminer le type de source pourGRANT READ/WRITEet le moteur de table pourGRANT TABLE ENGINE. #85643 (MikhailBurdukov).
Sauvegarde et restauration
- Prise en charge des sauvegardes pour les bases de données PostgreSQL, MySQL et DataLake. La sauvegarde d’une telle base de données n’enregistre que sa définition, pas les données qu’elle contient. #79982 (Nikolay Degterinsky).
- Définir tous les messages de journal liés à l’écriture des fichiers de sauvegarde au niveau TRACE. #82907 (Hans Krutzer).
- Ajout de
backup_restore_s3_retry_initial_backoff_ms,backup_restore_s3_retry_max_backoff_ms,backup_restore_s3_retry_jitter_factorpour configurer la stratégie de backoff des tentatives sur S3 utilisée pendant les opérations de sauvegarde et de restauration. #84421 (Julia Kartseva). - Ajout du nouveau paramètre
backup_slow_all_threads_after_retryable_s3_errorafin de réduire la pression sur S3 lors de rafales de tentatives dues à des erreurs commeSlowDown, en ralentissant tous les threads dès qu’une erreur pouvant faire l’objet d’une nouvelle tentative est détectée. #84854 (Julia Kartseva).
Intégrité et validation des données
- Vérifiez que la partie possède un fichier
checksum.txtcohérent juste avant de la valider. #76625 (Sema Checherinda). - Empêcher le démarrage d’une mutation ALTER
RENAME COLUMNsi elle doit renommer une colonne actuellement affectée par une mutation de données incomplète. #81823 (Mikhail Artemenko). - Désormais, le snapshot des mutations sera construit à partir du snapshot des parties visibles. Les compteurs de mutations utilisés dans le snapshot seront également recalculés à partir des mutations incluses. #82945 (Mikhail Artemenko).
- Ajout de la possibilité d’analyser le préfixe et le suffixe d’une partie, ainsi que de vérifier la couverture des colonnes non constantes. #83377 (Mikhail Artemenko).
Moteur de table Iceberg
- Prise en charge des suppressions positionnelles pour le moteur de table Iceberg. #80237 (YanghongZhong).
- ClickHouse prend désormais en charge les fichiers
metadata.jsoncompressés pour Iceberg. Corrige #70874. #81451 (alesapin). - Correction de la lecture d’Iceberg par identifiants de champ pour les types complexes. #84821 (scanhex12).
- Prise en charge de l’écriture par Iceberg pour permettre la lecture depuis pyiceberg. #84466 (scanhex12).
- Ajout de la version de snapshot aux moteurs de table de data lake. #84659 (Pete Hampton).
- Prise en charge de l’écriture d’un fichier version-hint avec Iceberg. Cela clôt #85097. #85130 (scanhex12).
- Prise en charge du fichier
.metadata.jsoncompressé via le paramètreiceberg_metadata_compression_method. Il prend en charge toutes les méthodes de compression de ClickHouse. Cela clôt #84895. #85196 (scanhex12). - Optimisation de l’utilisation mémoire pour les fichiers de suppression positionnelle Iceberg. Au lieu de charger en mémoire toutes les données des fichiers de suppression, seul le groupe de lignes courant des fichiers de suppression Parquet est conservé en RAM. Cela réduit considérablement la consommation mémoire lors de l’utilisation de grands fichiers de suppression positionnelle. #85329 (scanhex12).
- Autorise l’itération asynchrone des objets d’une table Iceberg sans stocker explicitement les objets de chaque fichier de données. #85369 (Daniil Ivanik).
- Prise en charge des suppressions par égalité pour Iceberg. #85843 (Han Fei).
Moteur de table DeltaLake
- Amélioration du moteur de table
DeltaLake: delta-kernel-rs dispose d’une APIExpressionVisitor, implémentée dans cette PR et appliquée à la transformation des expressions des colonnes de partition (elle remplacera un ancien mécanisme désormais obsolète dans delta-kernel-rs, auparavant utilisé dans notre code). À l’avenir, cetExpressionVisitorpermettra également d’implémenter le pruning basé sur les statistiques ainsi que certaines fonctionnalités propriétaires de delta-lake. En outre, cette modification vise à prendre en charge le pruning des partitions dans le moteur de tableDeltaLakeCluster(le résultat d’une expression analysée — ActionsDAG — sera sérialisé et envoyé depuis l’initiateur avec le chemin des données, car ce type d’information, nécessaire au pruning, n’est disponible qu’en tant que méta-informations lors de la liste des fichiers de données, opération effectuée uniquement par l’initiateur, mais qui doit être appliquée aux données sur chaque serveur de lecture). #81136 (Kseniia Sumarokova). - Correction du pruning des partitions avec les fonctions de cluster de data lake. #82131 (Kseniia Sumarokova).
- Correction de la lecture des données partitionnées dans la fonction de table DeltaLakeCluster. Dans cette PR, la protocol version des fonctions de cluster est augmentée, ce qui permet d’envoyer des informations supplémentaires de l’initiateur vers les répliques. Ces informations supplémentaires contiennent l’expression de transformation delta-kernel, nécessaire pour analyser les colonnes de partition (et, à l’avenir, d’autres éléments comme les generated columns, etc.). #82132 (Kseniia Sumarokova).
- Désormais, la base de données Datalake renvoie une exception plus explicite. Corrige #81211. #82304 (alesapin).
- Implémentation du filtrage interne de
delta-kernel-rs(statistiques et pruning des partitions) dans le stockageDeltaLake. #84006 (Kseniia Sumarokova). - Ajout d’un paramètre
delta_lake_enable_expression_visitor_loggingpour désactiver les logs du visiteur d’expressions, car ils peuvent être trop verbeux, même avec un niveau de log de test, lors du débogage. #84315 (Kseniia Sumarokova). - Ajout du paramètre
delta_lake_snapshot_versionpour permettre la lecture d’une version de snapshot spécifique dans le moteur de tableDeltaLake. #85295 (Kseniia Sumarokova).
Intégration au data lake
- Accélère le listage des tables dans les catalogues de données grâce à des requêtes asynchrones. #81084 (alesapin).
- Prend en charge
TimestampTZdans le catalogue Glue. Cela résout #81654. #83132 (scanhex12). - Scinde FormatParserGroup en deux structs indépendantes : la première est responsable des ressources partagées de calcul et d’IO, la seconde des ressources de filtre partagées (filter ActionDag, KeyCondition). Cela permet une utilisation partagée plus souple de ces structures par différents threads. #83997 (Daniil Ivanik).
- Ajoute
partition_columns_in_data_file, qui manquait à la configuration Azure. #85373 (Arthur Passos). - Ajoute le flag show_data_lake_catalogs_in_system_tables pour gérer l’ajout des tables de data lake dans system.tables ; résout #85384. #85411 (Smita Kulkarni).
S3 et le stockage objet
- Implémentation des méthodes
moveFileetreplaceFiledanss3_plain_rewritableafin de permettre son utilisation comme disk de database. #79424 (Tuan Pham Anh). - Les requêtes de lecture et d’écriture S3 sont soumises à une limitation de débit au niveau du socket HTTP (plutôt qu’au niveau des requêtes S3 complètes) afin d’éviter les problèmes liés au throttling de
max_remote_read_network_bandwidth_for_serveretmax_remote_write_network_bandwidth_for_server. #81837 (Sergei Trifonov). - Cette PR introduit un jitter dans le mécanisme de retry S3 lorsque la configuration
s3_slow_all_threads_after_network_errorest enabled. #81849 (zoomxi). - Implémentation de l’authentication AWS S3 avec un IAM role fourni explicitement. Implémentation d’OAuth pour GCS. Ces fonctionnalités, auparavant disponibles uniquement dans ClickHouse Cloud, sont désormais open-source. Synchronisation de certaines interfaces, comme la sérialisation des paramètres de connexion pour les object storages. #84011 (Alexey Milovidov).
- Possibilité d’utiliser n’importe quelle storage policy (c.-à-d. un object storage tel que S3) pour l’aggregation/le tri externes. #84734 (Azat Khuzhin).
- Regroupement de tous les objects supprimés pour exécuter une seule opération de suppression sur l’object storage. #85316 (Mikhail Artemenko).
Moteur de table S3Queue
- Les macros comme
{uuid}peuvent désormais être utilisées dans le paramètrekeeper_pathdu moteur de table S3Queue. #82463 (Nikolay Degterinsky). - Ajout d’un nouveau paramètre du serveur
s3queue_disable_streaming, qui désactive le streaming pour les tables utilisant le moteur de table S3Queue. Ce paramètre peut être modifié sans redémarrage du serveur. #82515 (Kseniia Sumarokova). - Ajout des colonnes
commit_timeetcommit_idàsystem.s3queue_log. #83016 (Kseniia Sumarokova). - Ajout de logs pour le processus d’arrêt de S3Queue. #83163 (Kseniia Sumarokova).
- Arrêt du streaming de S3(Azure/etc)Queue avant l’arrêt de toute table lors de l’arrêt du serveur. #83530 (Kseniia Sumarokova).
- Prise en charge de la modification des paramètres d’insert des vues matérialisées au niveau de la table
S3Queue. Ajout de nouveaux paramètres au niveau deS3Queue:min_insert_block_size_rows_for_materialized_viewsetmin_insert_block_size_bytes_for_materialized_views. Par défaut, les paramètres au niveau du profil sont utilisés, et ceux définis au niveau deS3Queueles remplacent. #83971 (Kseniia Sumarokova). - Correction du mode ordered de S3Queue : arrêt anticipé si l’arrêt a été demandé. #84463 (Kseniia Sumarokova).
Intégration Kafka
- Compter manuellement les messages consommés afin d’éviter de dépendre du dernier offset validé dans StorageKafka2. #81662 (János Benjamin Antal).
- Intégrer
StorageKafka2danssystem.kafka_consumers. #82652 (János Benjamin Antal).
Améliorations de ClickHouse Keeper
- Amélioration de Keeper : déplacement des fichiers de changelog entre disques dans un thread d’arrière-plan. Auparavant, déplacer le changelog vers un autre disque bloquait globalement Keeper jusqu’à la fin du déplacement. Cela entraînait une dégradation des performances lorsque le déplacement était une opération longue (par exemple vers un disque S3). #82485 (Antonio Andelic).
- Amélioration de Keeper : ajout d’une nouvelle configuration
keeper_server.cleanup_old_and_ignore_new_acl. Si elle est activée, les ACL de tous les nœuds seront supprimées, tandis que les ACL des nouvelles requêtes seront ignorées. Si l’objectif est de supprimer complètement les ACL des nœuds, il est important de laisser cette configuration activée jusqu’à la création d’un nouveau snapshot. #82496 (Antonio Andelic). - Amélioration de Keeper : prise en charge d’autorisations spécifiques pour l’ACL world:anyone. #82755 (Antonio Andelic).
- Ajout de la prise en charge de la définition d’ACL Keeper supplémentaires pour des chemins dans la configuration. Si vous souhaitez ajouter une ACL supplémentaire pour un chemin spécifique, définissez-la dans la configuration sous
zookeeper.path_acls. #82898 (Antonio Andelic). - Ajoute un ProfileEvent lorsque Keeper rejette une écriture en raison de la limite mémoire souple. #82963 (Xander Garbett).
- Active par défaut dans Keeper les feature flags
create_if_not_exists,check_not_exists,remove_recursive, qui permettent de nouveaux types de requêtes. #83488 (Antonio Andelic). - Ajout de la prise en charge de l’application d’ACL supplémentaires sur des nœuds Keeper spécifiques à l’aide de la configuration
apply_to_children. #84137 (Antonio Andelic). - Ajout de la commande
get_aclà KeeperClient. #84641 (Antonio Andelic). - Ajout de 4LW dans Keeper,
lgrq, pour activer ou désactiver la journalisation des requêtes reçues. #84719 (Antonio Andelic). - Réduit la contention sur le verrou de stockage dans Keeper. #84732 (Antonio Andelic).
- L’outil
encrypt_decryptprend désormais en charge les connexions ZooKeeper chiffrées. #84764 (Roman Vasin). - Limite la taille du cache des entrées de log de Keeper par nombre d’entrées à l’aide de
keeper_server.coordination_settings.latest_logs_cache_entry_count_thresholdetkeeper_server.coordination_settings.commit_logs_cache_entry_count_threshold. #84877 (Antonio Andelic).
Types JSON et Dynamic
- Ajout du fichier
columns_substreams.txtà la Wide part pour suivre tous les sous-flux stockés dans la part. Cela permet de suivre les flux dynamiques dans les types JSON et Dynamic, et donc d’éviter de lire un échantillon de ces colonnes pour obtenir la liste des flux dynamiques (par exemple pour calculer la taille des colonnes). Tous les flux dynamiques apparaissent désormais également danssystem.parts_columns. #81091 (Pavel Kruglov). ALTER UPDATEest désormais autorisé dans les colonnes JSON et Dynamic. #82419 (Pavel Kruglov).- Vous pouvez désormais utiliser les types
TimeetTime64dans le type JSON. #83784 (Yarik Briukhovetskyi). - Ajout du paramètre
json_type_escape_dots_in_keyspour échapper les points dans les clés JSON lors de l’analyse du type JSON. Ce paramètre est désactivé par défaut. #84207 (Pavel Kruglov).
Formats Parquet et ORC
- Introduction de paramètres permettant de définir la taille du bloc de compression ORC, et mise à jour de sa valeur par défaut de 64KB à 256KB pour rester cohérent avec Spark ou Hive. #80602 (李扬).
- Prise en charge de l’écriture des enum Parquet sous forme de tableau d’octets, comme l’exige la spécification. J’ajouterai plus d’informations plus tard. #81090 (Arthur Passos).
- Prise en charge de l’écriture de GeoParquet comme format de sortie. #81784 (scanhex12).
Requêtes distribuées et répliques parallèles
- Un nouveau paramètre, enable_add_distinct_to_in_subqueries, a été introduit. Lorsqu’il est activé, ClickHouse ajoute automatiquement DISTINCT aux sous-requêtes des clauses IN pour les requêtes distribuées. Cela peut réduire considérablement la taille des tables temporaires transférées entre les shards et améliorer l’efficacité du réseau. Remarque : c’est un compromis : si les transferts réseau diminuent, un travail supplémentaire de fusion (déduplication) est nécessaire sur chaque nœud. Activez ce paramètre lorsque le transfert réseau constitue un goulot d’étranglement et que le coût de fusion reste acceptable. #81908 (fhw12345).
- Prise en charge des fonctions de table
remote-()avec les répliques parallèles lorsqu’un cluster est fourni dans l’argumentaddress_expression. Corrige également #73295. #82904 (Igor Nikonov). - Les jointures avec répliques parallèles utilisent désormais l’étape logique de jointure. En cas de problème avec des requêtes de jointure utilisant des répliques parallèles, essayez
SET query_plan_use_new_logical_join_step=0et signalez une issue. #83801 (Vladimir Cherkasov).
Paramètres et configuration
- Le paramètre
allow_experimental_join_conditionest désormais obsolète. #80566 (Vladimir Cherkasov). - Les throttlers réseau globaux et par utilisateur ne sont jamais réinitialisés, ce qui garantit que les limites
max_network_bandwidth_for_all_usersetmax_network_bandwidth_for_all_usersne sont jamais dépassées. #81729 (Sergei Trifonov). - Ajoute le paramètre
optimize_rewrite_regexp_functions(activé par défaut), qui permet à l’optimiseur de réécrire certains appels àreplaceRegexpAll,replaceRegexpOneetextractsous des formes plus simples et plus efficaces lorsque des motifs d’expression régulière spécifiques sont détectés. (issue #81981). #81992 (Amos Bird). - Ajuste la file d’attente des serveurs TCP (64 par défaut) en fonction de listen_backlog (4096 par défaut). #82045 (Azat Khuzhin).
- Ajoute la possibilité de recharger
max_local_read_bandwidth_for_serveretmax_local_write_bandwidth_for_serverà la volée, sans redémarrer le serveur. #82083 (Kai Zhu). - Introduit le paramètre
enable_vector_similarity_index, qui doit être activé pour utiliser l’index de similarité vectorielle. Le paramètre existantallow_experimental_vector_similarity_indexest désormais obsolète. Il fonctionne toujours si nécessaire. #83459 (Robert Schulze). - Ajoute
max_joined_block_size_bytes, en complément demax_joined_block_size_rows, pour limiter l’utilisation mémoire des JOIN avec des colonnes volumineuses. #83869 (Nikolai Kochetov). - Corrige la compatibilité de cluster_function_process_archive_on_multiple_nodes. #83968 (Kseniia Sumarokova).
- Active par défaut la prise en charge des sous-requêtes corrélées. #85107 (Dmitry Novik).
- Ajoute les paramètres
database_replicatedqui définissent les valeurs par défaut de DatabaseReplicatedSettings. Si le paramètre n’est pas présent dans la requête CREATE de la base de données Replicated, la valeur de ce paramètre est utilisée. #85127 (Tuan Pham Anh). - Autorise les arguments clé-valeur dans le moteur/fonction de table
s3ous3Cluster, par exemples3('url', CSV, structure = 'a Int32', compression_method = 'gzip'). #85134 (Kseniia Sumarokova). - Exécute
EXISTSnon corrélé comme une sous-requête scalaire. Cela permet d’utiliser un cache de sous-requêtes scalaires et d’évaluer le résultat comme une constante, ce qui est utile pour les index. Pour des raisons de compatibilité, le nouveau paramètreexecute_exists_as_scalar_subquery=1a été ajouté. #85481 (Nikolai Kochetov). - Prend en charge la résolution d’un plus grand nombre de cas pour les identifiants composés. En particulier, cela améliore la compatibilité de
ARRAY JOINavec l’ancien analyseur. Introduit un nouveau paramètreanalyzer_compatibility_allow_compound_identifiers_in_unflatten_nestedpour conserver l’ancien comportement. #85492 (Nikolai Kochetov).
Tables système et observabilité
- Ajout de métriques de pression aux métriques asynchrones de ClickHouse. #80779 (Xander Garbett).
- Ajout des métriques
MarkCacheEvictedBytes,MarkCacheEvictedMarks,MarkCacheEvictedFilespour suivre les évictions du mark cache. (issue #60989). #80799 (Shivji Kumar Jha). - La table
system.formatscontient désormais des informations détaillées sur les formats, comme le type de contenu HTTP, les capacités d’inférence de schéma, etc. #81505 (Alexey Milovidov). - Ajout de la prise en charge de la suppression de tous les avertissements de la table
system.warningsà l’aide deTRUNCATE TABLE system.warnings. #82087 (Vladimir Cherkasov). - Liste des licences des crates Rust dans
system.licenses. #82440 (Raúl Marín). - Estimation des CNF/DNF complexes, par exemple
(a < 1 and a > 0) or b = 3, à l’aide des statistiques. #82663 (Han Fei). - Dans certains cas, il est nécessaire d’avoir plusieurs dimensions pour les métriques. Par exemple, compter les merges ou les mutations en échec par code d’erreur plutôt que d’avoir un seul compteur. #83030 (Miсhael Stetsyuk).
- Ajout de métriques de ressource du processus (telles que
UserTimeMicroseconds,SystemTimeMicroseconds,RealTimeMicroseconds) aux profile events depart_logpour les entréesMergeParts. #83460 (Vladimir Cherkasov). - Les métriques au niveau du cgroup et les métriques système sont désormais toutes rapportées ensemble. Les métriques au niveau du cgroup portent les noms
CGroup<Metric>et les métriques au niveau de l’OS (collectées depuis procfs) portent les nomsOS<Metric>. #84317 (Nikita Taranov). - Ajout de métriques dimensionnelles pour surveiller la taille des queues bornées concurrentes, étiquetées par type de queue et ID d’instance, pour une meilleure observabilité. #84675 (Miсhael Stetsyuk).
- La table
system.columnsfournit désormaiscolumncomme alias de la colonnenameexistante. #84695 (Yunchi Pang). - Ajout d’une colonne de format string à
system.errors. Cette colonne est nécessaire pour regrouper un même type d’erreur dans les règles d’alerte. #84776 (Miсhael Stetsyuk). - Les limites d’Async Log sont désormais ajustables, avec ajout de l’introspection. #85105 (Raúl Marín).
- Ignorer
UNKNOWN_DATABASElors de la récupération des tailles des colonnes de table poursystem.columns. #85632 (Azat Khuzhin).
Moteurs de base de données
Améliorations système et internes
- Corrige l’attachement de bases de données avec des disques distants en lecture seule en ajoutant manuellement les UUID de table à DatabaseCatalog. #82670 (Tuan Pham Anh).
- Améliore la gestion des tâches DDL lorsque
distributed_ddl_output_mode='*_only_active'en n’attendant pas les nouvelles répliques ou les répliques restaurées dont le retard de réplication dépassemax_replication_lag_to_enqueue. Cela permet d’éviter les erreursDDL task is not finished on some hostslorsqu’une nouvelle réplique devient active après l’initialisation ou la récupération, mais a accumulé un journal de réplication important. Implémente également la requêteSYSTEM SYNC DATABASE REPLICA STRICT, qui attend que le journal de réplication repasse sousmax_replication_lag_to_enqueue. #83302 (Alexander Tokmakov). - Modifie l’ordre d’arrêt de SystemLogs afin qu’il intervienne après les tables ordinaires (et avant les tables système, au lieu d’avant les tables ordinaires). #83134 (Kseniia Sumarokova).
- Ajoute le paramètre serveur
logs_to_keeppour les paramètres des bases de données Replicated, ce qui permet de configurer la valeur par défaut du paramètrelogs_to_keeppour les bases de données Replicated. Des valeurs plus faibles réduisent le nombre de nœuds ZooKeeper (particulièrement utile lorsqu’il y a de nombreuses bases de données), tandis que des valeurs plus élevées permettent aux répliques absentes de rattraper leur retard après de plus longues périodes d’indisponibilité. #84183 (Alexey Khatskevich). - Modifie la valeur par défaut du paramètre de base de données Replicated
max_retries_before_automatic_recoveryà 10, ce qui permet une récupération plus rapide dans certains cas. #84369 (Alexander Tokmakov). - Optimise les opérations DDL des vues matérialisées actualisables sans append dans les bases de données Replicated en évitant la création et le renommage des anciennes tables temporaires. #84858 (Tuan Pham Anh).
Réplication et synchronisation
Améliorations système et internes
- Améliore
SYSTEM RESTART REPLICApour réessayer de créer la table en cas de problèmes de connexion à ZooKeeper, afin d’éviter que des tables soient oubliées. #82616 (Nikolay Degterinsky). - Ajoute une validation d’UUID dans
ReplicatedMergeTree::executeMetadataAlterafin d’éviter des définitions de table incorrectes lorsqu’un échange de tables se produit entre l’obtention du StorageID et l’appel àIDatabase::alterTable. #82666 (Nikolay Degterinsky). - Supprime la logique expérimentale
send_metadataliée à la zero-copy replication expérimentale. Ce code n’a jamais été utilisé, n’était pas pris en charge et était probablement défectueux, sans aucun test pour en vérifier le fonctionnement. #82508 (alesapin). - Ajoute la prise en charge de l’expansion des macros dans
remote_fs_zero_copy_zookeeper_path. #85437 (Mikhail Koviazin).
Fonctions et expressions
- La fonction
addressToSymbolet la tablesystem.symbolsutiliseront des offsets de fichier au lieu d’adresses de mémoire virtuelle. #81896 (Alexey Milovidov). - Préserver autant que possible les noms des éléments lors de la dérivation des supertypes pour les tuples nommés. #81345 (lgbo).
- Autorisation de combiner différentes collations pour une même colonne dans différentes fenêtres. #82877 (Yakov Olkhovskiy).
- Ajout d’une fonction pour écrire des types au format WKB. #82935 (scanhex12).
- Ajout de la possibilité d’analyser
TimeetTime64aux formats MM:SS, M:SS, SS ou S. #83299 (Yarik Briukhovetskyi). - La fonction
reinterpret()prend désormais en charge la conversion versArray(T)oùTest un type de données de taille fixe (issue #82621). #83399 (Shankar Iyer). - Correction des fonctions
structureToProtobufSchemaetstructureToCapnProtoSchemapour ajouter correctement un octet nul de fin au lieu d’utiliser un saut de ligne, ce qui évite les sauts de ligne manquants dans la sortie et d’éventuels débordements de tampon dans les fonctions qui dépendent de l’octet nul (commelogTrace,demangle,extractURLParameter,toStringCutToZeroetencrypt/decrypt). Clôture de l’issue #85062. #85063 (Alexey Milovidov). - Correction du dictionary layout
regexp_treepour prendre en charge le traitement de chaînes contenant des octets nuls. #85063 (Alexey Milovidov). - Correction de la fonction
formatRowNoNewline, qui tronquait à tort le dernier caractère de la sortie lorsqu’elle était appelée avec le formatValuesou tout autre format sans saut de ligne en fin de ligne. #85063 (Alexey Milovidov). - Correction d’un problème de sûreté des exceptions dans la fonction
stem, qui pouvait entraîner des fuites de mémoire dans de rares cas. #85063 (Alexey Milovidov). - Correction de la fonction
initcappour les argumentsFixedStringafin de reconnaître correctement le début des mots en début de chaîne lorsque la chaîne précédente d’un block se terminait par un caractère de mot. #85063 (Alexey Milovidov). - Correction d’une vulnérabilité de sécurité dans le format Apache
ORCqui pouvait entraîner l’exposition de mémoire non initialisée. #85063 (Alexey Milovidov). - Le comportement de
replaceRegexpAllet de son aliasREGEXP_REPLACEa été modifié pour autoriser les correspondances vides à la fin des chaînes, même lorsque la correspondance précédente traitait la chaîne entière (par exemple^a*|a*$ou^|.*), afin de s’aligner sur la sémantique de JavaScript, Perl, Python, PHP et Ruby, tout en différant de PostgreSQL. #85063 (Alexey Milovidov). - Optimiser et simplifier l’implémentation de nombreuses fonctions de manipulation de chaînes. Correction de la documentation erronée de plusieurs fonctions. Remarque : la valeur renvoyée par
byteSizepour les colonnes String et les types complexes contenant des colonnes String est passée de 9 octets par chaîne vide à 8 octets par chaîne vide, ce qui correspond au comportement attendu. #85063 (Alexey Milovidov). - Autoriser un pas nul dans les fonctions
timeSeries*ToGrid(). Cela fait partie du#3de https://github.com/ClickHouse/ClickHouse/pull/75036. #85390 (Vitaly Baranov). - Prise en charge des tableaux imbriqués pour la fonction
nested. #85719 (Nikolai Kochetov).
Améliorations de MergeTree
- Désactive de manière plus granulaire les skipping indexes qui dépendent de colonnes mises à jour à la volée ou par des patch parts. Désormais, les skipping indexes ne sont désactivés que dans les parts affectées par des on-the-fly mutations ou des patch parts ; auparavant, ils l’étaient pour toutes les parts. #84241 (Anton Popov).
- Ajoute le MergeTree setting
search_orphaned_parts_drivesafin de limiter le périmètre de recherche des parts, par exemple aux disques avec des metadata locales. #84710 (Ilya Golshtein). - Ajoute la prise en charge manquante de
read_in_order_use_virtual_rowpourWHERE. Cela permet d’éviter de lire davantage de parts pour les queries avec des filters qui n’ont pas été entièrement poussés versPREWHERE. #84835 (Nikolai Kochetov). - Corrige l’utilisation de la serialization « compact » des discriminators Variant dans MergeTree. Auparavant, elle n’était pas utilisée dans certains cas où elle aurait pu l’être. #84141 (Pavel Kruglov).
- Ajoute une limite (table setting
max_uncompressed_bytes_in_patches) pour le nombre total d’octets uncompressed dans les patch parts. Cela évite des ralentissements importants des queriesSELECTaprès des lightweight updates et empêche une utilisation abusive possible des lightweight updates. #85641 (Anton Popov).
Gestion du cache et de la mémoire
- Correction d’une erreur logique dans le filesystem cache : “Having zero bytes but range is not finished”. #81868 (Kseniia Sumarokova).
- Ajout du hachage par rendez-vous pour améliorer la localité du cache. #82511 (Anton Ivashkin).
- Refonte de la fonctionnalité de redimensionnement dynamique du filesystem cache. Ajout de logs supplémentaires pour l’introspection. #82556 (Kseniia Sumarokova).
- Réduction du surcoût du suivi de la mémoire des query pour les user-defined functions exécutables. #83929 (Eduard Karacharov).
- Toutes les allocations effectuées par des bibliothèques externes sont désormais visibles par le memory tracker de ClickHouse et correctement prises en compte. Cela peut entraîner une hausse de l’utilisation mémoire signalée pour certaines query ou des échecs avec
MEMORY_LIMIT_EXCEEDED. #84082 (Nikita Mikhaylov). - Allocation de la quantité minimale de mémoire nécessaire pour encrypted_buffer dans les collections nommées chiffrées. #84432 (Pablo Marcos).
Index de similarité vectorielle
- Empêche désormais les utilisateurs d’utiliser
nanetinfavecNumericIndexedVector. Corrige #82239 et quelques cas supplémentaires. #82681 (Raufs Dunamalijevs). - L’index de similarité vectorielle prend désormais en charge la quantification binaire. La quantification binaire réduit considérablement la consommation de mémoire et accélère la création d’un index vectoriel (grâce à un calcul plus rapide des distances). De plus, le paramètre existant
vector_search_postfilter_multiplierest désormais obsolète et a été remplacé par un paramètre plus général :vector_search_index_fetch_multiplier. #85024 (Shankar Iyer). - La recherche vectorielle approximative avec des index de similarité vectorielle est désormais GA. #85888 (Robert Schulze).
Gestion des erreurs et messages
- L’en-tête Connection est envoyé à la fin des en-têtes, lorsque l’on sait si la connexion doit être maintenue. #81951 (Sema Checherinda).
- Dans les versions précédentes, la multiplication de l’état d’une fonction d’agrégation par IPv4 produisait une erreur logique au lieu d’un code d’erreur approprié. Corrige #82817. #82818 (Alexey Milovidov).
- Meilleure gestion des erreurs dans
AsynchronousMetrics. Si le répertoire/sys/blockexiste mais n’est pas accessible, le serveur démarrera sans surveiller les périphériques de bloc. Corrige #79229. #83115 (Alexey Milovidov). - Il y avait une vérification incorrecte des dépendances pour l’
INSERTavec des vues matérialisées contenant des SELECT mal formés, et l’utilisateur pouvait recevoir unestd::exceptionobscure au lieu d’une erreur explicite accompagnée d’une explication claire. C’est désormais corrigé. Corrige : #82889. #83190 (Nikita Mikhaylov). - Ne plus afficher de très longues descriptions des actions d’expression dans les messages d’exception. Corrige #83164. #83350 (Alexey Milovidov).
- Lorsque le stockage est en cours d’arrêt,
getStatuslève une exceptionErrorCodes::ABORTED. Auparavant, cela faisait échouer la requête SELECT. Désormais, nous interceptons les exceptionsErrorCodes::ABORTEDet les ignorons intentionnellement. #83435 (Miсhael Stetsyuk). - Les messages d’exception pour certaines situations liées au chargement et à l’ajout de projections sont désormais plus faciles à lire. #83728 (Robert Schulze).
- Vérifier si la connexion est annulée avant de vérifier l’EOF afin d’éviter de lire depuis une connexion fermée. Corrige #83893. #84227 (Raufs Dunamalijevs).
- Amélioration de la gestion de l’arrêt du serveur pour les connexions client grâce à une simplification des vérifications internes. #84312 (Raufs Dunamalijevs).
- Les erreurs de bas niveau lors de l’exécution des UDF échouent désormais avec le code d’erreur
UDF_EXECUTION_FAILED, alors qu’auparavant différents codes d’erreur pouvaient être renvoyés. #84547 (Xu Jia).
Améliorations de la mise en forme SQL
- Correction de la mise en forme incohérente de
CREATE DICTIONARY. Résout #82105. #82829 (Alexey Milovidov). - Correction de la mise en forme incohérente de
TTLlorsqu’il contient une fonctionmaterialize. Résout #82828. #82831 (Alexey Milovidov). - Correction de la mise en forme incohérente de
EXPLAIN ASTdans une sous-requête lorsqu’elle contient des options de sortie telles que INTO OUTFILE. Résout #82826. #82840 (Alexey Milovidov). - Correction de la mise en forme incohérente des expressions entre parenthèses avec des alias dans un contexte où aucun alias n’est autorisé. Résout #82836. Résout #82837. #82867 (Alexey Milovidov).
- Correction de la mise en forme de CREATE USER avec des paramètres de requête (c.-à-d.
CREATE USER {username:Identifier} IDENTIFIED WITH no_password). #84376 (Azat Khuzhin). - Correction de l’analyse syntaxique d’une virgule finale dans les colonnes de la requête CREATE DICTIONARY après une colonne avec paramètres, par exemple Decimal(8). Résout #85586. #85653 (Nikolay Degterinsky).
Intégrations externes
- Uniformisation des noms de paramètres dans ODBC et JDBC lors de l’utilisation de collections nommées. #83410 (Andrey Zvonov).
- MongoDB : analyse implicite des chaînes en types numériques. Auparavant, si une valeur de type chaîne était reçue depuis une source MongoDB pour une colonne numérique dans une table ClickHouse, une exception était levée. Désormais, le moteur tente d’analyser automatiquement la valeur numérique à partir de la chaîne. Corrige #81167. #84069 (Kirill Nikiforov).
- Autorisation de
simdjsonsur les architectures non prises en charge (auparavant, cela entraînait des erreursCANNOT_ALLOCATE_MEMORY). #84966 (Azat Khuzhin).
Améliorations diverses
- Ajout du moteur de table Ytsaurus et de la fonction de table. #77606 (MikhailBurdukov).
- Amélioration de HashJoin::needUsedFlagsForPerRightTableRow : renvoie false pour un cross join. #82379 (lgbo).
- Autorise l’écriture/la lecture de colonnes Map comme tableaux de tuples. #82408 (MikhailBurdukov).
- Cette PR a été revertée. #82884 (Mithun p).
- Logs asynchrones : limite le nombre maximal d’entrées conservées dans la file d’attente. #83214 (Raúl Marín).
- Active Date/Date32 en tant qu’entiers dans les formats d’entrée JSON. #83597 (MikhailBurdukov).
- Meilleure prise en charge des index Bloom filter (regular, ngram et token) afin qu’ils soient utilisés lorsque le premier argument est un tableau constant (l’ensemble) et le second la colonne indexée (le sous-ensemble), pour une exécution des requêtes plus efficace. #84700 (Doron David).
- Autorise la conversion de type des valeurs de set lors du pushdown des filtres
IN/GLOBAL INsur les clés primaires du stockage KeyValue (par ex. EmbeddedRocksDB, KeeperMap). #84515 (Eduard Karacharov). - Élimine les scans complets lorsque l’analyse d’index aboutit à des plages vides pour la lecture avec des répliques parallèles. #84971 (Eduard Karacharov).
- Corrige une série de problèmes pouvant survenir lors de l’exécution de tests d’intégration en local. #82135 (Oleg Doronin).
- Active trace_log.symbolize par défaut pour les anciens déploiements. #85456 (Azat Khuzhin).
Corrections de bugs (dysfonctionnements visibles par l’utilisateur dans une version stable officielle)
Optimisations des performances
- Corrige une dégradation des performances dans SummingMergeTree introduite en 25.5 dans https://github.com/ClickHouse/ClickHouse/pull/79051. #82130 (Pavel Kruglov).
- Corrige une dégradation des performances avec l’analyseur activé, lorsque les requêtes secondaires lisaient systématiquement toutes les colonnes des VIEWs. Corrige #81718. #83036 (Dmitry Novik).
- Ne vérifie pas les dépendances cycliques lors de la création d’une table sans dépendances. Cela corrige une dégradation des performances dans les cas d’utilisation impliquant la création de milliers de tables, introduite dans https://github.com/ClickHouse/ClickHouse/pull/65405. #83077 (Pavel Kruglov).
- Exécute les agrégats de fenêtre
DISTINCTen temps linéaire et corrige un bug danssumDistinct. Clôt #79792. Clôt #52253. #79859 (Nihal Z. Miaji).
Correctifs liés à l’exécution des requêtes
- Pour les requêtes combinant
ORDER BY ... LIMIT BY ... LIMIT N, lorsque ORDER BY est exécuté sous forme de PartialSorting, le compteurrows_before_limit_at_leastreflète désormais le nombre de lignes consommées par la clause LIMIT, et non plus le nombre de lignes consommées par la transformation de tri. #78999 (Eduard Karacharov). - Correction d’une logical error avec l’opérateur
<=>et le moteur Join : la query renvoie désormais le code d’error approprié. #80165 (Vladimir Cherkasov). - Correction d’un crash dans la fonction
looplorsqu’elle est utilisée avec la famille de fonctionsremote. Garantit que la clause LIMIT est respectée dansloop(remote(...)). #80299 (Julia Kartseva). - Correction du comportement incorrect des fonctions
to_utc_timestampetfrom_utc_timestamplors du traitement des dates antérieures à l’epoch Unix (1970-01-01) et postérieures à la date maximale (2106-02-07 06:28:15). Désormais, ces fonctions ramènent correctement les valeurs, respectivement au début de l’epoch et à la date maximale. #80498 (Surya Kant Ranjan). - Correction de l’exécution de
INavectransform_null_in=1lorsqu’il y a une valeur NULL dans l’argument de gauche et un résultat de subquery non Nullable. #81584 (Pavel Kruglov). - Correction du problème où les colonnes requises ne sont pas lues lors du traitement d’une subquery corrélée scalaire. Corrige #81716. #81805 (Dmitry Novik).
- Correction de l’analyse du filtre lorsqu’une seule colonne d’alias constante est utilisée dans la query. Corrige #79448. #82037 (Dmitry Novik).
- Correction de l’error
Not found columnpour les requêtes avecarrayJoindans la conditionWHEREetIndexSet. #82113 (Nikolai Kochetov). - Correction de l’exception
TOO_DEEP_SUBQUERIESlorsque la définition d’une CTE référence une autre expression de table portant le même nom. #83413 (Dmitry Novik). - Correction d’un résultat incorrect pour les queries avec la clause
WHERE ... IN (<subquery>)lorsque le query condition cache est activé (paramètreuse_query_condition_cache). #83445 (LB7666). INSERT SELECTavecUNION ALLpouvait entraîner un déréférencement de pointeur null dans un cas limite. Cela clôt #83618. #83643 (Alexey Milovidov).- Correction de
LOGICAL_ERRORlors de l’analyse de l’expression de ROW POLICY pour les colonnes corrélées. #82618 (Dmitry Novik). - Correction de résultats erronés lorsque le query condition cache est utilisé conjointement avec des CTE récursives (issue #81506). #84026 (zhongyuankai).
- Correction de l’analyse récursive infinie des définitions
WINDOWinvalides. Corrige #83131. #84242 (Dmitry Novik). - Correction du problème
Not-ready SetpourIN (subquery)dans le paramètreadditional_table_filters expression. #85210 (Nikolai Kochetov). - Correction d’une erreur logique liée à des sous-requêtes dupliquées lorsque
optimize_syntax_fuse_functionsest activé, clôture de #75511. #83300 (Vladimir Cherkasov).
Correctifs pour Iceberg et DataLake
- Correction de la résolution des métadonnées lors des requêtes sur des tables Iceberg via le REST catalog. … #80562 (Saurabh Kumar Ojha).
- Correction de data races dans Iceberg. #82088 (Azat Khuzhin).
- Correction de « Context has expired » pour Iceberg. #82146 (Azat Khuzhin).
- ClickHouse peut désormais lire des tables Iceberg depuis le Glue catalog après une évolution de schéma. Corrige #81272. #82301 (alesapin).
- Correction de data races dans Iceberg. #82841 (Azat Khuzhin).
- Désactive le pruning de fichiers basé sur les bornes pour les éléments d’Array Iceberg et les valeurs de Map Iceberg, y compris tous leurs sous-champs imbriqués. #83520 (Daniil Ivanik).
- Correction des écritures Iceberg pour les types complexes. #85330 (scanhex12).
- L’écriture des bornes inférieures et supérieures n’est pas prise en charge pour les types complexes. #85332 (scanhex12).
- Correction de la nullabilité des fields dans Iceberg. #85977 (scanhex12).
- Ne crée plus de fichier de suppression Iceberg vide. #86061 (scanhex12).
- Met à jour le timestamp des métadonnées lors des écritures Iceberg. #85711 (scanhex12).
- Spark ne peut pas lire les position delete files. #85762 (scanhex12).
- Ne récupère plus le schéma à partir des manifest files, mais stocke séparément les schémas pertinents pour chaque snapshot. Déduit le schéma pertinent de chaque fichier de données à partir du snapshot correspondant. Le comportement précédent ne respectait pas la spécification Iceberg pour les entrées de manifest files avec le statut existing. #84588 (Daniil Ivanik).
- Désormais, Iceberg n’essaie plus de mettre en cache la snapshot version pertinente entre les requêtes SELECT et tente toujours de résoudre le snapshot correctement. La précédente tentative de mise en cache du snapshot Iceberg entraînait des problèmes lors de l’utilisation d’une Iceberg table avec le time travel. #85038 (Daniil Ivanik).
- Correction de la résolution des métadonnées lors des requêtes sur des tables Iceberg via le REST catalog. … #85531 (Saurabh Kumar Ojha).
- Correction du masquage des secrets dans les table functions icebergS3Cluster et icebergAzureCluster. #85658 (MikhailBurdukov).
Correctifs DeltaLake
- Correction de l’élagage de colonnes avec delta-kernel dans le stockage
DeltaLake. Résout #84543. #84745 (Kseniia Sumarokova). - Actualisation des informations d’authentification dans delta-kernel du stockage DeltaLake. #84751 (Kseniia Sumarokova).
- Correction d’un segfault dans l’implémentation de delta-kernel. #85160 (Kseniia Sumarokova).
- Correction d’une condition de concurrence dans l’implémentation delta-kernel du moteur
DeltaLake. #85221 (Kseniia Sumarokova). - Correction de la lecture des données partitionnées avec delta-kernel désactivé dans le moteur
DeltaLake. Cette fonctionnalité était défaillante en 25.7 (https://github.com/ClickHouse/ClickHouse/pull/81136). #85223 (Kseniia Sumarokova). - Remplacement, pour compatibilité, de la valeur antérieure à 25.5 de
allow_experimental_delta_kernel_rsparfalse. #84587 (Kseniia Sumarokova). - Correction de la lecture du nombre depuis le cache pour delta lake. #85704 (Kseniia Sumarokova).
Correctifs TTL et MergeTree
- Recalcule l’index min-max lorsque le TTL réduit le nombre de lignes, afin de garantir la fiabilité des algorithmes qui s’appuient dessus, tels que
minmax_count_projection. Cela résout #77091. #77166 (Amos Bird). - Corrige le recalcul incorrect du TTL dans TTL GROUP BY lors de la mise à jour du TTL. #81222 (Evgeniy Ulasik).
- Corrige l’erreur « Context has expired » lors des merges lorsqu’un dict est utilisé dans une expression TTL. #81690 (Azat Khuzhin).
- Corrige LOGICAL_ERROR et le plantage qui s’ensuit lors de l’utilisation de la même colonne dans le TTL pour GROUP BY et SET. #82054 (Pablo Marcos).
- MergeTree ne fait désormais plus rien en lien avec le TTL si tous les TTL sont supprimés de la table. #84441 (alesapin).
- Corrige le fait que
ALTER MODIFY ORDER BYne validait pas les colonnes TTL dans les clés de tri. Les colonnes TTL sont désormais correctement rejetées lorsqu’elles sont utilisées dans des clausesORDER BYau cours d’opérationsALTER, ce qui évite une corruption potentielle de la table. #84536 (xiaohuanlin).
Correctifs des projections
- Correction d’une erreur logique lors de la matérialisation d’une projection lorsque le type de colonne a été changé en Nullable. #80741 (Pavel Kruglov).
- Correction de l’utilisation incorrecte des métadonnées du parent dans la fonction de table
mergeTreeProjectionlorsqueenable_shared_storage_snapshot_in_query = 1. Cela concerne #82634. #82638 (Amos Bird). - Correction d’un crash rare de ClickHouse lorsqu’une table comporte une projection, que
lightweight_mutation_projection_mode = 'rebuild'et que l’utilisateur exécute une suppression légère qui supprime TOUTES les lignes de n’importe quel block de la table. #84158 (alesapin). - Correction de la sauvegarde des parts avec des projections corrompues. #85362 (Antonio Andelic).
- Interdiction d’utiliser la colonne
_part_offsetdans les projections dans les versions tant qu’elle n’est pas stabilisée. #85372 (Sema Checherinda).
Correctifs pour les répliques parallèles
- Pour certaines requêtes exécutées avec des répliques parallèles, les optimisations de lecture dans l’ordre pouvaient être appliquées sur un initiateur, mais pas sur les nœuds distants. Cela entraînait l’utilisation de modes de lecture différents par le coordinateur des répliques parallèles (sur l’initiateur) et par les nœuds distants, ce qui constitue une erreur logique. #80652 (Igor Nikonov).
- Désactivation des répliques parallèles lorsqu’une sous-requête contient
FINAL#81401. #83455 (zoomxi). - Correction de
LOGICAL_ERRORpour les requêtes avec des répliques parallèles et plusieurs INNER JOIN suivis d’un RIGHT JOIN. N’utilisez pas de répliques parallèles pour ce type de requêtes. #84299 (Vladimir Cherkasov). - Les requêtes avec des répliques parallèles qui utilisent l’optimisation de lecture inversée dans l’ordre peuvent produire des résultats incorrects. #85406 (Igor Nikonov).
Authentification et sécurité
- Correction du masquage des valeurs des named collections dans les logs/query_log. Clôt #82405. #82510 (Kseniia Sumarokova).
- Définition d’un sel pour les données d’authentification lors de l’analyse de l’AST avec le type SCRAM_SHA256_PASSWORD. #82888 (Tuan Pham Anh).
- Masquage des informations d’authentification du schema registry Avro afin qu’elles ne soient visibles ni par l’utilisateur ni dans les logs. #83713 (János Benjamin Antal).
- Correction d’un comportement incorrect lors de l’exécution de
REVOKE S3 ON system.*, qui révoquait les autorisations S3 pour*.*. Cela corrige #83417. #83420 (pufit). - Correction d’un crash du serveur lorsqu’un utilisateur créé avec
no_passwordtente de se connecter après que le paramètre serveurallow_no_passworda été défini sur 0. #84426 (Shankar Iyer). - Amélioration du message d’erreur lors d’une tentative de création d’un utilisateur identifié par JWT. #85072 (Konstantin Bogdanov).
- Masquage des identifiants pour
deltaLakeAzure,deltaLakeCluster,icebergS3ClustereticebergAzureCluster. #85889 (Julian Maicher). - Correction d’un bug introduit dans #79963. Lors d’un insert dans une vue matérialisée avec un definer, la vérification des autorisations doit utiliser les grants du definer. Corrige #79951. #83502 (pufit).
Correctifs de sauvegarde et de restauration
- Corrige la sauvegarde d’une table
Memoryvide, qui entraînait l’échec de la restauration de la sauvegarde avec l’erreurBACKUP_ENTRY_NOT_FOUND. #82791 (Julia Kartseva). - Corrige un message d’erreur trompeur lors de la restauration d’une sauvegarde sur un disque en lecture seule. #83051 (Julia Kartseva).
- Corrige le lancement de sauvegardes internes superflues après des problèmes de connexion. #84755 (Vitaly Baranov).
Fonctions de fenêtre et d’agrégation
- Correction d’un plantage possible dans
Aggregatoren cas d’exception lors de la fusion. #81450 (Nikita Taranov). - Correction d’un plantage possible dans
Aggregatoren cas d’exception lors de la fusion. #82022 (Nikita Taranov). - Correction d’une erreur de copier-coller dans arraySimilarity, qui interdit désormais l’utilisation de poids UInt32 et Int32. Mise à jour des tests et de la documentation. #82103 (Mikhail f. Shiryaev).
- Correction d’un dépassement de capacité dans les fonctions
numericIndexedVectorPointwiseAdd,numericIndexedVectorPointwiseSubtract,numericIndexedVectorPointwiseMultiply,numericIndexedVectorPointwiseDivide, qui se produisait lors de leur application à de grands nombres. #82165 (Raufs Dunamalijevs).
Correctifs pour Parquet et le format de fichier
- Correction du bloom filter Parquet qui appliquait à tort une condition comme
WHERE function(key) IN (...)comme s’il s’agissait deWHERE key IN (...). #81255 (Michael Kolupaev). - Correction du writer Parquet qui générait des statistiques incorrectes (min/max) pour les types Decimal. #83754 (Michael Kolupaev).
- Correction de la désérialisation de
groupArraySample/groupArrayLasten cas d’éléments vides (la désérialisation pouvait ignorer une partie des données binaires si l’entrée était vide, ce qui peut entraîner une corruption lors de la lecture des données et UNKNOWN_PACKET_FROM_SERVER dans le protocole TCP). Cela n’affecte pas les types numériques ni les types de date et heure. #82763 (Pedro Ferreira). - Correction de l’écriture des chemins JSON avec des valeurs NULL au format RowBinary. #83923 (Pavel Kruglov).
Correctifs liés aux JOIN
- Correction de la modification du filter pour les queries avec une expression JOIN sur une table utilisant le moteur
Merge. Corrige #82092. #82950 (Dmitry Novik). - Correction du crash lorsqu’un stockage key-value est joint avec une clé convertie en un autre type. #82497 (Pervakov Grigorii).
- Correction d’une erreur logique lors de la résolution du matcher dans une query comportant plusieurs JOIN, ferme #81969. #82421 (Vladimir Cherkasov).
- Correction de la fusion du filter dans la condition JOIN lorsque les opérandes d’égalité sont de types différents ou font référence à des constantes. Corrige #83432. #84145 (Dmitry Novik).
- Correction de l’erreur logique
Expected single dictionary argument for functionlors de l’exécution d’un JOIN sur une condition d’inégalité lorsque l’une des colonnes estLowCardinalityet l’autre une constante. Ferme #81779. #84019 (Alexey Milovidov).
Correctifs de la base de données Replicated
- Correction de
markReplicasActivedans DDLWorker et DatabaseReplicatedDDLWorker. #81395 (Tuan Pham Anh). - Correction de
DatabaseReplicated::getClusterImpl. Si le premier élément (ou les premiers éléments) dehostsaid == DROPPED_MARKet qu’il n’existe aucun autre élément pour le même shard, le premier élément deshardssera un vecteur vide, ce qui provoquestd::out_of_range. #82093 (Miсhael Stetsyuk). - Suivi du nombre de jobs asynchrones de chargement de tables. Si des jobs sont en cours d’exécution, ne met pas à jour
tail_ptrdansTransactionLog::removeOldEntries. #82824 (Tuan Pham Anh). - Correction du problème suivant : si une table MergeTree est créée avec
add_minmax_index_for_numeric_columns=1ouadd_minmax_index_for_string_columns=1, l’index est ensuite matérialisé lors d’une opération ALTER, ce qui empêche la base de données Replicated de s’initialiser correctement sur une nouvelle réplique. #83751 (Nikolay Degterinsky). - Correction de la création de RMV sur une nouvelle réplique de la base de données Replicated si DEFINER est supprimé. #85327 (Nikolay Degterinsky).
- Correction de la récupération des bases de données répliquées lorsque le déplacement du fichier de métadonnées prend beaucoup de temps. #85177 (Tuan Pham Anh).
- Récupération forcée de la base de données Replicated après restauration des métadonnées de la base de données dans Keeper. #85960 (Tuan Pham Anh).
- Correction d’un bug dans la récupération de la base de données
Replicated: si un nom de table contient le symbole%, la table pouvait être recréée avec un nom différent pendant la récupération. #85987 (Alexander Tokmakov). - Désormais, le worker DDL supprime les hôtes obsolètes de l’ensemble de répliques. Cela réduit la quantité de métadonnées stockées dans ZooKeeper. #88154 (alesapin).
Correctifs pour les lightweight updates
- Correction des lightweight updates pour les tables utilisant les moteurs
ReplacingMergeTreeetCollapsingMergeTree. #84851 (Anton Popov). - Correction d’une erreur logique dans les lightweight updates qui mettent à jour toutes les colonnes de la table. #84380 (Anton Popov).
- Correction des lightweight updates pour les tables utilisant le moteur
ReplicatedMergeTreeet créées sur des serveurs exécutant une version antérieure à 25.7. #84933 (Anton Popov). - Correction des lightweight updates pour les tables utilisant un moteur
MergeTreenon répliqué après l’exécution d’une requêteALTER TABLE ... REPLACE PARTITION. #84941 (Anton Popov). - Correction du nettoyage des patch parts dans
ReplicatedMergeTree. Auparavant, le résultat d’une lightweight update pouvait temporairement ne pas être visible sur la réplique tant que la part fusionnée ou mutée qui matérialise les patch parts n’avait pas été téléchargée depuis une autre réplique. #85121 (Anton Popov).
Corrections liées à S3 et au stockage d’objets
- Correction de la validation des arguments de la fonction de table S3 lors du masquage des secrets, évitant un possible
LOGICAL_ERROR, clôture de #80620. #82056 (Vladimir Cherkasov). - Correction d’un possible interblocage pour les requêtes distantes lorsque le serveur subit une pression mémoire. #82160 (Kirill).
- Ajout d’une expiration au jeton AWS ECS afin qu’il puisse être rechargé. #82422 (Konstantin Bogdanov).
- Correction de la désactivation de l’alignement sur les limites pour le buffer mis en cache dans les moteurs de table externes. Cela a été cassé dans https://github.com/ClickHouse/ClickHouse/pull/81868. #82493 (Kseniia Sumarokova).
- Correction de
no_sign_requestpour le client S3. Il peut être utilisé pour éviter explicitement de signer les requêtes S3. Il peut également être défini pour des endpoints spécifiques à l’aide de paramètres basés sur les endpoints. #83379 (Antonio Andelic). - Ignore les nœuds indisponibles pendant un INSERT SELECT depuis s3Cluster() vers un MergeTree replicated. #83676 (Igor Nikonov).
- Correction de la condition de retour anticipé pour le ralentissement du débit des requêtes S3 : pour activer ce comportement lorsque tous les threads sont en pause à cause d’une erreur renouvelable, il suffit que s3_slow_all_threads_after_network_error ou backup_slow_all_threads_after_retryable_s3_error soit à true, au lieu d’exiger les deux. #85505 (Julia Kartseva).
- Correction d’une erreur logique lors de la lecture via des fonctions de stockage d’objets à travers une table Distributed ou une fonction de table distante. Corrige : #84658, corrige #85173, corrige #52022. #85359 (alesapin).
- Correction de l’erreur logique S3Queue « Table is already registered ». Clôture de #84433. Cassé après https://github.com/ClickHouse/ClickHouse/pull/83530. #84677 (Kseniia Sumarokova).
- Correction de valeurs de paramètres trop grandes, qui cassaient les tables S3Queue et le redémarrage des répliques. #86074 (Nikolay Degterinsky).
Corrections pour les types Dynamic et Variant
- Correction du rollback d’une colonne Dynamic en cas d’échec de l’analyse. #82169 (Pavel Kruglov).
- Correction d’un possible plantage du type Variant dans UNION. #83295 (Pavel Kruglov).
- Correction de la lecture d’une colonne Variant avec matérialisation différée. #84400 (Pavel Kruglov).
- Ne pas valider les types expérimentaux ou suspects lors de l’exécution des expressions default/materialize pendant la lecture d’une table existante. #81618 (Pavel Kruglov).
Correctifs de Keeper
- Correctif de Keeper : mise à jour correcte du nombre total de watches lors de la suppression de nœuds éphémères à la fermeture d’une session. #83583 (Antonio Andelic).
- Correction des écritures dans le désordre dans le changelog de Keeper. Auparavant, des écritures pouvaient être en cours dans le changelog, mais un rollback pouvait entraîner une modification concurrente du fichier de destination. Cela pouvait provoquer des logs incohérents, voire une perte de données. #84434 (Antonio Andelic).
- Correction de fuites dans Keeper avec le stockage rocksdb (les itérateurs n’étaient pas détruits). #84523 (Azat Khuzhin).
- Correction d’un problème où le paramètre Keeper
rotate_log_storage_interval = 0faisait planter ClickHouse. (issue #83975). #84637 (George Larionov). - Correction du nombre total de watches renvoyé par Keeper. #84890 (Antonio Andelic).
- Verrouillage du ‘mutex’ lors de la récupération de zookeeper depuis ‘view’ dans RefreshTask. #84699 (Tuan Pham Anh).
Correctifs d’indexation
- Correction d’un skipping excessif de granules lors du filtrage sur des index token/ngram avec une regexp contenant une alternance et une première alternative non littérale. #79373 (Eduard Karacharov).
- L’implémentation du paramètre
use_skip_indexes_if_final_exact_mode(introduit dans la version 25.6) pouvait ne pas sélectionner une plage candidate pertinente selon les paramètres du moteurMergeTree/ la distribution des données. Ce problème est désormais résolu. #82667 (Shankar Iyer). - L’optimisation du paramètre
use_skip_indexes_if_final_exact_mode(introduit dans la version 25.6) pouvait ne pas sélectionner une plage candidate pertinente selon les paramètres du moteurMergeTree/ la distribution des données. Ce problème est désormais résolu. #82879 (Shankar Iyer). - Auparavant, les index
setne prenaient pas en compte les colonnesNullablelors de la vérification du passage des granules par le filtre (ticket #75485). #84305 (Elmi Ahmadov). - La comparaison avec la valeur nan n’utilisait pas les plages correctes lors de l’évaluation de l’index
MinMax. #84386 (Elmi Ahmadov). - Les tokenizers
ngrametno_opne provoquent plus de plantage de l’index textuel (expérimental) en présence de tokens d’entrée vides. #84849 (Robert Schulze).
Correctifs des vues matérialisées
- Correction d’un bug dans les dépendances de table qui faisait que les vues matérialisées ne prenaient pas en compte les requêtes INSERT. #82222 (Nikolay Degterinsky).
- Après https://github.com/ClickHouse/ClickHouse/pull/79963, l’utilisation de sous-colonnes dans les vues matérialisées ne fonctionnait plus et l’utilisateur pouvait recevoir l’erreur
Not found column X in block. Ce comportement a été corrigé. Correctif de : #82784. #83221 (Nikita Mikhaylov). - Correction de l’erreur illegal_type_of_argument dans les mv lorsque les types sont différents. #85135 (Sema Checherinda).
Correctifs pour Azure et le stockage dans le cloud
- Dans AzureBlobStorage, pour la copie native, les méthodes d’authentification sont comparées ; si une exception se produit pendant cette opération, le code a été mis à jour pour revenir à une lecture suivie d’une copie (c’est-à-dire une copie non native). #82693 (Smita Kulkarni).
- Corrige une double libération dans
AzureIteratorAsync. #85064 (Nikita Taranov).
Correctifs de plantage et de stabilité
- Corrige un plantage possible dans la journalisation lors de la fermeture d’une session, car
user_idpeut parfois être vide. #82513 (Bharat Nallan). - Corrige un plantage du client dû à une connexion laissée à l’état déconnecté après un
INSERTinvalide. #83253 (Azat Khuzhin). - Corrige un plantage lors du calcul de la taille d’un bloc contenant des colonnes vides. #83271 (Raúl Marín).
- Corrige un plantage pouvant survenir pour une query avec le paramètre
max_threads=1lorsqu’elle est exécutée sous charge avec l’ordonnancement CPU activé. #83387 (Fan Ziqi). - Fait de
zoutofmemoryune erreur matérielle, faute de quoi une erreur logique sera levée. Voir https://github.com/clickhouse/clickhouse-core-incidents/issues/877. #84420 (Han Fei). - Corrige un abort possible (dû à l’attente de terminaison des threads depuis la tâche) et, espérons-le, des blocages (dans les tests unitaires) lors de l’arrêt de
BackgroundSchedulePool. #83769 (Azat Khuzhin). - Corrige un interblocage causé par le thread de vérification d’annulation en arrière-plan. #84203 (Antonio Andelic).
- Corrige un interblocage à l’arrêt dû à un verrouillage récursif du contexte pendant le nettoyage du
library bridge. #83824 (Azat Khuzhin). - Corrige un plantage du client dû à une connexion laissée à l’état déconnecté après un
INSERTinvalide. #83842 (Azat Khuzhin). - Corrige un possible comportement indéfini (UB) pouvant entraîner des plantages en cas de
MEMORY_LIMIT_EXCEEDEDpendant la désérialisation de String. #85440 (Azat Khuzhin). - Corrige un plantage rare dans les insertions asynchrones qui modifient les paramètres
log_commentouinsert_deduplication_token. #85540 (Anton Popov).
Correctifs pour Glue et les catalogues
- Correction d’un bug dans l’intégration à Glue catalog. Désormais, ClickHouse peut lire des tables avec des types de données imbriqués dont certaines sous-colonnes contiennent des valeurs décimales, par exemple :
map<string, decimal(9, 2)>. Corrige #81301. #82114 (alesapin). - ClickHouse lit désormais les tables de Glue Catalog lorsque le type de table est indiqué en minuscules. #84316 (alesapin).
- Unity catalog ignore désormais les schémas comportant des types de données inhabituels dans le cas des tables non-Delta. Corrige #85699. #85950 (alesapin).
Correctifs de fonctions
- Les fonctions
trim{Left,Right,Both}prennent désormais en charge les chaînes d’entrée de type “FixedString(N)”. Par exemple,SELECT trimBoth(toFixedString('abc', 3), 'ac')fonctionne désormais. #82691 (Robert Schulze). - La fonction
trim, lorsqu’elle est appelée avec des entrées toutes constantes, produit désormais une chaîne de sortie constante. (Bug #78796). #82900 (Robert Schulze). - Corrige une sortie incorrecte de la fonction
formatDateTimelorsque le formateur%fest utilisé avec des formateurs de taille variable (par ex.%M). #83020 (Robert Schulze). - Corrige un bug lié aux arguments
NULLdans la fonctionCASE. #82436 (Yarik Briukhovetskyi). - N’utilise pas de parties non pertinentes d’un dictionnaire partagé dans la fonction
lowCardinalityKeys. #83118 (Alexey Milovidov). - Corrige
colorSRGBToOKLCH/colorOKLCHToSRGBpour les mélanges d’arguments constants et non constants. #83906 (Azat Khuzhin). - Corrige la construction incorrecte de tuples vides dans la fonction
array(). Cela corrige #84202. #84297 (Amos Bird). - Corrige un bug qui entraînait un encodage et un décodage Bech32 incorrects. Le bug n’avait pas été détecté initialement, car une implémentation en ligne de l’algorithme utilisée pour les tests présentait le même problème. #84257 (George Larionov).
Correctifs des requêtes distribuées
- Le
INSERT SELECTdistribué parallèle avecLIMITétait autorisé, ce qui était incorrect et entraînait une duplication des données dans la table cible. #84477 (Igor Nikonov). - Ne pas tenter de remplacer les fonctions de table par leur alternative cluster en présence d’un
JOINou d’une sous-requête. #84335 (Konstantin Bogdanov). - Ajout d’une vérification lorsqu’une sous-requête corrélée est utilisée dans un contexte distribué afin d’éviter un plantage. Corrige #82205. #85030 (Dmitry Novik).
- L’utilisation de
distributed_depthcomme indicateur de fonction*Clusterétait incorrecte et pouvait entraîner une duplication des données ;client_info.collaborate_with_initiatorest désormais utilisé à la place. #85734 (Konstantin Bogdanov). - Prise en charge des constantes globales de l’instruction
WITHpour leINSERT SELECTdistribué parallèle avec une table de destinationDistributed. Auparavant, la query pouvait générer une erreurUnknown expression identifier. #85811 (Nikolai Kochetov). - Correction d’une erreur logique lors d’une tentative de
CREATE ... AS (SELECT * FROM s3Cluster(...))avecDatabaseReplicated. #85904 (Konstantin Bogdanov). - Ajout de vérifications sur
sharding_keylors d’unALTERde la tableDistributed. Auparavant, unALTERincorrect pouvait casser la définition de la table et empêcher le redémarrage du server. #86015 (Nikolay Degterinsky).
Corrections des métriques et du monitoring
- Correction de la validation des paramètres des métriques asynchrones
asynchronous_metrics_update_period_setasynchronous_heavy_metrics_update_period_s. #82310 (Bharat Nallan). - Correction des métriques
IndexUncompressedCacheBytes/IndexUncompressedCacheCells/IndexMarkCacheBytes/IndexMarkCacheFiles(elles étaient auparavant incluses dans une métrique sans le préfixeCache). #83730 (Azat Khuzhin). - Correction de
LOGICAL_ERRORdans QueryMetricLog : le mutex ne peut pas êtreNULL. #82979 (Pablo Marcos). - Correction des métriques KafkaAssignedPartitions et KafkaConsumersWithAssignment, qui étaient incorrectes. #85494 (Ilya Golshtein).
- Correction de la sous-estimation de la statistique des octets traités lorsque
PREWHERE(explicite ou automatique) est utilisé. #85495 (Michael Kolupaev). - Correction de la dérive du suivi de la mémoire dans le background schedule pool et l’executor. #84946 (Azat Khuzhin).
Correctifs liés aux types de données et aux conversions
- Correction des cas où l’analyse de Time pouvait entraîner des problèmes avec msan. Corrige : #82477. #82514 (Yarik Briukhovetskyi).
- Correction du tri des valeurs NaN dans le type
LowCardinality(Float32|Float64|BFloat16). #83786 (Pervakov Grigorii). - Correction d’un dépassement de capacité pour les grandes valeurs (>2106-02-07) lors de la conversion de
DateenDateTime64. #83982 (Yarik Briukhovetskyi). - Correction d’un problème lors de la lecture implicite de valeurs Time négatives dans la table, et clarification de la documentation. #83091 (Yarik Briukhovetskyi).
- Le codec
DoubleDeltane peut désormais être appliqué qu’à des colonnes de type numérique. En particulier, les colonnesFixedStringne peuvent plus être compressées avecDoubleDelta. (corrige #80220). #84383 (Jimmy Aguilar Mena). - Correction d’une perte de précision dans
JSONExtractlors de la conversion de nombres JSON en types Decimal. Désormais, les valeurs numériques JSON conservent leur représentation décimale exacte, ce qui évite les erreurs d’arrondi liées aux nombres à virgule flottante. #85665 (ssive7b).
Gestion de la mémoire et des ressources
- Correction d’une mauvaise gestion de la mémoire liée à
max_untracked_memory. #83607 (Azat Khuzhin). - Ne plus partager
async_read_countersentre les requêtes. #83423 (Azat Khuzhin). - Correction d’éventuelles erreurs de File Cache non initialisé lorsqu’il est utilisé comme stockage temporaire de données. #83539 (Bharat Nallan).
- Toujours appliquer
filesystem_prefetches_limit(pas uniquement dansMergeTreePrefetchedReadPool). #83999 (Azat Khuzhin).
Correctifs de configuration et de paramètres
- Lors du passage de paramètres via l’URI, seule la dernière valeur est prise en compte. #82137 (Sema Checherinda).
- Correction des accès concurrents dans le client (en n’utilisant pas de contexte global) et des surcharges de
session_timezone(auparavant, sisession_timezoneétait défini, par exemple, dansusers.xml/les options du client sur une valeur non vide, et dans le contexte de la requête sur une valeur vide, alors la valeur deusers.xmlétait utilisée, ce qui était incorrect ; désormais, le contexte de la requête aura toujours priorité sur le contexte global). #82444 (Azat Khuzhin). - Interdire de définir
threadpool_writer_pool_sizeà zéro afin de garantir que les opérations du serveur ne restent pas bloquées. #82532 (Bharat Nallan). - Correction d’un léger dépassement de capacité d’entier dans la configuration du paramètre
role_cache_expiration_time_seconds(issue #83374). #83461 (wushap). - Interdire la valeur zéro pour
max_insert_block_size, car cela pouvait provoquer une erreur logique. #83688 (Bharat Nallan). - Correction d’une boucle infinie dans
estimateCompressionRatio()avecblock_size_bytes=0. #83704 (Azat Khuzhin). - Des paramètres comme
date_time_input_formatétaient tout simplement ignorés lors de l’utilisation de HTTP avec multipart. #85570 (Sema Checherinda).
Correctifs MongoDB
- Auparavant, les définitions du moteur de table
MongoDBpouvaient inclure un composant de chemin dans l’argumenthost:port, qui était ignoré sans avertissement. L’intégration MongoDB refuse de charger de telles tables. Avec ce correctif, nous autorisons le chargement de telles tables et ignorons le composant de chemin si le moteurMongoDBcomporte cinq arguments, en utilisant le nom de la base de données fourni dans les arguments. Remarque : ce correctif ne s’applique pas aux tables nouvellement créées ni aux requêtes utilisant la fonction de tablemongo, ni aux sources de dictionnaire et aux collections nommées. #81942 (Vladimir Cherkasov).
Correctifs divers
- Dans les versions précédentes, le serveur renvoyait un contenu excessif pour les requêtes vers
/js. Cela corrige #61890. #81895 (Alexey Milovidov). - Correction de
InterpreterInsertQuery::extendQueryLogElemImplpour ajouter des accents graves aux noms de base de données et de table lorsque nécessaire (par exemple, lorsque les noms contiennent des caractères spéciaux comme-). #81528 (Ilia Shvyrialkin). - Correction d’une possible condition de concurrence entre le thread de suggestion et le thread principal du client. #82233 (Azat Khuzhin).
- Correction de la sûreté vis-à-vis des exceptions dans la réécriture de union/intersect/except_default_mode. Cela corrige #82664. #82820 (Alexey Milovidov).
- Lors de l’utilisation d’une implémentation de Database sans mise en cache, les métadonnées de la table correspondante sont supprimées une fois les colonnes renvoyées et la référence est invalidée. #82939 (buyval01).
- L’appel Onprogress dans JSONEachRowWithProgress est synchronisé avec la finalisation. #83879 (Sema Checherinda).
- Correction d’un bogue rare où la requête
MATERIALIZE COLUMNpouvait entraîner des fichiers inattendus danschecksums.txtet, à terme, des data parts détachées. #84007 (alesapin). - Gestion correcte des exceptions lors du rafraîchissement périodique des parts. #84083 (Azat Khuzhin).
- Correction de la génération des noms de colonnes pour les littéraux booléens afin d’utiliser “true”/“false” au lieu de “1”/“0”, ce qui évite les conflits de noms de colonnes entre littéraux booléens et entiers dans les requêtes. #84945 (xiaohuanlin).
- Correction de problèmes potentiels de tri imprécis dans la table Merge. #85025 (Xiaozhe Yu).
- Implémentation des API manquantes pour DiskEncrypted. #85028 (Azat Khuzhin).
- Introduction d’un paramètre de rétrocompatibilité pour permettre au nouvel analyseur de référencer un alias externe dans la clause
WITHen cas de conflit de noms. Cela corrige #82700. #83797 (Dmitry Novik). - Autorisation de référencer n’importe quelle table dans l’argument
view(...)de la fonction de tableremotelorsque l’analyseur est activé. Cela corrige #78717. Cela corrige #79377. #83844 (Dmitry Novik). - Correction de l’écriture avec append (dans MergeTree utilisé pour les transactions expérimentales) avec les types de métadonnées
plain_rewritable/plain, auparavant simplement ignorés. #83695 (Tuan Pham Anh). - Correction de l’utilisation du logger dans
IAccessStorage. #84365 (Konstantin Bogdanov). - Correction du pruning des fichiers via une colonne virtuelle dans les data lakes. #84520 (Kseniia Sumarokova).
- Correction d’un problème où l’interrogation d’une source distante lente pouvait provoquer un dépassement des limites d’un vecteur. #84820 (George Larionov).
- Stocke correctement tous les paramètres dans les métadonnées de table pour le moteur object queue. #84860 (Antonio Andelic).
- Correction de l’erreur
CORRUPTED_DATAlorsque des colonnes lazy sont utilisées avec un tri externe. #84738 (János Benjamin Antal). - Suppression des appels inutiles à
getStatus()pendant les requêtesSYSTEM DROP REPLICA. Corrige le cas où une table est supprimée en arrière-plan et où l’exceptionShutdown for storage is calledest levée. #85220 (Nikolay Degterinsky). - Ajout des vérifications manquantes sur la longueur des noms de table dans les requêtes
CREATE OR REPLACEetRENAME. #85326 (Michael Kolupaev). - Correction d’un crash et d’une corruption de données lors de
ALTER UPDATEpour JSON. #85383 (Pavel Kruglov). - Correction d’un segfault dans le moteur MergeTree coalescent pour les grandes chaînes. Cela clôt #84582. #85709 (scanhex12).
- Correction de send_logs_source_regexp (après la refactorisation du logging asynchrone dans #85105). #85797 (Azat Khuzhin).
- Correction d’une possible incohérence pour les Dictionaries avec update_field en cas d’erreurs
MEMORY_LIMIT_EXCEEDED. #85807 (Azat Khuzhin). - Correction des requêtes HTTP effectuées par la table function
url()afin d’inclure correctement les numéros de port dans l’en-tête Host lors de l’accès à des ports non standard. Cela résout les échecs d’authentication lors de l’utilisation d’URL présignées avec des services S3-compatible comme MinIO exécutés sur des ports personnalisés, ce qui est courant dans les environnements de Development. (Corrige #85898). #85921 (Tom Quist).