Changements incompatibles avec les versions précédentes
Modifications des requêtes et de la syntaxe
- Correction d’une mise en forme incohérente des requêtes causée par une substitution incorrecte d’alias. Remarque : lorsque l’analyseur est désactivé, certaines requêtes
CREATE VIEWqui utilisentINavec une référence à un alias peuvent ne plus être traitées. Pour éviter cela, assurez-vous que l’analyseur est activé (il l’est par défaut depuis la version 24.3). #82838 (Alexey Milovidov). - Une liste de colonnes vide dans
JOIN USING ()est désormais considérée comme une erreur de syntaxe. Auparavant, cela était signalé commeINVALID_JOIN_ON_EXPRESSIONau moment de l’exécution de la requête et, dans certains cas (par exemple lors d’une jointure avec le moteurJoin), pouvait provoquer uneLOGICAL_ERROR. #92371 (Vladimir Cherkasov). - Les sous-requêtes ne sont plus autorisées dans
ORDER BYni dans les autres expressions de clé de table. #96847 (Alexey Milovidov).
Modifications des types de données
- Ajout de la prise en charge de
Nullable(Tuple). Pour l’activer, définissezallow_experimental_nullable_tuple_type = 1. #89643 (Nihal Z. Miaji). - Les données partagées avancées pour le type JSON sont désormais activées par défaut. Il ne sera pas possible de revenir à une version antérieure à 25.8, car les anciennes versions ne peuvent pas lire les data parts écrites avec le nouveau format JSON. Pour effectuer des mises à niveau en toute sécurité, définissez le paramètre
compatibilitysur la version précédente, ou les paramètres MergeTreedynamic_serialization_version='v2'etobject_serialization_version='v2'. #92511 (Pavel Kruglov). SKIP REGEXPdans le type JSON utilise désormais par défaut une correspondance partielle. #92847 (Pavel Kruglov).- Correction d’une erreur logique qui survenait en cas d’incompatibilité de type
Variant. #95811 (Bharat Nallan). - Les colonnes
DATEde PostgreSQL sont désormais inférées enDate32dans ClickHouse (auparavant, elles étaient inférées enDate, ce qui pouvait provoquer un dépassement de capacité pour les valeurs en dehors de sa plage limitée). L’insertion de valeursDate32dans PostgreSQL est désormais également prise en charge. #95999 (Alexey Milovidov).
Modifications du stockage et des index
- Amélioration de l’organisation du stockage de l’index de texte inversé pour rendre les lectures depuis le stockage objet plus efficaces, ainsi que des performances de fusion pour les tables dotées d’index de texte inversés. Si vous avez utilisé l’index de texte expérimental avant la version 25.12, vous devez supprimer l’index avant la mise à niveau, puis le reconstruire dans la nouvelle version. #91518 (Anton Popov).
- Le format de stockage des statistiques a changé — toutes les statistiques sont désormais stockées dans un seul fichier. #93414 (Anton Popov).
- Les noms de fichiers d’index sont désormais échappés afin d’éviter des parts corrompues. ClickHouse ne pourra pas charger les index comportant des caractères non ASCII dans leur nom s’ils ont été créés par des versions précédentes. Pour cela, utilisez le paramètre MergeTree
escape_index_filenames. #94079 (Raúl Marín).
Fonctionnalités supprimées
- Les codecs
DEFLATE_QPLetZSTD_QATont été supprimés. Convertissez toutes les données existantes compressées avec ces codecs à l’aide d’un autre codec avant la mise à niveau. Notez que l’utilisation de ces codecs nécessitait auparavant d’activerenable_deflate_qpl_codecouenable_zstd_qat_codec. #92150 (Robert Schulze). - L’
INSERTdans des colonnesALIASsimples n’est plus pris en charge (revient sur #84154). Cette fonctionnalité ne fonctionnait pas avec des formats personnalisés et n’était pas protégée par un paramètre. #92849 (Azat Khuzhin). - Le moteur de base de données
Lazya été supprimé et n’est plus disponible. #93627 (Alexey Milovidov). - Le mode
transposed_with_wide_viewdemetric_loga été supprimé en raison d’un bug qui le rendait inutilisable. Il n’est plus possible de définirsystem.metric_logavec ce mode. #93867 (Alexey Milovidov).
Modifications des paramètres et de la configuration
- Un nouveau paramètre renvoie désormais une erreur si un catalogue de data lake n’a pas accès au stockage objet. #93606 (Konstantin Vedernikov).
- La planification CPU des workloads est désormais préemptive par défaut. Voir le paramètre de serveur
cpu_slot_preemption. #94060 (Sergei Trifonov). - Les paramètres
exact_rows_before_limit,rows_before_aggregation,cross_to_inner_join_rewrite,regexp_dict_allow_hyperscan,regexp_dict_flag_case_insensitive,regexp_dict_flag_dotalletdictionary_use_async_executoront été reclassés : ils passent de paramètres de format à paramètres ordinaires. Il s’agit principalement d’un changement interne, sans effet visible pour l’utilisateur, sauf si vous avez spécifié l’un d’eux dans la définition d’un moteur de table Iceberg, DeltaLake, Kafka, S3, S3Queue, Azure, Hive, RabbitMQ, Set, FileLog ou NATS — auquel cas ces définitions renverront désormais une erreur au lieu de les ignorer silencieusement. #94106 (Robert Schulze). - La sémantique de
do_not_merge_across_partitions_select_finala été simplifiée. Auparavant, cette fonctionnalité pouvait être activée automatiquement même lorsqu’elle n’était pas explicitement définie, ce qui entraînait de la confusion et des problèmes en production. Désormais : la définir sur1active la fonctionnalité sans condition, et la définir sur0s’en remet au nouveau paramètreenable_automatic_decision_for_merging_across_partitions_for_final(valeur par défaut :1). #96110 (Nikita Taranov). - Ajout de la validation du schéma S3. #96194 (Konstantin Vedernikov).
- Le paramètre
apply_row_policy_after_finalest désormais activé par défaut, ce qui garantit queROW POLICYrespecteFINALcomme à l’origine. Si vous vous appuyiez auparavant suroptimize_move_to_prewhere_if_final=1pour appliquer les politiques de lignes avantFINAL, utilisez plutôtapply_row_policy_after_final=0. #97279 (Nikolai Kochetov).
Changements relatifs à la sécurité et au contrôle d’accès
joinGet/joinGetOrNullappliquent désormais les privilègesSELECTsur la table Join sous-jacente. L’exécution dejoinGet('db.table', 'column', key)nécessite le privilègeSELECTà la fois sur les colonnes de clé et sur la colonne d’attribut récupérée. Les requêtes dépourvues de ces privilèges échoueront avecACCESS_DENIED. Pour effectuer la migration, accordez les privilèges à l’aide deGRANT SELECT ON db.join_table TO userpour un accès complet à la table, ou deGRANT SELECT(key_col, attr_col) ON db.join_table TO userpour un accès au niveau des colonnes. #94307 (Vladimir Cherkasov).- Les requêtes
CREATE TABLE ... AS ...nécessitent désormais le privilègeSHOW COLUMNSau lieu deSHOW TABLES, qui faisait auparavant l’objet d’une vérification incorrecte. #94556 (pufit).
Modifications des insertions et de la déduplication
- La déduplication est désormais activée par défaut pour toutes les insertions. Auparavant, elle était désactivée pour les insertions asynchrones et les vues matérialisées, mais activée pour les insertions synchrones. Pour conserver l’ancien comportement, définissez explicitement
deduplicate_insert='backward_compatible_choice'(et de même pourdeduplicate_blocks_in_dependent_materialized_views). #95970 (Sema Checherinda).
Changements apportés aux tables système
- Les métadonnées en mémoire de S3Queue et AzureQueue sont désormais limitées. Les tables système ont été renommées :
system.s3queuedevientsystem.s3queue_metadata_cache, etsystem.azure_queuedevientsystem.azure_queue_metadata_cache. #95809 (Kseniia Sumarokova).
Autres changements incompatibles
- Correction des fonctions d’index H3 qui pouvaient provoquer un crash ou se bloquer lorsqu’elles étaient appelées avec des entrées non valides. #93657 (Michael Kolupaev).
Nouvelles fonctionnalités
Authentification
- Ajout de la prise en charge de l’authentification par mot de passe à usage unique basé sur le temps (TOTP). #71273 (Vladimir Cherkasov).
Fonctions
- Ajout de la fonction
reverseBySeparator, qui inverse l’ordre des sous-chaînes d’une chaîne de caractères séparées par un séparateur donné. #91780 (Xuewei Wang). - Ajout des fonctions
colorOKLABToSRGBetcolorSRGBToOKLABpour convertir entre les espaces colorimétriques sRGB et OKLAB. #93361 (Pranav Tiwari). - Ajout de la fonction
cosineDistanceTransposed, qui approxime la distance cosinus entre deux points. #93621 (Raufs Dunamalijevs). - Ajout de la fonction de hachage
xxh3_128. #96055 (Raúl Marín). - Ajout de la fonction
mergeTreeAnalyzeIndex()pour analyser l’utilisation des index de MergeTree. #92954 (Azat Khuzhin). - Les fonctions prennent désormais en charge le type
Variantvia le nouveauFunctionVariantAdaptor. #90900 (Bharat Nallan). - Certaines fonctions peuvent désormais être appelées sans parenthèses en SQL. #94678 (Aly Kafoury).
Tables système
- Ajout de la table
system.user_defined_functionspour surveiller l’état de chargement des UDF et leur configuration. #90340 (Xu Jia). - Ajout de la table
system.zookeeper_info. #90809 (Smita Kulkarni). - Ajout de la table
system.primeset de la fonction de tableprimes, contenant des nombres premiers par ordre croissant. #92776 (Nihal Z. Miaji). - Ajout de la colonne
filesàsystem.parts, affichant le nombre de fichiers dans chaque data part. #94337 (Match). - Ajout de la table
system.fail_pointspour examiner les failpoints existants et vérifier s’ils sont activés. #96762 (Pedro Ferreira).
Moteurs de table et stockage
- Ajout de la prise en charge des index textuels pour les colonnes
Array. #89895 (Jimmy Aguilar Mena). - Ajout de la prise en charge du catalogue REST Paimon. #92011 (JIaQi Tang).
- Ajout de la fonction de table
icebergLocalCluster. #93323 (Anton Ivashkin). - Ajout du paramètre de base de données
lazy_load_tables. Lorsqu’il est activé, les tables ne sont pas chargées au démarrage de la base de données — unStorageTableProxyléger est créé à la place et le véritable moteur de table est matérialisé au premier accès. #96283 (xiaohuanlin). - Ajout de la prise en charge d’un ZooKeeper auxiliaire pour
DatabaseReplicated. #91683 (RinChanNOW). - Les fichiers de données et les fichiers système présents dans le cache peuvent désormais être divisés en segments distincts. #87834 (MikhailBurdukov).
- Ajout d’un nouveau cache SLRU pour les métadonnées Parquet afin d’améliorer les performances de lecture en évitant les téléchargements de fichiers redondants. Le cache peut être supprimé avec
SYSTEM DROP PARQUET METADATA CACHE. #89750 (Grant Holly). - Les tables du data lake prennent désormais en charge
PREWHEREetPREWHEREen plusieurs étapes dans le lecteur Parquet v3. #93542 (Konstantin Vedernikov). - Ajout de l’analyse d’index distribuée sur plusieurs répliques, ce qui est particulièrement utile pour le stockage partagé et les grands volumes de données. #86786 (Azat Khuzhin).
Insertions et déduplication
- La déduplication des insertions asynchrones fonctionne désormais avec les vues matérialisées dépendantes. Lorsqu’une collision de
block_idse produit, le bloc d’origine est filtré pour supprimer les lignes associées aublock_iden collision, puis les lignes restantes sont transformées par les requêtes de toutes les vues matérialisées concernées. #89140 (Sema Checherinda). - Les insertions asynchrones prennent désormais en charge le quorum parallèle : les données insérées sont répliquées jusqu’au quorum et, si des doublons sont détectés, la requête attend que les données précédemment insérées soient elles aussi répliquées. #93356 (Sema Checherinda).
- Ajout du paramètre serveur
insert_deduplication_versionpour permettre la migration vers un hash de déduplication unifié. #95409 (Sema Checherinda). - Début de la migration des hash de déduplication. #97562 (Sema Checherinda).
SQL et fonctionnalités des requêtes
- Ajout de la syntaxe
SYSTEM CLEAR [...] CACHEcomme alternative plus explicite à la syntaxe existanteSYSTEM DROP [...] CACHE. L’ancienne syntaxe reste disponible. #93727 (Pranav Tiwari). - Ajout de la requête
OPTIMIZE <table> DRY RUN PARTS <part names>pour simuler des fusions sans valider la part résultante. Utile pour vérifier la correction des fusions, reproduire des bogues liés aux fusions et évaluer les performances des fusions. #96122 (Anton Popov). - Les requêtes DDL avec
ON CLUSTERpeuvent désormais être exécutées pour les bases de données Replicated lorsque le paramètreignore_on_cluster_for_replicated_databaseest activé. Le nom du cluster sera alors ignoré. #92872 (Kirill). - Introduction d’une nouvelle syntaxe et d’un nouveau cadre pour simplifier et étendre la fonctionnalité des index de projection. #91844 (Amos Bird).
Paramètres et configuration
- Ajout du paramètre
max_insert_block_size_bytespour un contrôle plus fin de la formation des blocs insérés. #92833 (Kirill Kopnev). - Ajout du paramètre
use_primary_key. Définissez-le surfalsepour désactiver le granule pruning basé sur la clé primaire. #93319 (Nihal Z. Miaji). - Ajout du paramètre
default_dictionary_database, qui permet à ClickHouse de résoudre les dictionnaires externes référencés sans qualificatif de base de données dans une base de données par défaut spécifiée. Cela simplifie la migration des dictionnaires globaux définis en XML vers des dictionnaires définis en SQL par base de données. #91412 (Dmitrii Plotnikov). - Ajout du paramètre
check_named_collection_dependencies(activé par défaut) pour empêcher la suppression de collections nommées utilisées par des tables. #96181 (Pablo Marcos). - Ajout d’un ordonnanceur max-min fair pour le contrôle de la concurrence, offrant une meilleure équité en cas de forte sursouscription, lorsque de nombreuses requêtes se disputent un nombre limité de CPU slots. Le paramètre de serveur
concurrent_threads_schedulerutilise désormaismax_min_fairpar défaut au lieu defair_round_robin, de sorte que les requêtes de courte durée ne sont plus pénalisées par celles de longue durée. #94732 #95300 (Sergei Trifonov). - Ajout des options de configuration
logger.startup_console_leveletlogger.shutdown_console_levelpour remplacer respectivement le niveau de log de la console pendant le démarrage et l’arrêt de ClickHouse. #95919 (Garrett Thomas).
Monitoring
- Ajout d’une métrique
ClickHouse_Infoau endpoint Prometheus/metrics, contenant des informations de version, ce qui permet de créer des graphiques pour suivre des informations détaillées sur les versions au fil du temps. #91125 (Christoph Wurm).
Fonctionnalités expérimentales
- La recherche vectorielle peut désormais répartir la charge entre les répliques d’un cluster, ce qui permet de prendre en charge de grands index vectoriels qui dépassent la capacité mémoire d’une seule VM. #95876 (Shankar Iyer).
- Ajout d’un AST fuzzer côté serveur, piloté par les paramètres
ast_fuzzer_runsetast_fuzzer_any_query. Une fois activé, le serveur exécute des variantes aléatoires de chaque requête après son exécution normale, puis en ignore les résultats. #97568 (Alexey Milovidov).
Améliorations
Requêtes et SQL
- Les sous-requêtes corrélées prennent désormais en charge davantage de moteurs de table et de types de sources de données. #90175 (Dmitry Novik).
- Les expressions
INnon constantes sont désormais prises en charge pour les scalaires (par ex.val1 NOT IN if(cond, val2, val3)). #93495 (Yarik Briukhovetskyi). - Prise en charge ajoutée des alias de table étendus pour les JOIN (par ex.
SELECT * FROM (SELECT 1) AS t(a) JOIN (SELECT 1) AS u(b) ON a = b). #95331 (Yarik Briukhovetskyi). EXPLAIN indices = 1est désormais pris en charge comme alias deEXPLAIN indexes = 1. #92774 (Pranav Tiwari).- Amélioration du pushdown des filtres pour les fonctions de table
numbersetprimes— ClickHouse peut désormais déduire des bornes de valeurs prudentes à partir des conditionsWHEREafin de limiter la génération de séquences et d’éviter les scans non bornés. #96115 (Nihal Z. Miaji). - L’optimisation des ensembles équivalents fonctionne désormais sur plusieurs opérations
INNER JOINconsécutives, de sorte que les filtres appliqués à n’importe quelle table de la chaîne sont automatiquement propagés à toutes les tables liées. #96596 (Vladimir Cherkasov). - Les fonctions de table cluster automatiques sont désormais utilisées pour les sous-requêtes simples dans
FROM. #96332 (phulv94). - L’index de clé primaire est désormais utilisé lors du filtrage avec
startsWithUTF8si le préfixe ne contient que des caractères ASCII. #97055 (vkcku). assumeNotNull,coalesceetifNullpermettent désormais l’élagage de la clé primaire et du skip index pour les prédicats de plage lorsque les colonnes de clé sont encapsulées dans ces fonctions. #94754 (Nihal Z. Miaji).- Les colonnes inutilisées sont désormais également supprimées de l’étape de lecture lors de la lecture depuis MergeTree, ce qui est particulièrement utile lorsqu’un filtre est poussé dans
PREWHERE. #89982 (János Benjamin Antal). - L’optimisation
use_join_disjunctions_push_downest désormais activée par défaut. #89313 (Alexey Milovidov). - L’optimisation
enable_join_runtime_filtersest désormais activée par défaut. #89314 (Alexey Milovidov). - La surcharge des filtres runtime de JOIN est désormais réduite grâce à la désactivation automatique des filtres lorsque trop de bits sont définis dans le filtre de Bloom ou que trop peu de lignes sont filtrées. #91578 (Alexander Gololobov).
- Ajout du paramètre
use_hash_table_stats_for_join_reordering(activé par défaut) pour contrôler si les statistiques de taille des tables de hachage à l’exécution sont utilisées pour le réordonnancement des jointures. #93912 (Vladimir Cherkasov). - L’analyse des index n’est désormais effectuée qu’une seule fois, que la requête s’exécute localement ou avec des répliques parallèles. #94854 (Nikita Taranov).
- Si un skip index dans une requête
FINALporte sur une colonne faisant partie de la clé primaire, la vérification supplémentaire d’intersection de la clé primaire dans les autres parts est désormais ignorée. #93899 (Shankar Iyer). DROP DATABASEsupprime désormais les tables dans l’ordre inverse des dépendances, ce qui améliore la robustesse face aux crashs lorsque la base de données contient des tables avec des dépendances de chargement. #97057 (Alexey Milovidov).- L’attente synchrone des mutations respecte désormais l’annulation des requêtes et les limites de temps. #96756 (Alexey Milovidov).
- La résurrection de données supprimées est désormais évitée si
ADD COLUMNest exécuté rapidement après une mutationDROP COLUMN. #96713 (Alexey Milovidov). - Les expressions
ALTERen conflit avecUPDATEetRENAME COLUMNlèvent désormais une exception appropriée au lieu d’une erreur logique. #96022 (Alexey Milovidov). - Le nombre total estimé de lignes et les statistiques NDV (nombre de valeurs distinctes) sont désormais collectés pour les colonnes de clé d’agrégation. #92812 (Alexander Gololobov).
- Toutes les répliques peuvent désormais récupérer des plages orphelines lors de la lecture avec répliques parallèles, ce qui améliore l’équilibrage de charge et réduit la latence de queue. #91374 (zoomxi).
- La précision de l’estimation a été améliorée pour les répliques parallèles automatiques avec des filtres
PREWHEREhautement sélectifs. #97231 (Nikita Taranov). joinGetprend désormais en charge les tables temporaires. #92973 (Eduard Karacharov).- L’agrégation externe, le tri et la jointure respectent désormais le paramètre de requête
temporary_files_codecdans tous les contextes. #92388 (Vladimir Cherkasov). - Les optimisations du plan de recherche de similarité vectorielle ne sont désormais appliquées que lorsqu’un index existe pour la colonne de recherche. #94998 (Eduard Karacharov).
Moteurs de table et stockage
StorageEmbeddedRocksDBprend désormais en charge plusieurs colonnes comme clé primaire. #33917 (usurai).- Ajout de la syntaxe
ALTER TABLE <table> ATTACH PART <part_name> FROM <directory_name>, qui permet de rattacher des parts depuis des sous-répertoires quelconques dedetached/(par ex. des parts avec les préfixesbroken-on-startouunexpected) sans avoir à les renommer manuellement dans le système de fichiers. #74816 (Anton Popov). min_free_disk_bytes_to_perform_insertfonctionne désormais correctement avec les volumes JBOD. #90878 (Aleksandr Musorin).max_parts_to_merge_at_onceest désormais respecté lors des fusions de suppression de parts liées au TTL. #95315 (Kseniia Sumarokova).- Les opérations en arrière-plan (mutation, fusion) peuvent désormais être configurées indépendamment via un profil
background, au lieu de partager les paramètres des requêtes classiques via le profildefault. #93905 (Arsen Muk). - Amélioration de la lecture des sous-colonnes grâce à un calcul correct de la taille, réduisant l’utilisation mémoire et améliorant les performances. #96251 (Pavel Kruglov).
- Limitation du nombre de flux de pipeline générés avec
split_intersecting_parts_ranges_into_layersafin d’éviter une consommation mémoire excessive. #96478 (Nikita Taranov). - L’index textuel est désormais GA. #96794 (Robert Schulze).
QBitest désormais GA. #95358 (Raufs Dunamalijevs).QBitprend désormais en charge les comparaisons d’égalité. #94078 (Raufs Dunamalijevs).- Lors de l’enregistrement du schéma de table avec
enable_positional_arguments_for_projections, les expressions sont désormais substituées aux arguments positionnels, ce qui permet de redémarrer le serveur avec ce paramètre désactivé. #96372 (Alexey Milovidov). - Dans les bases de données Replicated, le cluster mis en cache n’est plus mis à jour pour chaque requête factice. #96897 (Tuan Pham Anh).
- Ajout de la requête
SYSTEM RESET DDL WORKER [ON CLUSTER]pour réinitialiser l’état de DDLWorker, utile pour actualiser l’activité des réplicas lorsque les ID d’hôte sont mis à jour. #93780 (Tuan Pham Anh).
Lacs de données
- Ajout de la prise en charge des vecteurs de suppression dans DeltaLake. #93852 (Kseniia Sumarokova).
- Les vecteurs de suppression sont désormais également pris en charge pour
deltaLakeCluster. #94365 (Kseniia Sumarokova). - DeltaLake est désormais disponible sur macOS. #95985 (Alexey Milovidov).
- DeltaLake utilise désormais les résultats de
count()issus des métadonnées et affiche des statistiques de table correctes (nombre total d’octets et de lignes) danssystem.tables. #96190 (Kseniia Sumarokova). - Les lectures depuis le stockage d’objet sont désormais ignorées lors des requêtes sur des tables DeltaLake depuis
system.tables. #95899 (Antonio Andelic). - Ajout de la commande
SYSTEM RELOAD DELTA KERNEL TRACING <level>pour déboguer la journalisation de delta-kernel. #96763 (Kseniia Sumarokova). - L’emplacement des métadonnées des tables Iceberg est désormais déduit automatiquement si
metadata_locationn’est pas spécifié dans les métadonnées Glue. #91994 (Andrey Zvonov). - Les entrées des fichiers manifest Iceberg analysent désormais les bornes inférieure et supérieure des noms de fichiers de suppression par position, ce qui améliore la sélection des fichiers de données. #93980 (Daniil Ivanik).
- Activation de l’optimisation
PREWHEREpour les tables Iceberg. #95476 (Konstantin Vedernikov). - Les limites de threads et de mémoire sont désormais partagées entre les lecteurs de fichiers de données et de fichiers de suppression par position dans les tables Iceberg. #94701 (Yang Jiang).
- Ajout de la prise en charge de
ALTER TABLE RENAME COLUMNpour les tables Iceberg. #97455 (murphy-4o). - Ajout de la prise en charge de Google Cloud Storage pour les lacs de données. #93866 (Konstantin Vedernikov).
- Les jetons d’accès S3 sont désormais actualisés dynamiquement lors de longues requêtes avec Unity Catalog. #95069 (Konstantin Vedernikov).
- Ajout d’un contrôle d’accès basé sur les rôles au Glue catalog via les paramètres
aws_role_arnetaws_role_session_name. #90825 (Antonio Andelic).
S3Queue
- S3Queue prend désormais en charge le partitionnement Hive en mode
ordered. #81040 (Anton Ivashkin). - Refactorisation du traitement en mode
orderedde S3Queue avec des buckets, ce qui réduit le nombre de requêtes à Keeper et améliore les performances. #92889 (Kseniia Sumarokova). - Ajout d’une prise en charge plus générique du partitionnement pour le mode
orderedde S3Queue. #94321 (Bharat Nallan). - Ajout d’un bucketing basé sur la clé de partitionnement pour S3Queue en mode
ordered. #94698 (Bharat Nallan). - Prise en charge du ZooKeeper auxiliaire pour S3Queue via le paramètre
keeper_path. #95203 (Diego Nieto). - En mode
ordered, S3(Azure)Queue nettoie désormais les nœuds en échec en assurant le suivi des limites. #94412 (Kseniia Sumarokova).
S3 et stockage d’objets
- Les en-têtes S3
x-amz-server-side-encryptionne sont plus propagés aux requêtesHeadObject,UploadPartetCompleteMultipartUpload. #64577 (Francisco J. Jurado Moreno). storage_class_namepeut désormais être spécifié dans des collections nommées pour le moteur de table S3 et la fonction de tables3. #91926 (János Benjamin Antal).- Correction de la limitation de débit du point de terminaison des métadonnées EC2 lors de l’exécution d’un grand nombre de requêtes S3 concurrentes avec des identifiants de profil d’instance : le fournisseur d’identifiants est désormais mis en cache et partagé entre toutes les requêtes. #92891 (Sav).
- Ajout de la prise en charge de la compatibilité MinIO dans le SDK AWS S3 C++, avec mappage des codes d’erreur pour les erreurs spécifiques à MinIO, ce qui améliore la fiabilité des clusters MinIO autohébergés. #93082 (XiaoBinMu).
- Amélioration des messages d’erreur d’authentification S3 avec des indications invitant à vérifier les identifiants. #95648 (Gerald Latkovic).
- Azure Blob Storage bascule désormais vers une copie en lecture-écriture lorsque la copie native échoue, quelle que soit l’erreur rencontrée (auparavant, uniquement en cas d’Unauthorized). #92888 (Smita Kulkarni).
Fonctions
avg()prend désormais en charge les valeursDate,DateTimeetTimeen argument. #87845 (Yarik Briukhovetskyi).mapContainsKeyLikeetmapContainsValueLikepeuvent désormais tirer parti d’un index textuel surmapKeys()oumapValues(). #93049 (Michael Jarrett).flipCoordinatesprend désormais en charge le typeGeometry. #93303 (Bharat Nallan).- La limite de 64 jetons pour les fonctions
hasAnyTokensethasAllTokensa été supprimée. #95152 (Elmi Ahmadov). distanceCosinea été ajouté comme alias decosineDistance, en cohérence avec les autres fonctions de distance. #96065 (Raufs Dunamalijevs).- La fonction
iifa été ajoutée à ClickHouse KQL. #94790 (happyso). use_variant_as_common_typeest désormais activé par défaut, ce qui autorise les types incompatibles dansArray, les requêtesUNIONet les branchesif/multiIf/case. #90677 (Alexey Milovidov).
Paramètres et configuration
use_skip_indexes_on_data_readest désormais activé par défaut. #93407 (Shankar Iyer).- Ajout du paramètre
add_minmax_index_for_time_columns— lorsqu’il est activé, il crée automatiquement des index minmax pour toutes les colonnesDate,Date32,Time,Time64,DateTimeetDateTime64. #93355 (Michael Jarrett). - Ajout du paramètre
materialize_statistics_on_merge(activé par défaut) pour contrôler si les statistiques sont matérialisées lors des fusions. #93379 (Han Fei). - Ajout du paramètre
input_format_binary_max_type_complexitypour limiter le nombre total de nœuds de type pouvant être décodés en format binaire, afin d’empêcher les payloads malveillants. #92519 (Raufs Dunamalijevs). - Ajout du paramètre
trace_profile_events_listpour limiter le tracing avectrace_profile_eventà des noms d’événements spécifiques. #92298 (Alexey Milovidov). - Ajout du paramètre
type_json_allow_duplicated_key_with_literal_and_nested_objectpour autoriser les chemins dupliqués dans JSON lorsqu’un chemin est un littéral et l’autre un objet imbriqué, afin d’assurer la rétrocompatibilité avec les données créées avant l’application de la déduplication des chemins. #93604 (Pavel Kruglov). - Ajout du paramètre MergeTree
merge_max_dynamic_subcolumns_in_compact_partet du paramètre au niveau de la requêtemax_dynamic_subcolumns_in_json_type_parsingpour limiter les sous-colonnes dynamiques dans les colonnes JSON lors de la fusion et du parsing. #94184 (Pavel Kruglov). - Ajout de
use_statisticscomme alias deallow_statistics_optimize, en cohérence avecuse_primary_keyetuse_skip_indexes. #94366 (Robert Schulze). input_format_numbers_enum_on_conversion_errora été activé pour la conversion de Number vers Enum afin de vérifier l’existence des éléments. #94384 (Elmi Ahmadov).- Ajout d’un paramètre pour lever une exception lorsqu’une table a des row policies mais qu’aucune ne s’applique à l’utilisateur actuel, afin de détecter d’éventuelles erreurs de configuration. #95014 (Vitaly Baranov).
enable_max_bytes_limit_for_min_age_to_force_mergeest désormais activé par défaut pour la version de compatibilité 26.2 et ultérieure. #95917 (Christoph Wurm).core_dump.size_limitpeut désormais être rechargé à chaud sans redémarrage du serveur. #96524 (Miсhael Stetsyuk).- Les surcharges en ligne de commande sont désormais prises en compte lors du rechargement de la configuration. #80295 (Alexey Milovidov).
- Ajout d’une stratégie de rotation composite (taille + temps) pour les logs du serveur. #87620 (Jianmei Zhang).
- L’analyse distribuée des index peut désormais être activée en fonction du nombre de parts (
distributed_index_analysis_min_parts_to_activate) et de la taille des index (distributed_index_analysis_min_indexes_size_to_activate). #95216 (Azat Khuzhin). - Le cache des statistiques est désormais activé par défaut, avec une période de mise à jour de 300 secondes. #95841 (Han Fei).
- Le paramètre de configuration
pathest désormais résolu par rapport au répertoire de travail au démarrage, ce qui évite que les répertoires de données soient placés à des emplacements inhabituels. #96305 (Alexey Milovidov).
Tables système et monitoring
- Ajout de la colonne
parts_postpone_reasonsàsystem.mutationspour améliorer les diagnostics. #92206 (Shaohua Wang). - Ajout de la colonne
creation(implicit/explicit) àsystem.data_skipping_indices. #92378 (Raúl Marín). - Les tâches en cours d’exécution sont désormais reflétées dans
system.background_schedule_poolet dans la table de logs correspondante. #92587 (Azat Khuzhin). - Ajout de la Metric
QueryNonInternalpour suivre le nombre de queries non internes en cours d’exécution, ce qui aide à surveiller la concurrence par rapport à la limitemax_concurrent_queries. #94284 (Ashwath Singh). - Ajout d’une Metric asynchrone pour la durée écoulée du merge en cours d’exécution le plus long. #94825 (Raúl Marín).
- Ajout de
connection_addressetconnection_portàquery_logpour refléter la connexion physique (utile en cas de connexion via un proxy). #95471 (Yakov Olkhovskiy). - Ajout d’informations supplémentaires à
system.crash_log. #94112 (Miсhael Stetsyuk). - Ajout du nom du composant à
system.aggregated_zookeeper_log. #95882 (Antonio Andelic). - Ajout de la table
system.tokenizers, qui affiche tous les tokenizers disponibles. #96753 (Robert Schulze). - Ajout de la table
system.jemalloc_statset du point de terminaison HTTP/jemalloc.htmlpour la visualisation interactive des statistiques de l’allocator mémoire jemalloc. #97077 (Antonio Andelic). - Ajout de la table
system.jemalloc_profile_textpour lire et analyser les heap profiles de jemalloc, avec prise en charge des output formats raw, symbolized et collapsed. #97218 (Antonio Andelic). - Ajout de
mutation_idsàsystem.part_logpour les événementsMUTATE_PARTetMUTATE_PART_START. #93811 (Shaohua Wang). - Les server settings globaux imbriqués (par ex.
logger.level) sont désormais partiellement visibles danssystem.server_settings. #94001 (Hechem Selmi). view_duration_msaffiche désormais la durée pendant laquelle un group était actif, plutôt que la somme des durées des threads. #94966 (Sema Checherinda).system.blob_storage_logest désormais disponible pour Azure Blob Storage, Local et HDFS. Ajout de la colonneerror_code. #93105 (Alexey Milovidov).- Les tâches d’arrière-plan plus lentes que la moyenne sont désormais consignées avec un threshold configurable (
background_schedule_pool_log.duration_threshold_milliseconds, 30ms par défaut). #92965 (Azat Khuzhin). - Les passwords provenant du stockage URL ne sont plus affichés dans le query log. #93245 (Konstantin Vedernikov).
ClickHouse Keeper
- Gère correctement les lacunes dans les entrées de journal de Keeper lorsque les logs se trouvent avant le dernier index validé. #90403 (Antonio Andelic).
- Ajout du traçage OpenTelemetry pour les requêtes Keeper. #91332 (Miсhael Stetsyuk).
- Ajout de nouvelles métriques Keeper :
KeeperChangelogWrittenBytes,KeeperChangelogFileSyncMicroseconds,KeeperSnapshotWrittenBytes,KeeperSnapshotFileSyncMicroseconds,KeeperBatchSizeElementsetKeeperBatchSizeBytes. #92149 (Miсhael Stetsyuk). - Les extensions Keeper
CHECK_STATetTRY_REMOVEsont désormais activées par défaut. #93886 (Mikhail Artemenko). - Keeper lève désormais une exception au lieu de s’interrompre lorsqu’il détecte un snapshot corrompu ou des changelogs incohérents, ce qui nécessite une intervention manuelle pour une récupération plus sûre. #94168 (Antonio Andelic).
- Ajout des extensions
with_dataetwith_stataux requêtes KeepergetChildren, ce qui permet de récupérer les nœuds enfants avec leurs données et leurs statistiques en une seule opération. #94826 (Nikolay Degterinsky). - Ajout d’une vérification des erreurs de configuration de Keeper susceptibles d’entraîner des échecs lors de l’assemblage du cluster. #94682 (Konstantin Bogdanov).
- Ajout de la prise en charge de l’extension Keeper
with_dataafin d’améliorer la récupération des tables dans Database Replicated. #96090 (Nikolay Degterinsky). - Il est désormais possible d’effectuer des insertions dans le ZooKeeper auxiliaire via
system.zookeeper. #92092 (RinChanNOW).
Gestion de la mémoire
- Optimisation de la réservation d’espace dans le cache du système de fichiers — les candidats à l’éviction sont désormais collectés sans conserver de verrou exclusif. #82764 (Kseniia Sumarokova).
- Activation des lectures parallèles dans le tampon de lecture du cache du système de fichiers pour les moteurs de table/fonctions distants. #71781 (Kseniia Sumarokova).
- Réduction de l’utilisation de la mémoire sur les systèmes non Linux grâce à l’activation de la purge immédiate des pages modifiées de jemalloc. #93360 (Eduard Karacharov).
- La purge des pages modifiées de jemalloc s’exécute désormais dans un thread distinct du thread principal MemoryWorker. Ajout de la config
memory_worker_purge_total_memory_threshold_ratiopour effectuer la purge en fonction du ratio d’utilisation totale de la mémoire. #94902 (Antonio Andelic). - Le mécanisme de decay des pages modifiées de jemalloc est désormais désactivé dynamiquement lorsque ClickHouse est soumis à une pression mémoire prolongée. #95145 (Antonio Andelic).
- Ajout d’une vérification explicite de la consommation mémoire avant la lecture des données depuis MergeTree, avec une réduction des tailles de file d’attente du pool de threads sur la base du retour d’expérience en production. #94692 (Nikita Mikhaylov).
- La limite totale de mémoire est désormais vérifiée avant l’authentification de l’utilisateur, avec levée de l’erreur
memory limit exceededsi la limite est dépassée. #95003 (Nikolai Kochetov). - Correction d’une comptabilisation incorrecte de la mémoire pour le cache des conditions de requête. #95478 (Nikita Mikhaylov).
- La détection de l’utilisation mémoire des requêtes pour le spill sur disque lors des opérations d’agrégation/de tri a été rendue plus robuste. #92500 (Azat Khuzhin).
- L’ordonnanceur priorise désormais le thread MemoryWorker en cas de manque de CPU afin de protéger le processus. #94864 (Nikita Mikhaylov).
- Correction d’un problème où ClickHouse ne respectait pas les limites mémoire dans certains cas lors de la lecture depuis une table. #93715 (Nikita Mikhaylov).
Formats de données
- Le lecteur Parquet permet désormais de lire les colonnes
TupleouMapau format JSON. #92864 (Michael Kolupaev). - Le lecteur Parquet prend désormais en charge les tuples vides. #92868 (Michael Kolupaev).
- Le type
Dateest désormais sérialisé dans le type natifdate32d’Arrow dans les formats Arrow/ArrowStream (auparavantuint16). L’ancien comportement peut être restauré avec le paramètreoutput_format_arrow_date_as_uint16. #96860 (Alexey Milovidov). - Le format de sortie
Hashest désormais indépendant de la taille des blocs. #94503 (Alexey Milovidov). - Les types simples au format Pretty JSON ne sont plus affichés sur des lignes distinctes. #93836 (Pavel Kruglov).
- L’inférence de schéma respecte désormais
allow_experimental_nullable_tuple_type: lorsque cette option est activée, les objets imbriqués manquants peuvent devenirNULLau lieu d’un tuple d’élémentsNULL. #95525 (Nihal Z. Miaji). - Le formateur SQL produit désormais
COMMENTavantAS SELECTau lieu d’entourerSELECTde parenthèses. #96293 (Alexey Milovidov). - Compression optimisée des listes de postings avec simdcomp. #92871 (Peng Jian).
Sauvegarde et restauration
- Ajout du paramètre de sauvegarde
backup_data_from_refreshable_materialized_view_targets, qui permet de contrôler si les données des vues matérialisées actualisables doivent être sauvegardées. Les cibles des RMV avec la stratégie d’actualisationAPPENDsont toujours sauvegardées. #93658 (Julia Kartseva). - Ajout de la prise en charge des collections nommées définies en SQL dans
BACKUP/RESTOREpour S3 et Azure Blob Storage. #94605 (Pablo Marcos).
Collections nommées et dictionnaires
- Les surcharges de paramètres des collections nommées sont désormais autorisées dans la table function MongoDB. #89616 (vanchaklar).
- Les collections nommées sont désormais prises en charge pour les dictionnaires et les tables YTsaurus. #94582 (MikhailBurdukov).
- Il est désormais possible de transmettre des descriptions de colonnes pour les sources de dictionnaire de tables dynamiques YTsaurus. #92391 (MikhailBurdukov).
- Le schéma de la vue paramétrée est désormais affiché lorsqu’il est explicitement spécifié. #90220 (Grigorii Sokolik).
Déduplication
- Refonte du paramètre
insert_select_deduplicatepour ajouter des options de compatibilité descendante. #92951 (Sema Checherinda). - La déduplication avec les async inserts est désormais autorisée lorsque des vues matérialisées sont utilisées. #93957 (Sema Checherinda).
Autres améliorations
- Amélioration de l’UX de
SYSTEM INSTRUMENT ADD/REMOVE: les noms de fonction utilisent désormais des littéraux de chaîne, toutes les fonctions correspondantes sont patchées, etfunction_nameest pris en charge dansREMOVE. #93345 (Pablo Marcos). - Ajout de
SYSTEM NOTIFY FAILPOINTpour les failpoints pouvant être mis en pause, ainsi que deSYSTEM WAIT FAILPOINTpour PAUSE/RESUME. #92368 (Shaohua Wang). - Les noms de fonctions C++ dans
system.trace_log,system.symbolset la fonctiondemangles’affichent désormais correctement. #93075 (Alexey Milovidov). - Les profils jemalloc sont désormais écrits avec les symboles, ce qui élimine la nécessité d’un binaire lors de la génération d’un heap profile. #93099 (Azat Khuzhin).
- Correction d’un crash lors de l’attachement d’une table à une base de données
MaterializedPostgreSQLsidropReplicationSlotlève une exception pendant le déroulement de pile. #96871 (Alexey Milovidov). - Correction des résidus potentiels laissés lorsque
CREATE TABLEéchoue. #94174 (Azat Khuzhin). - Correction d’un accès à de la mémoire non initialisée lorsqu’une clé TLS protégée par mot de passe est utilisée. #94182 (Konstantin Bogdanov).
- Lorsque
alter table ... modify setting ...expire pendant l’acquisition d’un verrou, il renvoie désormais une erreur de timeout au lieu d’une erreur logique. #93856 (Han Fei). - Amélioration de l’interopérabilité des profileurs CPU et temps réel avec les timeouts de socket. #96601 (Sergei Trifonov).
- Activation du durcissement rapide de libcxx pour les builds de release (principalement les vérifications de dépassement de limites), sans impact notable sur les performances. #94757 (Miсhael Stetsyuk).
Améliorations des performances
Performances des JOIN
- Certaines opérations de hash join ont été accélérées grâce à l’implémentation d’un dispatch dynamique pour
ColumnVector::replicate. #79573 (Raúl Marín). - Davantage de filtres sont désormais poussés dans les JOIN. #85556 (Nikita Taranov).
- Extension du push down des filtres depuis les conditions JOIN
ONpour les joinsANY,SEMIetANTIlorsque le filtre n’utilise des entrées que d’un seul côté. #92584 (Dmitry Novik). - Des sets équivalents peuvent désormais être utilisés pour pousser les filtres dans
SEMI JOIN. #92837 (Dmitry Novik). - Le traitement des lignes non jointes dans
ParallelHashJoina été parallélisé pour les prédicats complexes, via le paramètreparallel_non_joined_rows_processing(activé par défaut). #92068 (Yarik Briukhovetskyi). - Le hash join ignore désormais complètement la lecture du côté gauche lorsque le côté droit est vide, évitant ainsi un travail inutile en cas de filtrage ou d’agrégation coûteux. #94062 (Alexander Gololobov).
- Les Runtime Filters de JOIN sont désormais pris en charge pour les JOIN
RIGHT OUTER. #96183 (Hechem Selmi). - L’optimisation PREWHERE est désormais reportée après l’optimisation des Runtime Filters de JOIN, ce qui permet aussi de pousser les Runtime Filters vers PREWHERE. #95838 (Alexander Gololobov).
Optimisation des requêtes
- Désactivation de l’optimisation de l’ordre de tri pour les fonctions de fenêtre lorsque la clé de partitionnement correspond à la clé de tri ou en est un préfixe, ce qui améliore les performances de l’exécution parallèle. #87299 (Nikita Taranov).
- Les filtres externes sont désormais poussés dans les vues, ce qui permet d’appliquer
PREWHEREà la fois sur les nœuds locaux et distants. #88316 (Igor Nikonov). - Optimisation des performances et de l’utilisation de la mémoire pour les valeurs fractionnaires de
LIMITetOFFSET. #91167 (Ahmed Gouda). - Les filtres constants sur les colonnes virtuelles ne sont plus évalués inutilement plusieurs fois. #91588 (c-end).
- Toute expression déterministe dans la clé primaire (par ex.
ORDER BY cityHash64(user_id)) peut désormais être utilisée pour le data skipping. ClickHouse applique l’expression aux constantes de la requête et utilise le résultat pour les recherches dans l’index de clé primaire avec=,INethas. Pour les expressions injectives, les formes négatives (!=,NOT IN,NOT has) sont également prises en charge. #92952 (Nihal Z. Miaji). - L’optimisation de lecture ordonnée détecte désormais lorsque les colonnes de
ORDER BYsont constantes du fait des conditionsWHERE, ce qui permet des lectures efficaces en ordre inverse. Cela profite aux requêtes multi-tenant commeWHERE tenant='42' ORDER BY tenant, event_time DESC. #94103 (matanper). - Pour les requêtes
FINALutilisant une condition sur la clé primaire suivie de skip indexes, l’étapePrimaryKeyExpandne vérifie désormais que les plages de clé primaire présélectionnées au départ. #94903 (Shankar Iyer). - L’optimisation de matérialisation paresseuse s’applique désormais à toutes les branches d’une requête
UNION ALL, et non plus seulement à la première, ce qui réduit les I/O pour les requêtes qui combinent plusieurs lectures triées et limitées provenant de différentes tables MergeTree. #96832 (Federico Ginosa).
Performances des fonctions et de l’agrégation
- La compilation JIT couvre désormais un plus grand nombre de fonctions. #88770 (Alexey Milovidov).
- Optimisation de la fonction d’agrégation
distinctJSONPathsafin de ne lire que les chemins JSON à partir des data parts, au lieu de la colonne JSON complète. #92196 (Pavel Kruglov). - Optimisation de
uniqExactlorsque des éléments identiques se suivent souvent. #93268 (Alexey Milovidov). - Optimisation de
isValidASCIIpour les valeurs d’entrée entièrement en ASCII. #93347 (Robert Schulze). - Accélération de
uniqsur les types numériques grâce au traitement des insertions par lots lorsque c’est possible (pas de valeurs nulles, pas de-If, pas deGROUP BY, niIPv6niString). #95904 (Raúl Marín).
Performances du stockage et des E/S
- Correction du Parquet Reader V3 Prefetcher pour utiliser une logique de lecture aléatoire plus rapide. #91435 (Arsen Muk).
- Amélioration des performances de
icebergCluster. #91537 (Yang Jiang). - Réduction de l’utilisation mémoire d’
INSERTet des fusions pour les tables très larges avec des Wide parts grâce à l’activation de buffers d’écriture adaptatifs. Ajout également de la prise en charge des buffers d’écriture adaptatifs pour les disques chiffrés. #92250 (Azat Khuzhin). - Amélioration des performances de la recherche en texte intégral avec l’index de texte et le tokenizer
sparseGramsen réduisant le nombre de tokens recherchés. #93078 (Anton Popov). - Accélération de la compression du codec T64 grâce au dispatch dynamique sur x86. #95881 (Raúl Marín).
- Accélération de la décompression LZ4 des blocs de 32 octets sur x86. #96778 (Raúl Marín).
- L’optimisation de direct read de l’index de texte fonctionne désormais partiellement : les parts disposant d’un index de texte matérialisé l’utiliseront, tandis que les parts qui n’en disposent pas reviendront à l’expression de filtre d’origine. #96411 (Anton Popov).
- Optimisation du calcul de l’index de saut minmax lors de l’
INSERTen supprimant une copie de données inutile et en activant le calcul min/max vectorisé pour les colonnes numériques. #97392 (Raúl Marín). - Ajout d’index secondaires
minmaxsur les colonnes temporelles et d’indexbloom_filtersur les colonnesquery_id/initial_query_iddans les tables de logs système pour accélérer le filtrage. #96712 (Alexey Milovidov). - Évitement d’une régression de l’utilisation mémoire sur
INSERTlorsque la déduplication n’est pas activée. #96503 (Alexey Milovidov).
Optimisation de la mémoire
- Réduction de l’empreinte mémoire de
ASTLiteralpar suppression des champs inutilisés lorsque la coloration syntaxique et l’analyse deVALUESne sont pas actives. #93974 (Ilya Yatsishin). - Introduction d’une classe AST Enum spécialisée qui stocke les paramètres de valeur sous forme de paires chaîne/entier au lieu d’enfants
ASTLiteralgénériques, ce qui réduit la consommation mémoire. #94178 (Ilya Yatsishin). - Optimisation de la consommation mémoire des objets AST de tuple nommé en stockant directement les noms de colonnes sous forme de chaînes, au lieu de nœuds littéraux AST génériques. #94704 (Ilya Yatsishin).
- Réduction de la taille de la structure
CachedOnDiskReadBufferFromFiled’un facteur d’environ 50. #96098 (Azat Khuzhin). HashTable::resizene copie plus les anciennes données lorsque la table est vide. #96180 (Raúl Marín).
Optimisations internes
- Adoption de la méthode « fastrange » (Daniel Lemire) pour le partitionnement des données dans le pipeline de requête, ce qui améliore le tri parallèle et les opérations JOIN. #93080 (Alexey Milovidov).
- Amélioration de la dévirtualisation grâce à des options supplémentaires de l’éditeur de liens. #94737 (Nikita Taranov).
- Amélioration des performances du clonage de répliques pour les tables
ReplicatedMergeTreecomportant de nombreuses parts grâce au traitement par lots des requêtes ZooKeeper. #94847 (c-end). - Réduction de plus de 20 % de l’utilisation CPU du thread de réception de ZooKeeper dans
observeOperationsgrâce à l’adoption d’un hachage plus rapide et de compteurs sans verrou. #95962 (Miсhael Stetsyuk).
Corrections de bugs
Tous les correctifs de bugs (cliquez pour afficher)
Tous les correctifs de bugs (cliquez pour afficher)
Correctifs JOIN
- Correction de l’erreur
INCOMPATIBLE_TYPE_OF_JOINpour le stockage Join lorsque l’optimisation convertissant une jointure externe en jointure interne était appliquée. #84292 (Vladimir Cherkasov). - Correction d’une erreur logique pour les requêtes comportant plusieurs JOIN avec clause
USINGetjoin_use_nulls. #92251 (Vladimir Cherkasov). - Correction d’une erreur logique lors du réordonnancement des jointures avec
join_use_nulls. #92289 (Vladimir Cherkasov). - Correction d’un plantage possible avec le paramètre
join_on_disk_max_files_to_merge. #92335 (Bharat Nallan). - Correction de
LOGICAL_ERROR, causée par une modification indésirable du plan de requête lors de la conversion d’une jointure externe en jointure interne. Les contraintes de l’optimisation ont également été assouplies afin qu’elle s’applique lorsque des fonctions injectives sont utilisées sur les clés d’agrégation pendant les jointures. #92503 (János Benjamin Antal). - Correction d’une erreur logique avec plusieurs jointures sur une condition constante et
join_use_nulls. #92892 (Vladimir Cherkasov). - Correction du cas
NULL != NULLpourfull_sorting_joinsur une colonneLowCardinality(Nullable(T)). #92924 (Vladimir Cherkasov). - Correction des résultats de jointure lorsque la clé de jointure côté droit était une colonne sparse. #93038 (Amos Bird).
- Correction du fonctionnement incorrect des filtres d’exécution lorsque
LEFT ANTI JOINcomportait une post-condition supplémentaire. #91824 (Alexander Gololobov). - Correction d’une erreur logique lorsque des filtres d’exécution étaient utilisés dans une requête avec totaux pour la table de droite. #93330 (Alexander Gololobov).
- Correction d’une erreur logique déclenchée dans certains cas lorsque des filtres d’exécution de jointure étaient ajoutés au plan de requête, en raison du renvoi incorrect de colonnes constantes dupliquées. #93144 (Alexander Gololobov).
- Correction de la fonction
__applyFilterutilisée par les filtres d’exécution de jointure, qui renvoyaitILLEGAL_TYPE_OF_ARGUMENTdans certains cas valides. #93187 (Alexander Gololobov). - Correction du fait que des filtres d’exécution n’étaient pas ajoutés lors d’une jointure avec une table de droite déjà remplie. #93211 (Alexander Gololobov).
- Correction de l’erreur
NOT_FOUND_COLUMN_IN_BLOCKlorsque le filtre d’exécution était activé et que les tables jointes renvoyaient plusieurs fois la même colonne. #93526 (Alexander Gololobov). - Correction du fait que
FilterStepn’était pas correctement ajouté lorsqu’un filtre d’exécution de jointure était appliqué à une tableMerge. #94021 (Alexander Gololobov). - Correction de la conversion de type vers un supertype lors de l’opération de jointure du stockage
Joinavec clauseUSING. #94000 (Dmitry Novik). - Correction des requêtes avec répliques parallèles et JOIN sur une table non-MergeTree. #93902 (Igor Nikonov).
- Correction d’une condition de concurrence sur une colonne de jointure Nullable dans les runtime filters. #95775 (Hechem Selmi).
- Correction du problème où une chaîne vide devenait
NULLdans une tableJoinavec une cléNullable(String). #96002 (Alexey Milovidov). - Correction de l’erreur
NOT_SUPPORTEDlors de l’utilisation de l’algorithme de jointuredirectavec une table MergeTree vide. #95935 (Vladimir Cherkasov). - Correction de résultats incorrects dans des requêtes impliquant des jointures externes combinées à plusieurs INNER JOIN, en raison d’un réordonnancement invalide des jointures lorsque la condition
ONd’une jointure externe référençait des colonnes de plusieurs tables jointes auparavant. #96193 (Vladimir Cherkasov). - Correction d’une exception de runtime filter pour des colonnes Tuple avec des sous-champs Nullable. #96509 (Alexey Milovidov).
- Correction de requêtes avec des CROSS JOIN et des répliques parallèles activées qui renvoyaient des résultats incorrects. #96848 (Igor Nikonov).
- Correction de
arrayJoin, qui produisait des lignes dupliquées lorsqu’il était utilisé avec INNER JOIN et une clause WHERE, à cause d’un push-down partiel de prédicat qui poussait incorrectement sous un JOIN des filtres contenantarrayJoin. #96989 (Alexey Milovidov). - Correction de
LOGICAL_ERRORlorsquearrayJoindans la clauseWHEREréférençait des colonnes des deux côtés d’un JOIN. #97239 (Alexey Milovidov). - Correction d’une erreur logique lors de l’utilisation d’un matcher (
*) à l’intérieur d’une fonction lambda dans une clause VALUES au sein d’un JOIN avec USING. #95661 (Vladimir Cherkasov). - Correction d’une possible erreur logique avec le matcher (
*,table.*) etanalyzer_compatibility_join_using_top_level_identifierlorsque la colonneUSINGavait des types différents. #95808 (Vladimir Cherkasov). - Correction d’une erreur logique avec
analyzer_compatibility_join_using_top_level_identifieret les colonnes ALIAS. #97297 (Vladimir Cherkasov). - Correction d’un plantage dans l’ancien analyseur lors de l’utilisation de JOIN avec des alias dupliqués. #96405 (Ilya Golshtein).
Correctifs pour les requêtes et l’analyseur
- Correction d’un bug où les gestionnaires de requêtes prédéfinies interprétaient les espaces de fin comme des données lors des insertions. #83604 (Fabian Ponce).
- Correction d’un bug d’agrégation avec projection qui produisait une exception après des ALTER ne modifiant que les métadonnées, comme l’extension des éléments d’Enum. #84143 (Alexey Milovidov).
- Correction de
count_distinct_optimizationpour les fonctions de fenêtre et les appels avec plusieurs arguments. #92376 (Raúl Marín). - Correction du formatage incohérent de l’AST de
arrayElementavec un littéral nié. #92293 (Pavel Kruglov). - Correction de
NOT INavec des arguments de tableau non constants qui renvoyait des valeurs incorrectes. #93314 (Yarik Briukhovetskyi). - Correction d’une erreur de comparaison null-safe impliquant le type
Nothing. #91884 (Yarik Briukhovetskyi). - Correction de l’erreur
Not found columnpour l’optimisationuse_top_k_dynamic_filtering. #93316 (Nikolai Kochetov). - Correction de la suppression des colonnes inutilisées dans les sous-requêtes en présence d’une sous-requête scalaire corrélée. #93273 (Dmitry Novik).
- Correction de
optimize_inverse_dictionary_lookup, qui ne fonctionnait pas avec les requêtes distribuées lorsque la clé était d’un type entier signé. #93848 (Nihal Z. Miaji). - Correction de
lag/lead, qui ne fonctionnait pas avec les requêtes distribuéesremote(). #93858 (Nihal Z. Miaji). - Correction d’un bug dans le mécanisme de data skipping lorsque
not match(...)était utilisé dansWHERE, provoquant des résultats incorrects. #92726 (Nihal Z. Miaji). - Correction d’un bug dans le mécanisme de data skipping lorsque
not materialize(...)ounot CAST(...)était utilisé dansWHERE, provoquant des résultats incorrects. #93017 (Nihal Z. Miaji). - Correction d’une erreur logique lors de l’analyse d’index lorsqu’un tableau vide était utilisé dans la fonction
has. #92995 (Nihal Z. Miaji). - Correction d’une erreur logique dans un cas rare où un tuple vide était utilisé avec une colonne
Map. #93814 (Nihal Z. Miaji). - Correction de requêtes utilisant le sharding par PK qui échouaient avec une condition fausse. #92815 (Yarik Briukhovetskyi).
- Correction d’un problème de planification de requêtes du moteur de table
Mergequi renvoyaitILLEGAL_COLUMNpourhostName()lors de la fusion de tables locales et distantes/Distributed. #93286 (Jinlin). - Correction de l’erreur
NO_SUCH_COLUMN_IN_TABLEdans le moteurMergesur des tables avec alias. #92910 (Pavel Kruglov). - Correction d’une requête
SELECTavec un prédicat portant sur plusieurs colonnes, des skip indexes de type bloom filter et des conditionsORetNOT, qui renvoyait des résultats incohérents. #94026 (Shankar Iyer). - Correction de l’application d’une projection lorsque le filtre contenait des sous-colonnes. #93141 (Pavel Kruglov).
- Correction de la corruption de
_part_offsetlorsque des projections étaient reconstruites pendant les fusions, et optimisation du traitement des projections en évitant des lectures inutiles. #93827 (Amos Bird). - Empêche que différentes colonnes interpolées fusionnent en une même colonne dans un block lorsqu’elles étaient en pratique des alias de la même colonne. #93197 (Yakov Olkhovskiy).
- Suppression des colonnes inutilisées lorsque la projection était reconstruite pendant une fusion, réduisant l’utilisation mémoire et le nombre de parts temporaires créées. #93233 (Nikolai Kochetov).
- Correction d’une erreur logique dans certains cas lorsque
LIMIT/OFFSETnégatif était utilisé dans des requêtes distribuées. #95357 (Nihal Z. Miaji). - Correction d’une erreur logique dans certains cas lorsque
LIMIT/OFFSETfractionnaire était utilisé dans des requêtes distribuées. #96475 (Nihal Z. Miaji). - Correction de la fonction
INqui renvoyait des résultats incorrects avec des valeursNULLlorsquetransform_null_inétait activé. #95674 (Nihal Z. Miaji). - Correction de l’échec de
IN (col)avec une unique référence de colonne, avec l’erreurUNSUPPORTED_METHOD. #97646 (Alexey Milovidov). - Correction de la réécriture par
optimize_syntax_fuse_functionsdesum/count/avgensumCount()lorsque l’argument d’agrégation étaitLowCardinality(Nullable). #96239 (Nihal Z. Miaji). - Correction d’un élagage des partitions incorrect pour les fonctions
not INetnot has. #96241 (Nihal Z. Miaji). - Correction d’une erreur de filtre prewhere causée par des expressions lambda dans prewhere. #95395 (Xiaozhe Yu).
- Correction de
LOGICAL_ERRORdans l’analyseur de requêtes lorsqu’une expression lambda était transmise là où une valeur concrète était attendue. #96892 (Alexey Milovidov). - Correction d’un déréférencement de pointeur nul dans certaines expressions avec des fonctions lambda. #96479 (Alexey Milovidov).
- Correction du fait que les
SETTINGSpar sous-requête n’étaient pas appliqués aux fonctions de table commefiledans les CTE et les sous-requêtes. #96882 (Alexey Milovidov). - Correction d’une collision de hachage dans le cache des conditions de requête pour les constantes repliées de CTE, ce qui pouvait entraîner des résultats de requête erronés. #96172 (Alexey Milovidov).
- Correction de l’erreur
BAD_ARGUMENTSlors de requêtes sur des tables contenant des expressions lambda dans des colonnes ALIAS via la fonction de tablemerge(), avec l’analyseur activé. #97551 (Alexey Milovidov). - Correction de
EXCEPT ALLetINTERSECT ALL, qui ignoraient les multiplicités de lignes et se comportaient comme leurs équivalentsDISTINCT. #96876 (Alexey Milovidov). - Correction d’un échec d’assertion dans
WindowTransformavec un grand décalagePRECEDING. #96026 (Alexey Milovidov). - Correction d’une exception lors de l’utilisation de fonctions de fenêtrage avec
group_by_use_nulls = 1etCUBE/ROLLUP/GROUPING SETS. #96878 (Alexey Milovidov). - Correction de l’interaction entre
GROUPING SETS,group_by_use_nullsetTupleavecLowCardinality, qui produisait une structure de bloc inattendue. #96358 (Alexey Milovidov). - Correction d’une erreur logique pendant
GROUP BY ... WITH ROLLUP/CUBElorsque les clés incluaientLowCardinality(Nullable(...))dansNullable(Tuple(...)). #97647 (Alexey Milovidov). - Correction d’un échec d’assertion dans
IfTransformStringsToEnumPasslorsqueifoutransformrenvoyaitNullable(String). #97002 (Alexey Milovidov). - Correction de
ACCESS_DENIEDpour les utilisateurs ne disposant pas de l’autorisationCREATE TEMPORARY TABLElorsqueoptimize_inverse_dictionary_lookupréécrivait les prédicatsdictGet(...). #97484 (Nihal Z. Miaji). - Correction d’une incompatibilité de type de la fonction
ifentreUInt64etInt32dans un cas inhabituel de requêtes distribuées avec PREWHERE et inférence de type. #96012 (Alexey Milovidov). - Correction des requêtes compilées par JIT impliquant des types
Bool. #96013 (Alexey Milovidov). - Correction de résultats incorrects lorsque des expressions compilées par JIT convertissaient
DateTimeenDateTime64(par exemple dansCASE/if/multiIfavec des types DateTime mixtes). #96879 (Alexey Milovidov). - Correction de l’utilisation d’une valeur non initialisée dans
formatDateTimeavec des spécificateurs de format non à largeur fixe. #96133 (Alexey Milovidov). - Correction de
std::terminatedansindexOfAssumeSortedlorsqu’il était appelé avec des types incompatibles. #96877 (Alexey Milovidov). - Les fonctions géométriques acceptent désormais des sous-types géométriques individuels en plus du type Variant
Geometry. #97571 (Alexey Milovidov). - Correction de cas où des index affectaient les résultats de requêtes avec politique de lignes/PREWHERE et FINAL. #97076 (Yarik Briukhovetskyi).
- L’optimisation de lecture dans l’ordre peut désormais utiliser les politiques au niveau des lignes. #97538 (Janos Benjamin Antal).
- Correction de
LOGICAL_ERRORlors de l’utilisation de colonnes dotées d’un index de texte avec la clauseQUALIFY. #97313 (Alexey Milovidov). - Correction d’un plantage possible lorsque la clause
WHEREcontenait plus de 32 expressions avecAND/OR. #97698 (Shankar Iyer). - Correction d’une incompatibilité de structure de bloc dans l’optimisation
removeUnusedColumnslors de l’utilisation deindexHintavec l’expansion de l’astérisque sur des tables avecFINAL. #97622 (Alexey Milovidov). - Correction d’une incohérence de formatage aller-retour de l’AST pour les littéraux de tuple aliasés à l’intérieur de parenthèses. #97418 (Alexey Milovidov).
- Correction d’une incohérence de formatage de l’AST pour
NOT (1, 1, 1). #97653 (Alexey Milovidov).
Correctifs MergeTree et stockage
- Les noms de fichiers sont désormais toujours remplacés par des hash dans MergeTree si le système de fichiers est insensible à la casse. Auparavant, sur macOS, cela pouvait entraîner une corruption des données lorsque les noms de colonne/sous-colonne ne différaient que par la casse. #86559 (Pavel Kruglov).
- Les vues matérialisées utilisent désormais comme contexte d’exécution la base de données dans laquelle elles ont été créées, ce qui permet d’omettre la qualification explicite de la base de données dans la requête SELECT de la vue. #88193 (Dmitry Kovalev).
- Ajout d’une vérification complète des autorisations à l’étape de création pour la requête sous-jacente à une vue matérialisée. #89180 (pufit).
- Correction d’une erreur logique lorsqu’une mutation sans transaction modifiait des parts dans une transaction active finalement annulée. #90469 (Shaohua Wang).
- Correction d’un problème où
system.warningsne se mettait pas correctement à jour après la conversion d’une base de données ordinaire en base de données atomic. #90473 (sdk2). - Correction de
LOGICAL_ERROR: Storage does not support transactionpendantATTACH AS REPLICATED. #91772 (Shaohua Wang). - Correction d’une possible erreur
FILE_DOESNT_EXISTaprès la mutation d’une colonne sparse avecratio_of_defaults_for_sparse_serialization=0.0. #92860 (Pavel Kruglov). - Correction d’une possible erreur
FILE_DOESNT_EXISTaprès la mutation d’une colonne sparse lorsqueratio_of_defaults_for_sparse_serializationétait passé à1.0via alter. #93016 (Pavel Kruglov). - Correction d’une possible utilisation de parts obsolètes en raison d’une condition de concurrence TOCTOU sur des parts partagées. #93022 (Azat Khuzhin).
- Héritage des paramètres d’information de sérialisation de la part source pendant la mutation dans MergeTree, corrigeant de possibles résultats de requête incorrects sur des parts mutées après des changements de sérialisation du type de données. #92419 (Pavel Kruglov).
- Correction d’un possible conflit entre une colonne et une sous-colonne portant le même nom, entraînant une sérialisation incorrecte et des échecs de requête. #92453 (Pavel Kruglov).
- Correction de
NOT_FOUND_COLUMN_IN_BLOCKlors d’un insert dans une table avec une sous-colonne dans l’expression de partition. #92905 (Pavel Kruglov). - Correction d’une possible sous-colonne manquante dans une MV lors d’un alter de la table source. #93276 (Pavel Kruglov).
- Correction de
LOGICAL_ERRORlors de la restauration deReplicatedMergeTreeen présence d’une condition de concurrence de déduplication. #93612 (Pablo Marcos). - Correction de l’utilisation d’une colonne sparse pour la mise à jour TTL pendant la désérialisation directe, évitant l’erreur
Unexpected type of result TTL column. #93619 (Pavel Kruglov). - Restauration des wrappers
LowCardinalitysur les résultats d’expressions SET si nécessaire pendant l’agrégation TTL. #92971 (Seva Potapov). - Correction de
Cannot add action to empty ExpressionActionsChainpourALTER TABLE REWRITE PARTS. #92754 (Azat Khuzhin). - Correction de la substitution des paramètres de requête dans les méthodes d’authentification de
CREATE USERlors de l’utilisation deON CLUSTER. #92777 (xiaohuanlin). - Ne tente plus de supprimer les répertoires temporaires au démarrage si une table MergeTree se trouve sur un disque en lecture seule. #92748 (Alexey Milovidov).
- Correction de la matérialisation des index de saut créés à partir de sous-colonnes. #93708 (Anton Popov).
- Correction de
CLEAR COLUMNen présence d’index dépendants. #94057 (Raúl Marín). - Correction du rattachement des bases de données
Replicatedlorsque l’hôte interserveur changeait après un redémarrage. #93779 (Tuan Pham Anh). - Correction d’une erreur logique avec
CREATE TABLE ... AS urlCluster()et le moteur de base de donnéesReplicated. #92418 (Kseniia Sumarokova). - Correction d’une condition de concurrence entre
REPLACE PARTITIONet les mutations en arrière-plan, qui pouvait rendre visibles à la fois les anciennes et les nouvelles données. #96955 (Alexey Milovidov). - Correction de la condition de concurrence restante entre
REPLACE PARTITIONet les mutations en arrière-plan, qui pouvait faire réapparaître d’anciennes données. #97105 (Alexey Milovidov). - Correction des mutations bloquées lorsque
PartCheckThreadremettait unGET_PARTen file d’attente pour une partie déjà mutée. #97162 (Alexey Milovidov). - Correction de l’échec de
ALTER TABLE DROP COLUMNlorsqu’une mise à jour légère avait déjà été effectuée sur la même colonne. #96861 (Anton Popov). - Correction d’un déréférencement de pointeur nul lors de l’application de patch parts pendant des mises à jour légères. #97583 (Alexey Milovidov).
- Les parties avec des projections inconnues ne sont plus marquées comme définitivement perdues. #95952 (Mikhail Artemenko).
- Correction de
CREATE TABLE ... CLONE AS ..., qui ignorait le qualificatif complet de la table source. #96415 (Hasyimi Bahrudin). - Correction de la régénération implicite des index dans les tables répliquées lors des modifications de métadonnées. #96600 (Raúl Marín).
- Correction des index implicites avec des colonnes alias, et ajout d’une validation complète avant leur création. #97115 (Raúl Marín).
- Correction de
min(timestamp), qui renvoyait l’époque Unix (1970-01-01) via_minmax_count_projectionaprès une fusion TTL lorsque toutes les lignes avaient été filtrées. #96703 (Raquel Barbadillo). - Correction de la combinaison de
use_const_adaptive_granularityetindex_granularity_bytes(granularité non adaptative), qui conduisait à un calcul erroné. #96143 (Alexey Milovidov). - Correction de l’exception
Number of rows in lazy chunk does not match number of offsetslors de la lecture de tables avec une granularité d’index non adaptative utilisantORDER BY ... LIMIT. #97270 (Alexey Milovidov). - Correction d’une régression dans la réplication zero-copy : des parts partagées pouvaient être supprimées avant que d’autres répliques n’aient fini de les récupérer. #95597 (filimonov).
- Correction d’un problème dans
SYSTEM RESTART REPLICAqui faisait disparaître une table de la base de données lorsque sa recréation échouait avec une exception autre que ZooKeeper, provoquant des incohérences d’empreinte des métadonnées dansDatabaseReplicated. #97276 (Alexey Milovidov). - Correction de l’exception
assert_castlors de la création des statistiques de colonnes après modification du type de colonne parALTER TABLE MODIFY COLUMN. #97027 (Alexey Milovidov). - Lorsqu’aucune statistique n’est définie pour une table, ClickHouse n’essaie plus de les charger, ce qui évite une surcharge inutile. #96233 (Han Fei).
- Correction de l’erreur logique
There was an error: Cannot obtain error messagelors de l’attente d’un DDL distribué et de la suppression simultanée de la base de données Replicated. #95664 (Alexander Tokmakov). - Correction d’une erreur logique dans
KeyConditionlorsqu’une table avait une clé primaire Nullable et que la requête utilisaitcoalesceavec un premier argument constant. #96340 (Alexey Milovidov).
Corrections relatives aux types de données et à la sérialisation
- Correction d’une erreur possible lors de la lecture de la sous-colonne de taille des types Dynamic/JSON. #95573 (Pavel Kruglov).
- Correction d’un crash lors de l’application de
tupleElementà des tableaux de JSON. #95647 (Pavel Kruglov). - Correction de l’exécution de
tupleElementsur JSON avec des chemins imbriqués, qui renvoyait des résultats incorrects. #95907 (Pavel Kruglov). - Correction de
tupleElement, qui levait une exception avec JSON pour des chemins avec des indications de type. #97728 (Pavel Kruglov). - Correction du comportement de skipping paths dans le type de données JSON — auparavant,
JSON(SKIP path)ignorait toutes les clés ayant le préfixepath(y compris des clés commepathpath), ce qui pouvait entraîner une perte de données. Désormais, seule la clé exacte est ignorée. #95948 (Pavel Kruglov). - Correction de l’application de
type_json_allow_duplicated_key_with_literal_and_nested_objectaux chemins typés dans JSON. #97422 (Pavel Kruglov). - Correction de la vérification des chemins typés incompatibles dans le type JSON. #92539 (Pavel Kruglov).
- Correction de la création d’une indication de type pour le chemin ‘skip’ dans JSON. #92842 (Pavel Kruglov).
- Correction de la résolution des sous-colonnes dynamiques dans les alias de colonne par l’analyseur. #92583 (Pavel Kruglov).
- Correction de l’erreur
Nested columns sizes are inconsistent with local_discriminatorsdue à une mauvaise optimisation du filtrage en place pour les colonnes Variant. #96410 (Alexey Milovidov). - Correction d’un crash dans
ifNullavec un argumentVariantutilisé dansGROUP BY. #96790 (Alexey Milovidov). - Correction d’une erreur logique dans
FunctionVariantAdaptoravec des fonctions nécessitant des arguments constants, commearrayROCAUC. #97116 (Bharat Nallan). - Correction de
LOGICAL_ERRORdansFunctionVariantAdaptorlorsqu’une fonction renvoyait le typeNothing. #97213 (Alexey Milovidov). - Correction d’une exception logique lors de la comparaison de NULL avec une colonne Variant contenant des types LowCardinality. #97379 (Alexey Milovidov).
- Correction de
LOGICAL_ERRORdansconcatlorsqu’un argument contenait un typeVariantavecLowCardinalityà l’intérieur. #97654 (Alexey Milovidov). - Correction de résultats incorrects lorsque des colonnes
LowCardinalityétaient converties enNullable. #96483 (Nihal Z. Miaji). - Prise en charge correcte des types
LowCardinality NullabledansCASTlorsquecast_keep_nullableétait activé. #95747 (Alexey Milovidov). - Correction de l’exception
ColumnNullable is not compatible with originallors de la conversion de types imbriqués complexes. #96924 (Alexey Milovidov). - Correction de
LOGICAL_ERRORlors de l’utilisation deisNull/isNotNullsur les sous-colonnes de typesNullable(Tuple(... Nullable(T) ...)). #97582 (Alexey Milovidov). - Correction de
LOGICAL_ERRORlors de la conversion d’Array enQBit. #97413 (Alexey Milovidov). - Correction de
LOGICAL_ERRORlors de la lecture simultanée d’une colonne sparse et de sa sous-colonne. #97515 (Pavel Kruglov). - Correction de
LOGICAL_ERRORlors de la lecture de la sous-colonne.sized’unNullable(String)sparse dans un Tuple avec PREWHERE. #97264 (Alexey Milovidov). - Correction d’un échec d’assertion dans
SetetMergeTreeIndexSetlors du traitement de colonnes comportant des sous-colonnes sparse internes. #97493 (Alexey Milovidov). - Correction de l’erreur potentielle
SIZES_OF_COLUMNS_DOESNT_MATCHlors du tri d’une colonne Tuple vide. #92520 (Pavel Kruglov). - Correction de bogues de décodage
DELTA_BYTE_ARRAYdans le lecteur Parquet natif, affectant des données de chaînes très répétitives. #91929 (Daniel Muino). - Correction d’une assertion lors de la lecture d’un fichier Parquet lorsqu’une partie d’une expression PREWHERE était utilisée ailleurs dans la requête. #90635 (Max Kainov).
- Correction de
LOGICAL_ERRORdans le lecteur Parquet V3 natif lorsque la colonne de filtre PREWHERE contenait des valeurs UInt8 non booléennes. #96594 (Alexey Milovidov). - Correction de l’inférence de schéma Parquet dans l’ancien lecteur lorsqu’une colonne JSON suivait une colonne Tuple. #92867 (Michael Kolupaev).
- Correction du schéma mis en cache pour tous les fichiers au lieu du seul fichier inféré lors de l’inférence de schéma avec glob. #92006 (Pavel Kruglov).
- Correction de la lecture du format
ProtobufListà partir de fichiers vides, qui produisait des enregistrements fantômes pour les tables vides. #96007 (Alexey Milovidov). - Correction d’une régression du codec
Gorillalorsqu’une taille explicitement spécifiée ne correspondait pas à la taille du type de données. #96118 (Alexey Milovidov). - Le moteur PostgreSQL peut désormais lire correctement
BOOLEAN[]. #96006 (Alexey Milovidov). - Correction d’une erreur logique lors de la lecture d’une colonne UUID à partir d’une colonne SQLite TEXT. #96016 (Alexey Milovidov).
- Correction de la conversion de types du moteur SQLite pour
DateTime,Date,UUIDet d’autres types. #96017 (Alexey Milovidov). - Correction d’un échappement incorrect des valeurs
FixedStringdans les requêtes vers SQLite et PostgreSQL. #96019 (Alexey Milovidov). - Ajout du paramètre
input_format_numbers_enum_on_conversion_errorpour la conversion de nombres en enums. #56240 (Nikolay Degterinsky).
Corrections des index de texte et des index de saut
- La création et la matérialisation des index de texte sur des tables comportant des parts de plus de 4 294 967 295 lignes sont temporairement désactivées afin d’éviter des résultats de requête incorrects. #92644 (Anton Popov).
- Correction de plusieurs crashs lors des merges d’index de texte dans les tables MergeTree. #92925 (Anton Popov).
- Correction des merges d’index de texte construits sur des expressions complexes (telles que
concat(col1, col2)). #93073 (Anton Popov). - Correction de l’analyse des index de texte sur des colonnes Array lorsque l’index ne contenait aucun token. #93457 (Anton Popov).
- Correction de la reconstruction des index de texte créés sur des sous-colonnes. #93326 (Anton Popov).
- Correction de la lecture directe depuis un index de texte avec des requêtes de recherche dupliquées. #93516 (Anton Popov).
- Correction d’incohérences dans l’analyse des index de texte pour les fonctions
has,mapContainsKeyetmapContainsValue, qui pouvaient renvoyer des résultats différents selon qu’un index de texte était utilisé ou non. #93578 (Anton Popov). - Correction du calcul de la taille non compressée des index de texte dans
system.parts. #92832 (Anton Popov). - Correction des index
ngrambf_v1avec une longueur de ngram > 8 qui levaient une exception. #92672 (Robert Schulze). - Correction de l’index
ngram_bfsur des données non UTF-8, qui entraînait une lecture de mémoire non initialisée. #93663 (Alexey Milovidov). - Correction d’un
stack-use-after-scopedans l’index de similarité vectorielle. #96259 (Alexey Milovidov). - Correction d’une erreur logique lorsqu’une expression de skip index produisait une colonne constante. #96880 (Alexey Milovidov).
- Correction d’un accès mémoire invalide lors de la création d’une table avec une expression vide
()comme index. #96363 (Alexey Milovidov). - Correction d’un use-after-free dans l’analyse des index avec
use_primary_keydésactivé et un très grand nombre de disjonctions. #96112 (Alexey Milovidov). - Correction de l’utilisation de l’index primaire dans les lightweight updates avec des sous-requêtes
INdansWHERE. #92838 (Anton Popov). - Utilisation du code d’erreur correct lors de la validation de l’index hypothesis. #92559 (Raúl Marín).
Correctifs du data lake
- Correction d’un crash dans un cluster mono-nœud lors de la lecture depuis Iceberg en mode split-by-buckets. #91553 (Konstantin Vedernikov).
- Correction du tuple ORDER BY dans Iceberg. #93225 (Konstantin Vedernikov).
- Correction de la prise en charge des credentials Azure ADLS Gen2 fournis dans DataLakeCatalog — analyse des clés
adls.sas-token.*à partir des catalogs REST Iceberg et correction de l’analyse des URL ABFSS. #93477 (Karun Anantharaman). - Remplacement de
DateparDate32pour Iceberg. #95322 (Konstantin Vedernikov). - Correction d’un crash lié à ORDER BY dans Iceberg. #96484 (Konstantin Vedernikov).
- Correction du partitionnement dans Iceberg. #96620 (Konstantin Vedernikov).
- Correction de bornes incorrectes pour les data files lorsque la référence de suppression par position était NULL dans les entrées de manifeste Iceberg. #96061 (Daniil Ivanik).
- Ajout de vérifications supplémentaires pour le paramètre du fichier de métadonnées racine dans Iceberg. #96754 (Daniil Ivanik).
- Les credentials ne sont plus consignés dans les catalogs Iceberg. #96831 (Konstantin Vedernikov).
- Correction du squashing des données Delta Lake partitionnées. #95773 (Kseniia Sumarokova).
- Correction d’un catalog de lac de données RESTful pour lequel un
auth_headerinvalide cassaitsystem.tables. #96680 (Han Fei).
Correctifs S3/Azure/stockage objet
- Correction du cache de la clé de partitionnement du moteur de table S3 en présence de fonctions non déterministes. #92844 (Miсhael Stetsyuk).
- Correction d’une assertion dans
ReadBufferFromS3qui survenait lorsque le cache était activé. #93809 (Kseniia Sumarokova). - Correction d’une erreur possible dans le thread de nettoyage de DiskObjectStorage. #87411 (Kseniia Sumarokova).
- Correction d’interblocages possibles dans
DiskObjectStorageTransaction. #93810 (Kseniia Sumarokova). - Correction de défaillances possibles du thread de nettoyage de DiskObjectStorage lorsque de nombreuses erreurs survenaient. #94048 (Kseniia Sumarokova).
- Correction d’une data race dans
copyS3Filepour multipart_tags. #97227 (Azat Khuzhin). - L’exécution d’une mutation
ALTER UPDATEinvalide sur des tables de type fichier sur stockage objet (S3, Azure) ne provoque plus de déréférencement d’un nullptr. #96162 (Alexey Milovidov).
Correctifs S3Queue
- Correction de l’erreur
Failed to set file processing within 100 retriesen mode ordonné de S3Queue (elle est désormais signalée comme un avertissement). #92814 (Kseniia Sumarokova). - Correction d’un bug lié au paramètre S3Queue
s3queue_migrate_old_metadata_to_buckets. #93232 (Kseniia Sumarokova). - Correction des métadonnées pour les moteurs S3Queue/AzureQueue. #90498 (Kseniia Sumarokova).
- Correction d’un data race dans le stockage S3Queue/AzureQueue. #95385 (Kseniia Sumarokova).
- Correction de la déduplication pour le streaming depuis le moteur S3Queue/AzureQueue. #95467 (Kseniia Sumarokova).
Correctifs de sécurité et de contrôle d’accès
- Correction d’un contrôle d’accès manquant dans
SYSTEM SYNC FILE CACHE. #92372 (Kseniia Sumarokova). - Correction d’une logique incorrecte dans les vérifications des droits d’accès pour les autorisations avec caractères génériques, qui était trop restrictive. #92725 (pufit).
- Empêche désormais les utilisateurs d’obtenir la liste des colonnes d’une table sans l’autorisation
SHOW COLUMNSvia le moteur de tablemerge. #93695 (János Benjamin Antal). - Correction d’une vulnérabilité de dépassement d’entier dans la désérialisation de l’état de
groupConcat, qui pouvait entraîner des problèmes de sécurité mémoire. #93426 (Raufs Dunamalijevs). - Vérification que la taille du tampon décompressé correspond bien à celle attendue. #93690 (Raúl Marín).
- Correction de la révocation des rôles par défaut. #96103 (Vitaly Baranov).
- Correction de
AccessRights::contains, qui renvoyait des résultats incorrects en cas de révocations partielles. #96170 (pufit). - Correction de la mise à jour des politiques de lignes attribuées à l’utilisateur initial dans les requêtes distribuées. #95469 (Vitaly Baranov).
- L’argument de mot de passe de la fonction de table
redisest désormais masqué dans les logs et les tables système. #95325 (Janos Benjamin Antal). - Correction d’une fuite mémoire des objets BIO lors de la lecture de certificats X509. #96885 (Alexey Milovidov).
- Vérification de la witness version dans bech32 pour éviter un dépassement de tampon. #96671 (Raúl Marín).
- Correction des lenteurs lors de l’interrogation des tables système avec un utilisateur disposant d’autorisations limitées sur de nombreuses bases de données. #95874 (pufit).
Correctifs de sauvegarde et de restauration
- Correction de l’erreur
Couldn't pack tar archive: Failed to write all bytes, causée par un en-tête de taille d’entrée d’archive incorrect. #92122 (Julia Kartseva). - Correction d’un plantage du serveur lorsque de nombreuses sauvegardes concurrentes entraient en conflit sur les mêmes fichiers. #93659 (Alexey Milovidov).
- Correction d’un débordement de pile lors de la création de sauvegardes basées sur des archives (
.zip,.tzst) sur un disque de stockage objetplain_rewritable. #96872 (Alexey Milovidov). - Correction d’un plantage du serveur lorsqu’une sauvegarde échouait à cause d’un disque plein ou d’autres erreurs d’E/S. #96873 (Alexey Milovidov).
- Correction d’un segfault dans
StorageKeeperMaplors de la sauvegarde, dû à un use-after-free. #97336 (Alexey Milovidov).
Correctifs de crash et de stabilité
- Correction d’un crash dû à la lecture depuis une
Connectiondéconnectée. #92807 (Raufs Dunamalijevs). - Correction d’un crash possible avec la fonction
tokens()lorsque le deuxième argument est nul. #92586 (Raúl Marín). - Correction d’un crash du serveur lorsque
tokensétait appelé avec des paramètres de tokenizer non constants. #93383 (Robert Schulze). - Correction d’un crash potentiel dû à la mutation sur place des colonnes PREWHERE const sous-jacentes lors d’une réduction concurrente des colonnes ou d’un filtrage. #92588 (Arsen Muk).
- Correction d’un blocage possible lors de l’arrêt du background schedule pool, qui pouvait entraîner des blocages du serveur à l’arrêt. #93008 (Azat Khuzhin).
- Correction d’un problème laissant les connexions dans un état défectueux après l’annulation préliminaire de requêtes distribuées. #93029 (Azat Khuzhin).
- Correction d’un possible
Cannot finalize buffer after cancellationdansestimateCompressionRatio(). #93068 (Azat Khuzhin). - ZooKeeper est désormais finalisé à l’arrêt afin de corriger d’éventuels blocages. #93602 (Azat Khuzhin).
- Correction d’une exception non interceptée lors du rechargement en arrière-plan des named collections avec le stockage ZooKeeper. #92717 (Kseniia Sumarokova).
- Correction d’une utilisation d’une valeur non initialisée dans
ReadWriteBufferFromHTTP. #94058 (Alexey Milovidov). - Correction du fait que la taille du buffer de
TraceSendern’était pas mise à jour, ce qui provoquait des flushes entrelacés depuis différents threads. #93966 (Miсhael Stetsyuk). - Des pointeurs partagés vers le stockage ont été conservés dans
QueryPipelineafin de garantir que les objetsIStoragene soient pas détruits tant quePipelineExecutorest actif. #93746 (Miсhael Stetsyuk). - Correction d’un crash possible des requêtes distribuées en cas d’annulation. #95466 (Aleksandr Musorin).
- Correction d’un crash sur
DROP WORKLOADlors d’une exécution concurrente avec des requêtes. #95856 (Alexey Milovidov). - Correction d’une compétition d’accès sur
DROP WORKLOAD. #96614 (Sergei Trifonov). - Correction de plusieurs bogues critiques liés à l’utilisation de
ThreadPoolCallbackRunnerLocal. #95818 (Raúl Marín). - Correction d’un interblocage possible dans
ProcessListdû à une inversion de verrous lorsque le memory overcommit tracker était déclenché. #96182 (Antonio Andelic). - Correction d’un livelock dans le thread de vérification d’annulation pour les requêtes ayant un
max_execution_timeélevé. #96450 (Sergei Trifonov). - Correction du blocage du thread de purge de MemoryWorker en raison d’une race condition. #96819 (Antonio Andelic).
- Correction d’un plantage dans
clearCachescausé par la destruction prématurée d’instantanés de stockage mis en cache. #96995 (Alexey Milovidov). - Correction d’un
heap-use-after-freedansCREATE TABLEavec des contraintes. #96669 (Nikita Taranov). - Correction d’un possible
use-after-freedansStorageKafka2. #97520 (Bharat Nallan). - Correction d’une possible data race sur
shutdown_calleddansDatabaseMaterializedPostgreSQL. #97554 (Alexey Milovidov). - Correction d’une race condition lors du chargement parallèle d’un dictionnaire
HASHEDsegmenté, qui pouvait empêcher le chargement de certaines lignes. #96953 (Alexey Milovidov). - Correction d’un interblocage dans les dictionnaires lorsqu’un dictionnaire référençait une table Merge qui le référençait récursivement. #96120 (Alexey Milovidov).
- Correction d’un accès hors limites dans
BaseSettings::readBinarylorsqu’un serveur plus récent envoyait un paramètre inconnu pendant la désérialisation du plan de requête. #97585 (Michael Stetsyuk). - Correction d’un plantage lors du rattachement d’une table à une base de données
MaterializedPostgreSQLsidropReplicationSlotlevait une exception pendant le déroulement de la pile. #96871 (Alexey Milovidov). - Libération du flux de requête dans insert select afin d’éviter la fermeture de la connexion HTTP. #92175 (Sema Checherinda).
- Correction d’un interblocage pour
SHOW CREATE DATABASEavec la base de données Backup. #92541 (Azat Khuzhin).
Autres corrections de bugs
- Correction de la gestion des tableaux vides par
handleAllTokensdans les fonctionshasAllTokensethasAnyTokens. #93328 (Anton Popov). - Correction de la période des profileurs globaux — une valeur tronquée était utilisée au lieu de la valeur définie, ce qui provoquait des réveils plus fréquents. #96048 (Antonio Andelic).
- Correction de
event_datedanssystem.asynchronous_metric_log. #95947 (Raúl Marín). - Correction de
system.functions, qui affichait une chaîne vide au lieu decategories = 'Internal'pour les fonctions internes. #97315 (Robert Schulze). - Correction d’une possible erreur logique dans le dictionnaire
ip_trielorsque le type de clé n’était pas String. #97555 (Bharat Nallan). - Correction du débogage des UDF grâce à l’activation de la capture de stderr dans
system.query_log.exception. #92209 (Xu Jia). - Correction de
filterPartsByVirtualColumnspour les prédicats toujours faux. #97620 (Bharat Nallan). - Correction de
ColumnConst, qui n’était pas matérialisé avant le squashing. #97019 (Hasyimi Bahrudin).