Passer au contenu principal
Changements pertinents pour les services ClickHouse Cloud de la release v24.10.

Changement non rétrocompatible

  • Autorise l’écriture de SETTINGS avant FORMAT dans une chaîne de requêtes avec UNION lorsque les sous-requêtes sont entre parenthèses. Cela clôt #39712. Modifie le comportement lorsqu’une requête comporte deux fois la clause SETTINGS dans une séquence. La clause SETTINGS la plus proche aura la priorité pour la sous-requête correspondante. Dans les versions précédentes, la clause SETTINGS la plus externe pouvait avoir la priorité sur la clause interne. #60197#68614 (Alexey Milovidov).
  • Réimplémente le type Dynamic. Désormais, lorsque la limite des types de données dynamiques est atteinte, les nouveaux types ne sont plus convertis en String, mais stockés dans une structure de données spéciale au format binaire avec un type de données encodé en binaire. Désormais, tout type inséré dans une colonne Dynamic peut y être lu comme sous-colonne. #68132 (Pavel Kruglov).
  • Les expressions comme a[b].c sont prises en charge pour les tuples nommés, ainsi que les indices nommés à partir d’expressions arbitraires, par exemple expr().name. C’est utile pour le traitement du JSON. Cela clôt #54965. Dans les versions précédentes, une expression de la forme expr().name était analysée comme tupleElement(expr(), name), et l’analyseur de requêtes recherchait une colonne name plutôt que l’élément de tuple correspondant ; dans la nouvelle version, cela devient tupleElement(expr(), 'name'). Dans la plupart des cas, l’ancienne version ne fonctionnait pas, mais on peut imaginer un scénario très inhabituel dans lequel ce changement pourrait entraîner une incompatibilité : si vous stockiez des noms d’éléments de tuple dans une colonne ou un alias portant un nom différent de celui de l’élément de tuple : SELECT 'b' AS a, CAST([tuple(123)] AS 'Array(Tuple(b UInt8))') AS t, t[1].a. Il est très peu probable que vous utilisiez de telles requêtes, mais nous devons tout de même marquer ce changement comme potentiellement non rétrocompatible. #68435 (Alexey Milovidov).
  • Lorsque le paramètre print_pretty_type_names est activé, il affichera le type de données Tuple sous une forme Pretty dans les instructions SHOW CREATE TABLE, la fonction formatQuery et en mode interactif dans clickhouse-client et clickhouse-local. Dans les versions précédentes, ce paramètre s’appliquait uniquement aux requêtes DESCRIBE et à toTypeName. Cela clôt #65753. #68492 (Alexey Milovidov).
  • La réorganisation des conditions de filtre de la clause [PRE]WHERE est désormais autorisée par défaut. Elle peut être désactivée en définissant allow_reorder_prewhere_conditions sur false. #70657 (Nikita Taranov).
  • Corrige l’optimisation optimize_functions_to_subcolumns (qui pouvait auparavant entraîner l’erreur Invalid column type for ColumnUnique::insertRangeFrom. Expected String, got LowCardinality(String)), en préservant le type LowCardinality dans mapKeys/mapValues. #70716 (Azat Khuzhin).

Nouvelle fonctionnalité

  • Les vues matérialisées actualisables sont prêtes pour la production. #70550 (Michael Kolupaev). Les vues matérialisées actualisables sont désormais prises en charge dans les bases de données Replicated. #60669 (Michael Kolupaev).
  • La fonction toStartOfInterval() dispose désormais d’une nouvelle surcharge qui émule la fonction time_bucket() de TimescaleDB ou, de manière équivalente, la fonction date_bin() de PostgreSQL. (#55619). Elle permet d’aligner des valeurs de date ou de timestamp sur des multiples d’un intervalle donné à partir d’une origine arbitraire (au lieu de 0000-01-01 00:00:00.000 comme origine fixe). Par exemple, SELECT toStartOfInterval(toDateTime('2023-01-01 14:45:00'), INTERVAL 1 MINUTE, toDateTime('2023-01-01 14:35:30')); renvoie 2023-01-01 14:44:30, soit un multiple d’intervalles d’une minute à partir de l’origine 2023-01-01 14:35:30. #56738 (Yarik Briukhovetskyi).
  • Intégration MongoDB remaniée : migration vers le nouveau driver mongocxx depuis Poco::MongoDB obsolète, suppression de la prise en charge de l’ancien protocole obsolète, prise en charge de la connexion par URI, prise en charge de tous les types MongoDB, prise en charge des instructions WHERE et ORDER BY côté MongoDB, restriction des expressions non prises en charge par MongoDB. #63279 (Kirill Nikiforov).
  • Une nouvelle option --progress-table dans clickhouse-client affiche une table avec des métriques évoluant pendant l’exécution de la requête ; une nouvelle option --enable-progress-table-toggle est associée à l’option --progress-table et permet d’activer ou de désactiver l’affichage de la table de progression en appuyant sur la touche de contrôle (Espace). #63689 (Maria Khristenko).
  • Cela permet d’accorder l’accès aux préfixes génériques. GRANT SELECT ON db.table_pefix_* TO user. #65311 (pufit).
  • Introduction du format JSONCompactWithProgress, dans lequel ClickHouse produit chaque ligne sous la forme d’un objet JSON délimité par des sauts de ligne, incluant les métadonnées, les données, la progression, les totaux et les statistiques. #66205 (Alexey Korepanov).
  • Ajout de system.query_metric_log, qui contient l’historique de la mémoire et des valeurs de métriques de la table system.events pour des requêtes individuelles, périodiquement écrites sur disque. #66532 (Pablo Marcos).
  • Ajout du paramètre input_format_json_empty_as_default qui, lorsqu’il est activé, traite les champs vides dans les entrées JSON comme des valeurs par défaut. Clôture de #59339. #66782 (Alexis Arnaud).
  • Ajout des fonctions overlay et overlayUTF8, qui remplacent des parties d’une chaîne par une autre chaîne. Exemple : SELECT overlay('Hello New York', 'Jersey', 11) renvoie Hello New Jersey. #66933 (李扬).
  • Ajout d’une nouvelle commande, Lightweight Delete In Partition DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr; ``` VM-114-29-tos :) select * from ads_app_poster_ip_source_channel_di_replicated_local;. #67805 (sunny).
  • Comparaison implémentée pour les valeurs du type de données Interval, qui sont désormais converties vers le plus petit supertype commun. #68057 (Yarik Briukhovetskyi).
  • Ajout du paramètre create_if_not_exists pour adopter par défaut le comportement IF NOT EXISTS dans les instructions CREATE. #68164 (Peter Nguyen).
  • Permet désormais de lire des tables Iceberg dans Azure et en local. #68210 (Daniil Ivanik).
  • Ajout des fonctions d’agrégation distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypes pour une meilleure introspection du contenu des colonnes de type JSON. #68463 (Pavel Kruglov).
  • Les entrées du cache de requêtes peuvent désormais être supprimées par tag. Par exemple, l’entrée du cache de requêtes créée par SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc' peut maintenant être supprimée avec SYSTEM DROP QUERY CACHE TAG 'abc' (ou, bien sûr, simplement avec SYSTEM DROP QUERY CACHE, ce qui videra l’intégralité du cache de requêtes). #68477 (Michał Tabaszewski).
  • Une simple requête SELECT peut être écrite avec un SELECT implicite afin de permettre des expressions de type calculatrice, par ex. ch "1 + 2". Ce comportement est contrôlé par un nouveau paramètre, implicit_select. #68502 (Alexey Milovidov).
  • Prise en charge du mode —copy pour clickhouse local comme raccourci de conversion de format #68503. #68583 (Denis Hananein).
  • Ajout de la fonction ripeMD160, qui calcule le hachage cryptographique RIPEMD-160 d’une chaîne. Exemple : SELECT hex(ripeMD160('The quick brown fox jumps over the lazy dog')) renvoie 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B. #68639 (Dergousov Maxim).
  • Ajout de la colonne virtuelle _headers pour le moteur de table URL. Clôture #65026. #68867 (flynn).
  • Ajout de la table system.projections pour suivre les projections disponibles. #68901 (Jordi Villar).
  • Ajout de la prise en charge de la fonction arrayUnion. #68989 (Peter Nguyen).
  • Ajout de la nouvelle fonction arrayZipUnaligned pour la compatibilité avec Spark (arrays_zip), permettant de gérer des tableaux non alignés sur la base de arrayZip. ``` sql SELECT arrayZipUnaligned([1], [1, 2, 3]). #69030 (李扬).
  • Prise en charge de la fonction d’agrégation quantileExactWeightedInterpolated, qui est une version interpolée basée sur quantileExactWeighted. Certains pourraient se demander pourquoi une nouvelle fonction quantileExactWeightedInterpolated est nécessaire alors que quantileExactInterpolatedWeighted existe déjà. La raison est que la nouvelle est plus précise que l’ancienne. Elle sert par ailleurs à la compatibilité avec Spark dans Apache Gluten. #69619 (李扬).
  • Prise en charge de la fonction arrayElementOrNull. Elle renvoie null si l’index du tableau est hors limites ou si la clé de map est introuvable. #69646 (李扬).
  • Prise en charge du type Dynamic dans la plupart des fonctions, en les exécutant sur les types internes de Dynamic. #69691 (Pavel Kruglov).
  • Ajoute l’argument scale (par défaut : true) à la fonction arrayAUC, ce qui permet d’ignorer l’étape de normalisation (ticket #69609). #69717 (gabrielmcg44).
  • La fonction RIPEMD160 a été réintroduite ; elle calcule le hachage cryptographique RIPEMD-160 d’une chaîne. Exemple : SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog')) renvoie 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B. #70087 (Dergousov Maxim).
  • Permet de mettre en cache les fichiers lus pour les table engines de stockage objet et les data lakes, en utilisant le hachage de ETag + chemin de fichier comme clé de cache. #70135 (Kseniia Sumarokova).
  • Prise en charge de la lecture des tables Iceberg sur HDFS. #70268 (flynn).
  • Permet de lire/écrire le type JSON sous forme de chaîne binaire au format RowBinary avec les paramètres input_format_binary_read_json_as_string/output_format_binary_write_json_as_string. #70288 (Pavel Kruglov).
  • Permet de sérialiser/désérialiser une colonne JSON comme une seule colonne String au format Native. Pour la sortie, utilisez le paramètre output_format_native_write_json_as_string. En entrée, utilisez la version de sérialisation 1 avant les données de la colonne. #70312 (Pavel Kruglov).
  • Prise en charge de la CTE standard with insert, alors qu’auparavant seule la forme insert ... with ... était prise en charge. #70593 (Shichao Jin).
Dernière modification le 29 juin 2026