Passer au contenu principal

Tag de version ClickHouse : 24.2.2.15987

Changement incompatible avec les versions antérieures

  • Validation des types suspects/expérimentaux dans les types imbriqués. Auparavant, nous ne validions pas ces types (à l’exception de JSON) dans des types imbriqués tels que Array/Tuple/Map. #59385 (Kruglov Pavel).
  • La clause de tri ORDER BY ALL (introduite dans la v23.12) est remplacée par ORDER BY *. L’ancienne syntaxe était trop sujette aux erreurs pour les tables comportant une colonne all. #59450 (Robert Schulze).
  • Ajout d’une vérification de cohérence du nombre de threads et de la taille des blocs. #60138 (Raúl Marín).
  • Rejet des requêtes INSERT entrantes lorsque les paramètres au niveau de la requête async_insert et deduplicate_blocks_in_dependent_materialized_views sont activés simultanément. Ce comportement est contrôlé par le paramètre throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert, activé par défaut. Il s’agit de la suite de https://github.com/ClickHouse/ClickHouse/pull/59699, nécessaire pour débloquer https://github.com/ClickHouse/ClickHouse/pull/59915. #60888 (Nikita Mikhaylov).
  • L’utilitaire clickhouse-copier a été déplacé vers un dépôt GitHub distinct : https://github.com/ClickHouse/copier. Il n’est plus inclus dans le bundle, mais reste disponible en téléchargement séparé. Ceci clôt : #60734 Ceci clôt : #60540 Ceci clôt : #60250 Ceci clôt : #52917 Ceci clôt : #51140 Ceci clôt : #47517 Ceci clôt : #47189 Ceci clôt : #46598 Ceci clôt : #40257 Ceci clôt : #36504 Ceci clôt : #35485 Ceci clôt : #33702 Ceci clôt : #26702 ### Entrée de documentation pour les changements visibles par les utilisateurs. #61058 (Nikita Mikhaylov).
  • Pour améliorer la compatibilité avec MySQL, la fonction locate accepte désormais par défaut les arguments (needle, haystack[, start_pos]). Le comportement précédent (haystack, needle, [, start_pos]) peut être rétabli en définissant function_locate_has_mysql_compatible_argument_order = 0. #61092 (Robert Schulze).
  • Les parties de données en mémoire obsolètes sont dépréciées depuis la version 23.5 et ne sont plus prises en charge depuis la version 23.10. Le code restant est désormais supprimé. Suite de #55186 et #45409. Il est peu probable que vous ayez utilisé des parties de données en mémoire, car elles n’étaient disponibles qu’avant la version 23.5, et seulement si vous les activiez manuellement en spécifiant les SETTINGS correspondants pour une table MergeTree. Pour vérifier si vous avez des parties de données en mémoire, exécutez la requête suivante : SELECT part_type, count() FROM system.parts GROUP BY part_type ORDER BY part_type. Pour désactiver l’utilisation des parties de données en mémoire, exécutez ALTER TABLE ... MODIFY SETTING min_bytes_for_compact_part = DEFAULT, min_rows_for_compact_part = DEFAULT. Avant de mettre à niveau depuis d’anciennes versions de ClickHouse, vérifiez d’abord que vous n’avez pas de parties de données en mémoire. S’il y a des parties de données en mémoire, désactivez-les d’abord, puis attendez qu’il n’y en ait plus avant de poursuivre la mise à niveau. #61127 (Alexey Milovidov).
  • Interdire SimpleAggregateFunction dans ORDER BY des tables MergeTree par défaut (comme AggregateFunction, car ils ne sont pas comparables ; utilisez allow_suspicious_primary_key pour les autoriser). #61399 (Azat Khuzhin).
  • ClickHouse autorise des données binaires arbitraires dans le type de données String, qui est généralement en UTF-8. Les Strings de Parquet/ORC/Arrow ne prennent en charge que l’UTF-8. C’est pourquoi vous pouvez choisir quel type de données Arrow utiliser pour le type de données String de ClickHouse : String ou Binary. Cela est contrôlé par les paramètres output_format_parquet_string_as_string, output_format_orc_string_as_string, output_format_arrow_string_as_string. Bien que Binary soit plus correct et plus compatible, utiliser String par défaut correspondra aux attentes des utilisateurs dans la plupart des cas. Parquet/ORC/Arrow prend en charge de nombreuses méthodes de compression, notamment lz4 et zstd. ClickHouse les prend toutes en charge. Certains outils de moindre qualité ne prennent pas en charge la méthode de compression lz4, plus rapide, c’est pourquoi nous définissons zstd par défaut. Cela est contrôlé par les paramètres output_format_parquet_compression_method, output_format_orc_compression_method et output_format_arrow_compression_method. Nous avons remplacé la valeur par défaut par zstd pour Parquet et ORC, mais pas pour Arrow (qui reste privilégié pour des usages de bas niveau). #61817 (Alexey Milovidov).
  • Correction d’un problème de sécurité des vues matérialisées, qui permettait à un utilisateur d’insérer dans une table sans disposer des privilèges requis. Le correctif vérifie que l’utilisateur a le droit d’insérer non seulement dans une vue matérialisée, mais aussi dans toutes les tables sous-jacentes. Cela signifie que certaines requêtes qui fonctionnaient auparavant peuvent désormais échouer avec Not enough privileges. Pour résoudre ce problème, cette release introduit une nouvelle fonctionnalité de SQL security pour les vues https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security. #54901 (pufit)

Nouvelle fonctionnalité

  • Prise en charge du mode Topk/topkweighed, qui renvoie le nombre de valeurs et son erreur. #54508 (UnamedRus).
  • Ajout d’une nouvelle syntaxe permettant de spécifier l’utilisateur DEFINER dans une vue/vue matérialisée. Cela permet d’exécuter des requêtes SELECT/INSERT depuis des vues sans grants explicites sur les tables sous-jacentes. #54901 (pufit).
  • Mise en œuvre de la conversion automatique de tables MergeTree de différents types vers le moteur Replicated. Créez un fichier convert_to_replicated vide dans le répertoire de données de la table (/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/) et la table sera convertie automatiquement au prochain démarrage du serveur. #57798 (Kirill).
  • Ajout de la fonction de table mergeTreeIndex. Elle représente le contenu des fichiers d’index et de marks des tables MergeTree. Elle peut être utilisée pour l’introspection. Syntaxe : mergeTreeIndex(database, table, [with_marks = true])database.table est une table existante avec le moteur MergeTree. #58140 (Anton Popov).
  • Tentative de détection automatique du format de fichier lors de l’inférence de schéma s’il est inconnu dans les moteurs file/s3/hdfs/url/azureBlobStorage. Ferme #50576. #59092 (Kruglov Pavel).
  • Ajout de generate_series en tant que fonction de table. Cette fonction génère une table contenant une progression arithmétique de nombres naturels. #59390 (divanik).
  • Ajout de la requête ALTER TABLE table FORGET PARTITION partition, qui supprime les nœuds ZooKeeper liés à une partition vide. #59507 (Sergei Trifonov).
  • Prise en charge de la lecture et de l’écriture des sauvegardes sous forme d’archives tar. #59535 (josh-hildred).
  • Ajout de la nouvelle fonction d’agrégation ‘groupArrayIntersect’. Suite de #49862. #59598 (Yarik Briukhovetskyi).
  • Mise en œuvre de la table system.dns_cache, qui peut être utile pour le débogage des problèmes DNS. #59856 (Kirill Nikiforov).
  • Mise en œuvre de la prise en charge des buckets S3Express. #59965 (Nikita Taranov).
  • Le codec LZ4HC acceptera un nouveau niveau 2, plus rapide que l’ancien niveau minimum 3, au prix d’une compression moindre. Dans les versions précédentes, LZ4HC(2) et les niveaux inférieurs étaient équivalents à LZ4HC(3). Auteur : Cyan4973. #60090 (Alexey Milovidov).
  • Mise en œuvre de la table system.dns_cache, qui peut être utile pour le débogage des problèmes DNS. Nouveau paramètre du serveur : dns_cache_max_size. #60257 (Kirill Nikiforov).
  • Ajout de la fonction toMillisecond qui renvoie la composante milliseconde pour les valeurs de type DateTime ou DateTime64. #60281 (Shaun Struwig).
  • Prise en charge de la version à un seul argument pour la table function merge, sous la forme merge(['db_name', ] 'tables_regexp'). #60372 (豪肥肥).
  • Tous les noms de format deviennent insensibles à la casse, par exemple Tsv, TSV, tsv ou même rowbinary. #60420 (豪肥肥).
  • Ajout d’une nouvelle syntaxe permettant de spécifier l’utilisateur definer dans une vue/vue matérialisée. Cela permet d’exécuter des SELECT/INSERT depuis des vues sans grants explicites sur les tables sous-jacentes. #60439 (pufit).
  • Ajout de quatre propriétés à StorageMemory (moteur Memory) : min_bytes_to_keep, max_bytes_to_keep, min_rows_to_keep et max_rows_to_keep - Ajout de tests pour refléter ces changements - Mise à jour de la documentation memory.md - Ajout de la propriété de table context à MemorySink pour permettre l’accès aux limites des paramètres de table. #60612 (Jake Bamrah).
  • Ajout de la fonction toMillisecond, qui renvoie la composante milliseconde pour les valeurs de type DateTime ou DateTime64. #60649 (Robert Schulze).
  • Séparation des limites sur le nombre de requêtes en attente et en cours d’exécution. Ajout du nouveau paramètre serveur max_waiting_queries, qui limite le nombre de requêtes en attente à cause de async_load_databases. Les limites existantes sur le nombre de requêtes en cours d’exécution ne comptent plus les requêtes en attente. #61053 (Sergei Trifonov).
  • Ajout de la prise en charge de ATTACH PARTITION ALL. #61107 (Kirill Nikiforov).

Amélioration des performances

  • Élimine les agrégateurs min/max/any/anyLast des clés de GROUP BY dans la section SELECT. #52230 (JackyWoo).
  • Améliore les performances de la méthode d’agrégation sérialisée lorsqu’elle implique plusieurs colonnes [nullable]. Il s’agit d’une version générale de #51399 qui ne compromet pas l’intégrité de l’abstraction. #55809 (Amos Bird).
  • Construit paresseusement la sortie du join pour améliorer les performances de ALL join. #58278 (LiuNeng).
  • Améliorations des fonctions d’agrégation ArgMin / ArgMax / any / anyLast / anyHeavy, ainsi que des requêtes ORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1. #58640 (Raúl Marín).
  • Optimise conditionnellement les performances de sum/avg pour les types bigint et big decimal en réduisant les ratés de prédiction de branchement. #59504 (李扬).
  • Améliore les performances des requêtes SELECT avec des mutations actives. #59531 (Azat Khuzhin).
  • Optimisation mineure du filtre de colonnes. Évite de filtrer avec result_size_hint = -1 les colonnes dont le type de données sous-jacent n’est pas numérique. Le pic de mémoire peut être réduit à 44 % de la valeur d’origine dans certains cas. #59698 (李扬).
  • La clé primaire utilisera moins de mémoire. #60049 (Alexey Milovidov).
  • Améliore l’utilisation de la mémoire pour la clé primaire et certaines autres opérations. #60050 (Alexey Milovidov).
  • Les clés primaires des tables seront chargées en mémoire de manière paresseuse lors du premier accès. Cela est contrôlé par le nouveau paramètre MergeTree primary_key_lazy_load, activé par défaut. Cela offre plusieurs avantages : - elles ne seront pas chargées pour les tables qui ne sont pas utilisées ; - s’il n’y a pas assez de mémoire, une exception sera levée lors de la première utilisation plutôt qu’au démarrage du serveur. Cela présente aussi plusieurs inconvénients : - la latence de chargement de la clé primaire sera supportée lors de la première requête plutôt qu’avant l’acceptation des connexions ; cela peut théoriquement introduire un effet de troupeau. Cela résout #11188. #60093 (Alexey Milovidov).
  • Fonction vectorisée dotProduct, utile pour la recherche vectorielle. #60202 (Robert Schulze).
  • Si la clé primaire de la table contient principalement des colonnes inutiles, ne les gardez pas en mémoire. Cela est contrôlé par un nouveau paramètre primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns, avec la valeur 0.9 par défaut, ce qui signifie : pour une clé primaire composite, si une colonne change de valeur au moins 0.9 fois sur l’ensemble des cas, les colonnes suivantes ne seront pas chargées. #60255 (Alexey Milovidov).
  • Exécute la fonction multiIf de manière colonnaire lorsque le type sous-jacent de result_type est numérique. #60384 (李扬).
  • Comme le montre la fig. 1, remplacer ”&&” par ”&” peut générer du code SIMD. image Fig. 1. Code compilé à partir de ’&&’ (à gauche) et de ’&’ (à droite). #60498 (Zhiguo Zhou).
  • Mutex presque 2x plus rapides (ils étaient plus lents à cause de ThreadFuzzer). #60823 (Azat Khuzhin).
  • Déplacement du drainage des connections de prepare vers work, avec drainage de plusieurs connections en parallèle. #60845 (lizhuoyu5).
  • Optimisation de insertManyFrom pour les nombres Nullable ou les chaînes Nullable. #60846 (李扬).
  • Optimisation de la fonction dotProduct pour éviter des copies mémoire inutiles et coûteuses. #60928 (Robert Schulze).
  • Les opérations sur le filesystem cache souffriront moins de la contention sur les verrous. #61066 (Alexey Milovidov).
  • Optimisation de ColumnString::replicate et prévention de l’optimisation de memcpySmallAllowReadWriteOverflow15Impl en memcpy intégré. Close #61074. ColumnString::replicate est 2,46x plus rapide sur x86-64. #61075 (李扬).
  • Affichage 30x plus rapide pour les entiers 256 bits. #61100 (Raúl Marín).
  • Si une query contenant une erreur de syntaxe incluait un sélecteur COLUMNS avec une expression régulière, celle-ci était compilée à chaque retour arrière du parser, au lieu de l’être une seule fois. C’était une erreur fondamentale. La regexp compilée était placée dans l’AST. Mais le A de AST signifie “abstract”, ce qui implique qu’il ne devrait pas contenir d’objets lourds. Certaines parties de l’AST peuvent être créées puis supprimées pendant le parsing, notamment lors de nombreux retours arrière. Cela ralentit le parsing et permet donc à un utilisateur readonly de provoquer un DoS. Mais le principal problème est que cela freine les progrès des fuzzers. #61543 (Alexey Milovidov).

Amélioration

  • Lors de l’exécution de la requête MODIFY COLUMN sur des vues matérialisées, vérifiez la structure de la table interne afin de vous assurer que chaque colonne existe. #47427 (sunny).
  • Ajout de la table system.keywords, qui contient tous les mots-clés du parser. Elle est principalement destinée à améliorer le fuzzing et la coloration syntaxique. #51808 (Nikita Mikhaylov).
  • Ajout de la prise en charge des vues paramétrées avec l’analyzer afin de ne pas analyser create parameterized view. Remaniement de la logique existante des vues paramétrées afin de ne pas analyser create parameterized view. #54211 (SmitaRKulkarni).
  • Le database engine Ordinary est obsolète. Vous recevrez un avertissement dans clickhouse-client si votre serveur l’utilise. Cela clôt #52229. #56942 (shabroo).
  • Tous les verrous zero copy liés à une table doivent être supprimés lorsque la table est supprimée. Le répertoire qui contient ces verrous doit lui aussi être supprimé. #57575 (Sema Checherinda).
  • Ajout d’une capacité de court-circuit pour la fonction dictGetOrDefault. Clôt #52098. #57767 (jsc0218).
  • Autorise la déclaration d’un enum dans la structure d’une table externe. #57857 (Duc Canh Le).
  • L’exécution de ALTER COLUMN MATERIALIZE sur une colonne avec une expression DEFAULT ou MATERIALIZED écrit désormais les bonnes valeurs : la valeur par défaut pour les parts existantes avec valeur par défaut, ou la valeur non par défaut pour les parts existantes avec valeur non par défaut. Auparavant, la valeur par défaut était écrite pour toutes les parts existantes. #58023 (Duc Canh Le).
  • Activation d’une logique de backoff (par exemple exponentielle). Cela permettra de réduire l’utilisation du CPU, l’utilisation de la mémoire et la taille des fichiers journaux. #58036 (MikhailBurdukov).
  • Prend en compte les lignes supprimées de manière lightweight lors de la sélection des parts à fusionner. #58223 (Zhuo Qiu).
  • Autorise la définition de volume_priority dans storage_configuration. #58533 (Andrey Zvonov).
  • Ajout de la prise en charge du type Date32 dans le codec T64. #58738 (Hongbin Ma).
  • Cette PR rend les connexions http/https réutilisables dans tous les cas d’usage, y compris lorsque la réponse est 3xx ou 4xx. #58845 (Sema Checherinda).
  • Ajout de commentaires pour les colonnes dans davantage de tables système. Suite de https://github.com/ClickHouse/ClickHouse/pull/58356. #59016 (Nikita Mikhaylov).
  • Il est désormais possible d’utiliser des colonnes virtuelles dans PREWHERE. C’est particulièrement utile pour les colonnes virtuelles non constantes comme _part_offset. #59033 (Amos Bird).
  • Les paramètres du moteur de table Distributed peuvent désormais être définis dans le fichier de configuration du serveur (comme pour les paramètres de MergeTree), par ex. <distributed> <flush_on_detach>false</flush_on_detach> </distributed>. #59291 (Azat Khuzhin).
  • Amélioration de Keeper : ne mettre en cache en mémoire qu’une quantité limitée de logs, contrôlée par latest_logs_cache_size_threshold et commit_logs_cache_size_threshold. #59460 (Antonio Andelic).
  • Au lieu d’utiliser une clé constante, l’object storage génère désormais une clé pour déterminer la capacité de suppression des objets. #59495 (Sema Checherinda).
  • Ne plus inférer par défaut les nombres à virgule flottante en notation exponentielle. Ajout d’un paramètre input_format_try_infer_exponent_floats permettant de restaurer le comportement précédent (désactivé par défaut). Clôt #59476. #59500 (Kruglov Pavel).
  • Autoriser les opérations ALTER à être entourées de parenthèses. L’ajout des parenthèses peut être contrôlé par la config format_alter_operations_with_parentheses. Par défaut, dans les requêtes formatées, les parenthèses sont ajoutées, car nous stockons dans certains endroits les opérations ALTER formatées comme métadonnées (par ex. : les mutations). La nouvelle syntaxe clarifie certaines requêtes où les opérations ALTER se terminent par une liste. Par ex. : ALTER TABLE x MODIFY TTL date GROUP BY a, b, DROP COLUMN c ne peut pas être analysée correctement avec l’ancienne syntaxe. Avec la nouvelle syntaxe, la requête ALTER TABLE x (MODIFY TTL date GROUP BY a, b), (DROP COLUMN c) est sans ambiguïté. Les anciennes versions ne peuvent pas lire la nouvelle syntaxe ; son utilisation peut donc provoquer des problèmes si des versions récentes et anciennes de ClickHouse coexistent dans un même cluster. #59532 (János Benjamin Antal).
  • Mise à niveau d’Intel QPL (utilisé par le codec DEFLATE_QPL) de v1.3.1 à v1.4.0. Correction également d’un bug du mécanisme de timeout de polling, car nous avons observé que, dans certains cas, le timeout ne fonctionnait pas correctement : lorsqu’un timeout se produit, IAA et le CPU peuvent traiter le buffer de façon concurrente. Pour l’instant, il vaut mieux s’assurer que le statut du codec IAA n’est pas QPL_STS_BEING_PROCESSED, puis basculer sur le codec logiciel. #59551 (jasperzhu).
  • Ajout de la lecture positionnelle pread dans libhdfs3. Si vous souhaitez appeler la lecture positionnelle dans libhdfs3, utilisez la fonction hdfsPread dans hdfs.h comme suit : tSize hdfsPread(hdfsFS fs, hdfsFile file, void * buffer, tSize length, tOffset position);. #59624 (M1eyu).
  • Vérification du débordement de pile dans les parseurs même si l’utilisateur a mal configuré le paramètre max_parser_depth à une valeur très élevée. Cela clôt #59622. #59697 (Alexey Milovidov).
  • Uniformisation du comportement des named collections créées en XML et en SQL dans le stockage Kafka. #59710 (Pervakov Grigorii).
  • Autoriser uuid dans replica_path si CREATE TABLE le contient explicitement. #59908 (Azat Khuzhin).
  • Ajout de la colonne metadata_version pour les tables ReplicatedMergeTree dans la table système system.tables. #59942 (Maksim Kita).
  • Amélioration de Keeper : ajout de tentatives de reprise en cas d’échec des opérations liées au disque. #59980 (Antonio Andelic).
  • Ajout du nouveau paramètre de configuration backups.remove_backup_files_after_failure : <clickhouse> <backups> <remove_backup_files_after_failure>true</remove_backup_files_after_failure> </backups> </clickhouse>. #60002 (Vitaly Baranov).
  • Utilisation de plusieurs threads pour lire les métadonnées des tables depuis une sauvegarde lors de l’exécution de la commande RESTORE. #60040 (Vitaly Baranov).
  • Désormais, si StorageBuffer a plus d’un shard (num_layers > 1), le flush en arrière-plan s’exécutera simultanément pour tous les shards dans plusieurs threads. #60111 (alesapin).
  • Prise en charge de la spécification d’utilisateurs pour certains paramètres S3 dans la configuration à l’aide de la clé user. #60144 (Antonio Andelic).
  • Ajout d’un mécanisme de repli de la copie de fichiers S3 depuis GCP vers une copie via buffer lorsque GCP renvoie Internal Error avec le code d’erreur HTTP GATEWAY_TIMEOUT. #60164 (Maksim Kita).
  • Autoriser “local” comme type de stockage objet au lieu de “local_blob_storage”. #60165 (Kseniia Sumarokova).
  • Implémentation d’un opérateur de comparaison pour les valeurs Variant et insertion correcte de Field dans une colonne Variant. La création du type Variant avec des types de variante similaires n’est plus autorisée par défaut (elle reste possible via le paramètre allow_suspicious_variant_types). Résout #59996. Résout #59850. #60198 (Kruglov Pavel).
  • Amélioration globale de l’utilisation des colonnes virtuelles. Il est désormais possible d’utiliser des colonnes virtuelles dans PREWHERE (ce qui est utile pour les colonnes virtuelles non constantes comme _part_offset). Une documentation intégrée est désormais disponible pour les colonnes virtuelles sous forme de commentaire de colonne dans la requête DESCRIBE lorsque le paramètre describe_include_virtual_columns est activé. #60205 (Anton Popov).
  • Exécution en court-circuit pour ULIDStringToDateTime. #60211 (Juan Madurga).
  • Ajout de la colonne query_id aux tables system.backups et system.backup_log. Ajout de la stacktrace d’erreur dans la colonne error. #60220 (Maksim Kita).
  • Flush parallèle des blocks INSERT en attente du moteur Distributed lors de DETACH/de l’arrêt du serveur et de SYSTEM FLUSH DISTRIBUTED (le parallélisme ne fonctionnera que si la table utilise une policy multi-disk, comme tout le reste du moteur Distributed actuellement). #60225 (Azat Khuzhin).
  • Le paramètre de filtre est incorrect dans joinRightColumnsSwitchNullability, ce qui résout #59625. #60259 (lgbo).
  • Ajout d’un paramètre pour forcer le cache read-through pour les merges. #60308 (Kseniia Sumarokova).
  • Le ticket #57598 mentionne un comportement particulier dans la gestion des transactions. Un COMMIT/ROLLBACK émis alors qu’aucune transaction n’est active est signalé comme une erreur, contrairement au comportement de MySQL. #60338 (PapaToemmsn).
  • Ajout du mode none_only_active pour le paramètre distributed_ddl_output_mode. #60340 (Alexander Tokmakov).
  • Les connexions via le port MySQL utilisent désormais automatiquement le paramètre prefer_column_name_to_alias = 1 pour prendre en charge QuickSight sans configuration supplémentaire. De plus, les paramètres mysql_map_string_to_text_in_show_columns et mysql_map_fixed_string_to_text_in_show_columns sont maintenant activés par défaut, eux aussi uniquement pour les connexions MySQL. Cela améliore la compatibilité avec davantage d’outils BI. #60365 (Robert Schulze).
  • Lorsque le format de sortie est le Pretty format et qu’un bloc se compose d’une seule valeur numérique supérieure à un million, un nombre lisible est affiché à droite du tableau. Par exemple : ┌──────count()─┐ │ 233765663884 │ -- 233.77 billion └──────────────┘. #60379 (rogeryk).
  • Possibilité de configurer des handlers de redirection HTTP pour clickhouse-server. Par exemple, vous pouvez faire en sorte que / redirige vers l’interface Play. #60390 (Alexey Milovidov).
  • Le dashboard Advanced bénéficie de couleurs légèrement améliorées pour les graphiques à plusieurs lignes. #60391 (Alexey Milovidov).
  • Correction d’une condition de concurrence dans le code JavaScript qui entraînait l’affichage de graphiques dupliqués superposés. #60392 (Alexey Milovidov).
  • Vérifie les dépassements de pile dans les parseurs, même si l’utilisateur a mal configuré le paramètre max_parser_depth avec une valeur très élevée. Cela clôt #59622. #60434 (Alexey Milovidov).
  • La fonction substring dispose désormais d’un nouvel alias byteSlice. #60494 (Robert Schulze).
  • Le paramètre serveur dns_cache_max_size a été renommé en dns_cache_max_entries afin de réduire toute ambiguïté. #60500 (Kirill Nikiforov).
  • SHOW INDEX | INDEXES | INDICES | KEYS ne trie plus selon les colonnes de clé primaire (ce qui n’était pas intuitif). #60514 (Robert Schulze).
  • Amélioration de Keeper : abandon du démarrage si un snapshot invalide est détecté, afin d’éviter toute perte de données. #60537 (Antonio Andelic).
  • Ajout d’une injection de pannes pour le fractionnement des plages de lecture MergeTree en plages intersectantes et non intersectantes à l’aide du paramètre merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_fault_probability. #60548 (Maksim Kita).
  • Le dashboard Advanced dispose désormais de contrôles toujours visibles pendant le défilement. Cela permet d’ajouter un nouveau graphique sans devoir remonter en haut de la page. #60692 (Alexey Milovidov).
  • Les types String et les énumérations peuvent être utilisés dans le même contexte, par exemple dans les arrays, les requêtes UNION et les expressions conditionnelles. Cela corrige #60726. #60727 (Alexey Milovidov).
  • Mise à jour de tzdata vers la version 2024a. #60768 (Raúl Marín).
  • Prise en charge des fichiers sans extension de format dans la base de données Filesystem. #60795 (Kruglov Pavel).
  • Amélioration de Keeper : prise en charge de leadership_expiry_ms dans les paramètres de Keeper. #60806 (Brokenice0415).
  • Toujours inférer les nombres en notation exponentielle dans les formats JSON, quel que soit le paramètre input_format_try_infer_exponent_floats. Ajout du paramètre input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects, qui permet d’utiliser le type String pour les chemins ambigus au lieu de lever une exception lors de l’inférence de Tuples nommés à partir d’objets JSON. #60808 (Kruglov Pavel).
  • Ajout d’un flag pour SMJ afin de traiter null comme la plus grande ou la plus petite valeur. Le comportement peut ainsi être compatible avec d’autres systèmes SQL, comme Apache Spark. #60896 (loudongfeng).
  • La version de ClickHouse a été ajoutée aux labels Docker. Cela corrige #54224. #60949 (Nikolay Monkov).
  • Ajout du paramètre parallel_replicas_allow_in_with_subquery = 1, qui permet d’utiliser des sous-requêtes avec IN et les répliques parallèles. #60950 (Nikolai Kochetov).
  • DNSResolver mélange l’ensemble des adresses IP résolues. #60965 (Sema Checherinda).
  • Prise en charge de la détection du format de sortie à partir de l’extension du fichier dans clickhouse-client et clickhouse-local. #61036 (豪肥肥).
  • Vérifier périodiquement les mises à jour de la limite de mémoire. #61049 (Han Fei).
  • Activation par défaut du profiling des processeurs (temps passé, octets entrants et sortants pour le tri, l’aggregation, etc.). #61096 (Azat Khuzhin).
  • Ajout de la fonction toUInt128OrZero, qui avait été omise par erreur (cette erreur est liée à https://github.com/ClickHouse/ClickHouse/pull/945). Les alias de compatibilité FROM_UNIXTIME et DATE_FORMAT (ils ne sont pas natifs de ClickHouse et n’existent que pour la compatibilité avec MySQL) sont désormais insensibles à la casse, comme attendu pour des alias de compatibilité SQL. #61114 (Alexey Milovidov).
  • Améliorations des vérifications d’accès, permettant de révoquer des droits non détenus lorsque l’utilisateur cible ne possède pas non plus les grants de révocation. Exemple : ```sql GRANT SELECT ON . TO user1; REVOKE SELECT ON system.* FROM user1;. #61115 (pufit).
  • Correction d’une erreur dans l’optimisation précédente : https://github.com/ClickHouse/ClickHouse/pull/59698 : suppression de break pour garantir que la première colonne filtrée a une taille minimale cc @jsc0218. #61145 (李扬).
  • Correction de la fonction has() avec une colonne Nullable (corrige #60214). #61249 (Mikhail Koviazin).
  • Il est désormais possible de spécifier l’attribut merge="true" dans les substitutions de config pour les sous-arbres <include from_zk="/path" merge="true">. Si cet attribut est spécifié, ClickHouse fusionnera le sous-arbre avec la configuration existante ; sinon, le comportement par défaut consiste à ajouter le nouveau contenu à la configuration. #61299 (alesapin).
  • Ajout de métriques asynchrones pour les memory mappings virtuels : VMMaxMapCount & VMNumMaps. Clôt #60662. #61354 (Tuan Pham Anh).
  • Utilisation du paramètre temporary_files_codec partout où des données temporaires sont créées, par exemple pour le tri en external memory et le GROUP BY en external memory. Auparavant, cela ne fonctionnait que dans l’algorithme de JOIN partial_merge. #61456 (Maksim Kita).
  • Suppression de la vérification en double containing_part.empty(), qui est déjà effectuée ici : https://github.com/ClickHouse/ClickHouse/blob/1296dac3c7e47670872c15e3f5e58f869e0bd2f2/src/Storages/MergeTree/MergeTreeData.cpp#L6141. #61467 (William Schoeffel).
  • Ajout d’un nouveau paramètre max_parser_backtracks, qui permet de limiter la complexité de l’analyse des requêtes. #61502 (Alexey Milovidov).
  • Moins de contention lors du redimensionnement dynamique du cache du système de fichiers. #61524 (Kseniia Sumarokova).
  • Désactivation du mode shardé de la queue StorageS3, car il sera réécrit. #61537 (Kseniia Sumarokova).
  • Correction d’une faute de frappe : use_leagcy_max_level devient use_legacy_max_level. #61545 (William Schoeffel).
  • Suppression de certaines entrées en double dans blob_storage_log. #61622 (YenchangChan).
  • Ajout de la fonction current_user comme alias de compatibilité pour MySQL. #61770 (Yarik Briukhovetskyi).
  • Utilisation de l’identité managée pour les IO des backups lors de l’utilisation d’Azure Blob Storage. Ajout d’un paramètre pour empêcher ClickHouse de tenter de créer un Container inexistant, ce qui nécessite des permissions au niveau du storage account. #61785 (Daniel Pozo Escalona).
  • Dans la version précédente, certains nombres dans les formats Pretty n’étaient pas assez élégants. #61794 (Alexey Milovidov).
  • Une valeur longue dans les Pretty formats ne sera pas tronquée si elle est la seule valeur du jeu de résultats, comme dans le résultat de la requête SHOW CREATE TABLE. #61795 (Alexey Milovidov).
  • Comme clickhouse-local, clickhouse-client acceptera l’option --output-format comme synonyme de l’option --format. Cela corrige #59848. #61797 (Alexey Milovidov).
  • Si stdout est un terminal et que le format de sortie n’est pas spécifié, clickhouse-client et les outils similaires utiliseront PrettyCompact par défaut, comme en interactive mode. clickhouse-client et clickhouse-local traiteront de manière unifiée les arguments de ligne de commande pour les input and output formats. Cela corrige #61272. #61800 (Alexey Milovidov).
  • Regroupement des chiffres avec des traits de soulignement dans les Pretty formats pour une meilleure lisibilité. Ceci est contrôlé par un nouveau paramètre, output_format_pretty_highlight_digit_groups. #61802 (Alexey Milovidov).

Correction de bug (anomalie visible par l’utilisateur dans une version stable officielle)

  • Correction d’un bug dans intDiv avec des arguments décimaux #59243 (Yarik Briukhovetskyi).
  • Correction de Fix_kql_issue_found_by_wingfuzz #59626 (Yong Wang).
  • Correction de l’erreur “Read beyond last offset” pour AsynchronousBoundedReadBuffer #59630 (Vitaly Baranov).
  • rabbitmq : correction du cas où les messages n’étaient ni acked ni nacked #59775 (Kseniia Sumarokova).
  • Correction de l’exécution des fonctions sur const et LowCardinality avec GROUP BY const pour l’analyseur #59986 (Azat Khuzhin).
  • Correction de la conversion d’échelle pour DateTime64 #60004 (Yarik Briukhovetskyi).
  • Correction de INSERT dans SQLite avec guillemet simple (en échappant les guillemets simples avec un guillemet au lieu d’un backslash) #60015 (Azat Khuzhin).
  • Correction de optimize_uniq_to_count, qui supprimait l’alias de colonne #60026 (Raúl Marín).
  • Correction de finished_mutations_to_keep=0 pour MergeTree (comme l’indique la documentation, 0 signifie tout conserver) #60031 (Azat Khuzhin).
  • Correction d’une exception possible lors du drop d’une table s3queue #60036 (Kseniia Sumarokova).
  • PartsSplitter : plages invalides pour la même part #60041 (Maksim Kita).
  • Utilisation de max_query_size du contexte dans DDLLogEntry au lieu de la valeur codée en dur 4096 #60083 (Kruglov Pavel).
  • Correction du formatage incohérent des requêtes #60095 (Alexey Milovidov).
  • Correction du formatage incohérent de explain dans les sous-requêtes #60102 (Alexey Milovidov).
  • Correction d’un plantage de cosineDistance avec Nullable #60150 (Raúl Marín).
  • Autorisation du transtypage des booléens dans leur représentation sous forme de chaîne en véritables booléens true #60160 (Robert Schulze).
  • Correction de system.s3queue_log #60166 (Kseniia Sumarokova).
  • Correction de arrayReduce avec un nom de fonction d’agrégation nullable #60188 (Raúl Marín).
  • Correction de l’exécution des actions pendant le filtrage préliminaire (PK, partition pruning) #60196 (Azat Khuzhin).
  • Masquer les informations sensibles dans s3queue #60233 (Kseniia Sumarokova).
  • Annulation de “Replace ORDER BY ALL by ORDER BY *#60248 (Robert Schulze).
  • Azure Blob Storage : correction des problèmes liés à l’endpoint et au préfixe #60251 (SmitaRKulkarni).
  • Correction des codes d’exception HTTP. #60252 (Austin Kothig).
  • Correction d’un bug dans le cache LRUResource (cache Hive) #60262 (shanfengp).
  • s3queue : correction d’un bug (corrige également le test instable test_storage_s3_queue/test.py::test_shards_distributed) #60282 (Kseniia Sumarokova).
  • Correction d’une utilisation de valeur non initialisée et d’un résultat invalide dans les fonctions de hachage avec IPv6 #60359 (Kruglov Pavel).
  • Forcer une nouvelle analyse si les répliques parallèles ont changé #60362 (Raúl Marín).
  • Correction de l’utilisation du type de métadonnées plain avec la nouvelle option de configuration des disques #60396 (Kseniia Sumarokova).
  • Ne pas autoriser la définition de max_parallel_replicas à 0, car cela n’a pas de sens #60430 (Kruglov Pavel).
  • Tentative de correction de l’erreur logique ‘Impossible de capturer la colonne, car son type est incompatible’ dans mapContainsKeyLike #60451 (Kruglov Pavel).
  • Correction de OptimizeDateOrDateTimeConverterWithPreimageVisitor avec des arguments nuls #60453 (Raúl Marín).
  • Tentative d’éviter le calcul des sous-requêtes scalaires pour CREATE TABLE. #60464 (Nikolai Kochetov).
  • Fusion #59674. #60470 (Alexey Milovidov).
  • Vérifier correctement les clés dans s3Cluster #60477 (Antonio Andelic).
  • Correction d’un interblocage lors de l’analyse en parallèle quand de nombreuses lignes sont ignorées en raison d’erreurs #60516 (Kruglov Pavel).
  • Fix_max_query_size_for_kql_compound_operator : #60534 (Yong Wang).
  • Correction de Keeper : ajout de timeouts lors de l’attente des journaux de commit #60544 (Antonio Andelic).
  • Réduire le nombre de lignes lues depuis system.numbers #60546 (JackyWoo).
  • Ne pas afficher d’indices numériques pour les types Date #60577 (Raúl Marín).
  • Correction de la lecture depuis MergeTree avec des fonctions non déterministes dans le filtre #60586 (Kruglov Pavel).
  • Correction d’une « logical error » due à un type de valeur invalide pour le paramètre de compatibilité #60596 (Kruglov Pavel).
  • Correction d’états de fonctions d’agrégation incohérents dans des clusters mixtes x86-64 / ARM #60610 (Harry Lee).
  • fix(prql): Gestionnaire de panic robuste #60615 (Maximilian Roos).
  • Correction de intDiv pour les arguments Decimal et Date #60672 (Yarik Briukhovetskyi).
  • Correction : expansion de la CTE dans la requête ALTER MODIFY #60682 (Yakov Olkhovskiy).
  • Correction de system.parts pour les moteurs de base de données non-Atomic/Ordinary (c.-à-d. Memory) #60689 (Azat Khuzhin).
  • Correction de “Invalid storage definition in metadata file” pour les vues paramétrées #60708 (Azat Khuzhin).
  • Correction d’un débordement de tampon dans CompressionCodecMultiple #60731 (Alexey Milovidov).
  • Suppression d’éléments incohérents de SQL/JSON #60738 (Alexey Milovidov).
  • Suppression d’une vérification sanitize incorrecte dans la fonction d’agrégation quantileGK #60740 (李扬).
  • Correction du bug insert-select + insert_deduplication_token en définissant le nombre de streams à 1 #60745 (Jordi Villar).
  • Empêcher la définition d’en-têtes de métadonnées personnalisés sur des opérations de multipart upload non prises en charge #60748 (Francisco J. Jurado Moreno).
  • Correction de toStartOfInterval #60763 (Andrey Zvonov).
  • Correction d’un crash dans arrayEnumerateRanked #60764 (Raúl Marín).
  • Correction d’un crash lors de l’utilisation de input() dans INSERT SELECT JOIN #60765 (Kruglov Pavel).
  • Correction d’un crash avec une valeur différente de allow_experimental_analyzer dans les sous-requêtes #60770 (Dmitry Novik).
  • Suppression de la récursion lors de la lecture depuis S3 #60849 (Antonio Andelic).
  • Correction d’un blocage possible en cas d’erreur dans HashedDictionaryParallelLoader #60926 (vdimir).
  • Correction de RESTORE asynchrone avec une base de données Replicated #60934 (Antonio Andelic).
  • Corrige un interblocage dans les insertions asynchrones vers les tables Log via le protocole natif #61055 (Anton Popov).
  • Corrige l’évaluation lazy de l’argument par défaut dans dictGetOrDefault pour RangeHashedDictionary #61196 (Kruglov Pavel).
  • Corrige plusieurs bogues dans groupArraySorted #61203 (Raúl Marín).
  • Corrige la reconfiguration de Keeper pour le binaire autonome #61233 (Antonio Andelic).
  • Corrige l’utilisation de session_token dans le moteur S3 #61234 (Kruglov Pavel).
  • Corrige un résultat potentiellement incorrect de la fonction d’agrégation uniqExact #61257 (Anton Popov).
  • Corrige des bogues dans SHOW DATABASE #61269 (Raúl Marín).
  • Corrige une erreur logique dans le stockage RabbitMQ avec des colonnes MATERIALIZED #61320 (vdimir).
  • Corrige CREATE OR REPLACE DICTIONARY #61356 (Vitaly Baranov).
  • Corrige la requête ATTACH avec external ON CLUSTER #61365 (Nikolay Degterinsky).
  • Corrige un problème de split du DAG d’actions #61458 (Raúl Marín).
  • Corrige la finalisation d’un RESTORE en échec #61466 (Vitaly Baranov).
  • Désactive correctement async_insert_use_adaptive_busy_timeout avec les paramètres de compatibilité #61468 (Raúl Marín).
  • Autorise la mise en file d’attente dans le pool de restauration #61475 (Nikita Taranov).
  • Corrige un bogue lors de la lecture de system.parts à l’aide d’un UUID (issue 61220). #61479 (Dan Wu).
  • Corrige un crash dans window view #61526 (Alexey Milovidov).
  • Corrige repeat avec des entiers non natifs #61527 (Antonio Andelic).
  • Corrige l’argument -s du client #61530 (Mikhail f. Shiryaev).
  • Corrige un crash dans arrayPartialReverseSort #61539 (Raúl Marín).
  • Corrige la recherche de chaîne avec une position constante #61547 (Antonio Andelic).
  • Corrige le fait qu’addDays provoque une erreur lorsqu’il est utilisé avec datetime64 #61561 (Shuai li).
  • Correction de system.part_log pour l’async insert avec déduplication #61620 (Antonio Andelic).
  • Correction du Set non prêt pour system.parts. #61666 (Nikolai Kochetov).
Dernière modification le 29 juin 2026