Passer au contenu principal
Changements pertinents pour les services ClickHouse Cloud basés sur la release v24.5.

Modifications non rétrocompatibles

  • Remplacer le nom de la colonne duration_ms par duration_microseconds dans la table system.zookeeper afin de refléter le fait que la durée est en réalité exprimée avec une résolution en microsecondes. #60774 (Duc Canh Le).
  • Ne plus autoriser la définition de max_parallel_replicas à 0, car cela n’a pas de sens. La définir à 0 pouvait entraîner des erreurs logiques inattendues. Clôt #60140. #61201 (Kruglov Pavel).
  • Supprimer la prise en charge de la requête INSERT WATCH (qui fait partie de la fonctionnalité expérimentale LIVE VIEW). #62382 (Alexey Milovidov).
  • L’utilisation des fonctions neighbor, runningAccumulate, runningDifferenceStartingWithFirstValue, runningDifference est désormais dépréciée (car elle prête à erreur). Utilisez à la place des fonctions de fenêtre appropriées. Pour les réactiver, définissez allow_deprecated_error_prone_window_functions=1. #63132 (Nikita Taranov).

Changements non rétrocompatibles

  • Dans la nouvelle version de ClickHouse, les fonctions geoDistance, greatCircleDistance et greatCircleAngle utiliseront le type de données à virgule flottante en double précision 64 bits pour les calculs internes ainsi que comme type de retour si tous les arguments sont de type Float64. Cela clôt #58476. Dans les versions précédentes, la fonction utilisait toujours Float32. Vous pouvez revenir à l’ancien comportement en définissant geo_distance_returns_float64_on_float64_arguments sur false ou compatibility sur 24.2 ou une version antérieure. #61848 (Alexey Milovidov).
  • Les requêtes sur system.columns seront plus rapides lorsqu’il y a un grand nombre de colonnes, mais que SHOW TABLES n’est pas accordé sur de nombreuses bases de données ou tables. Notez que dans les versions précédentes, si vous accordiez SHOW COLUMNS à des colonnes individuelles sans accorder SHOW TABLES aux tables correspondantes, la table system.columns affichait ces colonnes, mais dans la nouvelle version, elle ignorera entièrement la table. Suppression des messages du trace log « Access granted » et « Access denied », qui ralentissaient les requêtes. #63439 (Alexey Milovidov).
  • Correction d’un crash dans largestTriangleThreeBuckets. Cela modifie le comportement de cette fonction, qui ignore désormais les NaN dans la série fournie. Le jeu de résultats peut donc différer de celui des versions précédentes. #62646 (Raúl Marín).

Nouvelles fonctionnalités

  • Le nouvel analyseur est activé par défaut pour les nouveaux services.
  • Prend en charge la suppression simultanée de plusieurs tables, comme drop table a,b,c;. #58705 (zhongyuankai).
  • L’utilisateur peut désormais interpréter les fins de ligne CRLF avec le format TSV à l’aide du paramètre input_format_tsv_crlf_end_of_line. Clôture #56257. #59747 (Shaun Struwig).
  • Il est désormais possible d’accorder des droits sur les moteurs de table, sans effet sur le comportement des utilisateurs existants. #60117 (jsc0218).
  • Ajout du format Form pour lire/écrire un seul enregistrement au format application/x-www-form-urlencoded. #60199 (Shaun Struwig).
  • Ajout de la possibilité de compresser dans CROSS JOIN. #60459 (p1rattttt).
  • Nouveau paramètre input_format_force_null_for_omitted_fields qui force des valeurs NULL pour les champs omis. #60887 (Constantine Peresypkin).
  • Prise en charge des jointures avec des conditions d’inégalité impliquant des colonnes des tables de gauche et de droite, par exemple t1.y < t2.y. Pour l’activer, SET allow_experimental_join_condition = 1. #60920 (lgbo).
  • Ajout d’une nouvelle fonction, getClientHTTPHeader. Clôture #54665. Coécrit avec @lingtaolf. #61820 (Alexey Milovidov).
  • Par souci de commodité, SELECT * FROM numbers() fonctionnera de la même manière que SELECT * FROM system.numbers, sans limite. #61969 (YenchangChan).
  • La modification des paramètres de la table Memory via ALTER MODIFY SETTING est désormais prise en charge. ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;. #62039 (zhongyuankai).
  • L’analyseur prend en charge les CTE récursives. #62074 (Maksim Kita).
  • Auparavant, notre stockage S3 et notre fonction de table S3 ne prenaient pas en charge la sélection depuis des fichiers d’archive. J’ai créé une solution qui permet d’itérer sur les fichiers à l’intérieur des archives dans S3. #62259 (Daniil Ivanik).
  • Prise en charge de la fonction conditionnelle clamp. #62377 (skyoct).
  • Ajout du format de sortie npy. #62430 (豪肥肥).
  • L’analyseur prend en charge la clause QUALIFY. Clôture #47819. #62619 (Maksim Kita).
  • Ajout du paramètre de requête role à l’interface HTTP. Il fonctionne de manière similaire à SET ROLE x, en appliquant le rôle avant l’exécution de l’instruction. Cela permet de contourner la limitation de l’interface HTTP, puisque les instructions multiples ne sont pas autorisées et qu’il n’est pas possible d’envoyer à la fois SET ROLE x et l’instruction elle-même. Il est possible de définir plusieurs rôles de cette manière, par exemple ?role=x&role=y, ce qui équivaut à SET ROLE x, y. #62669 (Serge Klochkov).
  • Ajout de SYSTEM UNLOAD PRIMARY KEY. #62738 (Pablo Marcos).
  • Ajout des fonctions SQL generateUUIDv7, generateUUIDv7ThreadMonotonic, generateUUIDv7NonMonotonic (avec différents compromis entre monotonie et performances) pour générer des UUID version 7, autrement dit des UUID basés sur l’horodatage avec un composant aléatoire. Ajout également de la nouvelle fonction UUIDToNum pour extraire des octets d’un UUID et de la nouvelle fonction UUIDv7ToDateTime pour extraire la composante d’horodatage d’un UUID version 7. #62852 (Alexey Petrunyaka).
  • Raw comme synonyme de TSVRaw. #63394 (Unalian).
  • Ajout de la possibilité d’effectuer un CROSS JOIN dans un fichier temporaire si la taille dépasse les limites. #63432 (p1rattttt).

Améliorations des performances

  • Ignorer la fusion des blocs de projection nouvellement créés lors des INSERT. #59405 (Nikita Taranov).
  • Réduire le surcoût des mutations pour les SELECT (v2). #60856 (Azat Khuzhin).
  • Améliorations du push down des filtres de JOIN à l’aide d’ensembles équivalents. #61216 (Maksim Kita).
  • Ajouter un nouveau passage de l’analyzer pour optimiser les expressions IN à valeur unique. #61564 (LiuNeng).
  • Traiter les fonctions de chaîne XXXUTF8 de façon « ASCII » si les chaînes d’entrée ne contiennent que des caractères ASCII. Inspiré de apache/doris#29799. Accélération globale de 1.07x à 1.62x. À noter que l’utilisation mémoire maximale a diminué dans certains cas. #61632 (李扬).
  • Activer l’encodeur Parquet rapide par défaut (output_format_parquet_use_custom_encoder). #62088 (Michael Kolupaev).
  • Améliorer JSONEachRowRowInputFormat en ignorant tous les champs restants une fois que tous les champs requis ont été lus. #62210 (lgbo).
  • Les fonctions splitByChar et splitByRegexp ont été nettement accélérées. #62392 (李扬).
  • Améliorer les opérations triviales de type INSERT SELECT depuis des fichiers via les table functions file/s3/hdfs/url/… Ajouter un paramètre max_parsing_threads distinct pour contrôler le nombre de threads utilisés pour le parsing en parallèle. #62404 (Kruglov Pavel).
  • Prise en charge d’un buffer d’écriture parallèle pour AzureBlobStorage, contrôlé par le paramètre azure_allow_parallel_part_upload. #62534 (SmitaRKulkarni).
  • Les fonctions to_utc_timestamp et from_utc_timestamp sont désormais environ 2x plus rapides. #62583 (KevinyhZou).
  • Les fonctions parseDateTimeOrNull, parseDateTimeOrZero, parseDateTimeInJodaSyntaxOrNull et parseDateTimeInJodaSyntaxOrZero s’exécutent désormais nettement plus vite (10x à 1000x) lorsque l’entrée contient principalement des valeurs impossibles à analyser. #62634 (LiuNeng).
  • Modifier le comportement de HostResolver en cas d’échec afin de ne conserver qu’un seul enregistrement par IP. #62652 (Anton Ivashkin).
  • Ajouter une nouvelle configuration prefer_merge_sort_block_bytes pour contrôler l’utilisation mémoire et accélérer le tri d’un facteur 2 lors de la fusion lorsqu’il y a de nombreuses colonnes. #62904 (LiuNeng).
  • Optimisation de QueryPlan pour convertir un OUTER JOIN en INNER JOIN si le filtre après le JOIN élimine toujours les valeurs par défaut. L’optimisation peut être contrôlée avec le paramètre query_plan_convert_outer_join_to_inner_join, activé par défaut. #62907 (Maksim Kita).
  • Activer optimize_rewrite_sum_if_to_count_if par défaut. #62929 (Raúl Marín).
  • Micro-optimisations pour le nouvel analyzer. #63429 (Raúl Marín).
  • L’analyse d’index fonctionnera si DateTime est comparé à DateTime64. Cela clôt #63441. #63443 (Alexey Milovidov).
  • Accélérer légèrement les index de type Set (environ 1,5 fois) en supprimant du code inutile. #64098 (Alexey Milovidov).

Améliorations

  • Suppression du paramètre optimize_monotonous_functions_in_order_by, qui est désormais sans effet. #63004 (Raúl Marín).
  • Les maps peuvent désormais avoir Float32, Float64, Array(T), Map(K,V) et Tuple(T1, T2, …) comme clés. Corrige #54537. #59318 (李扬).
  • Ajout d’un WriteBuffer asynchrone pour AzureBlobStorage, similaire à S3. #59929 (SmitaRKulkarni).
  • Chaînes multilignes avec préservation des bordures et modification de la largeur des colonnes. #59940 (Volodyachan).
  • RabbitMQ envoie désormais un nack pour les messages défectueux. Corrige #45350. #60312 (Kseniia Sumarokova).
  • Ajout d’un paramètre first_day_of_week qui affecte le premier jour de la semaine pris en compte par les fonctions toStartOfInterval(…, INTERVAL … WEEK). Cela permet d’assurer la cohérence avec la fonction toStartOfWeek, qui utilise par défaut le dimanche comme premier jour de la semaine. #60598 (Jordi Villar).
  • Ajout de la colonne virtuelle persistante _block_offset, qui stocke le numéro de row d’origine dans le block attribué lors de l’insert. La persistance de la colonne _block_offset peut être activée avec le paramètre enable_block_offset_column. Ajout de la colonne virtuelle _part_data_version, qui contient soit le numéro de block minimal, soit la version de mutation de la part. La colonne virtuelle persistante _block_number n’est plus considérée comme Experimental. #60676 (Anton Popov).
  • Les fonctions date_diff et age calculent désormais leur résultat avec une précision à la nanoseconde au lieu de la microseconde. Elles acceptent aussi désormais nanosecond (ou nanoseconds ou ns) comme valeur possible pour le paramètre unit. #61409 (Austin Kothig).
  • Désormais, les marks ne sont plus chargées pour les wide parts pendant les merges. #61551 (Anton Popov).
  • Activation par défaut de output_format_pretty_row_numbers. C’est plus pratique à l’usage. #61791 (Alexey Milovidov).
  • La barre de progression fonctionnera pour les queries triviales avec LIMIT sur system.zeros, system.zeros_mt (elle fonctionne déjà pour system.numbers et system.numbers_mt), ainsi que pour la table function generateRandom. En prime, si le nombre total d’enregistrements dépasse la limite max_rows_to_read, cela lèvera une exception plus tôt. Cela corrige #58183. #61823 (Alexey Milovidov).
  • Ajout de TRUNCATE ALL TABLES. #61862 (豪肥肥).
  • Ajout d’un paramètre input_format_json_throw_on_bad_escape_sequence ; sa désactivation permet d’enregistrer des séquences d’échappement invalides dans les JSON input formats. #61889 (Kruglov Pavel).
  • Correction de la grammaire, de “a” vers “the”, dans le message d’avertissement. Il n’existe qu’un seul moteur atomic ; il faut donc écrire “to the new Atomic engine” au lieu de “to a new Atomic engine”. #61952 (shabroo).
  • Correction d’une erreur logique lors de l’annulation d’une transaction d’insert avec quorum. #61953 (Han Fei).
  • Inférence automatique des column types Nullable à partir du schéma Apache Arrow. #61984 (Maksim Kita).
  • Permet d’annuler la fusion parallèle des états d’agrégation pendant l’agrégation. Exemple : uniqExact. #61992 (Maksim Kita).
  • Le source de dictionnaire avec INVALIDATE_QUERY n’est pas rechargé deux fois au démarrage. #62050 (vdimir).
  • OPTIMIZE FINAL pour ReplicatedMergeTree attend désormais la fin des merges en cours, puis réessaie de planifier une fusion finale. Cela le rapproche davantage du comportement habituel de MergeTree. #62067 (Nikita Taranov).
  • Lors de la lecture de données à partir d’un fichier texte Hive, la première ligne du fichier était utilisée pour redimensionner le nombre de champs en entrée. Or, il arrive parfois que le nombre de champs de cette première ligne ne corresponde pas à celui défini dans la table Hive : par exemple, si la table Hive est définie avec 3 colonnes, comme test_tbl(a Int32, b Int32, c Int32), mais que la première ligne du fichier texte ne contient que 2 champs. Dans ce cas, les champs en entrée sont redimensionnés à 2 et, si la ligne suivante du fichier texte comporte 3 champs, le troisième champ ne peut pas être lu et reçoit à la place la valeur par défaut 0, ce qui est incorrect. #62086 (KevinyhZou).
  • La coloration syntaxique pendant la saisie dans le client fonctionnera au niveau de la syntaxe (auparavant, elle fonctionnait au niveau du lexer). #62123 (Alexey Milovidov).
  • Correction d’un problème où l’ajout d’un = 1 ou = 0 redondant après une expression booléenne impliquant la clé primaire empêchait l’utilisation de l’index primaire. Par exemple, SELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1 et SELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0 effectuaient tous deux un balayage complet de la table, alors que l’index primaire pouvait être utilisé. #62142 (josh-hildred).
  • Ajout du paramètre lightweight_deletes_sync (valeur par défaut : 2 - attendre toutes les répliques de manière synchrone). Il est similaire au paramètre mutations_sync, mais n’affecte que le comportement des lightweight deletes. #62195 (Anton Popov).
  • Différencie les booléens et les entiers lors de l’analyse des valeurs pour les paramètres personnalisés : SET custom_a = true; SET custom_b = 1;. #62206 (Vitaly Baranov).
  • Prise en charge de l’accès à S3 via des endpoints d’interface AWS Private Link. Corrige #60021, #31074 et #53761. #62208 (Arthur Passos).
  • Le client doit envoyer l’en-tête ‘Keep-Alive: timeout=X’ au serveur. Si un client reçoit une réponse du serveur avec cet en-tête, il doit utiliser la valeur fournie par le serveur. De plus, il est préférable qu’un client n’utilise pas une connexion sur le point d’expirer afin d’éviter une situation de concurrence lors de la fermeture de la connexion. #62249 (Sema Checherinda).
  • Ajout des unités nano-, micro- et millisecondes pour date_trunc. #62335 (Misz606).
  • Le cache de requêtes ne met désormais plus en cache les résultats des requêtes sur les tables système (system., information_schema., INFORMATION_SCHEMA.*). #62376 (Robert Schulze).
  • La requête MOVE PARTITION TO TABLE peut être retardée ou lever l’exception TOO_MANY_PARTS afin d’éviter de dépasser les limites du nombre de parts. Les mêmes paramètres et limites s’appliquent que pour la requête INSERT (voir max_parts_in_total, parts_to_delay_insert, parts_to_throw_insert, inactive_parts_to_throw_insert, inactive_parts_to_delay_insert, max_avg_part_size_for_too_many_parts, min_delay_to_insert_ms et max_delay_to_insert). #62420 (Sergei Trifonov).
  • Faire en sorte que transform renvoie toujours la première correspondance. #62518 (Raúl Marín).
  • Éviter d’évaluer les expressions DEFAULT de la table lors de l’exécution de RESTORE. #62601 (Vitaly Baranov).
  • Autoriser une quota key avec un scheme d’authentification différent dans les HTTP requests. #62842 (Kseniia Sumarokova).
  • Fermer la session lorsque le valid_until de l’utilisateur est atteint. #63046 (Konstantin Bogdanov).
Dernière modification le 29 juin 2026