Passer au contenu principal

Table des matières

Release ClickHouse v24.12, 2024-12-19
Release ClickHouse v24.11, 2024-11-26
Release ClickHouse v24.10, 2024-10-31
Release ClickHouse v24.9, 2024-09-26
Release ClickHouse v24.8 LTS, 2024-08-20
Release ClickHouse v24.7, 2024-07-30
Release ClickHouse v24.6, 2024-07-01
Release ClickHouse v24.5, 2024-05-30
Release ClickHouse v24.4, 2024-04-30
Release ClickHouse v24.3 LTS, 2024-03-26
Release ClickHouse v24.2, 2024-02-29
Release ClickHouse v24.1, 2024-01-30
historique des modifications de 2023

Release ClickHouse 24.12, 2024-12-19. Présentation, Vidéo

Changement non rétrocompatible

  • Les fonctions greatest et least ignorent désormais les valeurs d’entrée NULL, alors qu’auparavant elles renvoyaient NULL si l’un des arguments était NULL. Par exemple, SELECT greatest(1, 2, NULL) renvoie désormais 2. Ce changement rend leur comportement compatible avec PostgreSQL, mais rompt en même temps la compatibilité avec MySQL, qui renvoie NULL. Pour conserver le comportement précédent, définissez le paramètre least_greatest_legacy_null_behavior (par défaut : false) sur true. #65519 #73344 (kevinyhzou).
  • Une nouvelle intégration MongoDB est désormais utilisée par défaut. Les utilisateurs qui souhaitent continuer à utiliser l’ancien driver MongoDB (basé sur le driver Poco) peuvent activer le paramètre serveur use_legacy_mongodb_integration. #73359 (Kirill Nikiforov.

Nouvelle fonctionnalité

  • Fait passer les types JSON/Dynamic/Variant des fonctionnalités expérimentales au statut bêta. #72294 (Pavel Kruglov). Nous avons également rétroporté vers la 24.11 tous les correctifs ainsi que ce changement.
  • L’évolution de schéma du format de stockage de données Iceberg offre à l’utilisateur de nombreuses possibilités pour modifier le schéma de sa table. L’ordre des colonnes, les noms de colonnes et les extensions simples de type peuvent être modifiés en interne. #69445 (Daniil Ivanik).
  • Intégration à Iceberg REST Catalog : un nouveau moteur de base de données, nommé Iceberg, qui branche l’ensemble du catalogue dans ClickHouse. #71542 (Kseniia Sumarokova).
  • Ajout d’un cache pour l’index primaire des tables MergeTree (peut être activé avec le paramètre de table use_primary_key_cache). Si le chargement paresseux et le cache sont activés pour l’index primaire, celui-ci sera chargé dans le cache à la demande (comme pour le mark cache) au lieu d’être conservé indéfiniment en mémoire. Ajout également du préchauffage de l’index primaire lors des insertions/fusions/récupérations de data parts et lors des redémarrages de table (peut être activé avec le paramètre prewarm_primary_key_cache). Cela permet de réduire l’utilisation mémoire pour les très grandes tables sur stockage partagé, et nous l’avons testé sur des tables contenant plus d’un quadrillion d’enregistrements. #72102 (Anton Popov). #72750 (Alexander Gololobov).
  • Implémentation de la commande SYSTEM LOAD PRIMARY KEY pour charger les index primaires de toutes les parts d’une table donnée, ou de toutes les tables si aucune table n’est spécifiée. Cela sera utile pour les benchmarks et pour éviter une latence supplémentaire lors de l’exécution des requêtes. #66252 #67733 (ZAWA_ll).
  • Ajout d’une requête permettant d’attacher des tables MergeTree comme ReplicatedMergeTree et inversement : ATTACH TABLE ... AS REPLICATED et ATTACH TABLE ... AS NOT REPLICATED. #65401 (Kirill).
  • Nouveau paramètre, http_response_headers, qui permet de personnaliser les en-têtes de réponse HTTP. Par exemple, vous pouvez indiquer au navigateur d’afficher une image stockée dans la base de données. Cela clôt #59620. #72656 (Alexey Milovidov).
  • Ajout de la fonction toUnixTimestamp64Second, qui convertit un DateTime64 en une valeur Int64 avec une précision fixe à la seconde, afin de prendre en charge le renvoi de valeurs négatives si la date est antérieure à l’époque Unix. #70597 (zhanglistar). #73146 (Robert Schulze).
  • Ajout du nouveau paramètre enforce_index_structure_match_on_partition_manipulation pour autoriser ATTACH lorsque l’ensemble des projections et des index secondaires de la table source est un sous-ensemble de celui de la table cible. Clôt #70602. #70603 (zwy991114).
  • Ajout de la syntaxe ALTER USER {ADD|MODIFY|DROP SETTING}, ALTER USER {ADD|DROP PROFILE}, et de même pour ALTER ROLE et ALTER PROFILE. Ainsi, au lieu de remplacer tout l’ensemble des paramètres, vous pouvez le modifier. #72050 (pufit).
  • Ajout de la fonction arrayPRAUC, qui calcule l’AUC (Area Under the Curve) de la courbe précision-rappel. #72073 (Emmanuel).
  • Ajout de la fonction indexOfAssumeSorted pour les types Array. Optimise la recherche dans le cas d’un tableau trié par ordre non décroissant. L’effet se fait sentir sur de très grands tableaux (plus de 100 000 éléments). #72517 (Eric Kurbanov).
  • Permet d’utiliser un délimiteur comme second argument facultatif pour la fonction d’agrégation groupConcat. #72540 (Yarik Briukhovetskyi).
  • La fonction translate prend désormais en charge la suppression de caractères si l’argument from contient plus de caractères que l’argument to. Exemple : SELECT translate('clickhouse', 'clickhouse', 'CLICK') renvoie désormais CLICK. #71441 (shuai.xu).

Fonctionnalités expérimentales

  • Nouveau paramètre MergeTree allow_experimental_reverse_key, qui active la prise en charge du tri décroissant dans les clés de tri de MergeTree. Cela est utile pour l’analyse de séries temporelles, en particulier pour les requêtes TopN. Exemple d’utilisation : ENGINE = MergeTree ORDER BY (time DESC, key)- ordre décroissant pour le champ time. #71095 (Amos Bird).

Amélioration des performances

  • Réordonnancement de JOIN. Ajout d’une option permettant de sélectionner le côté de la jointure qui servira de table interne (build) dans le query plan. Ce comportement est contrôlé par query_plan_join_swap_table, qui peut être défini sur auto. Dans ce mode, ClickHouse essaiera de choisir la table ayant le plus petit nombre de lignes. #71577 (Vladimir Cherkasov).
  • L’algorithme parallel_hash sera désormais utilisé (le cas échéant) lorsque le paramètre join_algorithm est défini sur default. Les deux alternatives précédentes (direct et hash) restent prises en compte lorsque parallel_hash ne peut pas être utilisé. #70788 (Nikita Taranov).
  • Ajout d’une option pour extraire les expressions communes des expressions WHERE et ON afin de réduire le nombre de tables de hachage utilisées lors des jointures. Cela est pertinent lorsque la condition JOIN ON contient des parties communes à l’intérieur de AND dans différentes branches de OR. Peut être activé avec optimize_extract_common_expressions = 1. #71537 (János Benjamin Antal).
  • Permet d’utiliser les indexes sur SELECT lorsqu’une colonne indexée est convertie par CAST en LowCardinality(String), ce qui peut se produire lorsqu’une requête s’exécute sur une Merge table avec certaines tables en String et d’autres en LowCardinality(String). #71598 (Yarik Briukhovetskyi).
  • Lors de l’exécution d’une requête avec parallel replicas et plan local activé, ne pas effectuer d’index analysis sur les workers. Le coordinator choisira les ranges à lire pour les workers en s’appuyant sur l’index analysis effectuée de son côté (sur l’initiator de la requête). Cela permet aux requêtes courtes avec parallel replicas d’avoir une latence aussi faible que les requêtes sur un seul nœud. #72109 (Igor Nikonov).
  • L’utilisation mémoire de clickhouse disks remove --recursive a été réduite pour les object storage disks. #67323 (Kirill).
  • Rétablissement de l’optimisation de lecture des subcolumns d’une seule colonne dans les compact parts issue de #57631. Elle avait été supprimée accidentellement. #72285 (Pavel Kruglov).
  • Accélération du tri des colonnes LowCardinality(String) par dévirtualisation des appels dans le comparateur. #72337 (Alexander Gololobov).
  • Optimisation de la fonction argMin/argMax pour certains data types simples. #72350 (alesapin).
  • Optimisation du verrouillage avec des verrous partagés dans le memory tracker afin de réduire la contention, ce qui améliore les performances sur les systèmes avec un très grand nombre de CPU. #72375 (Jiebin Sun).
  • Ajout d’un nouveau paramètre, use_async_executor_for_materialized_views. Utilise une exécution asynchrone et potentiellement multithread des requêtes de materialized view, ce qui peut accélérer le traitement des views lors des INSERT, mais consomme aussi davantage de mémoire. #72497 (alesapin).
  • Amélioration des performances de la désérialisation des états des aggregate functions (dans le data type AggregateFunction et dans les distributed queries). Légère amélioration des performances du parsing du format RowBinary. #72818 (Anton Popov).
  • Découpage des ranges en lecture avec parallel replicas selon l’ordre de la clé de la table afin de consommer moins de mémoire pendant la lecture. #72173 (JIaQi).
  • Accélère les insertions dans MergeTree lorsqu’une seule valeur de clé de partition est présente dans le lot inséré. #72348 (alesapin).
  • Implémente la création de tables en parallèle lors de la restauration à partir d’une sauvegarde. Avant cette PR, la commande RESTORE créait toujours les tables dans un seul thread, ce qui pouvait être lent pour les sauvegardes contenant de nombreuses tables. #72427 (Vitaly Baranov).
  • La suppression du mark cache peut prendre un certain temps lorsqu’il est volumineux. Si le mutex du Context est conservé pendant cette opération, cela bloque de nombreuses autres activités, au point qu’aucune nouvelle connexion client ne peut être établie avant sa libération. Or, il n’est pas réellement nécessaire de conserver ce mutex pour la synchronisation : il suffit d’avoir une référence locale au cache via un shared ptr. #72749 (Alexander Gololobov).

Amélioration

  • Suppression du paramètre allow_experimental_join_condition, ce qui autorise par défaut les conditions non-équi. #69910 (Vladimir Cherkasov).
  • Les paramètres de la configuration du serveur (users.xml) s’appliquent désormais aussi au client. Utile pour les paramètres de format, par ex. date_time_output_format. #71178 (Michael Kolupaev).
  • Bascule automatique de GROUP BY/ORDER BY sur disque en fonction de l’utilisation mémoire du serveur/de l’utilisateur. Contrôlée par les paramètres de requête max_bytes_ratio_before_external_group_by/max_bytes_ratio_before_external_sort. #71406 (Azat Khuzhin).
  • Ajout d’une nouvelle logique d’annulation : CancellationChecker vérifie les timeouts de chaque requête démarrée et les arrête une fois le délai atteint. #69880 (Yarik Briukhovetskyi).
  • Prise en charge de ALTER de Object vers JSON, ce qui permet de migrer facilement depuis le type Object déprécié. #71784 (Pavel Kruglov).
  • Autorisation des valeurs inconnues dans un Set qui ne sont pas présentes dans Enum. Corrige #72662. #72686 (zhanglistar).
  • Prise en charge de l’opérateur de recherche de chaînes (par ex. LIKE) pour le type de données Enum, implémente #72661. #72732 (zhanglistar).
  • Certaines requêtes ALTER USER dénuées de sens étaient acceptées. Corrige #71227. #71286 (Arthur Passos).
  • Prise en compte de prefer_locahost_replica lors de la construction du plan pour INSERT ... SELECT distribué. #72190 (filimonov).
  • Azure a enfreint la spécification Iceberg en étiquetant par erreur Iceberg v1 comme Iceberg v2. Le problème est décrit ici. Azure Iceberg Writer crée des fichiers de métadonnées Iceberg (ainsi que des fichiers manifestes) qui ne respectent pas les spécifications. Nous essayons désormais de lire les métadonnées au format Iceberg v1 avec le lecteur v2 (puisqu’elles sont écrites ainsi), et avons ajouté une erreur lorsqu’ils n’ont pas créé les champs correspondants dans un fichier manifeste. #72277 (Daniil Ivanik).
  • Il est désormais possible de CREATE MATERIALIZED VIEW avec UNION [ALL] dans la requête. Le comportement est le même que pour une vue matérialisée avec JOIN : seule la première table de l’expression SELECT servira de déclencheur pour l’insert, toutes les autres tables seront ignorées. Toutefois, s’il y a plusieurs références à la première table (par ex. un UNION avec elle-même), elles seront toutes traitées comme le bloc de données inséré. #72347 (alesapin).
  • Ajout de la validation de la requête source lorsque ClickHouse est utilisé comme source pour un dictionnaire. #72548 (Alexey Katsman).
  • Garantit que ClickHouse voit les modifications de ZooKeeper lors du rechargement de la configuration. #72593 (Azat Khuzhin).
  • Meilleure approximation de l’utilisation mémoire des marks en cache afin de réduire l’utilisation mémoire totale du cache. #72630 (Antonio Andelic).
  • Ajout d’une nouvelle métrique StartupScriptsExecutionState. Cette métrique peut prendre trois valeurs : 0 = les scripts de démarrage ne sont pas encore terminés, 1 = les scripts de démarrage se sont exécutés avec succès, 2 = les scripts de démarrage ont échoué. Cette métrique est nécessaire pour savoir si les scripts de démarrage s’exécutent correctement dans le cloud, en particulier après des mises à jour des configurations de base. #72637 (Miсhael Stetsyuk).
  • Ajout de la nouvelle métrique MergeTreeIndexGranularityInternalArraysTotalSize à system.metrics. Cette métrique est nécessaire pour identifier les instances avec d’énormes jeux de données susceptibles de la forte
  • Ajout de tentatives supplémentaires lors de la création d’une table répliquée. #72682 (Vitaly Baranov).
  • Ajout de total_bytes_with_inactive à system.tables pour comptabiliser le nombre total d’octets des parts inactives. #72690 (Kai Zhu).
  • Ajout des paramètres MergeTree à system.settings_changes. #72694 (Raúl Marín).
  • Prise en charge du type JSON dans la fonction notEmpty. #72741 (Pavel Kruglov).
  • Prise en charge de l’analyse de l’erreur GCS S3 AuthenticationRequired. #72753 (Vitaly Baranov).
  • Prise en charge du type Dynamic dans les fonctions ifNull et coalesce. #72772 (Pavel Kruglov).
  • Prise en charge de Dynamic dans les fonctions toFloat64/touInt32/etc. #72989 (Pavel Kruglov).
  • Ajout des paramètres de requête S3 http_max_fields, http_max_field_name_size, http_max_field_value_size, utilisés lors de l’analyse des réponses de l’API S3 pendant une sauvegarde ou une restauration. #72778 (Vitaly Baranov).
  • Suppression des métadonnées de table dans Keeper dans Storage S3(Azure)Queue uniquement après la suppression de la dernière table utilisant ces métadonnées. #72810 (Kseniia Sumarokova).
  • Ajout des profile events JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCount. #72842 (Vladimir Cherkasov).
  • Prise en charge des sous-colonnes dans la clé de tri MergeTree et les skip indexes. #72644 (Pavel Kruglov).

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

  • Corrige les possibles parties qui se chevauchent dans MergeTree (après l’échec d’une opération de déplacement d’une part vers le répertoire detached, possiblement en raison d’une opération sur l’object storage). #70476 (Azat Khuzhin).
  • Corrige la détection des erreurs lorsqu’un nom de table est trop long. Fournit un diagnostic indiquant la longueur maximale. Ajoute une nouvelle fonction getMaxTableNameLengthForDatabase. #70810 (Yarik Briukhovetskyi).
  • Corrige les processus zombies après un crash de clickhouse-library-bridge (ce programme permet d’exécuter des bibliothèques non sécurisées). #71301 (MikhailBurdukov).
  • Corrige l’erreur NoSuchKey lors du rollback d’une transaction lorsque la création d’un répertoire échoue pour le disk plain_rewritable. #71439 (Julia Kartseva).
  • Corrige la sérialisation des valeurs Dynamic dans les formats JSON Pretty. #71923 (Pavel Kruglov).
  • Ajoute le nom du format inféré à la requête CREATE dans les engines File/S3/URL/HDFS/Azure. Auparavant, le nom du format était réinféré à chaque redémarrage du server, et si les data files spécifiés étaient supprimés, cela provoquait des erreurs au démarrage du server. #72108 (Pavel Kruglov).
  • Corrige des bugs lors de l’utilisation d’une UDF dans une expression de join avec l’ancien analyzer. #72179 (Raúl Marín).
  • Corrige quelques petits bugs dans StorageObjectStorage. Nécessite d’activer use_hive_partitioning par défaut. #72185 (Yarik Briukhovetskyi).
  • Corrige un bug où min_age_to_force_merge_on_partition_only restait bloqué à tenter de fusionner en boucle la même partition, déjà fusionnée en une seule part, sans fusionner les partitions qui comportaient plusieurs parts. #72209 (Christoph Wurm).
  • Corrige un crash dans SimpleSquashingChunksTransform qui survenait dans de rares cas lors du traitement de colonnes sparse. #72226 (Vladimir Cherkasov).
  • Corrige une data race dans GraceHashJoin, qui pouvait entraîner l’absence de certaines rows dans la sortie du join. #72233 (Nikita Taranov).
  • Corrige les requêtes ALTER DELETE avec une colonne _block_number materialized (si le setting enable_block_number_column est activé). #72261 (Anton Popov).
  • Corrige une data race lorsque ColumnDynamic::dumpStructure() est appelé de manière concurrente, par exemple dans le constructeur de ConcurrentHashJoin. #72278 (Nikita Taranov).
  • Corrige un possible LOGICAL_ERROR avec des colonnes dupliquées dans ORDER BY ... WITH FILL. #72387 (Vladimir Cherkasov).
  • Corrige des incompatibilités de types dans plusieurs cas après l’application de optimize_functions_to_subcolumns. #72394 (Anton Popov).
  • Utilise AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE au lieu de AWS_CONTAINER_AUTHORIZATION_TOKEN_PATH. Corrige #71074. #72397 (Konstantin Bogdanov).
  • Corrige un échec lors de l’analyse des requêtes BACKUP DATABASE db EXCEPT TABLES db.table. #72429 (Konstantin Bogdanov).
  • N’autorise pas la création d’un Variant vide. #72454 (Pavel Kruglov).
  • Corrige la mise en forme incorrecte de result_part_path dans system.merges. #72567 (Konstantin Bogdanov).
  • Corrige l’analyse d’un motif glob ne comportant qu’un seul élément (comme {file}). #72572 (Konstantin Bogdanov).
  • Corrige la génération de requêtes pour le serveur follower dans le cas d’une requête distribuée avec ARRAY JOIN. Corrige #69276. #72608 (Dmitry Novik).
  • Corrige un bug lorsque DateTime64 IN DateTime64 ne renvoie rien. #72640 (Yarik Briukhovetskyi).
  • Corrige des métadonnées incohérentes lors de l’ajout d’une nouvelle réplique à une base de données Replicated contenant une table créée avec flatten_nested=0. #72685 (Alexander Tokmakov).
  • Corrige la configuration SSL avancée pour la communication interne de Keeper. #72730 (Antonio Andelic).
  • Corrige l’erreur “No such key” en mode unordered de S3Queue lorsque le paramètre tracked_files_limit est inférieur au rythme d’apparition des fichiers S3. #72738 (Kseniia Sumarokova).
  • Corrige l’exception levée dans RemoteQueryExecutor lorsqu’un utilisateur n’existe pas localement. #72759 (Andrey Zvonov).
  • Corrige les mutations avec la colonne matérialisée _block_number (si le paramètre enable_block_number_column est activé). #72854 (Anton Popov).
  • Corrige backup/restore avec un disque réinscriptible simple lorsqu’il y a des fichiers vides dans la sauvegarde. #72858 (Kseniia Sumarokova).
  • Annule correctement les inserts dans DistributedAsyncInsertDirectoryQueue. #72885 (Antonio Andelic).
  • Corrige un crash lors de l’analyse de données incorrectes dans des colonnes sparse (cela peut se produire lorsque le paramètre enable_parsing_to_custom_serialization est activé). #72891 (Anton Popov).
  • Corrige un crash potentiel lors de la restauration d’une sauvegarde. #72947 (Kseniia Sumarokova).
  • Corrige un bug dans la méthode JOIN parallel_hash qui peut apparaître lorsqu’une requête comporte une condition complexe dans la clause ON avec des filtres d’inégalité. #72993 (Nikita Taranov).
  • Utiliser les paramètres de format par défaut lors de l’analyse du JSON afin d’éviter une désérialisation incorrecte. #73043 (Pavel Kruglov).
  • Corriger un plantage dans les transactions avec un stockage non pris en charge. #73045 (Raúl Marín).
  • Corriger une possible surestimation du suivi de la mémoire (lorsque l’écart entre MemoryTracking et MemoryResident continuait de se creuser). #73081 (Azat Khuzhin).
  • Vérifier la présence de clés JSON dupliquées lors de l’analyse de Tuple. Auparavant, cela pouvait entraîner une erreur logique Invalid number of rows in Chunk pendant l’analyse. #73082 (Pavel Kruglov).

Amélioration de la compilation, des tests et du packaging

  • Tous les petits utilitaires auparavant stockés dans le dossier /utils et nécessitant une compilation manuelle depuis le code source font désormais partie du bundle principal de ClickHouse. Cela clôt : #72404. #72426 (Nikita Mikhaylov).
  • Annulation de la suppression de /etc/systemd/system/clickhouse-server.service introduite dans la version 22.3 #39323. #72259 (Mikhail f. Shiryaev).
  • Scinder les grandes unités de traduction pour éviter les échecs de compilation dus à des limitations de mémoire et de CPU. #72352 (Yakov Olkhovskiy).
  • OSX : compilation avec prise en charge d’ICU, ce qui active les collations, les conversions de jeux de caractères et d’autres fonctionnalités de localisation. #73083 (Raúl Marín).

Release ClickHouse 24.11, 2024-11-26. Présentation, Vidéo

changement non rétrocompatible

  • Suppression des tables système generate_series et generateSeries. Elles ont été ajoutées ici par erreur : #59390. #71091 (Alexey Milovidov).
  • Suppression de StorageExternalDistributed. Clôt #70600.#71176 (flynn).
  • Les moteurs de table Kafka, NATS et RabbitMQ relèvent désormais de leurs propres grants dans la hiérarchie SOURCES. Ajoutez les grants nécessaires à tout utilisateur de base de données autre que default qui crée des tables avec ces types de moteur. #71250 (Christoph Wurm).
  • Vérifiez la requête de mutation complète avant de l’exécuter (y compris les sous-requêtes). Cela évite de lancer accidentellement une requête invalide et d’accumuler des mutations mortes qui bloquent les mutations valides. #71300 (Christoph Wurm).
  • Renommage du paramètre du cache du système de fichiers skip_download_if_exceeds_query_cache en filesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit. #71578 (Kseniia Sumarokova).
  • Suppression de la prise en charge de Enum, ainsi que des arguments UInt128 et UInt256, dans deltaSumTimestamp. Suppression également de la prise en charge de Int8, UInt8, Int16 et UInt16 pour le deuxième argument (« timestamp ») de deltaSumTimestamp. #71790 (Alexey Milovidov).
  • Lors de la récupération directe de données depuis un dictionnaire à l’aide du stockage Dictionary, de la fonction de table dictionary ou d’un SELECT direct sur le dictionnaire lui-même, il suffit désormais de disposer de la permission SELECT ou de la permission dictGet sur le dictionnaire. Cela s’inscrit dans la continuité des tentatives précédentes visant à empêcher les contournements d’ACL : https://github.com/ClickHouse/ClickHouse/pull/57362 et https://github.com/ClickHouse/ClickHouse/pull/65359. Cela rend également cette dernière modification rétrocompatible. #72051 (Nikita Mikhaylov).

Fonctionnalité expérimentale

  • Implémentation de allow_feature_tier comme paramètre global pour désactiver toutes les fonctionnalités expérimentales / bêta. #71841 #71145 (Raúl Marín).
  • Correction d’une erreur possible No such file or directory due à des caractères spéciaux non échappés dans les fichiers des sous-colonnes JSON. #71182 (Pavel Kruglov).
  • Prise en charge de la modification de type de String vers JSON avec ALTER. Cette PR modifie également la sérialisation des types JSON et Dynamic vers la nouvelle version V2. L’ancienne version V1 peut toujours être utilisée en activant le paramètre merge_tree_use_v1_object_and_dynamic_serialization (utilisable pendant une mise à niveau afin de pouvoir effectuer un rollback de version sans problème). #70442 (Pavel Kruglov).
  • Implémentation d’un CAST simple de Map/Tuple/Object vers le nouveau JSON via sérialisation/désérialisation à partir d’une JSON string. #71320 (Pavel Kruglov).
  • Les types Variant/Dynamic ne sont plus autorisés par défaut dans ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY, car ils peuvent entraîner des résultats inattendus. #69731 (Pavel Kruglov).
  • Les types Dynamic/Variant sont interdits dans les fonctions min/max afin d’éviter toute confusion. #71761 (Pavel Kruglov).

Nouvelle fonctionnalité

  • Ajout de la syntaxe SQL pour décrire la gestion des workloads et des ressources. https://clickhouse.com/docs/operations/workload-scheduling. #69187 (Sergei Trifonov).
  • Un nouveau type de données, BFloat16, représente des nombres à virgule flottante sur 16 bits avec un exposant sur 8 bits, un bit de signe et une mantisse sur 7 bits. Cela clôt #44206. Cela clôt #49937. #64712 (Alexey Milovidov).
  • Ajout de la query CHECK GRANT pour vérifier si le privilège spécifié a été accordé à l’utilisateur/au rôle actuel et si la table/le colonne correspondant existe en mémoire. #68885 (Unalian).
  • Ajout des table functions iceberg[S3;HDFS;Azure]Cluster, deltaLakeCluster, hudiCluster. #72045 (Mikhail Artemenko).
  • Ajout de la possibilité de définir l’utilisateur/le mot de passe dans http_handlers (pour dynamic_query_handler/predefined_query_handler). #70725 (Azat Khuzhin).
  • Ajout de la prise en charge de la clause de staleness dans l’opérateur ORDER BY WITH FILL. #71151 (Mikhail Artemenko).
  • Chaque méthode d’authentification peut désormais avoir sa propre date d’expiration, celle-ci étant supprimée de l’entité utilisateur. #70090 (Arthur Passos).
  • Ajout des nouvelles fonctions parseDateTime64, parseDateTime64OrNull et parseDateTime64OrZero. Par rapport à la fonction existante parseDateTime (et ses variantes), elles renvoient une valeur de type DateTime64 au lieu de DateTime. #71581 (kevinyhzou).

Amélioration des performances

  • Utilisation mémoire optimisée pour les valeurs d’index granularity lorsque la granularity est constante pour une part. Ajout de la possibilité de toujours sélectionner une granularity constante pour une part (paramètre use_const_adaptive_granularity), ce qui garantit une optimisation mémoire systématique. Cela aide, dans les workloads volumineux (des milliers de milliards de rows sur un stockage partagé), à éviter l’augmentation continue de la mémoire utilisée par les metadata (valeurs d’index granularity) des data parts. #71786 (Anton Popov).
  • Désormais, nous ne copions plus les columns des blocks d’entrée pour join_algorithm = 'parallel_hash' lors de leur répartition entre les threads pour un traitement en parallèle. #67782 (Nikita Taranov).
  • Algorithme de merge Replacing optimisé pour les parts non intersecting. #70977 (Anton Popov).
  • Ne pas lister les detached parts des disks readonly et write-once dans les metrics ni dans system.detached_parts. #71086 (Alexey Milovidov).
  • Ne pas calculer les heavy asynchronous metrics par défaut. La fonctionnalité a été introduite dans #40332, mais il n’est pas souhaitable d’avoir une tâche d’arrière-plan lourde nécessaire pour un seul client. #71087 (Alexey Milovidov).
  • Pour les disks plain_rewritable : ne pas appeler l’API de l’object storage lors de l’énumération des répertoires, car cela peut être coûteux. À la place, stocker en mémoire la liste des noms de fichiers. Le compromis est un temps d’initial load plus long ainsi qu’une consommation mémoire supplémentaire pour stocker ces noms de fichiers. #70823 (Julia Kartseva).
  • Amélioration des performances et de la précision de l’intervalle de collecte de system.query_metric_log en réduisant la région critique. #71473 (Pablo Marcos).
  • Optimisation de la lecture dans l’ordre via la génération de rows virtuelles, afin de lire moins de données pendant le tri par merge, ce qui est particulièrement utile lorsque plusieurs parts existent. #62125 (Shichao Jin).
  • Ajout du server setting async_load_system_database, qui permet au server de démarrer avec une system database non entièrement chargée. Cela permet de démarrer ClickHouse plus rapidement lorsqu’il existe de nombreuses system tables. #69847 (Sergei Trifonov).
  • Ajout du parameter --threads à clickhouse-compressor, qui permet de compresser les données en parallèle. #70860 (Alexey Milovidov).
  • Ajout d’un paramètre prewarm_mark_cache qui active le loading des marks dans le mark cache lors des inserts, des merges, des fetches de parts et au démarrage de la table. #71053 (Anton Popov).
  • Ajustement de la taille du tableau index_granularity en mémoire afin de réduire l’empreinte mémoire de la famille de table engines MergeTree. #71595 (alesapin).
  • Désactivation du paramètre boundary_alignment du filesystem cache pour les lectures non effectuées depuis un disk, ce qui améliore les performances de lecture des fichiers distants standalone avec caching. #71827 (Kseniia Sumarokova).
  • Les queries comme SELECT * FROM table LIMIT ... chargeaient auparavant les indexes des parts même lorsqu’ils n’étaient pas utilisés. #71866 (Alexander Gololobov).
  • Activer parallel_replicas_local_plan par défaut. L’élaboration d’un plan local complet sur l’initiateur de requête améliore les performances des répliques parallèles tout en réduisant la consommation de ressources, et permet d’appliquer davantage d’optimisations de requête. #70171 (Igor Nikonov).

Amélioration

  • Permet d’utiliser clickhouse avec un argument de fichier, par exemple ch queries.sql. #71589 (Raúl Marín).
  • Le format Vertical (qui est également activé lorsque vous terminez votre requête par \G) bénéficie désormais des fonctionnalités des Pretty formats, telles que : - la mise en évidence des séparateurs de milliers dans les nombres ; - l’affichage d’un indicateur numérique plus lisible. #71630 (Alexey Milovidov).
  • Propage les rôles d’utilisateurs externes de l’initiateur de la requête vers les autres nœuds du cluster. Utile lorsque seul l’initiateur a accès à l’authentificateur externe (comme LDAP). #70332 (Andrey Zvonov).
  • Ajout des alias anyRespectNulls, firstValueRespectNulls et anyValueRespectNulls pour la fonction d’agrégation any. Ajout également des alias anyLastRespectNulls et lastValueRespectNulls pour la fonction d’agrégation anyLast. Cela permet d’utiliser une syntaxe plus naturelle, uniquement en camel case, plutôt qu’une syntaxe mixte camel case/underscore, par exemple : SELECT anyLastRespectNullsStateIf au lieu de anyLast_respect_nullsStateIf. #71403 (Peter Nguyen).
  • Ajout du paramètre de configuration date_time_utc, permettant au formatage des journaux JSON de prendre en charge la date et l’heure UTC au format RFC 3339/ISO8601. #71560 (Ali).
  • Ajout d’un nouveau type de header pour les S3 endpoints destiné à l’authentification des utilisateurs (access_header). Cela permet de récupérer un header d’accès avec la priorité la plus faible, qui sera remplacé par access_key_id provenant de toute autre source (par exemple, un schéma de table ou une named collection). #71011 (MikhailBurdukov).
  • Les fonctions d’ordre supérieur avec des Arrays constants et des arguments capturés constants renverront des constantes. #58400 (Alexey Milovidov).
  • Les noms des étapes du query plan (EXPLAIN PLAN json=1) et les noms des processors du pipeline (EXPLAIN PIPELINE compact=0,graph=1) ont désormais un identifiant unique comme suffixe. Cela permet de faire correspondre la sortie du Profiler des processors et les traces OpenTelemetry avec la sortie d’EXPLAIN. #63518 (qhsong).
  • Ajout d’une option permettant de vérifier si l’objet existe après son écriture dans Azure Blob Storage, contrôlée par le paramètre check_objects_after_upload. #64847 (Smita Kulkarni).
  • Utilise la database Atomic par défaut dans clickhouse-local. Traite les points 1 et 5 de #50647. Ferme #44817. #68024 (Alexey Milovidov).
  • Les Exceptions interrompent le protocole HTTP afin d’alerter le client en cas d’erreur. #68800 (Sema Checherinda).
  • Signale les hôtes exécutant des requêtes DDL distribuées en créant replica_dir et marque les répliques actives dans DDLWorker. #69658 (tuanpach).
  • Attend uniquement les répliques actives pour les requêtes de database ON CLUSTER si distributed_ddl_output_mode est défini sur *_only_active. #69660 (tuanpach).
  • Meilleure gestion des erreurs et annulation des backups et restores ON CLUSTER : - Si un backup ou un restore échoue sur un hôte, il sera automatiquement annulé sur les autres hôtes - Aucune erreur incohérente ne doit être produite parce que certains hôtes ont échoué tandis que d’autres continuaient leur traitement - Si un backup ou un restore est annulé sur un hôte, il sera automatiquement annulé sur les autres hôtes - Correction de problèmes avec test_disallow_concurrency : la désactivation de la concurrence doit désormais mieux fonctionner - Les backups et restores sont maintenant beaucoup plus résistants aux déconnexions de ZooKeeper. #70027 (Vitaly Baranov).
  • Prise en charge de ALTER TABLE ... MODIFY/RESET SETTING ... pour certains settings du stockage S3Queue. #70811 (Kseniia Sumarokova).
  • Ajout de la possibilité de recharger les certificats client de la même manière que les certificats server. #70997 (Roman Antonov).
  • La taille de l’historique client est désormais configurable, et sa taille par défaut a été augmentée. #71014 (Jiří Kozlovský).
  • Prise en charge des types booléens par le lecteur natif Parquet. #71055 (Arthur Passos).
  • Réessayer davantage d’erreurs lors des interactions avec S3, telles que “Malformed message”. #71088 (Alexey Milovidov).
  • Réduction du niveau de log de certains messages concernant S3. #71090 (Alexey Milovidov).
  • Prise en charge de l’écriture de fichiers HDFS dont le nom contient des espaces. #71105 (exmy).
  • Ajout de settings limitant le nombre de replicated tables, dictionaries et views. #71179 (Kirill).
  • Utiliser AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE au lieu de AWS_CONTAINER_AUTHORIZATION_TOKEN si le premier est disponible. Corrige #71074. #71269 (Konstantin Bogdanov).
  • Suppression de la création du nœud ZooKeeper metadata_version du thread de redémarrage de ReplicatedMergeTree. Le seul scénario dans lequel ce nœud doit être créé est celui où l’utilisateur est passé directement d’une version antérieure à 20.4 à une version postérieure à 24.10. ClickHouse ne prend pas en charge les upgrades couvrant plus d’un an ; nous devons donc lever une exception et demander à l’utilisateur de mettre à jour progressivement, au lieu de créer le nœud. #71385 (Miсhael Stetsyuk).
  • Ajout des dashboards par hôte Overview (host) et Cloud overview (host) au dashboard avancé. #71422 (alesapin).
  • clickhouse-local utilise implicit SELECT par défaut, ce qui permet de l’utiliser comme calculatrice. Amélioration de la coloration syntaxique pour le mode implicit SELECT. #71620 (Alexey Milovidov).
  • Les applications en ligne de commande mettront la syntaxe en évidence même pour les multi-statements. #71622 (Alexey Milovidov).
  • Les applications en ligne de commande renverront désormais des codes de sortie non nuls en cas d’erreur. Dans les versions précédentes, l’application disks renvoyait zéro en cas d’erreur, et les autres applications renvoyaient zéro pour les erreurs 256 (PARTITION_ALREADY_EXISTS) et 512 (SET_NON_GRANTED_ROLE). #71623 (Alexey Milovidov).
  • Lorsque l’utilisateur/le groupe est indiqué sous forme d’ID, clickhouse su échoue. Ce correctif lui permet également d’accepter UID:GID. #71626 (Mikhail f. Shiryaev).
  • Permet de désactiver l’augmentation de la taille du buffer mémoire pour le cache du système de fichiers via le paramètre filesystem_cache_prefer_bigger_buffer_size. #71640 (Kseniia Sumarokova).
  • Ajout d’un paramètre distinct, background_download_max_file_segment_size, pour la taille maximale des segments de fichier téléchargés en arrière-plan dans le cache du système de fichiers. #71648 (Kseniia Sumarokova).
  • L’analyse du type JSON est légèrement améliorée : si le block actuel pour le JSON path contient des valeurs de plusieurs types, le système essaie de choisir le type le plus approprié en testant les types selon un ordre spécial de best effort. #71785 (Pavel Kruglov).
  • Auparavant, la lecture depuis system.asynchronous_metrics attendait la fin d’une mise à jour concurrente. Cela peut prendre beaucoup de temps si le système est fortement chargé. Avec ce changement, les valeurs collectées précédemment peuvent toujours être lues. #71798 (Alexander Gololobov).
  • S3Queue et AzureQueue : définir polling_max_timeout_ms sur 10 minutes et polling_backoff_ms sur 30 secondes. #71817 (Kseniia Sumarokova).
  • Met à jour HostResolver trois fois sur une période d’history. #71863 (Sema Checherinda).
  • Ajout, sur la page HTML Advanced dashboard, d’un sélecteur déroulant pour le dashboard à partir de la table system.dashboards. #72081 (Sergei Trifonov).
  • Vérifie la présence de la base de données par défaut après l’authentification. Corrige #71097. #71140 (Konstantin Bogdanov).

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

  • Les parties dédupliquées lors de la requête ATTACH PART ne restent plus bloquées avec le préfixe attaching_. #65636 (Kirill).
  • Correction d’un bug où DateTime64 perdait en précision avec la fonction IN. #67230 (Yarik Briukhovetskyi).
  • Corrige une possible erreur logique lors de l’utilisation de fonctions avec IGNORE/RESPECT NULLS dans ORDER BY ... WITH FILL, clôt #57609. #68234 (Vladimir Cherkasov).
  • Corrige de rares erreurs logiques dans les insertions asynchrones au format Native lorsque la memory limit est atteinte. #68965 (Anton Popov).
  • Corrige COMMENT dans CREATE TABLE pour une colonne EPHEMERAL. #70458 (Yakov Olkhovskiy).
  • Corrige une erreur logique dans JSONExtract avec LowCardinality(Nullable). #70549 (Pavel Kruglov).
  • Autorise system drop replica zkpath lorsqu’il existe une autre replica avec le même chemin zk. #70642 (MikhailBurdukov).
  • Corrige un crash et une fuite de mémoire dans AggregateFunctionGroupArraySorted. #70820 (Michael Kolupaev).
  • Ajoute la possibilité de remplacer Content-Type via les headers utilisateur dans l’URL engine. #70859 (Artem Iurin).
  • Corrige l’erreur logique dans StorageS3Queue “Cannot create a persistent node in /processed since it already exists”. #70984 (Kseniia Sumarokova).
  • Corrige le fait que les sessions nommées ne se fermaient pas et restaient bloquées indéfiniment dans certaines circonstances. #70998 (Márcio Martins).
  • Corrige le bug qui ne prenait pas en compte la colonne _row_exists dans l’option de reconstruction de la projection lightweight delete. #71089 (Shichao Jin).
  • Corrige le problème AT_* is out of range lors de l’exécution sur Oracle Linux UEK 6.10. #71109 (Örjan Fors).
  • Corrige une valeur incorrecte dans system.query_metric_log en raison d’une race condition inattendue. #71124 (Pablo Marcos).
  • Corrige le nom incorrect de la fonction d’agrégation quantileExactWeightedInterpolated. Le bug a été introduit dans https://github.com/ClickHouse/ClickHouse/pull/69619. cc @Algunenano. #71168 (李扬).
  • Corrige l’exception bad_weak_ptr avec Dynamic lors de la comparaison de fonctions. #71183 (Pavel Kruglov).
  • Vérifie que le fichier 7z lu se trouve sur une machine locale. #71184 (Daniil Ivanik).
  • Correction d’un problème où les paramètres de format étaient ignorés dans le format Native via HTTP et avec les insertions asynchrones. #71193 (Pavel Kruglov).
  • Les requêtes SELECT exécutées avec le paramètre use_query_cache = 1 ne sont plus rejetées si le nom d’une table système apparaît comme littéral ; par exemple, SELECT * FROM users WHERE name = 'system.metrics' SETTINGS use_query_cache = true; fonctionne désormais. #71254 (Robert Schulze).
  • Correction d’un bug entraînant une augmentation de l’utilisation mémoire si enable_filesystem_cache=1, mais que le disque dans la configuration de stockage n’avait aucune configuration de cache. #71261 (Kseniia Sumarokova).
  • Correction d’une possible erreur “Cannot read all data” lors de la désérialisation d’un dictionnaire LowCardinality à partir d’une colonne Dynamic. #71299 (Pavel Kruglov).
  • Correction d’un nettoyage incomplet du format de sortie parallèle dans le client. #71304 (Raúl Marín).
  • Ajout du déséchappement manquant dans les collections nommées. Sans ce correctif, clickhouse-server ne peut pas démarrer. #71308 (MikhailBurdukov).
  • Correction des insertions asynchrones avec des blocs vides via le protocole natif. #71312 (Anton Popov).
  • Correction d’un formatage AST incohérent lors de l’octroi de privilèges génériques avec joker incorrects #71309. #71332 (pufit).
  • Ajout de try/catch aux destructeurs des data parts pour éviter std::terminate. #71364 (alesapin).
  • Vérification des types suspects et expérimentaux dans les indications de type du type JSON. #71369 (Pavel Kruglov).
  • Démarrage du worker thread mémoire également sur les OS non Linux (corrige #71051). #71384 (Alexandre Snarskii).
  • Correction de l’erreur Invalid number of rows in Chunk avec la colonne Variant. #71388 (Pavel Kruglov).
  • Correction de l’erreur column “attgenerated” does not exist pour les anciennes versions de PostgreSQL, corrige #60651. #71396 (0xMihalich).
  • Pour éviter d’inonder les journaux du serveur, les tentatives d’authentification échouées sont désormais consignées au niveau DEBUG au lieu de ERROR. #71405 (Robert Schulze).
  • Correction d’un crash dans la fonction de table mongodb lors du passage d’arguments incorrects (par ex. NULL). #71426 (Vladimir Cherkasov).
  • Correction d’un crash avec optimize_rewrite_array_exists_to_has. #71432 (Raúl Marín).
  • Correction de l’utilisation du paramètre max_insert_delayed_streams_for_parallel_write pour les insertions. Auparavant, il ne fonctionnait pas correctement, ce qui pouvait entraîner une forte utilisation de la mémoire lors d’insertions écrivant des données dans plusieurs partitions. #71474 (Anton Popov).
  • Correction d’une erreur possible, Argument for function must be constant (ancien analyseur), lorsque arrayJoin peut apparemment apparaître dans la condition WHERE. Régression après https://github.com/ClickHouse/ClickHouse/pull/65414. #71476 (Nikolai Kochetov).
  • Évite un plantage dans SortCursor avec 0 colonne (ancien analyseur). #71494 (Raúl Marín).
  • Correction d’une valeur Date32 hors plage causée par des données ORC non initialisées. Pour plus de détails, consultez https://github.com/apache/incubator-gluten/issues/7823. #71500 (李扬).
  • Correction du calcul de la taille d’une colonne dans une wide part pour les types Dynamic et JSON. #71526 (Pavel Kruglov).
  • Correction de l’analyseur lorsqu’une requête à l’intérieur d’une vue matérialisée utilise IN avec une CTE. Clôt #65598. #71538 (Maksim Kita).
  • Évite un plantage lors de l’utilisation d’une UDF dans une contrainte. #71541 (Raúl Marín).
  • Renvoie 0 ou le caractère par défaut au lieu de lever une erreur dans les fonctions bitShift en cas de dépassement des limites. #71580 (Pablo Marcos).
  • Correction de plantages du serveur lors de l’utilisation d’une vue matérialisée avec certains moteurs. #71593 (Pervakov Grigorii).
  • Un ARRAY JOIN avec une structure de données imbriquée contenant un alias vers un tableau constant entraînait un déréférencement de pointeur nul. Clôt #71677. #71678 (Alexey Milovidov).
  • Correction de LOGICAL_ERROR lors de l’exécution de ALTER avec un tuple vide. Corrige #71647. #71679 (Amos Bird).
  • Ne transformez pas l’ensemble constant dans les prédicats sur les colonnes de partition dans le cas de l’opérateur NOT IN. #71695 (Eduard Karacharov).
  • Correction du message de journal en cas d’échec du script d’initialisation Docker pour le rendre plus clair. #71734 (Андрей).
  • Correction de CAST de LowCardinality(Nullable) vers Dynamic. Auparavant, cela pouvait entraîner l’erreur Bad cast from type DB::ColumnVector<int> to DB::ColumnNullable. #71742 (Pavel Kruglov).
  • Correction d’une exception pour toDayOfWeek dans une condition WHERE avec une clé primaire de type DateTime64. #71849 (Yakov Olkhovskiy).
  • Correction du remplissage des valeurs par défaut après le parsing dans des colonnes sparse. #71854 (Anton Popov).
  • Correction d’une erreur de la fonction GROUPING lorsque l’entrée est un ALIAS sur une table distribuée, clôt #68602. #71855 (Vladimir Cherkasov).
  • Correction d’un plantage possible lors de l’utilisation de allow_experimental_join_condition, clôt #71693. #71857 (Vladimir Cherkasov).
  • Correction des instructions SELECT utilisant la clause WITH TIES, qui pouvaient ne pas renvoyer suffisamment de lignes. #71886 (wxybear).
  • Correction de l’exception TOO_LARGE_ARRAY_SIZE déclenchée lorsqu’une colonne issue de l’évaluation de arrayWithConstant était considérée à tort comme dépassant la limite de taille du tableau. #71894 (Udi).
  • clickhouse-benchmark signalait des métriques erronées pour les requêtes durant plus d’une seconde. #71898 (Alexey Milovidov).
  • Correction d’une data race entre l’indicateur de progression et la table de progression dans clickhouse-client. Ce problème est visible lorsque FROM INFILE est utilisé. Interception des frappes clavier pendant les requêtes INSERT pour basculer l’affichage de la table de progression. #71901 (Julia Kartseva).
  • Utilisation de keepers auxiliaires pour l’autodiscovery du cluster. #71911 (Anton Ivashkin).
  • Correction de la colonne rows_processed dans system.s3/azure_queue_log, cassée en 24.6. Clôt #69975. #71946 (Kseniia Sumarokova).
  • Correction d’un cas où les fonctions s3/s3Cluster pouvaient renvoyer un résultat incomplet ou lever une exception. Cela se produisait lors de l’utilisation d’un glob pattern dans l’URI s3 (par exemple pattern/*) et lorsqu’un objet vide avec la key pattern/ existait (de tels objets sont créés automatiquement par la S3 Console). De plus, la valeur par défaut du paramètre s3_skip_empty_files est passée de false à true. #71947 (Nikita Taranov).
  • Correction d’un plantage dans la coloration syntaxique de clickhouse-client. Clôt #71864. #71949 (Nikolay Degterinsky).
  • Correction de l’erreur Illegal type pour les tables MergeTree avec une fonction monotone binaire dans ORDER BY lorsque le premier argument est constant. Corrige #71941. #71966 (Nikolai Kochetov).
  • Autoriser uniquement les requêtes SELECT dans EXPLAIN AST lorsqu’il est utilisé à l’intérieur d’une sous-requête. Les autres types de requêtes entraînent une logical error : ‘Bad cast from type DB::ASTCreateQuery to DB::ASTSelectWithUnionQuery’ ou Inconsistent AST formatting. #71982 (Pavel Kruglov).
  • Lors de l’insertion d’un enregistrement avec clickhouse-client, le client lit les descriptions de colonnes depuis le serveur. Mais un bug faisait que nous écrivions les descriptions dans le mauvais ordre ; l’ordre correct est [statistics, ttl, settings]. #71991 (Han Fei).
  • Corrige la mise en forme des commandes ALTER MOVE PARTITION ... TO TABLE ... lorsque format_alter_commands_with_parentheses est activé. #72080 (János Benjamin Antal).
  • Corrige les jointures RIGHT / FULL dans les requêtes avec des répliques parallèles. Désormais, les jointures RIGHT peuvent être exécutées avec des répliques parallèles (la lecture de la table de droite est répartie). Les jointures FULL ne peuvent pas être parallélisées entre les nœuds et sont exécutées localement. #71162 (Igor Nikonov).
  • Corrige le problème où ClickHouse, dans des conteneurs Docker, affichait “get_mempolicy: Operation not permitted” sur stderr en raison d’appels système restreints. #70900 (filimonov).
  • Corrige l’enregistrement metadata_version dans ZooKeeper dans le thread de redémarrage plutôt que dans le thread d’Attach. #70297 (Miсhael Stetsyuk).
  • Il s’agit d’un correctif pour la réplication “zero-copy”, qui n’est pas prise en charge et sera entièrement supprimée. Ne supprime pas de blob lorsque des nœuds l’utilisent dans ReplicatedMergeTree avec la réplication zero-copy. #71186 (Antonio Andelic).
  • Il s’agit d’un correctif pour la réplication “zero-copy”, qui n’est pas prise en charge et sera entièrement supprimée. Acquisition d’un verrou partagé zero-copy avant le déplacement d’une part vers un disque zero-copy afin d’éviter une éventuelle perte de données si Keeper n’est pas disponible. #71845 (Aleksei Filatov).

Release ClickHouse 24.10, 2024-10-31. Présentation, Vidéo

Changement non rétrocompatible

  • Il est désormais possible d’écrire 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. Le comportement change lorsqu’une requête contient deux fois la clause SETTINGS dans une séquence. La clause SETTINGS la plus proche est prioritaire pour la sous-requête correspondante. Dans les versions précédentes, la clause SETTINGS la plus externe pouvait primer sur la clause interne. #68614 (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).
  • Suppression de la bibliothèque idxd-config, dont la licence est incompatible. Cela supprime également le codec expérimental Intel DeflateQPL. #70987 (Alexey Milovidov).

Nouvelle fonctionnalité

  • Permet d’accorder l’accès aux préfixes génériques avec joker. GRANT SELECT ON db.table_pefix_* TO user. #65311 (pufit).
  • Si vous appuyez sur la barre d’espace pendant l’exécution d’une requête, le client affichera un tableau en temps réel avec des métriques détaillées. Vous pouvez l’activer globalement avec la nouvelle option --progress-table dans clickhouse-client ; une nouvelle option --enable-progress-table-toggle est associée à --progress-table et permet d’activer ou de désactiver l’affichage du tableau de progression en appuyant sur la touche de contrôle (Espace). #63689 (Maria Khristenko), #70423 (Julia Kartseva).
  • Permet de mettre en cache les fichiers lus pour les table engines de stockage objet et les data lakes en utilisant le hash de l’ETag + le chemin du fichier comme clé de cache. #70135 (Kseniia Sumarokova).
  • Prend en charge la création d’une table à partir d’une requête : CREATE TABLE ... CLONE AS .... Cela clone le schéma de la table source, puis attache toutes les partitions à la table nouvellement créée. Cette fonctionnalité n’est prise en charge qu’avec les tables de la famille MergeTree. Closes #65015. #69091 (tuanpach).
  • Ajout d’une nouvelle system table, system.query_metric_log, qui contient l’historique des valeurs de mémoire et de métriques de la table système system.events pour chaque requête, périodiquement écrites sur disque. #66532 (Pablo Marcos).
  • Une simple requête SELECT peut être écrite avec un SELECT implicite pour permettre des expressions de type calculatrice, par exemple ch "1 + 2". Ce comportement est contrôlé par un nouveau setting, implicit_select. #68502 (Alexey Milovidov).
  • Prise en charge du mode --copy pour clickhouse local, comme raccourci pour la conversion de format #68503. #68583 (Denis Hananein).
  • Ajout d’une page HTML intégrée pour visualiser les merges, disponible au chemin /merges. #70821 (Alexey Milovidov).
  • Ajout de la prise en charge de la fonction arrayUnion. #68989 (Peter Nguyen).
  • Permet les alias SQL paramétrés. #50665 (Anton Kozlov).
  • Nouvelle fonction d’agrégation quantileExactWeightedInterpolated, 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. Cela vise la compatibilité avec Spark. #69619 (李扬).
  • Nouvelle fonction arrayElementOrNull. Elle renvoie NULL si l’index du tableau est hors limites ou si une clé de Map est introuvable. #69646 (李扬).
  • Permet aux utilisateurs de spécifier des expressions régulières via les nouveaux champs message_regexp et message_regexp_negative dans le fichier config.xml afin de filtrer la journalisation. La journalisation s’applique au texte formaté non coloré pour offrir l’expérience développeur la plus intuitive. #69657 (Peter Nguyen).
  • 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. #70087 (Dergousov Maxim).
  • Prise en charge de la lecture des tables Iceberg sur HDFS. #70268 (flynn).
  • Prise en charge des CTE sous la forme WITH ... INSERT, alors qu’auparavant seule la forme INSERT ... WITH ... était prise en charge. #70593 (Shichao Jin).
  • Intégration MongoDB : prise en charge de tous les types MongoDB, des clauses WHERE et ORDER BY côté MongoDB, et restriction des expressions non prises en charge par MongoDB. Notez que la nouvelle intégration est désactivée par défaut ; pour l’utiliser, définissez <use_legacy_mongodb_integration> sur false dans la configuration du serveur. #63279 (Kirill Nikiforov).
  • Une nouvelle fonction, getSettingOrDefault, a été ajoutée pour renvoyer la valeur par défaut et éviter une exception si un paramètre personnalisé est introuvable dans le profil actuel. #69917 (Shankar).

Fonctionnalité expérimentale

  • 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).
  • Les répliques parallèles passent du statut expérimental au statut bêta. Les paramètres qui contrôlent le comportement des algorithmes des répliques parallèles ont été retravaillés. En bref : ClickHouse dispose de quatre algorithmes différents de lecture parallèle impliquant plusieurs répliques, ce qui se reflète dans le paramètre parallel_replicas_mode, dont la valeur par défaut est read_tasks. De plus, le paramètre de bascule enable_parallel_replicas a été ajouté. #63151 (Alexey Milovidov), (Nikita Mikhaylov).
  • Prise en charge du type Dynamic dans la plupart des fonctions, en les exécutant sur les types internes de Dynamic. #69691 (Pavel Kruglov).
  • Permet de lire/écrire le type JSON comme une 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 unique colonne String au format Native. Pour la sortie, utilisez le paramètre output_format_native_write_json_as_string. Pour l’entrée, utilisez la version de sérialisation 1 avant les données de la colonne. #70312 (Pavel Kruglov).
  • Introduction d’un mode spécial (expérimental) de sélecteur de fusion pour les tables MergeTree, qui le rend plus agressif pour les partitions proches de la limite du nombre de parts. Il est contrôlé par le paramètre merge_selector_use_blurry_base au niveau de MergeTree. #70645 (Nikita Mikhaylov).
  • Implémentation d’une sérialisation/désérialisation générique entre Union d’Avro et les types Variant de ClickHouse. Résout #69713. #69712 (Jiří Kozlovský).

Amélioration des performances

  • Refactorisation de IDisk et IObjectStorage pour améliorer les performances. Les tables des stockages objet plain et plain_rewritable s’initialiseront plus rapidement. #68146 (Alexey Milovidov, Julia Kartseva). Ne plus appeler l’API LIST du stockage objet pour déterminer si un fichier ou un répertoire existe sur le disk plain rewritable, car cela peut entraîner des coûts inutiles. #70852 (Julia Kartseva). Réduction du nombre de requêtes HEAD API vers le stockage objet sur le disk plain_rewritable. #70915 (Julia Kartseva).
  • Ajout de la possibilité de parser directement les données dans des colonnes éparses. #69828 (Anton Popov).
  • Amélioration des performances de parsing des formats comportant un grand nombre de valeurs manquantes (par ex. JSONEachRow). #69875 (Anton Popov).
  • Prise en charge de la lecture en parallèle des row groups Parquet et du prefetch des row groups en mode monothread. #69862 (LiuNeng).
  • Prise en charge de l’index MinMax pour pointInPolygon. #62085 (JackyWoo).
  • Utilisation de bloom filters lors de la lecture de fichiers Parquet. #62966 (Arthur Passos).
  • Renommage des parts sans verrou afin d’éviter qu’INSERT n’affecte SELECT (à cause du verrou sur les parts) (dans des conditions normales avec fsync_part_directory, le QPS de SELECT avec INSERT en parallèle a doublé, et sous forte charge l’effet est encore plus marqué). À noter : cela ne concerne pour l’instant que ReplicatedMergeTree. #64955 (Azat Khuzhin).
  • Respect de ttl_only_drop_parts avec materialize ttl ; seules les colonnes nécessaires sont lues pour recalculer le TTL et supprimer les parts en les remplaçant par une part vide. #65488 (Andrey Zvonov).
  • Optimisation de la création de threads dans le ThreadPool afin de minimiser la contention sur les verrous. La création des threads s’effectue désormais en dehors de la section critique afin d’éviter les retards dans l’ordonnancement des tâches et la gestion des threads sous forte charge. ClickHouse est ainsi nettement plus réactif sous forte charge concurrente. #68694 (filimonov).
  • Activation de la lecture des colonnes de type chaîne LowCardinality depuis ORC. #69481 (李扬).
  • Utilisation de LowCardinality pour ProfileEvents dans les logs système tels que part_log, query_views_log, filesystem_cache_log. #70152 (Alexey Milovidov).
  • Amélioration des performances des fonctions fromUnixTimestamp/toUnixTimestamp. #71042 (kevinyhzou).
  • Ne plus désactiver la lecture non bloquante depuis le page cache pour l’ensemble du server lors d’une lecture via une E/S bloquante. Cela dégradait les performances lorsqu’un seul filesystem (par ex. tmpfs) ne prenait pas en charge l’appel système preadv2, alors que les autres le prenaient en charge. #70299 (Antonio Andelic).
  • ALTER TABLE .. REPLACE PARTITION n’attend plus les mutations/merges qui se produisent dans d’autres partitions. #59138 (Vasily Nemkov).
  • Ne plus effectuer de validation lors de la synchronisation des ACL depuis Keeper. La validation est déjà effectuée lors de la création. Cela ne devrait pas avoir beaucoup d’impact, mais certaines installations comptent des dizaines de milliers d’utilisateurs, voire plus, et la validation inutile du hash peut prendre beaucoup de temps au démarrage du serveur (tout est synchronisé depuis Keeper). #70644 (Raúl Marín).

Amélioration

  • CREATE TABLE AS copiera PRIMARY KEY, ORDER BY et les clauses similaires (des tables MergeTree). #69739 (sakulali).
  • Prise en charge de XID 64 bits dans Keeper. Cette fonctionnalité peut être activée avec la valeur de configuration use_xid_64. #69908 (Antonio Andelic).
  • Les arguments de ligne de commande pour les paramètres Bool sont définis sur true lorsqu’aucune valeur n’est fournie pour l’argument (par ex. clickhouse-client --optimize_aggregation_in_order --query "SELECT 1"). #70459 (davidtsuk).
  • Ajout des paramètres au niveau utilisateur min_free_disk_bytes_to_perform_insert et min_free_disk_perform_to_throw_insert pour empêcher les insertions sur des disques presque pleins. #69755 (Marco Vilas Boas).
  • La documentation embarquée des paramètres sera strictement plus détaillée et plus complète que la documentation du site web. Il s’agit de la première étape avant que la documentation du site soit systématiquement générée automatiquement à partir du code source. Cela a des implications durables : - il sera garanti que chaque paramètre y figure ; - il n’y aura aucun risque que les valeurs par défaut deviennent obsolètes ; - nous pourrons générer cette documentation pour chaque version de ClickHouse ; - la documentation pourra être affichée par le serveur lui-même, même sans accès à Internet. Générer la documentation du site web à partir du code source. #70289 (Alexey Milovidov).
  • Autoriser une sous-chaîne de recherche vide dans la fonction replace, avec le même comportement que PostgreSQL. #69918 (zhanglistar).
  • Autoriser une sous-chaîne de recherche vide dans les fonctions replaceRegexp*. #70053 (zhanglistar).
  • Des liens symboliques pour les tables dans le répertoire data/database_name/ sont créés vers les chemins réels des données de la table, selon la storage policy, au lieu du répertoire store/... sur le disque par défaut. #61777 (Kirill).
  • Lors de l’analyse d’un champ Enum depuis JSON, une chaîne contenant un entier sera interprétée comme l’élément Enum correspondant. Cela clôt #65119. #66801 (scanhex12).
  • Autoriser TRIM sur une chaîne vide LEADING ou TRAILING comme no-op. Clôt #67792. #68455 (Peter Nguyen).
  • Amélioration de la compatibilité de cast(timestamp as String) avec Spark. #69179 (Wenzheng Liu).
  • Toujours utiliser le nouvel analyseur pour calculer les expressions constantes lorsque enable_analyzer est défini sur true. Prise en charge du calcul des arguments de la table function executable sans utiliser de query SELECT pour les expressions constantes. #69292 (Dmitry Novik).
  • Ajout d’un paramètre enable_secure_identifiers pour interdire les identifiants comportant des caractères spéciaux. #69411 (tuanpach).
  • Ajout de show_create_query_identifier_quoting_rule pour définir le comportement de mise entre guillemets des identifiants dans le résultat de la requête SHOW CREATE TABLE. Valeurs possibles : - user_display : lorsque les identifiants sont des mots-clés. - when_necessary : lorsque les identifiants font partie de {"distinct", "all", "table"} et lorsqu’ils peuvent créer une ambiguïté : noms de colonnes, noms d’attributs de dictionnaire. - always : toujours mettre les identifiants entre guillemets. #69448 (tuanpach).
  • Amélioration de la restauration des dépendances des entités d’accès #69563 (Vitaly Baranov).
  • Si vous exécutez clickhouse-client ou une autre application CLI, qu’elle démarre lentement à cause d’un serveur surchargé et que vous commencez à saisir votre requête, par exemple SELECT, les versions précédentes affichaient le reste du contenu d’écho du terminal avant le message d’accueil, par exemple SELECTClickHouse local version 24.10.1.1. au lieu de ClickHouse local version 24.10.1.1.. C’est désormais corrigé. Cela clôt #31696. #69856 (Alexey Milovidov).
  • Ajout de la nouvelle colonne readonly_duration à la table system.replicas. Nécessaire pour distinguer les réplique readonly réelles des répliques sentinelles dans les alerts. #69871 (Miсhael Stetsyuk).
  • Changement du type du paramètre join_output_by_rowlist_perkey_rows_threshold en entier non signé. #69886 (kevinyhzou).
  • Amélioration de la journalisation des span OpenTelemetry pour inclure les paramètres de requête. #70011 (sharathks118).
  • Ajout d’informations de diagnostic sur les fonctions de tableau d’ordre supérieur si le type de résultat de la lambda est inattendu. #70093 (ttanay).
  • Amélioration de Keeper : moins de verrous lors des changements de cluster. #70275 (Antonio Andelic).
  • Ajout des mots-clés WITH IMPLICIT et FINAL à la commande SHOW GRANTS. Correction d’un bug mineur lié aux grants implicites : #70094. #70293 (pufit).
  • Prise en compte de compatibility pour les paramètres MergeTree. La valeur compatibility est récupérée depuis le profil default au démarrage du serveur, et les paramètres MergeTree par défaut sont modifiés en conséquence. Les modifications ultérieures du paramètre compatibility n’affectent pas les paramètres MergeTree. #70322 (Nikolai Kochetov).
  • Évite de saturer les logs avec de gros corps de réponse HTTP en cas d’erreurs lors de la communication inter-server. #70487 (Vladimir Cherkasov).
  • Ajout d’un nouveau paramètre max_parts_to_move pour contrôler le nombre maximal de parts pouvant être déplacées en une seule fois. #70520 (Vladimir Cherkasov).
  • Limitation de la fréquence de certains messages de log. #70601 (Alexey Milovidov).
  • CHECK TABLE avec le qualificateur PART était formaté de manière incorrecte dans le client. #70660 (Alexey Milovidov).
  • Prise en charge de l’écriture de l’index de colonne et de l’index de décalage avec le writer natif Parquet. #70669 (LiuNeng).
  • Prise en charge de l’analyse de DateTime64 pour les microsecondes et le fuseau horaire en syntaxe Joda (“joda” est une bibliothèque Java populaire pour la gestion des dates et heures, et la “syntaxe joda” correspond au style de cette bibliothèque). #70737 (kevinyhzou).
  • Changement d’approche pour déterminer si un cloud storage prend en charge la suppression par lot ou non. #70786 (Vitaly Baranov).
  • Prise en charge de la page Parquet v2 dans le reader natif. #70807 (Arthur Passos).
  • Ajout d’une vérification lorsque la table a à la fois storage_policy et disk définis. Une vérification a également été ajoutée pour s’assurer qu’une nouvelle storage policy est compatible avec l’ancienne lors de l’utilisation du paramètre disk. #70839 (Kirill).
  • Ajout de system.s3_queue_settings et system.azure_queue_settings. #70841 (Kseniia Sumarokova).
  • Les fonctions base58Encode et base58Decode acceptent désormais des arguments de type FixedString. Exemple : SELECT base58Encode(toFixedString('plaintext', 9));. #70846 (Faizan Patel).
  • Ajout de la colonne partition à chaque type d’entrée du journal des parts. Auparavant, elle n’était définie que pour certaines entrées. Cela corrige #70819. #70848 (Alexey Milovidov).
  • Ajout des événements MergeStart et MutateStart dans system.part_log, ce qui facilite l’analyse et la visualisation des merges. #70850 (Alexey Milovidov).
  • Ajout d’un événement de profil concernant le nombre de parts source fusionnées. Cela permet de surveiller le fan-out du merge tree en production. #70908 (Alexey Milovidov).
  • Les téléchargements en arrière-plan vers le cache du système de fichiers ont été réactivés. #70929 (Nikita Taranov).
  • Ajout d’un nouvel algorithme de merge selector, nommé Trivial, réservé à un usage expert. Il est moins performant que le merge selector Simple. #70969 (Alexey Milovidov).
  • Prise en charge de CREATE OR REPLACE VIEW atomique. #70536 (tuanpach)
  • Ajout du mode strict_once à la fonction d’agrégation windowFunnel pour éviter de compter plusieurs fois un même événement lorsqu’il correspond à plusieurs conditions, corrige #21835. #69738 (Vladimir Cherkasov).

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

  • Applique les mises à jour de configuration dans l’objet de contexte global. Cela corrige des problèmes comme #62308. #62944 (Amos Bird).
  • Corrige le fait que ReadSettings n’utilisait pas les valeurs définies par l’utilisateur, car seules les valeurs par défaut étaient prises en compte. #65625 (Kseniia Sumarokova).
  • Corrige un problème d’incompatibilité de type dans sumMapFiltered lors de l’utilisation d’arguments signés. #58408 (Chen768959).
  • Corrige la monotonie des fonctions de conversion de type toHour lorsqu’un argument optionnel de fuseau horaire est passé. #60264 (Amos Bird).
  • Assouplit la vérification supportsPrewhere pour les tables Merge. Cela corrige #61064. Elle avait été durcie inutilement dans #60082. #61091 (Amos Bird).
  • Corrige la gestion du paramètre use_concurrency_control afin d’appliquer correctement la limite concurrent_threads_soft_limit_num. Cela active le contrôle de concurrence par défaut, car il ne fonctionnait pas correctement auparavant. #61473 (Sergei Trifonov).
  • Corrige une optimisation incorrecte de la section JOIN ON dans le cas d’une vérification IS NULL sous une autre fonction (comme NOT), ce qui pouvait entraîner des résultats erronés. Clôt #67915. #68049 (Vladimir Cherkasov).
  • Empêche les queries ALTER qui rendraient la query CREATE des tables invalide. #68574 (János Benjamin Antal).
  • Corrige le formatage AST incohérent pour les fonctions negate (-) et NOT avec des tuples et des tableaux. #68600 (Vladimir Cherkasov).
  • Corrige l’insertion d’un type incomplet dans Dynamic lors de la désérialisation. Cela pouvait entraîner des erreurs Parameter out of bound. #69291 (Pavel Kruglov).
  • La réplication zero-copy, qui est expérimentale et ne doit pas être utilisée en production : corrige une boucle infinie après restore replica dans le merge tree répliqué avec zero copy. #69293 (MikhailBurdukov).
  • Rétablit la valeur par défaut de processing_threads_num au nombre de cœurs CPU dans le stockage S3Queue. #69384 (Kseniia Sumarokova).
  • Contourne le flux try/catch lors de la dé/sérialisation de Protobuf répétés imbriqués vers des colonnes imbriquées (corrige #41971). #69556 (Eliot Hautefeuille).
  • Corrige un crash lors de l’insertion dans une colonne FixedString du moteur PostgreSQL. #69584 (Pavel Kruglov).
  • Corrige un crash lors de l’exécution de create view t as (with recursive 42 as ttt select ttt);. #69676 (Han Fei).
  • Correction de maxMapState qui levait ‘Bad get’ lorsque le type de valeur était DateTime64. #69787 (Michael Kolupaev).
  • Correction de getSubcolumn avec les colonnes LowCardinality en redéfinissant useDefaultImplementationForLowCardinalityColumns pour renvoyer true. #69831 (Miсhael Stetsyuk).
  • Correction du blocage permanent des envois distribués lorsqu’un DROP de table distribuée échouait. #69843 (Azat Khuzhin).
  • Correction des requêtes non annulables contenant WITH FILL avec des clés NaN. Cela clôt #69261. #69845 (Alexey Milovidov).
  • Correction de la valeur par défaut de l’analyseur pour l’ancienne valeur de compatibilité. #69895 (Raúl Marín).
  • Ne pas vérifier les dépendances pendant CREATE OR REPLACE VIEW lors du DROP de l’ancienne table. Auparavant, la requête CREATE OR REPLACE échouait lorsqu’il existait des tables dépendantes de la vue recréée. #69907 (Pavel Kruglov).
  • Correctif lié à Decimal. Corrige #69730. #69978 (Arthur Passos).
  • Désormais, DEFINER/INVOKER fonctionneront avec les vues paramétrées. #69984 (pufit).
  • Correction de l’analyse syntaxique des clauses DEFINER des vues. #69985 (pufit).
  • Correction d’un bug où le fuseau horaire pouvait modifier le résultat de la requête avec des arguments Date ou Date32. #70036 (Yarik Briukhovetskyi).
  • Correction de Block structure mismatch pour les requêtes avec des vues imbriquées et une condition WHERE. Corrige #66209. #70054 (Nikolai Kochetov).
  • Évite la réutilisation de colonnes entre différents tuples nommés lors de l’évaluation des fonctions tuple. Cela corrige #70022. #70103 (Amos Bird).
  • Correction d’un LOGICAL_ERROR incorrect lors du remplacement de littéraux dans des intervalles. #70122 (Pablo Marcos).
  • Vérification du type Nullable(Nothing) pendant ALTER TABLE MODIFY COLUMN/QUERY afin d’empêcher les tables avec un tel type de données. #70123 (Pavel Kruglov).
  • Message d’erreur approprié pour la requête illégale JOIN ... ON *, clôt #68650. #70124 (Vladimir Cherkasov).
  • Correction d’un résultat incorrect avec un index de saut. #70127 (Raúl Marín).
  • Corrige une condition de concurrence dans la méthode de décompression de ColumnObject/ColumnTuple pouvant entraîner une utilisation de mémoire après libération sur le tas. #70137 (Pavel Kruglov).
  • Corrige un possible blocage dans ALTER COLUMN avec le type Dynamic. #70144 (Pavel Kruglov).
  • Désormais, ClickHouse considérera davantage d’erreurs comme pouvant être retentées et ne marquera pas les parties de données comme corrompues dans ce cas. #70145 (alesapin).
  • Utilise le bon paramètre max_types lors de la création du type Dynamic pour une sous-colonne JSON. #70147 (Pavel Kruglov).
  • Corrige l’affichage du mot de passe dans system.query_log pour les utilisateurs utilisant la méthode d’authentification par mot de passe bcrypt. #70148 (Nikolay Degterinsky).
  • Corrige le compteur d’événements de l’interface native (InterfaceNativeSendBytes). #70153 (Yakov Olkhovskiy).
  • Corrige un possible crash lié aux colonnes JSON. #70172 (Pavel Kruglov).
  • Corrige plusieurs problèmes dans arrayMin et arrayMax. #70207 (Raúl Marín).
  • Respecte le paramètre allow_simdjson dans le parseur du type JSON. #70218 (Pavel Kruglov).
  • Corrige un déréférencement de pointeur nul lors de la création d’une vue matérialisée avec deux SELECT et un INTERSECT, par exemple CREATE MATERIALIZED VIEW v0 AS (SELECT 1) INTERSECT (SELECT 1);. #70264 (Konstantin Bogdanov).
  • Ne modifie plus les paramètres globaux via les scripts de démarrage. Auparavant, la modification d’un paramètre dans un script de démarrage l’affectait globalement. #70310 (Antonio Andelic).
  • Corrige ALTER du type Dynamic avec réduction du paramètre max_types, ce qui pouvait entraîner un crash du serveur. #70328 (Pavel Kruglov).
  • Corrige un crash lors d’une utilisation incorrecte de WITH FILL. #70338 (Raúl Marín).
  • Corrige un possible use-after-free dans SYSTEM DROP FORMAT SCHEMA CACHE FOR Protobuf. #70358 (Azat Khuzhin).
  • Corrige un crash lors d’un GROUP BY sur une sous-colonne de sous-objet JSON. #70374 (Pavel Kruglov).
  • Ne précharge pas les parties pour les fusions verticales si la partie ne contient aucune ligne. #70452 (Antonio Andelic).
  • Corrige un crash dans WHERE avec des fonctions lambda. #70464 (Raúl Marín).
  • Corrige la création de table avec CREATE ... AS table_function(...) dans une base de données Replicated quand la source de la fonction de table n’est pas disponible sur la réplique secondaire. #70511 (Kseniia Sumarokova).
  • Ignorer toute sortie liée à l’async insert avec wait_for_async_insert=1. Corrige #62644. #70530 (Konstantin Bogdanov).
  • Ignorer frozen_metadata.txt lors du parcours du répertoire shadow depuis system.remote_data_paths. #70590 (Aleksei Filatov).
  • Corriger la création de fonctions de fenêtre avec état sur une mémoire désalignée. #70631 (Raúl Marín).
  • Corrige de rares plantages dans les SELECT et les fusions après l’ajout d’une colonne de type Array avec une expression par défaut non vide. #70695 (Anton Popov).
  • L’insert dans la fonction de table s3 respectera les paramètres de requête. #70696 (Vladimir Cherkasov).
  • Corriger une récursion infinie lors de l’inférence d’un schéma Protobuf lorsque l’ignorance des champs non pris en charge est activée. #70697 (Raúl Marín).
  • Désactiver enable_named_columns_in_function_tuple par défaut. #70833 (Raúl Marín).
  • Corriger le fait que le paramètre processing_threads_num du moteur de table S3Queue n’était pas pris en compte lorsqu’il était déduit du nombre de cœurs CPU du serveur. #70837 (Kseniia Sumarokova).
  • Normaliser les arguments de named tuple dans les états d’agrégation. Cela corrige #69732. #70853 (Amos Bird).
  • Corriger une logical error due à des zéros négatifs dans la table de hachage à deux niveaux. Cela clôt #70973. #70979 (Alexey Milovidov).
  • Corriger limit by et limit with ties pour le mode distribué et les répliques parallèles. #70880 (Nikita Taranov).

Version 24.9 de ClickHouse, 2024-09-26. Présentation, Vidéo

Changement non rétrocompatible

  • Les expressions comme a[b].c sont prises en charge pour les tuples nommés, ainsi que les accès nommés par indice à partir d’expressions arbitraires, par exemple expr().name. Cela est utile pour traiter 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 le query analyzer recherchait une colonne name plutôt que l’élément de tuple correspondant ; dans la nouvelle version, elle devient tupleElement(expr(), 'name'). Dans la plupart des cas, l’ancienne version ne fonctionnait pas, mais on peut imaginer un cas très inhabituel où ce changement pourrait entraîner une incompatibilité : si vous stockiez les noms des é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 ce type de requêtes, mais nous devons tout de même signaler ce changement comme potentiellement non rétrocompatible. #68435 (Alexey Milovidov).
  • Lorsque le paramètre print_pretty_type_names est activé, il affiche le Data type Tuple sous une forme Pretty dans les instructions SHOW CREATE TABLE, la fonction formatQuery, ainsi qu’en interactive mode dans clickhouse-client et clickhouse-local. Dans les versions précédentes, ce paramètre ne s’appliquait qu’aux queries DESCRIBE et à toTypeName. Cela clôt #65753. #68492 (Alexey Milovidov).
  • Ne pas autoriser la spécification explicite d’un UUID lors de la création d’une table dans des bases de données Replicated. De même, ne pas autoriser la spécification explicite du Keeper path et du nom de replica pour les tables *MergeTree dans des bases de données Replicated. Cela introduit un nouveau paramètre database_replicated_allow_explicit_uuid et modifie le type de database_replicated_allow_replicated_engine_arguments de Bool à UInt64 #66104 (Alexander Tokmakov).

Nouvelle fonctionnalité

  • Permettre à un utilisateur d’avoir plusieurs méthodes d’authentification au lieu d’une seule. Permettre aussi de réinitialiser les méthodes d’authentification vers la méthode ajoutée le plus récemment. Si vous devez exécuter des instances en 24.8 et une en 24.9 pendant un certain temps, il est préférable de définir max_authentication_methods_per_user = 1 pendant cette période afin d’éviter d’éventuelles incompatibilités. #65277 (Arthur Passos).
  • Ajouter la prise en charge de ATTACH PARTITION ALL FROM. #61987 (Kirill Nikiforov).
  • Ajouter le 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. Résout #59339. #66782 (Alexis Arnaud).
  • Ajouter les fonctions overlay et overlayUTF8, qui remplacent une partie d’une chaîne par une autre. Exemple : SELECT overlay('Hello New York', 'Jersey', 11) renvoie Hello New Jersey. #66933 (李扬).
  • Ajouter la prise en charge des lightweight deletes par partition dans DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr; #67805 (sunny).
  • Implémenter la comparaison des valeurs du type de données Interval appartenant à différents domaines (par exemple secondes et minutes), qui sont désormais converties vers le plus petit supertype commun. #68057 (Yarik Briukhovetskyi).
  • Ajouter le paramètre create_if_not_exists pour utiliser par défaut le comportement IF NOT EXISTS lors des instructions CREATE. #68164 (Peter Nguyen).
  • Permettre la lecture de tables Iceberg dans Azure et en local. #68210 (Daniil Ivanik).
  • Les entrées du query cache peuvent désormais être supprimées par tag. Par exemple, l’entrée du query cache 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'. #68477 (Michał Tabaszewski).
  • Ajouter le chiffrement du stockage pour les named collections. #68615 (Pablo Marcos).
  • Ajouter la colonne virtuelle _headers pour le table engine URL. Résout #65026. #68867 (flynn).
  • Ajouter la table system.projections pour suivre les projections disponibles. #68901 (Jordi Villar).
  • Ajouter la nouvelle fonction arrayZipUnaligned pour la compatibilité avec Spark (où elle s’appelle arrays_zip), qui autorise des Arrays non alignés à partir de arrayZip. #69030 (李扬).
  • Ajouter les commandes cp/mv à l’application en ligne de commande du client Keeper, afin de copier/déplacer un nœud de manière atomique. #69034 (Mikhail Artemenko).
  • Ajoute l’argument scale (par défaut : true) à la fonction arrayAUC, permettant d’ignorer l’étape de normalisation (ticket #69609). #69717 (gabrielmcg44).

Fonctionnalité expérimentale

  • Ajoute un paramètre input_format_try_infer_variants qui permet d’inférer le type Variant lors de l’inférence de schéma pour les formats texte lorsqu’il existe plusieurs types possibles pour les éléments de colonne/tableau. #63798 (Shaun Struwig).
  • Ajoute les fonctions d’agrégation distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypes pour une meilleure introspection du contenu des colonnes de type JSON. #68463 (Kruglov Pavel).
  • Nouvel algorithme pour déterminer l’unité de distribution des marks entre les répliques parallèles à l’aide d’un hachage cohérent. Différents nombres de marks sont choisis selon les modèles de lecture afin d’améliorer les performances. #68424 (Nikita Taranov).
  • Auparavant, la complexité algorithmique de la logique de déduplication des parts dans la gestion des annonces des répliques parallèles était de O(n^2), ce qui pouvait prendre un temps notable pour les tables comportant de nombreuses parts (ou partitions). Ce changement ramène la complexité à O(n*log(n)). #69596 (Alexander Gololobov).
  • Améliorations des vues matérialisées actualisables : mode append (... REFRESH EVERY 1 MINUTE APPEND ...) pour ajouter des lignes à la table existante au lieu d’écraser la table entière, tentatives de nouvelle exécution (désactivées par défaut, configurées dans la section SETTINGS de la query), query SYSTEM WAIT VIEW <name> qui attend l’actualisation en cours, ainsi que quelques corrections. #58934 (Michael Kolupaev).
  • Ajout de min_max comme nouveau type de statistiques (expérimental). Il permet d’estimer les prédicats de plage sur des colonnes numériques, par ex. x < 100. #67013 (JackyWoo).
  • Améliore castOrDefault pour les colonnes Variant/Dynamic afin qu’il fonctionne lorsque les types internes ne sont pas convertibles du tout. #67150 (Kruglov Pavel).
  • La réplication d’un sous-ensemble de colonnes est désormais disponible via MaterializedPostgreSQL. Résout #33748. #69092 (Kruglov Kirill).

Amélioration des performances

  • Mise en œuvre de la lecture des seuls fichiers nécessaires pour le partitionnement Hive. #68963 (Yarik Briukhovetskyi).
  • Amélioration des performances des JOIN en réorganisant la table de droite par clés lorsque les clés de table sont denses dans les hash joins LEFT ou INNER. #60341 (kevinyhzou).
  • Amélioration des performances des ALL JOIN grâce à l’ajout paresseux de la liste des lignes. #63677 (kevinyhzou).
  • Chargement asynchrone des métadonnées du cache du système de fichiers pendant le démarrage afin d’accélérer les redémarrages (contrôlé par le paramètre load_metadata_asynchronously). #65736 (Daniel Pozo Escalona).
  • Les fonctions array et map ont été optimisées pour traiter beaucoup plus rapidement certains cas courants. #67707 (李扬).
  • Optimisation mineure de la lecture des chaînes ORC, en particulier lorsqu’une colonne ne contient aucune valeur NULL. #67794 (李扬).
  • Amélioration des performances globales des fusions en réduisant le surcoût lié à l’ordonnancement des étapes de fusion. #68016 (Anton Popov).
  • Accélération des requêtes vers S3 lorsqu’aucun profil n’est défini, qu’aucune information d’authentification n’est définie et que l’IMDS n’est pas disponible (par exemple, lorsque vous interrogez un bucket public depuis une machine hors d’un cloud). Cela clôt #52771. #68082 (Alexey Milovidov).
  • Dévirtualisation du lecteur de format dans RowInputFormatWithNamesAndTypes afin d’améliorer les performances. #68437 (李扬).
  • Ajout de la fusion en parallèle pour la aggregate function uniq lors d’une agrégation avec une clé de regroupement afin de maximiser l’utilisation du CPU. #68441 (Jiebin Sun).
  • Ajout du paramètre output_format_orc_dictionary_key_size_threshold pour permettre à l’utilisateur d’activer l’encodage par dictionnaire pour une colonne de type chaîne dans le output format ORC. Cela contribue à réduire significativement la taille du fichier ORC de sortie et à améliorer les performances de lecture. #68591 (李扬).
  • Introduction de la nouvelle requête Keeper RemoveRecursive, qui supprime un nœud avec l’ensemble de son sous-arbre. #69332 (Mikhail Artemenko).
  • Accélération des insertions dans une table dotée d’un vector similarity index grâce à l’ajout des données à l’index vectoriel en parallèle. #69493 (flynn).
  • Réduction de l’utilisation mémoire des insertions en JSON grâce à une taille de tampon d’écriture adaptative. De nombreux fichiers créés par une JSON column dans une Wide part contiennent peu de données, et il n’est pas pertinent de leur allouer un tampon de 1 Mo. #69272 (Kruglov Pavel).
  • Évite de restituer un thread au threadpool du concurrent hash join afin qu’une query ne crée pas un nombre excessif de threads. #69406 (Duc Canh Le).

Amélioration

  • CREATE TABLE AS copie désormais PRIMARY KEY, ORDER BY et les clauses similaires. Pour l’instant, cette prise en charge est limitée à la famille de moteurs de table MergeTree. #69076 (sakulali).
  • Renforcement de certaines parties du codebase liées à l’analyse syntaxique de petites entités. Les bogues (mineurs) suivants ont été détectés et corrigés : - si une table DeltaLake est partitionnée par Bool, la valeur de partition est toujours interprétée comme false ; - la table ExternalDistributed n’utilisait qu’un seul shard parmi les adresses fournies ; la valeur du paramètre max_threads et d’autres paramètres similaires s’affichait sous la forme 'auto(N)' au lieu de auto(N). #52503 (Alexey Milovidov).
  • Utilisation de métriques spécifiques aux cgroups pour le calcul de l’utilisation CPU au lieu de métriques système globales. #62003 (Nikita Taranov).
  • La planification des E/S pour les disques S3 distants s’effectue désormais au niveau des flux de sockets HTTP (au lieu de requêtes S3 entières) afin de résoudre les problèmes de limitation de débit liés à bandwidth_limit. #65182 (Sergei Trifonov).
  • Les fonctions upperUTF8 et lowerUTF8 ne pouvaient auparavant convertir en majuscules / minuscules que les caractères cyrilliques. Cette limitation a désormais été levée, et les caractères de n’importe quelle langue sont maintenant convertis correctement en majuscules/minuscules. Exemple : SELECT upperUTF8('Süden') renvoie maintenant SÜDEN. #65761 (李扬).
  • Lorsqu’un lightweight delete se produit sur une table avec une ou plusieurs projections, les utilisateurs avaient jusqu’ici deux possibilités : lever une exception (par défaut) ou supprimer la projection au moment du lightweight delete. Une troisième option est désormais disponible : conserver le lightweight delete, puis reconstruire la ou les projections. #66169 (jsc0218).
  • Deux options (dns_allow_resolve_names_to_ipv4 et dns_allow_resolve_names_to_ipv6) ont été ajoutées pour permettre de bloquer les connexions selon la famille d’IP. #66895 (MikhailBurdukov).
  • Le comportement d’ignorance de Ctrl-Z (ignore_shell_suspend) dans clickhouse-client est désormais configurable. #67134 (Azat Khuzhin).
  • Amélioration de la validation UTF-8 dans les formats de sortie JSON. Cela garantit qu’un JSON valide est généré en présence de certaines séquences d’octets dans les données de résultat. #67938 (mwoenker).
  • Ajout de profile events pour les merges et les mutations afin d’améliorer l’introspection. #68015 (Anton Popov).
  • ODBC : récupérer http_max_tries depuis la configuration du serveur. #68128 (Rodolphe Dugé de Bernonville).
  • Ajout de la prise en charge des caractères génériques pour l’identification des utilisateurs dans l’extension X.509 SubjectAltName. #68236 (Marco Vilas Boas).
  • Amélioration de l’inférence de schéma pour les valeurs de date time. Désormais, DateTime64 n’est utilisé que lorsque la valeur de date time comporte une partie fractionnaire ; sinon, le type DateTime classique est utilisé. L’inférence de Date/DateTime est également plus stricte, en particulier lorsque date_time_input_format='best_effort', afin d’éviter d’inférer des valeurs de date time à partir de chaînes dans certains cas limites. #68382 (Kruglov Pavel).
  • Supprime l’ancien code des named collections dans les dictionnaires et le remplace par le nouveau, ce qui permet d’utiliser dans les dictionnaires des named collections créées en DDL. Clôture #60936, clôture #36890. #68412 (Kseniia Sumarokova).
  • Utilise HTTP/1.1 au lieu de HTTP/1.0 (défini par défaut) pour les authentificateurs HTTP externes. #68456 (Aleksei Filatov).
  • Ajout d’un nouvel ensemble de métriques pour l’introspection du pool de threads, offrant des informations plus détaillées sur ses performances et son comportement. #68674 (filimonov).
  • Prise en charge des paramètres de requête dans les async inserts au format Values. #68741 (Anton Popov).
  • Prise en charge de Date32 dans dateTrunc et toStartOfInterval. #68874 (LiuNeng).
  • Ajoute les colonnes plan_step_name et plan_step_description à system.processors_profile_log. #68954 (Alexander Gololobov).
  • Prise en charge de l’espagnol dans les dictionnaires intégrés. #69035 (Vasily Okunev).
  • Ajoute l’architecture CPU au message court d’information sur les pannes. #69037 (Konstantin Bogdanov).
  • Les requêtes échoueront plus rapidement s’il est impossible d’établir une nouvelle connexion à Keeper pendant les retries. #69148 (Raúl Marín).
  • Met à jour Database Factory afin de permettre aux database engines définis par l’utilisateur d’avoir des arguments, des settings et des surcharges de table (comme StorageFactory). #69201 (NikBarykin).
  • Le mode restore qui remplace tous les table engines externes et les fonctions par le moteur Null (paramètres restore_replace_external_engines_to_null, restore_replace_external_table_functions_to_null) échouait si la table contenait SETTINGS. Désormais, il supprime les settings de la définition de table dans ce cas et permet de restaurer ces tables. #69253 (Ilya Yatsishin).
  • CLICKHOUSE_PASSWORD est correctement échappé pour XML dans le point d’entrée de l’image clickhouse. #69301 (aohoyd).
  • Autorise les arguments vides pour arrayZip/arrayZipUnaligned, comme c’était déjà le cas pour concat dans https://github.com/ClickHouse/ClickHouse/pull/65887. Cela vise la compatibilité avec Spark dans Gluten CH Backend. #69576 (李扬).
  • Prise en charge d’options SSL plus avancées pour la communication interne de Keeper (par exemple, des private keys avec passphrase). #69582 (Antonio Andelic).
  • L’analyse des index peut prendre un temps notable sur les grandes tables comportant de nombreuses parts ou partitions. Cette modification devrait permettre d’interrompre une requête lourde à cette étape. #69606 (Alexander Gololobov).
  • Masquage des informations sensibles dans la table function gcs. #69611 (Vitaly Baranov).
  • Reconstruire la projection lors des fusions qui réduisent le nombre de lignes. #62364 (cangyin).

correction de bug

  • Correction de l’attachement d’une table lorsque pg dbname contient - dans le moteur MaterializedPostgreSQL expérimental et non pris en charge. #62730 (takakawa).
  • Correction d’une erreur sur les colonnes générées dans le moteur MaterializedPostgreSQL expérimental et totalement non pris en charge lorsque l’ordre de adnum est incorrect #63161. Correction d’une erreur sur la colonne id avec l’expression nextval comme valeur par défaut dans MaterializedPostgreSQL expérimental et totalement non pris en charge lorsqu’une table contient des colonnes générées. Correction d’une erreur lors de la suppression d’une publication contenant des symboles autres que [a-z1-9-]. #67664 (Kruglov Kirill).
  • Storage Join prend désormais en charge les colonnes Nullable dans la table de gauche, corrige #61247. #66926 (vdimir).
  • Résultat de requête incorrect avec les répliques parallèles (y compris la distribution des requêtes) lorsque l’opérateur IN contient une conversion en Decimal(). Le bug a été introduit avec le nouvel analyseur. #67234 (Igor Nikonov).
  • Correction du problème où ALTER MODIFY ORDER BY provoque des métadonnées incohérentes. #67436 (iceFireser).
  • Correction de la borne supérieure de la fonction fromModifiedJulianDay. Elle était censée être 9999-12-31, mais avait été définie par erreur à 9999-01-01. #67583 (PHO).
  • Correction du cas où l’index n’est pas au début du tuple dans une requête IN. #67626 (Yarik Briukhovetskyi).
  • Correction de l’expiration dans RoleCache. #67748 (Vitaly Baranov).
  • Correction des blocks manquants dans window view en raison d’un flush trop lent vers la vue. #67983 (Raúl Marín).
  • Correction d’un problème MSan causé par un format de date incorrect. #68105 (JackyWoo).
  • Correction d’un crash dans le filtrage Parquet lorsque les types de données du fichier diffèrent sensiblement des types demandés (par ex. ... FROM file('a.parquet', Parquet, 'x String'), alors que le fichier contient x Int64). Sans ce correctif, utilisez input_format_parquet_filter_push_down = 0 comme solution de contournement. #68131 (Michael Kolupaev).
  • Correction d’un crash dans lag/lead, introduit dans #67091. #68262 (lgbo).
  • Tentative de correction d’un crash de Postgres lorsqu’une requête est annulée. #68288 (Kseniia Sumarokova).
  • Après https://github.com/ClickHouse/ClickHouse/pull/61984, schema_inference_make_columns_nullable=0 pouvait toujours rendre des colonnes Nullable dans les formats Parquet/Arrow. Ce changement n’était pas rétrocompatible, et les utilisateurs ont remarqué ce changement de comportement. Cette PR rétablit le fonctionnement précédent de schema_inference_make_columns_nullable=0 (aucune colonne Nullable ne sera inférée) et introduit une nouvelle valeur, auto, pour ce paramètre, qui rendra les colonnes Nullable uniquement si les données contiennent des informations sur la nullabilité. #68298 (Kruglov Pavel).
  • Corrige #50868. De petites valeurs constantes DateTime64 renvoyées par une sous-requête imbriquée dans une distributed query étaient transformées à tort en NULL, ce qui provoquait des erreurs et pouvait produire des résultats de requête incorrects. #68323 (Shankar).
  • Corrige l’absence du mode sync replica dans la requête SYSTEM SYNC REPLICA. #68326 (Duc Canh Le).
  • Corrige un bogue dans la condition de clé. #68354 (Han Fei).
  • Corrige un crash lors de la suppression ou du renommage d’un rôle utilisé dans le répertoire externe d’utilisateurs LDAP. #68355 (Andrey Zvonov).
  • Corrige une valeur supérieure à 1 dans la colonne Progress de system.view_refreshes #68377. #68378 (megao).
  • Traite correctement les indicateurs regexp. #68389 (Han Fei).
  • L’opérateur de transtypage de style PostgreSQL (::) fonctionne correctement même avec les littéraux hexadécimaux de style SQL et les littéraux de chaînes binaires (par ex. SELECT x'414243'::String). Cela corrige également #68324. #68482 (Alexey Milovidov).
  • Correctif mineur pour https://github.com/ClickHouse/ClickHouse/pull/68131. #68494 (Chang chen).
  • Corrige #68239 pour SAMPLE n lorsque n est un entier. #68499 (Denis Hananein).
  • Corrige un bogue dans mann-whitney-utest lorsque la taille des deux distributions n’est pas égale. #68556 (Han Fei).
  • Après un redémarrage inattendu, corrige l’échec du démarrage de la réplication de ReplicatedMergeTree dû à une gestion anormale d’une part couverte par une part endommagée. #68584 (baolin).
  • Corrige les LOGICAL_ERROR lorsque les fonctions sipHash64Keyed, sipHash128Keyed ou sipHash128ReferenceKeyed sont appliquées à des tableaux ou des tuples vides. #68630 (Robert Schulze).
  • L’index de texte intégral peut filtrer les mauvaises colonnes lors de l’indexation de plusieurs colonnes, car il ne réinitialisait pas row_id entre les différentes colonnes ; la procédure de reproduction se trouve dans tests/queries/0_stateless/03228_full_text_with_multi_col.sql. Sans cela. #68644 (siyuan).
  • Corrige les caractères invalides ‘\t’ et ‘\n’ dans replica_name lors de la création d’une table Replicated, ce qui provoque une analyse incorrecte de ‘source replica’ dans LogEntry. Mentionné dans l’issue #68640. #68645 (Zhigao Hong).
  • Rétablissement des colonnes virtuelles _table et _database dans les tables distribuées. Elles étaient disponibles jusqu’à la version 24.3. #68672 (Anton Popov).
  • Correction d’une erreur possible Size of permutation (0) is less than required (...) lors de la permutation d’une colonne Variant. #68681 (Kruglov Pavel).
  • Correction d’une erreur possible DB::Exception: Block structure mismatch in joined block stream: different columns: avec la nouvelle colonne JSON. #68686 (Kruglov Pavel).
  • Correction d’un problème lié aux clés constantes matérialisées lors du hachage de maps avec des arrays comme clés dans les fonctions sipHash(64/128)Keyed. #68731 (Salvatore Mesoraca).
  • ColumnsDescription::toString formate désormais chaque colonne à l’aide du même objet IAST::FormatState. Cela permet d’écrire sur disque et dans ZooKeeper des métadonnées de colonnes uniformes. #68733 (Miсhael Stetsyuk).
  • Correction de la fusion des données agrégées pour les grouping sets. #68744 (Nikolai Kochetov).
  • Correction d’une erreur logique lors de la création d’un MergeTree répliqué, de la modification d’une colonne, puis de l’exécution de modify statistics. #68820 (Han Fei).
  • Correction de la résolution des sous-colonnes Dynamic depuis des sous-requêtes dans l’analyseur. #68824 (Kruglov Pavel).
  • Correction de l’analyse des métadonnées de types complexes dans DeltaLake. Clôt #68739. #68836 (Kseniia Sumarokova).
  • Correction des insertions asynchrones lorsque les métadonnées d’une table sont modifiées (par des requêtes ALTER ADD/MODIFY COLUMN) après l’insert, mais avant l’écriture dans la table. #68837 (Anton Popov).
  • Correction d’une exception inattendue lors du passage d’un tuple vide dans un array. Cela corrige #68618. #68848 (Amos Bird).
  • Correction de l’analyse des commandes de mutation portant uniquement sur les métadonnées. #68935 (János Benjamin Antal).
  • Correction d’un résultat potentiellement erroné lors de la fusion de l’état anyHeavy. #68950 (Raúl Marín).
  • Correction de l’écriture dans les vues matérialisées lorsque le paramètre optimize_functions_to_subcolumns est activé. #68951 (Anton Popov).
  • Le cache des sérialisations n’est plus utilisé dans les méthodes const des colonnes Dynamic. Cela pouvait entraîner l’utilisation d’une valeur non initialisée, voire une situation de concurrence pendant les agrégations. #68953 (Kruglov Pavel).
  • Correction d’une erreur d’analyse lorsque null doit, dans certains cas, être inséré comme valeur par défaut lors de l’analyse du type JSON. #68955 (Kruglov Pavel).
  • Correction de l’absence d’envoi de Content-Encoding dans certaines réponses compressées. #64802. #68975 (Konstantin Bogdanov).
  • Dans certains cas, le chemin était concaténé incorrectement et contenait la séquence // ; ce problème est résolu grâce à la normalisation du chemin. #69066 (Yarik Briukhovetskyi).
  • Correction d’une erreur logique en présence d’un async insert vide. #69080 (Han Fei).
  • Correction d’une data race dans l’indication de progression de clickhouse-client lors de l’annulation d’une requête. #69081 (Sergei Trifonov).
  • Correction d’un bug empêchant l’utilisation du vector similarity index (actuellement Experimental) lorsqu’il était utilisé avec cosine distance comme fonction de distance. #69090 (flynn).
  • Cette modification corrige un problème où une nouvelle tentative de création d’une base de données Replicated après une défaillance du serveur pendant le processus de création initial pouvait entraîner une erreur. #69102 (Miсhael Stetsyuk).
  • Ne pas inférer le type Bool à partir de String dans les CSV lorsque input_format_csv_try_infer_numbers_from_strings = 1, car la lecture de valeurs Bool à partir de chaînes n’est pas autorisée. #69109 (Kruglov Pavel).
  • Correction des erreurs d’analyse des requêtes explain ast insert côté client lorsque --multiquery est activé. #69123 (wxybear).
  • La clause UNION dans les subqueries n’était pas gérée correctement dans les requêtes avec parallel replicas et entraînait l’erreur LOGICAL_ERROR Duplicate announcement received for replica. #69146 (Igor Nikonov).
  • Correction de la propagation de l’argument structure dans s3Cluster. Auparavant, l’expression DEFAULT de la colonne pouvait être perdue lors de l’envoi de la requête aux répliques dans s3Cluster. #69147 (Kruglov Pavel).
  • Prise en compte des paramètres de format dans le format Values lors de la conversion d’une expression vers le type de destination. #69149 (Kruglov Pavel).
  • Correction de clickhouse-client --queries-file pour les utilisateurs readonly (échouait auparavant avec Cannot modify 'log_comment' setting in readonly mode). #69175 (Azat Khuzhin).
  • Correction d’une data race dans clickhouse-client lorsqu’il est redirigé vers un processus qui s’est terminé prématurément. #69186 (vdimir).
  • Correction de résultats incorrects pour uniq et GROUP BY avec les types JSON/Dynamic. #69203 (Kruglov Pavel).
  • Correction de la détection du format INFILE pour les asynchronous inserts. Si le format n’est pas défini explicitement dans la clause FORMAT, il peut être détecté à partir de l’extension du fichier INFILE. #69237 (Julia Kartseva).
  • Après ce problème, on trouve en production un grand nombre de répliques de table dont la valeur du nœud metadata_version est à la fois égale à 0 et différente de la version du nœud metadata de la table correspondante. Cela entraîne l’échec des requêtes alter sur ces répliques. #69274 (Miсhael Stetsyuk).
  • Marquer le type Dynamic comme un type de clé primaire non sûr afin d’éviter les problèmes avec Fields. #69311 (Kruglov Pavel).
  • Améliorer la restauration des dépendances des entités d’accès. #69346 (Vitaly Baranov).
  • Corriger un comportement indéfini lorsque toutes les tentatives de connexion échouent au moment d’obtenir une connexion pour des insertions. #69390 (Pablo Marcos).
  • Ferme #69135. Si l’on essaie de réutiliser des données jointes pour une jointure cross, cela ne peut toutefois pas se produire dans ClickHouse à l’heure actuelle. Il vaut mieux conserver have_compressed dans reuseJoinedData. #69404 (lgbo).
  • Faire en sorte que la fonction materialize() renvoie une full column lorsque le paramètre est une colonne sparse. #69429 (Alexander Gololobov).
  • Correction d’une LOGICAL_ERROR dans la fonction sqidDecode (#69450). #69451 (Robert Schulze).
  • Correctif rapide pour un problème de s3queue en 24.6 ou pour une requête CREATE avec une base de données replicated. #69454 (Kseniia Sumarokova).
  • Correction d’un cas où la consommation de mémoire était trop élevée à cause du squashing dans les requêtes INSERT INTO ... SELECT ou CREATE TABLE AS SELECT. #69469 (Yarik Briukhovetskyi).
  • Les instructions SHOW COLUMNS et SHOW INDEX fonctionnent désormais correctement si le nom de la table contient des points. #69514 (Salvatore Mesoraca).
  • L’utilisation du query cache pour les requêtes avec un mode d’overflow != ‘throw’ est désormais interdite. Cela évite que des résultats de requête potentiellement tronqués et incorrects ne soient stockés dans le query cache. (issue #67476). #69549 (Robert Schulze).
  • Conserver l’ordre d’origine des conditions lors du déplacement vers prewhere. Auparavant, l’ordre pouvait changer, ce qui pouvait entraîner l’échec de requêtes lorsque cet ordre est important. #69560 (Kruglov Pavel).
  • Corriger le prétraitement des requêtes multiples de Keeper après une erreur ZNOAUTH. #69627 (Antonio Andelic).
  • Corriger METADATA&#95;MISMATCH, qui pouvait survenir à cause de TTL avec une clause WHERE dans DatabaseReplicated lors de la création d’une nouvelle replica. #69736 (Nikolay Degterinsky).
  • Corriger le paramètre tracked_file_ttl_sec de StorageS3(Azure)Queue. Nous l’écrivions dans Keeper avec la clé tracked_file_ttl_sec, mais le lisions comme tracked_files_ttl_sec, ce qui était une faute de frappe. #69742 (Kseniia Sumarokova).
  • Utiliser tryconvertfieldtotype dans gethyperrectangleforrowgroup. #69745 (Miсhael Stetsyuk).
  • Annulation de “Fix prewhere without columns and without adaptive index granularity (almost w/o anything)”’. En raison de ce retour en arrière, des erreurs peuvent survenir lors de la lecture de parties de données produites par d’anciennes versions de ClickHouse (probablement 2021 ou antérieures). #68897 (Alexander Gololobov).

version de ClickHouse 24.8 LTS, 2024-08-20. Presentation, Video

Changement non rétrocompatible

  • clickhouse-client et clickhouse-local utilisent désormais le mode multi-requête par défaut (au lieu du mode requête unique). Par exemple, clickhouse-client -q "SELECT 1; SELECT 2" fonctionne désormais, alors qu’auparavant il fallait ajouter --multiquery (ou -n). L’option --multiquery/-n est devenue obsolète. Les requêtes INSERT dans des instructions multi-requêtes sont traitées différemment selon leur clause FORMAT : si le FORMAT est VALUES (le cas le plus courant), la fin de l’instruction INSERT est marquée par un point-virgule final ; à la fin de la requête. Pour tous les autres FORMATs (par ex. CSV ou JSONEachRow), la fin de l’instruction INSERT est marquée par deux sauts de ligne \n\n à la fin de la requête. #63898 (FFish).
  • Dans les versions précédentes, il était possible d’utiliser une syntaxe alternative pour les types de données LowCardinality en ajoutant WithDictionary au nom du type de données. Il s’agissait d’une première implémentation fonctionnelle, qui n’a jamais été documentée ni exposée publiquement. Elle est désormais dépréciée. Si vous avez utilisé cette syntaxe, vous devez exécuter ALTER sur vos tables et renommer les types de données en LowCardinality. #66842 (Alexey Milovidov).
  • Correction d’erreurs logiques avec le moteur Buffer utilisé avec une table de destination distribuée. Il s’agit d’un changement non rétrocompatible : les requêtes utilisant Buffer avec une table de destination distribuée peuvent cesser de fonctionner si la table apparaît plus d’une fois dans la requête (par ex. dans une auto-jointure). #67015 (vdimir).
  • Dans les versions précédentes, l’appel de fonctions de distributions aléatoires basées sur la fonction gamma (comme Chi-Squared, Student, Fisher) avec des arguments négatifs proches de zéro entraînait des calculs très longs ou une boucle infinie. Dans la nouvelle version, appeler ces fonctions avec des arguments nuls ou négatifs produira une exception. Cela clôt #67297. #67326 (Alexey Milovidov).
  • La table système text_log est activée par défaut. Cela reste entièrement compatible avec les versions précédentes, mais vous pourriez constater une légère augmentation de l’utilisation du disque local (cette table système n’occupe qu’une très petite quantité d’espace disque). #67428 (Alexey Milovidov).
  • Dans les versions précédentes, arrayWithConstant pouvait être lent lorsqu’il devait générer de très grands tableaux. Dans la nouvelle version, il est limité à 1 Go par tableau. Cela clôt #32754. #67741 (Alexey Milovidov).
  • Correction de la syntaxe du modificateur REPLACE (il n’est plus permis d’omettre les parenthèses). #67774 (Azat Khuzhin).
  • Rétroporté dans #68349 : réimplémentation du 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 le type de données encodé en binaire. Désormais, tout type ayant déjà été inséré dans une colonne Dynamic peut être lu depuis celle-ci comme sous-colonne. #68132 (Kruglov Pavel).

Nouvelle fonctionnalité

  • Ajout d’un nouveau paramètre MergeTree deduplicate_merge_projection_mode pour contrôler les projections pendant les fusions (pour certains moteurs) et la requête OPTIMIZE DEDUPLICATE. Options prises en charge : throw (déclencher une exception si la projection n’est pas entièrement prise en charge pour le moteur *MergeTree), drop (supprimer la projection pendant la fusion si elle ne peut pas elle-même être fusionnée de manière cohérente) et rebuild (reconstruire la projection depuis zéro, ce qui est une opération coûteuse). #66672 (jsc0218).
  • Ajout de la colonne virtuelle _etag pour le moteur de table S3. Corrige #65312. #65386 (skyoct).
  • Ajout d’un mécanisme de balisage (espace de noms) pour le cache de requêtes. Les mêmes requêtes avec des tags différents sont considérées comme distinctes par le cache de requêtes. Exemple : SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'abc' et SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'def' créent désormais des entrées de cache de requêtes différentes. #68235 (sakulali).
  • Prise en charge de davantage de variantes de la strictesse de JOIN (LEFT/RIGHT SEMI/ANTI/ANY JOIN) avec des conditions d’inégalité impliquant des colonnes des tables de gauche et de droite. Par ex. t1.y < t2.y (voir le paramètre allow_experimental_join_condition). #64281 (lgbo).
  • Interprétation du partitionnement de style Hive pour différents moteurs (File, URL, S3, AzureBlobStorage, HDFS). Le partitionnement de style Hive organise les données dans des sous-répertoires partitionnés, ce qui permet d’interroger et de gérer efficacement de grands jeux de données. Pour l’instant, il crée uniquement des colonnes virtuelles avec le nom et les données appropriés. La PR suivante introduira le filtrage approprié des données (gain de performances). #65997 (Yarik Briukhovetskyi).
  • Ajout de la fonction printf pour la compatibilité avec Spark (mais vous pouvez utiliser la fonction existante format). #66257 (李扬).
  • Ajout des options restore_replace_external_engines_to_null et restore_replace_external_table_functions_to_null pour remplacer les moteurs externes et les moteurs de table par le moteur Null, ce qui peut être utile pour les tests. Cela doit fonctionner pour RESTORE et la création explicite de tables. #66536 (Ilya Yatsishin).
  • Ajout de la prise en charge de la lecture de la géométrie MULTILINESTRING au format WKT à l’aide de la fonction readWKTLineString. #67647 (Jacob Reckhard).
  • Ajout d’une nouvelle fonction de table fuzzQuery. Cette fonction permet de modifier une chaîne de requête donnée à l’aide de variations aléatoires. Exemple : SELECT query FROM fuzzQuery('SELECT 1') LIMIT 5;. #67655 (pufit).
  • Ajout de la requête ALTER TABLE ... DROP DETACHED PARTITION ALL pour supprimer toutes les partitions détachées. #67885 (Duc Canh Le).
  • Ajout de la statistique rows_before_aggregation_at_least à la réponse de la requête lorsqu’un nouveau paramètre, rows_before_aggregation, est activé. Cette statistique représente le nombre de lignes lues avant l’agrégation. Dans le contexte d’une requête distribuée, lors de l’utilisation de la fonction d’agrégation group by ou max sans limit, rows_before_aggregation_at_least peut refléter le nombre de lignes traitées par la requête. #66084 (morning-color).
  • Prise en charge de la requête OPTIMIZE sur les tables Join afin de réduire leur empreinte mémoire. #67883 (Duc Canh Le).
  • Permet d’exécuter instantanément une requête dans play si vous ajoutez &run=1 dans l’URL #66457 (Aleksandr Musorin).

Fonctionnalité expérimentale

  • Implémentation d’un nouveau type de données JSON. #66444 (Kruglov Pavel).
  • Ajout du nouveau moteur de table TimeSeries. #64183 (Vitaly Baranov).
  • Ajout d’un nouveau moteur de stockage expérimental Kafka pour stocker les offsets dans Keeper au lieu de s’appuyer sur leur commit dans Kafka. Cela rend atomique le commit dans les tables ClickHouse par rapport à la consommation depuis la file d’attente. #57625 (János Benjamin Antal).
  • Utilisation d’une méthode adaptative de calcul de la taille des tâches de lecture (adaptative signifie qu’elle dépend de la taille des colonnes lues) pour les répliques parallèles. #60377 (Nikita Taranov).
  • Ajout du type de statistiques count_min (count-min sketches), qui fournit des estimations de sélectivité pour des prédicats d’égalité comme col = 'val'. Les types de données pris en charge sont les chaînes, les dates, datatime et les types numériques. #65521 (JackyWoo).

Amélioration des performances

  • Le paramètre optimize_functions_to_subcolumns est désormais activé par défaut. #68053 (Anton Popov).
  • Stocke les métadonnées du répertoire de disque plain_rewritable dans la structure __meta, séparément des données MergeTree dans le stockage objet. Déplace le disque plain_rewritable vers une structure de répertoires plate. #65751 (Julia Kartseva).
  • Améliore le compactage des colonnes (une opération effectuée dans les requêtes INSERT) pour les types String/Array/Map/Variant/Dynamic en réservant à l’avance la mémoire nécessaire pour toutes les sous-colonnes. #67043 (Kruglov Pavel).
  • Accélère SYSTEM FLUSH LOGS ainsi que le vidage des logs à l’arrêt. #67472 (Sema Checherinda).
  • Améliore les performances globales des fusions en réduisant le surcoût des étapes d’ordonnancement des fusions. #68016 (Anton Popov).
  • Accélère la suppression des tables pour la requête DROP DATABASE et augmente à 16 la valeur par défaut de database_catalog_drop_table_concurrency. #67228 (Nikita Mikhaylov).
  • Évite de surallouer de la capacité à une colonne de type Array lors de l’écriture au format ORC. Les performances augmentent de 15 % pour une colonne Array. #67879 (李扬).
  • Accélère considérablement les mutations sur les tables MergeTree non répliquées. #66911 #66909 (Alexey Milovidov).

Amélioration

  • Le paramètre allow_experimental_analyzer est renommé en enable_analyzer. L’ancien nom est conservé sous forme d’alias. Cela signifie que l’analyzer n’est plus en bêta et est désormais pleinement promu pour la production. #66438 (Nikita Mikhaylov).
  • Amélioration de l’inférence de schéma des valeurs de date et d’heure. Désormais, DateTime64 n’est utilisé que lorsque la valeur de date et d’heure comporte une partie fractionnaire ; sinon, le type DateTime classique est utilisé. L’inférence de Date/DateTime est désormais plus stricte, en particulier lorsque date_time_input_format='best_effort', afin d’éviter d’inférer des valeurs de date et d’heure à partir de chaînes dans certains cas limites. #68382 (Kruglov Pavel).
  • Le serveur ClickHouse prend désormais en charge le nouveau paramètre max_keep_alive_requests. Pour les connexions HTTP keep-alive au serveur, il fonctionne de concert avec keep_alive_timeout : si le délai d’inactivité n’a pas expiré, mais que plus de max_keep_alive_requests requêtes ont déjà été effectuées via cette connexion, celle-ci sera fermée par le serveur. #61793 (Nikita Taranov).
  • Diverses améliorations de l’Advanced dashboard. Ceci clôt #67697. Ceci clôt #63407. Ceci clôt #51129. Ceci clôt #61204. #67701 (Alexey Milovidov).
  • Ne pas exiger de privilège pour REMOTE lors de la création d’une table Distributed : un privilège pour le moteur Distributed suffit. #65419 (jsc0218).
  • Ne pas transmettre explicitement les logs de Keeper dans l’image Docker afin de permettre leur surcharge. #65564 (Azat Khuzhin).
  • Introduction du paramètre use_same_password_for_base_backup pour les requêtes BACKUP et RESTORE, permettant de créer et de restaurer des sauvegardes incrémentielles vers/depuis des archives protégées par mot de passe. #66214 (Samuele).
  • Ignorer async_load_databases pour la requête ATTACH (auparavant, ATTACH pouvait se terminer avant que les tables ne soient attachées). #66240 (Azat Khuzhin).
  • Ajout de logs et de métriques pour les connexions rejetées (lorsque les ressources sont insuffisantes). #66410 (Alexander Tokmakov).
  • Prise en charge correcte du type UUID pour le moteur MongoDB. #66671 (Azat Khuzhin).
  • Ajout de métriques de retard de réplication et de temps de reprise. #66703 (Miсhael Stetsyuk).
  • Ajout de la métrique DiskS3NoSuchKeyErrors. #66704 (Miсhael Stetsyuk).
  • Garantit le bon fonctionnement de la clause COMMENT pour tous les moteurs de table. #66832 (Joe Lynch).
  • La fonction mapFromArrays accepte désormais Map(K, V) comme premier argument. Par exemple, SELECT mapFromArrays(map('a', 4, 'b', 4), ['aa', 'bb']) fonctionne maintenant et renvoie {('a',4):'aa',('b',4):'bb'}. De plus, si le 1er argument est un Array, il peut désormais aussi être de type Array(Nullable(T)) ou Array(LowCardinality(Nullable(T))), tant que les valeurs effectives du tableau ne sont pas NULL. #67103 (李扬).
  • Lecture de la configuration de clickhouse-local depuis ~/.clickhouse-local. #67135 (Azat Khuzhin).
  • Renommage du setting input_format_orc_read_use_writer_time_zone en input_format_orc_reader_timezone et possibilité, pour l’utilisateur, de définir le fuseau horaire du lecteur. #67175 (kevinyhzou).
  • Réduction du niveau de l’erreur Socket is not connected lorsque la connexion HTTP est immédiatement réinitialisée par le pair après l’établissement de la connexion ; clôt #34218. #67177 (vdimir).
  • Ajout de la possibilité de charger des dashboards pour system.dashboards depuis la config (une fois définis, ils remplacent le préréglage de dashboards par défaut). #67232 (Azat Khuzhin).
  • Les window functions en SQL sont traditionnellement en snake case. ClickHouse utilise camelCase, de nouveaux alias denseRank() et percentRank() ont donc été créés. Ces nouvelles fonctions peuvent être appelées exactement comme les fonctions d’origine dense_rank() et percent_rank(). Les syntaxes snake case et camelCase restent toutes deux utilisables. Un nouveau test a également été ajouté pour chacune de ces fonctions. Cela clôt #67042. #67334 (Peter Nguyen).
  • Détection automatique du format du configuration file s’il n’est pas en .xml, .yml ou .yaml. Si le fichier commence par <, il peut s’agir de XML ; sinon, il peut s’agir de YAML. Cela est utile lorsqu’un configuration file est fourni via un pipe : clickhouse-server --config-file <(echo "hello: world"). #67391 (sakulali).
  • Les fonctions formatDateTime et formatDateTimeInJodaSyntax considèrent désormais leur paramètre de format comme facultatif. S’il n’est pas spécifié, les format strings %Y-%m-%d %H:%i:%s et yyyy-MM-dd HH:mm:ss sont supposées. Example : SELECT parseDateTime('2021-01-04 23:12:34') renvoie désormais la valeur DateTime 2021-01-04 23:12:34 (auparavant, cela levait une exception). #67399 (Robert Schulze).
  • Nouvelle tentative automatique des requêtes Keeper dans KeeperMap lorsqu’elles échouent à cause d’un timeout ou d’une perte de connexion. #67448 (Antonio Andelic).
  • Ajout de -no-pie aux builds Linux Aarch64 pour permettre une introspection correcte et la résolution des symboles dans les stacktraces après un redémarrage de ClickHouse. #67916 (filimonov).
  • Ajout de profile events pour les merges et les mutations afin d’améliorer l’introspection. #68015 (Anton Popov).
  • Suppression des logs inutiles pour MergeTree non répliqué. #68238 (Daniil Ivanik).

Amélioration de la compilation/des tests/du packaging

  • Le check des tests d’intégration instables exécute désormais chaque cas de test plusieurs fois afin de détecter davantage de problèmes et de rendre les tests plus fiables. Il utilise la bibliothèque pytest-repeat pour exécuter plusieurs fois un cas de test dans le même environnement. Il est important de nettoyer les tables et autres entités à la fin d’un cas de test pour qu’il réussisse. Cette approche est bien plus rapide que plusieurs exécutions de pytest, car elle ne démarre les conteneurs nécessaires qu’une seule fois. #66986 (Ilya Yatsishin).
  • L’utilisation de CLion avec ClickHouse n’est plus bloquée. Dans les versions précédentes, CLion se figeait pendant une minute à chaque frappe. Cela clôt #66994. #66995 (Alexey Milovidov).
  • getauxval : évite un crash lors d’une réexécution sous sanitizer en raison de l’entropie ASLR élevée dans les noyaux Linux récents. #67081 (Raúl Marín).
  • Certaines parties du code du client ont été extraites dans un seul fichier, et le niveau d’optimisation le plus élevé possible leur est appliqué, même pour les builds de débogage. Cela clôt : #65745. #67215 (Nikita Mikhaylov).

Correction de bugs

  • Pertinent uniquement pour le Data type Variant expérimental. Corrige un plantage avec le type Variant + AggregateFunction. #67122 (Kruglov Pavel).
  • Corrige un plantage dans DistributedAsyncInsert lorsque la connection est vide. #67219 (Pablo Marcos).
  • Corrige le plantage de uniq et uniqTheta avec l’argument tuple(). Ferme #67303. #67306 (flynn).
  • Corrige #66026. Évite de parcourir des arguments de table function non résolus dans ReplaceTableNodeToDummyVisitor. #67522 (Dmitry Novik).
  • Corrige un possible dépassement de pile dans la fonction JSONMergePatch. Cette fonction a été renommée de jsonMergePatch en JSONMergePatch, car le nom précédent était incorrect. L’ancien nom est toujours conservé pour des raisons de compatibilité. Améliore également le diagnostic des erreurs dans la fonction. Cela ferme #67304. #67756 (Alexey Milovidov).
  • Corrige un déréférencement de pointeur NULL, déclenché par une query spécialement conçue, qui faisait planter le server via hopEnd, hopStart, tumbleEnd et tumbleStart. #68098 (Salvatore Mesoraca).
  • Corrige Not-ready Set dans certaines system tables lors du filtrage avec des subqueries. #66018 (Michael Kolupaev).
  • Corrige la lecture des subcolumns après la query ALTER ADD COLUMN. #66243 (Anton Popov).
  • Corrige les littéraux booléens dans la query envoyée à la database externe (pour des engines comme PostgreSQL). #66282 (vdimir).
  • Corrige le formatting d’une query avec une expression JOIN ON aliasée ; par exemple, ... JOIN t2 ON (x = y) AS e ORDER BY x doit être formaté comme ... JOIN t2 ON ((x = y) AS e) ORDER BY x. #66312 (vdimir).
  • Corrige cluster() pour le secret inter-server (préserve l’utilisateur initial comme auparavant). #66364 (Azat Khuzhin).
  • Corrige une possible erreur de runtime lors de la conversion d’un field Array contenant des nulls en Array(Variant). #66727 (Kruglov Pavel).
  • Corrige un interblocage occasionnel dans Context::getDDLWorker. #66843 (Alexander Gololobov).
  • Corrige la création d’une table KeeperMap après un drop incomplet. #66865 (Antonio Andelic).
  • Corrige une erreur de part endommagée lors de la restauration sur un disk s3_plain_rewritable. #66881 (Vitaly Baranov).
  • Dans de rares cas, ClickHouse pouvait considérer des parts comme endommagées en raison de projections inattendues sur le disk. C’est désormais corrigé. #66898 (alesapin).
  • Correction d’une détection de format non valide lors de l’inférence de schéma, qui pouvait entraîner l’erreur logique « Le format ne prend pas en charge l’inférence de schéma. » #66899 (Kruglov Pavel).
  • Corrige un interblocage possible lors de l’annulation d’une requête avec des répliques parallèles. #66905 (Nikita Taranov).
  • Interdit create as select même lorsque database&#95;replicated&#95;allow&#95;heavy&#95;create est défini. C’était interdit sans exception dans la 23.12, et accidentellement autorisé par ce paramètre dans la 24.7 non publiée. #66980 (vdimir).
  • La lecture depuis numbers pouvait à tort lever une exception lorsque la limite max_rows_to_read était définie. Cela corrige #66992. #66996 (Alexey Milovidov).
  • Ajoute une conversion de type correcte aux fonctions de fenêtre lagInFrame et leadInFrame, ce qui corrige le test msan. #67091 (Yakov Olkhovskiy).
  • TRUNCATE DATABASE arrêtait auparavant la réplication comme s’il s’agissait d’une requête DROP DATABASE ; c’est corrigé. #67129 (Alexander Tokmakov).
  • Utilise un contexte client distinct dans clickhouse-local. #67133 (Vitaly Baranov).
  • Corrige l’erreur Cannot convert column because it is non constant in source stream but must be constant in result. pour une requête qui lit depuis la table Merge sur la table Distriburted avec un shard. #67146 (Nikolai Kochetov).
  • Corrige le comportement de ORDER BY all lorsque enable_order_by_all est désactivé et avec des répliques parallèles (également pour les requêtes distribuées). #67153 (Igor Nikonov).
  • Corrige l’utilisation incorrecte de input_format_max_bytes_to_read_for_schema_inference dans le cache de schéma. #67157 (Kruglov Pavel).
  • Corrige la fuite de mémoire pour count distinct lorsqu’une exception est levée pendant un group by sur une seule clé nullable. #67171 (Jet He).
  • Corrige une erreur dans l’optimisation qui convertit OUTER JOIN en INNER JOIN. Cela corrige #67156. Cela corrige #66447. Le bug a été introduit dans https://github.com/ClickHouse/ClickHouse/pull/62907. #67178 (Maksim Kita).
  • Corrige l’erreur Conversion from AggregateFunction(name, Type) to AggregateFunction(name, Nullable(Type)) is not supported. Le bug était causé par l’optimisation optimize_rewrite_aggregate_function_with_if. Corrige #67112. #67229 (Nikolai Kochetov).
  • Corrige une requête bloquée lors de l’utilisation d’un tuple vide comme lhs de la fonction IN. #67295 (Duc Canh Le).
  • Il était possible de créer des données JSON très profondément imbriquées, ce qui provoquait un débordement de pile lors de l’ignorance des champs inconnus. Cela clôt #67292. #67324 (Alexey Milovidov).
  • Correction de l’attachement d’une table ReplicatedMergeTree après une exception au démarrage. #67360 (Antonio Andelic).
  • Correction d’un segfault provoqué par un détachement incorrect du groupe de threads dans Aggregator. #67385 (Antonio Andelic).
  • Correction d’un autre cas où une fonction non déterministe est spécifiée dans la PK. #67395 (Nikolai Kochetov).
  • Correction d’un index bloom_filter qui cassait des requêtes avec des conditions un peu inhabituelles comme (k=2)=(k=2) ou has([1,2,3], k). #67423 (Michael Kolupaev).
  • Analyse correcte d’un nom de fichier/URI contenant :: s’il ne s’agit pas d’une archive. #67433 (Antonio Andelic).
  • Correction de l’attente des tâches dans ~WriteBufferFromS3 lorsque WriteBuffer a été annulé. #67459 (Kseniia Sumarokova).
  • Protection des répertoires temporaires de parts contre leur suppression pendant RESTORE. #67491 (Vitaly Baranov).
  • Correction de l’exécution des fonctions imbriquées à court-circuit. #67520 (Kruglov Pavel).
  • Correction de Logical error: Expected the argument №N of type T to have X rows, but it has 0. L’erreur pouvait se produire dans une requête distante avec une expression constante dans GROUP BY (avec le nouvel analyseur). #67536 (Nikolai Kochetov).
  • Correction des jointures sur des Tuple contenant des NULL : certaines requêtes avec le nouvel analyseur et NULL à l’intérieur du tuple dans la section JOIN ON renvoyaient des résultats incorrects. #67538 (vdimir).
  • Correction de la replanification redondante de FileCache::freeSpaceRatioKeepingThreadFunc() dans le cas d’un cache plein non évictable. #67540 (Kseniia Sumarokova).
  • Correction de l’insertion dans des moteurs de type stream (Kafka, RabbitMQ, NATS) via l’interface HTTP. #67554 (János Benjamin Antal).
  • Correction de la fonction toStartOfWeek, qui renvoyait un résultat erroné avec une faible valeur DateTime64. #67558 (Yarik Briukhovetskyi).
  • Correction de la création d’une vue avec une CTE récursive. #67587 (Yakov Olkhovskiy).
  • Correction de Logical error: 'file_offset_of_buffer_end <= read_until_position' dans le cache du système de fichiers. Clôt #57508. #67623 (Kseniia Sumarokova).
  • Corrige #62282. Suppression de l’appel à convertFieldToString() et ajout d’un code de sérialisation spécifique à chaque type de données. La substitution des vues paramétrées était défaillante pour plusieurs types de données lorsque la valeur du paramètre était une fonction ou une expression renvoyant une instance de type de données. #67654 (Shankar).
  • Corrige un crash sur percent_rank. Le type de frame par défaut de percent_rank devient range unbounded preceding and unbounded following. La frame de fenêtre par défaut de IWindowFunction est désormais prise en compte, et les fonctions de fenêtre sans définition de frame en SQL peuvent maintenant être correctement réparties dans différents WindowTransfomers. #67661 (lgbo).
  • Corrige le rechargement des UDF SQL avec UNION. Auparavant, le redémarrage du serveur pouvait rendre une UDF invalide. #67665 (Antonio Andelic).
  • Corrige une possible erreur logique “Unexpected return type from if” avec le type expérimental Variant et le paramètre activé use_variant_as_common_type dans la fonction if avec des Tuples et des Maps. #67687 (Kruglov Pavel).
  • En raison d’un bug du noyau Linux, une query peut se bloquer dans TimerDescriptor::drain. Cela clôt #37686. #67702 (Alexey Milovidov).
  • Corrige la finalisation de la commande RESTORE ON CLUSTER. #67720 (Vitaly Baranov).
  • Corrige le blocage d’un dictionnaire en cas de CANNOT_SCHEDULE_TASK pendant le chargement. #67751 (Azat Khuzhin).
  • Les queries telles que SELECT count() FROM t WHERE cast(c = 1 or c = 9999 AS Bool) SETTINGS use_skip_indexes=1, avec des index Bloom filter sur c, fonctionnent désormais correctement. #67781 (jsc0218).
  • Corrige un résultat d’agrégation erroné dans certaines queries avec agrégation sans clés ni filtre, clôt #67419. #67804 (vdimir).
  • Valide les types de données expérimentaux/suspects dans ALTER ADD/MODIFY COLUMN. #67911 (Kruglov Pavel).
  • Corrige l’analyse de DateTime64 après constant folding dans les requêtes distribuées, clôt #66773. #67920 (vdimir).
  • Corrige un résultat count() erroné lorsqu’une fonction non déterministe est présente dans le prédicat. #67922 (János Benjamin Antal).
  • Corrige le calcul de la limite souple maximale du nombre de threads dans les environnements conteneurisés où le nombre de CPU utilisables est limité. #67963 (Robert Schulze).
  • Désormais, ClickHouse ne considère plus une part comme corrompue si la projection n’existe pas sur le disque mais figure dans checksums.txt. #68003 (alesapin).
  • Correction du saut des parts non modifiées dans les mutations avec le nouvel analyseur. Auparavant, avec l’analyseur activé, les données d’une part pouvaient être réécrites par une mutation, même si celle-ci n’affectait pas cette part selon le prédicat. #68052 (Anton Popov).
  • Supprime une optimisation incorrecte qui retirait le tri dans les sous-requêtes utilisant OFFSET. Corrige #67906. #68099 (Graham Campbell).
  • Tentative de correction de Block structure mismatch in AggregatingStep stream: different types pour l’optimisation des projections agrégées. #68107 (Nikolai Kochetov).
  • Tentative de correction d’un crash de Postgres lorsqu’une requête est annulée. #68288 (Kseniia Sumarokova).
  • Correction de l’absence du mode de synchronisation de replica dans la requête SYSTEM SYNC REPLICA. #68326 (Duc Canh Le).

Version 24.7 de ClickHouse, 2024-07-30. Présentation, Vidéo

changement non rétrocompatible

  • Interdiction de CRATE MATERIALIZED VIEW ... ENGINE Replicated*MergeTree POPULATE AS SELECT ... avec des bases de données Replicated. #63963 (vdimir).
  • clickhouse-keeper-client n’acceptera désormais les chemins que dans des littéraux de chaîne, par exemple ls '/hello/world', et non des chaînes non délimitées comme ls /hello/world. #65494 (Alexey Milovidov).
  • La métrique KeeperOutstandingRequets a été renommée en KeeperOutstandingRequests. #66206 (Robert Schulze).
  • Suppression du champ is_deterministic de la table system.functions. #66630 (Alexey Milovidov).
  • La fonction tuple essaiera désormais de construire des tuples nommés dans les requêtes (contrôlé par enable_named_columns_in_function_tuple). Ajout de la fonction tupleNames pour extraire les noms des tuples. #54881 (Amos Bird).
  • Modification du fonctionnement de la déduplication pour les vues matérialisées. Correction de nombreux cas, par exemple : - sur la table de destination : les données sont réparties en 2 blocs ou plus, et ces blocs sont considérés comme des doublons lorsqu’ils sont insérés en parallèle. - sur la table de destination de la MV : les blocs identiques sont dédupliqués, ce qui se produit lorsque la MV produit souvent des données identiques à partir de données d’entrée différentes en raison de l’agrégation. - sur la table de destination de la MV : les blocs identiques provenant de différentes MV sont dédupliqués. #61601 (Sema Checherinda).
  • Les fonctions bitShiftLeft et bitShitfRight renvoient une erreur si les positions de décalage sont hors limites #65838 (Pablo Marcos).

Nouvelle fonctionnalité

  • Ajout de la prise en charge de ASOF JOIN pour l’algorithme full_sorting_join. #55051 (vdimir).
  • Prise en charge de l’authentification JWT dans clickhouse-client (disponible uniquement dans ClickHouse Cloud). #62829 (Konstantin Bogdanov).
  • Ajout des fonctions SQL changeYear, changeMonth, changeDay, changeHour, changeMinute, changeSecond. Par exemple, SELECT changeMonth(toDate('2024-06-14'), 7) renvoie la date 2024-07-14. #63186 (cucumber95).
  • Introduction de scripts de démarrage permettant d’exécuter des requêtes préconfigurées au démarrage. #64889 (pufit).
  • Prise en charge de accept_invalid_certificate dans la config du client afin de lui permettre de se connecter en TCP sécurisé à un serveur utilisant un certificat auto-signé ; peut être utilisé comme raccourci pour les client settings openSSL correspondants verificationMode=none + invalidCertificateHandler.name=AcceptCertificateHandler. #65238 (peacewalker122).
  • Ajout de system.error_log, qui contient l’historique des valeurs d’erreur de la table system.errors, périodiquement écrites sur disque. #65381 (Pablo Marcos).
  • Ajout de la fonction d’agrégation groupConcat. Elle est à peu près équivalente à arrayStringConcat( groupArray(column), ','). Elle peut recevoir 2 paramètres : un délimiteur de chaîne et le nombre d’éléments à traiter. #65451 (Yarik Briukhovetskyi).
  • Ajout du stockage AzureQueue. #65458 (Kseniia Sumarokova).
  • Ajout d’un nouveau paramètre pour désactiver ou activer l’écriture de l’index de page dans les fichiers Parquet. #65475 (lgbo).
  • Introduction de la config serveur logger.console_log_level pour contrôler le niveau de journalisation dans la console (si activé). #65559 (Azat Khuzhin).
  • Ajout automatique d’un caractère générique * à la fin d’un chemin de répertoire avec la table function file. #66019 (Zhidong (David) Guo).
  • Ajout de l’option --memory-usage au client en mode non interactif. #66393 (vdimir).
  • Création d’un client interactif pour clickhouse-disks, avec ajout d’un disque local à partir du répertoire local. #64446 (Daniil Ivanik).
  • Lorsqu’un lightweight delete se produit sur une table avec une ou plusieurs projections, les utilisateurs peuvent soit lever une exception (par défaut), soit supprimer la projection. #65594 (jsc0218).
  • Ajout de tables système contenant les principales informations sur toutes les tables détachées. #65400 (Konstantin Morozov).

Fonctionnalité expérimentale

  • Modification de la sérialisation binaire du type de données Variant : ajout du mode compact pour éviter d’écrire plusieurs fois le même discriminateur pour les granules ne contenant qu’une seule variante ou uniquement des valeurs NULL. Ajout du paramètre MergeTree use_compact_variant_discriminators_serialization, activé par défaut. Notez que le type Variant reste expérimental et qu’une modification non rétrocompatible de la sérialisation est acceptable. #62774 (Kruglov Pavel).
  • Prise en charge d’un backend de stockage sur disque pour ClickHouse Keeper. #56626 (Han Fei).
  • Refactorisation des fonctions JSONExtract, avec prise en charge d’un plus grand nombre de types, y compris le type expérimental Dynamic. #66046 (Kruglov Pavel).
  • Prise en charge de la sous-colonne map NULL pour les sous-colonnes Variant et Dynamic. #66178 (Kruglov Pavel).
  • Correction de la lecture des sous-colonnes Dynamic à partir d’une table Memory modifiée. Auparavant, si le paramètre max_types d’un type Dynamic était modifié dans une table Memory via alter, la lecture ultérieure des sous-colonnes pouvait renvoyer un résultat erroné. #66066 (Kruglov Pavel).
  • Ajout de la prise en charge de cluster_for_parallel_replicas lors de l’utilisation du mode parallel replicas avec une clé personnalisée. Cela permet d’utiliser le mode parallel replicas avec une clé personnalisée sur des tables MergeTree. #65453 (Antonio Andelic).

Amélioration des performances

  • Remplacement de l’algorithme de conversion des entiers en chaînes par un algorithme plus rapide (d’une version modifiée de amdn/itoa à une version modifiée de jeaiii/itoa). #61661 (Raúl Marín).
  • Les tailles des tables de hachage créées par la jointure (algorithme parallel_hash) sont désormais collectées et mises en cache. Ces informations serviront à préallouer de l’espace dans les tables de hachage lors des exécutions suivantes de requêtes, afin de réduire le temps consacré à leur redimensionnement. #64553 (Nikita Taranov).
  • Optimisation des requêtes avec ORDER BY sur la clé primaire et WHERE contenant une condition à forte sélectivité grâce au buffering. Ce comportement est contrôlé par le paramètre read_in_order_use_buffering (activé par défaut) et peut augmenter l’utilisation mémoire de la requête. #64607 (Anton Popov).
  • Amélioration des performances de chargement des métadonnées plain_rewritable. #65634 (Alexey Milovidov).
  • L’attachement de tables sur des disques en lecture seule utilisera moins de ressources en ne chargeant pas les parties obsolètes. #65635 (Alexey Milovidov).
  • Prise en charge des hyperrectangles min-max pour les index Set. #65676 (AntiTopQuark).
  • Déchargement de l’index primaire des parties obsolètes afin de réduire l’utilisation mémoire totale. #65852 (Anton Popov).
  • Les fonctions replaceRegexpAll et replaceRegexpOne sont désormais nettement plus rapides lorsque le pattern est trivial, c’est-à-dire qu’il ne contient ni métacaractères, ni classes de patterns, ni indicateurs, ni caractères de groupement, etc. (Merci à Taiyang Li). #66185 (Robert Schulze).
  • Requêtes S3 : réduction du temps de réessai pour les requêtes, augmentation du nombre de tentatives pour les sauvegardes. 8,5 minutes et 100 tentatives pour les requêtes, 1,2 heures et 1 000 tentatives pour la restauration de sauvegardes. #65232 (Sema Checherinda).
  • Prise en charge de l’optimisation LIMIT dans le query plan. Prise en charge du pushdown de LIMIT pour le stockage PostgreSQL et la fonction de table. #65454 (Maksim Kita).
  • Amélioration de l’équilibrage de charge de ZooKeeper. La session actuelle n’expire pas tant que les nœuds optimaux ne redeviennent pas disponibles, malgré fallback_session_lifetime. Ajout de la prise en charge de l’équilibrage tenant compte des AZ. #65570 (Alexander Tokmakov).
  • DatabaseCatalog supprime les tables plus rapidement en utilisant jusqu’à database_catalog_drop_table_concurrency threads. #66065 (Sema Checherinda).

Amélioration

  • Amélioration de l’équilibrage de charge de ZooKeeper. La session en cours n’expire pas tant que les nœuds optimaux ne redeviennent pas disponibles, malgré fallback_session_lifetime. Ajout de la prise en charge de l’équilibrage sensible aux AZ. #65570 (Alexander Tokmakov).
  • Le réglage optimize_trivial_insert_select est désactivé par défaut. Dans la plupart des cas, cela devrait être bénéfique. Néanmoins, si vous constatez un ralentissement de INSERT SELECT ou une augmentation de l’utilisation de la mémoire, vous pouvez le réactiver ou utiliser SET compatibility = '24.6'. #58970 (Alexey Milovidov).
  • Affiche une stacktrace et des informations de diagnostic si clickhouse-client ou clickhouse-local se ferme brutalement. #61109 (Alexander Tokmakov).
  • Le résultat de SHOW INDEX | INDEXES | INDICES | KEYS était auparavant trié selon les noms des colonnes de la clé primaire. Comme cela n’était pas intuitif, le résultat est désormais trié selon la position des colonnes de la clé primaire au sein de celle-ci. #61131 (Robert Schulze).
  • Modification du fonctionnement de la déduplication pour les vues matérialisées. Correction de nombreux cas, par exemple : - sur la table de destination : les données sont divisées en 2 blocs ou plus, et ces blocs sont considérés comme des doublons lorsqu’un bloc est inséré en parallèle. - sur la table de destination de la MV : les blocs identiques sont dédupliqués, ce qui se produit lorsque la MV produit souvent des données identiques à partir de données d’entrée différentes en raison d’une agrégation. - sur la table de destination de la MV : les blocs identiques provenant de différentes MV sont dédupliqués. #61601 (Sema Checherinda).
  • Prise en charge de la lecture de données DeltaLake partitionnées. Déduction du schéma DeltaLake à partir des métadonnées plutôt que des données. #63201 (Kseniia Sumarokova).
  • Dans les protocoles composables, la couche TLS n’acceptait que les paramètres certificateFile et privateKeyFile. https://clickhouse.com/docs/operations/settings/composable-protocols. #63985 (Anton Ivashkin).
  • Ajout de l’événement de profil SelectQueriesWithPrimaryKeyUsage, qui indique combien de requêtes SELECT utilisent la clé primaire pour évaluer la clause WHERE. #64492 (0x01f).
  • Corrections et améliorations liées à StorageS3Queue. Déduit une valeur par défaut pour s3queue_processing_threads_num en fonction du nombre de CPU cores physiques du serveur (au lieu de l’ancienne valeur par défaut de 1). Définit la valeur par défaut de s3queue_loading_retries à 10. Corrige la possible présence d’un vague “Uncaught exception” dans la colonne d’exception de system.s3queue. N’incrémente pas le nombre de tentatives en cas d’exception MEMORY_LIMIT_EXCEEDED. Déplace le commit des fichiers vers une étape postérieure à la fin complète de l’insertion dans la table afin d’éviter que des fichiers soient validés alors qu’ils n’ont pas été insérés. Ajoute les réglages s3queue_max_processed_files_before_commit, s3queue_max_processed_rows_before_commit, s3queue_max_processed_bytes_before_commit, s3queue_max_processing_time_sec_before_commit, afin de mieux contrôler le commit et le temps de flush. #65046 (Kseniia Sumarokova).
  • Prise en charge des alias dans la fonction de vue paramétrée (nouvel analyzer uniquement). #65190 (Kseniia Sumarokova).
  • Mise à jour pour masquer la clé de compte dans les journaux de azureBlobStorage. #65273 (SmitaRKulkarni).
  • Partition pruning pour les prédicats IN lorsque l’expression de filtre fait partie de l’expression PARTITION BY. #65335 (Eduard Karacharov).
  • arrayMin/arrayMax peuvent s’appliquer à tous les types de données comparables. #65455 (pn).
  • Amélioration de la comptabilisation de la mémoire pour cgroups v2 afin d’exclure la part occupée par le page cache. #65470 (Nikita Taranov).
  • Ne pas créer de paramètres de format pour chaque ligne lors de la sérialisation de chunks à insérer dans la table EmbeddedRocksDB. #65474 (Duc Canh Le).
  • Réduire l’invite de clickhouse-local à :) uniquement. getFQDNOrHostName() est trop lent sur MacOS, et nous ne voulons de toute façon pas de hostname dans l’invite de clickhouse-local. #65510 (Konstantin Bogdanov).
  • Éviter d’afficher un message de jemalloc à propos des arenas par CPU sur les machines virtuelles peu puissantes. #65532 (Alexey Milovidov).
  • Désactiver par défaut le téléchargement en arrière-plan du filesystem cache. Il sera réactivé lorsque nous aurons corrigé le problème pouvant entraîner « Memory limit exceeded », car la désallocation de mémoire se fait en dehors du contexte de la query (alors que le buffer est alloué dans le contexte de la query) si l’on utilise des threads de téléchargement en arrière-plan. De plus, nous devons ajouter un paramètre distinct pour définir la taille maximale à télécharger pour les workers en arrière-plan (actuellement, elle est limitée par max_file_segment_size, ce qui peut être trop élevé). #65534 (Kseniia Sumarokova).
  • Ajouter une nouvelle option à la config <config_reload_interval_ms> pour spécifier à quelle fréquence ClickHouse rechargera la config. #65545 (alesapin).
  • Implémenter l’encodage binaire pour les types de données ClickHouse et en ajouter la spécification dans la documentation. L’utiliser dans la sérialisation binaire de Dynamic, et permettre son utilisation dans les formats RowBinaryWithNamesAndTypes et Native via les paramètres. #65546 (Kruglov Pavel).
  • Les paramètres serveur compiled_expression_cache_size et compiled_expression_cache_elements_size sont désormais affichés dans system.server_settings. #65584 (Robert Schulze).
  • Ajouter la prise en charge de l’identification des utilisateurs basée sur l’extension x509 SubjectAltName. #65626 (Anton Kozlov).
  • clickhouse-local respectera max_server_memory_usage et max_server_memory_usage_to_ram_ratio définis dans le fichier de configuration. Il définira également par défaut l’utilisation mémoire maximale à 90 % de la mémoire système, comme le fait clickhouse-server. #65697 (Alexey Milovidov).
  • Ajouter un script pour sauvegarder vos fichiers vers ClickHouse. #65699 (Alexey Milovidov).
  • La source PostgreSQL prend désormais en charge l’annulation des requêtes. #65722 (Maksim Kita).
  • Faire en sorte que allow_experimental_analyzer soit contrôlé par l’initiateur pour les distributed queries. Cela garantit la compatibilité et la justesse des opérations dans des clusters exécutant des versions mixtes. #65777 (Nikita Mikhaylov).
  • Respecter la limite CPU du cgroup dans Keeper. #65819 (Antonio Andelic).
  • Permet d’utiliser la fonction concat avec des arguments vides :) select concat();. #65887 (李扬).
  • Permet de gérer les collections nommées dans clickhouse-local. #65973 (Alexey Milovidov).
  • Améliore les événements de profil liés à Azure. #65999 (alesapin).
  • Prend en charge la lecture de fichiers ORC selon le fuseau horaire utilisé lors de l’écriture. #66025 (kevinyhzou).
  • Ajoute des paramètres pour contrôler les connexions à PostgreSQL. Le paramètre postgresql_connection_attempt_timeout spécifie la valeur transmise au paramètre connect_timeout de l’URL de connexion. Le paramètre postgresql_connection_pool_retries spécifie le nombre de tentatives pour établir une connexion au point de terminaison PostgreSQL. #66232 (Dmitry Novik).
  • Réduit l’imprécision de input_wait_elapsed_us/elapsed_us dans system.processors_profile_log. #66239 (Azat Khuzhin).
  • Améliore les ProfileEvents pour le cache du système de fichiers. #66249 (zhukai).
  • Ajoute des paramètres pour ignorer la clause ON CLUSTER dans les requêtes de gestion des collections nommées avec le stockage répliqué. #66288 (MikhailBurdukov).
  • La fonction generateSnowflakeID permet désormais de spécifier un ID de machine comme paramètre afin d’éviter les collisions dans les grands clusters. #66374 (ZAWA_ll).
  • Désactive la suspension avec Ctrl+Z en mode interactif. Il s’agit d’un piège fréquent, et ce comportement n’est pas celui attendu par la quasi-totalité des utilisateurs. J’imagine que seuls quelques utilisateurs particulièrement experts pourraient apprécier de suspendre des applications de terminal en arrière-plan, mais je n’en connais aucun. #66511 (Alexey Milovidov).
  • Ajoute une option pour valider le type de clé primaire dans Dictionaries. Sans cette option, pour les layouts simples, tout type de colonne sera implicitement converti en UInt64. #66595 (MikhailBurdukov).

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

  • Vérifie les dépendances cycliques dans les requêtes CREATE/REPLACE/RENAME/EXCHANGE et lève une exception en cas de dépendance cyclique. Auparavant, de telles dépendances cycliques pouvaient provoquer un interblocage au démarrage du serveur. Corrige également certains bogues liés à la création des dépendances. #65405 (Kruglov Pavel).
  • Corrige les tailles inattendues des colonnes LowCardinality dans les appels de fonction. #65298 (Raúl Marín).
  • Corrige un crash dans maxIntersections. #65689 (Raúl Marín).
  • Corrige la réinitialisation de la clause VALID UNTIL dans la définition de l’utilisateur après un redémarrage. #66409 (Nikolay Degterinsky).
  • Corrige la colonne du temps restant dans SHOW MERGES. #66735 (Alexey Milovidov).
  • Query was cancelled pouvait s’afficher deux fois dans clickhouse-client. Ce comportement a été corrigé. #66005 (Nikita Mikhaylov).
  • Corrige un crash lors de l’utilisation de MaterializedMySQL (une fonctionnalité expérimentale non prise en charge) avec TABLE OVERRIDE, qui mappe un champ MySQL NULL vers un champ ClickHouse not NULL. #54649 (Filipp Ozinov).
  • Corrige une erreur logique lorsque l’expression PREWHERE ne lit aucune colonne et que la table n’a pas d’adaptive index granularity (table très ancienne). #59173 (Alexander Gololobov).
  • Corrige un bogue dans le buffer d’annulation lors de l’annulation d’une requête. #64478 (Sema Checherinda).
  • Corrige le remplissage des colonnes des parts à partir des métadonnées (lorsque columns.txt n’existe pas). #64757 (Azat Khuzhin).
  • Corrige un crash avec ALTER TABLE ... ON CLUSTER ... MODIFY SQL SECURITY. #64957 (pufit).
  • Corrige un crash lors de la destruction d’AccessControl : ajout d’un arrêt explicite. #64993 (Vitaly Baranov).
  • Élimine récursivement la fonction injective dans l’argument des fonctions uniq*. Cela fonctionnait correctement auparavant, mais a été cassé dans le nouvel analyzer. #65140 (Duc Canh Le).
  • Corrige un nom de projection inattendu dans une requête avec CTE. #65267 (wudidapaopao).
  • Exige le privilège dictGet lors de l’accès aux Dictionaries via une requête directe ou le moteur de table Dictionary. #65359 (Joe Lynch).
  • Corrige l’authentification S3 spécifique à l’utilisateur avec les sauvegardes incrémentielles. #65481 (Antonio Andelic).
  • Désactive l’optimisation non-intersecting-parts pour les requêtes avec FINAL lorsque l’optimisation read-in-order est activée. Cela pouvait entraîner des résultats de requête incorrects. Comme solution de contournement, désactivez do_not_merge_across_partitions_select_final et split_parts_ranges_into_intersecting_and_non_intersecting_final avant l’intégration de ce correctif. #65505 (Nikolai Kochetov).
  • Correction de l’exception Index out of bound for blob metadata lorsque tous les fichiers du batch de liste avaient été filtrés. #65523 (Kseniia Sumarokova).
  • Correction de NOT&#95;FOUND&#95;COLUMN&#95;IN&#95;BLOCK lors de la fusion de déduplication d’une projection. #65573 (Yakov Olkhovskiy).
  • Correction d’un bug dans MergeJoin. Une colonne dans une sérialisation sparse pouvait être traitée comme une colonne de son type imbriqué alors que la conversion requise n’avait pas été effectuée. #65632 (Nikita Taranov).
  • Correction d’un bug où le niveau de compatibilité ‘23.4’ n’était pas correctement appliqué. #65737 (cw5121).
  • Correction des tables ODBC comportant des champs Nullable. #65738 (Rodolphe Dugé de Bernonville).
  • Correction d’une data race dans TCPHandler, pouvant se produire lors d’une erreur fatale. #65744 (Kseniia Sumarokova).
  • Correction d’exceptions invalides dans la fonction parseDateTime avec les placeholders %F et %D. #65768 (Antonio Andelic).
  • Pour les requêtes qui lisent depuis PostgreSQL, annulation de la requête interne PostgreSQL une fois la requête ClickHouse terminée. Sinon, la requête ClickHouse ne peut pas être annulée tant que la requête interne PostgreSQL n’est pas terminée. #65771 (Maksim Kita).
  • Correction d’un bug dans la logique de court-circuit lorsque l’ancien analyzer et dictGetOrDefault sont utilisés. #65802 (jsc0218).
  • Correction d’un bug qui pouvait amener EmbeddedRocksDB avec écriture TTL à corrompre des fichiers SST. #65816 (Duc Canh Le).
  • Les fonctions bitTest, bitTestAll et bitTestAny renvoient désormais une erreur si l’index de bit spécifié est hors limites. #65818 (Pablo Marcos).
  • Le paramètre join_any_take_last_row est pris en charge dans toute requête avec hash join. #65820 (vdimir).
  • Meilleure gestion des conditions de join impliquant des vérifications IS NULL (par exemple, ON (a = b AND (a IS NOT NULL) AND (b IS NOT NULL) ) OR ( (a IS NULL) AND (b IS NULL) ) est réécrit en ON a <=> b), avec correction d’une optimisation incorrecte lorsque des conditions autres que IS NULL sont présentes. #65835 (vdimir).
  • Correction de l’augmentation de l’utilisation de la mémoire dans S3Queue. #65839 (Kseniia Sumarokova).
  • Correction de la gestion des ex æquo dans arrayAUC pour correspondre à sklearn. #65840 (gabrielmcg44).
  • Correction de problèmes potentiels avec les connexions TLS du protocole du serveur MySQL. #65917 (Azat Khuzhin).
  • Corrige d’éventuels problèmes liés aux connexions TLS du protocole client MySQL. #65938 (Azat Khuzhin).
  • Corrige la gestion de SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITE avec un timeout nul. #65941 (Azat Khuzhin).
  • Ajoute au cache d’inférence de schéma les paramètres manquants input_format_csv_skip_first_lines/input_format_tsv_skip_first_lines/input_format_csv_try_infer_numbers_from_strings/input_format_csv_try_infer_strings_from_quoted_tuples, car ils peuvent modifier le schéma obtenu. Cela évite des résultats d’inférence de schéma incorrects lorsque ces paramètres sont modifiés. #65980 (Kruglov Pavel).
  • La colonne _size dans le moteur S3 et la fonction de table S3 indique la taille d’un fichier à l’intérieur de l’archive, et non celle de l’archive elle-même. #65993 (Daniil Ivanik).
  • Corrige la résolution des sous-colonnes dynamiques dans l’analyzer et évite de lire la colonne entière lors de la lecture d’une sous-colonne dynamique. #66004 (Kruglov Pavel).
  • Corrige la fusion de config pour from_env avec des overrides replace. #66034 (Azat Khuzhin).
  • Corrige un possible blocage de GRPCServer lors de l’arrêt. #66061 (Vitaly Baranov).
  • Corrige plusieurs cas dans la fonction has avec des arguments LowCardinality non constants. #66088 (Anton Popov).
  • Corrige groupArrayIntersect. Le comportement était incorrect dans la fonction merge(). De plus, le comportement de deserialise() a été corrigé pour les données numériques et générales. #66103 (Yarik Briukhovetskyi).
  • Corrige un bug de dépassement de tampon dans l’implémentation de unbin/unhex. #66106 (Nikita Taranov).
  • Désactive l’optimisation merge-filters introduite dans #64760. Elle peut provoquer une exception si l’optimisation fusionne deux expressions de filtre sans appliquer d’évaluation en court-circuit. #66126 (Nikolai Kochetov).
  • Corrige le problème où le serveur ne parvenait pas à analyser des fichiers Avro encodés avec des arrays de taille de block négative, ce qui est désormais autorisé par la spécification Avro. #66130 (Serge Klochkov).
  • Corrige un bug dans le client ZooKeeper : une session pouvait rester bloquée dans un état inutilisable après avoir reçu une erreur matérielle de ZooKeeper. Par exemple, cela pouvait se produire à cause de la « soft memory limit » dans ClickHouse Keeper. #66140 (Alexander Tokmakov).
  • Corrige un problème dans SumIfToCountIfVisitor avec les entiers signés. #66146 (Raúl Marín).
  • Corrige un cas rare de valeur manquante dans le résultat d’une requête distribuée. #66174 (vdimir).
  • Corrige l’ordre d’analyse des champs de métadonnées dans StorageDeltaLake. #66211 (Kseniia Sumarokova).
  • Ne plus générer TIMEOUT_EXCEEDED pour le mode none_only_active de distributed_ddl_output_mode. #66218 (Alexander Tokmakov).
  • Corriger la gestion de la limite pour system.numbers_mt lorsqu’aucun index ne peut être utilisé. #66231 (János Benjamin Antal).
  • Correction de la détection par le serveur ClickHouse du nombre maximal de cœurs CPU utilisables tel que défini par cgroups v2 lorsque le serveur s’exécute dans un conteneur comme Docker. Plus précisément, les conteneurs exécutent souvent leur processus dans le cgroup racine, qui a un nom vide. Dans ce cas, ClickHouse ignorait les limites CPU définies par cgroups v2. #66237 (filimonov).
  • Corriger l’erreur Not-ready set lorsqu’une sous-requête avec IN est utilisée dans la contrainte. #66261 (Nikolai Kochetov).
  • Corriger le signalement des erreurs lors de la copie vers S3 ou AzureBlobStorage. #66295 (Vitaly Baranov).
  • Empêcher le watchdog de conserver les descripteurs de fichiers journaux supprimés du répertoire (après rotation). #66334 (Aleksei Filatov).
  • Corriger le bogue où logicalexpressionoptimizerpass perdait le type logique d’une constante. #66344 (pn).
  • Corriger l’erreur Column identifier is already registered avec group_by_use_nulls=true et le nouvel analyseur. #66400 (Nikolai Kochetov).
  • Corriger un résultat potentiellement incorrect pour les requêtes faisant des jointures et appliquant un filtre sur une table avec moteur externe (comme PostgreSQL), en raison d’un pushdown de filtre trop agressif. Désormais, les conditions de la clause WHERE ne seront pas envoyées à la base de données externe dans le cas d’une jointure externe avec une table externe. #66402 (vdimir).
  • Ajout de la matérialisation de colonne manquante pour la jointure croisée. #66413 (lgbo).
  • Corriger l’erreur Cannot find column pour les requêtes avec une expression constante dans la clé GROUP BY et le nouvel analyseur activé. #66433 (Nikolai Kochetov).
  • Éviter une possible erreur logique lors de l’import au format Npy en cas de niveau d’imbrication de tableau incorrect, et corriger les tests d’autres types d’erreurs. #66461 (Yarik Briukhovetskyi).
  • Corriger un résultat erroné de count() lorsqu’une fonction non déterministe est utilisée dans le prédicat. #66510 (Duc Canh Le).
  • Suivre correctement l’utilisation mémoire pour Allocator::realloc. #66548 (Antonio Andelic).
  • Corriger la lecture de mémoire non initialisée lors du hachage de tuples vides. #66562 (Alexey Milovidov).
  • Corriger un résultat invalide pour les requêtes avec WINDOW. Cela pouvait se produire lorsque les colonnes PARTITION utilisaient une sérialisation sparse et que les fonctions de fenêtre étaient exécutées en parallèle. #66579 (Nikolai Kochetov).
  • Correction de la suppression des collections nommées dans le stockage local. #66599 (János Benjamin Antal).
  • Correction du fait que column_length n’est pas mis à jour dans ColumnTuple::insertManyFrom. #66626 (lgbo).
  • Correction des erreurs Unknown identifier et Column is not under aggregate function pour les requêtes avec l’expression (column IS NULL). Le bug a été déclenché par #65088, uniquement avec l’analyseur désactivé. #66654 (Nikolai Kochetov).
  • Correction de l’erreur Method getResultType is not supported for QUERY query node lorsqu’une sous-requête scalaire était utilisée comme premier argument de IN (avec le nouvel analyseur). #66655 (Nikolai Kochetov).
  • Correction d’une possible erreur PARAMETER_OUT_OF_BOUND lors de la lecture d’une sous-colonne de Variant. #66659 (Kruglov Pavel).
  • Correction d’un cas rare de fusion bloquée après la suppression d’une colonne. #66707 (Raúl Marín).
  • Correction de l’assertion isUniqTypes lors d’un insert select depuis des sources distantes. #66722 (Sema Checherinda).
  • Correction d’une erreur logique dans PrometheusRequestHandler. #66621 (Vitaly Baranov).
  • Correction d’un cas lié à la fonction indexHint découvert par le fuzzer. #66286 (Anton Popov).
  • Correction du formatage de l’AST de ‘create table b empty as a’. #64951 (Michael Kolupaev).

Version 24.6 de ClickHouse, 2024-07-01. Présentation, Vidéo

changement non rétrocompatible

  • Active le chargement asynchrone des bases de données et des tables par défaut. Voir async_load_databases dans config.xml. Bien que ce changement soit entièrement compatible, il peut introduire une différence de comportement. Lorsque async_load_databases vaut false, comme dans les versions précédentes, le serveur n’accepte pas de connexions tant que toutes les tables ne sont pas chargées. Lorsque async_load_databases vaut true, comme dans la nouvelle version, le serveur peut accepter des connexions avant que toutes les tables ne soient chargées. Si une requête est effectuée sur une table qui n’est pas encore chargée, elle attendra le chargement de la table, ce qui peut prendre beaucoup de temps. Cela peut modifier le comportement du serveur s’il fait partie d’un grand système distribué derrière un load balancer. Dans le premier cas, le load balancer peut recevoir un refus de connexion et basculer rapidement vers un autre serveur. Dans le second cas, le load balancer peut se connecter à un serveur qui charge encore les tables, et la requête aura une latence plus élevée. De plus, si de nombreuses requêtes s’accumulent en attente, cela peut entraîner un problème de « thundering herd » lorsqu’elles commencent à être traitées simultanément. Cela ne peut faire une différence que pour des backends distribués fortement chargés. Vous pouvez définir la valeur de async_load_databases sur false pour éviter ce problème. #57695 (Alexey Milovidov).
  • Le paramètre replace_long_file_name_to_hash est activé par défaut pour les tables MergeTree. #64457 (Anton Popov). Ce paramètre est entièrement compatible, et aucune action n’est nécessaire lors de la mise à niveau. Le nouveau format de données est pris en charge par toutes les versions à partir de 23.9. Après avoir activé ce paramètre, vous ne pouvez plus revenir à une version 23.8 ou antérieure.
  • Certaines requêtes invalides échoueront plus tôt lors de l’analyse syntaxique. Remarque : la prise en charge des expressions KQL inline (le langage Kusto expérimental) a été désactivée lorsqu’elles sont placées dans une table function kql sans littéral de chaîne, par exemple kql(garbage | trash) au lieu de kql('garbage | trash') ou kql($$garbage | trash$$). Cette fonctionnalité a été introduite involontairement et ne devrait pas exister. #61500 (Alexey Milovidov).
  • Refonte du traitement parallèle en mode Ordered du stockage S3Queue. Cette PR est incompatible avec les versions précédentes pour le mode Ordered si vous utilisiez les paramètres s3queue_processing_threads_num ou s3queue_total_shards_num. Le paramètre s3queue_total_shards_num est supprimé ; auparavant, son utilisation n’était autorisée qu’avec s3queue_allow_experimental_sharded_mode, qui est maintenant obsolète. Un nouveau paramètre a été ajouté : s3queue_buckets. #64349 (Kseniia Sumarokova).
  • De nouvelles fonctions snowflakeIDToDateTime, snowflakeIDToDateTime64, dateTimeToSnowflakeID et dateTime64ToSnowflakeID ont été ajoutées. Contrairement aux fonctions existantes snowflakeToDateTime, snowflakeToDateTime64, dateTimeToSnowflake et dateTime64ToSnowflake, les nouvelles fonctions sont compatibles avec la fonction generateSnowflakeID, c’est-à-dire qu’elles acceptent les Snowflake IDs générés par generateSnowflakeID et produisent des Snowflake IDs du même type que generateSnowflakeID (c.-à-d. UInt64). En outre, les nouvelles fonctions utilisent par défaut l’époque UNIX (c.-à-d. 1970-01-01), tout comme generateSnowflakeID. Si nécessaire, une époque différente, par exemple l’époque de Twitter/X du 2010-11-04, c.-à-d. 1288834974657 ms depuis l’époque UNIX, peut être transmise. Les anciennes fonctions de conversion sont obsolètes et seront supprimées après une période de transition : pour continuer à les utiliser malgré tout, activez le paramètre allow_deprecated_snowflake_conversion_functions. #64948 (Robert Schulze).

Nouvelle fonctionnalité

  • Permet de stocker des collections nommées dans ClickHouse Keeper. #64574 (Kseniia Sumarokova).
  • Prise en charge des tuples vides. #55061 (Amos Bird).
  • Ajout de fonctions d’encodage et de décodage de la courbe de Hilbert. #60156 (Artem Mustafin).
  • Ajout de la prise en charge de l’analyse d’index pour hilbertEncode. #64662 (Artem Mustafin).
  • Ajout de la prise en charge de la lecture de la géométrie LINESTRING au format WKT à l’aide de la fonction readWKTLineString. #62519 (Nikita Mikhaylov).
  • Permet d’attacher des parts depuis un autre disk. #63087 (Unalian).
  • Ajout de nouvelles fonctions SQL generateSnowflakeID pour générer des Snowflake IDs au format Twitter. #63577 (Danila Puzov).
  • Ajout des paramètres merge_workload et mutation_workload pour réguler l’utilisation et le partage des ressources entre les merges, les mutations et les autres workloads. #64061 (Sergei Trifonov).
  • Ajout de la prise en charge de la comparaison des types IPv4 et IPv6 avec l’opérateur =. #64292 (Francisco J. Jurado Moreno).
  • Prise en charge des arguments Decimal dans les fonctions mathématiques binaires (pow, atan2, max2, min2, hypot). #64582 (Mikhail Gorshkov).
  • Ajout des fonctions SQL parseReadableSize (ainsi que des variantes OrNull et OrZero). #64742 (Francisco J. Jurado Moreno).
  • Ajout des paramètres serveur max_table_num_to_throw et max_database_num_to_throw pour limiter le nombre de bases de données ou de tables dans les requêtes CREATE. #64781 (Xu Jia).
  • Ajout de la colonne virtuelle _time aux storages de type fichier (s3/file/hdfs/url/azureBlobStorage). #64947 (Ilya Golshtein).
  • Introduction des nouvelles fonctions base64URLEncode, base64URLDecode et tryBase64URLDecode. #64991 (Mikhail Gorshkov).
  • Ajout de la nouvelle fonction editDistanceUTF8, qui calcule la distance d’édition entre deux chaînes UTF8. #65269 (LiuNeng).
  • Ajout de la configuration http_response_headers pour prendre en charge des en-têtes de réponse personnalisés dans des handlers HTTP personnalisés. #63562 (Grigorii).
  • Ajout d’une nouvelle table function loop pour renvoyer les résultats d’une requête en boucle infinie. #63452 (Sariel). Utile pour les tests.
  • Ajout de deux colonnes supplémentaires dans system.query_log : used_privileges et missing_privileges. used_privileges est renseignée avec les privilèges vérifiés lors de l’exécution de la requête, et missing_privileges contient les privilèges requis qui sont absents. #64597 (Alexey Katsman).
  • Ajout d’un paramètre output_format_pretty_display_footer_column_names qui, lorsqu’il est activé, affiche les noms de colonnes en bas du tableau pour les tableaux longs (50 lignes par défaut) ; la valeur seuil du nombre minimum de lignes est contrôlée par output_format_pretty_display_footer_column_names_min_rows. #65144 (Shaun Struwig).

Fonctionnalité expérimentale

  • Ajout de statistiques de type « nombre de valeurs distinctes ». #59357 (Han Fei).
  • Prise en charge des statistiques pour ReplicatedMergeTree. #64934 (Han Fei).
  • Si un « groupe de répliques » est configuré pour une base de données Replicated, création automatique d’un cluster incluant les répliques de tous les groupes. #64312 (Alexander Tokmakov).
  • Ajout des paramètres parallel_replicas_custom_key_range_lower et parallel_replicas_custom_key_range_upper pour contrôler la façon dont les répliques parallèles avec des shards dynamiques parallélisent les requêtes lors de l’utilisation d’un filtre par plage. #64604 (josh-hildred).

Amélioration des performances

  • Ajout de la possibilité de réorganiser les lignes lors d’un insert afin d’optimiser la taille sans enfreindre l’ordre défini par PRIMARY KEY. Cette fonctionnalité est contrôlée par le paramètre optimize_row_order (désactivé par défaut). #63578 (Igor Markelov).
  • Ajout d’un Parquet reader natif, capable de lire directement un binaire Parquet dans des colonnes ClickHouse. Cette fonctionnalité est contrôlée par le paramètre input_format_parquet_use_native_reader (désactivé par défaut). #60361 (ZhiHong Zhang).
  • Prise en charge de l’optimisation partielle du comptage trivial lorsque le filtre de la query peut sélectionner des plages exactes dans des tables MergeTree. #60463 (Amos Bird).
  • Réduction de l’utilisation mémoire maximale des INSERT multithread grâce au regroupement des chunks de plusieurs threads dans une seule transformation. #61047 (Yarik Briukhovetskyi).
  • Réduction de l’utilisation mémoire avec le stockage objet Azure grâce à une allocation mémoire fixe, évitant l’allocation d’un buffer supplémentaire. #63160 (SmitaRKulkarni).
  • Réduction du nombre d’appels à des fonctions virtuelles dans ColumnNullable::size. #60556 (HappenLee).
  • Accélération de splitByRegexp lorsque l’argument de regular expression est un seul caractère. #62696 (Robert Schulze).
  • Accélération de l’aggregation avec des clés de 8 et 16 bits grâce au suivi des clés minimales et maximales utilisées. Cela permet de réduire le nombre de cellules à vérifier. #62746 (Jiebin Sun).
  • Optimisation de l’opérateur IN lorsque la partie gauche est LowCardinality et la partie droite un ensemble de constantes. #64060 (Zhiguo Zhou).
  • Utilisation d’un thread pool pour initialiser et détruire les hash tables dans ConcurrentHashJoin. #64241 (Nikita Taranov).
  • Optimisation des vertical merges dans les tables avec des colonnes sparse. #64311 (Anton Popov).
  • Activation des prefetches de données depuis un remote filesystem pendant les vertical merges. Cela améliore la latence des vertical merges dans les tables dont les données sont stockées sur un remote filesystem. #64314 (Anton Popov).
  • Réduction des appels redondants à isDefault dans ColumnSparse::filter afin d’améliorer les performances. #64426 (Jiebin Sun).
  • Accélération des commandes keeper-client find_super_nodes et find_big_family en effectuant plusieurs requêtes getChildren asynchrones. #64628 (Alexander Gololobov).
  • Amélioration de la fonction least/greatest pour les arguments numériques de type Nullable. #64668 (KevinyhZou).
  • Possibilité de fusionner deux étapes de filtrage consécutives d’un query plan. Cela améliore l’optimisation du push-down des filtres si la filter condition peut être poussée vers le bas depuis l’étape parente. #64760 (Nikolai Kochetov).
  • Supprime une optimisation défaillante dans l’implémentation verticale de FINAL et réactive par défaut l’algorithme vertical de FINAL. #64783 (Duc Canh Le).
  • Supprime les nœuds ALIAS de l’expression de filtrage. Cela améliore légèrement les performances des requêtes avec PREWHERE (avec le nouvel analyseur). #64793 (Nikolai Kochetov).
  • Réactive la mise en cache des sessions OpenSSL. #65111 (Robert Schulze).
  • Ajoute des paramètres pour désactiver la matérialisation des skip indexes et des statistiques lors des insertions (materialize_skip_indexes_on_insert et materialize_statistics_on_insert). #64391 (Anton Popov).
  • Utilise la taille de la mémoire allouée pour calculer la taille du row group et réduire le pic de mémoire du writer Parquet en mode monothread. #64424 (LiuNeng).
  • Améliore l’itérateur de la colonne creuse afin de réduire les appels à size. #64497 (Jiebin Sun).
  • Met à jour la condition pour utiliser une copie côté serveur pour les sauvegardes vers Azure blob storage. #64518 (SmitaRKulkarni).
  • Optimise l’utilisation de la mémoire des fusions verticales pour les tables comportant un grand nombre de skip indexes. #64580 (Anton Popov).

Amélioration

  • SHOW CREATE TABLE exécuté sur des tables système affichera désormais le commentaire très utile, propre à chaque table, qui explique pourquoi cette table est nécessaire. #63788 (Nikita Mikhaylov).
  • Le deuxième argument (scale) des fonctions round(), roundBankers(), floor(), ceil() et trunc() peut désormais être non constant. #64798 (Mikhail Gorshkov).
  • Rechargement à chaud de la storage policy pour les tables Distributed lors de l’ajout d’un nouveau disk. #58285 (Duc Canh Le).
  • Évite un interblocage potentiel lors de l’analyse d’index de MergeTree pendant l’ordonnancement des threads dans un service saturé. #59427 (Sean Haynes).
  • Plusieurs corrections mineures de cas limites pour la prise en charge du proxy S3 et du tunneling. #63427 (Arthur Passos).
  • Améliore la visibilité des resoumissions de io_uring. Renomme l’événement de profile IOUringSQEsResubmits -> IOUringSQEsResubmitsAsync et ajoute un nouvel événement, IOUringSQEsResubmitsSync. #63699 (Tomer Shafir).
  • Ajout d’un nouveau paramètre, metadata_keep_free_space_bytes, pour conserver de l’espace libre sur le disk de metadata storage. #64128 (MikhailBurdukov).
  • Ajoute des metrics pour suivre le nombre de répertoires créés et supprimés par le metadata storage plain_rewritable, ainsi que le nombre d’entries dans l’in-memory map local-vers-distant. #64175 (Julia Kartseva).
  • Le query cache considère désormais des queries identiques avec des settings différents comme étant différentes. Cela améliore la robustesse lorsque différents settings (par ex. limit ou additional_table_filters) peuvent affecter le résultat de la query. #64205 (Robert Schulze).
  • Prend en charge le code d’error non standard QpsLimitExceeded dans l’object storage comme error réessayable. #64225 (Sema Checherinda).
  • Interdit de convertir une table MergeTree en table répliquée si le chemin ZooKeeper de cette table existe déjà. #64244 (Kirill).
  • Ajout d’un nouveau paramètre input_format_parquet_prefer_block_bytes pour contrôler la taille moyenne en octets du block de sortie, et modification de la default value de input_format_parquet_max_block_size à 65409. #64427 (LiuNeng).
  • Permet de contourner le proxy pour les hosts spécifiés dans la variable d’environnement no_proxy et dans la configuration du proxy ClickHouse. #63314 (Arthur Passos).
  • Démarre toujours Keeper avec un nombre suffisant de threads dans le pool global de threads. #64444 (Duc Canh Le).
  • Les settings de la config de l’utilisateur n’affectent pas les merges ni les mutations pour MergeTree sur object storage. #64456 (alesapin).
  • Prend en charge le code d’erreur non standard TotalQpsLimitExceeded dans le stockage objet en tant qu’erreur pouvant faire l’objet d’une nouvelle tentative. #64520 (Sema Checherinda).
  • Mise à jour de l’Advanced Dashboard pour les versions open-source et ClickHouse Cloud afin d’inclure un graphique pour ‘Connexions réseau simultanées maximales’. #64610 (Thom O’Connor).
  • Améliore le rapport de progression pour zeros_mt et generateRandom. #64804 (Raúl Marín).
  • Ajoute une métrique asynchrone jemalloc.profile.active pour indiquer si l’échantillonnage est actuellement actif. Il s’agit d’un mécanisme d’activation en plus de prof.active ; les deux doivent être actifs pour que le thread appelant effectue l’échantillonnage. #64842 (Unalian).
  • Supprime l’indication « important » de allow_experimental_join_condition. Ce marquage a pu empêcher l’exécution correcte de requêtes distribuées dans un cluster avec des versions mixtes. #65008 (Nikita Mikhaylov).
  • Ajout des métriques asynchrones du serveur DiskGetObjectThrottler* et DiskGetObjectThrottler*, qui reflètent la limite de débit en requêtes par seconde définie par les paramètres de disque s3_max_get_rps et s3_max_put_rps, ainsi que le nombre de requêtes actuellement disponibles pouvant être envoyées sans atteindre la limite de throttling du disque. Les métriques sont définies pour chaque disque ayant une limite configurée. #65050 (Sergei Trifonov).
  • Initialise le collecteur global de traces pour Poco::ThreadPool (nécessaire pour Keeper, etc.). #65239 (Kseniia Sumarokova).
  • Ajoute une validation lors de la création d’un utilisateur avec bcrypt_hash. #65242 (Raúl Marín).
  • Ajoute des événements de profil pour le nombre de lignes lues pendant/après PREWHERE. #64198 (Nikita Taranov).
  • Affiche la requête dans EXPLAIN PLAN avec des répliques parallèles. #64298 (vdimir).
  • Renomme allow_deprecated_functions en allow_deprecated_error_prone_window_functions. #64358 (Raúl Marín).
  • Respecte également le paramètre max_read_buffer_size pour les descripteurs de fichier dans la fonction de table file. #64532 (Azat Khuzhin).
  • Désactive les transactions pour les moteurs de stockage non pris en charge, y compris pour les vues matérialisées. #64918 (alesapin).
  • Interdit la clause QUALIFY dans l’ancien analyseur. L’ancien analyseur ignorait QUALIFY, ce qui pouvait entraîner une suppression inattendue de données dans les mutations. #65356 (Dmitry Novik).

correction de bug (dysfonctionnement visible par l’utilisateur dans une version stable officielle)

  • Un bug dans la bibliothèque Apache ORC a été corrigé : le calcul des statistiques ORC à l’écriture a été corrigé pour les types non signés sur toutes les plateformes, ainsi que pour Int8 sur ARM. #64563 (Michael Kolupaev).
  • Le comportement de ClickHouse concernant l’interprétation des Tuples au format CSV a été rétabli. Ce changement annule effectivement https://github.com/ClickHouse/ClickHouse/pull/60994 et ne le rend disponible qu’au travers de quelques paramètres : output_format_csv_serialize_tuple_into_separate_columns, input_format_csv_deserialize_separate_columns_into_tuple et input_format_csv_try_infer_strings_from_quoted_tuples. #65170 (Nikita Mikhaylov).
  • Correction d’une erreur d’autorisation permettant, dans une situation particulière, à un utilisateur d’élever ses privilèges sur la base de données default sans les grants nécessaires. #64769 (pufit).
  • Correction d’un crash avec UniqInjectiveFunctionsEliminationPass et uniqCombined. #65188 (Raúl Marín).
  • Correction d’un bug dans ClickHouse Keeper provoquant une incohérence de digest lors de la fermeture de session. #65198 (Aleksei Filatov).
  • Utilisation du bon alignement mémoire pour le combinator Distinct. Auparavant, un crash pouvait se produire en raison d’une allocation mémoire invalide lors de l’utilisation du combinator. #65379 (Antonio Andelic).
  • Correction d’un crash avec DISTINCT et les window functions. #64767 (Igor Nikonov).
  • Correction du skip index ‘set’, qui ne fonctionnait pas avec IN et indexHint(). #62083 (Michael Kolupaev).
  • Prise en charge de l’exécution d’une fonction lors de l’affectation de la valeur d’une parameterized view. #63502 (SmitaRKulkarni).
  • Correction du suivi mémoire de Parquet. #63584 (Michael Kolupaev).
  • Correction de la lecture de colonnes de type Tuple(Map(LowCardinality(String), String), ...). #63956 (Anton Popov).
  • Correction de l’erreur Cyclic aliases pour des alias cycliques de types différents (expression et fonction). #63993 (Nikolai Kochetov).
  • Cette correction utilisera un contexte redéfini approprié avec le bon définisseur pour chaque vue individuelle du query pipeline. #64079 (pufit).
  • Correction dans l’analyzer : l’erreur “Not found column” est corrigée lors de l’utilisation d’INTERPOLATE. #64096 (Yakov Olkhovskiy).
  • Correction de la création de backups vers des S3 buckets avec des credentials différents de ceux du disk contenant le fichier. #64153 (Antonio Andelic).
  • Le query cache considère désormais deux requêtes identiques exécutées sur des bases de données différentes comme distinctes. Le comportement précédent pouvait être utilisé pour contourner l’absence de privilèges de lecture sur une table. #64199 (Robert Schulze).
  • Corrige un arrêt brutal possible en cas d’exception non interceptée dans ~WriteBufferFromFileDescriptor de StatusFile. #64206 (Kruglov Pavel).
  • Corrige l’erreur duplicate alias pour les requêtes distribuées avec ARRAY JOIN. #64226 (Nikolai Kochetov).
  • Corrige un accurateCast inattendu d’une chaîne en entier. #64255 (wudidapaopao).
  • Corrige la simplification en CNF lorsqu’un groupe OR contient des atomes mutuellement exclusifs. #64256 (Eduard Karacharov).
  • Corrige la validation de la taille du Query Tree. #64377 (Dmitry Novik).
  • Corrige l’erreur Logical error: Bad cast pour la table Buffer avec PREWHERE. #64388 (Nikolai Kochetov).
  • Empêche la journalisation récursive dans blob_storage_log lorsqu’il est stocké sur le stockage objet. #64393 (vdimir).
  • Corrige les requêtes CREATE TABLE AS pour les tables avec des expressions par défaut. #64455 (Anton Popov).
  • Corrige le comportement de optimize_read_in_order pour ORDER BY … NULLS FIRST / LAST sur les tables avec des clés Nullable. #64483 (Eduard Karacharov).
  • Corrige les erreurs Expression nodes list expected 1 projection names et Unknown expression or identifier pour les requêtes avec des alias vers GLOBAL IN.. #64517 (Nikolai Kochetov).
  • Corrige l’erreur Cannot find column dans les requêtes distribuées avec une CTE constante dans la clé GROUP BY. #64519 (Nikolai Kochetov).
  • Corrige la boucle de plantage lorsque la restauration depuis une sauvegarde est bloquée par la création d’une MV avec un definer qui n’a pas encore été restauré. #64595 (pufit).
  • Corrige la sortie de la fonction formatDateTimeInJodaSyntax lorsqu’un spécificateur de format génère un nombre impair de caractères et que le dernier caractère est 0. Par exemple, SELECT formatDateTimeInJodaSyntax(toDate('2012-05-29'), 'D') renvoie désormais correctement 150 au lieu de 15 auparavant. #64614 (LiuNeng).
  • N’effectue pas de réécriture de l’agrégation si le combinateur -If est déjà utilisé. #64638 (Dmitry Novik).
  • Corrige l’inférence de type pour les nombres à virgule flottante (dans le cas d’un petit buffer, c.-à-d. --max_read_buffer_size 1). #64641 (Azat Khuzhin).
  • Corrige un bug qui pouvait rendre les TTL inopérants avec des expressions. #64694 (alesapin).
  • Corrige la suppression des expressions WHERE et PREWHERE toujours vraies (pour le nouvel analyseur). #64695 (Nikolai Kochetov).
  • Correction de l’élimination excessive de parties par les index de texte basés sur des tokens (ngrambf , full_text) lors du filtrage sur le résultat de startsWith, endsWith, match, multiSearchAny. #64720 (Eduard Karacharov).
  • Corrige le comportement incorrect de l’échappement ANSI CSI dans la fonction UTF8::computeWidth. #64756 (Shaun Struwig).
  • Corrige un cas de suppression incorrecte de ORDER BY / LIMIT BY au travers de sous-requêtes. #64766 (Raúl Marín).
  • Corrige les jointures d’inégalité (expérimentales) avec des sous-requêtes pour des ensembles présents dans des conditions de jointure mixtes. #64775 (lgbo).
  • Corrige un crash dans un cache local sur le disque plain_rewritable. #64778 (Julia Kartseva).
  • Correction dans Keeper : renvoie la valeur correcte pour zk_latest_snapshot_size dans la commande mntr. #64784 (Antonio Andelic).
  • Corrige l’erreur Cannot find column dans une requête distribuée avec ARRAY JOIN sur une colonne Nested. Corrige #64755. #64801 (Nikolai Kochetov).
  • Corrige une fuite mémoire dans la politique de cache slru. #64803 (Kseniia Sumarokova).
  • Correction d’un possible suivi mémoire incorrect dans plusieurs types de requêtes : requêtes lisant des données depuis S3, requêtes via le protocole HTTP, insertions asynchrones. #64844 (Anton Popov).
  • Corrige l’erreur Block structure mismatch pour les requêtes lisant avec PREWHERE depuis une vue matérialisée lorsque celle-ci possède des colonnes de types différents de la table source. Corrige #64611. #64855 (Nikolai Kochetov).
  • Corrige un crash rare lorsqu’une table a un TTL avec sous-requête + base de données replicated + répliques parallèles + analyseur. C’est vraiment rare, mais n’utilisez pas de TTL avec des sous-requêtes. #64858 (alesapin).
  • Corrige la duplication des événements Delete dans blob_storage_log dans le cas d’un lot volumineux à supprimer. #64924 (vdimir).
  • Correction de l’erreur Session moved to another server de [Zoo]Keeper, qui pouvait se produire après le démarrage du serveur lorsque la configuration inclut des éléments provenant de [Zoo]Keeper. #64986 (Alexander Tokmakov).
  • Corrige la requête ALTER MODIFY COMMENT qui ne fonctionnait plus pour les VIEW paramétrées dans https://github.com/ClickHouse/ClickHouse/pull/54211. #65031 (Nikolay Degterinsky).
  • Corrige host_id dans DatabaseReplicated lorsque le paramètre cluster_secure_connection est activé. Auparavant, toutes les connexions au sein du cluster créées par DatabaseReplicated n’étaient pas sécurisées, même si ce paramètre était activé. #65054 (Nikolay Degterinsky).
  • Correction de l’erreur Not-ready Set après l’optimisation PREWHERE pour StorageMerge. #65057 (Nikolai Kochetov).
  • Évite l’écriture dans un buffer finalisé pour les storages de type File. #65063 (Kruglov Pavel).
  • Correction d’une durée de requête potentiellement infinie en cas d’alias cycliques. Corrige #64849. #65081 (Nikolai Kochetov).
  • Correction de l’erreur Unknown expression identifier pour les requêtes distantes avec INTERPOLATE (alias) (nouvel analyseur). Corrige #64636. #65090 (Nikolai Kochetov).
  • Correction du déplacement des opérations arithmétiques hors de l’agrégation. Dans le nouvel analyseur, l’optimisation n’était appliquée qu’une seule fois. #65104 (Dmitry Novik).
  • Correction de la réécriture des noms des fonctions d’agrégation dans le nouvel analyseur. #65110 (Dmitry Novik).
  • Renvoie un code 5xx au lieu de 200 OK en cas de timeout de réception lors de la lecture du corps de la requête (ou d’une partie de celui-ci) depuis le socket client. #65118 (Julian Maicher).
  • Correction d’un crash possible pour les requêtes hedged. #65206 (Azat Khuzhin).
  • Correction d’un bug dans l’évaluation en court-circuit des dictionnaires Hashed et Hashed_Array, qui pouvait lire un nombre non initialisé et entraîner diverses erreurs. #65256 (jsc0218).
  • Cette PR garantit que le type de la constante (deuxième paramètre de l’opérateur IN) reste toujours visible pendant le processus de conversion de type de l’opérateur IN. Sinon, la perte d’informations de type peut faire échouer certaines conversions, comme celle de DateTime vers Date. Cela corrige #64487. #65315 (pn).

amélioration de la compilation, des tests et du packaging

  • Ajout de la prise en charge de LLVM XRay. #64592 #64837 (Tomer Shafir).
  • Regroupement des implémentations de stockage s3/hdfs/azure en une seule classe fonctionnant avec IObjectStorage. Même chose pour *Cluster, les data lakes et les stockages Queue. #59767 (Kseniia Sumarokova).
  • Refactorisation du writer de data part pour supprimer les dépendances à MergeTreeData et DataPart. #63620 (Alexander Gololobov).
  • Refactorisation de KeyCondition et de l’analyse de clé afin d’améliorer PartitionPruner et l’optimisation triviale de comptage. Ceci est distinct de #60463. #61459 (Amos Bird).
  • Ajout d’assertions pour vérifier que toutes les fonctions sont appelées avec des colonnes de la bonne taille. #63723 (Raúl Marín).
  • Le service network devient obligatoire lors de l’utilisation du script d’initialisation rc pour démarrer le démon du serveur ClickHouse. #60650 (Chun-Sheng, Li).
  • Réduction de la taille de certains tests lents. #64387 #64452 (Raúl Marín).
  • Rejeu des logs ZooKeeper à l’aide de keeper-bench. #62481 (Antonio Andelic).

version de ClickHouse 24.5, 2024-05-30. Présentation, Vidéo

Changement non rétrocompatible

  • Les « index inversés » ont été renommés en « index plein texte », une appellation moins technique et plus conviviale. Cela modifie également les métadonnées internes des tables et casse les tables contenant des index inversés (expérimentaux) existants. Veillez à supprimer ces index avant la mise à niveau, puis à les recréer après celle-ci. #62884 (Robert Schulze).
  • L’utilisation des fonctions neighbor, runningAccumulate, runningDifferenceStartingWithFirstValue et runningDifference est dépréciée (car sujette aux erreurs). Il convient d’utiliser à la place de véritables fonctions de fenêtre. Pour les réactiver, définissez allow_deprecated_error_prone_window_functions = 1 ou compatibility = '24.4', ou une valeur inférieure. #63132 (Nikita Taranov).
  • Les requêtes sur system.columns seront plus rapides lorsqu’il existe un grand nombre de colonnes, mais que SHOW TABLES n’a pas été accordé sur de nombreuses bases de données ou tables. Notez que dans les versions précédentes, si vous accordiez SHOW COLUMNS sur des colonnes individuelles sans accorder SHOW TABLES sur les tables correspondantes, la table system.columns affichait ces colonnes, mais dans la nouvelle version, elle ignorera entièrement la table. Suppression des messages du journal de trace « Access granted » et « Access denied », qui ralentissaient les requêtes. #63439 (Alexey Milovidov).

Nouvelle fonctionnalité

  • Ajoute le format Form pour lire/écrire un seul enregistrement au format application/x-www-form-urlencoded. #60199 (Shaun Struwig).
  • Ajout de la possibilité d’utiliser la compression dans CROSS JOIN. #60459 (p1rattttt).
  • Ajout de la possibilité d’effectuer un CROSS JOIN dans des fichiers temporaires si la taille dépasse les limites. #63432 (p1rattttt).
  • Prise en charge des join avec des conditions d’inégalité impliquant des colonnes de la table de gauche comme de la table de droite, par exemple t1.y < t2.y. Pour l’activer, utilisez SET allow_experimental_join_condition = 1. #60920 (lgbo).
  • Les maps peuvent désormais avoir Float32, Float64, Array(T), Map(K, V) et Tuple(T1, T2, ...) comme clés. Corrige #54537. #59318 (李扬).
  • Introduction du chargement en masse dans EmbeddedRocksDB par création et ingestion de fichiers SST, au lieu de s’appuyer sur la memtable intégrée de RocksDB. Cela permet d’accélérer l’importation, en particulier pour les requêtes d’insertion de longue durée dans les tables StorageEmbeddedRocksDB. Ajout également de table settings pour EmbeddedRocksDB. #59163 #63324 (Duc Canh Le).
  • L’utilisateur peut désormais analyser les fins de ligne CRLF avec le format TSV à l’aide du paramètre input_format_tsv_crlf_end_of_line. Corrige #56257. #59747 (Shaun Struwig).
  • Nouveau paramètre input_format_force_null_for_omitted_fields qui force des valeurs NULL pour les champs omis. #60887 (Constantine Peresypkin).
  • Auparavant, notre stockage S3 et la fonction de table s3 ne prenaient pas en charge la sélection à partir de fichiers d’archive, tels que des tarballs, des fichiers zip ou 7z. Ils permettent désormais d’itérer sur les fichiers contenus dans des archives sur S3. #62259 (Daniil Ivanik).
  • Prise en charge de la fonction conditionnelle clamp. #62377 (skyoct).
  • Ajout du format de sortie NPy. #62430 (豪肥肥).
  • Raw est désormais un synonyme de TSVRaw. #63394 (Unalian).
  • Ajout d’une nouvelle fonction SQL generateUUIDv7 pour générer des UUID version 7, c’est-à-dire des UUID basés sur un timestamp avec une composante aléatoire. Ajout également d’une nouvelle fonction UUIDToNum pour extraire les octets d’un UUID, ainsi que d’une nouvelle fonction UUIDv7ToDateTime pour extraire la composante timestamp d’un UUID version 7. #62852 (Alexey Petrunyaka).
  • Sous Linux et MacOS, si le programme a stdout redirigé vers un fichier avec une extension de compression, utilisez la méthode de compression correspondante au lieu de n’en utiliser aucune (ce qui le fait se comporter comme INTO OUTFILE). #63662 (v01dXYZ).
  • Modifier l’avertissement en cas de nombre élevé de tables attachées afin de distinguer les tables, les vues et les dictionnaires. #64180 (Francisco J. Jurado Moreno).
  • Ajouter la prise en charge de la fonction azureBlobStorage dans ClickHouse server pour utiliser Azure Workload Identity afin de s’authentifier auprès d’Azure Blob Storage. Si le paramètre use_workload_identity est défini dans la configuration, l’identité de workload est utilisée pour l’authentification. #57881 (Vinay Suryadevara).
  • Ajouter des informations sur le TTL dans la table system.parts_columns. #63200 (litlig).

Fonctionnalités expérimentales

  • Ajout du type de données Dynamic, qui permet de stocker des valeurs de n’importe quel type sans toutes les connaître à l’avance. Le type Dynamic est disponible via le paramètre allow_experimental_dynamic_type. Référence : #54864. #63058 (Kruglov Pavel).
  • Il est désormais possible de créer une base de données MaterializedMySQL sans connexion à MySQL. #63397 (Kirill).
  • Marque automatiquement une réplique d’une base de données Replicated comme perdue et lance la récupération si une tâche DDL échoue plus de max_retries_before_automatic_recovery fois de suite avec la même erreur (100 par défaut). Corrige également un bug pouvant entraîner l’omission d’entrées DDL lorsqu’une exception est levée au début de l’exécution d’une entrée. #63549 (Alexander Tokmakov).
  • Prend en compte les fichiers en échec dans s3queue_tracked_file_ttl_sec et s3queue_traked_files_limit pour StorageS3Queue. #63638 (Kseniia Sumarokova).

Amélioration des performances

  • Moins de contention dans le cache du système de fichiers (partie 4). Possibilité de ne pas remplir le cache du système de fichiers jusqu’à sa limite en effectuant une éviction supplémentaire en arrière-plan (contrôlée par keep_free_space_size(elements)_ratio). Cela permet d’alléger la pression sur la réservation d’espace pour les requêtes (dans la méthode tryReserve). De plus, cela est réalisé autant que possible sans verrouillage et ne devrait, par exemple, pas bloquer l’utilisation normale du cache. #61250 (Kseniia Sumarokova).
  • Ignorer la fusion des blocs de projection nouvellement créés pendant les INSERT. #59405 (Nikita Taranov).
  • Traiter les fonctions sur les chaînes ...UTF8 en mode ASCII si les chaînes d’entrée ne contiennent que des caractères ASCII. Inspiré de https://github.com/apache/doris/pull/29799. Accélération globale de 1.07x à 1.62x. À noter que le pic d’utilisation mémoire a diminué dans certains cas. #61632 (李扬).
  • Amélioration des performances des globs de sélection ({}) dans StorageS3. #62120 (Andrey Zvonov).
  • HostResolver contient chaque adresse IP plusieurs fois. Si l’hôte distant possède plusieurs IP et que, pour une raison quelconque (des règles de pare-feu, par exemple), l’accès est autorisé sur certaines IP mais interdit sur d’autres, alors seul le premier enregistrement des IP interdites est marqué comme ayant échoué, et à chaque tentative ces IP peuvent de nouveau être sélectionnées (et échouer à nouveau). Même après ce correctif, le cache DNS est vidé toutes les 120 secondes, et ces IP peuvent donc être sélectionnées à nouveau. #62652 (Anton Ivashkin).
  • Ajout d’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 des fusions quand il y a beaucoup de colonnes. #62904 (LiuNeng).
  • clickhouse-local démarrera plus rapidement. Dans les versions précédentes, il ne supprimait pas les répertoires temporaires, par erreur. Désormais, ce sera le cas. Cela clôt #62941. #63074 (Alexey Milovidov).
  • Micro-optimisations pour le nouvel analyseur. #63429 (Raúl Marín).
  • L’analyse des index fonctionnera si DateTime est comparé à DateTime64. Cela clôt #63441. #63443 #63532 (Alexey Milovidov).
  • Légère accélération des index de type set (environ 1,5 fois) en supprimant les éléments inutiles. #64098 (Alexey Milovidov).
  • Suppression de la copie des données lors de l’écriture dans le cache du système de fichiers. #63401 (Kseniia Sumarokova).
  • Désormais, les backups avec Azure blob storage utiliseront la copie multiple. #64116 (alesapin).
  • Permet d’utiliser la copie native pour Azure même avec des conteneurs différents. #64154 (alesapin).
  • Active enfin la copie native pour Azure. #64182 (alesapin).

Amélioration

  • Autoriser l’utilisation de clickhouse-local et de ses raccourcis clickhouse et ch avec une requête ou un fichier de requêtes comme argument positionnel. Exemples : ch "SELECT 1", ch --param_test Hello "SELECT {test:String}", ch query.sql. Cela clôt #62361. #63081 (Alexey Milovidov).
  • Activer les métadonnées plain_rewritable pour les stockages objet locaux et Azure (azure_blob_storage). #63365 (Julia Kartseva).
  • Prise en charge des guillemets Unicode de style anglais, par exemple “Hello”, ‘world’. C’est globalement discutable, mais utile lorsque vous saisissez votre requête dans un traitement de texte comme Google Docs. Cela clôt #58634. #63381 (Alexey Milovidov).
  • Autoriser les virgules finales dans la liste des colonnes d’une requête INSERT. Par exemple, INSERT INTO test (a, b, c, ) VALUES .... #63803 (Alexey Milovidov).
  • Améliorer les messages d’exception pour le format Regexp. #63804 (Alexey Milovidov).
  • Autoriser les virgules finales dans le format Values. Par exemple, cette requête est désormais autorisée : INSERT INTO test (a, b, c) VALUES (4, 5, 6,);. #63810 (Alexey Milovidov).
  • Faire en sorte que rabbitmq envoie un nack pour les messages corrompus. Clôt #45350. #60312 (Kseniia Sumarokova).
  • Corriger un crash lors du déroulage asynchrone de la pile (par exemple lors de l’utilisation du sampling query profiler) pendant l’interprétation des informations de débogage. Cela clôt #60460. #60468 (Alexey Milovidov).
  • Messages distincts pour l’erreur S3 ‘no key’ dans les cas disk et storage. #61108 (Sema Checherinda).
  • La barre de progression fonctionnera pour les requêtes 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 bonus, si le nombre total d’enregistrements dépasse la limite max_rows_to_read, elle lèvera une exception plus tôt. Cela clôt #58183. #61823 (Alexey Milovidov).
  • Prise en charge de “Merge Key” dans les configurations YAML (c’est une fonctionnalité étrange de YAML, n’y prêtez pas trop attention). #62685 (Azat Khuzhin).
  • Améliorer le message d’erreur lorsqu’une fonction non déterministe est utilisée avec une source Replicated. #62896 (Grégoire Pineau).
  • Corriger le secret inter-serveur pour Distributed sur Distributed depuis remote. #63013 (Azat Khuzhin).
  • Prise en charge de include_from pour les fichiers YAML. Il est toutefois préférable d’utiliser config.d #63106 (Eduard Karacharov).
  • Les données précédentes sont désormais conservées dans le terminal après une sélection parmi les suggestions de skim. #63261 (FlameFactory).
  • La largeur des champs (dans les Pretty formats ou la fonction visibleWidth) ignore désormais correctement les séquences d’échappement ANSI. #63270 (Shaun Struwig).
  • Remplacement, lorsque c’est pertinent, du code d’erreur NUMBER_OF_ARGUMENTS_DOESNT_MATCH par des codes d’erreur plus précis. #63406 (Yohann Jardin).
  • os_user et client_hostname sont désormais correctement définis pour les requêtes de suggestion en ligne de commande dans clickhouse-client. Cela clôt #63430. #63433 (Alexey Milovidov).
  • Correction automatique de max_block_size à la valeur par défaut si sa valeur est zéro. #63587 (Antonio Andelic).
  • Ajout d’une colonne ALIAS build_id à trace_log pour faciliter le renommage automatique lors de la détection de changements du binaire. Cela vise à résoudre #52086. #63656 (Zimu Li).
  • Activation de l’opération de troncature pour les object storage disks. #63693 (MikhailBurdukov).
  • Le chargement de la liste des mots-clés dépend désormais de la révision du serveur et sera désactivé pour les anciennes versions de ClickHouse server. CC @azat. #63786 (Nikita Mikhaylov).
  • Les disks ClickHouse doivent lire le server setting pour obtenir la version réelle du format des metadata. #63831 (Sema Checherinda).
  • Désactivation des restrictions du Pretty format (output_format_pretty_max_rows/output_format_pretty_max_value_width) lorsque stdout n’est pas un TTY. #63942 (Azat Khuzhin).
  • La gestion des exceptions fonctionne désormais lorsque ClickHouse est utilisé dans AWS Lambda. Auteur : Alexey Coolnev. #64014 (Alexey Milovidov).
  • Lever CANNOT_DECOMPRESS au lieu de CORRUPTED_DATA pour des données compressées invalides transmises via HTTP. #64036 (vdimir).
  • L’astuce d’affichage pour un seul grand nombre dans les Pretty formats fonctionne désormais avec Nullable et LowCardinality. Cela clôt #61993. #64084 (Alexey Milovidov).
  • Ajout de metrics, de logs et de noms de thread autour du filtrage des parts avec des index. #64130 (Alexey Milovidov).
  • Ignorer allow_suspicious_primary_key avec ATTACH et vérifier avec ALTER. #64202 (Azat Khuzhin).

amélioration de la compilation, des tests et du packaging

Corrections de bugs

  • Paramètre enable_vertical_final désactivé par défaut. Cette fonctionnalité ne doit pas être utilisée, car elle comporte un bug : #64543. #64544 (Alexander Tokmakov).
  • Correction de la sauvegarde lorsque plusieurs shards sont utilisés #57684 (Vitaly Baranov).
  • Correction de la transmission des projections/index/clé primaire depuis la liste des colonnes de la requête CREATE vers la table interne de la MV #59183 (Azat Khuzhin).
  • Correction d’une fusion incorrecte de boundRatio #60532 (Tao Wang).
  • Correction d’un crash lors de l’appel de certaines fonctions sur des colonnes constantes à faible cardinalité #61966 (Michael Kolupaev).
  • Correction des requêtes avec FINAL qui renvoient un résultat incorrect lorsque la table n’utilise pas la granularité adaptative #62432 (Duc Canh Le).
  • Amélioration de la détection de la prise en charge de cgroups v2 pour les contrôleurs de mémoire #62903 (Robert Schulze).
  • Correction de l’utilisation ultérieure des tables externes dans le client #62964 (Azat Khuzhin).
  • Correction d’un crash avec untuple et une lambda non résolue #63131 (Raúl Marín).
  • Correction de la mise en écoute prématurée du serveur pour les connexions #63181 (alesapin).
  • Correction de parts qui se chevauchent lors d’un redémarrage après une commande DROP PART #63202 (Han Fei).
  • Chargement correct des valeurs par défaut de SQL security au démarrage #63209 (pufit).
  • Correction du pushdown de filtre pour JOIN filter join #63234 (Maksim Kita).
  • Correction d’une boucle infinie dans AzureObjectStorage::listObjects #63257 (Julia Kartseva).
  • CROSS JOIN ignore le paramètre join_algorithm #63273 (vdimir).
  • Correction de la finalisation de WriteBufferToFileSegment et de StatusFile #63346 (vdimir).
  • Correction d’une erreur logique lors d’une requête SELECT après ALTER dans de rares cas #63353 (alesapin).
  • Correction de l’en-tête X-ClickHouse-Timezone avec session_timezone #63377 (Andrey Zvonov).
  • Correction d’une assertion de débogage lors de l’utilisation du groupement WITH ROLLUP et des types LowCardinality #63398 (Raúl Marín).
  • Petites corrections pour group_by_use_nulls #63405 (vdimir).
  • Correction du backup/de la restauration d’une partie de projection lorsque la projection a été supprimée des métadonnées de la table, mais que la partie contient encore la projection #63426 (Kseniia Sumarokova).
  • Correction de la source de dictionnaire MySQL #63481 (vdimir).
  • Insertion de QueryFinish sur AsyncInsertFlush sans données #63483 (Raúl Marín).
  • Correction : used&#95;dictionaries vide dans system.query_log #63487 (Eduard Karacharov).
  • MergeTreePrefetchedReadPool rendu plus sûr #63513 (Antonio Andelic).
  • Correction d’un crash à la fermeture avec sentry activé (openssl étant détruit avant sentry) #63548 (Azat Khuzhin).
  • Correction de la prise en charge de Array et Map avec le hachage par clé #63628 (Salvatore Mesoraca).
  • Correction du pushdown de filtre pour Parquet et peut-être StorageMerge #63642 (Michael Kolupaev).
  • Empêche la conversion vers Replicated si le chemin ZooKeeper existe déjà #63670 (Kirill).
  • Analyseur : les vues ne lisent que les colonnes nécessaires #63688 (Maksim Kita).
  • Analyseur : interdire la redéfinition de WINDOW #63694 (Dmitry Novik).
  • flatten_nested ne fonctionnait pas avec la base de données Replicated expérimentale #63695 (Nikolai Kochetov).
  • Correction de #63653 #63722 (Nikolai Kochetov).
  • Autoriser la conversion de Array(Nothing) en Map(Nothing, Nothing) #63753 (Nikolai Kochetov).
  • Correction de ILLEGAL_COLUMN dans la jointure partial_merge #63755 (vdimir).
  • Correction : suppression d’un distinct redondant avec les window functions #63776 (Igor Nikonov).
  • Correction d’un possible crash avec SYSTEM UNLOAD PRIMARY KEY #63778 (Raúl Marín).
  • Correction d’une requête avec un alias cyclique dupliqué #63791 (Nikolai Kochetov).
  • Rendre TokenIterator lazy comme il devrait l’être #63801 (Alexey Milovidov).
  • Ajout du paramètre d’URI S3 endpoint_subpath #63806 (Julia Kartseva).
  • Correction d’un interblocage dans ParallelReadBuffer #63814 (Antonio Andelic).
  • Correction des colonnes équivalentes pour le push down des filtres JOIN #63819 (Maksim Kita).
  • Suppression des données de tous les disques après un DROP avec une base de données Lazy. #63848 (MikhailBurdukov).
  • Correction d’un résultat incorrect lors de la lecture depuis une MV avec des répliques parallèles et le nouvel analyseur #63861 (Nikita Taranov).
  • Corrections des commandes find_super_nodes et find_big_family dans keeper-client #63862 (Alexander Gololobov).
  • Mise à jour du nom d’exécution des lambdas #63864 (Nikolai Kochetov).
  • Correction d’un SIGSEGV dû au Profiler CPU/Real #63865 (Azat Khuzhin).
  • Correction de la requête EXPLAIN CURRENT TRANSACTION #63926 (Anton Popov).
  • Correction de l’analyseur : c’est des tortues à perte de vue… #63930 (Yakov Olkhovskiy).
  • Autorisation de certaines commandes ALTER TABLE pour le disque plain_rewritable #63933 (Julia Kartseva).
  • Correction pour les CTE récursives distribuées #63939 (Maksim Kita).
  • Analyseur : correction de la résolution de COLUMNS #63962 (Dmitry Novik).
  • LIMIT BY et skip_unused_shards avec l’analyseur #63983 (Nikolai Kochetov).
  • Correctif pour quelques problèmes résiduels (Kusto expérimental) #63992 (Yong Wang).
  • Désérialisation plus sûre des entrées binary non fiables #64024 (Robert Schulze).
  • Correction de l’analyse des requêtes avec le paramètre final = 1 pour les tables Distributed sur des tables n’appartenant pas à la famille MergeTree. #64037 (Nikolai Kochetov).
  • Ajout des paramètres manquants à recoverLostReplica #64040 (Raúl Marín).
  • Correction des vérifications d’accès SQL security avec l’analyseur #64079 (pufit).
  • Correction de l’analyseur : seule l’expression interpolée doit être utilisée pour le DAG #64096 (Yakov Olkhovskiy).
  • Correction de l’écriture des sauvegardes Azure en blocs multipart de 1 MiB (taille du read buffer) au lieu de max_upload_part_size (dans le cas d’une copie non native) #64117 (Kseniia Sumarokova).
  • Assurer un repli correct lors de la copie de sauvegarde #64153 (Antonio Andelic).
  • Éviter LOGICAL_ERROR lors de CREATE TABLE en tant que vue matérialisée #64174 (Raúl Marín).
  • Query Cache : considérer comme différentes des requêtes identiques exécutées sur différentes bases de données #64199 (Robert Schulze).
  • Ignorer text_log pour Keeper #64218 (Antonio Andelic).
  • Corriger une erreur logique : mauvaise conversion de type pour une table Buffer avec prewhere. #64388 (Nikolai Kochetov).

version de ClickHouse 24.4, 2024-04-30. Présentation, Vidéo

Notes de mise à niveau

  • clickhouse-odbc-bridge et clickhouse-library-bridge sont désormais des paquets distincts. Cela résout #61677. #62114 (Alexey Milovidov).
  • Il n’est plus possible de définir max_parallel_replicas (pour la lecture parallèle expérimentale à partir de répliques) sur 0, car cela n’a pas de sens. Résout #60140. #61201 (Kruglov Pavel).
  • Suppression de la prise en charge de la requête INSERT WATCH (qui fait partie de la fonctionnalité obsolète LIVE VIEW). #62382 (Alexey Milovidov).
  • Suppression du paramètre optimize_monotonous_functions_in_order_by. #63004 (Raúl Marín).
  • Suppression de l’étiquette Experimental du database engine Replicated. Il est désormais au stade Beta. #62937 (Justin de Guzman).

Nouvelle fonctionnalité

  • Prise en charge des CTE récursives. #62074 (Maksim Kita).
  • Prise en charge de la clause QUALIFY. Résout #47819. #62619 (Maksim Kita).
  • Les table engines peuvent désormais faire l’objet de grants, sans effet sur le comportement des utilisateurs existants. #60117 (jsc0218).
  • Ajout d’un S3 disk réinscriptible qui prend en charge les opérations INSERT et ne nécessite pas de métadonnées stockées localement. #61116 (Julia Kartseva). Le principal cas d’usage concerne les system tables.
  • 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).
  • Prise en charge de la suppression de plusieurs tables en même temps, comme avec DROP TABLE a, b, c;. #58705 (zhongyuankai).
  • La modification des table settings d’une table memory via ALTER MODIFY SETTING est désormais prise en charge. Exemple : ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;. #62039 (zhongyuankai).
  • Ajout du query parameter role à la HTTP interface. Il fonctionne de manière similaire à SET ROLE x, en appliquant le rôle avant l’exécution du statement. Cela permet de contourner la limitation de la HTTP interface : les statements multiples ne sont pas autorisés, et il n’est donc pas possible d’envoyer à la fois SET ROLE x et le statement lui-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 pour libérer la mémoire utilisée par la primary key d’une table. #62738 (Pablo Marcos).
  • Ajout des colonnes value1, value2, …, value10 à system.text_log. Ces colonnes contiennent les valeurs utilisées pour formater le message. #59619 (Alexey Katsman).
  • Ajout de la persistent virtual column _block_offset, qui stocke le numéro d’origine de la row dans le block assigné lors de l’insert. La persistance de la column _block_offset peut être activée via le MergeTree setting enable_block_offset_column. Ajout de la virtual column _part_data_version, qui contient soit le numéro minimal du block, soit la version de mutation de la part. La persistent virtual column _block_number n’est plus considérée comme Experimental. #60676 (Anton Popov).
  • Ajout d’un setting 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).

Amélioration des performances

  • Amélioration du push down des filtres de JOIN à l’aide de sets équivalents. #61216 (Maksim Kita).
  • Optimisation de la conversion de OUTER JOIN en INNER JOIN lorsque le filtre appliqué après le JOIN filtre 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).
  • Amélioration pour AWS S3. Le client doit envoyer l’en-tête ‘Keep-Alive: timeout=X’ au serveur. Si un client reçoit du serveur une réponse avec cet en-tête, il doit utiliser la valeur fournie par le serveur. De plus, il est préférable pour un client de ne pas utiliser une connexion proche de l’expiration afin d’éviter une condition de concurrence lors de la fermeture de la connexion. #62249 (Sema Checherinda).
  • Réduction de la surcharge liée aux mutations pour les SELECTs (v2). #60856 (Azat Khuzhin).
  • Les fonctions les plus fréquemment appelées dans PODArray sont désormais forcées à être inline. #61144 (李扬).
  • Accélération du parsing du JSON en ignorant le reste de l’objet lorsque toutes les colonnes requises ont été lues. #62210 (lgbo).
  • Amélioration des insert select triviales depuis des fichiers dans les table functions file/s3/hdfs/url/… Ajout d’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).
  • 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 à parser. #62634 (LiuNeng).
  • Les SELECTs sur system.query_cache sont désormais sensiblement plus rapides lorsque le query cache contient beaucoup d’entrées (par ex. plus de 100.000). #62671 (Robert Schulze).
  • Moins de contention dans le cache du système de fichiers (partie 3) : exécution de la suppression depuis le système de fichiers sans verrou lors de la tentative de réservation d’espace. #61163 (Kseniia Sumarokova).
  • Accélération du redimensionnement dynamique du cache du système de fichiers. #61723 (Kseniia Sumarokova).
  • Le dictionary source avec INVALIDATE_QUERY n’est plus rechargé deux fois au démarrage. #62050 (vdimir).
  • Correction d’un problème où, lorsqu’un = 1 ou = 0 redondant est ajouté après une expression booléenne impliquant la clé primaire, l’index primaire n’est pas utilisé. Par exemple, SELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1 et SELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0 effectuent tous deux un parcours complet de la table, alors que l’index primaire pourrait être utilisé. #62142 (josh-hildred).
  • Renvoyer un flux de fragments depuis system.remote_data_paths au lieu d’accumuler l’ensemble du résultat dans un seul gros fragment. Cela permet d’utiliser moins de mémoire, d’afficher une progression intermédiaire et d’annuler la requête. #62613 (Alexander Gololobov).

Fonctionnalité expérimentale

  • Prise en charge d’un tampon d’écriture parallèle pour Azure Blob Storage, géré par le paramètre azure_allow_parallel_part_upload. #62534 (SmitaRKulkarni).
  • Le cache de pages en espace utilisateur fonctionne désormais avec le stockage web statique (disk(type = web)). Utilisez le paramètre client use_page_cache_for_disks_without_file_cache=1 pour l’activer. #61911 (Michael Kolupaev).
  • Les variantes Bool et numériques ne sont plus considérées comme suspectes dans le type Variant. #61999 (Kruglov Pavel).
  • Amélioration de la conversion de String vers Variant à l’aide de l’analyse syntaxique. #62005 (Kruglov Pavel).
  • Prise en charge de Variant dans les fonctions JSONExtract. #62014 (Kruglov Pavel).
  • Le type Variant est désormais marqué comme comparable, ce qui permet de l’utiliser dans une clé primaire. #62693 (Kruglov Pavel).

Amélioration

  • Par commodité, SELECT * FROM numbers() fonctionnera de la même manière que SELECT * FROM system.numbers — sans limite. #61969 (YenchangChan).
  • Introduction de tags consumer/producer distincts pour la configuration Kafka. Cela évite les avertissements de librdkafka (une mauvaise bibliothèque C avec beaucoup de bogues) signalant que des propriétés consumer ont été spécifiées pour des instances producer, et inversement (par exemple Configuration property session.timeout.ms is a consumer property and will be ignored by this producer instance). Clôture : #58983. #58956 (Aleksandr Musorin).
  • Les fonctions date_diff et age calculent désormais leur résultat avec une précision à la nanoseconde au lieu de la microseconde. Elles proposent aussi désormais nanosecond (ou nanoseconds ou ns) comme valeur possible pour le paramètre unit. #61409 (Austin Kothig).
  • Ajout des unités nano-, micro- et milliseconde pour date_trunc. #62335 (Misz606).
  • Rechargement de la chaîne de certificats lors du rechargement du certificat. #61671 (Pervakov Grigorii).
  • Tentative de prévention de l’erreur #60432 en interdisant l’attachement d’une table s’il existe une replica active pour ce chemin de replica. #61876 (Arthur Passos).
  • Ajout de la prise en charge de input pour clickhouse-local. #61923 (Azat Khuzhin).
  • Le Join table engine avec la strictness ANY est désormais cohérent après rechargement. Lorsque plusieurs rows avec la même key sont insérées, la première a la priorité (auparavant, elle était choisie aléatoirement lors du chargement de la table). Corrige #51027. #61972 (vdimir).
  • Déduction automatique des column types Nullable à partir du schéma Apache Arrow. #61984 (Maksim Kita).
  • Possibilité d’annuler le merge parallèle des aggregate states pendant l’aggregation. Example : uniqExact. #61992 (Maksim Kita).
  • Utilisation de system.keywords pour alimenter les suggestions, et utilisation de ceux-ci partout en interne. #62000 (Nikita Mikhaylov).
  • OPTIMIZE FINAL pour ReplicatedMergeTree attendra désormais la fin des merges actifs, puis réessaiera de planifier un merge final. Ce comportement se rapproche ainsi davantage de celui de MergeTree. #62067 (Nikita Taranov).
  • Lors de la lecture de données à partir d’un Hive Text File, la première ligne du fichier était utilisée pour ajuster le nombre de champs en entrée. Il arrivait parfois que le nombre de champs de cette première ligne ne corresponde pas à celui défini dans la Hive table. Par exemple, si la Hive table 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, alors le nombre de champs en entrée est ramené à 2. Si la ligne suivante du fichier texte contient 3 champs, le troisième ne peut alors pas être lu et reçoit à la place la valeur par défaut 0, ce qui est incorrect. #62086 (KevinyhZou).
  • CREATE AS copie le commentaire de la table. #62117 (Pablo Marcos).
  • Ajout de la progression des requêtes à la table zookeeper. #62152 (JackyWoo).
  • Ajout de la possibilité d’activer le collector de trace (temps réel et CPU) à l’échelle du serveur. #62189 (alesapin).
  • 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 suppressions légères. #62195 (Anton Popov).
  • Distinction entre booléens et entiers lors de l’analyse des valeurs des 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. Ferme #60021, #31074 et #53761. #62208 (Arthur Passos).
  • Ne plus créer de répertoire pour les UDF dans clickhouse-client s’il n’existe pas. Cela ferme #59597. #62366 (Alexey Milovidov).
  • 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 déclencher 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 les paramètres 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).
  • Le répertoire d’installation par défaut sur macOS passe de /usr/bin à /usr/local/bin. Cela est nécessaire, car la protection de l’intégrité du système d’Apple introduite avec macOS El Capitan (2015) empêche l’écriture dans /usr/bin, même avec sudo. #62489 (haohang).
  • Faire en sorte que transform renvoie toujours la première correspondance. #62518 (Raúl Marín).
  • Ajout de la colonne hostname manquante à la table système blob_storage_log. #62456 (Jayme Bird).
  • Par souci de cohérence avec les autres tables système, system.backup_log dispose désormais d’une colonne event_time. #62541 (Jayme Bird).
  • La table system.backup_log utilise désormais la clé de tri “par défaut” event_date, event_time, comme les autres moteurs de table _log. #62667 (Nikita Mikhaylov).
  • Éviter l’évaluation des expressions DEFAULT de la table lors de l’exécution de RESTORE. #62601 (Vitaly Baranov).
  • Le stockage S3 et les sauvegardes nécessitent également les mêmes paramètres keep-alive par défaut que le disque S3. #62648 (Sema Checherinda).
  • Ajouter l’identifiant client de librdkafka (cette tristement célèbre bibliothèque C, qui comporte de nombreux bugs) aux messages de journalisation afin de pouvoir différencier ceux provenant de différents consommateurs d’une même table. #62813 (János Benjamin Antal).
  • Autoriser les macros spéciales {uuid} et {database} dans le chemin ZooKeeper d’une base de données Replicated. #62818 (Vitaly Baranov).
  • Autoriser l’utilisation d’une clé de quota avec différents schémas d’authentification dans les requêtes HTTP. #62842 (Kseniia Sumarokova).
  • Réduire la verbosité de l’argument de ligne de commande --help dans clickhouse client et clickhouse local. La sortie précédente est désormais générée par --help --verbose. #62973 (Yarik Briukhovetskyi).
  • log_bin_use_v1_row_events a été supprimé dans MySQL 8.3, et le moteur expérimental MaterializedMySQL a été adapté en conséquence #60479. #63101 (Eugene Klimov). Auteur : Nikolay Yankin.

Amélioration de la compilation, des tests et du packaging

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

  • Correction d’une erreur logique lors de l’annulation d’une transaction d’insertion avec quorum. #61953 (Han Fei).
  • Correction d’une erreur de parseur lors de l’utilisation de COUNT(*) avec la clause FILTER #61357 (Duc Canh Le).
  • Correction d’une erreur logique dans group_by_use_nulls + grouping sets + analyseur + materialize/constant #61567 (Kruglov Pavel).
  • Annulation des merges avant la suppression des parts déplacées #61610 (János Benjamin Antal).
  • Correction d’un arrêt brutal dans Apache Arrow #61720 (Kruglov Pavel).
  • Recherche de l’indicateur convert_to_replicated dans le bon chemin correspondant au disque concerné #61769 (Kirill).
  • Correction d’une possible compétition d’accès aux données des connexions pour distributed_foreground_insert/distributed_background_insert_batch #61867 (Azat Khuzhin).
  • Marquage de l’erreur CANNOT_PARSE_ESCAPE_SEQUENCE comme erreur d’analyse afin de pouvoir l’ignorer dans les formats d’entrée ligne par ligne #61883 (Kruglov Pavel).
  • Correction de l’écriture du message d’Exception dans le format de sortie HTTP lorsque http_wait_end_of_query est utilisé #61951 (Kruglov Pavel).
  • Correction complète de LowCardinality avec les fonctions JSONExtact #61957 (Nikita Mikhaylov).
  • Crash dans le moteur Merge si la ROW POLICY n’a pas d’expression #61971 (Ilya Golshtein).
  • Correction d’une exception non interceptée dans le destructeur de WriteBufferAzureBlobStorage #61988 (SmitaRKulkarni).
  • Correction de CREATE TABLE sans définition de colonnes pour ReplicatedMergeTree #62040 (Azat Khuzhin).
  • Correction de optimize_skip_unused_shards_rewrite_in pour une clé de partitionnement composite #62047 (Azat Khuzhin).
  • ReadWriteBufferFromHTTP définit l’en-tête host correct lors d’une redirection #62068 (Sema Checherinda).
  • Correction du cas où la table externe ne pouvait pas analyser le type de données Bool #62115 (Duc Canh Le).
  • Analyseur : correction de la résolution des paramètres de requête #62186 (Dmitry Novik).
  • Correction de la restauration des parts en mode readonly #62207 (Vitaly Baranov).
  • Correction d’un crash dans une définition d’index contenant une UDF SQL #62225 (vdimir).
  • Correction de la graine aléatoire NULL pour generateRandom avec l’analyseur. #62248 (Nikolai Kochetov).
  • Prise en charge correcte des colonnes constantes dans Distinct Transfom #62250 (Antonio Andelic).
  • Correction de Parts Splitter pour les requêtes avec le modificateur FINAL #62268 (Nikita Taranov).
  • Analyseur : correction de la résolution d’alias vers une vue paramétrée #62274 (Dmitry Novik).
  • Analyseur : correction de la résolution des noms à partir des portées parentes #62281 (Dmitry Novik).
  • Correction de argMax avec une colonne numérique Nullable non native #62285 (Raúl Marín).
  • Correction de BACKUP et RESTORE d’une vue matérialisée dans une base de données Ordinary #62295 (Vitaly Baranov).
  • Correction d’une data race sur les scalaires dans Context #62305 (Kruglov Pavel).
  • Correction de la clé primaire dans une vue matérialisée #62319 (Murat Khairulin).
  • Ne pas construire de pipeline d’insert multithreadé pour les tables qui ne le prennent pas en charge #62333 (vdimir).
  • Correction de l’analyseur avec des arguments positionnels dans une requête distribuée #62362 (flynn).
  • Correction du pushdown de filtre depuis additional_table_filters dans le moteur Merge avec l’analyseur #62398 (Kruglov Pavel).
  • Correction des requêtes de table GLOBAL IN avec l’analyseur. #62409 (Nikolai Kochetov).
  • Prise en compte des paramètres truncate_on_insert/create_new_file_on_insert dans les moteurs S3/HDFS/Azure lors de l’écriture partitionnée #62425 (Kruglov Pavel).
  • Correction du chemin de restauration de sauvegarde pour AzureBlobStorage #62447 (SmitaRKulkarni).
  • Correction de SimpleSquashingChunksTransform #62451 (Nikita Taranov).
  • Correction de la capture d’une lambda imbriquée. #62462 (Nikolai Kochetov).
  • Évite un crash lors de la lecture de Protobuf avec des types récursifs #62506 (Raúl Marín).
  • Correction d’un bug lors du déplacement d’une partition vers elle-même #62524 (helifu).
  • Correction d’une sous-requête scalaire dans LIMIT #62567 (Nikolai Kochetov).
  • Correction d’un segfault dans le moteur Hive expérimental et non pris en charge, que nous n’apprécions de toute façon guère #62578 (Nikolay Degterinsky).
  • Correction d’une fuite de mémoire dans groupArraySorted #62597 (Antonio Andelic).
  • Correction d’un crash dans largestTriangleThreeBuckets #62646 (Raúl Marín).
  • Correction de tumble[Start,End] et hop[Start,End] pour des résolutions plus élevées #62705 (Jordi Villar).
  • Correction de l’état du combinateur argMin/argMax #62708 (Raúl Marín).
  • Correction de l’échec des données temporaires dans le cache en raison de l’optimisation de la contention sur le verrou du cache #62715 (Kseniia Sumarokova).
  • Correction d’un crash dans la fonction mergeTreeIndex #62762 (Anton Popov).
  • correction : mise à jour : colonnes matérialisées imbriquées : corrections des vérifications de taille #62773 (Eliot Hautefeuille).
  • Correction du fait que le modificateur FINAL n’est pas respecté dans une CTE avec l’analyseur #62811 (Duc Canh Le).
  • Correction d’un crash dans la fonction formatRow avec le format JSON et l’interface HTTP #62840 (Anton Popov).
  • Azure : correction de la construction de l’URL finale à partir de l’objet endpoint #62850 (Daniel Pozo Escalona).
  • Correction du codec GCD #62853 (Nikita Taranov).
  • Correction de la clé LowCardinality(Nullable) dans hyperrectangle #62866 (Amos Bird).
  • Correction de fromUnixtimestamp en syntaxe Joda lorsque la valeur d’entrée dépasse UInt32 #62901 (KevinyhZou).
  • Désactivation de optimize_rewrite_aggregate_function_with_if pour sum(nullable) #62912 (Raúl Marín).
  • Correction de PREWHERE pour StorageBuffer avec différents types de colonnes dans la table source. #62916 (Nikolai Kochetov).
  • Correction du traitement incorrect de l’échec de création du répertoire de clé de cache pour les données temporaires dans le cache #62925 (Kseniia Sumarokova).
  • gRPC : correction d’un crash sur une connexion peer IPv6 #62978 (Konstantin Bogdanov).
  • Correction d’un possible CHECKSUM_DOESNT_MATCH (et d’autres) lors de fetches répliqués #62987 (Azat Khuzhin).
  • Correction d’un arrêt dû à une exception non interceptée dans les données temporaires du cache #62998 (Kseniia Sumarokova).
  • Correction de optimize&#95;rewrite&#95;aggregate&#95;function&#95;with&#95;if avec transtypage implicite #62999 (Raúl Marín).
  • Correction d’une exception non gérée dans ~RestorerFromBackup #63040 (Vitaly Baranov).
  • Ne pas supprimer les constantes du serveur de la clé GROUP BY pour la requête secondaire. #63047 (Nikolai Kochetov).
  • Correction d’une évaluation incorrecte de la monotonie de la fonction abs #63097 (Duc Canh Le).
  • Définition du nom du serveur pour la négociation SSL dans le engine MongoDB #63122 (Alexander Gololobov).
  • Utilisation de la DB spécifiée par l’utilisateur au lieu de “config” pour la vérification de la version du wire protocol MongoDB #63126 (Alexander Gololobov).

Version 24.3 LTS de ClickHouse, 2024-03-27. Présentation, Vidéo

Notes de mise à niveau

  • Le paramètre allow_experimental_analyzer est activé par défaut et bascule l’analyse des requêtes vers une nouvelle implémentation, offrant une meilleure compatibilité et une couverture fonctionnelle plus complète. La fonctionnalité “analyzer” est désormais considérée comme bêta plutôt qu’expérimentale. Vous pouvez rétablir l’ancien comportement en définissant compatibility sur 24.2 ou en désactivant le paramètre allow_experimental_analyzer. Regardez la vidéo sur YouTube.
  • ClickHouse autorise des données binaires arbitraires dans le type de données String, généralement encodé en UTF-8. Les Strings Parquet/ORC/Arrow ne prennent en charge que l’UTF-8. C’est pourquoi vous pouvez choisir le 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, l’utilisation de 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 prend en charge chacune de ces méthodes de compression. Certains outils moins performants ne prennent pas en charge la méthode de compression lz4, plus rapide, c’est pourquoi nous avons choisi 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 est davantage destiné à des usages bas niveau). #61817 (Alexey Milovidov).
  • Dans la nouvelle version de ClickHouse, les fonctions geoDistance, greatCircleDistance et greatCircleAngle utiliseront le type de données à virgule flottante double précision 64 bits pour les calculs internes et 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 en définissant compatibility sur 24.2 ou une version antérieure. #61848 (Alexey Milovidov). Coécrit avec Geet Patel.
  • Les data parts obsolètes en mémoire 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 data parts en mémoire, car elles n’étaient disponibles qu’avant la version 23.5 et uniquement si vous les activiez manuellement en spécifiant les SETTINGS correspondants pour une table MergeTree. Pour vérifier si vous avez des data parts 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 data parts 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 data parts en mémoire. S’il y a des data parts 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).
  • Le nom de la colonne a été changé de duration_ms à duration_microseconds dans la table system.zookeeper afin de refléter le fait que la durée est exprimée avec une résolution à la microseconde. #60774 (Duc Canh Le).
  • Rejeter les 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 repository GitHub distinct : https://github.com/ClickHouse/copier. Il n’est plus inclus dans le bundle, mais reste disponible en téléchargement séparé. Cela clôture : #60734 Cela clôture : #60540 Cela clôture : #60250 Cela clôture : #52917 Cela clôture : #51140 Cela clôture : #47517 Cela clôture : #47189 Cela clôture : #46598 Cela clôture : #40257 Cela clôture : #36504 Cela clôture : #35485 Cela clôture : #33702 Cela clôture : #26702.
  • Pour améliorer la compatibilité avec MySQL, l’alias de compatibilité 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).
  • Interdire par défaut SimpleAggregateFunction dans ORDER BY des tables MergeTree (comme AggregateFunction, car ils ne sont pas comparables) (utilisez allow_suspicious_primary_key pour les autoriser). #61399 (Azat Khuzhin).
  • Le database engine Ordinary est obsolète. Vous recevrez un avertissement dans clickhouse-client si votre server l’utilise. Cela clôture #52229. #56942 (shabroo).

Nouvelle fonctionnalité

  • Prise en charge de la lecture et de l’écriture des sauvegardes au format tar (en plus de zip). #59535 (josh-hildred).
  • Prise en charge des buckets S3 Express. #59965 (Nikita Taranov).
  • Possibilité d’attacher des parts depuis un autre disk (en utilisant une copie au lieu d’un lien physique). #60112 (Unalian).
  • Tables Memory avec taille plafonnée : contrôlées par leurs paramètres min_bytes_to_keep, max_bytes_to_keep, min_rows_to_keep et max_rows_to_keep. #60612 (Jake Bamrah).
  • Limites distinctes pour le nombre de requêtes en attente et en cours d’exécution. Ajout d’un 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 d’une table system.keywords qui contient tous les mots-clés du parser. Elle est surtout nécessaire et sera utilisée pour améliorer le fuzzing et la coloration syntaxique. #51808 (Nikita Mikhaylov).
  • Ajout de la prise en charge de ATTACH PARTITION ALL. #61107 (Kirill Nikiforov).
  • Ajout d’une nouvelle fonction, getClientHTTPHeader. Cela clôt le ticket #54665. Coécrit avec @lingtaolf. #61820 (Alexey Milovidov).
  • Ajout de generate_series comme table function (alias de compatibilité PostgreSQL pour la fonction existante numbers). Cette fonction génère une table contenant une progression arithmétique de nombres naturels. #59390 (divanik).
  • Ajout d’un mode pour topK/topkWeighed qui renvoie le nombre de valeurs et son erreur. #54508 (UnamedRus).
  • Ajout de la fonction toMillisecond, qui renvoie la composante milliseconde pour les valeurs de type DateTime ou DateTime64. #60281 (Shaun Struwig).
  • Possibilité de configurer des handlers de redirection HTTP pour clickhouse-server. Par exemple, vous pouvez faire en sorte que / redirige vers l’UI Play. #60390 (Alexey Milovidov).

Amélioration des performances

  • Optimisation de la fonction dotProduct pour éviter les copies mémoire inutiles et coûteuses. #60928 (Robert Schulze).
  • Affichage 30x plus rapide pour les entiers 256 bits. #61100 (Raúl Marín).
  • Si la clé primaire de la table contient surtout des colonnes inutiles, ne les conservez pas en mémoire. Ce comportement est contrôlé par un nouveau réglage primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns, dont la valeur par défaut est 0.9, ce qui signifie : pour une clé primaire composite, si une colonne change de valeur dans au moins 0,9 de tous les cas, les colonnes suivantes ne seront pas chargées. #60255 (Alexey Milovidov).
  • Améliore les performances des méthodes d’agrégation sérialisées lorsqu’elles impliquent plusieurs colonnes Nullable. #55809 (Amos Bird).
  • Construit la sortie JSON de façon lazy afin d’améliorer les performances de ALL JOIN. #58278 (LiuNeng).
  • Rend réutilisables, pour tous les cas d’usage, les connexions HTTP/HTTPS vers des services externes comme AWS S3, même lorsque la réponse est 3xx ou 4xx. #58845 (Sema Checherinda).
  • 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).
  • Optimisation triviale du filtre de colonne. Le pic de mémoire peut être réduit à 44 % de la valeur d’origine dans certains cas. #59698 (李扬).
  • Exécute la fonction multiIf de façon columnar lorsque le type sous-jacent du type de résultat est un nombre. #60384 (李扬).
  • Mutex presque 2x plus rapides. #60823 (Azat Khuzhin).
  • Draine plusieurs connexions en parallèle lorsqu’une requête distribuée se termine. #60845 (lizhuoyu5).
  • Optimise le déplacement des données entre les colonnes d’un nombre Nullable ou d’une chaîne Nullable, ce qui améliore certains micro-benchmarks. #60846 (李扬).
  • Les opérations sur le cache du système de fichiers souffriront moins de la contention sur les verrous. #61066 (Alexey Milovidov).
  • Optimise ARRAY JOIN et les autres JOIN en empêchant une optimisation incorrecte du compilateur. Ferme #61074. #61075 (李扬).
  • Si une requête contenant une erreur de syntaxe utilisait le sélecteur COLUMNS avec une expression régulière, celle-ci était compilée à chaque retour en arrière du parseur, au lieu de l’être une seule fois. C’était une erreur fondamentale. L’expression régulière compilée était placée dans l’AST. Or, la lettre A de AST signifie « abstract », ce qui veut dire qu’il ne doit pas contenir d’objets lourds. Des parties de l’AST peuvent être créées puis supprimées pendant l’analyse, notamment lors d’un grand nombre de retours en arrière. Cela ralentit l’analyse et permet donc à un utilisateur readonly de provoquer un DoS. Mais le principal problème est que cela bloque la progression des fuzzers. #61543 (Alexey Milovidov).
  • Ajout d’une nouvelle passe de l’analyseur pour optimiser l’opérateur IN lorsqu’il n’y a qu’une seule valeur. #61564 (LiuNeng).
  • DNSResolver mélange l’ensemble des adresses IP résolues, ce qui est nécessaire pour utiliser de manière uniforme plusieurs points de terminaison d’AWS S3. #60965 (Sema Checherinda).

Fonctionnalité expérimentale

  • Prise en charge de la lecture parallèle pour Azure Blob Storage. Cela améliore les performances du stockage d’objets Azure expérimental. #61503 (SmitaRKulkarni).
  • Ajout d’un WriteBuffer asynchrone pour Azure Blob Storage, similaire à S3. Cela améliore les performances du stockage d’objets Azure expérimental. #59929 (SmitaRKulkarni).
  • Utilisation d’une identité managée pour les E/S des sauvegardes avec Azure Blob Storage. Ajout d’un paramètre pour empêcher ClickHouse de tenter de créer un conteneur inexistant, ce qui nécessite des autorisations au niveau du compte de stockage. #61785 (Daniel Pozo Escalona).
  • Ajout d’un paramètre parallel_replicas_allow_in_with_subquery = 1 qui permet d’utiliser des sous-requêtes dans les expressions IN avec les répliques parallèles. #60950 (Nikolai Kochetov).
  • Modification de la réplication « zero-copy » : 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 également être supprimé. #57575 (Sema Checherinda).

Amélioration

  • Utiliser MergeTree comme table engine par défaut. #60524 (Alexey Milovidov)
  • Activer output_format_pretty_row_numbers par défaut. C’est plus pratique à l’usage. #61791 (Alexey Milovidov).
  • Dans la version précédente, certains nombres dans les Pretty formats n’étaient pas affichés de manière assez élégante. #61794 (Alexey Milovidov).
  • Une valeur longue dans les Pretty formats ne sera pas tronquée si c’est l’unique valeur du resultset, comme dans le résultat de la query SHOW CREATE TABLE. #61795 (Alexey Milovidov).
  • À l’instar de clickhouse-local, clickhouse-client acceptera l’option --output-format comme synonyme de l’option --format. Cela clôture #59848. #61797 (Alexey Milovidov).
  • Si stdout est un terminal et que l’output format n’est pas spécifié, clickhouse-client et les outils similaires utiliseront PrettyCompact par défaut, comme en mode interactif. clickhouse-client et clickhouse-local géreront les arguments de ligne de commande des formats d’entrée et de sortie de manière unifiée. Cela clôture #61272. #61800 (Alexey Milovidov).
  • Regrouper les chiffres avec des underscores dans les Pretty formats pour améliorer la lisibilité. Cela est contrôlé par un nouveau paramètre, output_format_pretty_highlight_digit_groups. #61802 (Alexey Milovidov).
  • Ajouter la possibilité de redéfinir les paramètres INSERT initiaux via SYSTEM FLUSH DISTRIBUTED. #61832 (Azat Khuzhin).
  • Activer par défaut le profiling des processors (temps passé / octets entrants et sortants pour le tri, l’aggregation, …). #61096 (Azat Khuzhin).
  • Prise en charge des fichiers sans extension de format dans la base de données Filesystem. #60795 (Kruglov Pavel).
  • Rendre tous les noms de format insensibles à la casse, comme Tsv, ou TSV, ou tsv, ou même rowbinary. #60420 (豪肥肥). J’apprécierais que vous continuiez à les écrire correctement, par exemple JSON 😇, et non Json 🤮, mais cela ne nous dérange pas si vous les écrivez comme vous préférez.
  • Ajout du mode none_only_active pour le paramètre distributed_ddl_output_mode. #60340 (Alexander Tokmakov).
  • Le tableau de bord Advanced a des couleurs légèrement meilleures pour les graphiques multilignes. #60391 (Alexey Milovidov).
  • Le tableau de bord Advanced dispose désormais de contrôles toujours visibles lors du défilement. Cela vous permet d’ajouter un nouveau graphique sans remonter en haut. #60692 (Alexey Milovidov).
  • 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 pour vous assurer que chaque colonne existe. #47427 (sunny).
  • Les types String et les Enums peuvent être utilisés dans le même contexte, par exemple dans les tableaux, les requêtes UNION et les expressions conditionnelles. Cela corrige #60726. #60727 (Alexey Milovidov).
  • Autorise la déclaration d’Enums dans la structure des données externes pour le traitement des requêtes (il s’agit d’une table temporaire immédiate que vous pouvez fournir à votre requête). #57857 (Duc Canh Le).
  • Prend en compte les lignes supprimées par lightweight delete lors de la sélection des parts à fusionner, afin de mieux estimer la taille sur disque de la part résultante. #58223 (Zhuo Qiu).
  • Ajout de commentaires sur 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. Cela est utile pour les colonnes virtuelles non constantes comme _part_offset. #59033 (Amos Bird). Amélioration générale de l’utilisation des colonnes virtuelles. Il est désormais autorisé d’utiliser des colonnes virtuelles dans PREWHERE (cela 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 la forme d’un commentaire de colonne dans la requête DESCRIBE lorsque le paramètre describe_include_virtual_columns est activé. #60205 (Anton Popov).
  • Au lieu d’utiliser une clé constante, le stockage d’objets génère désormais une clé pour déterminer la capacité de suppression d’objets. #59495 (Sema Checherinda).
  • Autorise “local” comme type de stockage d’objets à la place de “local_blob_storage”. #60165 (Kseniia Sumarokova).
  • 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 vous avez une policy multi-disques pour une table, comme c’est déjà le cas pour tout dans le moteur Distributed). #60225 (Azat Khuzhin).
  • Ajout d’un paramètre pour forcer le cache en lecture directe pour les fusions. #60308 (Kseniia Sumarokova).
  • Amélioration du protocole de compatibilité MySQL. Le ticket #57598 mentionne un comportement différent concernant la gestion des transactions. L’envoi d’un COMMIT/ROLLBACK lorsqu’aucune transaction n’est active est signalé comme une erreur, contrairement au comportement de MySQL. #60338 (PapaToemmsn).
  • 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 : interruption du démarrage si un snapshot invalide est détecté, afin d’éviter toute perte de données. #60537 (Antonio Andelic).
  • Mise à jour de tzdata vers 2024a. #60768 (Raúl Marín).
  • 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 de la prise en charge de la syntaxe START TRANSACTION, couramment utilisée avec MySQL, ce qui résout https://github.com/ClickHouse/ClickHouse/discussions/60865. #60886 (Zach Naimon).
  • Ajout d’un indicateur pour l’algorithme de jointure par fusion avec tri complet afin de traiter null comme la plus grande ou la plus petite valeur. Le comportement peut ainsi être rendu compatible avec d’autres systèmes SQL, comme Apache Spark. #60896 (loudongfeng).
  • Prise en charge de la détection du format de sortie à partir de l’extension du fichier dans clickhouse-client et clickhouse-local. #61036 (豪肥肥).
  • Mise à jour de la limite de mémoire à l’exécution lorsque la valeur des cgroups Linux change. #61049 (Han Fei).
  • 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é MySQL) sont désormais insensibles à la casse, comme attendu pour des alias de compatibilité SQL. #61114 (Alexey Milovidov).
  • Amélioration 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 privilèges de révocation. Exemple : GRANT SELECT ON *.* TO user1; REVOKE SELECT ON system.* FROM user1;. #61115 (pufit).
  • 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 configuration 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 mappings mémoire de la mémoire virtuelle : VMMaxMapCount & VMNumMaps. Clôt #60662. #61354 (Tuan Pham Anh).
  • Utilise le paramètre temporary_files_codec partout où des données temporaires sont créées, par exemple pour le tri en mémoire externe et le GROUP BY en mémoire externe. Auparavant, cela ne fonctionnait que dans l’algorithme de JOIN partial_merge. #61456 (Maksim Kita).
  • Ajout d’un nouveau paramètre max_parser_backtracks permettant de limiter la complexité de l’analyse des query. #61502 (Alexey Milovidov).
  • Réduction de la contention lors du redimensionnement dynamique du filesystem cache. #61524 (Kseniia Sumarokova).
  • Désactivation du mode segmenté 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 system.blob_storage_log. #61622 (YenchangChan).
  • Ajout de la fonction current_user comme alias de compatibilité pour MySQL. #61770 (Yarik Briukhovetskyi).
  • Correction d’états de fonctions d’agrégation à virgule flottante incohérents dans des clusters mixtes x86-64 / ARM #60610 (Harry Lee).

Amélioration de la compilation/des tests/du packaging

  • Le query profiler en temps réel fonctionne désormais sur AArch64. Dans les versions précédentes, il ne fonctionnait que lorsqu’un programme ne passait pas de temps dans un appel système. #60807 (Alexey Milovidov).
  • La version de ClickHouse a été ajoutée aux labels Docker. Résout #54224. #60949 (Nikolay Monkov).
  • Mise à niveau de prqlc vers la version 0.11.3. #60616 (Maximilian Roos).
  • Ajout d’un fuzzer générique pour le texte des requêtes dans clickhouse-local. #61508 (Alexey Milovidov).

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

  • Correction de finished_mutations_to_keep=0 pour MergeTree (comme l’indique la documentation, 0 signifie tout conserver) #60031 (Azat Khuzhin).
  • Un problème affectait l’optimisation FINAL ; voici comment l’auteur le décrit : “PartsSplitter invalid ranges for the same part”. #60041 (Maksim Kita).
  • Un problème affectait Apache Hive, qui est expérimental et non pris en charge. #60262 (shanfengp).
  • Une amélioration pour les répliques parallèles expérimentales : 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 simple avec la nouvelle option de configuration disks #60396 (Kseniia Sumarokova).
  • Tentative de correction de l’erreur logique ‘Cannot capture column because it has incompatible type’ dans mapContainsKeyLike #60451 (Kruglov Pavel).
  • Éviter le calcul des sous-requêtes scalaires pour CREATE TABLE. #60464 (Nikolai Kochetov).
  • Correction d’un interblocage lors de l’analyse en parallèle quand de nombreuses lignes sont ignorées à cause d’erreurs #60516 (Kruglov Pavel).
  • Un problème affectait la prise en charge expérimentale de KQL (Kusto) : correction de max_query_size_for_kql_compound_operator : #60534 (Yong Wang).
  • Correction dans Keeper : ajout de timeouts lors de l’attente des journaux de commit #60544 (Antonio Andelic).
  • Ne plus afficher d’astuces 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 erreur logique en cas de mauvais type de valeur pour le paramètre de compatibilité #60596 (Kruglov Pavel).
  • fix(prql) : gestion robuste des panic #60615 (Maximilian Roos).
  • Correction de intDiv pour les arguments Decimal et Date #60672 (Yarik Briukhovetskyi).
  • Correction : développer la CTE dans la requête alter modify #60682 (Yakov Olkhovskiy).
  • Correction de system.parts pour le database engine 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épassement de tampon dans CompressionCodecMultiple #60731 (Alexey Milovidov).
  • Supprime des incohérences dans SQL/JSON #60738 (Alexey Milovidov).
  • Supprime une assertion incorrecte dans la fonction d’agrégation quantileGK #60740 (李扬).
  • Corrige un bug de insert-select + insert_deduplication_token en définissant streams à 1 #60745 (Jordi Villar).
  • Empêche 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).
  • Corrige toStartOfInterval #60763 (Andrey Zvonov).
  • Corrige un crash dans arrayEnumerateRanked #60764 (Raúl Marín).
  • Corrige un crash lors de l’utilisation de input() dans INSERT SELECT JOIN #60765 (Kruglov Pavel).
  • Corrige un crash lorsque allow_experimental_analyzer a une valeur différente dans les sous-requêtes #60770 (Dmitry Novik).
  • Supprime la récursion lors de la lecture depuis S3 #60849 (Antonio Andelic).
  • Corrige un blocage possible en cas d’erreur dans HashedDictionaryParallelLoader #60926 (vdimir).
  • Corrige RESTORE asynchrone avec une base de données Replicated (fonctionnalité expérimentale) #60934 (Antonio Andelic).
  • Corrige un interblocage dans les inserts asynchrones vers les tables Log via le protocole natif #61055 (Anton Popov).
  • Corrige l’exécution différée de l’argument par défaut dans dictGetOrDefault pour RangeHashedDictionary #61196 (Kruglov Pavel).
  • Corrige plusieurs bugs 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 bugs 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 une requête ATTACH avec ON CLUSTER externe #61365 (Nikolay Degterinsky).
  • Corrige l’optimisation des clés consécutives pour les clés Nullable #61393 (Anton Popov).
  • corrige le problème de fractionnement 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 une incohérence lors de la lecture de system.parts à l’aide d’un UUID. #61479 (Dan Wu).
  • Corrige ALTER QUERY MODIFY SQL SECURITY #61480 (pufit).
  • Corrige un crash dans window view (fonctionnalité expérimentale) #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înes avec une position constante #61547 (Antonio Andelic).
  • Corrige l’erreur provoquée par addDays lorsqu’il est utilisé avec DateTime64 #61561 (Shuai li).
  • Interdit le type d’entrée LowCardinality pour JSONExtract #61617 (Julia Kartseva).
  • Corrige system.part_log pour async insert avec déduplication #61620 (Antonio Andelic).
  • Corrige une exception Non-ready set pour system.parts. #61666 (Nikolai Kochetov).
  • Corrige actual_part_name pour REPLACE_RANGE (Entry actual part isn't empty yet) #61675 (Alexander Tokmakov).
  • Corrige un signalement du sanitizer dans multiSearchAllPositionsCaseInsensitiveUTF8 pour un UTF-8 incorrect #61749 (pufit).
  • Corrige le fait que le frame RANGE n’est pas pris en charge pour les colonnes Nullable. #61766 (YuanLiu).

Version 24.2 de ClickHouse, 2024-02-29. Présentation, Vidéo

Changement incompatible avec les versions précédentes

  • Validation des types suspects/expérimentaux dans les types imbriqués. Auparavant, nous ne validions pas ces types (sauf JSON) dans des types imbriqués comme Array/Tuple/Map. #59385 (Kruglov Pavel).
  • Ajout d’une vérification de cohérence pour le nombre de threads et la taille des blocs. #60138 (Raúl Marín).
  • Ne plus inférer les Float en notation exponentielle par défaut. Ajout du paramètre input_format_try_infer_exponent_floats pour restaurer le comportement précédent (désactivé par défaut). Clôt #59476. #59500 (Kruglov Pavel).
  • Autorisation des opérations alter entre parenthèses. L’ajout des parenthèses peut être contrôlé via la configuration format_alter_operations_with_parentheses. Par défaut, dans les requêtes formatées, les parenthèses sont ajoutées, car nous stockons les opérations alter formatées à certains endroits comme métadonnées (par exemple : mutations). La nouvelle syntaxe clarifie certaines requêtes dans lesquelles les opérations alter se terminent par une liste. Par exemple : 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 ; par conséquent, son utilisation peut poser problème si des versions récentes et anciennes de ClickHouse coexistent dans un même cluster. #59532 (János Benjamin Antal).
  • Correctif 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 les droits nécessaires pour 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&#95;security. #54901 #60439 (pufit).

Nouvelle fonctionnalité

  • Ajout d’une nouvelle syntaxe permettant de spécifier l’utilisateur définisseur dans une vue/vue matérialisée. Cela permet d’exécuter des SELECT/INSERT à partir de vues sans privilèges explicites sur les tables sous-jacentes. Une vue encapsule donc les privilèges. #54901 #60439 (pufit).
  • 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. Clôture #50576. #59092 (Kruglov Pavel).
  • Mise en œuvre de l’ajustement automatique des délais d’attente des insertions asynchrones. Les settings suivants sont introduits : async_insert_poll_timeout_ms, async_insert_use_adaptive_busy_timeout, async_insert_busy_timeout_min_ms, async_insert_busy_timeout_max_ms, async_insert_busy_timeout_increase_rate, async_insert_busy_timeout_decrease_rate. #58486 (Julia Kartseva).
  • Possibilité de définir un quota pour le nombre maximal d’échecs de connexion séquentiels. #54737 (Alexey Gerasimchuck).
  • Nouvelle fonction d’agrégation groupArrayIntersect. Suite de #49862. #59598 (Yarik Briukhovetskyi).
  • Prise en charge de Backup & Restore pour AzureBlobStorage. Résout #50747. #56988 (SmitaRKulkarni).
  • L’utilisateur peut désormais spécifier directement la chaîne Template dans la requête à l’aide de format_schema_rows_template comme alternative à format_template_row. Clôture #31363. #59088 (Shaun Struwig).
  • Mise en œuvre de la conversion automatique de tables MergeTree de différents types vers le moteur Replicated. Créez un fichier vide convert_to_replicated dans le répertoire de données de la table (/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/) et cette table sera convertie automatiquement au prochain démarrage du serveur. #57798 (Kirill).
  • 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). Il s’agit d’une fonctionnalité destinée aux experts.
  • Prise en charge d’un fichier de credentials JWT pour le moteur de table NATS. #59543 (Nickolaj Jepsen).
  • Mise en œuvre de la table system.dns_cache, qui peut être utile pour le débogage des problèmes DNS. #59856 (Kirill Nikiforov).
  • 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 toute valeur inférieure étaient équivalents à LZ4HC(3). Auteur : Cyan4973. #60090 (Alexey Milovidov).
  • Ajout de la table system.dns_cache, qui peut être utile pour le débogage de problèmes DNS. Nouveau paramètre du serveur dns_cache_max_size. #60257 (Kirill Nikiforov).
  • Prise en charge de la version à argument unique pour la fonction de table merge, sous la forme merge(['db_name', ] 'tables_regexp'). #60372 (豪肥肥).
  • Prise en charge des arguments positionnels négatifs. Clôture de #57736. #58292 (flynn).
  • Prise en charge de la définition d’un ensemble d’utilisateurs autorisés pour certains paramètres S3 dans la config à l’aide de la clé user. #60144 (Antonio Andelic).
  • 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]), où database.table est une table existante utilisant le moteur MergeTree. #58140 (Anton Popov).

Fonctionnalité expérimentale

  • Ajout de la fonction seriesOutliersDetectTukey pour détecter les valeurs aberrantes dans des données de séries chronologiques à l’aide de l’algorithme des bornes de Tukey. #58632 (Bhavna Jindal). Gardez à l’esprit que ce comportement sera modifié dans la prochaine version corrective.
  • Ajout de la fonction variantType, qui renvoie un Enum contenant le nom du type de variante pour chaque ligne. #59398 (Kruglov Pavel).
  • Prise en charge de LEFT JOIN, ALL INNER JOIN et des sous-requêtes simples pour les répliques parallèles (uniquement avec analyzer). Le nouveau paramètre parallel_replicas_prefer_local_join sélectionne l’exécution locale de JOIN (par défaut) ou GLOBAL JOIN. Toutes les tables doivent exister sur chaque réplique de cluster_for_parallel_replicas. Les nouveaux paramètres min_external_table_block_size_rows et min_external_table_block_size_bytes servent à regrouper les petits blocs envoyés pour les tables temporaires (uniquement avec analyzer). #58916 (Nikolai Kochetov).
  • Autorise la création concurrente de tables dans la base de données Replicated lors de l’ajout ou de la restauration d’une nouvelle réplique. #59277 (Konstantin Bogdanov).
  • Implémente l’opérateur de comparaison pour les valeurs Variant ainsi que l’insertion correcte de Field dans une colonne Variant. N’autorise pas, par défaut, la création du type Variant avec des types de variante similaires (autorisé avec le paramètre allow_suspicious_variant_types). Résout #59996. Résout #59850. #60198 (Kruglov Pavel).
  • Désactive les JOIN de répliques parallèles avec CTE (sans analyzer) #59239 (Raúl Marín).

Amélioration des performances

  • La clé primaire utilisera moins de mémoire. #60049 (Alexey Milovidov).
  • Réduit 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. Ce comportement est contrôlé par le nouveau paramètre MergeTree primary_key_lazy_load, activé par défaut. Cela présente 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 a aussi plusieurs inconvénients : - la latence de chargement de la clé primaire sera reportée à la première requête, au lieu d’être absorbée avant l’acceptation des connexions ; cela peut théoriquement entraîner un problème d’emballement. Ceci clôt #11188. #60093 (Alexey Milovidov).
  • Fonctions de distance vectorisées utilisées pour la recherche vectorielle. #58866 (Robert Schulze).
  • Fonction vectorisée dotProduct, utile pour la recherche vectorielle. #60202 (Robert Schulze).
  • Ajoute l’évaluation en court-circuit pour la fonction dictGetOrDefault. Clôt #52098. #57767 (jsc0218).
  • Amélioration de Keeper : ne met en cache en mémoire qu’une certaine quantité de logs, contrôlée par latest_logs_cache_size_threshold et commit_logs_cache_size_threshold. #59460 (Antonio Andelic).
  • Amélioration de Keeper : réduit encore la taille du nœud de données. #59592 (Antonio Andelic).
  • Poursuit l’optimisation des ratés de prédiction de branchement de la fonction if lorsque le type de résultat est Float*/Decimal*/*Int*, dans la continuité de https://github.com/ClickHouse/ClickHouse/pull/57885. #59148 (李扬).
  • Optimise la fonction if lorsque le type d’entrée est Map, avec un gain de performance pouvant atteindre ~10x. #59413 (李扬).
  • Améliore les performances du type Int8 en implémentant le strict aliasing (nous l’avons déjà pour UInt8 et tous les autres types entiers). #59485 (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 SELECT avec des mutations actives. #59531 (Azat Khuzhin).
  • Fonction isNotNull optimisée avec AVX2. #59621 (李扬).
  • Améliore les performances de ASOF JOIN pour les données triées ou presque triées. #59731 (Maksim Kita).
  • La précédente valeur par défaut de async_insert_max_data_size, fixée à 1 MB, s’est avérée trop faible. La nouvelle sera de 10 MiB. #59536 (Nikita Mikhaylov).
  • Utilisation de plusieurs threads lors de la lecture des métadonnées des tables depuis une sauvegarde pendant l’exécution de la commande RESTORE. #60040 (Vitaly Baranov).
  • Désormais, si StorageBuffer possède plus d’un segment (num_layers > 1), le flush en arrière-plan s’effectuera simultanément pour tous les segments, sur plusieurs threads. #60111 (alesapin).

Amélioration

  • Lorsque le format de sortie est Pretty et qu’un bloc contient une seule valeur numérique supérieure à un million, un nombre lisible est affiché à droite du tableau. #60379 (rogeryk).
  • Ajout des paramètres split_parts_ranges_into_intersecting_and_non_intersecting_final et split_intersecting_parts_ranges_into_layers_final. Ces paramètres servent à désactiver les optimisations pour les querys avec FINAL et sont uniquement destinés au débogage. #59705 (Maksim Kita). En réalité, pas seulement : ils peuvent aussi réduire l’utilisation de la mémoire au détriment des performances.
  • Renommage du paramètre extract_kvp_max_pairs_per_row en extract_key_value_pairs_max_pairs_per_row. Le problème (abréviation inutile dans le nom du paramètre) a été introduit dans https://github.com/ClickHouse/ClickHouse/pull/43606. Correction de la documentation de ce paramètre. #59683 (Alexey Milovidov). #59960 (jsc0218).
  • L’exécution de ALTER COLUMN MATERIALIZE sur une colonne avec une expression DEFAULT ou MATERIALIZED respecte désormais précisément la sémantique attendue. #58023 (Duc Canh Le).
  • Activation d’une logique de backoff exponentiel pour les erreurs survenant pendant les mutations. Cela réduira l’utilisation du CPU, l’utilisation de la mémoire et la taille des fichiers journaux. #58036 (MikhailBurdukov).
  • Ajout d’une amélioration pour comptabiliser l’événement de profil InitialQuery. #58195 (Unalian).
  • Possibilité de définir volume_priority dans storage_configuration. #58533 (Andrey Zvonov).
  • Ajout de la prise en charge du type Date32 dans le codec T64. #58738 (Hongbin Ma).
  • Autorisation des virgules finales dans les types comportant plusieurs éléments. #59119 (Aleksandr Musorin).
  • Les paramètres du Distributed table engine peuvent désormais être spécifiés dans le server configuration file (comme les paramètres de MergeTree), par exemple <distributed> <flush_on_detach>false</flush_on_detach> </distributed>. #59291 (Azat Khuzhin).
  • Nouvelle tentative après déconnexion ou expiration de session lors de la lecture de system.zookeeper. Cela est utile lors de la lecture d’un grand nombre de lignes de la table system.zookeeper, en particulier en présence de déconnexions injectées pour les tests de panne. #59388 (Alexander Gololobov).
  • Ne plus interpréter les nombres avec des zéros initiaux comme des valeurs octales lorsque input_format_values_interpret_expressions=0. #59403 (Joanna Hulboj).
  • Au démarrage et à chaque modification des fichiers de configuration, ClickHouse met à jour les limites strictes de mémoire de son memory tracker global. Ces limites sont calculées à partir de divers paramètres serveur et des limites des cgroups (sous Linux). Auparavant, le paramètre /sys/fs/cgroup/memory.max (pour cgroups v2) était codé en dur. Par conséquent, les limites de mémoire cgroup v2 configurées pour des groupes imbriqués (hiérarchies), par exemple /sys/fs/cgroup/my/nested/group/memory.max, étaient ignorées. Ce problème est désormais corrigé. Le comportement des limites de mémoire v1 reste inchangé. #59435 (Robert Schulze).
  • Nouveaux événements de profil ajoutés pour observer le temps passé à calculer les PK/projections/indices secondaires pendant les INSERT. #59436 (Nikita Taranov).
  • Permet de définir un point de départ pour S3Queue en mode Ordered lors de la création à l’aide du paramètre s3queue_last_processed_path. #59446 (Kseniia Sumarokova).
  • Les commentaires des tables système sont désormais également disponibles dans system.tables dans clickhouse-local. #59493 (Nikita Mikhaylov).
  • Table system.zookeeper : auparavant, l’ensemble du résultat était accumulé en mémoire et renvoyé en un seul gros fragment. Ce changement devrait aider à réduire la consommation de mémoire lors de la lecture d’un grand nombre de lignes depuis system.zookeeper, permettre d’afficher une progression intermédiaire (combien de lignes ont été lues jusqu’à présent) et éviter les délais d’expiration de la connexion lorsque l’ensemble de résultats est volumineux. #59545 (Alexander Gololobov).
  • Le tableau de bord comprend désormais aussi bien l’état compressé que non compressé du #hash des URL (rétrocompatibilité). Suite de #59124. #59548 (Amos Bird).
  • 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 délai d’expiration du polling : nous avons observé que, dans certains cas, le délai d’expiration ne fonctionnait pas correctement ; lorsqu’il expirait, IAA et le CPU pouvaient traiter le buffer de manière concurrente. Pour l’instant, il vaut mieux s’assurer que le statut du codec IAA n’est pas QPL_STS_BEING_PROCESSED, puis basculer vers le codec logiciel. #59551 (jasperzhu).
  • N’affichez pas d’avertissement concernant la version du serveur dans ClickHouse Cloud, car ClickHouse Cloud gère automatiquement et de manière transparente les mises à niveau. #59657 (Alexey Milovidov).
  • Après l’auto-extraction, le binaire temporaire est déplacé au lieu d’être copié. #59661 (Yakov Olkhovskiy).
  • Correction du déroulage de pile sur Apple macOS. Cela résout #53653. #59690 (Nikita Mikhaylov).
  • Vérifie le 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 résout #59622. #59697 (Alexey Milovidov). #60434
  • Uniformise le comportement des named collections créées via XML et SQL dans le stockage Kafka. #59710 (Pervakov Grigorii).
  • Lorsque merge_max_block_size_bytes est suffisamment petit et que les tables contiennent des lignes volumineuses (chaînes ou tuples), les fusions en arrière-plan peuvent rester bloquées dans une boucle infinie. Ce comportement est corrigé. Suite de https://github.com/ClickHouse/ClickHouse/pull/59340. #59812 (Nikita Mikhaylov).
  • Autorise uuid dans replica_path si CREATE TABLE l’indique 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 : n’envoyer à Prometheus que les métriques/événements liés à Keeper. #59945 (Antonio Andelic).
  • Le tableau de bord affichera les métriques de différentes versions de ClickHouse, même si la structure des tables système a changé après la mise à niveau. #59967 (Alexey Milovidov).
  • Autoriser le chargement des informations AZ à partir d’un fichier. #59976 (Konstantin Bogdanov).
  • Amélioration de Keeper : ajout de tentatives en cas d’échec pour les opérations liées aux disques. #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).
  • Pour la copie de fichiers S3, ajout d’un mécanisme de secours GCP vers une copie via tampon lorsque GCP renvoie Internal Error avec le code d’erreur HTTP GATEWAY_TIMEOUT. #60164 (Maksim Kita).
  • Exécution avec court-circuit pour ULIDStringToDateTime. #60211 (Juan Madurga).
  • Ajout de la colonne query_id pour les tables system.backups et system.backup_log. Ajout de la stacktrace de l’erreur dans la colonne error. #60220 (Maksim Kita).
  • Les connexions via le port MySQL utilisent désormais automatiquement le paramètre prefer_column_name_to_alias = 1 afin de prendre en charge QuickSight immédiatement. De plus, les paramètres mysql_map_string_to_text_in_show_columns et mysql_map_fixed_string_to_text_in_show_columns sont désormais activés par défaut, et n’affectent eux aussi que les connexions MySQL. Cela améliore la compatibilité avec davantage d’outils BI. #60365 (Robert Schulze).
  • Correction d’une condition de concurrence dans le code JavaScript entraînant la superposition de graphiques dupliqués. #60392 (Alexey Milovidov).

amélioration de la compilation/des tests/du packaging

  • Ajout de builds et de tests avec collecte de couverture pour l’introspection. Suite de #56102. #58792 (Alexey Milovidov).
  • Mise à jour de la toolchain Rust dans corrosion-cmake lorsque la variable de toolchain de cross-compilation CMake est définie. #59309 (Aris Tritas).
  • Ajout de fuzzing à ASTLiterals. #59383 (Raúl Marín).
  • Si vous souhaitez exécuter les scripts initdb à chaque démarrage du conteneur ClickHouse, vous devez définir la variable d’environnement CLICKHOUSE_ALWAYS_RUN_INITDB_SCRIPTS. #59808 (Alexander Nikolaev).
  • Suppression de la possibilité de désactiver les composants génériques de ClickHouse (comme server/client/…), tout en conservant ceux qui nécessitent des bibliothèques supplémentaires (comme ODBC ou Keeper). #59857 (Azat Khuzhin).
  • Le fuzzer de requêtes prendra désormais en compte les SETTINGS dans les requêtes. #60087 (Alexey Milovidov).
  • Ajout de la prise en charge de la compilation de ClickHouse avec clang-19 (master). #60448 (Alexey Milovidov).

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

  • Corrige une erreur “Non-ready set” dans TTL WHERE. #57430 (Nikolai Kochetov).
  • Corrige un bug dans la fonction quantilesGK #58216 (李扬).
  • Corrige un comportement incorrect de intDiv avec des arguments Decimal #59243 (Yarik Briukhovetskyi).
  • Corrige translate avec une entrée FixedString #59356 (Raúl Marín).
  • Corrige le calcul du digest dans Keeper #59439 (Antonio Andelic).
  • Corrige les stacktraces pour les binaires sans symboles de débogage #59444 (Azat Khuzhin).
  • Corrige ASTAlterCommand::formatImpl dans le cas de paramètres spécifiques à une colonne… #59445 (János Benjamin Antal).
  • Corrige SELECT * FROM [...] ORDER BY ALL avec Analyzer #59462 (zhongyuankai).
  • Corrige une exception potentiellement non interceptée lors de l’annulation d’une requête distribuée #59487 (Azat Khuzhin).
  • Fait en sorte que MAX utilise les mêmes règles que permutation pour les types complexes #59498 (Raúl Marín).
  • Corrige un cas limite lors de l’utilisation de update_insert_deduplication_token_in_dependent_materialized_views #59544 (Jordi Villar).
  • Corrige le résultat incorrect de arrayElement / map avec une valeur vide #59594 (Raúl Marín).
  • Corrige un crash dans topK lors de la fusion d’états vides #59603 (Raúl Marín).
  • Corrige une table distribuée avec une clé de sharding constante #59606 (Vitaly Baranov).
  • Corrige un problème KQL détecté par WingFuzz #59626 (Yong Wang).
  • Corrige l’erreur “Read beyond last offset” pour AsynchronousBoundedReadBuffer #59630 (Vitaly Baranov).
  • Préserve l’alias de fonction dans RewriteSumFunctionWithSumAndCountVisitor #59658 (Raúl Marín).
  • Corrige l’heure de début des requêtes non initiales #59662 (Raúl Marín).
  • Valide les types d’arguments pour l’index de skipping minmax #59733 (Anton Popov).
  • Corrige la fonction leftPad / rightPad avec une entrée FixedString #59739 (Raúl Marín).
  • Correction d’un problème de l’AST fuzzer dans la fonction countMatches #59752 (Robert Schulze).
  • RabbitMQ : correction du cas où les messages n’étaient ni acquittés ni rejetés #59775 (Kseniia Sumarokova).
  • Correction de StorageURL, qui exécutait une partie de la requête sur un seul thread #59833 (Michael Kolupaev).
  • S3Queue : correction d’une valeur non initialisée #59897 (Kseniia Sumarokova).
  • Correction de l’analyse syntaxique des expressions de partition entourées de parenthèses #59901 (János Benjamin Antal).
  • Correction d’un plantage dans le format JSONColumnsWithMetadata via HTTP #59925 (Kruglov Pavel).
  • Ne pas réécrire sum en count si la valeur de retour diffère dans l’analyseur #59926 (Azat Khuzhin).
  • Correction d’un plantage à la lecture d’UniqExactSet #59928 (Maksim Kita).
  • Correction d’une valeur metadata_version invalide dans ReplicatedMergeTree #59946 (Maksim Kita).
  • Correction d’une data race dans StorageDistributed #59987 (Nikita Taranov).
  • Docker : exécuter les scripts d’initialisation lorsque l’option est activée plutôt que lorsqu’elle est désactivée #59991 (jktng).
  • Correction d’INSERT dans SQLite avec guillemet simple (en échappant les guillemets simples avec un guillemet au lieu d’un antislash) #60015 (Azat Khuzhin).
  • Correction de plusieurs erreurs logiques dans arrayFold #60022 (Raúl Marín).
  • Correction de optimize_uniq_to_count, qui supprimait l’alias de colonne #60026 (Raúl Marín).
  • Correction d’une exception possible de la table S3Queue lors d’un DROP #60036 (Kseniia Sumarokova).
  • Correction du formatage de NOT avec des littéraux isolés #60042 (Raúl Marín).
  • Utiliser max_query_size du contexte dans DDLLogEntry au lieu de la valeur 4096 codée en dur #60083 (Kruglov Pavel).
  • Correction du formatage incohérent des requêtes contenant des tables nommées table. Correction du formatage erroné des requêtes avec UNION ALL, INTERSECT et EXCEPT lorsque leur structure n’était pas linéaire. Cela clôt #52349. Correction du formatage erroné des requêtes SYSTEM, notamment SYSTEM ... DROP FILESYSTEM CACHE, SYSTEM ... REFRESH/START/STOP/CANCEL/TEST VIEW, SYSTEM ENABLE/DISABLE FAILPOINT. Correction du formatage des requêtes DDL paramétrées. Correction du formatage de la requête DESCRIBE FILESYSTEM CACHE. Correction du formatage incorrect de SET param_... (une requête qui définit un paramètre). Correction du formatage incorrect des requêtes CREATE INDEX. Correction du formatage incohérent de CREATE USER et des requêtes similaires. Correction du formatage incohérent de CREATE SETTINGS PROFILE. Correction du formatage incorrect de ALTER ... MODIFY REFRESH. Correction du formatage incohérent des fonctions de fenêtre si les offsets du frame étaient des expressions. Correction du formatage incohérent de RESPECT NULLS et IGNORE NULLS lorsqu’ils étaient utilisés après une fonction qui implémente un opérateur (comme plus). Correction du formatage absurde de SYSTEM SYNC REPLICA ... LIGHTWEIGHT FROM .... Correction du formatage incohérent des requêtes invalides avec GROUP BY GROUPING SETS ... WITH ROLLUP/CUBE/TOTALS. Correction du formatage incohérent de GRANT CURRENT GRANTS. Correction du formatage incohérent de CREATE TABLE (... COLLATE). De plus, j’ai corrigé le formatage incorrect de EXPLAIN dans les sous-requêtes (#60102). Correction du formatage incorrect des fonctions lambda (#60012). Ajout d’une vérification pour qu’il soit impossible de laisser passer ces aberrations à l’avenir. #60095 (Alexey Milovidov).
  • Correction du formatage incohérent de EXPLAIN dans les sous-requêtes #60102 (Alexey Milovidov).
  • Correction d’un crash de cosineDistance avec Nullable #60150 (Raúl Marín).
  • Autorisation du transtypage de booléens représentés sous forme de chaînes en véritables booléens #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).
  • Masquage des informations sensibles pour S3Queue #60233 (Kseniia Sumarokova).
  • Correction des codes d’exception HTTP. #60252 (Austin Kothig).
  • S3Queue : correction d’un bug (corrige aussi 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).
  • Correction de OptimizeDateOrDateTimeConverterWithPreimageVisitor avec des arguments NULL #60453 (Raúl Marín).
  • Correction d’un bug mineur qui empêchait l’exécution sur les répliques des requêtes sur des tables distribuées envoyées par des clients utilisant le dialecte KQL ou PRQL. #59674. #60470 (Alexey Milovidov) #59674 (Austin Kothig).

version de ClickHouse 24.1, 2024-01-30. Presentation, Video

Changement incompatible avec les versions précédentes

  • Le paramètre print_pretty_type_names est activé par défaut. Vous pouvez le désactiver pour conserver l’ancien comportement, ou utiliser SET compatibility = '23.12'. #57726 (Alexey Milovidov).
  • Le paramètre MergeTree clean_deleted_rows est déprécié et n’a désormais plus aucun effet. Le mot-clé CLEANUP pour OPTIMIZE n’est pas autorisé par défaut (sauf si allow_experimental_replacing_merge_with_cleanup est activé). #58316 (Alexander Tokmakov).
  • La fonction reverseDNSQuery n’est plus disponible. Cela résout #58368. #58369 (Alexey Milovidov).
  • Activez diverses modifications pour améliorer le contrôle d’accès dans le fichier de configuration. Ces changements modifient le comportement, et vous devez vérifier config.xml dans la section access_control_improvements. En cas de doute, conservez dans le fichier de configuration les valeurs de la version précédente. #58584 (Alexey Milovidov).
  • Améliore le fonctionnement de sumMapFiltered avec les valeurs NaN. Les valeurs NaN sont désormais placées à la fin (au lieu d’être placées aléatoirement) et considérées comme différentes de toutes les autres valeurs. -0 est désormais également traité comme égal à 0 ; comme les valeurs 0 sont ignorées, les valeurs -0 le sont aussi. #58959 (Raúl Marín).
  • La fonction visibleWidth se comportera conformément à la documentation. Dans les versions précédentes, elle comptait simplement les points de code après sérialisation de la chaîne, comme la fonction lengthUTF8, mais ne tenait pas compte des caractères de largeur nulle et des caractères combinés, des caractères pleine chasse, des tabulations et des suppressions. Ce comportement a désormais été ajusté en conséquence. Si vous souhaitez conserver l’ancien comportement, définissez function_visible_width_behavior sur 0, ou compatibility sur 23.12 ou une version antérieure. #59022 (Alexey Milovidov).
  • Le dialecte Kusto est désactivé jusqu’à ce que ces deux bogues soient corrigés : #59037 et #59036. #59305 (Alexey Milovidov). Toute tentative d’utiliser Kusto se soldera par une exception.
  • Une implémentation plus efficace du modificateur FINAL ne garantit plus la préservation de l’ordre, même si max_threads = 1. Si vous vous appuyiez sur le comportement précédent, définissez enable_vertical_final sur 0 ou compatibility sur 23.12.

Nouvelle fonctionnalité

  • Implémente le type de données Variant, qui représente une union d’autres types de données. Le type Variant(T1, T2, ..., TN) signifie que chaque ligne de ce type contient une valeur de type T1, T2, … TN, ou aucune d’entre elles (valeur NULL). Le type Variant est disponible via le paramètre allow_experimental_variant_type. Référence : #54864. #58047 (Kruglov Pavel).
  • Certains paramètres (actuellement min_compress_block_size et max_compress_block_size) peuvent désormais être spécifiés au niveau des colonnes, auquel cas ils prévalent sur le paramètre correspondant au niveau de la table. Exemple : CREATE TABLE tab (col String SETTINGS (min_compress_block_size = 81920, max_compress_block_size = 163840)) ENGINE = MergeTree ORDER BY tuple();. #55201 (Duc Canh Le).
  • Ajoute la fonction d’agrégation quantileDD, ainsi que les fonctions correspondantes quantilesDD et medianDD. Elle est basée sur DDSketch https://www.vldb.org/pvldb/vol12/p2195-masson.pdf. ### Entrée de documentation pour les changements visibles par les utilisateurs. #56342 (Srikanth Chekuri).
  • Permet de configurer n’importe quel type de stockage objet avec n’importe quel type de métadonnées. #58357 (Kseniia Sumarokova).
  • Ajout des modes null_status_on_timeout_only_active et throw_only_active pour distributed_ddl_output_mode, afin d’éviter d’attendre les répliques inactives. #58350 (Alexander Tokmakov).
  • Ajoute la fonction arrayShingles pour calculer des sous-tableaux, par exemple arrayShingles([1, 2, 3, 4, 5], 3) renvoie [[1,2,3],[2,3,4],[3,4,5]]. #58396 (Zheng Miao).
  • Ajout des fonctions punycodeEncode, punycodeDecode, idnaEncode et idnaDecode, utiles pour convertir les noms de domaine internationaux en représentation ASCII conformément à la norme IDNA. #58454 (Robert Schulze).
  • Ajout des fonctions de similarité de chaînes dramerauLevenshteinDistance, jaroSimilarity et jaroWinklerSimilarity. #58531 (Robert Schulze).
  • Ajoute deux paramètres : output_format_compression_level pour modifier le niveau de compression de sortie, et output_format_compression_zstd_window_log pour définir explicitement la taille de fenêtre de compression et activer le mode longue portée pour la compression zstd si la méthode de compression de sortie est zstd. S’applique à INTO OUTFILE et lors de l’écriture vers les fonctions de table file, url, hdfs, s3 et azureBlobStorage. #58539 (Duc Canh Le).
  • Désactive automatiquement les séquences d’échappement ANSI dans les formats Pretty si la sortie n’est pas un terminal. Ajoute le nouveau mode auto au paramètre output_format_pretty_color. #58614 (Shaun Struwig).
  • Ajout de la fonction sqidDecode, qui décode les Sqids. #58544 (Robert Schulze).
  • Permet la lecture de valeurs Bool comme String dans les formats d’entrée JSON. Cela se fait via le paramètre input_format_json_read_bools_as_strings, activé par défaut. #58561 (Kruglov Pavel).
  • Ajout de la fonction seriesDecomposeSTL, qui décompose une série temporelle en une composante saisonnière, une tendance et une composante résiduelle. #57078 (Bhavna Jindal).
  • Introduction de MySQL Binlog Client pour MaterializedMySQL : une seule connexion binlog pour de nombreuses bases de données. #57323 (Val Doroshchuk).
  • Intel QuickAssist Technology (QAT) fournit une compression et une cryptographie accélérées matériellement. ClickHouse dispose d’un nouveau codec de compression ZSTD_QAT qui utilise QAT pour la compression zstd. Le codec s’appuie sur QATlib d’Intel et le plugin QAT ZSTD d’Intel. Pour l’instant, seule la compression peut être accélérée matériellement (un mécanisme de repli logiciel prend le relais si QAT ne peut pas être initialisé) ; la décompression s’exécute toujours en logiciel. #57509 (jasperzhu).
  • Mise en œuvre d’une nouvelle méthode de génération des clés du stockage objet pour les disques S3. Le format peut désormais être défini selon la syntaxe regex re2 avec l’option key_template dans la description du disque. #57663 (Sema Checherinda).
  • La table system.dropped_tables_parts contient les parts des tables de system.dropped_tables (tables supprimées mais pas encore retirées). #58038 (Yakov Olkhovskiy).
  • Ajout du paramètre max_materialized_views_size_for_table pour limiter le nombre de vues matérialisées rattachées à une table. #58068 (zhongyuankai).
  • Améliorations de clickhouse-format : prise en charge des requêtes INSERT avec VALUES ; prise en charge des commentaires (utilisez --comments pour les afficher) ; prise en charge de l’option --max_line_length pour formater uniquement les requêtes longues sur plusieurs lignes. #58246 (vdimir).
  • Attache toutes les tables système dans clickhouse-local, y compris system.parts. Cela résout #58312. #58359 (Alexey Milovidov).
  • Prise en charge des types de données Enum dans la fonction transform. Cela résout #58241. #58360 (Alexey Milovidov).
  • Ajout de la table system.database_engines. #58390 (Bharat Nallan). Permet d’enregistrer les moteurs de base de données indépendamment dans le code source. #58365 (Bharat Nallan). Permet d’enregistrer les interpréteurs indépendamment. #58443 (Bharat Nallan).
  • Ajout du modificateur FROM <Replicas> pour la requête SYSTEM SYNC REPLICA LIGHTWEIGHT. Le modificateur FROM garantit que nous attendons les fetches et les drop-ranges uniquement pour les répliques source spécifiées, ainsi que pour toute réplique absente de ZooKeeper ou avec un source&#95;replica vide. #58393 (Jayme Bird).
  • Ajout du paramètre update_insert_deduplication_token_in_dependent_materialized_views. Ce paramètre permet de mettre à jour le jeton de déduplication des insertions avec l’identifiant de la table lors d’un insert dans des vues matérialisées dépendantes. Clôt #59165. #59238 (Maksim Kita).
  • Ajout de l’instruction SYSTEM RELOAD ASYNCHRONOUS METRICS, qui met à jour les métriques asynchrones. Principalement utile pour les tests et le développement. #53710 (Robert Schulze).

Amélioration des performances

  • La coordination des répliques parallèles a été réécrite pour améliorer le parallélisme et la localité du cache. Elle a été testée avec une scalabilité linéaire sur des centaines de répliques. La lecture dans l’ordre est désormais également prise en charge. #57968 (Nikita Taranov).
  • Remplace le buffering sortant HTTP par les buffers natifs de ClickHouse. Ajoute des métriques de comptage des octets pour les interfaces. #56064 (Yakov Olkhovskiy).
  • Les états d’agrégation volumineux de uniqExact seront fusionnés en parallèle dans les requêtes distribuées. #59009 (Nikita Taranov).
  • Réduction de l’utilisation mémoire après lecture depuis des tables MergeTree. #59290 (Anton Popov).
  • Réduction de l’utilisation mémoire lors des fusions verticales. #59340 (Anton Popov).
  • Évite une consommation mémoire excessive au démarrage de Keeper dans davantage de cas. #58455 (Antonio Andelic).
  • Amélioration de Keeper : réduction de l’utilisation mémoire pour les nœuds stockés. #59002 (Antonio Andelic).
  • Implémentation de FINAL davantage optimisée pour le cache. Remarque concernant le changement de comportement : auparavant, les requêtes avec le modificateur FINAL lues via un flux unique (par exemple max_threads = 1) produisaient une sortie triée sans clause ORDER BY explicitement fournie. Cela n’est plus garanti lorsque enable_vertical_final = true (et c’est la valeur par défaut). #54366 (Duc Canh Le).
  • Évite une copie supplémentaire dans ReadBufferFromIStream, utilisé, par exemple, pour la lecture depuis S3. #56961 (Nikita Taranov).
  • Optimise la fonction d’élément de tableau lorsque l’entrée est de type Array(Map)/Array(Array(Num)/Array(Array(String))/Array(BigInt)/Array(Decimal). Les implémentations précédentes effectuaient plus d’allocations que nécessaire. Le gain de performance apporté par cette optimisation peut atteindre ~6x, en particulier lorsque le type d’entrée est Array(Map). #56403 (李扬).
  • Lit la colonne une seule fois lors de la lecture de plusieurs sous-colonnes dans des compact parts. #57631 (Kruglov Pavel).
  • Réécrit l’AST de la fonction sum(column + constant). Cette optimisation est disponible comme passe d’optimisation pour l’analyseur #57853 (Jiebin Sun).
  • L’évaluation de la fonction match utilise désormais les skipping indices ngrambf_v1 et tokenbf_v1. #57882 (凌涛).
  • L’évaluation de la fonction match utilise désormais des indices inversés. #58284 (凌涛).
  • MergeTree FINAL ne compare pas les lignes d’une même part non-L0. #58142 (Duc Canh Le).
  • Accélère les appels à iota (remplissage d’un tableau avec des nombres consécutifs). #58271 (Raúl Marín).
  • Accélère MIN/MAX pour les types non numériques. #58334 (Raúl Marín).
  • Optimiser la combinaison des filtres (comme dans PREWHERE à plusieurs étapes) avec les intrinsèques BMI2/SSE #58800 (Zhiguo Zhou).
  • Utiliser un thread de moins dans clickhouse-local. #58968 (Alexey Milovidov).
  • Améliorer les performances de la fonction multiIf lorsque le type est Nullable. #57745 (KevinyhZou).
  • Ajouter SYSTEM JEMALLOC PURGE pour purger les pages jemalloc inutilisées, SYSTEM JEMALLOC [ ENABLE | DISABLE | FLUSH ] PROFILE pour contrôler le profil jemalloc si le profileur est activé. Ajouter la commande 4LW liée à jemalloc dans Keeper : jmst pour afficher les statistiques jemalloc, jmfp, jmep, jmdp pour contrôler le profil jemalloc si le profileur est activé. #58665 (Antonio Andelic).
  • Réduire la consommation de mémoire des sauvegardes vers S3. #58962 (Vitaly Baranov).

Amélioration

  • Ajout de commentaires (brèves descriptions) à toutes les colonnes des tables système. Il y a plusieurs raisons à cela : - Nous utilisons beaucoup les tables système, et il peut parfois être très difficile pour un développeur de comprendre le rôle et la signification d’une colonne donnée. - Nous modifions souvent les tables système (en ajoutant de nouvelles colonnes ou en modifiant celles qui existent déjà) et leur documentation est toujours obsolète. Par exemple, jetez un œil à la page de documentation de system.parts. Il y manque beaucoup de colonnes - À terme, nous aimerions générer la documentation directement depuis ClickHouse. #58356 (Nikita Mikhaylov).
  • Autorise les requêtes sans alias pour les sous-requêtes avec PASTE JOIN. #58654 (Yarik Briukhovetskyi).
  • Active l’intégration MySQL/MariaDB sur macOS. Cela clôt #21191. #46316 (Alexey Milovidov) (Robert Schulze).
  • Désactive max_rows_in_set_to_optimize_join par défaut. #56396 (vdimir).
  • Ajout du paramètre de config <host_name>, qui permet d’éviter la résolution des noms d’hôte dans les requêtes DDL ON CLUSTER et les moteurs de base de données Replicated. Cela réduit le risque que la file d’attente se bloque en cas de modification de la définition du cluster. Clôt #57573. #57603 (Nikolay Degterinsky).
  • Augmente load_metadata_threads à 16 pour le cache du système de fichiers. Cela permettra au serveur de démarrer plus rapidement. #57732 (Alexey Milovidov).
  • Ajoute la possibilité de limiter les merges/mutations (max_mutations_bandwidth_for_server/max_merges_bandwidth_for_server). #57877 (Azat Khuzhin).
  • Remplace la colonne non documentée (booléenne) is_hot_reloadable dans la table système system.server_settings par la colonne (Enum8) changeable_without_restart, avec les valeurs possibles No, Yes, IncreaseOnly et DecreaseOnly. La colonne a également été documentée. #58029 (skyoct).
  • Cluster discovery prend désormais en charge la définition d’un nom d’utilisateur et d’un mot de passe, clôt #58063. #58123 (vdimir).
  • Prise en charge des paramètres de requête dans ALTER TABLE ... PART. #58297 (Azat Khuzhin).
  • Crée des consumers pour les tables Kafka à la volée (tout en les conservant pendant un certain temps — kafka_consumers_pool_ttl_ms depuis leur dernière utilisation). Cela devrait corriger le problème des statistiques pour system.kafka_consumers (qui ne consommait rien lorsque personne ne lisait depuis une table Kafka, ce qui entraînait une fuite mémoire active et un détachement lent de la table) et cette PR réactive également par défaut les statistiques pour system.kafka_consumers. #58310 (Azat Khuzhin).
  • sparkBar comme alias de sparkbar. #58335 (凌涛).
  • Évite l’envoi de requêtes ComposeObject après le téléversement vers GCS. #58343 (Azat Khuzhin).
  • Gérer correctement les clés dont le nom contient un point dans les fichiers de configuration XML. #58354 (Azat Khuzhin).
  • Faire en sorte que la fonction format renvoie une constante lorsque ses arguments sont constants. Cela résout #58355. #58358 (Alexey Milovidov).
  • Ajout d’un paramètre max_estimated_execution_time pour dissocier max_execution_time et max_estimated_execution_time. #58402 (Zhang Yifan).
  • Fournir une indication lorsqu’un nom de moteur de base de données non valide est utilisé. #58444 (Bharat Nallan).
  • Ajouter des paramètres pour mieux contrôler le type des index dans le dictionnaire Arrow. Utiliser par défaut un type entier signé pour les index, comme le recommande Arrow. Résout #57401. #58519 (Kruglov Pavel).
  • Implémente #58575 : prise en charge de la variable d’environnement CLICKHOUSE_PASSWORD_FILE lors de l’exécution de l’image Docker. #58583 (Eyal Halpern Shalev).
  • Lors de l’exécution de certaines requêtes nécessitant de nombreux flux pour lire les données, l’erreur "Paste JOIN requires sorted tables only" était auparavant levée. Désormais, le nombre de flux est ramené à 1 dans ce cas. #58608 (Yarik Briukhovetskyi).
  • Message amélioré pour l’erreur INVALID_IDENTIFIER. #58703 (Yakov Olkhovskiy).
  • Amélioration de la gestion des littéraux numériques signés dans normalizeQuery. #58710 (Salvatore Mesoraca).
  • Prise en charge du type de données Point pour MySQL. #58721 (Kseniia Sumarokova).
  • Lors de la comparaison d’une colonne Float32 avec une chaîne constante, lire la chaîne comme un Float32 (au lieu d’un Float64). #58724 (Raúl Marín).
  • Améliorer la compatibilité avec S3 et ajouter la prise en charge du stockage EOS d’ECloud. #58786 (xleoken).
  • Autoriser KILL QUERY à annuler les sauvegardes / restaurations. Cette PR rend également visibles les sauvegardes et restaurations en cours dans system.processes. De plus, un nouveau paramètre est désormais disponible dans la configuration du serveur : shutdown_wait_backups_and_restores (default=true), qui permet au serveur soit d’attendre, lors de l’arrêt, la fin de toutes les sauvegardes et restaurations en cours, soit de simplement les annuler. #58804 (Vitaly Baranov).
  • Le format Avro prend désormais en charge le codec ZSTD. Résout #58735. #58805 (flynn).
  • L’interface MySQL prend désormais en charge les paramètres net_write_timeout et net_read_timeout. net_write_timeout est converti en paramètre natif ClickHouse send_timeout et, de même, net_read_timeout en receive_timeout. Correction d’un problème qui empêchait de définir le paramètre MySQL sql_select_limit sauf si l’instruction entière était en majuscules. #58835 (Serge Klochkov).
  • Meilleur message d’exception en cas de conflit lors de la création d’un dictionnaire et d’une table portant le même nom. #58841 (Yarik Briukhovetskyi).
  • Vérification que, pour les disques personnalisés (créés depuis SQL), filesystem_caches_path (préfixe de répertoire commun à tous les caches du système de fichiers) ou custom_cached_disks_base_directory (préfixe de répertoire commun uniquement aux caches du système de fichiers créés à partir de disques personnalisés) est spécifié dans la config du serveur. custom_cached_disks_base_directory est prioritaire sur filesystem_caches_path pour les disques personnalisés, ce dernier n’étant utilisé que si le premier est absent. Le paramètre path du cache du système de fichiers doit se trouver dans ce répertoire, sinon une exception sera levée et empêchera la création du disque. Cela n’affecte pas les disques créés avec une ancienne version avant mise à niveau du serveur : dans ce cas, l’exception ne sera pas levée afin de permettre au serveur de démarrer correctement. custom_cached_disks_base_directory est ajouté à la config serveur par défaut avec la valeur /var/lib/clickhouse/caches/. Ferme #57825. #58869 (Kseniia Sumarokova).
  • L’interface MySQL est désormais compatible avec les requêtes SHOW WARNINGS/SHOW COUNT(*) WARNINGS, bien que le résultat renvoyé soit toujours un ensemble vide. #58929 (Serge Klochkov).
  • Ignorer les répliques indisponibles lors de l’exécution d’un INSERT SELECT distribué en parallèle. #58931 (Alexander Tokmakov).
  • Afficher le niveau de log en toutes lettres lors de l’activation du formatage structuré des logs en JSON. #58936 (Tim Liou).
  • L’interface MySQL prend désormais en charge les instructions CAST(x AS SIGNED) et CAST(x AS UNSIGNED) via des alias de type de données : SIGNED pour Int64 et UNSIGNED pour UInt64. Cela améliore la compatibilité avec des outils de BI comme Looker Studio. #58954 (Serge Klochkov).
  • Changer le répertoire de travail pour le data path dans le conteneur Docker. #58975 (cangyin).
  • Ajout du paramètre azure_max_unexpected_write_error_retries pour Azure Blob Storage ; il peut également être défini dans la config, sous la section azure. #59001 (SmitaRKulkarni).
  • Permettre au serveur de démarrer avec une table de data lake défectueuse. Ferme #58625. #59080 (Kseniia Sumarokova).
  • Permettre d’ignorer l’évolution du schéma dans le moteur de table Iceberg et de lire toutes les données en utilisant soit le schéma spécifié par l’utilisateur lors de la création de la table, soit le dernier schéma analysé à partir des métadonnées au moment de la création de la table. Cela se fait via le paramètre iceberg_engine_ignore_schema_evolution, désactivé par défaut. Notez que l’activation de ce paramètre peut produire des résultats incorrects car, en cas d’évolution du schéma, tous les data files seront lus à l’aide du même schéma. #59133 (Kruglov Pavel).
  • Interdire les opérations de modification (INSERT/ALTER/OPTIMIZE/…) sur les stockages en lecture seule/à écriture unique avec une erreur TABLE_IS_READ_ONLY appropriée (pour éviter les résidus). Éviter de laisser des résidus sur les disques à écriture unique (format_version.txt) lors de CREATE/ATTACH. Ignorer DROP pour ReplicatedMergeTree (comme pour MergeTree). Corriger l’itération sur s3_plain (MetadataStorageFromPlainObjectStorage::iterateDirectory). À noter que le stockage en lecture seule est le disque web, et que le stockage à écriture unique est s3_plain. #59170 (Azat Khuzhin).
  • Corrige un bug dans la colonne expérimentale _block_number qui pouvait entraîner une logical error lors d’une combinaison complexe de ALTER et de merge. Corrige #56202. Remplace #58601. #59295 (alesapin).
  • L’UI Play comprend désormais lorsqu’une exception est renvoyée dans du JSON. Ajustement pour #52853. #59303 (Alexey Milovidov).
  • Le handler HTTP /binary permet de spécifier l’utilisateur, l’hôte et, éventuellement, le mot de passe dans la query string. #59311 (Alexey Milovidov).
  • Prise en charge des backups pour les tables compressées en mémoire. Cela clôt #57893. #59315 (Alexey Milovidov).
  • Prise en charge de la clause FORMAT dans les query BACKUP et RESTORE. #59338 (Vitaly Baranov).
  • La fonction concatWithSeparator prend désormais en charge des types d’arguments arbitraires (au lieu des seuls arguments String et FixedString). Par exemple, SELECT concatWithSeparator('.', 'number', 1) renvoie désormais number.1. #59341 (Robert Schulze).

Amélioration de la compilation/des tests/du packaging

  • Améliore les alias du binaire ClickHouse (ch/clickhouse correspond désormais à clickhouse-local ou clickhouse, selon les arguments) et ajoute l’autocomplétion bash pour les nouveaux alias. #58344 (Azat Khuzhin).
  • Ajoute à la CI une vérification des modifications de paramètres afin de s’assurer que toutes les modifications de paramètres sont bien reflétées dans leur historique. #58555 (Kruglov Pavel).
  • Utilise des tables attachées directement depuis S3 dans les tests avec état. #58791 (Alexey Milovidov).
  • Enregistre l’intégralité de fuzzer.log sous forme d’archive au lieu des 100k dernières lignes. tail -n 100000 supprime souvent des lignes contenant des définitions de table. Exemple : #58821 (Dmitry Novik).
  • Active Rust sur MacOS avec Aarch64 (cela ajoutera la recherche floue dans le client avec skim et le langage PRQL, même si je ne pense pas qu’il y ait beaucoup de gens qui hébergent ClickHouse sur Darwin, donc c’est surtout pour la recherche floue dans le client, dirais-je). #59272 (Azat Khuzhin).
  • Corrige un problème d’agrégation dans des clusters mixtes x86_64 et ARM #59132 (Harry Lee).

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

  • Ajouter la conversion des clés de jointure pour les LowCardinality imbriqués #51550 (vdimir).
  • Aplatir uniquement le véritable type Nested si flatten_nested=1, et non tous les Array(Tuple) #56132 (Kruglov Pavel).
  • Corriger un bogue avec les projections et le paramètre aggregate_functions_null_for_empty lors de l’insertion. #56944 (Amos Bird).
  • Corriger une exception potentielle due à un UUID de profil obsolète #57263 (Vasily Nemkov).
  • Corriger la gestion des tampons de lecture dans StreamingFormatExecutor #57438 (Kruglov Pavel).
  • Ignorer les MV dont la table cible a été supprimée lors de la propagation vers les vues #57520 (Kruglov Pavel).
  • Éliminer une possible condition de concurrence entre ALTER_METADATA et MERGE_PARTS #57755 (Azat Khuzhin).
  • Corriger un bogue dans l’ordre des expressions de GROUP BY avec rollup #57786 (Chen768959).
  • Correctif pour la fonctionnalité obsolète de réplication “zero-copy” : corriger la perte de blobs après la suppression d’une réplique avec des parties détachées corrompues #58333 (Alexander Tokmakov).
  • Permettre aux utilisateurs de travailler avec des liens symboliques dans user_files_path #58447 (Duc Canh Le).
  • Corriger un plantage lorsque la table Graphite n’a pas de fonction d’agrégation #58453 (Duc Canh Le).
  • Retarder la lecture depuis StorageKafka afin d’autoriser plusieurs lectures dans les vues matérialisées #58477 (János Benjamin Antal).
  • Corriger un cas absurde de parties qui se chevauchent #58482 (Alexander Tokmakov).
  • Désactiver MergeTreePrefetchedReadPool pour les requêtes avec uniquement LIMIT #58505 (Maksim Kita).
  • Activer les bases de données ordinaires pendant la restauration #58520 (Jihyuk Bok).
  • Corriger la lecture via le pool de threads Apache Hive pour ORC/Parquet/… #58537 (sunny).
  • Masquer les informations d’authentification dans la colonne base_backup_name de system.backup_log #58550 (Daniel Pozo Escalona).
  • toStartOfInterval pour l’arrondi des valeurs en millisecondes et microsecondes #58557 (Yarik Briukhovetskyi).
  • Désactiver max_joined_block_rows dans ConcurrentHashJoin #58595 (vdimir).
  • Corriger les jointures utilisant Nullable dans l’ancien analyzer #58596 (vdimir).
  • makeDateTime64 : autorise un argument de fraction non constant #58597 (Robert Schulze).
  • Corrige une possible déréférence de NULL lors de la symbolisation de frames inline #58607 (Azat Khuzhin).
  • Améliore l’isolation des entrées du cache de requêtes pour les utilisateurs recréés ou lors des changements de rôle #58611 (Robert Schulze).
  • Corrige une analyse défaillante de la clé de partitionnement lors de l’optimisation des projections #58638 (Amos Bird).
  • Cache de requêtes : corrige le quota par utilisateur #58731 (Robert Schulze).
  • Corrige le partitionnement des flux dans les fonctions de fenêtre exécutées en parallèle #58739 (Dmitry Novik).
  • Corrige un double appel au destructeur lors de la levée d’une exception dans addBatchLookupTable8 #58745 (Raúl Marín).
  • Ne traite pas les requêtes dans Keeper pendant l’arrêt #58765 (Antonio Andelic).
  • Corrige une déréférence de pointeur nul dans SlabsPolygonIndex::find #58771 (Yarik Briukhovetskyi).
  • Corrige la fonction JSONExtract pour les colonnes LowCardinality(Nullable) #58808 (vdimir).
  • Corrige une accumulation inattendue de l’utilisation mémoire lors de la création d’un très grand nombre de tables avec CREATE et DROP. #58831 (Maksim Kita).
  • Lecture multiple du stockage file log dans mv #58877 (János Benjamin Antal).
  • Restriction de l’identifiant de clé d’accès pour S3. #58900 (MikhailBurdukov).
  • Corrige un possible crash dans clickhouse-local lors du chargement des suggestions #58907 (Kruglov Pavel).
  • Corrige un crash lorsque indexHint est utilisé #58911 (Dmitry Novik).
  • Corrige l’oubli des headers par StorageURL au redémarrage du serveur #58933 (Michael Kolupaev).
  • Analyseur : corrige le remplacement du stockage avec le bloc d’insertion #58958 (Yakov Olkhovskiy).
  • Corrige le seek dans ReadBufferFromZipArchive #58966 (Michael Kolupaev).
  • Correctif pour les index inversés expérimentaux (ne pas utiliser en production) : DROP INDEX d’un index inversé supprime désormais tous les fichiers pertinents du stockage persistant #59040 (mochi).
  • Corrige une situation de concurrence sur query_factories_info #59049 (Kseniia Sumarokova).
  • Désactivation des nouvelles tentatives en cas d’erreur “Too many redirects” #59099 (skyoct).
  • Correction d’un interblocage lors de l’arrêt d’une base de données non démarrée #59137 (Sergei Trifonov).
  • Correction : LIMIT BY et LIMIT dans une requête distribuée #59153 (Igor Nikonov).
  • Correction d’un crash avec un fuseau horaire Nullable pour toString #59190 (Yarik Briukhovetskyi).
  • Correction d’un arrêt brutal dans les métadonnées Iceberg en cas de chemins de fichier invalides #59275 (Kruglov Pavel).
  • Correction du nom d’architecture dans la sélection de la cible Rust #59307 (p1rattttt).
  • Correction d’une erreur logique liée à “not-ready set” lors de l’interrogation de system.tables avec une sous-requête dans la clause IN. #59351 (Nikolai Kochetov).
Dernière modification le 29 juin 2026