Passer au contenu principal

Table des matières

Version de ClickHouse v23.12, 2023-12-28
Version de ClickHouse v23.11, 2023-12-06
Version de ClickHouse v23.10, 2023-11-02
Version de ClickHouse v23.9, 2023-09-28
Version de ClickHouse v23.8 LTS, 2023-08-31
Version de ClickHouse v23.7, 2023-07-27
Version de ClickHouse v23.6, 2023-06-30
Version de ClickHouse v23.5, 2023-06-08
Version de ClickHouse v23.4, 2023-04-26
Version de ClickHouse v23.3 LTS, 2023-03-30
Version de ClickHouse v23.2, 2023-02-23
Version de ClickHouse v23.1, 2023-01-25
Journal des modifications de 2022

Version de ClickHouse 23.12, 2023-12-28. Presentation, Video

Changement rétro-incompatible

  • Correction de la validation des fonctions non déterministes dans les expressions TTL. Auparavant, il était possible, dans certains cas, de créer une expression TTL avec des fonctions non déterministes, ce qui pouvait ensuite entraîner un comportement indéfini. Cela corrige #37250. Les expressions TTL qui ne dépendent d’aucune colonne d’une table sont désormais interdites par défaut. Il est possible de les réautoriser avec SET allow_suspicious_ttl_expressions = 1 ou SET compatibility = '23.11'. Clôt #37286. #51858 (Alexey Milovidov).
  • Le paramètre MergeTree clean_deleted_rows est obsolète et n’a désormais plus aucun effet. Le mot-clé CLEANUP pour OPTIMIZE n’est pas autorisé par défaut (il peut être réactivé avec le paramètre allow_experimental_replacing_merge_with_cleanup). #58267 (Alexander Tokmakov). Cela corrige #57930. Cela clôt #54988. Cela clôt #54570. Cela clôt #50346. Cela clôt #47579. Cette fonctionnalité doit être supprimée, car elle n’est pas satisfaisante. Nous devons la retirer aussi rapidement que possible, car il n’existe pas d’autre solution. #57932 (Alexey Milovidov).

Nouvelle fonctionnalité

  • Ajout des Refreshable Materialized Views, demandées dans #33919. #56946 (Michael Kolupaev, Michael Guzov).
  • Introduction de PASTE JOIN, qui permet de joindre des tables sans clause ON, simplement en se basant sur les numéros de ligne. Exemple : SELECT * FROM (SELECT number AS a FROM numbers(2)) AS t1 PASTE JOIN (SELECT number AS a FROM numbers(2) ORDER BY a DESC) AS t2. #57995 (Yarik Briukhovetskyi).
  • La clause ORDER BY prend désormais en charge ALL, ce qui signifie que ClickHouse trie sur toutes les colonnes de la clause SELECT. Exemple : SELECT col1, col2 FROM tab WHERE [...] ORDER BY ALL. #57875 (zhongyuankai).
  • Ajout d’une nouvelle commande de mutation ALTER TABLE <table> APPLY DELETED MASK, qui permet de forcer l’application du masque écrit par lightweight delete et de supprimer du disque les lignes marquées comme supprimées. #57433 (Anton Popov).
  • Le handler /binary ouvre une visionneuse visuelle des symboles du binaire ClickHouse. #58211 (Alexey Milovidov).
  • Ajout d’une nouvelle fonction SQL sqid pour générer des Sqids (https://sqids.org/), exemple : SELECT sqid(125, 126). #57512 (Robert Schulze).
  • Ajout d’une nouvelle fonction seriesPeriodDetectFFT pour détecter la période d’une série à l’aide de la FFT. #57574 (Bhavna Jindal).
  • Ajout d’un point de terminaison HTTP permettant de vérifier si Keeper est prêt à accepter du trafic. #55876 (Konstantin Bogdanov).
  • Ajout du mode ‘union’ pour l’inférence de schéma. Dans ce mode, le schéma de la table résultante est l’union des schémas de tous les fichiers (le schéma est donc inféré pour chaque fichier). Le mode d’inférence de schéma est contrôlé par le paramètre schema_inference_mode, qui accepte deux valeurs possibles : default et union. Résout #55428. #55892 (Kruglov Pavel).
  • Ajout du paramètre input_format_csv_try_infer_numbers_from_strings, qui permet d’inférer des nombres à partir de chaînes au format CSV. Résout #56455. #56859 (Kruglov Pavel).
  • Lorsque le nombre de bases de données ou de tables dépasse un seuil configurable, un avertissement est affiché à l’utilisateur. #57375 (凌涛).
  • Un Dictionary avec la disposition HASHED_ARRAY (et COMPLEX_KEY_HASHED_ARRAY) prend en charge SHARDS, comme HASHED. #57544 (vdimir).
  • Ajout de métriques asynchrones pour le nombre total d’octets de clé primaire et le nombre total d’octets de clé primaire alloués en mémoire. #57551 (Bharat Nallan).
  • Ajout de la fonction SHA512_256. #57645 (Bharat Nallan).
  • Ajoute FORMAT_BYTES comme alias de formatReadableSize. #57592 (Bharat Nallan).
  • Permet de transmettre un token de session facultatif à la table function s3. #57850 (Shani Elharrar).
  • Introduit un nouveau paramètre http_make_head_request. S’il est désactivé, le moteur de table URL n’effectuera pas de requête HEAD pour déterminer la taille du fichier. Cela est nécessaire pour prendre en charge des serveurs HTTP inefficaces, mal configurés ou incapables de le faire. #54602 (Fionera).
  • Il est désormais possible de référencer une colonne ALIAS dans les définitions d’index (hors clé primaire) (issue #55650). Exemple : CREATE TABLE tab(col UInt32, col_alias ALIAS col + 1, INDEX idx (col_alias) TYPE minmax) ENGINE = MergeTree ORDER BY col;. #57546 (Robert Schulze).
  • Ajout d’un nouveau paramètre readonly, qui permet d’indiquer qu’un disque S3 est en lecture seule. Cela peut être utile pour créer une table sur un disque de type s3_plain, tout en n’ayant qu’un accès en lecture seule au S3 bucket sous-jacent. #57977 (Pengyuan Bian).
  • L’analyse de la clé primaire dans les tables MergeTree sera désormais appliquée aux prédicats qui incluent la colonne virtuelle _part_offset (éventuellement avec _part). Cette fonctionnalité peut servir de forme particulière d’index secondaire. #58224 (Amos Bird).

Amélioration des performances

  • Extrait les plages de parts non intersectantes d’une table MergeTree lors du traitement FINAL. Cela permet d’éviter une logique FINAL supplémentaire pour ces plages de parts non intersectantes. Lorsque le nombre de valeurs dupliquées avec la même clé primaire est faible, les performances sont presque identiques à celles obtenues sans FINAL. Améliore les performances de lecture de MergeTree FINAL lorsque le paramètre do_not_merge_across_partitions_select_final est défini. #58120 (Maksim Kita).
  • La copie entre disques S3 s’effectue désormais via une copie S3 côté serveur au lieu d’un passage par le buffer. Cela améliore les opérations BACKUP/RESTORE ainsi que la commande clickhouse-disks copy. #56744 (MikhailBurdukov).
  • Le hash JOIN respecte le paramètre max_joined_block_size_rows et ne produit pas de gros blocks pour ALL JOIN. #56996 (vdimir).
  • Libère plus tôt la mémoire utilisée pour l’aggregation. Cela peut éviter une external aggregation inutile. #57691 (Nikolai Kochetov).
  • Améliore les performances de la serialization des chaînes. #57717 (Maksim Kita).
  • Prend en charge l’optimisation triviale de count pour les tables utilisant le moteur Merge. #57867 (skyoct).
  • Optimise l’aggregation dans certains cas. #57872 (Anton Popov).
  • La fonction hasAny peut désormais tirer parti des skipping indices en texte intégral. #57878 (Jpnock).
  • La fonction if(cond, then, else) (et son alias cond ? then : else) a été optimisée pour utiliser une évaluation sans branchement. #57885 (zhanglistar).
  • MergeTree déduit automatiquement le paramètre do_not_merge_across_partitions_select_final si l’expression de clé de partition ne contient que des colonnes de l’expression de clé primaire. #58218 (Maksim Kita).
  • Accélère MIN et MAX pour les types natifs. #58231 (Raúl Marín).
  • Implémente la cache policy SLRU pour le filesystem cache. #57076 (Kseniia Sumarokova).
  • La limite du nombre de connections par endpoint pour les background fetches a été augmentée de 15 à la valeur du paramètre background_fetches_pool_size. - Le paramètre de niveau MergeTree replicated_max_parallel_fetches_for_host est devenu Obsolete - Les paramètres de niveau MergeTree replicated_fetches_http_connection_timeout, replicated_fetches_http_send_timeout et replicated_fetches_http_receive_timeout ont été déplacés au niveau Server. - Le paramètre keep_alive_timeout a été ajouté à la liste des paramètres de niveau Server. #57523 (Nikita Mikhaylov).
  • Rend les requêtes sur system.filesystem_cache moins gourmandes en mémoire. #57687 (Kseniia Sumarokova).
  • Réduit l’utilisation mémoire lors de la deserialization des chaînes. #57787 (Maksim Kita).
  • Constructeur plus efficace pour Enum — utile lorsqu’un Enum contient un très grand nombre de valeurs. #57887 (Duc Canh Le).
  • Une amélioration de la lecture depuis le cache du système de fichiers : toujours utiliser la méthode pread. #57970 (Nikita Taranov).
  • Ajout d’une optimisation de la chaîne AND notEquals dans l’optimiseur d’expressions logiques. Cette optimisation n’est disponible que lorsque l’Analyzer expérimental est activé. #58214 (Kevin Mingtarja).

Amélioration

  • Prise en charge de la limite mémoire souple dans Keeper. Les requêtes seront refusées si l’utilisation de la mémoire approche du maximum. #57271 (Han Fei). #57699 (Han Fei).
  • Les insertions dans les tables distribuées gèrent désormais correctement les mises à jour de la configuration du cluster. Lorsque la liste des nœuds du cluster est mise à jour dynamiquement, le Directory Monitor de la table distribuée met à jour cette liste. #42826 (zhongyuankai).
  • N’autorise pas la création d’une table répliquée avec des paramètres de fusion incohérents. #56833 (Duc Canh Le).
  • Affiche la taille non compressée dans system.tables. #56618. #57186 (Chen Lixiang).
  • Ajoute skip_unavailable_shards comme paramètre pour les tables Distributed, à l’image du paramètre correspondant au niveau de la requête. Résout #43666. #57218 (Gagan Goel).
  • La fonction substring (alias : substr, mid) peut désormais être utilisée avec les types Enum. Auparavant, le premier argument de la fonction devait être une valeur de type String ou FixedString. Cela améliore la compatibilité avec des outils tiers comme Tableau via l’interface MySQL. #57277 (Serge Klochkov).
  • La fonction format prend désormais en charge des arguments de tout type (au lieu des seuls arguments String et FixedString). C’est important pour évaluer SELECT format('The {0} to all questions is {1}', 'answer', 42). #57549 (Robert Schulze).
  • Permet désormais d’utiliser la fonction date_trunc avec un premier argument insensible à la casse. Les deux variantes sont maintenant prises en charge : SELECT date_trunc('day', now()) et SELECT date_trunc('DAY', now()). #57624 (Yarik Briukhovetskyi).
  • Messages plus utiles lorsqu’une table n’existe pas. #57342 (Bharat Nallan).
  • Autorise le remplacement des paramètres du serveur max_partition_size_to_drop et max_table_size_to_drop au moment de la requête. #57452 (Jordi Villar).
  • Inférence légèrement améliorée des tuples non nommés dans les formats JSON. #57751 (Kruglov Pavel).
  • Ajoute la prise en charge de l’indicateur read-only lors de la connexion à Keeper (corrige #53749). #57479 (Mikhail Koviazin).
  • Corrige des envois distribués pouvant rester bloqués à cause de “No such file or directory” (lors de la récupération d’un lot depuis le disque). Corrige aussi d’éventuels problèmes avec error_count dans system.distribution_queue (dans le cas de distributed_directory_monitor_max_sleep_time_ms >5min). Introduit un événement de profil pour suivre les échecs d’INSERT asynchrones : DistributedAsyncInsertionFailures. #57480 (Azat Khuzhin).
  • Prise en charge des generated columns de PostgreSQL et des valeurs par défaut des colonnes dans MaterializedPostgreSQL (fonctionnalité expérimentale). Corrige #40449. #57568 (Kseniia Sumarokova).
  • Permet d’appliquer certaines modifications des paramètres de configuration du cache du système de fichiers sans redémarrer le serveur. #57578 (Kseniia Sumarokova).
  • Gestion correcte de la structure d’une table PostgreSQL avec un tableau vide. #57618 (Mike Kot).
  • Expose le nombre total d’erreurs survenues depuis le dernier redémarrage du serveur en tant que métrique ClickHouseErrorMetric_ALL. #57627 (Nikita Mikhaylov).
  • Autorise les nœuds dans le fichier de configuration avec une référence from_env/from_zk et un élément non vide avec replace=1. #57628 (Azat Khuzhin).
  • Ajoute une table function fuzzJSON qui permet de générer de grandes quantités de JSON malformé pour le fuzzing. #57646 (Julia Kartseva).
  • Autorise la conversion d’IPv6 en UInt128 ainsi que l’arithmétique binaire. #57707 (Yakov Olkhovskiy).
  • Ajoute un paramètre pour async inserts deduplication cache afin de définir combien de temps attendre avant la mise à jour du cache. Déprécie le paramètre async_block_ids_cache_min_update_interval_ms. Désormais, le cache n’est mis à jour qu’en cas de conflits. #57743 (alesapin).
  • La fonction sleep() peut désormais être annulée avec KILL QUERY. #57746 (Vitaly Baranov).
  • Interdit les requêtes CREATE TABLE ... AS SELECT pour les table engines Replicated dans la base de données expérimentale Replicated, car elles ne sont pas prises en charge. Référence #35408. #57796 (Nikolay Degterinsky).
  • Corrige et améliore la transformation des requêtes pour les bases de données externes afin d’obtenir récursivement tous les prédicats compatibles. #57888 (flynn).
  • Prise en charge du rechargement dynamique de la taille du cache du système de fichiers. Corrige #57866. #57897 (Kseniia Sumarokova).
  • Prend correctement en charge system.stack_trace pour les threads où SIGRTMIN est bloqué (ces threads peuvent exister dans des bibliothèques externes de mauvaise qualité telles qu’Apache rdkafka). #57907 (Azat Khuzhin). Envoie également un signal aux threads uniquement s’il n’est pas bloqué afin d’éviter d’attendre storage_system_stack_trace_pipe_read_timeout_ms lorsque cela n’a aucun sens. #58136 (Azat Khuzhin).
  • Tolère les défaillances de Keeper lors de la vérification des quorum inserts. #57986 (Raúl Marín).
  • Ajoute le RSS maximal/de crête (MemoryResidentMax) dans system.asynchronous_metrics. #58095 (Azat Khuzhin).
  • Cette PR permet d’utiliser des liens de type S3 (https:// et s3://) sans préciser la région lorsqu’il ne s’agit pas de la région par défaut. Elle détecte également la région correcte si l’utilisateur a indiqué une région erronée. #58148 (Yarik Briukhovetskyi).
  • clickhouse-format --obfuscate saura reconnaître Settings, MergeTreeSettings et les fuseaux horaires, et conservera leurs noms inchangés. #58179 (Alexey Milovidov).
  • Ajout d’une fonction explicite finalize() dans ZipArchiveWriter. Simplification d’un code trop complexe dans ZipArchiveWriter. Cela corrige #58074. #58202 (Vitaly Baranov).
  • Les caches ayant le même chemin utilisent désormais les mêmes objets de cache. Ce comportement existait auparavant, mais a été cassé dans la version 23.4. Si de tels caches avec le même chemin ont des ensembles différents de paramètres de cache, une exception sera levée pour indiquer que cela n’est pas autorisé. #58264 (Kseniia Sumarokova).
  • Répliques parallèles (fonctionnalité expérimentale) : paramètres plus conviviaux #57542 (Igor Nikonov).
  • Répliques parallèles (fonctionnalité expérimentale) : amélioration de la gestion des réponses aux annonces #57749 (Igor Nikonov).
  • Répliques parallèles (fonctionnalité expérimentale) : meilleure prise en compte de min_number_of_marks dans ParallelReplicasReadingCoordinator #57763 (Nikita Taranov).
  • Répliques parallèles (fonctionnalité expérimentale) : désactivation des répliques parallèles avec IN (sous-requête) #58133 (Igor Nikonov).
  • Répliques parallèles (fonctionnalité expérimentale) : ajout de l’événement de profil ‘ParallelReplicasUsedCount’ #58173 (Igor Nikonov).
  • Les requêtes autres que POST, comme HEAD, seront en readonly, comme GET. #58060 (San).
  • Ajout de la colonne bytes_uncompressed à system.part_log #58167 (Jordi Villar).
  • Ajout du nom de la sauvegarde de base aux tables system.backups et system.backup_log #58178 (Pradeep Chhetri).
  • Ajout de la prise en charge de la spécification des paramètres de requête sur la ligne de commande dans clickhouse-local #58210 (Pradeep Chhetri).

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

  • Randomiser davantage de paramètres #39663 (Anton Popov).
  • Randomiser les optimisations désactivées dans la CI #57315 (Raúl Marín).
  • Autoriser l’utilisation, sur macOS, des moteurs de table et fonctions liés à Azure. #51866 (Alexey Milovidov).
  • ClickHouse Fast Test utilise désormais Musl au lieu de GLibc. #57711 (Alexey Milovidov). Le build Musl entièrement statique est disponible au téléchargement depuis la CI.
  • Exécuter ClickBench pour chaque commit. Cela résout #57708. #57712 (Alexey Milovidov).
  • Supprimer des bibliothèques externes l’utilisation de la fonction C/POSIX select, jugée nuisible. #57467 (Igor Nikonov).
  • Par souci de commodité, les paramètres disponibles uniquement dans ClickHouse Cloud seront également présents dans le build open-source de ClickHouse. #57638 (Nikita Mikhaylov).

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

  • Correction d’un risque de rupture de l’ordre de tri dans TTL GROUP BY #49103 (Nikita Mikhaylov).
  • Correctif : scission de la stratégie de bucket lttb ; le premier et le dernier bucket ne doivent contenir qu’un seul point #57003 (FFish).
  • Correction d’un interblocage possible dans le format Template pendant la synchronisation après une erreur #57004 (Kruglov Pavel).
  • Correction d’un arrêt prématuré lors de l’analyse d’un fichier avec saut de nombreuses erreurs #57006 (Kruglov Pavel).
  • Empêche le contournement de l’ACL du dictionnaire via la table function dictionary #57362 (Salvatore Mesoraca).
  • Correction d’un autre cas d’erreur “non-ready set” découvert par le Fuzzer. #57423 (Nikolai Kochetov).
  • Correction de plusieurs problèmes liés à l’utilisation de array_ndims dans PostgreSQL. #57436 (Ryan Jacobs).
  • Correction d’une incohérence de RWLock après le timeout d’un verrou d’écriture #57454 (Vitaly Baranov). Correction d’une incohérence de RWLock après le timeout d’un verrou d’écriture (encore) #57733 (Vitaly Baranov).
  • Correctif : ne pas exclure la colonne éphémère lors de la construction de la chaîne de poussée vers une vue #57461 (Yakov Olkhovskiy).
  • MaterializedPostgreSQL (problème expérimental) : corrige le problème #41922, ajoute un test pour #41923 #57515 (Kseniia Sumarokova).
  • Ignorer la clause ON CLUSTER dans les requêtes grant/revoke pour la gestion des entités d’accès répliquées. #57538 (MikhailBurdukov).
  • Correction d’un crash dans clickhouse-local #57553 (Nikolay Degterinsky).
  • Correctif pour Hash JOIN. #57564 (vdimir).
  • Correction d’une erreur possible dans la source PostgreSQL #57567 (Kseniia Sumarokova).
  • Correction du type dans Hash JOIN pour LowCardinality imbriqué. #57614 (vdimir).
  • Évite les blocages de system.stack_trace en interdisant correctement sa lecture parallèle. #57641 (Azat Khuzhin).
  • Correction d’une erreur lors de l’agrégation de colonnes creuses avec any(...) RESPECT NULL #57710 (Azat Khuzhin).
  • Correction de l’analyse syntaxique des opérateurs unaires #57713 (Nikolay Degterinsky).
  • Corrige le chargement des dépendances pour le moteur de table expérimental MaterializedPostgreSQL. #57754 (Kseniia Sumarokova).
  • Corrige les tentatives de reprise pour les nœuds déconnectés avec BACKUP/RESTORE ON CLUSTER #57764 (Vitaly Baranov).
  • Corrige le résultat de l’agrégation externe dans le cas d’une projection partiellement matérialisée #57790 (Anton Popov).
  • Corrige la fusion dans les fonctions d’agrégation avec le combinateur *Map #57795 (Anton Popov).
  • Désactive system.kafka_consumers car il comporte un bogue. #57822 (Azat Khuzhin).
  • Corrige la prise en charge des clés LowCardinality dans Merge JOIN. #57827 (vdimir).
  • Correctif pour InterpreterCreateQuery lié au bloc d’échantillon. #57855 (Maksim Kita).
  • addresses_expr était ignoré pour les collections nommées provenant de PostgreSQL. #57874 (joelynch).
  • Corrige un accès mémoire invalide dans BLAKE3 (Rust) #57876 (Raúl Marín). Il a ensuite été réécrit de Rust vers C++ pour une meilleure sécurité mémoire. #57994 (Raúl Marín).
  • Normalise les noms de fonction dans CREATE INDEX #57906 (Alexander Tokmakov).
  • Corrige la gestion des répliques indisponibles avant l’arrivée de la première requête #57933 (Nikita Taranov).
  • Corrige une mauvaise classification des alias littéraux #57988 (Chen768959).
  • Corrige un prétraitement invalide sur Keeper #58069 (Antonio Andelic).
  • Corrige un dépassement d’entier dans la bibliothèque Poco, lié à UTF32Encoding #58073 (Andrey Fedotov).
  • Corrige les répliques parallèles (fonctionnalité expérimentale) en présence d’une sous-requête scalaire avec une grande valeur entière #58118 (Alexey Milovidov).
  • Corrige accurateCastOrNull pour les valeurs DateTime hors plage #58139 (Andrey Zvonov).
  • Corrige une possible erreur PARAMETER_OUT_OF_BOUND lors de la lecture des sous-colonnes depuis une Wide part dans MergeTree #58175 (Kruglov Pavel).
  • Corrige un ralentissement de CREATE VIEW avec un très grand nombre de sous-requêtes #58220 (Tao Wang).
  • Correction du parsing parallèle de JSONCompactEachRow #58181 (Alexey Milovidov). #58250 (Kruglov Pavel).

Version de ClickHouse 23.11, 2023-12-06. Présentation, Vidéo

Changement rétro-incompatible

  • Le fichier de configuration par défaut du serveur ClickHouse active désormais access_management (gestion des utilisateurs via des requêtes SQL) et named_collection_control (gestion des collections nommées via des requêtes SQL) pour l’utilisateur default. Cela clôt #56482. #56619 (Alexey Milovidov).
  • Plusieurs améliorations ont été apportées à RESPECT NULLS/IGNORE NULLS pour les fonctions de fenêtre. Si vous les utilisez comme fonctions d’agrégation et stockez les états d’agrégation de fonctions avec ces modificateurs, ils peuvent devenir incompatibles. #57189 (Raúl Marín).
  • Suppression de l’optimisation optimize_move_functions_out_of_any. #57190 (Raúl Marín).
  • Les formatters %l/%k/%c de la fonction parseDateTime peuvent désormais analyser des heures/mois sans zéro initial, par ex. select parseDateTime('2023-11-26 8:14', '%F %k:%i') fonctionne maintenant. Définissez parsedatetime_parse_without_leading_zeros = 0 pour restaurer le comportement précédent, qui exigeait deux chiffres. La fonction formatDateTime peut désormais également afficher des heures/mois sans zéro initial. Ce comportement est contrôlé par le paramètre formatdatetime_format_without_leading_zeros, mais il reste désactivé par défaut afin de ne pas casser les cas d’usage existants. #55872 (Azat Khuzhin).
  • Vous ne pouvez plus utiliser la fonction d’agrégation avgWeighted avec des arguments de type Decimal. Solution de contournement : convertissez les arguments en Float64. Cela clôt #43928. Cela clôt #31768. Cela clôt #56435. Si vous avez utilisé cette fonction dans des vues matérialisées ou des projections avec des arguments Decimal, contactez support@clickhouse.com. Correction d’une erreur dans la fonction d’agrégation sumMap, avec pour effet de la ralentir d’environ 1,5 à 2 fois. Cela n’a pas d’importance, car cette fonction est de toute façon mauvaise. Cela clôt #54955. Cela clôt #53134. Cela clôt #55148. Correction d’un bug dans la fonction groupArraySample : elle utilisait la même graine aléatoire lorsqu’une requête générait plus d’un état d’agrégation. #56350 (Alexey Milovidov).

Nouvelle fonctionnalité

  • Ajout du paramètre serveur async_load_databases pour le chargement asynchrone des bases de données et des tables. Accélère le démarrage du serveur. S’applique aux bases de données utilisant les moteurs Ordinary, Atomic et Replicated. Leurs tables chargent les métadonnées de manière asynchrone. Une requête sur une table augmente la priorité de la tâche de chargement et attend qu’elle soit terminée. Ajout d’une nouvelle table system.asynchronous_loader pour l’introspection. #49351 (Sergei Trifonov).
  • Ajout de la table système blob_storage_log. Elle permet d’auditer toutes les données écrites dans S3 et d’autres stockages objet. #52918 (vdimir).
  • Utilise des statistiques pour mieux ordonner les conditions prewhere. #53240 (Han Fei).
  • Ajout de la prise en charge de la compression dans le protocole de Keeper. Elle peut être activée côté ClickHouse à l’aide de l’indicateur use_compression dans la section zookeeper. Gardez à l’esprit que seul ClickHouse Keeper prend en charge la compression, contrairement à Apache ZooKeeper. Résout #49507. #54957 (SmitaRKulkarni).
  • Introduction de la fonctionnalité storage_metadata_write_full_object_key. Si elle est définie sur true, les fichiers de métadonnées sont écrits dans le nouveau format. Avec ce format, ClickHouse stocke la clé complète de l’objet distant dans le fichier de métadonnées, ce qui offre davantage de souplesse et permet une meilleure optimisation. #55566 (Sema Checherinda).
  • Ajout de nouveaux paramètres et d’une nouvelle syntaxe pour empêcher l’écrasement des champs des collections nommées. Cela vise à empêcher un utilisateur malveillant d’obtenir un accès non autorisé aux secrets. #55782 (Salvatore Mesoraca).
  • Ajout de la colonne hostname à toutes les tables système de logs : c’est utile si vous rendez les tables système répliquées, partagées ou distribuées. #55894 (Bharat Nallan).
  • Ajout de la requête CHECK ALL TABLES. #56022 (vdimir).
  • Ajout de la fonction fromDaysSinceYearZero, similaire à FROM_DAYS de MySQL. Par exemple, SELECT fromDaysSinceYearZero(739136) renvoie 2023-09-08. #56088 (Joanna Hulboj).
  • Ajout d’un outil Python externe pour consulter les sauvegardes et en extraire des informations sans utiliser ClickHouse. #56268 (Vitaly Baranov).
  • Implémentation d’un nouveau paramètre appelé preferred_optimize_projection_name. S’il est défini sur une chaîne non vide, la projection spécifiée sera utilisée si possible au lieu d’être choisie parmi tous les candidats. #56309 (Yarik Briukhovetskyi).
  • Ajout d’une commande à 4 lettres pour céder/abandonner le rôle de leader (https://github.com/ClickHouse/ClickHouse/issues/56352). #56354 (Pradeep Chhetri). #56620 (Pradeep Chhetri).
  • Ajout d’une nouvelle fonction SQL, arrayRandomSample(arr, k), qui renvoie un échantillon de k éléments du tableau d’entrée. Une fonctionnalité similaire ne pouvait auparavant être obtenue qu’avec une syntaxe moins pratique, par ex. SELECT arrayReduce('groupArraySample(3)', range(10)). #56416 (Robert Schulze).
  • Ajout de la prise en charge du type Float16 pour une utilisation dans les fichiers .npy. Résout #56344. #56424 (Yarik Briukhovetskyi).
  • Ajout d’une vue système information_schema.statistics pour une meilleure compatibilité avec Tableau Online. #56425 (Serge Klochkov).
  • Ajout de la table system.symbols, utile pour l’introspection du binaire. #56548 (Alexey Milovidov).
  • Dashboards configurables. Les requêtes des graphiques sont désormais chargées à l’aide d’une requête qui utilise par défaut une nouvelle table system.dashboards. #56771 (Sergei Trifonov).
  • Introduction de la table function fileCluster : elle est utile si vous montez un système de fichiers partagé (NFS ou similaire) dans le répertoire user_files. #56868 (Andrey Zvonov).
  • Ajout de la colonne virtuelle _size, contenant la taille du fichier en octets, aux engines s3/file/hdfs/url/azureBlobStorage. #57126 (Kruglov Pavel).
  • Expose via le Prometheus endpoint le nombre d’erreurs pour chaque code d’erreur survenues sur un serveur depuis le dernier redémarrage. #57209 (Nikita Mikhaylov).
  • ClickHouse Keeper signale sa zone de disponibilité active au chemin /keeper/availability-zone. Cela peut être configuré via <availability_zone><value>us-west-1a</value></availability_zone>. #56715 (Jianfei Hu).
  • Rend ALTER materialized_view MODIFY QUERY non expérimentale et déprécie le paramètre allow_experimental_alter_materialized_view_structure. Corrige #15206. #57311 (alesapin).
  • Le paramètre join_algorithm respecte l’ordre spécifié #51745 (vdimir).
  • Ajout de la prise en charge des types Protobuf bien connus dans le format Protobuf. #56741 (János Benjamin Antal).

Amélioration des performances

  • Timeouts adaptatifs pour les interactions avec S3. La première tentative est effectuée avec des timeouts d’envoi et de réception courts. #56314 (Sema Checherinda).
  • Augmentation de la valeur par défaut de max_concurrent_queries de 100 à 1000. Cela se justifie lorsqu’un grand nombre de clients se connectent et envoient ou reçoivent lentement des données, de sorte que le serveur n’est pas limité par le CPU, ou lorsque le nombre de CPU cores dépasse 100. Active également le contrôle de concurrence par défaut et définit le nombre total souhaité de threads de query processing à deux fois le nombre de CPU cores. Cela améliore les performances dans les scénarios avec un très grand nombre de queries concurrentes. #46927 (Alexey Milovidov).
  • Prise en charge de l’évaluation parallèle des window functions. Corrige #34688. #39631 (Dmitry Novik).
  • Le table engine Numbers (de la table system.numbers) analyse désormais la condition afin de générer le sous-ensemble de données nécessaire, à la manière de l’index d’une table. #50909 (JackyWoo).
  • Amélioration des performances du filtrage par condition IN (...) pour le table engine Merge. #54905 (Nikita Taranov).
  • Amélioration dans les cas où le filesystem cache est plein et où les lectures sont volumineuses. #55158 (Kseniia Sumarokova).
  • Ajout de la possibilité de désactiver les checksums pour S3 afin d’éviter des parcours excessifs du fichier (ce comportement est contrôlé par le setting s3_disable_checksum). #55559 (Azat Khuzhin).
  • Désormais, la lecture depuis les tables distantes s’effectue de manière synchrone lorsque les données sont dans le page cache (comme pour les tables locales). C’est plus rapide, cela ne nécessite pas de synchronisation au sein du thread pool, ne freine pas les seek sur le FS local et réduit l’attente CPU. #55841 (Nikita Taranov).
  • Optimisation de l’extraction d’une value à partir de map, arrayElement. Cela apporte environ 30 % d’accélération : réduction de la mémoire réservée et des appels à resize. #55957 (lgbo).
  • Optimisation du filtrage en plusieurs étapes avec AVX-512. Des expériences de performance sur le dataset OnTime, sur une machine ICX (Intel Xeon Platinum 8380 CPU, 80 cœurs, 160 threads), montrent que ce changement pourrait améliorer le QPS des query Q2, Q3, Q4, Q5 et Q6 de respectivement 7,4 %, 5,9 %, 4,7 %, 3,0 % et 4,6 %, sans impact sur les autres. #56079 (Zhiguo Zhou).
  • Limitation du nombre de threads occupés dans le query profiler. Au-delà de cette limite, ils ignorent le profiling. #56105 (Alexey Milovidov).
  • Réduction du nombre d’appels à des fonctions virtuelles dans les window functions. #56120 (Maksim Kita).
  • Autorise le pruning récursif des champs Tuple dans le format de données ORC afin d’accélérer le balayage. #56122 (李扬).
  • Optimisation simple du comptage pour le format de données Npy : des requêtes comme select count() from 'data.npy' s’exécuteront beaucoup plus vite grâce à la mise en cache des résultats. #56304 (Yarik Briukhovetskyi).
  • Les requêtes avec agrégation et un grand nombre de flux consommeront moins de mémoire lors de la construction du plan. #57074 (Alexey Milovidov).
  • Amélioration des performances d’exécution des requêtes pour les cas d’usage avec de nombreux utilisateurs et un grand nombre de requêtes concurrentes (>2000 QPS), grâce à l’optimisation de l’accès à ProcessList. #57106 (Andrej Hoos).
  • Légère amélioration de array join, avec réutilisation de certains résultats intermédiaires. #57183 (李扬).
  • Dans certains cas, le déroulage de pile était lent. Ce n’est plus le cas. #57221 (Alexey Milovidov).
  • Nous utilisons désormais le pool de lecture par défaut pour lire depuis le stockage externe lorsque max_streams = 1. C’est avantageux lorsque les prélectures sont activées. #57334 (Nikita Taranov).
  • Amélioration de Keeper : réduction de l’utilisation mémoire au démarrage en retardant le prétraitement des logs. #55660 (Antonio Andelic).
  • Amélioration des performances de correspondance des motifs glob pour les stockages File et HDFS. #56141 (Andrey Zvonov).
  • Les posting lists des index de texte intégral expérimentaux sont désormais compressées, ce qui réduit leur taille de 10 à 30 %. #56226 (Harry Lee).
  • Parallélisation de BackupEntriesCollector dans les sauvegardes. #56312 (Kseniia Sumarokova).

Amélioration

  • Ajoute un nouveau paramètre MergeTree add_implicit_sign_column_constraint_for_collapsing_engine (désactivé par défaut). Lorsqu’il est activé, il ajoute une contrainte CHECK implicite pour les tables CollapsingMergeTree, qui limite la valeur de la colonne Sign à -1 ou 1. #56701. #56986 (Kevin Mingtarja).
  • Permet d’ajouter un nouveau disque à la configuration de stockage sans redémarrage. #56367 (Duc Canh Le).
  • Prend en charge la création et la matérialisation d’un index dans une même requête ALTER, ainsi que “modify TTL” et “materialize TTL” dans une même requête. Ferme #55651. #56331 (flynn).
  • Ajoute une nouvelle fonction de table nommée fuzzJSON, avec des lignes contenant des versions perturbées de la chaîne JSON source avec des variations aléatoires. #56490 (Julia Kartseva).
  • Le moteur Merge filtre les enregistrements conformément aux politiques de lignes des tables sous-jacentes, ce qui évite de devoir créer une autre politique de lignes sur une table Merge. #50209 (Ilya Golshtein).
  • Ajoute un paramètre max_execution_time_leaf pour limiter le temps d’exécution sur un shard pour une requête distribuée, ainsi que timeout_overflow_mode_leaf pour contrôler le comportement en cas de timeout. #51823 (Duc Canh Le).
  • Ajoute un paramètre ClickHouse pour désactiver le tunneling des requêtes HTTPS via un proxy HTTP. #55033 (Arthur Passos).
  • Définit background_fetches_pool_size à 16 et background&#95;schedule&#95;pool&#95;size à 512, ce qui est mieux adapté à une utilisation en production avec de fréquentes petites insertions. #54327 (Denny Crane).
  • Lors de la lecture de données depuis un fichier au format CSV, si la fin de ligne est \r et n’est pas suivie de \n, l’exception suivante sera levée : Cannot parse CSV format: found \r (CR) not followed by \n (LF). Line must end by \n (LF) or \r\n (CR LF) or \n\r. Dans ClickHouse, une fin de ligne CSV doit être \n, \r\n ou \n\r ; \r doit donc être suivi de \n, mais dans certaines situations les données CSV en entrée peuvent être invalides, comme dans l’exemple ci-dessus où \r se trouve en fin de ligne. #54340 (KevinyhZou).
  • Met à jour la bibliothèque Arrow vers la release-13.0.0, qui prend en charge de nouveaux encodages. Ferme #44505. #54800 (Kruglov Pavel).
  • Améliore les performances des requêtes ON CLUSTER en supprimant les appels système coûteux servant à récupérer toutes les interfaces réseau lors de la recherche de l’adresse IP locale dans la liste des hôtes de l’entrée DDL. #54909 (Duc Canh Le).
  • Corrige la comptabilisation de la mémoire allouée avant l’attachement d’un thread à une requête ou à un utilisateur. #56089 (Nikita Taranov).
  • Ajout de la prise en charge de LARGE_LIST dans les formats Apache Arrow. #56118 (edef).
  • Autorise la compaction manuelle de EmbeddedRocksDB via la requête OPTIMIZE. #56225 (Azat Khuzhin).
  • Ajout de la possibilité de spécifier BlockBasedTableOptions pour les tables EmbeddedRocksDB. #56264 (Azat Khuzhin).
  • SHOW COLUMNS affiche désormais le nom du type de données équivalent de MySQL lorsque la connexion est établie via le protocole MySQL. Auparavant, c’était le cas lorsque le paramètre use_mysql_types_in_show_columns = 1 était défini. Le paramètre est conservé, mais marqué comme obsolète. #56277 (Robert Schulze).
  • Correction d’une erreur possible, The local set of parts of table doesn't look like the set of parts in ZooKeeper, si le serveur était redémarré juste après TRUNCATE ou DROP PARTITION. #56282 (Alexander Tokmakov).
  • Correction de la gestion des query strings non constantes dans les fonctions formatQuery/formatQuerySingleLine. Ajout également de variantes OrNull pour les deux fonctions, qui renvoient NULL lorsqu’une query ne peut pas être analysée au lieu de lever une exception. #56327 (Robert Schulze).
  • Autorise la sauvegarde d’une vue matérialisée dont la table interne a été supprimée, au lieu de faire échouer la sauvegarde. #56387 (Kseniia Sumarokova).
  • Les queries vers system.replicas envoient des requêtes à ZooKeeper lorsque certaines colonnes sont interrogées. Lorsqu’il y a des milliers de tables, ces requêtes peuvent générer une charge considérable sur ZooKeeper. S’il y a plusieurs queries simultanées vers system.replicas, elles effectuent plusieurs fois les mêmes requêtes. Ce changement consiste à « dédupliquer » les requêtes issues de queries concurrentes. #56420 (Alexander Gololobov).
  • Correction de la traduction en query compatible MySQL pour interroger des bases de données externes. #56456 (flynn).
  • Ajout de la prise en charge de la sauvegarde et de la restauration des tables utilisant le moteur KeeperMap. #56460 (Antonio Andelic).
  • La réponse 404 pour CompleteMultipartUpload doit être revérifiée. L’opération peut avoir été effectuée sur le server même si le client a subi un timeout ou d’autres erreurs réseau. La tentative suivante de CompleteMultipartUpload reçoit une réponse 404. Si la clé de l’object existe, cette opération est considérée comme réussie. #56475 (Sema Checherinda).
  • Active la méthode HTTP OPTIONS par défaut — cela simplifie les requêtes vers ClickHouse depuis un navigateur web. #56483 (Alexey Milovidov).
  • La valeur de dns_max_consecutive_failures a été modifiée par erreur dans #46550 — cette modification a été annulée et remplacée par une valeur plus appropriée. De plus, le timeout keep-alive HTTP a été augmenté à une valeur raisonnable pour la production. #56485 (Alexey Milovidov).
  • Chargement paresseux des base backups (une base backup ne sera pas chargée tant qu’elle n’est pas nécessaire). Ajout également de quelques messages de journal et de profile events pour les backups. #56516 (Vitaly Baranov).
  • Le paramètre query_cache_store_results_of_queries_with_nondeterministic_functions (avec les valeurs false ou true) a été marqué comme obsolète. Il a été remplacé par le paramètre query_cache_nondeterministic_function_handling, une énumération à trois valeurs qui contrôle la manière dont le cache de requêtes gère les requêtes contenant des fonctions non déterministes : a) lever une exception (comportement par défaut), b) enregistrer quand même le résultat de la requête non déterministe, ou c) ignorer, c.-à-d. ne pas lever d’exception et ne pas mettre le résultat en cache. #56519 (Robert Schulze).
  • Réécriture des égalités avec vérification is null dans la clause JOIN ON. Analyseur expérimental uniquement. #56538 (vdimir).
  • La fonction concat prend désormais en charge des types d’arguments arbitraires (au lieu des seuls arguments String et FixedString). Son comportement se rapproche ainsi davantage de l’implémentation MySQL de concat. Par exemple, SELECT concat('ab', 42) renvoie désormais ab42. #56540 (Serge Klochkov).
  • Autoriser la récupération de la configuration du cache depuis la section ‘named_collection’ de la config ou depuis des named collections créées en SQL. #56541 (Kseniia Sumarokova).
  • Database engine PostgreSQL : rendre la suppression des tables obsolètes moins agressive en cas d’échec de connexion à Postgres. #56609 (jsc0218).
  • La connexion à PG prenait trop de temps lorsque l’URL était incorrecte, ce qui bloquait la requête concernée avant qu’elle ne soit annulée. #56648 (jsc0218).
  • Amélioration de Keeper : désactivation par défaut des logs compressés dans Keeper. #56763 (Antonio Andelic).
  • Ajout du paramètre de config wait_dictionaries_load_at_startup. #56782 (Vitaly Baranov).
  • Une vulnérabilité potentielle existait dans les versions précédentes de ClickHouse : si un utilisateur s’était connecté et avait tenté sans succès de s’authentifier avec la méthode “interserver secret”, le serveur ne fermait pas immédiatement la connexion, mais continuait à recevoir et à ignorer les paquets résiduels du client. Bien que ces paquets soient ignorés, ils sont tout de même analysés, et s’ils utilisent une méthode de compression affectée par une autre vulnérabilité connue, cela permet de l’exploiter sans authentication. Ce problème a été découvert dans le cadre du ClickHouse Bug Bounty Program par https://twitter.com/malacupa. #56794 (Alexey Milovidov).
  • La récupération d’une part attend que cette part soit entièrement committed sur la replica distante. Il est préférable de ne pas envoyer de part à l’état PreActive. Dans le cas du zero copy, il s’agit d’une restriction obligatoire. #56808 (Sema Checherinda).
  • Correction d’une possible erreur de conversion de la logical replication PostgreSQL lors de l’utilisation de MaterializedPostgreSQL, expérimental. #53721 (takakawa).
  • Implémentation du user-level setting alter_move_to_space_execute_async, qui permet d’exécuter les queries ALTER TABLE ... MOVE PARTITION|PART TO DISK|VOLUME de manière asynchrone. La taille du pool pour les exécutions en arrière-plan est contrôlée par background_move_pool_size. Le comportement par défaut est une exécution synchrone. Corrige #47643. #56809 (alesapin).
  • Permet de filtrer par moteur lors du parcours de system.tables, ce qui évite des connexions inutiles (et potentiellement chronophages). #56813 (jsc0218).
  • Affiche total_bytes et total_rows dans les tables système pour le stockage RocksDB. #56816 (Aleksandr Musorin).
  • Autorise les commandes de base dans ALTER pour les tables TEMPORARY. #56892 (Sergey).
  • Compression LZ4. Met en tampon le bloc compressé dans le cas rare où la capacité du tampon de sortie ne suffit pas pour écrire le bloc compressé directement dans le tampon de sortie. #56938 (Sema Checherinda).
  • Ajoute des métriques sur le nombre de jobs en file d’attente, ce qui est utile pour le pool de threads IO. #56958 (Alexey Milovidov).
  • Ajoute un paramètre dans le fichier de config pour le moteur de table PostgreSQL. Ajoute une vérification pour ce paramètre. Ajoute de la documentation sur ce paramètre supplémentaire. #56959 (Peignon Melvyn).
  • La fonction concat peut désormais être appelée avec un seul argument, par exemple SELECT concat('abc'). Cela rend son comportement plus cohérent avec l’implémentation de concat dans MySQL. #57000 (Serge Klochkov).
  • Signe tous les en-têtes x-amz-*, comme l’exige la documentation AWS S3. #57001 (Arthur Passos).
  • La fonction fromDaysSinceYearZero (alias : FROM_DAYS) peut désormais être utilisée avec des types entiers signés et non signés (auparavant, elle devait être utilisée avec un entier non signé). Cela améliore la compatibilité avec des outils 3rd party tels que Tableau Online. #57002 (Serge Klochkov).
  • Ajoute system.s3queue_log à la configuration par défaut. #57036 (Kseniia Sumarokova).
  • Change la valeur par défaut de wait_dictionaries_load_at_startup à true, et n’utilise ce paramètre que si dictionaries_lazy_load est false. #57133 (Vitaly Baranov).
  • Vérifie le type de source du dictionnaire lors de sa création, même si dictionaries_lazy_load est activé. #57134 (Vitaly Baranov).
  • Les optimisations au niveau du plan peuvent désormais être activées ou désactivées individuellement. Auparavant, il était seulement possible de toutes les désactiver. Le paramètre qui permettait auparavant cela (query_plan_enable_optimizations) est conservé et peut toujours être utilisé pour désactiver toutes les optimisations. #57152 (Robert Schulze).
  • Le code de sortie du serveur correspondra au code de l’exception. Par exemple, si le serveur ne peut pas démarrer en raison d’une limite de mémoire, il se terminera avec le code 241 = MEMORY_LIMIT_EXCEEDED. Dans les versions précédentes, le code de sortie pour les exceptions était toujours 70 = Poco::Util::ExitCode::EXIT_SOFTWARE. #57153 (Alexey Milovidov).
  • Ne plus démangler ni symboliser les frames de pile de l’en-tête C++ functional. #57201 (Mike Kot).
  • La page /dashboard du serveur HTTP prend désormais en charge les graphiques à plusieurs lignes. #57236 (Sergei Trifonov).
  • L’option de ligne de commande max_memory_usage_in_client prend en charge une valeur de type chaîne avec un suffixe (K, M, G, etc.). Résout #56879. #57273 (Yarik Briukhovetskyi).
  • Intel QPL (utilisé par le codec DEFLATE_QPL) a été mis à jour de la v1.2.0 à la v1.3.1. Correction également d’un bug lorsque BOF (Block On Fault) = 0, avec gestion des défauts de page par repli sur le chemin logiciel. #57291 (jasperzhu).
  • Augmente la valeur par défaut de replicated_deduplication_window dans les paramètres MergeTree de 100 à 1k. #57335 (sichenzhao).
  • Réduit l’utilisation de INCONSISTENT_METADATA_FOR_BACKUP. Si possible, préférer poursuivre l’analyse plutôt que de l’arrêter et de la relancer depuis le début pour la sauvegarde. #57385 (Vitaly Baranov).

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

  • Ajout d’un test SQLLogic. #56078 (Han Fei).
  • clickhouse-local et clickhouse-client sont désormais disponibles sous des noms courts (ch, chl, chc) pour en faciliter l’usage. #56634 (Alexey Milovidov).
  • Optimisation supplémentaire de la taille du build par suppression du code inutilisé dans les bibliothèques externes. #56786 (Alexey Milovidov).
  • Ajout d’une vérification automatique pour s’assurer de l’absence de grosses unités de traduction. #56559 (Alexey Milovidov).
  • Réduction de la taille de la distribution en binaire unique. Cela clôt #55181. #56617 (Alexey Milovidov).
  • Les informations sur la taille de chaque unité de traduction et de chaque fichier binaire après chaque build seront envoyées à la base de données CI dans ClickHouse Cloud. Cela clôt #56107. #56636 (Alexey Milovidov).
  • Certains fichiers de la bibliothèque « Apache Arrow » (que nous utilisons uniquement pour des éléments non essentiels comme l’analyse du format Arrow) étaient reconstruits en permanence, quel que soit le cache de build. Ce problème est corrigé. #56657 (Alexey Milovidov).
  • Évite de recompiler les unités de traduction dépendant du fichier source auto-généré sur la version. #56660 (Alexey Milovidov).
  • Les données de tracing des invocations de l’éditeur de liens seront envoyées à la base de données CI dans ClickHouse Cloud. #56725 (Alexey Milovidov).
  • Utilisation des symboles de débogage DWARF 5 pour le binaire clickhouse (DWARF 4 était utilisé auparavant). #56770 (Michael Kolupaev).
  • Ajout d’une nouvelle option de build SANITIZE_COVERAGE. Si elle est activée, le code est instrumenté pour suivre la couverture. Les informations collectées sont disponibles dans ClickHouse via : (1) une nouvelle fonction coverage qui renvoie un Array d’adresses uniques dans le code trouvées depuis la réinitialisation précédente de la couverture ; (2) la query SYSTEM RESET COVERAGE, qui réinitialise les données accumulées. Cela permet de comparer la couverture de différents tests, y compris la couverture différentielle du code. Suite de #20539. #56102 (Alexey Milovidov).
  • Certaines trames de pile peuvent ne pas être résolues lors de la collecte des piles. Dans ce cas, l’adresse brute peut être utile. #56267 (Alexander Gololobov).
  • Ajout d’une option pour désactiver libssh. #56333 (Alexey Milovidov).
  • Activation de temporary_data_in_cache dans les tests S3 en CI. #48425 (vdimir).
  • Définition de la limite maximale de mémoire pour clickhouse-client (1G) dans la CI. #56873 (Nikita Mikhaylov).

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

Version de ClickHouse 23.10, 2023-11-02. Présentation, Vidéo

Changement rétro-incompatible

  • Il n’est plus possible de supprimer automatiquement les data parts corrompues. Cela résout #55174. #55184 (Alexey Milovidov). #55557 (Jihyuk Bok).
  • Les data parts obsolètes en mémoire ne peuvent plus être lues depuis le journal d’écriture anticipée. Si vous avez déjà configuré des parts en mémoire, elles doivent être supprimées avant la mise à niveau. #55186 (Alexey Milovidov).
  • Suppression de l’intégration avec Meilisearch. Raison : elle n’était compatible qu’avec l’ancienne version 0.18. La version récente de Meilisearch a modifié le protocole et ne fonctionne plus. Remarque : nous apprécierions votre aide pour la rétablir. #55189 (Alexey Milovidov).
  • Le concept de surveillance de répertoire a été renommé en INSERT en arrière-plan. Tous les paramètres *directory_monitor* ont été renommés en distributed_background_insert*. La rétrocompatibilité devrait être préservée (puisque les anciens paramètres ont été ajoutés comme alias). #55978 (Azat Khuzhin).
  • Ne pas interpréter send_timeout défini côté client comme receive_timeout côté serveur, ni inversement. #56035 (Azat Khuzhin).
  • La comparaison d’intervalles de temps avec des unités différentes lèvera une exception. Cela résout #55942. Il est possible que vous vous soyez parfois appuyé sur le comportement précédent, où les valeurs numériques sous-jacentes étaient comparées sans tenir compte des unités. #56090 (Alexey Milovidov).
  • Réécriture complète du moteur de table expérimental S3Queue : modification de la façon dont les informations sont conservées dans ZooKeeper, ce qui réduit le nombre de requêtes vers ZooKeeper ; ajout d’une mise en cache de l’état de ZooKeeper lorsque nous savons que cet état ne changera pas ; amélioration du processus de polling depuis S3 pour le rendre moins agressif ; modification de la gestion du TTL et du nombre maximal définis pour les fichiers suivis, désormais assurée par un processus en arrière-plan. Ajout des tables system.s3queue et system.s3queue_log. Cela résout #54998. #54422 (Kseniia Sumarokova).
  • Les chemins arbitraires sur l’endpoint HTTP ne sont plus interprétés comme une requête vers l’endpoint /query. #55521 (Konstantin Bogdanov).

Nouvelle fonctionnalité

  • Ajout de la fonction arrayFold(accumulator, x1, ..., xn -> expression, initial, array1, ..., arrayn), qui applique une fonction lambda à plusieurs tableaux de même cardinalité et accumule le résultat dans un accumulateur. #49794 (Lirikl).
  • Prise en charge du format Npy. SELECT * FROM file('example_array.npy', Npy). #55982 (Yarik Briukhovetskyi).
  • Si une table a une courbe de remplissage de l’espace dans sa clé, par exemple ORDER BY mortonEncode(x, y), les conditions sur ses arguments, par exemple x >= 10 AND x <= 20 AND y >= 20 AND y <= 30, peuvent être utilisées pour l’indexation. Un paramètre analyze_index_with_space_filling_curves a été ajouté pour activer ou désactiver cette analyse. Cela clôt #41195. Suite de #4538. Suite de #6286. Suite de #28130. Suite de #41753. #55642 (Alexey Milovidov).
  • Ajout d’un nouveau paramètre, force_optimize_projection_name, qui prend en argument un nom de projection. Si sa valeur est définie sur une chaîne non vide, ClickHouse vérifie que cette projection est utilisée au moins une fois dans la requête. Clôt #55331. #56134 (Yarik Briukhovetskyi).
  • Prise en charge des insertions asynchrones avec des données externes via le protocole natif. Auparavant, cela ne fonctionnait que si les données étaient incluses directement dans la requête. #54730 (Anton Popov).
  • Ajout de la fonction d’agrégation lttb, qui utilise l’algorithme Largest-Triangle-Three-Buckets pour le sous-échantillonnage des données à des fins de visualisation. #53145 (Sinan).
  • La requête CHECK TABLE offre de meilleures performances et une meilleure utilisabilité (envoi de mises à jour de progression, possibilité d’annulation). Prise en charge de la vérification d’une part spécifique avec CHECK TABLE ... PART 'part_name'. #53404 (vdimir).
  • Ajout de la fonction jsonMergePatch. Lorsqu’elle est utilisée avec des données JSON sous forme de chaînes, elle permet de fusionner ces chaînes (d’objets JSON) pour former une chaîne unique contenant un seul objet JSON. #54364 (Memo).
  • Deuxième partie de la prise en charge du dialecte Kusto Query Language. L’implémentation de la phase 1 a été intégrée. #42510 (larryluogit).
  • Ajout d’une nouvelle fonction SQL, arrayRandomSample(arr, k), qui renvoie un échantillon de k éléments du tableau d’entrée. Une fonctionnalité similaire ne pouvait auparavant être obtenue qu’avec une syntaxe moins pratique, par exemple “SELECT arrayReduce(‘groupArraySample(3)’, range(10))”. #54391 (itayisraelov).
  • Introduction des combinators d’agrégat -ArgMin/-ArgMax, qui permettent d’agréger uniquement selon les valeurs min/max. Un cas d’usage est présenté dans #54818. Cette PR réorganise également les combinators dans un dossier dédié. #54947 (Amos Bird).
  • Permet de supprimer le cache du format Protobuf avec SYSTEM DROP SCHEMA FORMAT CACHE [FOR Protobuf]. #55064 (Aleksandr Musorin).
  • Ajout d’un authentificateur HTTP Basic externe. #55199 (Aleksei Filatov).
  • Ajout de la fonction byteSwap, qui inverse les octets des entiers non signés. Cela est particulièrement utile pour inverser les valeurs de types représentés en interne sous forme d’entiers non signés, comme IPv4. #55211 (Priyansh Agrawal).
  • Ajout de la fonction formatQuery, qui renvoie une version formatée (éventuellement sur plusieurs lignes) d’une chaîne de requête SQL. Ajout également de la fonction formatQuerySingleLine, qui fait la même chose, mais sans retours à la ligne dans la chaîne renvoyée. #55239 (Salvatore Mesoraca).
  • Ajout du format d’entrée DWARF, qui lit les symboles de débogage depuis un exécutable, une bibliothèque ou un fichier objet ELF. #55450 (Michael Kolupaev).
  • Permet d’enregistrer les enregistrements non analysés et les erreurs dans les engines RabbitMQ, NATS et FileLog. Ajout des colonnes virtuelles _error et _raw_message (pour NATS et RabbitMQ), ainsi que _raw_record (pour FileLog), qui sont remplies lorsque ClickHouse ne parvient pas à analyser un nouvel enregistrement. Le comportement est contrôlé par les paramètres de stockage nats_handle_error_mode pour NATS, rabbitmq_handle_error_mode pour RabbitMQ et handle_error_mode pour FileLog, de manière similaire à kafka_handle_error_mode. Si cette valeur est définie sur default, une exception est levée lorsque ClickHouse ne parvient pas à analyser un enregistrement ; si elle est définie sur stream, l’erreur et l’enregistrement brut sont enregistrés dans les colonnes virtuelles. Closes #36035. #55477 (Kruglov Pavel).
  • Amélioration du client Keeper : ajout de la commande get_all_children_number command, qui renvoie le nombre total de nœuds enfants sous un path donné. #55485 (guoxiaolong).
  • Amélioration du client Keeper : ajout de la commande get_direct_children_number, qui renvoie le nombre de nœuds enfants directs sous un path. #55898 (xuzifu666).
  • Ajout de l’instruction SHOW SETTING setting_name, qui est une version simplifiée de l’instruction existante SHOW SETTINGS. #55979 (Maksim Kita).
  • Ajout des champs substreams et filenames à la table system.parts_columns. #55108 (Anton Popov).
  • Ajout de la prise en charge de la requête SHOW MERGES. #55815 (megao).
  • Introduction du paramètre create_table_empty_primary_key_by_default pour utiliser ORDER BY () par défaut. #55899 (Srikanth Chekuri).

Amélioration des performances

  • Ajout de l’option query_plan_preserve_num_streams_after_window_functions pour préserver le nombre de flux après l’évaluation des fonctions de fenêtre, afin de permettre un traitement parallèle des flux. #50771 (frinkr).
  • Libération d’un plus grand nombre de flux lorsque le volume de données est faible. #53867 (Jiebin Sun).
  • Optimisation des RoaringBitmaps avant la sérialisation. #55044 (UnamedRus).
  • Les posting lists des index inversés sont désormais optimisées pour utiliser la plus petite représentation possible des bitmaps internes. Selon la répétitivité des données, cela peut réduire significativement l’espace occupé par les index inversés. #55069 (Harry Lee).
  • Correction de la contention sur le verrou Context, ce qui améliore significativement les performances pour de nombreuses requêtes concurrentes de courte durée. #55121 (Maksim Kita).
  • Amélioration de 30 % des performances de création des index inversés. Cela a été obtenu en remplaçant std::unordered_map par absl::flat_hash_map. #55210 (Harry Lee).
  • Prise en charge du pushdown des filtres ORC (au niveau des groupes de lignes). #55330 (李扬).
  • Amélioration des performances de l’agrégation externe en présence d’un grand nombre de fichiers temporaires. #55489 (Maksim Kita).
  • Définition par défaut d’une taille raisonnable pour le cache des marks des index secondaires afin d’éviter de recharger sans cesse les marks. #55654 (Alexey Milovidov).
  • Évite la reconstruction inutile des granules d’index lors de la lecture des skip indexes. Cela corrige #55653. #55683 (Amos Bird).
  • Mise en cache de la fonction CAST dans le set pendant l’exécution afin d’améliorer les performances de la fonction IN lorsque le type des éléments du set ne correspond pas exactement au type de colonne. #55712 (Duc Canh Le).
  • Amélioration des performances de ColumnVector::insertMany et ColumnVector::insertManyFrom. #55714 (frinkr).
  • Optimisation des opérations d’indexation sur Map en prédisant la position de la clé de la ligne suivante et en réduisant le nombre de comparaisons. #55929 (lgbo).
  • Prise en charge de l’élagage des champs de struct dans Parquet (dans les versions précédentes, cela ne fonctionnait pas dans certains cas). #56117 (lgbo).
  • Ajout de la possibilité d’ajuster le nombre de répliques parallèles utilisées lors de l’exécution d’une requête en fonction de l’estimation du nombre de lignes à lire. #51692 (Raúl Marín).
  • Optimisation de la consommation mémoire de l’agrégation externe lorsque de nombreux fichiers temporaires sont générés. #54798 (Nikita Taranov).
  • Les requêtes distribuées exécutées en mode async_socket_for_remote (par défaut) respectent désormais la limite max_threads. Auparavant, certaines requêtes pouvaient créer un nombre excessif de threads (jusqu’à max_distributed_connections), ce qui entraînait des problèmes de performances du serveur. #53504 (filimonov).
  • Mise en cache des entrées pouvant être sautées lors de l’exécution de DDL depuis la file des DDL distribués de ZooKeeper. #54828 (Duc Canh Le).
  • Les index inversés expérimentaux ne stockent pas les tokens ayant trop de correspondances (c.-à-d. les identifiants de lignes dans la posting list). Cela permet d’économiser de l’espace et d’éviter des lookups d’index inefficaces lorsque des parcours séquentiels seraient tout aussi rapides, voire plus rapides. Les heuristiques précédentes (le paramètre density transmis à la définition de l’index), qui déterminaient à partir de quand les tokens n’étaient pas stockés, étaient trop déroutantes pour les utilisateurs. Une heuristique beaucoup plus simple, basée sur le paramètre max_rows_per_postings_list (par défaut : 64k), est introduite et contrôle directement le nombre maximal autorisé d’identifiants de lignes dans une postings list. #55616 (Harry Lee).
  • Amélioration des performances d’écriture des tables EmbeddedRocksDB. #55732 (Duc Canh Le).
  • Amélioration de la résilience globale de ClickHouse en cas de grand nombre de parts dans une partition (plus de 1000). Cela peut réduire le nombre d’erreurs TOO_MANY_PARTS. #55526 (Nikita Mikhaylov).
  • Réduction de la consommation mémoire lors du chargement des dictionnaires hiérarchiques. #55838 (Nikita Taranov).
  • Tous les dictionnaires prennent en charge le paramètre dictionary_use_async_executor. #55839 (vdimir).
  • Évite une utilisation excessive de la mémoire lors de la désérialisation de AggregateFunctionTopKGenericData. #55947 (Raúl Marín).
  • Sur un Keeper comportant un grand nombre de watches, les threads AsyncMetrics peuvent consommer 100 % du CPU pendant un temps significatif dans DB::KeeperStorage::getSessionsWithWatchesCount. Le correctif consiste à éviter de parcourir les ensembles volumineux watches et list_watches. #56054 (Alexander Gololobov).
  • Ajout du paramètre optimize_trivial_approximate_count_query pour utiliser une approximation de count pour le moteur de stockage EmbeddedRocksDB. Activation du trivial count pour StorageJoin. #55806 (Duc Canh Le).

Amélioration

  • Les fonctions toDayOfWeek (alias MySQL : DAYOFWEEK), toYearWeek (YEARWEEK) et toWeek (WEEK) prennent désormais en charge les arguments String. Leur comportement est ainsi cohérent avec celui de MySQL. #55589 (Robert Schulze).
  • Ajout du paramètre date_time_overflow_behavior avec les valeurs possibles ignore, throw, saturate, qui contrôle le comportement en cas de dépassement lors de la conversion de Date, Date32, DateTime64, Integer ou Float vers Date, Date32, DateTime ou DateTime64. #55696 (Andrey Zvonov).
  • Ajout de la prise en charge des paramètres de requête pour ALTER TABLE ... ACTION PARTITION [ID] {parameter_name:ParameterType}. Fusionne #49516. Clôt #49449. #55604 (alesapin).
  • Affichage plus lisible des identifiants de processeur dans EXPLAIN. #48852 (Vlad Seliverstov).
  • La création d’un dictionnaire direct avec un champ lifetime sera rejetée lors de la création (car lifetime n’a pas de sens pour les dictionnaires directs). Corrige : #27861. #49043 (Rory Crispin).
  • Autorisation des paramètres dans les requêtes avec partitions comme ALTER TABLE t DROP PARTITION. Clôt #49449. #49516 (Nikolay Degterinsky).
  • Ajout d’une nouvelle colonne xid à system.zookeeper_connection. #50702 (helifu).
  • Affichage des paramètres du serveur corrects dans system.server_settings après rechargement de la configuration. #53774 (helifu).
  • Ajout de la prise en charge du caractère moins mathématique dans les requêtes, comme pour -. #54100 (Alexey Milovidov).
  • Ajout de groupes de réplicas au moteur de base de données expérimental Replicated. Clôt #53620. #54421 (Nikolay Degterinsky).
  • Il vaut mieux réessayer les erreurs S3 réessayables que faire échouer complètement la requête. Une valeur plus élevée est désormais définie par défaut pour s3_retry_attempts. #54770 (Sema Checherinda).
  • Ajout du mode d’équilibrage de charge hostname_levenshtein_distance. #54826 (JackyWoo).
  • Amélioration du masquage des secrets dans les logs. #55089 (Vitaly Baranov).
  • Pour l’instant, l’analyse des projections sera effectuée uniquement à partir du query plan. Le paramètre query_plan_optimize_projection est devenu obsolète (il était activé par défaut depuis longtemps). #55112 (Nikita Mikhaylov).
  • Lorsque la fonction untuple est désormais appelée sur un tuple avec des éléments nommés et qu’elle possède elle-même un alias (par ex. select untuple(tuple(1)::Tuple(element_alias Int)) AS untuple_alias), le nom de la colonne résultante est maintenant généré à partir de l’alias de untuple et de l’alias de l’élément du tuple (dans l’exemple : “untuple_alias.element_alias”). #55123 (garcher22).
  • Ajout du paramètre describe_include_virtual_columns, qui permet d’inclure les colonnes virtuelles de la table dans le résultat de la requête DESCRIBE. Ajout également du paramètre describe_compact_output. S’il est défini sur true, la requête DESCRIBE renvoie uniquement les noms et les types des colonnes, sans informations supplémentaires. #55129 (Anton Popov).
  • Il arrive que OPTIMIZE avec optimize_throw_if_noop=1 échoue avec l’erreur unknown reason, alors que la véritable cause est la présence de projections différentes dans différentes parts. Ce comportement a été corrigé. #55130 (Nikita Mikhaylov).
  • Permet d’avoir plusieurs tables MaterializedPostgreSQL suivant la même table Postgres. Par défaut, ce comportement n’est pas activé (pour des raisons de compatibilité, car il s’agit d’un changement non rétrocompatible), mais il peut l’être via le paramètre materialized_postgresql_use_unique_replication_consumer_identifier. Closes #54918. #55145 (Kseniia Sumarokova).
  • Permet d’analyser des DateTime64 et DateTime négatifs avec une partie fractionnaire à partir de chaînes courtes. #55146 (Andrey Zvonov).
  • Pour améliorer la compatibilité avec MySQL, 1. information_schema.tables inclut désormais le nouveau champ table_rows, et 2. information_schema.columns inclut désormais le nouveau champ extra. #55215 (Robert Schulze).
  • clickhouse-client n’affichera pas “0 rows in set” si la valeur est nulle et qu’une exception a été levée. #55240 (Salvatore Mesoraca).
  • Prise en charge de RENAME sans le mot-clé TABLE, comme dans RENAME db.t1 to db.t2. #55373 (凌涛).
  • Ajout de internal_replication à system.clusters. #55377 (Konstantin Morozov).
  • Sélection du resolver de proxy distant en fonction du protocole de la requête, ajout de la documentation sur la fonctionnalité de proxy et suppression de DB::ProxyConfiguration::Protocol::ANY. #55430 (Arthur Passos).
  • Évite de réessayer les opérations Keeper sur INSERT après l’arrêt de la table. #55519 (Azat Khuzhin).
  • SHOW COLUMNS signale désormais correctement le type FixedString comme BLOB si le paramètre use_mysql_types_in_show_columns est activé. Deux nouveaux paramètres ont également été ajoutés, mysql_map_string_to_text_in_show_columns et mysql_map_fixed_string_to_text_in_show_columns, pour renvoyer les types String et FixedString en TEXT ou BLOB. #55617 (Serge Klochkov).
  • Au démarrage des tables ReplicatedMergeTree, le serveur ClickHouse vérifie l’ensemble des parts afin de détecter les parts inattendues (présentes localement, mais pas dans ZooKeeper). Toutes les parts inattendues sont déplacées vers le répertoire detached et, à la place, le serveur tente de restaurer certaines parts ancêtres (couvertes). Désormais, le serveur essaie de restaurer les ancêtres les plus proches au lieu de parts couvertes choisies aléatoirement. #55645 (alesapin).
  • Le tableau de bord avancé prend désormais en charge les graphiques déplaçables sur les appareils tactiles. Cela clôt #54206. #55649 (Alexey Milovidov).
  • Utilise le format de requête par défaut s’il est défini lors de l’affichage d’une exception avec http_write_exception_in_output_format. #55739 (Raúl Marín).
  • Fournit un meilleur message pour les pièges courants liés à MATERIALIZED VIEW. #55826 (Raúl Marín).
  • Si vous avez supprimé la base de données actuelle, vous pourrez toujours exécuter certaines requêtes dans clickhouse-local et basculer vers une autre base de données. Cela rend le comportement cohérent avec clickhouse-client. Cela clôt #55834. #55853 (Alexey Milovidov).
  • Les fonctions (add|subtract)(Year|Quarter|Month|Week|Day|Hour|Minute|Second|Millisecond|Microsecond|Nanosecond) prennent désormais en charge les arguments de date encodés sous forme de chaîne, par exemple SELECT addDays('2023-10-22', 1). Cela améliore la compatibilité avec MySQL et est nécessaire pour Tableau Online. #55869 (Robert Schulze).
  • Le paramètre apply_deleted_mask, lorsqu’il est désactivé, permet de lire les lignes marquées comme supprimées par des requêtes lightweight DELETE. Cela est utile pour le débogage. #55952 (Alexander Gololobov).
  • Permet d’ignorer les valeurs null lors de la sérialisation de Tuple en objets JSON, ce qui permet de conserver la compatibilité avec la fonction to_json de Spark, également utile pour gluten. #55956 (李扬).
  • Les fonctions (add|sub)Date prennent désormais en charge les arguments de date encodés sous forme de chaîne, par exemple SELECT addDate('2023-10-22 11:12:13', INTERVAL 5 MINUTE). La même prise en charge des arguments de date encodés sous forme de chaîne a été ajoutée aux opérateurs plus et moins, par exemple SELECT '2023-10-23' + INTERVAL 1 DAY. Cela améliore la compatibilité avec MySQL et est nécessaire pour Tableau Online. #55960 (Robert Schulze).
  • Permet d’utiliser des chaînes non entre guillemets avec CR (\r) dans le format CSV. Clôt #39930. #56046 (Kruglov Pavel).
  • Permet d’exécuter clickhouse-keeper avec une configuration intégrée. #56086 (Maksim Kita).
  • Définit une valeur maximale pour le paramètre de configuration queued.min.messages afin d’éviter un problème au démarrage de la récupération des données avec Kafka. #56121 (Stas Morozov).
  • Correction d’une faute de frappe dans la fonction SQL minSampleSizeContinous (renommée minSampleSizeContinuous). L’ancien nom est conservé pour assurer la rétrocompatibilité. Clôt : #56139. #56143 (Dorota Szeremeta).
  • Affichage du chemin des parts corrompues sur disque avant l’arrêt du serveur. Avant cette modification, si une part était corrompue sur disque et que le serveur ne pouvait pas démarrer, il était presque impossible de déterminer quelle part était en cause. C’est corrigé. #56181 (Duc Canh Le).

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

  • Si la base de données dans Docker est déjà initialisée, il n’est pas nécessaire de la réinitialiser lors des lancements suivants. Cela peut potentiellement corriger le problème de redémarrages infinis du conteneur lorsque la base de données ne parvient pas à se charger en 1 000 tentatives (cas pertinent pour les très grandes bases de données et les configurations multinœuds). #50724 (Alexander Nikolaev).
  • La ressource contenant le code source, y compris les sous-modules, est compilée dans une tâche de build spéciale pour Darwin. Elle peut être utilisée pour compiler ClickHouse sans avoir à extraire les sous-modules. #51435 (Ilya Yatsishin).
  • Une erreur se produisait lors de la compilation de ClickHouse avec le jeu d’instructions AVX activé globalement (ce qui n’est pas recommandé). La raison est que snappy n’active pas SNAPPY_HAVE_X86_CRC32. #55049 (monchickey).
  • Résolution d’un problème lors du lancement autonome de clickhouse-keeper depuis le paquet clickhouse-server. #55226 (Mikhail f. Shiryaev).
  • Dans les tests, la version de RabbitMQ a été mise à jour vers 3.12.6. La collecte des logs pour les tests RabbitMQ a également été améliorée. #55424 (Ilya Yatsishin).
  • La différence entre les messages d’erreur d’openssl et de boringssl a été modifiée pour corriger le test fonctionnel. #55975 (MeenaRenganathan22).
  • Utilisation du dépôt upstream pour apache datasketches. #55787 (Nikita Taranov).

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

  • Ne plus créer de liens physiques pour les fichiers d’index inversé dans une mutation #47663 (cangyin).
  • Correction d’un bug de la fonction match (regex) : avec un motif contenant une alternance, elle produisait une condition de clé incorrecte. Clôture #53222. #54696 (Yakov Olkhovskiy).
  • Correction de l’erreur ‘Cannot find column’ dans l’optimisation de lecture dans l’ordre avec ARRAY JOIN #51746 (Nikolai Kochetov).
  • Prise en charge des sous-colonnes expérimentales manquantes de Object(Nullable(json)) dans les requêtes. #54052 (zps).
  • Réintégration du correctif pour accurateCastOrNull #54629 (Salvatore Mesoraca).
  • Correction de la détection de DEFAULT pour les colonnes d’une table Distributed créée sans AS #55060 (Vitaly Baranov).
  • Nettoyage approprié en cas d’exception dans le constructeur de ShellCommandSource #55103 (Alexander Gololobov).
  • Correction d’un interblocage lors de la mise à jour d’un rôle attribué via LDAP #55119 (Julian Maicher).
  • Désactivation de la mise à jour des statistiques d’erreur pour les exceptions internes #55128 (Robert Schulze).
  • Correction d’un interblocage dans les sauvegardes #55132 (alesapin).
  • Correction de la récupération des fichiers du stockage Iceberg #55144 (Kseniia Sumarokova).
  • Correction de l’élagage des partitions pour les colonnes supplémentaires dans le Set. #55172 (Amos Bird).
  • Correction du recalcul des index de saut dans les requêtes ALTER UPDATE lorsque la table utilise la granularité adaptative #55202 (Duc Canh Le).
  • Correctif pour le téléchargement en arrière-plan dans le cache fs #55252 (Kseniia Sumarokova).
  • Évite d’éventuelles fuites de mémoire dans les compresseurs en cas d’absence de finalisation du buffer #55262 (Azat Khuzhin).
  • Correction de l’exécution des fonctions sur des colonnes creuses #55275 (Azat Khuzhin).
  • Correction de la fusion incorrecte de Nested pour SELECT FINAL FROM SummingMergeTree #55276 (Azat Khuzhin).
  • Correction d’un bug empêchant la suppression d’une partition détachée dans un MergeTree répliqué sur S3 sans zero copy #55309 (alesapin).
  • Correction d’un crash dans MergeSortingPartialResultTransform (en raison de zéro chunk après remerge) #55335 (Azat Khuzhin).
  • Correction d’une race condition dans CreatingSetsTransform (en cas d’erreurs) due à la levée d’une exception partagée #55338 (Azat Khuzhin).
  • Corrige l’optimisation « trash » (dans une certaine mesure) #55353 (Alexey Milovidov).
  • Corrige une fuite dans StorageHDFS #55370 (Azat Khuzhin).
  • Corrige l’analyse des tableaux dans l’opérateur CAST #55417 (Anton Popov).
  • Corrige le filtrage sur les colonnes virtuelles avec un filtre OR dans une requête #55418 (Azat Khuzhin).
  • Corrige des problèmes de connexion à MongoDB #55419 (Nikolay Degterinsky).
  • Corrige la représentation des booléens dans l’interface MySQL #55427 (Serge Klochkov).
  • Corrige le formatage de DateTime dans le protocole texte MySQL ainsi que le signalement des types LowCardinality(Nullable(T)) #55479 (Serge Klochkov).
  • Fait en sorte que use_mysql_types_in_show_columns n’affecte que SHOW COLUMNS #55481 (Robert Schulze).
  • Corrige l’analyse incorrecte de DW_FORM_ref_addr par le symboliseur de pile, qui provoquait parfois un plantage #55483 (Michael Kolupaev).
  • Détruit la fibre en cas d’exception dans cancelBefore dans AsyncTaskExecutor #55516 (Kruglov Pavel).
  • Corrige le non-fonctionnement des Query Parameters avec des handlers HTTP personnalisés #55521 (Konstantin Bogdanov).
  • Corrige la vérification des données non prises en charge pour le format Values #55527 (Azat Khuzhin).
  • Corrige ‘Invalid cursor state’ dans ODBC lors de l’interaction avec MS SQL Server #55558 (vdimir).
  • Corrige le temps d’exécution maximal et le mode de dépassement ‘break’ #55577 (Alexander Gololobov).
  • Corrige un plantage dans QueryNormalizer avec des alias cycliques #55602 (vdimir).
  • Désactive une optimisation erronée et ajoute un test #55609 (Alexey Milovidov).
  • Fusion #52352 #55621 (Alexey Milovidov).
  • Ajoute un test pour éviter un tri Decimal incorrect #55662 (Amos Bird).
  • Corrige la barre de progression pour les fonctions Cluster s3 et azure avec une URL sans globs #55666 (Kruglov Pavel).
  • Corrige le filtrage sur les colonnes virtuelles avec un filtre OR dans une requête (nouvelle soumission) #55678 (Azat Khuzhin).
  • Correctifs et améliorations pour le stockage Iceberg #55695 (Kruglov Pavel).
  • Corrige une race condition dans CreatingSetsTransform (v2) #55786 (Azat Khuzhin).
  • Lève une exception lors de l’analyse d’une chaîne invalide comme float si precise_float_parsing est à true #55861 (李扬).
  • Désactive le pushdown des prédicats si la CTE contient des fonctions avec état #55871 (Raúl Marín).
  • Corrige normalize ASTSelectWithUnionQuery, qui supprimait FORMAT de la requête #55887 (flynn).
  • Tente de corriger un segfault possible dans le format d’entrée ORC natif #55891 (Kruglov Pavel).
  • Corrige les fonctions de fenêtre dans le cas de colonnes creuses. #55895 (János Benjamin Antal).
  • correction : StorageNull prend en charge les sous-colonnes #55912 (FFish).
  • N’inscrit pas dans le journal des erreurs les erreurs réessayables pour Replicated mutate/merge #55944 (Azat Khuzhin).
  • Corrige SHOW DATABASES LIMIT <N> #55962 (Raúl Marín).
  • Corrige le schéma Protobuf généré automatiquement pour les champs contenant un trait de soulignement #55974 (Kruglov Pavel).
  • Corrige dateTime64ToSnowflake64() avec une échelle autre que celle par défaut #55983 (Robert Schulze).
  • Corrige l’entrée/sortie de la colonne de dictionnaire Arrow #55989 (Kruglov Pavel).
  • Corrige la récupération du schéma depuis le registre de schémas dans AvroConfluent #55991 (Kruglov Pavel).
  • Corrige ‘Block structure mismatch’ avec des ALTER et INSERT concurrents dans une table Buffer #55995 (Michael Kolupaev).
  • Corrige le calcul incorrect de l’espace libre pour la stratégie JBOD least_used #56030 (Azat Khuzhin).
  • Corrige un problème de scalaire manquant lors de l’évaluation de sous-requêtes à l’intérieur des fonctions de table #56057 (Amos Bird).
  • Corrige un résultat de requête erroné lorsque http_write_exception_in_output_format=1 #56135 (Kruglov Pavel).
  • Corrige le cache de schéma pour la bascule JSON->JSONEachRow lorsque les paramètres sont modifiés #56172 (Kruglov Pavel).
  • Ajoute un gestionnaire d’erreurs à odbc-bridge #56185 (Yakov Olkhovskiy).

Version de ClickHouse 23.9, 2023-09-28. Présentation, Vidéo

Changement rétro-incompatible

  • Suppression de l’option de configuration status_info et du statut des Dictionaries du handler Prometheus par défaut. #54090 (Alexey Milovidov).
  • Le cache expérimental de métadonnées des parts est supprimé du code source. #54215 (Alexey Milovidov).
  • Désactivation par défaut du paramètre input_format_json_try_infer_numbers_from_strings, afin de ne plus essayer d’inférer des nombres à partir de chaînes dans les formats JSON par défaut, pour éviter d’éventuelles erreurs d’analyse lorsque les données d’échantillon contiennent des chaînes qui ressemblent à des nombres. #55099 (Kruglov Pavel).

Nouvelle fonctionnalité

  • Amélioration de l’inférence de schéma pour les formats JSON : 1) Il est désormais possible d’inférer des tuples nommés à partir d’objets JSON sans utiliser le type JSON Experimental, grâce au paramètre input_format_json_try_infer_named_tuples_from_objects dans les formats JSON. Auparavant, sans le type JSON Experimental, nous ne pouvions inférer les objets JSON qu’en tant que Strings ou Maps ; il est désormais possible d’inférer un Tuple nommé. Le type Tuple obtenu contiendra toutes les clés des objets lus dans l’échantillon de données lors de l’inférence de schéma. Cela peut être utile pour lire des données JSON structurées sans objets clairsemés. Ce paramètre est activé par défaut. 2) Possibilité d’analyser un JSON array dans une colonne de type String avec le paramètre input_format_json_read_arrays_as_strings. Cela peut aider à lire des tableaux contenant des valeurs de types différents. 3) Possibilité d’utiliser le type String pour les clés JSON dont le type est inconnu (null/[]/{}) dans les données d’échantillon avec le paramètre input_format_json_infer_incomplete_types_as_strings. Désormais, dans les formats JSON, nous pouvons lire n’importe quelle valeur dans une colonne String et éviter l’erreur Cannot determine type for column 'column_name' by first 25000 rows of data, most likely this column contains only Nulls or empty Arrays/Maps lors de l’inférence de schéma en utilisant le type String pour les types inconnus, ce qui permet de lire les données correctement. #54427 (Kruglov Pavel).
  • Ajout de la prise en charge de l’IO scheduling pour les disques distants. La Storage configuration des disk types s3, s3_plain, hdfs et azure_blob_storage peut désormais contenir les éléments read_resource et write_resource, qui stockent des noms de resource. Les politiques d’ordonnancement de ces resources peuvent être configurées dans une section distincte de la server configuration, resources. Les queries peuvent être marquées à l’aide du paramètre workload et classées via la section workload_classifiers de la server configuration afin d’atteindre différents objectifs d’ordonnancement des resources. Plus de détails dans la documentation. #47009 (Sergei Trifonov). Ajout du type de nœud d’IO scheduling bandwidth_limit. Il permet de spécifier les contraintes max_speed et max_burst sur le trafic transitant par ce nœud. #54618 (Sergei Trifonov).
  • Ajout d’un nouveau type d’authentication basé sur des clés SSH. Il fonctionne uniquement avec le native TCP protocol. #41109 (George Gamezardashvili).
  • Ajout d’une nouvelle column _block_number pour les MergeTree tables. #44532. #47532 (SmitaRKulkarni).
  • Ajout de la clause IF EMPTY pour les requêtes DROP TABLE. #48915 (Pavel Novitskiy).
  • Les fonctions SQL toString(datetime, timezone) et formatDateTime(datetime, format, timezone) prennent désormais en charge des arguments de fuseau horaire non constants. #53680 (Yarik Briukhovetskyi).
  • Ajout de la prise en charge de ALTER TABLE MODIFY COMMENT. Remarque : quelque chose de similaire avait été ajouté il y a longtemps par un contributeur externe, mais cette fonctionnalité ne fonctionnait pas du tout et ne faisait qu’induire les utilisateurs en erreur. Cela clôt #36377. #51304 (Alexey Milovidov). Remarque : cette commande ne se propage pas entre les répliques, de sorte que les répliques d’une table peuvent avoir des commentaires différents.
  • Ajout de GCD, c.-à-d. le « plus grand commun diviseur », comme nouveau codec de compression de données. Ce codec calcule le GCD de toutes les valeurs d’une colonne, puis divise chaque valeur par ce GCD. Le codec GCD est un codec de préparation des données (similaire à Delta et DoubleDelta) et ne peut pas être utilisé seul. Il fonctionne avec les types de données entiers, décimaux et date/heure. Un cas d’utilisation pertinent du codec GCD est celui de valeurs de colonne qui varient (augmentent/diminuent) par multiples du GCD, par ex. 24 - 28 - 16 - 24 - 8 - 24 (en supposant que GCD = 4). #53149 (Alexander Nam).
  • Deux nouveaux alias de type ont été ajoutés : DECIMAL(P) (raccourci de DECIMAL(P, 0)) et DECIMAL (raccourci de DECIMAL(10, 0)). Cela rend ClickHouse plus compatible avec le dialecte SQL de MySQL. #53328 (Val Doroshchuk).
  • Ajout d’une nouvelle table de journal système backup_log pour suivre toutes les opérations BACKUP et RESTORE. #53638 (Victor Krasnov).
  • Ajout d’un paramètre de format output_format_markdown_escape_special_characters (par défaut : false). Ce paramètre indique si les caractères spéciaux comme !, #, $, etc. doivent être échappés (c.-à-d. préfixés par une barre oblique inverse) dans le format de sortie Markdown. #53860 (irenjj).
  • Ajout de la fonction decodeHTMLComponent. #54097 (Bharat Nallan).
  • Ajout de peak_threads_usage à la table query_log. #54335 (Alexey Gerasimchuck).
  • Ajout de la prise en charge de SHOW FUNCTIONS dans clickhouse-client. #54337 (Julia Kartseva).
  • Ajout de la fonction toDaysSinceYearZero avec l’alias TO_DAYS (pour la compatibilité avec MySQL), qui renvoie le nombre de jours écoulés depuis le 0001-01-01 (dans le calendrier grégorien proleptique). #54479 (Robert Schulze). La fonction toDaysSinceYearZero prend désormais aussi en charge les arguments de type DateTime et DateTime64. #54856 (Serge Klochkov).
  • Ajout des fonctions YYYYMMDDtoDate, YYYYMMDDtoDate32, YYYYMMDDhhmmssToDateTime et YYYYMMDDhhmmssToDateTime64. Elles convertissent une date ou une date avec heure encodée sous forme d’entier (par ex. 20230911) en date native ou en date avec heure native. Elles offrent ainsi la fonctionnalité inverse des fonctions existantes YYYYMMDDToDate, YYYYMMDDToDateTime, YYYYMMDDhhmmddToDateTime, YYYYMMDDhhmmddToDateTime64. #54509 (Quanfa Fu) (Robert Schulze).
  • Ajout de plusieurs fonctions de distance entre chaînes, notamment byteHammingDistance et editDistance. #54935 (flynn).
  • Possibilité de spécifier, pour les identifiants d’authentification des utilisateurs, une date d’expiration et, éventuellement, une heure, avec la clause VALID UNTIL datetime. #51261 (Nikolay Degterinsky).
  • Autorise les URL au format S3 pour les fonctions de table s3, gcs, oss. L’URL est automatiquement convertie en URL HTTP. Exemple : 's3://clickhouse-public-datasets/hits.csv' est convertie en 'https://clickhouse-public-datasets.s3.amazonaws.com/hits.csv'. #54931 (Yarik Briukhovetskyi).
  • Ajoute le nouveau paramètre print_pretty_type_names pour afficher de manière lisible les noms de types profondément imbriqués, comme Tuple/Maps/Arrays. #55095 (Kruglov Pavel).

Amélioration des performances

  • Accélère la lecture depuis S3 en activant les préchargements par défaut. #53709 (Alexey Milovidov).
  • Ne lit plus implicitement les colonnes de clé primaire et de version dans les parts isolées lorsque cela n’est pas nécessaire pour les requêtes avec FINAL. #53919 (Duc Canh Le).
  • Optimise le group by sur des clés constantes. Optimisera les requêtes avec group by _file/_path après https://github.com/ClickHouse/ClickHouse/pull/53529. #53549 (Kruglov Pavel).
  • Améliore les performances du tri pour les colonnes Decimal. Améliore les performances de l’insertion dans MergeTree si ORDER BY contient une colonne Decimal. Améliore les performances du tri lorsque les données sont déjà triées ou presque. #35961 (Maksim Kita).
  • Améliore les performances pour l’analyse de requêtes de grande taille. Corrige #51224. #51469 (frinkr).
  • Optimisation permettant de réécrire COUNT(DISTINCT ...) et diverses variantes de uniq en count lorsqu’ils sont sélectionnés à partir d’une sous-requête avec GROUP BY. #52082 #52645 (JackyWoo).
  • Supprime les appels manuels à mmap/mremap/munmap et délègue tout ce travail à jemalloc, ce qui améliore légèrement les performances. #52792 (Nikita Taranov).
  • Corrige une consommation CPU élevée lors de l’utilisation de NATS. #54399 (Vasilev Pyotr).
  • Puisque nous utilisons des instructions distinctes pour exécuter toString avec un argument datetime, il est possible d’améliorer légèrement les performances pour les arguments non datetime et de simplifier certaines parties du code. Suite de #53680. #54443 (Yarik Briukhovetskyi).
  • Au lieu de sérialiser les éléments JSON dans un std::stringstream, cette PR tente de placer directement le résultat de la sérialisation dans ColumnString. #54613 (lgbo).
  • Active l’optimisation ORDER BY pour lire les données dans l’ordre correspondant depuis une table MergeTree lorsque celle-ci est derrière une vue. #54628 (Vitaly Baranov).
  • Améliore les fonctions SQL JSON en réutilisant GeneratorJSONPath et en supprimant plusieurs pointeurs partagés. #54735 (lgbo).
  • Keeper tente de regrouper les requêtes de flush pour de meilleures performances. #53049 (Antonio Andelic).
  • Désormais, clickhouse-client traite les fichiers en parallèle dans le cas de INFILE 'glob_expression'. Clôt #54218. #54533 (Max K.).
  • Permet d’utiliser la clé primaire pour la fonction IN lorsque les types des colonnes de la clé primaire diffèrent de ceux des colonnes situées à droite de la fonction IN. Exemple : SELECT id FROM test_table WHERE id IN (SELECT '5'). Corrige #48936. #54544 (Maksim Kita).
  • Hash JOIN tente de réduire les tampons internes lorsqu’ils consomment la moitié de la mémoire maximale disponible (définie par max_bytes_in_join). #54584 (vdimir).
  • Respecte max_block_size pour ARRAY JOIN afin d’éviter d’éventuelles erreurs OOM. Corrige #54290. #54664 (李扬).
  • Réutilise les connexions HTTP dans la fonction de table s3. #54812 (Michael Kolupaev).
  • Remplace la recherche linéaire dans MergeTreeRangeReader::Stream::ceilRowsToCompleteGranules par une recherche binaire. #54869 (usurai).

Fonctionnalité expérimentale

  • La création des index Annoy peut désormais être parallélisée à l’aide du paramètre max_threads_for_annoy_index_creation. #54047 (Robert Schulze).
  • Les répliques parallèles sur Distributed ne lisent pas depuis toutes les répliques #54199 (Igor Nikonov).

Amélioration

  • Permet de remplacer les noms de fichiers de colonnes trop longs dans les data parts MergeTree par des hachages de noms. Cela permet d’éviter l’erreur File name too long dans certains cas. #50612 (Anton Popov).
  • Interprète les données au format JSON comme JSONEachRow en cas d’échec de l’analyse des métadonnées. Cela permet de lire les fichiers avec l’extension .json même si leur format réel est JSONEachRow. Clôt #45740. #54405 (Kruglov Pavel).
  • Produit un JSON/XML valide en cas d’exception pendant l’exécution d’une requête HTTP. Ajout du paramètre http_write_exception_in_output_format pour activer/désactiver ce comportement (activé par défaut). #52853 (Kruglov Pavel).
  • La vue information_schema.tables inclut désormais un nouveau champ data_length qui indique la taille approximative des données sur disque. Nécessaire pour exécuter les requêtes générées par Amazon QuickSight. #55037 (Robert Schulze).
  • L’interface MySQL a bénéficié d’une implémentation minimale des prepared statements, suffisante pour permettre une connexion de Tableau Online à ClickHouse via le connecteur MySQL. #54115 (Serge Klochkov). Remarque : l’implémentation des prepared statements reste très limitée ; la liaison d’arguments n’est pas encore prise en charge, car elle n’est pas nécessaire dans ce cas d’usage particulier de Tableau Online. Elle sera ajoutée ultérieurement si nécessaire, après des tests approfondis de Tableau Online en cas de problème constaté.
  • Prise en charge des modes de correspondance insensibles à la casse et dot-all dans les dictionnaires regexp_tree. #50906 (Johann Gan).
  • Amélioration de Keeper : ajout d’une commande Keeper createIfNotExists. #48855 (Konstantin Bogdanov).
  • Inférence des types entiers plus précise, correction de #51236. #53003 (Chen768959).
  • Ajout de la résolution des jeux de caractères dans les littéraux de chaîne pour MaterializedMySQL. #53220 (Val Doroshchuk).
  • Correction d’un problème subtil affectant le table engine EmbeddedRocksDB, rarement utilisé, dans un scénario extrêmement rare : il arrive parfois que le table engine EmbeddedRocksDB ne ferme pas correctement les fichiers sur NFS après l’exécution de DROP TABLE. #53502 (Mingliang Pan).
  • RESTORE TABLE ON CLUSTER doit créer des tables répliquées avec un UUID identique sur les hôtes. Sinon, la macro {uuid} dans le chemin ZooKeeper ne peut pas fonctionner correctement après RESTORE. Cette PR implémente ce comportement. #53765 (Vitaly Baranov).
  • Ajout du paramètre de restauration restore_broken_parts_as_detached : si sa valeur est true, le processus RESTORE ne s’arrête pas sur les parts endommagées pendant la restauration ; à la place, toutes les parts endommagées sont copiées dans le dossier detached avec le préfixe `broken-from-backup’. Si sa valeur est false, le processus RESTORE s’arrête sur la première part endommagée (le cas échéant). La valeur par défaut est false. #53877 (Vitaly Baranov).
  • Ajout du champ elapsed_ns aux en-têtes HTTP X-ClickHouse-Progress et X-ClickHouse-Summary. #54179 (joelynch).
  • Implémentation des commandes reconfig (https://github.com/ClickHouse/ClickHouse/pull/49450), sync et exists pour keeper-client. #54201 (pufit).
  • clickhouse-local et clickhouse-client permettent désormais de spécifier le paramètre --query plusieurs fois, par ex. ./clickhouse-client --query "SELECT 1" --query "SELECT 2". Cette syntaxe est légèrement plus intuitive que ./clickhouse-client --multiquery "SELECT 1;S ELECT 2", un peu plus facile à utiliser dans des scripts (par ex. queries.push_back('--query "$q"')) et plus cohérente avec le comportement du paramètre existant --queries-file (par ex. ./clickhouse client --queries-file queries1.sql --queries-file queries2.sql). #54249 (Robert Schulze).
  • Ajout de la précision sub-second à formatReadableTimeDelta. #54250 (Andrey Zvonov).
  • Activation de allow_remove_stale_moving_parts par défaut. #54260 (vdimir).
  • Correction de l’utilisation du comptage mis en cache et amélioration de la barre de progression pour la lecture d’archives. #54271 (Kruglov Pavel).
  • Ajout de la prise en charge des identifiants S3 via SSO. Pour définir un profil à utiliser avec SSO, définissez la variable d’environnement AWS_PROFILE. #54347 (Antonio Andelic).
  • Prise en charge de NULL comme valeur par défaut pour les types imbriqués Array/Tuple/Map dans les formats d’entrée. Clôt #51100. #54351 (Kruglov Pavel).
  • Autorise la lecture de certaines configurations inhabituelles de chunks dans les formats Arrow/Parquet. #54370 (Arthur Passos).
  • Ajout de l’alias STD à la fonction stddevPop pour la compatibilité avec MySQL. Clôt #54274. #54382 (Nikolay Degterinsky).
  • Ajout de la fonction addDate pour la compatibilité avec MySQL et de subDate pour plus de cohérence. Référence : #54275. #54400 (Nikolay Degterinsky).
  • Ajout de modification_time à system.detached_parts. #54506 (Azat Khuzhin).
  • Ajout d’un paramètre splitby_max_substrings_includes_remaining_string qui contrôle si les fonctions “splitBy*()” avec l’argument “max_substring” > 0 incluent le reste de la chaîne (le cas échéant) dans le tableau de résultats (sémantique Python/Spark) ou non. Le comportement par défaut ne change pas. #54518 (Robert Schulze).
  • Amélioration de l’inférence des types entiers pour les champs Int64/UInt64. Suite de #53003. Cela fonctionne désormais aussi pour les types imbriqués comme les Arrays d’Arrays et pour des fonctions comme map/tuple. Issue : #51236. #54553 (Kruglov Pavel).
  • Ajout d’opérations sur les tableaux pour la multiplication, la division et le modulo avec un scalaire. Cela fonctionne dans les deux sens, par exemple 5 * [5, 5] et [5, 5] * 5 : les deux cas sont possibles. #54608 (Yarik Briukhovetskyi).
  • Ajout d’un argument version optionnel à la commande rm dans keeper-client pour rendre les suppressions plus sûres. #54708 (János Benjamin Antal).
  • Empêche systemd d’arrêter le serveur (ce qui peut entraîner une perte de données lors de l’utilisation de tables Buffer). #54744 (Azat Khuzhin).
  • Ajout du champ is_deterministic à la table système system.functions, qui indique si le résultat d’une fonction est stable entre deux invocations (avec exactement les mêmes entrées) ou non. #54766 #55035 (Robert Schulze).
  • Les vues du schéma information_schema ont été rendues plus compatibles avec les vues équivalentes de MySQL (c.-à-d. qu’elles ont été modifiées et étendues), au point que Tableau Online peut désormais se connecter à ClickHouse. Plus précisément : 1. Le type du champ information_schema.tables.table_type est passé de Enum8 à String. 2. Ajout des champs table_comment et table_collation à la vue information_schema.table. 3. Ajout des vues information_schema.key_column_usage et referential_constraints. 4. Remplacement des alias en majuscules dans les vues information_schema par des colonnes explicites en majuscules. #54773 (Serge Klochkov).
  • Le cache de requêtes renvoie désormais une erreur si vous essayez de mettre en cache le résultat d’une requête contenant une fonction non déterministe telle que now, randomString ou dictGet. Par rapport au comportement précédent (où le résultat n’était simplement pas mis en cache), cela réduit la confusion et les effets de surprise. #54801 (Robert Schulze).
  • Interdiction des colonnes spéciales comme materialized/ephemeral/alias pour les stockages file/s3/url/…, correction de l’insert dans des colonnes éphémères depuis des fichiers. Résout #53477. #54803 (Kruglov Pavel).
  • La collecte des métadonnées pour les sauvegardes est désormais plus configurable. #54804 (Vitaly Baranov).
  • Le fichier de log de clickhouse-local (s’il est activé avec l’option —server_logs_file) fera désormais précéder chaque ligne d’un horodatage, de l’identifiant du thread, etc., comme clickhouse-server. #54807 (Michael Kolupaev).
  • Champ is_obsolete dans la table system.merge_tree_settings : il vaut désormais 1 pour les paramètres merge tree obsolètes. Auparavant, seule la description indiquait qu’un paramètre était obsolète. #54837 (Robert Schulze).
  • Il est désormais possible d’utiliser le pluriel avec les littéraux d’intervalle. INTERVAL 2 HOURS doit être équivalent à INTERVAL 2 HOUR. #54860 (Jordi Villar).
  • Autorise systématiquement la création d’une projection avec une clé primaire Nullable. Cela corrige #54814. #54895 (Amos Bird).
  • Nouvelle tentative des opérations S3 de la sauvegarde après un échec dû à une réinitialisation de la connexion. #54900 (Vitaly Baranov).
  • Le message d’exception est désormais exact lorsque la valeur maximale d’un paramètre est inférieure à la valeur minimale. #54925 (János Benjamin Antal).
  • LIKE, match et d’autres fonctions de correspondance par expressions régulières permettent désormais d’effectuer des correspondances avec des motifs contenant des sous-chaînes non UTF-8, avec repli sur une correspondance binaire. Exemple : vous pouvez utiliser string LIKE '\xFE\xFF%' pour détecter le BOM. Clôt #54486. #54942 (Alexey Milovidov).
  • Ajout de l’événement de profil ContextLockWaitMicroseconds. #55029 (Maksim Kita).
  • Keeper ajuste désormais dynamiquement les niveaux de log. #50372 (helifu).
  • Ajout de la fonction timestamp pour la compatibilité avec MySQL. Clôt #54275. #54639 (Nikolay Degterinsky).

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

  • Mise à niveau du compilateur des builds officiels et d’intégration continue de ClickHouse, de Clang 16 vers 17. #53831 (Robert Schulze).
  • Régénération des données tld pour les recherches (tldLookup.generated.cpp). #54269 (Bharat Nallan).
  • Suppression du lien symbolique redondant clickhouse-keeper-client. #54587 (Tomas Barton).
  • Utilisation de /usr/bin/env pour localiser bash — cela prend désormais en charge Nix OS. #54603 (Fionera).
  • CMake a ajouté l’option PROFILE_CPU, nécessaire pour exécuter perf record sans utiliser de graphe d’appels DWARF. #54917 (Maksim Kita).
  • Si l’éditeur de liens n’est pas LLD, arrêt avec une erreur fatale. #55036 (Alexey Milovidov).
  • La bibliothèque utilisée pour gérer (encoder/décoder) les valeurs base64 a été remplacée, de Turbo-Base64 vers aklomp-base64. Les deux bénéficient d’une accélération SIMD sur x86 et ARM, mais 1. la licence de la seconde (BSD-2) est plus favorable à ClickHouse, Turbo-Base64 étant entre-temps passé à GPL-3, 2. avec davantage d’étoiles sur GitHub, aklomp-base64 semble plus pérenne, 3. aklomp-base64 dispose d’une API légèrement plus agréable (même si cela reste subjectif), et 4. aklomp-base64 ne nous oblige pas à contourner des bugs (comme une initialisation non thread-safe). Remarque : aklomp-base64 rejette les valeurs base64 sans padding, tandis que Turbo-Base64 les décode au mieux. La RFC-4648 laisse ouverte la question de savoir si le padding est obligatoire ou non, mais selon le contexte, cela peut constituer un changement de comportement à connaître. #54119 (Mikhail Koviazin).

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

  • Correction de REPLACE/MOVE PARTITION avec la zero-copy replication (remarque : « zero-copy replication » est une fonctionnalité Experimental) #54193 (Alexander Tokmakov).
  • Correction des verrous zero copy avec des hardlinks (remarque : « zero-copy replication » est une fonctionnalité Experimental) #54859 (Alexander Tokmakov).
  • Correction des déchets zero copy (remarque : « zero-copy replication » est une fonctionnalité Experimental) #54550 (Alexander Tokmakov).
  • Transmission du délai d’expiration des nouvelles tentatives HTTP en millisecondes (il était incorrect auparavant). #54438 (Duc Canh Le).
  • Correction d’un message d’erreur trompeur dans OUTFILE avec CapnProto/Protobuf #52870 (Kruglov Pavel).
  • Correction du rapport récapitulatif avec les parallel replicas et LIMIT #53050 (Raúl Marín).
  • Correction du throttling des BACKUPs depuis/vers S3 (lorsque la copie native n’était pas utilisée), ainsi qu’à quelques autres endroits #53336 (Azat Khuzhin).
  • Correction du throttling des IO lors de la copie de répertoires entiers #53338 (Azat Khuzhin).
  • Correction : les actions déplacées vers la condition prewhere peuvent perdre une colonne #53492 (Yakov Olkhovskiy).
  • Correction d’une erreur interne lors du remplacement par des parts identiques octet pour octet #53735 (Pedro Riera).
  • Correction : exiger les colonnes utilisées dans l’expression interpolate #53754 (Yakov Olkhovskiy).
  • Correction de l’initialisation de Cluster Discovery et de la configuration des points de défaillance dans la config #54113 (vdimir).
  • Correction de problèmes dans accurateCastOrNull #54136 (Salvatore Mesoraca).
  • Correction de la clé primaire Nullable avec le modificateur FINAL #54164 (Amos Bird).
  • Correction d’une erreur qui empêchait l’insertion de nouvelles données dans une materialized view répliquée en présence de données dupliquées. #54184 (Pedro Riera).
  • Correction : autoriser IPv6 pour le bloom filter #54200 (Yakov Olkhovskiy).
  • Correction d’une incompatibilité de type possible avec IPv4 #54212 (Bharat Nallan).
  • Correction de system.data_skipping_indices pour les index recréés #54225 (Artur Malchanau).
  • Correction d’un conflit de noms dans multiple join rewriter v2 #54240 (Tao Wang).
  • Correction d’erreurs inattendues dans system.errors après un join #54306 (vdimir).
  • Corrige isZeroOrNull(NULL) #54316 (flynn).
  • Correction : parallel replicas sur Distributed avec prefer_localhost_replica = 1 #54334 (Igor Nikonov).
  • Corrige une erreur logique dans la fusion verticale + ReplacingMergeTree + le nettoyage via OPTIMIZE #54368 (alesapin).
  • Corrige une erreur possible URI contains invalid characters dans la table function s3 #54373 (Kruglov Pavel).
  • Corrige un segfault dans l’optimisation AST de la fonction arrayExists #54379 (Nikolay Degterinsky).
  • Vérifie l’overflow avant l’addition dans la fonction analysisOfVariance #54385 (Antonio Andelic).
  • Reproduit et corrige le bug dans removeSharedRecursive #54430 (Sema Checherinda).
  • Corrige un résultat potentiellement incorrect avec SimpleAggregateFunction dans PREWHERE et FINAL #54436 (Azat Khuzhin).
  • Corrige le filtrage des parts avec indexHint lorsque l’analyzer n’est pas utilisé #54449 (Azat Khuzhin).
  • Corrige les projections agrégées avec des états normalized #54480 (Amos Bird).
  • clickhouse-local : correction liée au paramètre multiquery #54498 (CuiShuoGuo).
  • clickhouse-local prend en charge l’argument de ligne de commande --database #54503 (vdimir).
  • Corrige une parsing error possible dans les formats -WithNames avec input_format_with_names_use_header désactivé #54513 (Kruglov Pavel).
  • Corrige un cas rare d’erreur CHECKSUM_DOESNT_MATCH #54549 (alesapin).
  • Corrige le tri de UNION ALL sur des résultats déjà triés #54564 (Vitaly Baranov).
  • Corrige l’installation du snapshot dans Keeper #54572 (Antonio Andelic).
  • Corrige une condition de concurrence dans ColumnUnique #54575 (Nikita Taranov).
  • Index Annoy/Usearch : corrige LOGICAL_ERROR pendant la construction avec des valeurs par défaut #54600 (Robert Schulze).
  • Corrige la sérialisation de ColumnDecimal #54601 (Nikita Taranov).
  • Corrige l’inférence de schéma pour les fonctions *Cluster avec des noms de colonnes contenant des espaces #54635 (Kruglov Pavel).
  • Corrige l’utilisation de la structure des tables d’insertion en présence de valeurs par défaut et de colonnes d’insertion explicites #54655 (Kruglov Pavel).
  • Correction : éviter d’utiliser une regex de correspondance, susceptible de contenir une alternance, comme condition sur la clé. #54696 (Yakov Olkhovskiy).
  • Correction de ReplacingMergeTree avec vertical merge et nettoyage #54706 (SmitaRKulkarni).
  • Correction des virtual columns qui avaient des valeurs incorrectes après ORDER BY #54811 (Michael Kolupaev).
  • Correction du filtrage des parts avec indexHint lorsque l’analyzer n’est pas utilisé #54825 #54449 (Azat Khuzhin).
  • Correction d’un segfault de Keeper lors de l’arrêt #54841 (Antonio Andelic).
  • Correction de Invalid number of rows in Chunk dans MaterializedPostgreSQL #54844 (Kseniia Sumarokova).
  • Déplacement des paramètres de format Obsolete dans une section distincte #54855 (Kruglov Pavel).
  • Reconstruction de minmax_count_projection lorsque la partition key est modifiée #54943 (Amos Bird).
  • Correction d’un CAST incorrect vers ColumnVector<Int128> dans la fonction if #55019 (Kruglov Pavel).
  • Empêche l’attachement de parts provenant de tables avec des projections ou des index différents #55062 (János Benjamin Antal).
  • Stocke NULL dans la map du résultat scalaire lorsque le résultat de la sous-requête est vide #52240 (vdimir).
  • Correction : FINAL produit des read ranges invalides dans un cas rare #54934 (Nikita Taranov).
  • Correction : quorum d’insert sans nouvelles tentatives de Keeper #55026 (Igor Nikonov).
  • Correction de l’état simple avec Nullable #55030 (Pedro Riera).

Version de ClickHouse 23.8 LTS, 2023-08-31. Présentation, Vidéo

Changement rétro-incompatible

  • Si un disque dynamique contient un nom, il doit être spécifié sous la forme disk = disk(name = 'disk_name', …) dans les arguments de la fonction disk. Dans la version précédente, il pouvait être spécifié sous la forme disk = disk_<disk_name>(...), ce qui n’est désormais plus pris en charge. #52820 (Kseniia Sumarokova).
  • clickhouse-benchmark établira des connexions en parallèle lorsqu’il est lancé avec --concurrency supérieur à 1. Auparavant, il était inutilisable si vous l’exécutiez avec 1000 connexions concurrentes entre l’Europe et les États-Unis. Le calcul du QPS est désormais correct pour les connexions à forte latence. Changement rétro-incompatible : l’option de sortie JSON de clickhouse-benchmark a été supprimée. Si vous utilisiez cette option, vous pouvez extraire les données de system.query_log au format JSON comme solution de contournement. #53293 (Alexey Milovidov).
  • La colonne microseconds est supprimée de system.text_log, et la colonne milliseconds est supprimée de system.metric_log, car elles sont redondantes en présence de la colonne event_time_microseconds. #53601 (Alexey Milovidov).
  • La fonctionnalité de metadata cache est désormais obsolète. Elle est Experimental et nous ne l’avons jamais utilisée. Cette fonctionnalité est dangereuse : #51182. La system table system.merge_tree_metadata_cache est supprimée. Le metadata cache reste disponible dans cette version, mais sera bientôt supprimé. Cela clôt #39197. #51303 (Alexey Milovidov).
  • Désactivation de la prise en charge de 3DES dans les connexions TLS. #52893 (Kenji Noguchi).

Nouvelle fonctionnalité

  • Importation directe depuis des archives zip/7z/tar. Exemple : file('*.zip :: *.csv'). #50321 (nikitakeba).
  • Ajout de la colonne ptr à system.trace_log pour trace_type = 'MemorySample'. Cette colonne contient une adresse d’allocation. Ajout de la fonction flameGraph, qui permet de générer un flamegraph de la mémoire allouée et non libérée. Remaniement de #38391. #45322 (Nikolai Kochetov).
  • Ajout de la table function azureBlobStorageCluster. L’ensemble des fonctionnalités prises en charge est très proche de celui de la table function s3Cluster. #50795 (SmitaRKulkarni).
  • Autorise l’utilisation de cluster, clusterAllReplicas, remote et remoteSecure sans nom de table dans l’issue #50808. #50848 (Yangkuan Liu).
  • Une system table pour surveiller les consumers Kafka. #50999 (Ilya Golshtein).
  • Ajout du paramètre max_sessions_for_user. #51724 (Alexey Gerasimchuck).
  • Nouvelles fonctions toUTCTimestamp/fromUTCTimestamp pour se comporter comme to_utc_timestamp/from_utc_timestamp de Spark. #52117 (KevinyhZou).
  • Ajout des nouvelles fonctions structureToCapnProtoSchema/structureToProtobufSchema, qui convertissent la structure d’une table ClickHouse en schéma au format CapnProto/Protobuf. Permet d’importer/exporter des données au format CapnProto/Protobuf sans schéma de format externe, en utilisant un schéma autogenerated à partir de la structure de la table (contrôlé par les paramètres format_capn_proto_use_autogenerated_schema/format_protobuf_use_autogenerated_schema). Permet d’exporter le schéma autogenerated lors de l’import/export à l’aide du paramètre output_format_schema. #52278 (Kruglov Pavel).
  • Un nouveau field query_cache_usage dans system.query_log indique désormais si et comment le query cache a été utilisé. #52384 (Robert Schulze).
  • Ajout des nouvelles fonctions startsWithUTF8 et endsWithUTF8. #52555 (李扬).
  • Autorise un nombre variable de colonnes dans TSV/CustomSeparated/JSONCompactEachRow, et permet à la schema inference de fonctionner avec un nombre variable de colonnes. Ajout des paramètres input_format_tsv_allow_variable_number_of_columns, input_format_custom_allow_variable_number_of_columns, input_format_json_compact_allow_variable_number_of_columns. #52692 (Kruglov Pavel).
  • Ajout des requêtes SYSTEM STOP/START PULLING REPLICATION LOG (pour tester ReplicatedMergeTree). #52881 (Alexander Tokmakov).
  • Autorise l’exécution de fonctions constantes non déterministes dans les mutations sur l’initiateur. #53129 (Anton Popov).
  • Ajout du format d’entrée One, qui ne lit aucune donnée et renvoie toujours une seule ligne avec la colonne dummy de type UInt8 et la valeur 0, comme system.one. Il peut être utilisé avec les colonnes virtuelles _file/_path pour lister les fichiers dans les table functions file/s3/url/hdfs/etc sans lire aucune donnée. #53209 (Kruglov Pavel).
  • Ajout de la fonction tupleConcat. Clôt #52759. #53239 (Nikolay Degterinsky).
  • Prise en charge de l’opération TRUNCATE DATABASE. #53261 (Bharat Nallan).
  • Ajout du paramètre max_threads_for_indexes pour limiter le nombre de threads utilisés pour le traitement de la clé primaire. #53313 (jorisgio).
  • Réintroduction des fonctions SipHash avec clé. #53525 (Salvatore Mesoraca).
  • (#52755 , #52895) Ajout des fonctions arrayRotateLeft, arrayRotateRight, arrayShiftLeft, arrayShiftRight. #53557 (Mikhail Koviazin).
  • Ajout de la colonne name à system.clusters comme alias de cluster. #53605 (irenjj).
  • Le tableau de bord avancé permet désormais l’édition en masse (enregistrement/chargement). #53608 (Alexey Milovidov).
  • Le tableau de bord avancé propose désormais une option pour agrandir les graphiques et les déplacer. #53622 (Alexey Milovidov).
  • Ajout de la prise en charge de l’addition et de la soustraction de tableaux : [5,2] + [1,7]. La division et la multiplication n’ont pas été implémentées en raison de l’ambiguïté entre la multiplication terme à terme et le produit scalaire des arguments. Clôt #49939. #52625 (Yarik Briukhovetskyi).
  • Ajout de la prise en charge des littéraux de chaîne comme noms de table. Clôt #52178. #52635 (hendrik-m).

Fonctionnalité expérimentale

  • Ajout du nouveau moteur de table S3Queue pour l’import de données en streaming depuis S3. Résout #37012. #49086 (s-kat). Il n’est pas prêt à l’emploi. Ne l’utilisez pas.
  • Activation de la lecture parallèle à partir des répliques via une table distribuée. En lien avec #49708. #53005 (Igor Nikonov).
  • Ajout d’une prise en charge expérimentale de HNSW comme méthode de recherche approximative de voisins. #53447 (Davit Vardanyan). Cette fonctionnalité est actuellement destinée à ceux qui poursuivent le travail sur son implémentation. Ne l’utilisez pas.

Amélioration des performances

  • Pushdown des filtres Parquet. C.-à-d. que lors de la lecture de fichiers Parquet, les groupes de lignes (fragments du fichier) sont ignorés en fonction de la condition WHERE et des valeurs min/max de chaque colonne. En particulier, si le fichier est approximativement trié sur une colonne, les requêtes qui filtrent sur une courte plage de cette colonne seront beaucoup plus rapides. #52951 (Michael Kolupaev).
  • Optimisation de la lecture des petits groupes de lignes en les regroupant par lots dans Parquet. Corrige #53069. #53281 (Kruglov Pavel).
  • Optimisation de count à partir de fichiers dans la plupart des formats d’entrée. Corrige #44334. #53637 (Kruglov Pavel).
  • Utilisation d’un filtre par fichier/chemin avant la lecture dans les fonctions de table url/file/hdfs. #53529 (Kruglov Pavel).
  • Activation de la compilation JIT pour AArch64, PowerPC, SystemZ, RISC-V. #38217 (Maksim Kita).
  • Ajout du paramètre rewrite_count_distinct_if_with_count_distinct_implementation pour réécrire countDistinctIf avec count_distinct_implementation. Corrige #30642. #46051 (flynn).
  • Accélération de la fusion des états des fonctions d’agrégation uniq et uniqExact en parallélisant la conversion avant la fusion. #50748 (Jiebin Sun).
  • Optimisation des performances d’agrégation d’une clé String Nullable lors de l’utilisation d’un grand nombre de clés de longueur variable. #51399 (LiuNeng).
  • Ajout d’un passage dans l’analyseur pour l’optimisation des filtres temporels avec préimage. Les expériences de performance de SSB sur le matériel ICX (processeur Intel Xeon Platinum 8380, 80 cœurs, 160 threads) montrent que ce changement pourrait apporter un gain de 8,5 % sur la moyenne géométrique du QPS lorsque l’analyseur expérimental est activé. #52091 (Zhiguo Zhou).
  • Optimisation de la fusion si tous les ensembles de hachage sont à un seul niveau dans la fonction uniqExact (COUNT DISTINCT). #52973 (Jiebin Sun).
  • Moteur de table Join : ne pas cloner la structure de données du hash join avec toutes les colonnes. #53046 (Duc Canh Le).
  • Implémentation du format d’entrée ORC natif sans la bibliothèque “apache arrow” afin d’améliorer les performances. #53324 (李扬).
  • Le tableau de bord demandera au serveur de compresser les données, ce qui est utile pour les grandes plages temporelles sur des connexions Internet lentes. Par exemple, un graphique avec 86400 points peut représenter 1,5 Mo non compressés et 60 Ko compressés avec br. #53569 (Alexey Milovidov).
  • Meilleure utilisation du pool de threads pour les opérations BACKUP et RESTORE. #53649 (Nikita Mikhaylov).
  • Charger les métadonnées du cache du système de fichiers au démarrage, en parallèle. Configuré par le paramètre de cache load_metadata_threads (par défaut : 1). Lié à #52037. #52943 (Kseniia Sumarokova).
  • Amélioration de move_primary_key_columns_to_end_of_prewhere. #53337 (Han Fei).
  • Cela optimise l’interaction avec ClickHouse Keeper. Auparavant, l’appelant pouvait enregistrer plusieurs fois le même callback de watch. Dans ce cas, chaque entrée consommait de la mémoire et le même callback était appelé plusieurs fois, ce qui n’avait guère de sens. Pour éviter cela, l’appelant devait implémenter une logique empêchant d’ajouter plusieurs fois le même watch. Avec ce changement, cette déduplication est effectuée en interne si le callback de watch est transmis via shared_ptr. #53452 (Alexander Gololobov).
  • Mettre en cache le nombre de lignes dans les fichiers pour count dans les fonctions file/s3/url/hdfs/azure. Le cache peut être activé ou désactivé via le paramètre use_cache_for_count_from_files (activé par défaut). Suite de https://github.com/ClickHouse/ClickHouse/pull/53637. #53692 (Kruglov Pavel).
  • Une gestion plus rigoureuse des threads améliore les performances de la table function S3 de plus de ~25 % sur un grand nombre de fichiers. #53668 (pufit).

Amélioration

  • Ajout de la configuration/du paramètre stderr_reaction pour contrôler la réaction (none, log ou throw) lorsque stderr d’une commande externe contient des données. Cela facilite le débogage des commandes externes. #43210 (Amos Bird).
  • Ajout de la colonne partition à system part_log et à la table Merge. #48990 (Jianfei Hu).
  • Les tailles des caches (index) uncompressed/mark, mmap et de requêtes peuvent désormais être configurées dynamiquement à l’exécution (sans redémarrage du serveur). #51446 (Robert Schulze).
  • Si un dictionnaire est créé avec une clé complexe, la variante de layout “complex key” est choisie automatiquement. #49587 (xiebin).
  • Ajout du paramètre use_concurrency_control pour mieux tester la nouvelle fonctionnalité de contrôle de la concurrence. #49618 (Alexey Milovidov).
  • Ajout de suggestions pour les noms de bases de données et de tables mal saisis. #49801 (Yarik Briukhovetskyi).
  • Lors de la lecture de petits fichiers HDFS via Gluten, nous avons constaté que cela prenait plus de temps qu’une query exécutée directement via Spark. Des améliorations ont donc été apportées sur ce point. #50063 (KevinyhZou).
  • Il y avait trop de logs d’erreur inutiles après l’expiration de la session, ce qui ne nous convenait pas. #50171 (helifu).
  • Introduction de sessions ZooKeeper de fallback limitées dans le temps. Correction de la colonne index dans system.zookeeper_connection pour les adresses DNS. #50424 (Anton Kozlov).
  • Ajout de la possibilité de consigner un événement lorsque max_partitions_per_insert_block est atteint. #50948 (Sean Haynes).
  • Ajout de plusieurs commandes personnalisées à clickhouse-keeper-client (principalement pour faciliter le débogage de ClickHouse). #51117 (pufit).
  • Mise à jour de la vérification de la connection string dans la table function azureBlobStorage, car une connection string avec “sas” ne commence pas toujours par l’endpoint default, et mise à jour de l’URL de connexion pour inclure le token “sas” après l’ajout du Container Azure à l’URL. #51141 (SmitaRKulkarni).
  • Correction de la description des ensembles de filtrage dans l’algorithme de JOIN full_sorting_merge. #51329 (Tanay Tummalapalli).
  • Correction de la consommation mémoire dans Aggregator lorsque max_block_size est très élevé. #51566 (Nikita Taranov).
  • Ajout de la commande SYSTEM SYNC FILESYSTEM CACHE. Elle compare l’état en mémoire du cache du système de fichiers à son état sur disque et corrige l’état en mémoire si nécessaire. Cela n’est utile que si vous effectuez des interventions manuelles sur les données stockées sur disque, ce qui est fortement déconseillé. #51622 (Kseniia Sumarokova).
  • Tentative de création d’un resolver de proxy générique pour CH, tout en conservant la rétrocompatibilité avec le resolver de proxy existant dans la configuration du stockage S3. #51749 (Arthur Passos).
  • Prise en charge de la lecture des sous-colonnes de Tuple à partir des fonctions de table file/s3/hdfs/url/azureBlobStorage. #51806 (Kruglov Pavel).
  • La fonction arrayIntersect renvoie désormais les valeurs dans l’ordre correspondant au premier argument. Corrige #27622. #51850 (Yarik Briukhovetskyi).
  • Ajout de nouvelles requêtes permettant de créer/supprimer des entités d’accès dans le stockage d’accès spécifié, ou de déplacer des entités d’accès d’un stockage d’accès à un autre. #51912 (pufit).
  • Les requêtes ALTER TABLE FREEZE ne sont pas répliquées dans le moteur de base de données Replicated. #52064 (Mike Kot).
  • Ajout de la possibilité de vider les tables système en cas d’arrêt inattendu. #52174 (Alexey Gerasimchuck).
  • Correction du cas où la fonction de table s3 refusait de fonctionner avec des URL présignées. Corrige #50846. #52310 (chen).
  • Ajout de la colonne name comme alias de event et metric dans les tables system.events et system.metrics. Corrige #51257. #52315 (chen).
  • Ajout de la prise en charge de la syntaxe CREATE UNIQUE INDEX dans le parseur, comme no-op, pour une meilleure compatibilité SQL. L’index UNIQUE n’est pas pris en charge. Définissez create_index_ignore_unique = 1 pour ignorer le mot-clé UNIQUE dans les requêtes. #52320 (Ilya Yatsishin).
  • Ajout de la prise en charge des macros prédéfinies ({database} et {table}) dans certains paramètres du moteur Kafka : topic, consumer, client_id, etc. #52386 (Yury Bogomolov).
  • Désactivation de la mise à jour du cache du système de fichiers pendant les opérations de backup/restore. Le cache du système de fichiers ne doit pas être mis à jour pendant ces opérations ; il semble que cela ne fasse que ralentir le processus sans bénéfice (car la commande BACKUP peut lire beaucoup de données, et il est inutile de placer toutes ces données dans le cache du système de fichiers pour les en évincer immédiatement). #52402 (Vitaly Baranov).
  • La configuration du S3 endpoint permet de l’utiliser à partir de la racine et ajoute automatiquement ’/’ si nécessaire. #47809. #52600 (xiaolei565).
  • Pour clickhouse-local, prise en charge des options positionnelles et initialisation des paramètres globaux des UDF (user_scripts_path et user_defined_executable_functions_config). #52643 (Yakov Olkhovskiy).
  • system.asynchronous_metrics inclut désormais les métriques “QueryCacheEntries” et “QueryCacheBytes” pour inspecter le query cache. #52650 (Robert Schulze).
  • Ajout de la possibilité d’utiliser le paramètre s3_storage_class dans la clause SETTINGS de l’instruction BACKUP pour les backups vers S3. #52658 (Roman Vasin).
  • Ajout de l’utilitaire print-backup-info.py, qui analyse un fichier de métadonnées de sauvegarde et affiche des informations sur la sauvegarde. #52690 (Vitaly Baranov).
  • Ferme #49510. Actuellement, les noms de bases de données et de tables sont sensibles à la casse, mais les outils de BI interrogent information_schema tantôt en minuscules, tantôt en majuscules. C’est pourquoi nous avons la base de données information_schema, qui contient des tables en minuscules, comme information_schema.tables, et la base de données INFORMATION_SCHEMA, qui contient des tables en majuscules, comme INFORMATION_SCHEMA.TABLES. Mais certains outils interrogent INFORMATION_SCHEMA.tables et information_schema.TABLES. La solution proposée consiste à dupliquer les tables en minuscules et en majuscules dans les bases de données information_schema et INFORMATION_SCHEMA. #52695 (Yarik Briukhovetskyi).
  • La requête CHECK TABLE offre de meilleures performances et une meilleure ergonomie (envoi des mises à jour de progression, possibilité d’annulation). #52745 (vdimir).
  • Ajout de la prise en charge de modulo, intDiv et intDivOrZero pour les tuples, en les appliquant à chacun des éléments du tuple. #52758 (Yakov Olkhovskiy).
  • Recherche des fichiers de configuration yaml et yml par défaut dans clickhouse-client après xml. #52767 (Alexey Milovidov).
  • Lors de la fusion dans une configuration dont la racine n’est pas clickhouse, les configurations avec un nom de nœud racine différent étaient simplement ignorées, sans exception. #52770 (Yakov Olkhovskiy).
  • Il est désormais possible de spécifier une taille minimale (memory_profiler_sample_min_allocation_size) et maximale (memory_profiler_sample_max_allocation_size) pour les allocations suivies par le profileur mémoire par échantillonnage. #52779 (alesapin).
  • Ajout du paramètre precise_float_parsing pour changer de méthode d’analyse des nombres à virgule flottante (rapide/précise). #52791 (Andrey Zvonov).
  • Utilisation des mêmes paths par défaut pour clickhouse-keeper (lien symbolique) que pour clickhouse-keeper (exécutable). #52861 (Vitaly Baranov).
  • Amélioration du message d’erreur pour la table function remote. Ferme #40220. #52959 (jiyoungyoooo).
  • Ajout de la possibilité de spécifier une politique de stockage personnalisée dans la clause SETTINGS des requêtes RESTORE. #52970 (Victor Krasnov).
  • Ajout de la possibilité de limiter les requêtes S3 lors des opérations de sauvegarde (BACKUP et RESTORE respectent désormais s3_max_[get/put]_[rps/burst]). #52974 (Daniel Pozo Escalona).
  • Ajout de paramètres pour ignorer la clause ON CLUSTER dans les requêtes de gestion des fonctions définies par l’utilisateur répliquées ou des entités de contrôle d’accès avec stockage répliqué. #52975 (Aleksei Filatov).
  • Actions EXPLAIN pour l’étape JOIN. #53006 (Maksim Kita).
  • hasTokenOrNull et hasTokenCaseInsensitiveOrNull renvoient désormais NULL pour des motifs de recherche vides. #53059 (ltrk2).
  • Possibilité de restreindre les chemins autorisés pour les caches du système de fichiers. Surtout utile pour les disques dynamiques. Si filesystem_caches_path est spécifié dans la configuration du serveur, tous les chemins des caches du système de fichiers seront limités à ce répertoire. Par exemple, si le path dans la configuration du cache est relatif, il sera placé dans filesystem_caches_path ; si le path dans la configuration du cache est absolu, il devra se trouver à l’intérieur de filesystem_caches_path. Si filesystem_caches_path n’est pas spécifié dans la configuration, le comportement restera le même que dans les versions précédentes. #53124 (Kseniia Sumarokova).
  • Ajout de plusieurs commandes personnalisées (principalement pour faciliter le débogage de ClickHouse). #53127 (pufit).
  • Ajout d’informations de diagnostic sur le nom de fichier lors de l’inférence de schéma, ce qui aide lors du traitement de plusieurs fichiers avec des globs. #53135 (Alexey Milovidov).
  • Le client chargera les suggestions via la connexion principale si la seconde connexion n’est pas autorisée à créer une session. #53177 (Alexey Gerasimchuck).
  • Ajout de la clause EXCEPT à la requête SYSTEM STOP/START LISTEN QUERIES [ALL/DEFAULT/CUSTOM], par exemple SYSTEM STOP LISTEN QUERIES ALL EXCEPT TCP, HTTP. #53280 (Nikolay Degterinsky).
  • La valeur par défaut de max_concurrent_queries passe de 100 à 1000. Il est acceptable d’avoir de nombreuses requêtes concurrentes si elles ne sont pas lourdes et attendent principalement le réseau. Remarque : ne confondez pas requêtes concurrentes et QPS : par exemple, le serveur ClickHouse peut gérer des dizaines de milliers de QPS avec moins de 100 requêtes concurrentes. #53285 (Alexey Milovidov).
  • Limitation du nombre de fusions d’optimisation de partitions concurrentes en arrière-plan. #53405 (Duc Canh Le).
  • Ajout du paramètre allow_moving_table_directory_to_trash, qui permet d’ignorer l’erreur Directory for table data already exists lors de la réplication ou de la récupération d’une base de données Replicated. #53425 (Alexander Tokmakov).
  • Si les paramètres serveur asynchronous_metrics_update_period_s et asynchronous_heavy_metrics_update_period_s sont incorrectement configurés à 0, cela échouera désormais proprement au lieu d’interrompre l’application. #53428 (Robert Schulze).
  • Le serveur ClickHouse respecte désormais les limites mémoire modifiées via les cgroups lors du rechargement de sa configuration. #53455 (Robert Schulze).
  • Ajout de la possibilité de désactiver le flush des tables Distributed lors d’un DETACH, d’un DROP ou de l’arrêt du serveur. #53501 (Azat Khuzhin).
  • La fonction domainRFC prend désormais en charge IPv6 entre crochets. #53506 (Chen768959).
  • Utilisation d’un timeout plus long pour les requêtes S3 CopyObject, utilisées dans les sauvegardes. #53533 (Michael Kolupaev).
  • Ajout du paramètre serveur aggregate_function_group_array_max_element_size. Ce paramètre permet de limiter la taille des tableaux pour la fonction groupArray lors de la sérialisation. La valeur par défaut est 16777215. #53550 (Nikolai Kochetov).
  • SCHEMA a été ajouté comme alias de DATABASE afin d’améliorer la compatibilité avec MySQL. #53587 (Daniël van Eeden).
  • Ajout de métriques asynchrones sur les tables de la base de données système. Par exemple, TotalBytesOfMergeTreeTablesSystem. Cela clôt #53603. #53604 (Alexey Milovidov).
  • L’éditeur SQL de l’UI Play et le dashboard n’utiliseront pas Grammarly. #53614 (Alexey Milovidov).
  • En tant que paramètres de niveau expert, il est désormais possible de (1) configurer le size_ratio (c.-à-d. la taille relative de la protected queue) des caches d’index mark et uncompressed, (2) configurer la cache policy des caches d’index mark et d’index uncompressed. #53657 (Robert Schulze).
  • Ajout de la validation des informations client dans le Query packet de TCPHandler. #53673 (Alexey Gerasimchuck).
  • Nouvelle tentative de chargement des parts en cas d’erreurs réseau lors des interactions avec Microsoft Azure. #53750 (SmitaRKulkarni).
  • Les stacktraces des exceptions sont désormais propagées, y compris pour les exceptions des vues matérialisées. #53766 (Ilya Golshtein).
  • Si aucun hostname ni port n’est spécifié, le client Keeper tentera de rechercher une connection string dans le config.xml de ClickHouse. #53769 (pufit).
  • Ajout de l’événement de profile PartsLockMicroseconds, qui indique le nombre de microsecondes pendant lesquelles le verrou sur les data parts est maintenu dans la famille de table engine MergeTree. #53797 (alesapin).
  • La limite de reconnexion dans les limites RAFT pour Keeper est désormais configurable. Cette configuration peut aider Keeper à rétablir plus rapidement la connexion avec ses pairs si la connexion actuelle est rompue. #53817 (Pengyuan Bian).
  • Les clés étrangères sont ignorées dans la définition des tables afin d’améliorer la compatibilité avec MySQL, pour éviter à l’utilisateur de devoir réécrire la partie correspondante de son SQL ; voir #53380. #53864 (jsc0218).

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

  • Ne pas exposer les symboles du binaire ClickHouse à l’éditeur de liens dynamique. Cela pourrait corriger #43933. #47475 (Alexey Milovidov).
  • Ajout d’un lien symbolique clickhouse-keeper-client au paquet clickhouse-server. #51882 (Mikhail f. Shiryaev).
  • Ajout de https://github.com/elliotchance/sqltest à la CI pour signaler la conformité à SQL 2016. #52293 (Alexey Milovidov).
  • Mise à niveau de PRQL vers la version 0.9.3. #53060 (Maximilian Roos).
  • Les tables système issues des vérifications CI sont exportées vers ClickHouse Cloud. #53086 (Alexey Milovidov).
  • Les données de profilage du compilateur (-ftime-trace) sont téléversées vers ClickHouse Cloud. #53100 (Alexey Milovidov).
  • Accélération des builds Debug et Tidy. #53178 (Alexey Milovidov).
  • Accélération du build en supprimant des tonnes de code inutile. L’un des fichiers d’en-tête fréquemment inclus avait été empoisonné par boost. #53180 (Alexey Milovidov).
  • Suppression d’encore plus de code inutile. #53182 (Alexey Milovidov).
  • La fonction arrayAUC utilisait de lourds templates C++ — ils ont été supprimés. #53183 (Alexey Milovidov).
  • Certaines unités de traduction étaient systématiquement reconstruites, indépendamment de ccache. La cause a été identifiée et corrigée. #53184 (Alexey Milovidov).
  • Les données de profilage du compilateur (-ftime-trace) sont téléversées vers ClickHouse Cloud, deuxième tentative après #53100. #53213 (Alexey Milovidov).
  • Exportation des logs de la CI pour les tests stateful vers ClickHouse Cloud. #53351 (Alexey Milovidov).
  • Exportation des logs de la CI pour les tests de stress. #53353 (Alexey Milovidov).
  • Exportation des logs de la CI pour le fuzzer. #53354 (Alexey Milovidov).
  • Préservation des paramètres d’environnement dans la commande clickhouse start. Corrige #51962. #53418 (Mikhail f. Shiryaev).
  • Suite à #53418. Petites améliorations de install_check.py, avec ajout de tests pour vérifier la transmission correcte des variables d’environnement au processus principal lors de init.d start. #53457 (Mikhail f. Shiryaev).
  • Réorganisation de la gestion des fichiers dans CMake pour éviter d’éventuels doublons. Par exemple, indexHint.cpp est dupliqué à la fois dans dbms_sources et clickhouse_functions_sources. #53621 (Amos Bird).
  • Mise à niveau de snappy vers la version 1.1.10. #53672 (李扬).
  • Légère amélioration du build CMake grâce au nettoyage de certaines dependencies et à la suppression de quelques doublons. Chaque commit inclut une courte description des modifications apportées. #53759 (Amos Bird).

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

  • Ne pas réinitialiser l’index Annoy (expérimental) lors de sa construction avec plus d’un mark #51325 (Tian Xinhui).
  • Corriger l’utilisation des répertoires temporaires pendant RESTORE #51493 (Azat Khuzhin).
  • Corriger l’arithmétique binaire pour Nullable(IPv4) #51642 (Yakov Olkhovskiy).
  • Prendre en charge les types de données IPv4 et IPv6 comme attributs de dictionnaire #51756 (Yakov Olkhovskiy).
  • Corriger la somme de contrôle des marks compressés #51777 (SmitaRKulkarni).
  • Corriger le cas où une virgule était interprétée à tort comme faisant partie d’un datetime lors du parsing CSV en mode best effort #51950 (Kruglov Pavel).
  • Ne pas lever d’exception lorsqu’une UDF exécutable a des paramètres #51961 (Nikita Taranov).
  • Corriger le recalcul des skip indexes et des projections dans les requêtes ALTER DELETE #52530 (Anton Popov).
  • MaterializedMySQL : corriger la boucle infinie dans ReadBuffer::read #52621 (Val Doroshchuk).
  • Charger les suggestions uniquement avec le dialecte clickhouse #52628 (János Benjamin Antal).
  • Initialiser et détruire le canal ares à la demande #52634 (Arthur Passos).
  • Corriger le filtrage par colonnes virtuelles avec une expression OR #52653 (Azat Khuzhin).
  • Corriger un crash dans la fonction tuple avec un argument de colonne sparse #52659 (Anton Popov).
  • Corriger les named collections sur le cluster #52687 (Al Korgun).
  • Corriger la lecture d’une colonne inutile dans le cas d’un PREWHERE en plusieurs étapes #52689 (Anton Popov).
  • Corriger un résultat de tri inattendu sur plusieurs colonnes avec la direction nulls first #52761 (copperybean).
  • Corriger une data race lors de la reconfiguration de Keeper #52804 (Antonio Andelic).
  • Corriger le tri des colonnes sparse avec une limite élevée #52827 (Anton Popov).
  • ClickHouse Keeper : corriger l’implémentation du serveur avec poll #52833 (Andy Fiddaman).
  • Faire en sorte que l’analyseur regexp reconnaisse les groupes de capture nommés #52840 (Han Fei).
  • Corriger une assertion possible dans ~PushingAsyncPipelineExecutor dans clickhouse-local #52862 (Kruglov Pavel).
  • Correction de la lecture d’un Nested(Array(LowCardinality(...))) vide #52949 (Anton Popov).
  • Ajout de nouveaux tests pour session_log et correction de l’incohérence entre la connexion et la déconnexion. #52958 (Alexey Gerasimchuck).
  • Correction d’une fuite de mot de passe dans show create mysql table #52962 (Duc Canh Le).
  • Conversion d’un format de colonne sparse en format complet dans CreateSetAndFilterOnTheFlyStep #53000 (vdimir).
  • Correction d’une rare race condition lors de la suppression d’un répertoire de préfixe de clé vide dans le cache FS #53055 (Kseniia Sumarokova).
  • Correction de ZstdDeflatingWriteBuffer, qui tronquait parfois la sortie #53064 (Michael Kolupaev).
  • Correction de query_id dans part_log avec les requêtes de flush asynchrones #53103 (Raúl Marín).
  • Correction d’une possible erreur du cache “Read unexpected size” #53121 (Kseniia Sumarokova).
  • Désactivation du nouvel encodeur Parquet #53130 (Alexey Milovidov).
  • Correction de l’exception “Not-ready Set” #53162 (Nikolai Kochetov).
  • Correction de l’échappement des caractères dans le moteur PostgreSQL #53250 (Nikolay Degterinsky).
  • Table session_log Experimental : ajout de nouveaux tests pour session_log et correction de l’incohérence entre la connexion et la déconnexion. #53255 (Alexey Gerasimchuck). Correction de l’incohérence entre la réussite de la connexion et la déconnexion #53302 (Alexey Gerasimchuck).
  • Correction de l’ajout d’intervalles inférieurs à la seconde à DateTime #53309 (Michael Kolupaev).
  • Correction de l’erreur “Context has expired” dans les dictionnaires #53342 (Alexey Milovidov).
  • Correction du format AST incorrect d’une projection normale #53347 (Amos Bird).
  • Interdiction d’utiliser use_structure_from_insertion_table_in_table_functions lors de l’exécution de Scalar #53348 (flynn).
  • Correction du chargement d’une base de données lazy lors d’une requête select sur system.table #53372 (SmitaRKulkarni).
  • Correction de system.data_skipping_indices pour MaterializedMySQL #53381 (Filipp Ozinov).
  • Corrige le traitement d’un retour chariot isolé dans le moteur de segmentation de fichiers TSV #53407 (Kruglov Pavel).
  • Corrige correctement l’erreur Context has expired #53433 (Michael Kolupaev).
  • Corrige timeout_overflow_mode lorsqu’une sous-requête se trouve dans la partie droite de IN #53439 (Duc Canh Le).
  • Corrige un comportement inattendu dans #53152 #53440 (Zhiguo Zhou).
  • Corrige l’erreur d’analyse de la fonction JSON_QUERY lorsque le chemin ne contient que des nombres #53470 (KevinyhZou).
  • Corrige l’ordre incorrect des colonnes pour les requêtes avec FINAL parallèle. #53489 (Nikolai Kochetov).
  • Corrige les requêtes SELECT sur ReplacingMergeTree avec do_not_merge_across_partitions_select_final #53511 (Vasily Nemkov).
  • Vide d’abord la file d’attente d’async insert lors de l’arrêt #53547 (joelynch).
  • Corrige un crash dans une jointure sur une colonne sparse #53548 (vdimir).
  • Corrige une UB possible dans le skipping index Set pour les fonctions avec des arguments incorrects #53559 (Azat Khuzhin).
  • Corrige une UB possible dans les index inversés (fonctionnalité expérimentale) #53560 (Azat Khuzhin).
  • Correction : l’expression interpolate prend la colonne source au lieu de l’alias du même nom issu de l’expression select. #53572 (Yakov Olkhovskiy).
  • Corrige le nombre de granules écartées dans EXPLAIN PLAN index=1 #53616 (wangxiaobo).
  • Gère correctement les totaux et les extrêmes avec DelayedSource #53644 (Antonio Andelic).
  • Corrige un blocage du cache Set préparé dans le pipeline de mutation #53645 (Nikolai Kochetov).
  • Corrige un bug sur les mutations avec des sous-colonnes de type JSON dans les prédicats des requêtes UPDATE et DELETE. #53677 (VanDarkholme7).
  • Corrige le pushdown des filtres pour la jointure full_sorting_merge #53699 (vdimir).
  • Tente de corriger un bug avec NULL::LowCardinality(Nullable(...)) NOT IN #53706 (Andrey Zvonov).
  • Correction : DISTINCT trié avec des colonnes sparse #53711 (Igor Nikonov).
  • transform : gère correctement la colonne default avec plusieurs lignes #53742 (Salvatore Mesoraca).
  • Correction d’un crash du fuzzer dans parseDateTime #53764 (Robert Schulze).
  • MaterializedPostgreSQL : correction d’une exception non interceptée dans getCreateTableQueryImpl #53832 (Kseniia Sumarokova).
  • Correction d’un segfault possible lors de l’utilisation du moteur PostgreSQL #53847 (Kseniia Sumarokova).
  • Correction de l’alias named_collection_admin #54066 (Kseniia Sumarokova).

Version 23.7 de ClickHouse, 2023-07-27. Présentation, Vidéo

Changement rétro-incompatible

  • Ajout du type d’accès NAMED COLLECTION (alias USE NAMED COLLECTION, NAMED COLLECTION USAGE). Cette PR est rétro-incompatible, car ce type d’accès est désactivé par défaut (puisque le type d’accès parent NAMED COLLECTION ADMIN l’est également). Proposé dans #50277. Pour l’accorder, utilisez GRANT NAMED COLLECTION ON collection_name TO user ou GRANT NAMED COLLECTION ON * TO user ; pour pouvoir accorder ces grants, named_collection_admin est requis dans la config (auparavant nommé named_collection_control, il restera donc disponible comme alias). #50625 (Kseniia Sumarokova).
  • Correction d’une faute de frappe dans le nom de la colonne system.parts last_removal_attemp_time. Elle s’appelle désormais last_removal_attempt_time. #52104 (filimonov).
  • La version de distributed_ddl_entry_format_version passe par défaut à 5 (ce qui active la transmission d’OpenTelemetry et de initial_query_idd). Cela empêchera de traiter les entrées existantes de distributed DDL après une rétrogradation (mais notez qu’en général, il ne devrait pas y avoir de telles entrées non traitées). #52128 (Azat Khuzhin).
  • Vérification des métadonnées des projections de la même manière que pour les métadonnées ordinaires. Cette modification peut empêcher le serveur de démarrer s’il existe une table avec une projection invalide. Par exemple, une projection qui créait des colonnes positionnelles dans la PK (par ex. projection p (select * order by 1, 4)), ce qui n’est pas autorisé dans la PK d’une table et peut provoquer un crash pendant insert/merge. Supprimez ces projections avant la mise à jour. Corrige #52353. #52361 (Nikolai Kochetov).
  • La fonctionnalité expérimentale hashid a été supprimée en raison d’un bug. La qualité de son implémentation était discutable dès le départ, et elle n’a jamais dépassé le stade expérimental. Cela clôt #52406. #52449 (Alexey Milovidov).

Nouvelle fonctionnalité

  • Ajout du moteur de base de données Overlay pour combiner plusieurs bases de données en une seule. Ajout du moteur de base de données Filesystem pour représenter un répertoire du système de fichiers comme un ensemble de tables implicitement disponibles, avec formats et structures détectés automatiquement. Un nouveau moteur de base de données S3 permet d’interagir en lecture seule avec le stockage S3 en représentant un préfixe comme un ensemble de tables. Un nouveau moteur de base de données HDFS permet d’interagir avec le stockage HDFS de la même manière. #48821 (alekseygolub).
  • Ajout de la prise en charge des disques externes dans Keeper pour stocker les snapshots et les logs. #50098 (Antonio Andelic).
  • Ajout de la prise en charge des globs de sélection multi-répertoires ({}). #50559 (Andrey Zvonov).
  • Le Kafka connector peut récupérer un schéma Avro depuis un schema registry avec une authentification basique à l’aide d’identifiants encodés dans l’URL. #49664 (Ilya Golshtein).
  • Ajout de la fonction arrayJaccardIndex, qui calcule la similarité de Jaccard entre deux tableaux. #50076 (FFFFFFFHHHHHHH).
  • Ajout d’une colonne is_obsolete à system.settings et aux tables similaires. Ferme #50819. #50826 (flynn).
  • Implémentation de la prise en charge des éléments chiffrés dans le fichier de configuration. Ajout de la possibilité d’utiliser du texte chiffré dans les éléments feuilles du fichier de configuration. Le texte est chiffré à l’aide des codecs de chiffrement de la section <encryption_codecs>. #50986 (Roman Vasin).
  • L’algorithme Grace Hash Join s’applique désormais aux FULL et RIGHT JOIN. #49483. #51013 (lgbo).
  • Ajout de la requête SYSTEM STOP LISTEN pour une terminaison plus propre. Ferme #47972. #51016 (Nikolay Degterinsky).
  • Ajout des options input_format_csv_allow_variable_number_of_columns. #51273 (Dmitry Kardymon).
  • Encore une fonctionnalité ennuyeuse : ajout de la fonction substring_index, comme dans Spark ou MySQL. #51472 (李扬).
  • Ajout d’une table système jemalloc_bins pour afficher les statistiques des bins jemalloc. Exemple : SELECT *, size * (nmalloc - ndalloc) AS allocated_bytes FROM system.jemalloc_bins WHERE allocated_bytes > 0 ORDER BY allocated_bytes DESC LIMIT 10. Profitez-en. #51674 (Alexander Gololobov).
  • Ajout du format RowBinaryWithDefaults avec un octet supplémentaire avant chaque colonne servant d’indicateur pour utiliser la valeur par défaut de la colonne. Ferme #50854. #51695 (Kruglov Pavel).
  • Ajout du paramètre default_temporary_table_engine. Identique à default_table_engine, mais pour les tables temporaires. #51292. #51708 (velavokr).
  • Ajout de nouvelles fonctions initcap / initcapUTF8 qui convertissent la première lettre de chaque mot en majuscule et le reste en minuscules. #51735 (Dmitry Kardymon).
  • La commande Create table prend désormais en charge la syntaxe PRIMARY KEY dans la définition d’une colonne. Les colonnes sont ajoutées à l’index primaire dans le même ordre que celui dans lequel elles sont définies. #51881 (Ilya Yatsishin).
  • Ajout de la possibilité d’utiliser des spécificateurs de format de date et d’heure dans les noms des fichiers journaux et des fichiers journaux d’erreurs, soit dans les fichiers de configuration (balises log et errorlog), soit dans les arguments de ligne de commande (--log-file et --errorlog-file). #51945 (Victor Krasnov).
  • Ajout de la statistique de pic de consommation mémoire aux en-têtes HTTP. #51946 (Dmitry Kardymon).
  • Ajout de nouvelles fonctions hasSubsequence (+ versions CaseInsensitive et UTF8) pour rechercher des sous-séquences dans des chaînes. #52050 (Dmitry Kardymon).
  • Ajout de array_agg comme alias de groupArray pour la compatibilité avec PostgreSQL. Clôt #52100. ### Entrée de documentation pour les changements visibles par les utilisateurs. #52135 (flynn).
  • Ajout de any_value comme alias de compatibilité pour la fonction d’agrégation any. Clôt #52140. #52147 (flynn).
  • Ajout de la fonction d’agrégation array_concat_agg pour la compatibilité avec BigQuery ; c’est un alias de groupArrayArray. Clôt #52139. #52149 (flynn).
  • Ajout de OCTET_LENGTH comme alias de length. Clôt #52153. #52176 (FFFFFFFHHHHHHH).
  • Ajout de la fonction firstLine pour extraire la première ligne d’une chaîne sur plusieurs lignes. Cela clôt #51172. #52209 (Mikhail Koviazin).
  • Implémentation du formatage de style KQL pour le type de données Interval. Cela n’est nécessaire que pour assurer la compatibilité avec le langage de requête Kusto. #45671 (ltrk2).
  • Ajout de la query SYSTEM FLUSH ASYNC INSERT QUEUE, qui vide toutes les insertions asynchrones en attente vers les tables de destination. Ajout d’un paramètre côté serveur async_insert_queue_flush_on_shutdown (true par défaut), qui détermine s’il faut vider la file d’attente des insertions asynchrones lors d’un arrêt propre. Le paramètre async_insert_threads est désormais un paramètre côté serveur. #49160 (Anton Popov).
  • Ajout des alias current_database et de la nouvelle fonction current_schemas pour la compatibilité avec PostgreSQL. #51076 (Pedro Riera).
  • Ajout d’un alias pour les fonctions today (désormais aussi disponible sous les noms curdate/current_date) et now (current_timestamp). #52106 (Lloyd-Pottiger).
  • Prise en charge de async_deduplication_token pour les insertions asynchrones. #52136 (Han Fei).
  • Ajout du nouveau paramètre disable_url_encoding, qui permet de désactiver le décodage/l’encodage du chemin de l’URI dans le moteur URL. #52337 (Kruglov Pavel).

Amélioration des performances

  • Active par défaut la sélection automatique du format de sérialisation sparse. Cela améliore les performances. Ce format est pris en charge depuis la version 22.1. Après ce changement, il pourrait ne plus être possible de revenir à une version antérieure à 22.1. Une régression de version peut nécessiter de définir ratio_of_defaults_for_sparse_serialization=0.9375 55153. Vous pouvez désactiver l’utilisation du format de sérialisation sparse en définissant le paramètre ratio_of_defaults_for_sparse_serialization = 1 pour vos tables MergeTree. #49631 (Alexey Milovidov).
  • Active par défaut les paramètres move_all_conditions_to_prewhere et enable_multiple_prewhere_read_steps. #46365 (Alexander Gololobov).
  • Améliore les performances de certaines requêtes en optimisant l’allocator. #46416 (Azat Khuzhin).
  • Nous utilisons désormais des tâches de taille fixe dans MergeTreePrefetchedReadPool, comme dans MergeTreeReadPool. De plus, nous utilisons maintenant un pool de connexions pour les requêtes S3. #49732 (Nikita Taranov).
  • Davantage de pushdown vers le côté droit de la jointure. #50532 (Nikita Taranov).
  • Améliore la jointure grace_hash en réservant la taille de la table de hachage (resoumission). #50875 (lgbo).
  • L’attente sur un verrou dans OpenedFileCache pouvait parfois être sensible. Nous l’avons segmenté en plusieurs sous-maps (chacune avec son propre verrou) pour éviter la contention. #51341 (Nikita Taranov).
  • Déplace les conditions portant sur les colonnes de clé primaire à la fin de la chaîne PREWHERE. L’idée est que les conditions sur les colonnes de PK seront probablement utilisées lors de l’analyse de la PK et n’apporteront donc pas grand-chose de plus au filtrage PREWHERE. #51958 (Alexander Gololobov).
  • Accélère COUNT(DISTINCT) pour les types String en intégrant SipHash directement dans le code. Les tests de performance de OnTime sur la machine ICX (processeur Intel Xeon Platinum 8380, 80 cœurs, 160 threads) montrent que ce changement peut apporter une amélioration de 11.6% du QPS de la requête Q8, sans impact sur les autres. #52036 (Zhiguo Zhou).
  • Active allow_vertical_merges_from_compact_to_wide_parts par défaut. Cela réduira l’utilisation mémoire pendant les merges. #52295 (Alexey Milovidov).
  • Corrige une analyse incorrecte des projections qui invalide les clés primaires. Ce problème ne se produit que lorsque query_plan_optimize_primary_key = 1, query_plan_optimize_projection = 1. Corrige #48823. Corrige #51173. #52308 (Amos Bird).
  • Réduit le nombre d’appels système dans FileCache::loadMetadata, ce qui accélère le démarrage du server si le filesystem cache est configuré. #52435 (Raúl Marín).
  • Permet de définir une limite inférieure stricte pour la taille des segments de fichier en téléchargeant les données restantes en arrière-plan. La taille minimale d’un segment de fichier (si la taille réelle du fichier est supérieure) se configure via le paramètre de cache boundary_alignment, avec 4Mi par défaut. Le nombre de threads d’arrière-plan se configure via le paramètre de cache background_download_threads, avec 2 par défaut. De plus, max_file_segment_size a été augmenté de 8Mi à 32Mi dans cette PR. #51000 (Kseniia Sumarokova).
  • Réduction des timeouts par défaut pour S3, de 30 secondes à 3 secondes, et pour les autres connexions HTTP, de 180 secondes à 30 secondes. #51171 (Michael Kolupaev).
  • Nouveau paramètre merge_tree_determine_task_size_by_prewhere_columns ajouté. S’il est défini sur true, seules les tailles des colonnes de la section PREWHERE seront prises en compte pour déterminer la taille de la tâche de lecture. Sinon, toutes les colonnes de la requête sont prises en compte. #52606 (Nikita Taranov).

Amélioration

  • Utiliser read_bytes/total_bytes_to_read pour la barre de progression dans les fonctions de table s3/file/url/… afin de mieux indiquer la progression. #51286 (Kruglov Pavel).
  • Introduction d’un paramètre de table wait_for_unique_parts_send_before_shutdown_ms, qui spécifie le temps pendant lequel une réplique attend avant de fermer le handler interserver pour les envois répliqués. Correction également d’une incohérence dans l’arrêt des tables et des handlers interserver : désormais, le serveur arrête d’abord les tables, puis ferme ensuite les handlers interserver. #51851 (alesapin).
  • Autoriser le FETCH SQL standard sans OFFSET. Voir https://antonz.org/sql-fetch/. #51293 (Alexey Milovidov).
  • Autoriser le filtrage des en-têtes HTTP pour les fonctions de table URL/S3 avec la nouvelle section http_forbid_headers dans la configuration. Les correspondances exactes et les filtres regexp sont pris en charge. #51038 (Nikolay Degterinsky).
  • Ne pas afficher dans les logs de messages indiquant 16 EiB d’espace libre, car cela n’a pas de sens. Cela clôt #49320. #49342 (Alexey Milovidov).
  • Vérifier correctement la limite de la fonction sleepEachRow. Ajout d’un paramètre function_sleep_max_microseconds_per_block. Cela est nécessaire pour le fuzzer de requêtes générique. #49343 (Alexey Milovidov).
  • Correction de deux problèmes dans les fonctions geoHash. #50066 (李扬).
  • Journaliser les requêtes de flush d’async insert dans system.query_log. #51160 (Raúl Marín).
  • Les fonctions date_diff et age prennent désormais en charge les unités milliseconde et microseconde, et fonctionnent avec une précision à la microseconde. #51291 (Dmitry Kardymon).
  • Amélioration de l’analyse du path dans clickhouse-keeper-client. #51359 (Azat Khuzhin).
  • Un produit tiers dépendant de ClickHouse (Gluten: a Plugin to Double Spark SQL’s Performance) comportait un bug. Ce correctif évite un heap overflow dans ce produit tiers lors de la lecture depuis HDFS. #51386 (李扬).
  • Ajout de la possibilité de désactiver la copie native pour S3 (paramètre allow_s3_native_copy pour BACKUP/RESTORE, et s3_allow_native_copy pour les disques s3/s3_plain). #51448 (Azat Khuzhin).
  • Ajout de la colonne primary_key_size à la table system.parts pour afficher la taille sur disque de la clé primaire compressée. Clôt #51400. #51496 (Yarik Briukhovetskyi).
  • Autoriser l’exécution de clickhouse-local sans procfs, sans répertoire personnel existant et sans plugin de résolution de noms de glibc. #51518 (Alexey Milovidov).
  • Ajout de l’espace réservé %a pour le nom de fichier complet dans le paramètre rename&#95;files&#95;after&#95;processing. #51603 (Kruglov Pavel).
  • Ajout de la colonne modification_time à system.parts_columns. #51685 (Azat Khuzhin).
  • Ajout du nouveau paramètre input_format_csv_use_default_on_bad_values au format CSV, qui permet d’insérer une valeur par défaut lorsque l’analyse d’un champ individuel échoue. #51716 (KevinyhZou).
  • Ajout d’un flush du journal de crash sur le disque après un crash inattendu. #51720 (Alexey Gerasimchuck).
  • Correction du comportement sur la page du tableau de bord, où les erreurs sans rapport avec l’authentification n’étaient pas affichées. Correction également du comportement de chevauchement des graphiques. #51744 (Zach Naimon).
  • Autorisation de la conversion de UUID en UInt128. #51765 (Dmitry Kardymon).
  • Ajout de la prise en charge des arguments Nullable pour la fonction range. #51767 (Dmitry Kardymon).
  • Conversion des conditions du type toyear(x) = c en c1 <= x < c2. #51795 (Han Fei).
  • Amélioration de la compatibilité MySQL de l’instruction SHOW INDEX. #51796 (Robert Schulze).
  • Correction de use_structure_from_insertion_table_in_table_functions, qui ne fonctionnait pas avec les colonnes MATERIALIZED et ALIAS. Ferme #51817. Ferme #51019. #51825 (flynn).
  • Le dictionnaire cache ne demande désormais que des clés uniques à la source. Ferme #51762. #51853 (Maksim Kita).
  • Correction du cas où les paramètres n’étaient pas appliqués à une requête EXPLAIN lorsqu’un FORMAT était fourni. #51859 (Nikita Taranov).
  • Autorisation de SETTINGS avant FORMAT dans la requête DESCRIBE TABLE pour assurer la compatibilité avec la requête SELECT. Ferme #51544. #51899 (Nikolay Degterinsky).
  • Les entiers encodés en Var-Int (par exemple utilisés par le protocole natif) peuvent désormais utiliser toute la plage sur 64 bits. Il est conseillé aux clients tiers de mettre à jour leur code var-int en conséquence. #51905 (Robert Schulze).
  • Mise à jour des certificats lorsqu’ils changent, sans qu’il soit nécessaire d’exécuter manuellement SYSTEM RELOAD CONFIG. #52030 (Mike Kot).
  • Ajout du paramètre allow_create_index_without_type, qui permet d’ignorer les requêtes ADD INDEX sans TYPE spécifié. Les requêtes SQL standard réussiront simplement sans modifier le schéma de la table. #52056 (Ilya Yatsishin).
  • Les messages de log sont écrits dans system.text_log dès le démarrage du serveur. #52113 (Dmitry Kardymon).
  • Lorsque le endpoint HTTP possède plusieurs adresses IP et que la première est inaccessible, une exception de timeout était levée. La création de session gère désormais tous les endpoints résolus. #52116 (Aleksei Filatov).
  • Le input format Avro prend désormais en charge Union même s’il ne contient qu’un seul type. Clôt #52131. #52137 (flynn).
  • Ajout du paramètre optimize_use_implicit_projections pour désactiver les projections implicites (actuellement, uniquement la projection min_max_count). #52152 (Amos Bird).
  • Il était possible d’utiliser la fonction hasToken pour provoquer une boucle infinie. Ce n’est plus possible. Clôt #52156. #52160 (Alexey Milovidov).
  • Crée les ancêtres ZK de manière optimiste. #52195 (Raúl Marín).
  • Correction de #50582. Évite l’erreur Not found column ... in block dans certains cas de lecture ordonnée et de constantes. #52259 (Chen768959).
  • Vérifie le plus tôt possible côté ClickHouse si les primitives Geo S2 sont invalides. Clôt : #27090. #52260 (Nikita Mikhaylov).
  • Réajoute les informations QueryAccessInfo de projection manquantes lorsque query_plan_optimize_projection = 1. Corrige #50183. Corrige #50093. #52327 (Amos Bird).
  • Lorsque ZooKeeperRetriesControl relance une erreur, il est plus utile de voir sa stack trace d’origine plutôt que celle de ZooKeeperRetriesControl lui-même. #52347 (Vitaly Baranov).
  • Attend le verrou de zero copy replication même si certains disks ne le prennent pas en charge. #52376 (Raúl Marín).
  • Désormais, le port interserver ne sera fermé qu’après l’arrêt des tables. #52498 (alesapin).

Fonctionnalité expérimentale

  • L’écriture de fichiers Parquet est 10x plus rapide ; elle est désormais multithreadée. La vitesse est presque la même qu’en lecture. #49367 (Michael Kolupaev). Ce comportement est contrôlé par le paramètre output_format_parquet_use_custom_encoder, désactivé par défaut, car cette fonctionnalité n’est pas encore optimale.
  • Ajout de la prise en charge de PRQL comme langage de requête. #50686 (János Benjamin Antal).
  • Il est désormais possible d’ajouter un nom de disque pour les disques personnalisés. Auparavant, les disques personnalisés utilisaient un nom de disque généré en interne. Cela est maintenant possible avec disk = disk_<name>(...) (par ex. le disque portera le nom name). #51552 (Kseniia Sumarokova). Cette syntaxe peut être modifiée dans cette version.
  • (experimental MaterializedMySQL) Correction d’un plantage lorsque mysqlxx::Pool::Entry est utilisé après sa déconnexion. #52063 (Val Doroshchuk).
  • (experimental MaterializedMySQL) CREATE TABLE ... AS SELECT .. est désormais pris en charge dans MaterializedMySQL. #52067 (Val Doroshchuk).
  • (experimental MaterializedMySQL) Introduction de la conversion automatique des types texte en UTF-8 pour MaterializedMySQL. #52084 (Val Doroshchuk).
  • (experimental MaterializedMySQL) Les chaînes UTF-8 non entre guillemets sont désormais prises en charge dans le DDL pour MaterializedMySQL. #52318 (Val Doroshchuk).
  • (experimental MaterializedMySQL) Les commentaires entre guillemets doubles sont désormais pris en charge dans MaterializedMySQL. #52355 (Val Doroshchuk).
  • Mise à niveau d’Intel QPL de v1.1.0 vers v1.2.0 2. mise à niveau d’Intel accel-config de v3.5 vers v4.0 3. correction d’un problème où les défauts Device IOTLB ont un impact important sur les performances des accélérateurs IAA. #52180 (jasperzhu).
  • Le paramètre session_timezone (nouveau dans la version 23.6) repasse au statut expérimental. #52445 (Alexey Milovidov).
  • Prise en charge de la commande ZooKeeper reconfig pour ClickHouse Keeper avec reconfiguration incrémentielle, qui peut être activée via le paramètre keeper_server.enable_reconfiguration. Prise en charge de l’ajout et de la suppression de serveurs, ainsi que de la modification de leurs priorités. #49450 (Mike Kot). Il semble que cette fonctionnalité soit incomplète.

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

  • Ajout de builds ClickHouse expérimentales pour Linux RISC-V 64 dans la CI. #31398 (Alexey Milovidov).
  • Ajout d’une vérification de test d’intégration avec l’analyseur activé. #50926 #52210 (Dmitry Novik).
  • Builds reproductibles pour Rust. #52395 (Azat Khuzhin).
  • Mise à jour des dépendances Cargo. #51721 (Raúl Marín).
  • La fonction CHColumnToArrowColumn::fillArrowArrayWithArrayColumnData fonctionne désormais avec des tableaux Nullable, qui ne sont pas possibles dans ClickHouse, mais sont nécessaires pour Gluten. #52112 (李扬).
  • Nous avons mis à jour la bibliothèque CCTZ vers la branche master, mais cela n’entraîne aucun changement visible pour l’utilisateur. #52124 (Alexey Milovidov).
  • La table system.licenses inclut désormais la bibliothèque Poco issue d’un fork. Cela résout #52066. #52127 (Alexey Milovidov).
  • Vérifiez qu’il n’existe aucun cas de mauvaise ponctuation : espace avant une virgule, comme dans Hello ,world au lieu de Hello, world. #52549 (Alexey Milovidov).

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

Version de ClickHouse 23.6, 2023-06-29. Présentation, Vidéo

changement non rétrocompatible

  • Suppression de la fonctionnalité do_not_evict_index_and_mark_files du cache fs. Cette fonctionnalité ne faisait qu’empirer les choses. #51253 (Kseniia Sumarokova).
  • Suppression de la prise en charge d’ALTER pour LIVE VIEW Experimental. #51287 (Alexey Milovidov).
  • Réduction des valeurs par défaut de http_max_field_value_size et http_max_field_name_size à 128 KiB. #51163 (Mikhail f. Shiryaev).
  • Les métriques CGroups liées au CPU sont remplacées par une seule métrique, CGroupMaxCPU, pour en faciliter l’utilisation. Les métriques d’utilisation du CPU Normalized seront normalisées en fonction des limites de CGroups, au lieu du nombre total de CPU, lorsqu’elles sont définies. Ceci clôt #50836. #50835 (Alexey Milovidov).

Nouvelle fonctionnalité

  • La fonction transform, ainsi que CASE avec correspondance sur les valeurs, prennent désormais en charge tous les types de données. Résout #29730. Résout #32387. Résout #50827. Résout #31336. Résout #40493. #51351 (Alexey Milovidov).
  • Ajout de l’option --rename_files_after_processing <pattern>. Résout #34207. #49626 (alekseygolub).
  • Ajout de la prise en charge du modificateur TRUNCATE dans la clause INTO OUTFILE. Il est recommandé d’utiliser APPEND ou TRUNCATE avec INTO OUTFILE lorsque le fichier existe. #50950 (alekar).
  • Ajout du moteur de table Redis et de la fonction de table redis. Cela permet d’interroger des serveurs Redis externes. #50150 (JackyWoo).
  • Possibilité d’ignorer les fichiers vides dans les fonctions de table file/s3/url/hdfs à l’aide des paramètres s3_skip_empty_files, hdfs_skip_empty_files, engine_file_skip_empty_files, engine_url_skip_empty_files. #50364 (Kruglov Pavel).
  • Ajout d’un nouveau paramètre nommé use_mysql_types_in_show_columns pour modifier l’instruction SQL SHOW COLUMNS afin d’afficher les types équivalents à ceux de MySQL lorsqu’un client est connecté via le port de compatibilité MySQL. #49577 (Thomas Panetti).
  • clickhouse-client peut désormais être appelé avec une chaîne de connexion au lieu de “—host”, “—port”, “—user”, etc. #50689 (Alexey Gerasimchuck).
  • Ajout du paramètre session_timezone ; il est utilisé comme fuseau horaire par défaut pour une session lorsqu’aucun fuseau horaire n’est explicitement spécifié. #44149 (Andrey Zvonov).
  • Le codec DEFLATE_QPL est désormais contrôlé via le paramètre serveur “enable_deflate_qpl_codec” (par défaut : false) au lieu du paramètre “allow_experimental_codecs”. DEFLATE_QPL n’est donc plus expérimental. #50775 (Robert Schulze).

Amélioration des performances

  • Amélioration de la planification des tâches de sélection des fusions et de nettoyage dans ReplicatedMergeTree. Ces tâches ne seront pas exécutées trop հաճախ lorsqu’il n’y a rien à fusionner ou à nettoyer. Ajout des paramètres max_merge_selecting_sleep_ms, merge_selecting_sleep_slowdown_factor, max_cleanup_delay_period et cleanup_thread_preferred_points_per_iteration. Cela devrait résoudre #31919. #50107 (Alexander Tokmakov).
  • Activation de la descente des filtres à travers les jointures croisées. #50605 (Han Fei).
  • Amélioration des performances lorsque QueryProfiler est activé grâce à l’utilisation d’un timer_id local au thread au lieu d’un objet global. #48778 (Jiebin Sun).
  • Réécriture du format d’entrée/sortie CapnProto pour en améliorer les performances. Les noms de colonnes et les champs CapnProto sont désormais traités sans tenir compte de la casse ; correction de la lecture/écriture des champs de structures imbriquées. #49752 (Kruglov Pavel).
  • Optimisation des performances d’écriture de Parquet pour les threads parallèles. #50102 (Hongbin Ma).
  • Désactivation de parallelize_output_from_storages pour le traitement des MATERIALIZED VIEWs et des stockages ne contenant qu’un seul block. #50214 (Azat Khuzhin).
  • Fusion de la PR #46558. Évite la permutation de blocks lors du tri si le block est déjà trié. #50697 (Alexey Milovidov, Maksim Kita).
  • Exécution en parallèle de plusieurs requêtes de listing vers ZooKeeper afin d’accélérer la lecture depuis la table system.zookeeper. #51042 (Alexander Gololobov).
  • Accélération de l’initialisation des tables de lookup DateTime pour les fuseaux horaires. Cela devrait réduire le temps de démarrage/connexion de clickhouse-client, en particulier dans les builds de débogage, car cette étape est assez lourde. #51347 (Alexander Gololobov).
  • Correction de la lenteur des data lakes due aux requêtes head synchrones. (Problème lié à la lenteur d’Iceberg/DeltaLake/Hudi lorsqu’il y a beaucoup de fichiers.) #50976 (Kseniia Sumarokova).
  • Ne plus lire toutes les colonnes de la table de droite dans un GLOBAL JOIN. #50721 (Nikolai Kochetov).

Fonctionnalité expérimentale

  • Prise en charge des répliques parallèles par l’analyseur. #50441 (Raúl Marín).
  • Ajout d’un délai d’attente aléatoire avant l’exécution de fusions/mutations volumineuses afin de mieux répartir la charge entre les répliques en cas de réplication zero-copy. #51282 (alesapin).
  • Ne pas répliquer les requêtes ALTER PARTITION ni les mutations via la base de données Replicated si elle ne comporte qu’un seul shard et que la table sous-jacente est ReplicatedMergeTree. #51049 (Alexander Tokmakov).

Amélioration

  • Assouplit les seuils de « Too many parts » pour les adapter aux usages actuels. Rétablit la contre-pression pendant les requêtes d’insert de longue durée. #50856 (Alexey Milovidov).
  • Permet de convertir une IPv6 en adresse IPv4 pour le CIDR ::ffff:0:0/96 (adresses IPv4 mappées). #49759 (Yakov Olkhovskiy).
  • Met à jour le protocole MongoDB pour prendre en charge MongoDB 5.1 et les versions plus récentes. La prise en charge des versions utilisant l’ancien protocole (<3.6) est conservée. Corrige #45621, #49879. #50061 (Nikolay Degterinsky).
  • Ajoute le paramètre input_format_max_bytes_to_read_for_schema_inference pour limiter le nombre d’octets lus lors de l’inférence de schéma. Corrige #50577. #50592 (Kruglov Pavel).
  • Respecte le paramètre input_format_null_as_default lors de l’inférence de schéma. #50602 (Kruglov Pavel).
  • Permet d’ignorer les lignes vides finales dans les formats CSV/TSV/CustomSeparated via les paramètres input_format_csv_skip_trailing_empty_lines, input_format_tsv_skip_trailing_empty_lines et input_format_custom_skip_trailing_empty_lines (désactivés par défaut). Corrige #49315. #50635 (Kruglov Pavel).
  • Les fonctions “toDateOrDefault|OrNull” et “accuateCast[OrDefault|OrNull]” analysent désormais correctement les arguments numériques. #50709 (Dmitry Kardymon).
  • Prend en charge les fichiers CSV avec des délimiteurs de champ composés d’espaces ou de \t, ces délimiteurs étant également pris en charge dans Spark. #50712 (KevinyhZou).
  • Les paramètres number_of_mutations_to_delay et number_of_mutations_to_throw sont désormais activés par défaut, avec les valeurs 500 et 1000 respectivement. #50726 (Anton Popov).
  • Le dashboard affiche correctement les valeurs manquantes. Cela corrige #50831. #50832 (Alexey Milovidov).
  • Ajoute la possibilité d’utiliser, dans les fonctions parseDateTimeBestEffort* et parseDateTime64BestEffort*, des arguments de date et d’heure au format de timestamp syslog. #50925 (Victor Krasnov).
  • Le paramètre de ligne de commande “—password” dans clickhouse-client ne peut désormais être spécifié qu’une seule fois. #50966 (Alexey Gerasimchuck).
  • Utilise hash_of_all_files de system.parts pour vérifier l’identité des parts lors des sauvegardes sur cluster. #50997 (Vitaly Baranov).
  • La table système zookeeper_connection connected_time indique l’heure à laquelle la connexion est établie (format standard), et session_uptime_elapsed_seconds a été ajoutée pour indiquer la durée de la session de connexion établie (en secondes). #51026 (郭小龙).
  • Amélioration de la barre de progression pour les fonctions de table file/S3/hdfs/url grâce à l’utilisation de la taille des blocs des données source et d’un comptage incrémental de la taille totale dans chaque thread. Correction de la barre de progression pour les fonctions *Cluster. Cela résout #47250. #51088 (Kruglov Pavel).
  • Ajout de total_bytes_to_read au paquet Progress dans le protocole TCP pour améliorer la barre de progression. #51158 (Kruglov Pavel).
  • Amélioration de la vérification des data parts sur les disques avec cache du système de fichiers. #51164 (Anton Popov).
  • Correction de current_elements_num, qui était parfois incorrect dans le cache fs. #51242 (Kseniia Sumarokova).

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

  • Ajout d’un keeper-client intégré au binaire Keeper autonome. #50964 (pufit).
  • La version effective de LZ4 est désormais utilisée. #50621 (Nikita Taranov).
  • Le serveur ClickHouse affichera la liste des paramètres modifiés en cas d’erreur fatale. Cela corrige #51137. #51138 (Alexey Milovidov).
  • Possibilité de compiler ClickHouse avec clang-17. #51300 (Alexey Milovidov).
  • Le check SQLancer est désormais considéré comme stable, car les bogues qu’il avait déclenchés ont été corrigés. Les échecs du check SQLancer seront désormais signalés avec le statut de check échoué. #51340 (Ilya Yatsishin).
  • Découpage de l’énorme RUN du Dockerfile en blocs conditionnels plus petits. Installation des outils nécessaires à la demande dans la même couche RUN, puis suppression de ceux-ci. Mise à niveau de l’OS une seule fois au début. Utilisation d’une méthode moderne pour vérifier le dépôt signé. Rétrogradation du dépôt de base vers ubuntu:20.04 pour résoudre les problèmes sur les anciennes versions de Docker. Mise à niveau de la version de golang pour corriger les vulnérabilités de golang. #51504 (Mikhail f. Shiryaev).

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

  • Signaler correctement l’état de chargement des dictionnaires exécutables #48775 (Anton Kozlov).
  • Mutation correcte des index de saut et des projections #50104 (Amos Bird).
  • Nettoyage des parts déplacées #50489 (vdimir).
  • Correction de la rétrocompatibilité du hachage des types IP dans les fonctions d’agrégation #50551 (Yakov Olkhovskiy).
  • Correction du nombre de lignes erroné renvoyé par les tables de la famille Log après un truncate #50585 (flynn).
  • Correction d’un bug dans la fusion parallèle de uniqExact #50590 (Nikita Taranov).
  • Annulation des modifications récentes de grace hash join #50699 (vdimir).
  • Query Cache : tentative de correction d’un cast incorrect de ColumnConst vers ColumnVector<char8_t> #50704 (Robert Schulze).
  • Éviter de stocker dans Keeper des logs contenant une opération inconnue #50751 (Antonio Andelic).
  • Prise en charge de DateTime64 par SummingMergeTree #50797 (Jordi Villar).
  • Ajout d’un paramètre de compatibilité pour les fuseaux horaires non constants #50834 (Robert Schulze).
  • Correction du hachage des paramètres LDAP dans les entrées du cache #50865 (Julian Maicher).
  • Dans le format Parquet, utiliser comme solution de repli l’analyse d’un grand entier à partir de String au lieu de lever une exception #50873 (Kruglov Pavel).
  • Correction d’une vérification trop fréquente du fichier de verrouillage pendant l’écriture d’une sauvegarde #50889 (Vitaly Baranov).
  • Ne pas appliquer de projection si la lecture ordonnée était activée. #50923 (Nikolai Kochetov).
  • Correction d’une situation de concurrence dans l’itérateur Azure blob storage #50936 (SmitaRKulkarni).
  • Correction de la propagation erronée de sort_description dans CreatingSets #50955 (Nikita Taranov).
  • Correction de l’analyse des métadonnées optionnelles d’Iceberg v2 #50974 (Kseniia Sumarokova).
  • MaterializedMySQL : conserver les parenthèses pour les redéfinitions de tables vides #50977 (Val Doroshchuk).
  • Correction d’un plantage dans BackupCoordinationStageSync::setError() #51012 (Vitaly Baranov).
  • Correction d’un dysfonctionnement subtil du copy-on-write du dictionnaire ColumnLowCardinality #51064 (Michael Kolupaev).
  • Génère des IV sûrs #51086 (Salvatore Mesoraca).
  • Corrige l’inefficacité du query cache pour les SELECT avec des sous-requêtes #51132 (Robert Schulze).
  • Corrige l’index Set avec une comparaison constante Nullable. #51205 (Nikolai Kochetov).
  • Corrige un plantage dans les fonctions s3 et s3Cluster #51209 (Nikolay Degterinsky).
  • Corrige un plantage lié aux expressions compilées #51231 (LiuNeng).
  • Corrige une erreur d’utilisation après libération dans StorageURL lors d’un changement d’URL #51260 (Michael Kolupaev).
  • Met à jour la vérification de la vue paramétrée #51272 (SmitaRKulkarni).
  • Corrige l’écriture multiple du même fichier dans la sauvegarde #51299 (Vitaly Baranov).
  • Corrige un échec du fuzzer dans ActionsDAG #51301 (Alexey Milovidov).
  • Supprime les éléments parasites de la fonction transform #51350 (Alexey Milovidov).

version de ClickHouse 23.5, 2023-06-08. Présentation, Vidéo

Notes de mise à niveau

  • Compresser les marks et la clé primaire par défaut. Cela réduit considérablement le temps des requêtes à froid. Notes de mise à niveau : la prise en charge des marks compressés et de la clé primaire compressée a été ajoutée dans la version 22.9. Si vous avez activé les marks compressés ou la clé primaire compressée, ou si vous avez installé la version 23.5 ou une version plus récente, dans laquelle les marks compressés ou la clé primaire compressée sont activés par défaut, vous ne pourrez pas revenir à la version 22.8 ou antérieure. Vous pouvez également désactiver explicitement les marks compressés ou les clés primaires compressées en spécifiant les paramètres compress_marks et compress_primary_key dans la section <merge_tree> du fichier de configuration du serveur. Notes de mise à niveau : Si vous effectuez la mise à niveau depuis une version antérieure à 22.9, vous devez soit mettre à niveau toutes les répliques en même temps, soit désactiver la compression avant la mise à niveau, soit passer par une version intermédiaire où les marks compressés sont pris en charge sans être activés par défaut, comme 23.3. #42587 (Alexey Milovidov).
  • Faire en sorte que le stockage objet local fonctionne de manière cohérente avec le stockage objet S3, corriger le problème d’ajout en fin (ferme #48465) et le rendre configurable comme stockage indépendant. Ce changement n’est pas rétrocompatible, car le cache au-dessus du stockage objet local n’est pas compatible avec les versions précédentes. #48791 (Kseniia Sumarokova).
  • La fonctionnalité expérimentale « in-memory data parts » a été supprimée. Le format de données est toujours pris en charge, mais les paramètres sont sans effet, et des parts au format compact ou wide seront utilisées à la place. Cela ferme #45409. #49429 (Alexey Milovidov).
  • Les valeurs par défaut des paramètres parallelize_output_from_storages et input_format_parquet_preserve_order ont été modifiées. Cela permet à ClickHouse de réordonner les lignes lors de la lecture de fichiers (par ex. CSV ou Parquet), ce qui améliore fortement les performances dans de nombreux cas. Pour retrouver l’ancien comportement de préservation de l’ordre, utilisez parallelize_output_from_storages = 0, input_format_parquet_preserve_order = 1. #49479 (Michael Kolupaev).
  • Rendre les projections prêtes pour la production. Ajouter le paramètre optimize_use_projections pour contrôler si les projections seront sélectionnées pour les requêtes SELECT. Le paramètre allow_experimental_projection_optimization est obsolète et n’a aucun effet. #49719 (Alexey Milovidov).
  • Marquer joinGet comme non déterministe (comme dictGet). Cela permet de les utiliser dans des mutations sans paramètre supplémentaire. #49843 (Azat Khuzhin).
  • Annuler la modification « groupArray returns cannot be nullable » (en raison d’une rupture de compatibilité binaire pour groupArray/groupArrayLast/groupArraySample sur les types Nullable, ce qui entraînera probablement TOO_LARGE_ARRAY_SIZE ou CANNOT_READ_ALL_DATA). #49971 (Azat Khuzhin).
  • Le paramètre enable_memory_bound_merging_of_aggregation_results est activé par défaut. Si vous effectuez une mise à jour depuis une version antérieure à 22.12, nous vous recommandons de définir ce paramètre sur false jusqu’à la fin de la mise à jour. #50319 (Nikita Taranov).

nouvelle fonctionnalité

  • Ajout du moteur de stockage AzureBlobStorage et de la table function azureBlobStorage. L’ensemble des fonctionnalités prises en charge est très similaire à celui du stockage/de la table function S3 [#50604] (https://github.com/ClickHouse/ClickHouse/pull/50604) (alesapin) (SmitaRKulkarni.
  • Ajout du client CLI natif de ClickHouse Keeper, disponible via clickhouse keeper-client #47414 (pufit).
  • Ajout de la table function urlCluster. Refactorisation de toutes les table functions *Cluster afin de réduire la duplication de code. La schema inference fonctionne désormais pour toutes les signatures possibles des fonctions *Cluster ainsi que pour les named collections. Clôt #38499. #45427 (attack204), Pavel Kruglov.
  • Le query cache peut désormais être utilisé pour des workloads de production. #47977 (Robert Schulze). Le query cache prend désormais en charge les queries avec le modificateur totals et extremes. #48853 (Robert Schulze). Le paramètre allow_experimental_query_cache est désormais obsolete, pour des raisons de rétrocompatibilité. Il a été supprimé dans https://github.com/ClickHouse/ClickHouse/pull/47977. #49934 (Timur Solodovnikov).
  • Les data types géographiques (Point, Ring, Polygon et MultiPolygon) sont prêts pour la production. #50022 (Alexey Milovidov).
  • Ajout de la schema inference aux table engines PostgreSQL, MySQL, MeiliSearch et SQLite. Clôt #49972. #50000 (Nikolay Degterinsky).
  • Le type de password dans des queries telles que CREATE USER u IDENTIFIED BY 'p' sera automatiquement défini selon le paramètre default_password_type dans le config.xml du server. Clôt #42915. #44674 (Nikolay Degterinsky).
  • Ajout du type de password authentication bcrypt. Clôt #34599. #44905 (Nikolay Degterinsky).
  • Introduction du nouveau keyword INTO OUTFILE 'file.txt' APPEND. #48880 (alekar).
  • Ajout de la table system.zookeeper_connection, qui affiche des informations sur les connections à Keeper. #45245 (mateng915).
  • Ajout de la nouvelle fonction generateRandomStructure, qui génère une structure de table aléatoire. Elle peut être utilisée en combinaison avec la table function generateRandom. #47409 (Kruglov Pavel).
  • Autorise l’utilisation de CASE sans branche ELSE et étend transform pour prendre en charge davantage de types. Corrige également certains problèmes qui faisaient que transform() renvoyait des résultats incorrects lorsque des types Decimal étaient mélangés à d’autres types numériques. #48300 (Salvatore Mesoraca). This closes #2655. This closes #9596. This closes #38666.
  • Ajout du chiffrement côté serveur avec des clés KMS pour les tables S3, ainsi que du paramètre header pour les disques S3. Résout #48723. #48724 (Johann Gan).
  • Ajout de MemoryTracker pour les tâches d’arrière-plan (merges et mutations). Introduction des paramètres merges_mutations_memory_usage_soft_limit et merges_mutations_memory_usage_to_ram_ratio, qui définissent la limite mémoire souple pour les merges et mutations. Si cette limite est atteinte, ClickHouse ne planifiera plus de nouvelles tâches de merge ou de mutation. La Metric MergesMutationsMemoryTracking est également ajoutée afin d’observer l’utilisation mémoire actuelle des tâches d’arrière-plan. Nouvelle soumission de #46089. Résout #48774. #48787 (Dmitry Novik).
  • La fonction dotProduct fonctionne avec les Array. #49050 (FFFFFFFHHHHHHH).
  • Prise en charge de l’instruction SHOW INDEX pour améliorer la compatibilité avec MySQL. #49158 (Robert Schulze).
  • Ajout de la prise en charge des colonnes virtuelles _file et _path dans la fonction de table url. - Amélioration du message d’erreur pour la fonction de table url. - résout #49231 - résout #49232. #49356 (Ziyi Tan).
  • Ajout du champ grants dans le fichier users.xml, ce qui permet de spécifier des droits pour les utilisateurs. #49381 (pufit).
  • Prise en charge des jointures full/right à l’aide de l’algorithme grace hash join. #49483 (lgbo).
  • Le modificateur WITH FILL regroupe le remplissage par préfixe de tri. Contrôlé par le paramètre use_with_fill_by_sorting_prefix (activé par défaut). En lien avec #33203#issuecomment-1418736794. #49503 (Igor Nikonov).
  • clickhouse-client accepte désormais les requêtes après “—multiquery” lorsque “—query” (ou “-q”) est absent. Exemple : clickhouse-client —multiquery “select 1; select 2;”. #49870 (Alexey Gerasimchuk).
  • Ajout d’un handshake_timeout distinct pour recevoir le paquet Hello depuis une réplique. Résout #48854. #49948 (Kruglov Pavel).
  • Ajout d’une fonction “space” qui répète un espace autant de fois qu’indiqué. #50103 (Robert Schulze).
  • Ajout de l’option —input_format_csv_trim_whitespaces. #50215 (Alexey Gerasimchuk).
  • Autorise la fonction dictGetAll pour les dictionnaires regexp tree à renvoyer, sous forme de tableaux, les valeurs issues de plusieurs correspondances. Clôt #50254. #50255 (Johann Gan).
  • Ajout de la fonction toLastDayOfWeek pour arrondir une date ou une date avec heure au samedi ou au dimanche supérieur le plus proche. #50315 (Victor Krasnov).
  • Possibilité d’ignorer un index de saut en spécifiant ignore_data_skipping_indices. #50329 (Boris Kuschel).
  • Ajout de la table system.user_processes et de la requête SHOW USER PROCESSES pour afficher les informations mémoire et les ProfileEvents au niveau utilisateur. #50492 (János Benjamin Antal).
  • Ajout du paramètre de serveur et de format display_secrets_in_show_and_select pour afficher les secrets des tables, bases de données, fonctions de table et dictionnaires. Ajout du privilège displaySecretsInShowAndSelect, qui contrôle quels utilisateurs peuvent voir les secrets. #46528 (Mike Kot).
  • Autorise la définition d’une ROW POLICY pour toutes les tables appartenant à une DATABASE. #47640 (Ilya Golshtein).

Amélioration des performances

  • Compresse par défaut les marks et la clé primaire. Cela réduit considérablement le temps des requêtes à froid. Notes de mise à niveau : la prise en charge des marks compressés et de la clé primaire a été ajoutée dans la version 22.9. Si vous avez activé les marks compressés ou la clé primaire, ou installé la version 23.5 ou ultérieure, qui active par défaut les marks compressés ou la clé primaire, vous ne pourrez pas revenir à la version 22.8 ou antérieure. Vous pouvez également désactiver explicitement les marks compressés ou la clé primaire en spécifiant les paramètres compress_marks et compress_primary_key dans la section <merge_tree> du fichier de configuration du serveur. #42587 (Alexey Milovidov).
  • Le nouveau paramètre s3_max_inflight_parts_for_one_file définit la limite du nombre de parts chargées simultanément via une requête de multipart upload pour un même fichier. #49961 (Sema Checherinda).
  • Lors de la lecture de plusieurs fichiers, réduit le nombre de threads de parsing parallèles pour chaque fichier. Résout #42192. #46661 (SmitaRKulkarni).
  • Utilise la projection d’agrégation uniquement si elle lit moins de granules qu’une lecture normale. Cela devrait aider lorsque la requête touche la PK de la table, mais pas la projection. Corrige #49150. #49417 (Nikolai Kochetov).
  • Ne stocke pas de blocks dans ANY hash join si rien n’est inséré. #48633 (vdimir).
  • Corrige l’aggregate combinator -If lorsqu’il est compilé en JIT, et active la compilation JIT pour les aggregate functions. Clôt #48120. #49083 (Igor Nikonov).
  • Pour la lecture depuis des tables distantes, nous utilisons des tasks plus petites (au lieu de lire la part entière) afin de permettre le stealing de tasks * la task size est déterminée par la taille des columns à lire * utilise toujours des buffers de 1mb pour la lecture depuis S3 * les limites des segments de cache sont alignées sur 1mb afin qu’ils conservent une taille correcte même avec de petites tasks. Cela devrait également éviter la fragmentation. #49287 (Nikita Taranov).
  • Paramètres introduits : - merge_max_block_size_bytes pour limiter la quantité de mémoire utilisée pour les opérations en arrière-plan. - vertical_merge_algorithm_min_bytes_to_activate pour ajouter une condition supplémentaire à l’activation des vertical merges. #49313 (Nikita Mikhaylov).
  • La taille par défaut d’un read buffer pour la lecture depuis le local filesystem a été modifiée pour une valeur légèrement meilleure. Deux nouveaux paramètres ont également été introduits : max_read_buffer_size_local_fs et max_read_buffer_size_remote_fs. #49321 (Nikita Taranov).
  • Améliore l’utilisation mémoire et la vitesse des dictionnaires SPARSE_HASHED/HASHED (par ex. SPARSE_HASHED consomme désormais 2.6x moins de mémoire et est ~2x plus rapide). #49380 (Azat Khuzhin).
  • Optimise les tables system.query_log et system.query_thread_log en appliquant LowCardinality lorsque cela est pertinent. Les requêtes sur ces tables seront plus rapides. #49530 (Alexey Milovidov).
  • Meilleures performances pour la lecture de fichiers Parquet locaux (grâce à la lecture en parallèle). #49539 (Michael Kolupaev).
  • Améliore les performances de RIGHT/FULL JOIN jusqu’à un facteur 2 dans certains scénarios, en particulier lors de la jointure d’une petite table de gauche avec une grande table de droite. #49585 (lgbo).
  • Améliore les performances de BLAKE3 de 11 % en activant LTO pour Rust. #49600 (Azat Khuzhin). Il atteint désormais les performances de C++.
  • Optimise la structure de system.opentelemetry_span_log. Utilise LowCardinality lorsque c’est pertinent. Bien que cette table soit globalement mal conçue (elle utilise le type de données Map même pour les attributs courants), elle sera légèrement meilleure. #49647 (Alexey Milovidov).
  • Tente de préallouer la taille de la table de hachage dans la jointure grace_hash. #49816 (lgbo).
  • Fusion parallèle des états uniqExactIf. Clôt #49885. #50285 (flynn).
  • Amélioration de Keeper : ajoute la requête CheckNotExists à Keeper, ce qui permet d’améliorer les performances des tables Replicated. #48897 (Antonio Andelic).
  • Améliorations des performances de Keeper : évite de sérialiser deux fois la même requête pendant le traitement. Met en cache les résultats de désérialisation des requêtes volumineuses. Contrôlé par le nouveau paramètre de coordination min_request_size_for_cache. #49004 (Antonio Andelic).
  • Réduit le nombre de requêtes ZooKeeper List lors de la sélection des parts à fusionner lorsque de nombreuses partitions n’ont rien à fusionner. #49637 (Alexander Tokmakov).
  • Revoit le verrouillage dans le cache FS #44985 (Kseniia Sumarokova).
  • Désactive les parallel replicas pures si une optimisation triviale de count est possible. #50594 (Raúl Marín).
  • N’envoie pas de requête HEAD pour toutes les clés lors de l’inférence de schéma Iceberg, uniquement pour celles utilisées pour lire les données. #50203 (Kruglov Pavel).
  • Le paramètre enable_memory_bound_merging_of_aggregation_results est désormais activé par défaut. #50319 (Nikita Taranov).

Fonctionnalité expérimentale

  • Le codec DEFLATE_QPL abaisse la version minimale de SIMD à SSE 4.2. modification de la documentation dans qpl - Intel® QPL s’appuie sur un répartiteur de kernels à l’exécution et sur une vérification cpuid pour choisir la ou les meilleures implémentations disponibles (sse/avx2/avx512) - restructuration du fichier CMake pour le build de qpl dans ClickHouse afin de l’aligner sur la dernière version upstream de qpl. #49811 (jasperzhu).
  • Ajout d’une prise en charge initiale des JOIN avec des répliques parallèles pures. #49544 (Raúl Marín).
  • Davantage de parallélisme pour la suppression des parties Outdated avec la “réplication zero-copy”. #49630 (Alexander Tokmakov).
  • Répliques parallèles : 1) Correction d’une erreur NOT_FOUND_COLUMN_IN_BLOCK lors de l’utilisation de répliques parallèles avec un stockage non répliqué lorsque le paramètre parallel_replicas_for_non_replicated_merge_tree est désactivé 2) Désormais, allow_experimental_parallel_reading_from_replicas peut prendre 3 valeurs possibles - 0, 1 et 2. 0 - désactivé, 1 - activé, avec désactivation silencieuse en cas d’échec (dans le cas de FINAL ou JOIN), 2 - activé, lève une exception en cas d’échec. 3) Si le modificateur FINAL est utilisé dans une requête SELECT et que les répliques parallèles sont activées, ClickHouse essaiera de les désactiver si allow_experimental_parallel_reading_from_replicas est défini sur 1 et lèvera une exception sinon. #50195 (Nikita Mikhaylov).
  • Lorsque les répliques parallèles sont activées, elles ignoreront toujours les serveurs indisponibles (ce comportement est contrôlé par le paramètre skip_unavailable_shards, activé par défaut et qu’il est seulement possible de désactiver). Ceci clôt : #48565. #50293 (Nikita Mikhaylov).

Amélioration

  • La commande BACKUP ne déchiffre pas les données des disques chiffrés lors de la création d’une sauvegarde. À la place, les données sont stockées dans la sauvegarde sous forme chiffrée. Ces sauvegardes ne peuvent être restaurées que sur un disque chiffré avec la même liste de clés de chiffrement (ou une liste étendue). #48896 (Vitaly Baranov).
  • Ajout de la possibilité d’utiliser des tables temporaires dans la clause FROM de ATTACH PARTITION FROM et REPLACE PARTITION FROM. #49436 (Roman Vasin).
  • Ajout du paramètre async_insert pour les tables MergeTree. Il a la même signification que le paramètre async_insert au niveau de la requête et active les insertions asynchrones pour une table donnée. Remarque : il n’a aucun effet pour les requêtes d’insertion exécutées depuis clickhouse-client ; dans ce cas, utilisez le paramètre au niveau de la requête. #49122 (Anton Popov).
  • Ajout de la prise en charge des suffixes de taille dans les paramètres des instructions de création de quota. #49087 (Eridanus).
  • Extension de first_value et last_value pour accepter NULL. #46467 (lgbo).
  • Ajout des alias str_to_map et mapFromString pour extractKeyValuePairs. Clôt https://github.com/clickhouse/clickhouse/issues/47185. #49466 (flynn).
  • Ajout de la prise en charge de CGroup version 2 pour les métriques asynchrones sur l’utilisation et la disponibilité de la mémoire. Ceci clôt #37983. #45999 (sichenzhao).
  • Les fonctions de table de cluster doivent toujours ignorer les shards indisponibles. Clôt #46314. #46765 (zk_kiger).
  • Autorisation des colonnes vides dans l’en-tête des fichiers CSV. #47496 (你不要过来啊).
  • Ajout de la table function gcs, compatible S3, pour Google Cloud Storage. Comme les fonctions oss et cosn, il s’agit simplement d’un alias de la table function s3 et elle n’apporte aucune nouvelle fonctionnalité. #47815 (Kuba Kaflik).
  • Ajout de la possibilité d’utiliser une taille stricte des parts pour S3 (compatibilité avec CloudFlare R2 S3 Storage). #48492 (Azat Khuzhin).
  • Ajout de nouvelles colonnes contenant des informations sur les répliques de bases de données Replicated dans system.clusters : database_shard_name, database_replica_name, is_active. Ajout d’une clause facultative FROM SHARD à la requête SYSTEM DROP DATABASE REPLICA. #48548 (Alexander Tokmakov).
  • Ajout d’une nouvelle colonne zookeeper_name dans system.replicas, pour indiquer dans quel cluster ZooKeeper (auxiliaire) sont stockées les métadonnées de la table répliquée. #48549 (cangyin).
  • L’opérateur IN prend en charge la comparaison entre Date et Date32. Clôt #48736. #48806 (flynn).
  • Prise en charge des codes d’effacement dans HDFS, auteur : @M1eyu2018, @tomscut. #48833 (M1eyu).
  • Implémente SYSTEM DROP REPLICA depuis des clusters ZooKeeper auxiliaires, peut clore #48931. #48932 (wangxiaobo).
  • Ajout du type de données Array à MongoDB. Clôt #48598. #48983 (Nikolay Degterinsky).
  • Prise en charge du stockage des types de données Interval dans les tables. #49085 (larryluogit).
  • Autorise l’utilisation de la fonction de fenêtre ntile sans définition explicite de la fenêtre : ntile(3) OVER (ORDER BY a), clôt #46763. #49093 (vdimir).
  • Ajout de paramètres (number_of_mutations_to_delay, number_of_mutations_to_throw) pour retarder ou faire échouer les requêtes ALTER qui créent des mutations (ALTER UPDATE, ALTER DELETE, ALTER MODIFY COLUMN, …) lorsque la table comporte déjà beaucoup de mutations inachevées. #49117 (Anton Popov).
  • Intercepte l’exception provenant de create_directories dans le cache du système de fichiers. #49203 (Kseniia Sumarokova).
  • Copie les exemples intégrés dans un nouveau champ example de system.functions afin de compléter le champ description. #49222 (Dan Roscigno).
  • Active les options de connexion pour le dictionnaire MongoDB. Exemple : xml <source> <mongodb> <host>localhost</host> <port>27017</port> <user></user> <password></password> <db>test</db> <collection>dictionary_source</collection> <options>ssl=true</options> </mongodb> </source> ### Entrée de documentation pour les changements visibles par l’utilisateur. #49225 (MikhailBurdukov).
  • Ajout d’un alias asymptotic pour la méthode de calcul asymp de kolmogorovSmirnovTest. Documentation améliorée. #49286 (Nikita Mikhaylov).
  • Les fonctions d’agrégation groupBitAnd/Or/Xor fonctionnent désormais sur des données entières signées. Cela les rend cohérentes avec le comportement des fonctions scalaires bitAnd/Or/Xor. #49292 (exmy).
  • Scinde la documentation des fonctions en champs plus détaillés. #49300 (Robert Schulze).
  • Utilise plusieurs threads partagés entre toutes les tables d’un serveur pour charger les data parts obsolètes. La taille du pool et de sa file d’attente est contrôlée par les paramètres max_outdated_parts_loading_thread_pool_size et outdated_part_loading_thread_pool_queue_size. #49317 (Nikita Mikhaylov).
  • Ne surestimez pas la taille des données traitées pour les colonnes LowCardinality lorsqu’elles partagent des dictionnaires entre les blocs. Cela corrige #49322. Voir aussi #48745. #49323 (Alexey Milovidov).
  • Le writer Parquet utilise désormais une taille de row group appropriée lorsqu’il est invoqué via OUTFILE. #49325 (Michael Kolupaev).
  • Autorise les mots-clés restreints comme ARRAY en tant qu’alias si l’alias est entre guillemets. Corrige #49324. #49360 (Nikolay Degterinsky).
  • Les tâches de chargement et de suppression des data parts ont été déplacées vers des pools partagés à l’échelle du serveur, au lieu de pools par table. La taille des pools est contrôlée via les settings max_active_parts_loading_thread_pool_size, max_outdated_parts_loading_thread_pool_size et max_parts_cleaning_thread_pool_size dans la config de niveau supérieur. Les settings au niveau de la table max_part_loading_threads et max_part_removal_threads sont devenus obsolètes. #49474 (Nikita Mikhaylov).
  • Autorise ?password=pass dans l’URL de l’interface Play. Le mot de passe est remplacé dans l’historique du navigateur. #49505 (Mike Kot).
  • Autorise la lecture d’objets de taille nulle depuis des systèmes de fichiers distants. (car les fichiers vides ne sont pas sauvegardés, il peut donc y avoir zéro blob dans le fichier de métadonnées). Corrige #49480. #49519 (Kseniia Sumarokova).
  • Attache le MemoryTracker du thread à total_memory_tracker après le détachement de ThreadGroup. #49527 (Dmitry Novik).
  • Corrige les vues paramétrées lorsqu’un paramètre de requête est utilisé plusieurs fois dans la requête. #49556 (Azat Khuzhin).
  • Libère la mémoire allouée au dernier snapshot de ProfileEvents envoyé dans le contexte d’une requête. Suite de #47564. #49561 (Dmitry Novik).
  • La fonction “makeDate” propose désormais une surcharge compatible MySQL (arguments année et jour de l’année). #49603 (Robert Schulze).
  • Prise en charge de la table function dictionary pour RegExpTreeDictionary. #49666 (Han Fei).
  • Ajout d’une policy d’ordonnancement IO équitable pondérée. Ajout d’un gestionnaire de ressources dynamique, qui permet de mettre à jour la hiérarchie d’ordonnancement IO à l’exécution sans redémarrer le serveur. #49671 (Sergei Trifonov).
  • Ajoute une requête compose après le multipart upload vers GCS. Cela permet d’utiliser l’opération de copie sur des objets téléversés via le multipart upload. Il est recommandé de définir s3_strict_upload_part_size sur une valeur donnée, car la requête compose peut échouer sur des objets créés à partir de parts de tailles différentes. #49693 (Antonio Andelic).
  • Pour la fonction extractKeyValuePairs : amélioration de la logique d’analyse « best-effort » afin d’accepter key_value_delimiter comme élément valide de la valeur. Cela simplifie aussi les branchements et pourrait même légèrement améliorer les performances. #49760 (Arthur Passos).
  • Ajout du champ initial_query_id à system.processors_profile_log #49777 (helifu).
  • Les tables de logs système peuvent désormais avoir des clés de tri personnalisées. #49778 (helifu).
  • Un nouveau champ partitions a été ajouté à system.query_log pour indiquer quelles partitions participent au calcul. #49779 (helifu).
  • Ajout du paramètre enable_the_endpoint_id_with_zookeeper_name_prefix pour ReplicatedMergeTree (désactivé par défaut). Lorsqu’il est activé, il ajoute le nom du cluster ZooKeeper à l’endpoint de communication interserveur de la table. Cela évite les erreurs Duplicate interserver IO endpoint lorsqu’il existe des tables répliquées avec le même chemin, mais des ZooKeeper auxiliaires différents. #49780 (helifu).
  • Ajout des paramètres de requête à clickhouse-local. Clôture #46561. #49785 (Nikolay Degterinsky).
  • Chargement des dictionnaires et des fonctions depuis YAML désormais autorisé par défaut. Dans les versions précédentes, cela nécessitait de modifier dictionaries_config ou user_defined_executable_functions_config dans le fichier de configuration, car ils attendaient des fichiers *.xml. #49812 (Alexey Milovidov).
  • Le Kafka table engine permet désormais d’utiliser des colonnes alias. #49824 (Aleksandr Musorin).
  • Ajout d’un paramètre pour limiter le nombre maximal de paires produites par extractKeyValuePairs, afin d’éviter une consommation excessive de mémoire. #49836 (Arthur Passos).
  • Ajout de la prise en charge du cas (inhabituel) où les arguments de l’opérateur IN sont des tuples à un seul élément. #49844 (MikhailBurdukov).
  • La fonction bitHammingDistance prend en charge les types de données String et FixedString. Clôture #48827. #49858 (flynn).
  • Correction des erreurs de réinitialisation du timeout dans le client sous OS X. #49863 (alekar).
  • Ajout de la prise en charge des grands entiers, tels que UInt128, Int128, UInt256 et Int256, dans la fonction bitCount. Cela permet de calculer la distance de Hamming sur de grands masques de bits pour les applications d’IA. #49867 (Alexey Milovidov).
  • Utilisation d’empreintes à la place des identifiants de clé dans les disques chiffrés. Cela simplifie la configuration des disques chiffrés. #49882 (Vitaly Baranov).
  • Ajout du type de données UUID à PostgreSQL. Clôture #49739. #49894 (Nikolay Degterinsky).
  • La fonction toUnixTimestamp accepte désormais les arguments Date et Date32. #49989 (Victor Krasnov).
  • N’imputer les dictionnaires qu’à la mémoire du serveur. #49995 (Azat Khuzhin).
  • Le serveur autorisera l’utilisation des paramètres SQL_*, tels que SQL_AUTO_IS_NULL, comme opérations sans effet pour la compatibilité MySQL. Cela résout #49927. #50013 (Alexey Milovidov).
  • Préserver initial_query_id pour les requêtes ON CLUSTER, ce qui est utile pour l’introspection (avec distributed_ddl_entry_format_version=5). #50015 (Azat Khuzhin).
  • Préserver la rétrocompatibilité des paramètres renommés à l’aide d’alias (allow_experimental_projection_optimization pour optimize_use_projections, allow_experimental_lightweight_delete pour enable_lightweight_delete). #50044 (Azat Khuzhin).
  • Prise en charge du passage du FQDN via le paramètre my_hostname pour enregistrer le nœud du cluster dans Keeper. Ajout du paramètre invisible pour prendre en charge plusieurs groupes de calcul. Un groupe de calcul, en tant que cluster, est invisible pour les autres groupes de calcul. #50186 (Yangkuan Liu).
  • Correction d’un problème où PostgreSQL lisait toutes les données même lorsque LIMIT n était spécifié. #50187 (Kseniia Sumarokova).
  • Ajout de nouveaux profile events pour les requêtes avec sous-requêtes (QueriesWithSubqueries/SelectQueriesWithSubqueries/InsertQueriesWithSubqueries). #50204 (Azat Khuzhin).
  • Ajout du champ roles dans le fichier users.xml, ce qui permet de spécifier des rôles avec des grants via un fichier de configuration. #50278 (pufit).
  • Signaler CGroupCpuCfsPeriod et CGroupCpuCfsQuota dans AsynchronousMetrics. - Respecter les limites de mémoire cgroup v2 au démarrage du serveur. #50379 (alekar).
  • Ajout d’un handler de signal pour SIGQUIT afin qu’il fonctionne de la même manière que SIGINT. Résout #50298. #50435 (Nikolay Degterinsky).
  • En cas d’échec de l’analyse JSON en raison de la grande taille de l’objet, afficher la dernière position afin de faciliter le débogage. #50474 (Valentin Alexeev).
  • Prise en charge des décimaux sans taille fixe. Résout #49130. #50586 (Kruglov Pavel).

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

  • Nouveau keeper-bench, amélioré. Tout peut être personnalisé à partir d’un fichier YAML/XML : - générateur de requêtes - chaque type de générateur de requêtes peut avoir un ensemble spécifique de champs - des requêtes multiples peuvent être générées simplement en faisant la même chose sous la clé multi - pour chaque requête ou sous-requête dans multi, un champ weight peut être défini pour contrôler la distribution - définir les arbres à configurer pour une exécution de test - les hôtes peuvent être définis avec tous les timeouts personnalisables, et il est possible de contrôler le nombre de sessions à générer pour chaque hôte - les entiers définis avec les champs min_value et max_value sont des générateurs de nombres aléatoires. #48547 (Antonio Andelic).
  • Io_uring n’est pas pris en charge sur macOS ; ne le choisissez pas lors de l’exécution de tests en local afin d’éviter des échecs occasionnels. #49250 (Frank Chen).
  • Prise en charge de l’injection de fautes nommée pour les tests. #49361 (Han Fei).
  • Permet d’exécuter ClickHouse sur des OS où l’appel système prctl (contrôle des processus) n’est pas disponible, comme AWS Lambda. #49538 (Alexey Milovidov).
  • Correction du conflit de build entre contrib/isa-l et isa-l dans qpl 49296. #49584 (jasperzhu).
  • Les utilitaires ne sont désormais compilés que s’ils sont explicitement demandés (“-DENABLE_UTILS=1”), au lieu de l’être par défaut, ce qui réduit les temps d’édition de liens dans les builds de développement typiques. #49620 (Robert Schulze).
  • Déplace la description de build de idxd-config dans un fichier CMake distinct afin d’éviter sa suppression accidentelle à l’avenir. #49651 (jasperzhu).
  • Ajout d’un check CI avec analyzer activé dans la branche master. Suite de #49562. #49668 (Dmitry Novik).
  • Passage à LLVM/clang 16. #49678 (Azat Khuzhin).
  • Permet de compiler ClickHouse avec clang-17. #49851 (Alexey Milovidov). #50410 (Alexey Milovidov).
  • ClickHouse est désormais plus facile à intégrer dans d’autres projets CMake. #49991 (Amos Bird). (Ce qui est fortement déconseillé — Alexey Milovidov).
  • Correction d’une journalisation QEMU supplémentaire et étrange après #47151, voir https://s3.amazonaws.com/clickhouse-test-reports/50078/a4743996ee4f3583884d07bcd6501df0cfdaa346/stateless&#95;tests&#95;&#95;release&#95;&#95;databasereplicated&#95;&#95;[3&#95;4].html. #50442 (Mikhail f. Shiryaev).
  • ClickHouse peut fonctionner sous Linux RISC-V 6.1.22. Cela clôt #50456. #50457 (Alexey Milovidov).
  • Mise à niveau de Protobuf interne vers la v3.18 (corrige le faux positif CVE-2022-1941). #50400 (Robert Schulze).
  • Mise à niveau de libxml2 interne vers la v2.10.4 (corrige les faux positifs CVE-2023-28484 et CVE-2023-29469). #50402 (Robert Schulze).
  • Mise à niveau de c-ares vers la v1.19.1 (faux positifs CVE-2023-32067, CVE-2023-31130, CVE-2023-31147). #50403 (Robert Schulze).
  • Correction du faux positif CVE-2022-2469 dans libgsasl. #50404 (Robert Schulze).

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

  • ActionsDAG : corrige une optimisation incorrecte #47584 (Salvatore Mesoraca).
  • Gère correctement les snapshots concurrents dans Keeper #48466 (Antonio Andelic).
  • MergeTreeMarksLoader conserve DataPart au lieu de DataPartStorage #48515 (SmitaRKulkarni).
  • Correction de l’état de Sequence #48603 (Ilya Golshtein).
  • Vérifie la concurrence de Back/Restore après des échecs précédents #48726 (SmitaRKulkarni).
  • Correction : l’ATTACH d’une table avec un path ZK inexistant n’augmente pas la métrique ReadonlyReplica #48954 (wangxiaobo).
  • Corrige un possible appel à terminate dû à une exception non interceptée à certains endroits #49112 (Kruglov Pavel).
  • Corrige l’erreur « key not found » pour les requêtes avec plusieurs StorageJoin #49137 (vdimir).
  • Corrige un résultat de requête incorrect lors de l’utilisation d’une clé primaire Nullable #49172 (Duc Canh Le).
  • Corrige reinterpretAs*() sur les machines big-endian #49198 (Suzy Wang).
  • (Experimental zero-copy replication) Verrouille les parts zero-copy de façon plus atomique #49211 (alesapin).
  • Corrige une condition de concurrence lors du chargement des outdated parts #49223 (Alexander Tokmakov).
  • Corrige le cas où toutes les key value sont NULL et où group utilise rollup, ce qui renvoie un résultat incorrect #49282 (Shuai li).
  • Corrige le calcul de load_factor pour les Dictionaries HASHED avec SHARDS #49319 (Azat Khuzhin).
  • Interdit de configurer des CODECs de compression pour les colonnes alias #49363 (Timur Solodovnikov).
  • Corrige un bug dans la suppression d’un répertoire de part existant #49365 (alesapin).
  • Corrige correctement GCS lorsque HMAC est utilisé #49390 (Antonio Andelic).
  • Corrige un bug de fuzzing lorsque le Set de la sous-requête n’est pas construit lors de la lecture depuis remote() #49425 (Alexander Gololobov).
  • Inverse shutdown_wait_unfinished_queries #49427 (Konstantin Bogdanov).
  • (Experimental zero-copy replication) Corrige un autre bug zero-copy #49473 (alesapin).
  • Corrige le paramètre de base de données Postgres #49481 (Mal Curtis).
  • Gère correctement les arguments de s3Cluster #49490 (Antonio Andelic).
  • Corrige un bug dans le destructeur de TraceCollector. #49508 (Yakov Olkhovskiy).
  • Corrige le dysfonctionnement de AsynchronousReadIndirectBufferFromRemoteFS lors de seeks courts #49525 (Michael Kolupaev).
  • Corrige l’ordre de chargement des dictionnaires #49560 (Alexander Tokmakov).
  • Interdit le changement du type de données d’une colonne Object(‘json’) #49563 (Nikolay Degterinsky).
  • Corrige le test de stress (Erreur logique : Expected 7134 >= 11030) #49623 (Kseniia Sumarokova).
  • Corrige un bug dans DISTINCT #49628 (Alexey Milovidov).
  • Correction : DISTINCT dans l’ordre avec des valeurs égales à zéro dans des colonnes non triées #49636 (Igor Nikonov).
  • Corrige une erreur de décalage d’une unité sur les grands entiers, détectée par UBSan avec le fuzzer #49645 (Alexey Milovidov).
  • Corrige la lecture depuis des colonnes creuses après redémarrage #49660 (Anton Popov).
  • Corrige une assertion dans SpanHolder::finish() avec des fibres #49673 (Kruglov Pavel).
  • Corrige les fonctions à court-circuit et les mutations avec des arguments creux #49716 (Anton Popov).
  • Corrige l’écriture des fichiers ajoutés aux sauvegardes incrémentielles #49725 (Vitaly Baranov).
  • Corrige l’erreur “There is no physical column _row_exists in table” qui se produit lors d’une mutation de suppression légère sur une table avec une colonne Object. #49737 (Alexander Gololobov).
  • Corrige un problème msan dans randomStringUTF8(uneven number) #49750 (Robert Schulze).
  • Corrige la fonction d’agrégation kolmogorovSmirnovTest #49768 (FFFFFFFHHHHHHH).
  • Corrige les alias de paramètres dans le protocole natif #49776 (Azat Khuzhin).
  • Corrige arrayMap avec un tableau de tuples à argument unique #49789 (Anton Popov).
  • Corrige les paramètres de limitation du débit des IO/BACKUPs par requête #49797 (Azat Khuzhin).
  • Corrige la définition de NULL dans un profil #49831 (Vitaly Baranov).
  • Corrige un bug lié aux projections et au paramètre aggregate_functions_null_for_empty (pour query_plan_optimize_projection) #49873 (Amos Bird).
  • Corrige le traitement des batchs en attente pour les INSERT asynchrones de Distributed après un redémarrage #49884 (Azat Khuzhin).
  • Corrige une assertion dans CacheMetadata::doCleanup #49914 (Kseniia Sumarokova).
  • Corrige is_prefix dans OptimizeRegularExpression #49919 (Han Fei).
  • Corrige les métriques WriteBufferFromS3Bytes, WriteBufferFromS3Microseconds et WriteBufferFromS3RequestsErrors #49930 (Aleksandr Musorin).
  • Corrige l’encodage IPv6 dans Protobuf #49933 (Yakov Olkhovskiy).
  • Corrige une possible erreur logique en cas de mauvais parsing de Nullable dans les formats texte #49960 (Kruglov Pavel).
  • Ajoute le paramètre output_format_parquet_compliant_nested_types pour produire des fichiers Parquet plus compatibles #50001 (Michael Kolupaev).
  • Corrige une erreur logique dans le test de stress “Not enough space to add …” #50021 (Kseniia Sumarokova).
  • Évite un interblocage au démarrage d’une table dans le thread d’attach de ReplicatedMergeTree #50026 (Antonio Andelic).
  • Corrige une assertion dans SpanHolder::finish() avec les fibers, tentative 2 #50034 (Kruglov Pavel).
  • Ajoute le bon échappement pour la sérialisation du contexte OpenTelemetry DDL #50045 (Azat Khuzhin).
  • Corrige le signalement des projection parts endommagées #50052 (Amos Bird).
  • Corrige le traitement de l’inégalité avec NaN dans la compilation JIT #50056 (Maksim Kita).
  • Corrige un crash dans le cas d’une base de données Replicated sans arguments #50058 (Azat Khuzhin).
  • Corrige un crash avec multiIf, une condition constante et des arguments Nullable #50123 (Anton Popov).
  • Corrige une analyse d’index invalide pour les clés liées à Date #50153 (Amos Bird).
  • N’autorise pas la modification de ORDER BY lorsqu’il n’y a pas de colonnes ORDER BY #50154 (Han Fei).
  • Corrige une analyse d’index défaillante lorsqu’un opérateur binaire contient un argument constant NULL #50177 (Amos Bird).
  • clickhouse-client : interdire l’utilisation simultanée de --query et --queries-file #50210 (Alexey Gerasimchuk).
  • Correction d’un comportement indéfini dans les extensions INTO OUTFILE (APPEND / AND STDOUT) et WATCH EVENTS #50216 (Azat Khuzhin).
  • Correction de la gestion des espaces en fin de ligne dans le format CustomSeparatedIgnoreSpaces #50224 (Kruglov Pavel).
  • Correction de l’analyse des métadonnées Iceberg #50232 (Kseniia Sumarokova).
  • Correction d’un SELECT Distributed imbriqué dans la clause WITH #50234 (Azat Khuzhin).
  • Correction d’un problème msan dans keyed siphash #50245 (Robert Schulze).
  • Correction de bogues dans les sockets Poco en mode non bloquant, avec utilisation de vrais sockets non bloquants #50252 (Kruglov Pavel).
  • Correction du calcul de checksum pour les entrées de sauvegarde #50264 (Vitaly Baranov).
  • Correction d’un problème de NaN dans les fonctions de comparaison #50287 (Maksim Kita).
  • Correction d’un problème de clé Nullable dans l’aggregation JIT #50291 (Maksim Kita).
  • Correction du crash de clickhouse-local lors de l’écriture d’une sortie Arrow ou Parquet vide #50328 (Michael Kolupaev).
  • Correction d’un crash lorsque Pool::Entry::disconnect() est appelé #50334 (Val Doroshchuk).
  • Amélioration de la récupération d’une part en conservant le verrou du répertoire plus longtemps #50339 (SmitaRKulkarni).
  • Correction des fonctions bitShift* lorsque les deux arguments sont constants #50343 (Kruglov Pavel).
  • Correction d’un interblocage de Keeper en cas d’exception lors du prétraitement des requêtes. #50387 (frinkr).
  • Correction du hachage des valeurs entières const #50421 (Robert Schulze).
  • Correction de merge_tree_min_rows_for_seek/merge_tree_min_bytes_for_seek pour les index de saut de données #50432 (Azat Khuzhin).
  • Limiter le nombre de tâches en cours pour le chargement des parties obsolètes #50450 (Nikita Mikhaylov).
  • Correctif Keeper : appliquer l’état non validé après l’installation du snapshot #50483 (Antonio Andelic).
  • Correction d’un repliement de constantes incorrect #50536 (Alexey Milovidov).
  • Correction d’une logical error dans le test de stress (Not enough space to add …) #50583 (Kseniia Sumarokova).
  • Correction de la conversion de Null en LowCardinality(Nullable) dans la table function values #50637 (Kruglov Pavel).
  • Annulation d’une optimisation invalide de RegExpTreeDictionary #50642 (Johann Gan).

Version 23.4 de ClickHouse, 2023-04-26. Présentation, Vidéo

Changement non rétrocompatible

  • Le Formatter %M dans la fonction formatDateTime() affiche désormais le nom du mois au lieu des minutes. Cela aligne le comportement sur celui de MySQL. Le comportement précédent peut être rétabli à l’aide du paramètre “formatdatetime_parsedatetime_m_is_month_name = 0”. #47246 (Robert Schulze).
  • Cette modification n’a de sens que si vous utilisez le cache du système de fichiers virtuel. Si path dans la configuration du cache du système de fichiers virtuel n’est pas vide et n’est pas un chemin absolu, il sera alors placé dans <répertoire de données du serveur ClickHouse>/caches/<path_from_cache_config>. #48784 (Kseniia Sumarokova).
  • Les index primaires/secondaires et les clés de tri ayant des expressions identiques sont désormais rejetés. Ce comportement peut être désactivé à l’aide du paramètre allow_suspicious_indices. #48536 (凌涛).

Nouvelle fonctionnalité

  • Prise en charge des nouvelles fonctions d’agrégation quantileGK/quantilesGK, similaires à approx_percentile dans Spark. L’algorithme de Greenwald-Khanna est décrit ici : http://infolab.stanford.edu/~datar/courses/cs361a/papers/quantiles.pdf. #46428 (李扬).
  • Ajout de l’instruction SHOW COLUMNS, qui affiche des informations synthétiques issues de system.columns. #48017 (Robert Schulze).
  • Ajout des modificateurs LIGHTWEIGHT et PULL pour la query SYSTEM SYNC REPLICA. La version LIGHTWEIGHT attend uniquement les fetches et les drop-ranges (les merges et les mutations sont ignorés). La version PULL récupère les nouvelles entrées depuis ZooKeeper sans les attendre. Corrige #47794. #48085 (Alexander Tokmakov).
  • Ajout de la fonction kafkaMurmurHash pour assurer la compatibilité avec Kafka DefaultPartitioner. Clôt #47834. #48185 (Nikolay Degterinsky).
  • Permet de créer facilement un utilisateur avec les mêmes grants que l’utilisateur courant à l’aide de GRANT CURRENT GRANTS. #48262 (pufit).
  • Ajout de la fonction d’agrégation statistique kolmogorovSmirnovTest. Clôt #48228. #48325 (FFFFFFFHHHHHHH).
  • Ajout d’une colonne lost_part_count à la table system.replicas. La valeur de cette colonne indique le nombre total de lost parts dans la table correspondante. Cette valeur est stockée dans ZooKeeper et peut être utilisée à la place de l’événement de profile ReplicatedDataLoss, qui n’est pas persistant, pour le monitoring. #48526 (Sergei Trifonov).
  • Ajout de la fonction soundex à des fins de compatibilité. Clôt #39880. #48567 (FriendLey).
  • Prise en charge du type Map pour JSONExtract. #48629 (李扬).
  • Ajout du format PrettyJSONEachRow pour produire du JSON joliment formaté avec des délimiteurs de nouvelle ligne et une indentation de 4 espaces. #48898 (Kruglov Pavel).
  • Ajout du format d’entrée ParquetMetadata pour lire les métadonnées d’un fichier Parquet. #48911 (Kruglov Pavel).
  • Ajout de la fonction extractKeyValuePairs pour extraire des paires clé-valeur à partir de chaînes. Les chaînes d’entrée peuvent contenir du bruit (c.-à-d. des fichiers journaux / elles n’ont pas besoin d’être formatées à 100 % au format clé-valeur) ; l’algorithme recherchera les paires clé-valeur correspondant aux arguments passés à la fonction. À ce jour, la fonction accepte les arguments suivants : data_column (obligatoire), key_value_pair_delimiter (par défaut :), pair_delimiters (par défaut \space \, \;) et quoting_character (par défaut des guillemets doubles). #43606 (Arthur Passos).
  • Les fonctions replaceOne(), replaceAll(), replaceRegexpOne() et replaceRegexpAll() peuvent désormais être appelées avec des arguments pattern et replacement non constants. #46589 (Robert Schulze).
  • Ajout de fonctions permettant de travailler avec des colonnes de type Map : mapConcat, mapSort, mapExists. #48071 (Anton Popov).

Amélioration des performances

  • La lecture des fichiers au format Parquet est désormais bien plus rapide. Les E/S et le décodage sont parallélisés (via le paramètre max_threads), et seules les plages de données nécessaires sont lues. #47964 (Michael Kolupaev).
  • Lorsqu’une mutation avec IN (subquery) est exécutée, comme ici : ALTER TABLE t UPDATE col='new value' WHERE id IN (SELECT id FROM huge_table), et que la table t comporte plusieurs parts, un set pour la subquery SELECT id FROM huge_table est construit en mémoire pour chaque part. S’il y a beaucoup de parts, cela peut consommer beaucoup de mémoire (et entraîner un OOM) ainsi que du CPU. La solution consiste à introduire un cache de courte durée de vie des sets en cours de construction par les tâches de mutation. Si une autre tâche de la même mutation s’exécute en parallèle, elle peut rechercher le set dans le cache, attendre sa construction, puis le réutiliser. #46835 (Alexander Gololobov).
  • Vérifier les dependencies uniquement si nécessaire lors de l’application des requêtes ALTER TABLE. #48062 (Raúl Marín).
  • Optimisation de la fonction mapUpdate. #48118 (Anton Popov).
  • Désormais, une query interne vers la réplique locale est envoyée explicitement, et les données qu’elle retourne sont reçues via l’interface loopback. Le paramètre prefer_localhost_replica n’est pas respecté pour les parallel replicas. Cela améliore la planification et simplifie le code : l’initiateur est uniquement responsable de la coordination du processus de lecture et de la fusion des résultats, tout en répondant en continu aux requêtes pendant que toutes les queries secondaires lisent les données. Remarque : l’utilisation de l’interface loopback est moins performante, mais sans cela, certaines répliques pourraient manquer de tâches, ce qui ralentirait encore davantage l’exécution des requêtes et empêcherait d’exploiter toutes les ressources disponibles. L’initialisation du coordinator est désormais encore plus lazy. Toutes les requêtes entrantes contiennent des informations sur l’algorithme de lecture ; nous initialisons le coordinator avec ces informations à l’arrivée de la première requête. Si une réplique décide de lire avec un algorithme différent, une exception sera levée et la query sera abandonnée. #48246 (Nikita Mikhaylov).
  • Ne pas construire de set pour la partie droite de la clause IN avec subquery lorsqu’il est utilisé uniquement pour l’analyse des skip indexes et que ceux-ci sont désactivés par le paramètre (use_skip_indexes=0). Auparavant, cela pouvait affecter les performances des queries. #48299 (Anton Popov).
  • Le query processing est parallélisé juste après la lecture de FROM file(...). Lié à #38755. #48525 (Igor Nikonov). Le query processing est parallélisé juste après la lecture depuis n’importe quelle data source. Les data sources concernées sont principalement des storages simples ou externes, comme les table functions url, file. #48727 (Igor Nikonov). Ce comportement est contrôlé par le paramètre parallelize_output_from_storages, qui n’est pas activé par défaut.
  • Réduction de la contention sur le mutex de ThreadPool (peut améliorer les performances en présence d’un très grand nombre de petits jobs). #48750 (Sergei Trifonov).
  • Réduction de la memory usage pour plusieurs mutations ALTER DELETE. #48522 (Nikolai Kochetov).
  • Suppression des tentatives de connection excessives si le paramètre skip_unavailable_shards est activé. #48771 (Azat Khuzhin).

Fonctionnalité expérimentale

  • Les entrées du cache de requêtes sont désormais regroupées jusqu’à max_block_size et compressées. #45912 (Robert Schulze).
  • Il est désormais possible de définir des quotas par utilisateur dans le cache de requêtes. #48284 (Robert Schulze).
  • Quelques corrections pour les répliques parallèles #48433 (Nikita Mikhaylov).
  • Mise en œuvre de la réplication zero-copy (une fonctionnalité expérimentale) sur des disques chiffrés. #48741 (Vitaly Baranov).

Amélioration

  • Augmente la valeur par défaut de connect_timeout_with_failover_ms à 1000 ms (en raison de l’ajout de connexions asynchrones dans https://github.com/ClickHouse/ClickHouse/pull/47229). Clôt #5188. #49009 (Kruglov Pavel).
  • Plusieurs améliorations autour des data lakes : - Prise en charge de Iceberg avec des données non partitionnées. - Prise en charge du format Iceberg en version v2 (auparavant, seule la v1 était prise en charge) - Prise en charge de la lecture des données partitionnées pour DeltaLake/Hudi - Lecture plus rapide des métadonnées DeltaLake grâce à l’utilisation des fichiers de checkpoint de Delta - Correction de lectures Hudi incorrectes : auparavant, la sélection des données à lire était erronée et, par conséquent, seules les tables de petite taille pouvaient être lues correctement - Ces engines prennent désormais en compte les mises à jour des données modifiées (auparavant, l’état était défini lors de la création de la table) - Ajout de tests appropriés pour Iceberg/DeltaLake/Hudi avec spark. #47307 (Kseniia Sumarokova).
  • Ajoute une connexion asynchrone au socket ainsi qu’une écriture asynchrone vers le socket. Rend asynchrones, sur tous les shards, la création des connexions et l’envoi des query/external tables. Remanie le code avec des fibres. Clôt #46931. Nous pourrons ensuite augmenter la valeur par défaut de connect_timeout_with_failover_ms (https://github.com/ClickHouse/ClickHouse/issues/5188). #47229 (Kruglov Pavel).
  • Prise en charge des sections de config keeper/keeper_server comme alternative à zookeeper. Clôt #34766, #34767. #35113 (李扬).
  • Il est désormais possible de définir l’indicateur secure dans named_collections pour un Dictionary avec une source de type ClickHouse table. Réfère à #38450. #46323 (Ilya Golshtein).
  • La fonction bitCount prend en charge les data types FixedString et String. #49044 (flynn).
  • Ajout de retries configurables pour toutes les opérations avec [Zoo]Keeper pour les query Backup. #47224 (Nikita Mikhaylov).
  • Active use_environment_credentials pour S3 par défaut, afin que toute la chaîne du provider soit construite automatiquement. #47397 (Antonio Andelic).
  • Actuellement, la fonction JSON_VALUE est similaire à la fonction get_json_object de spark, qui permet d’obtenir une valeur à partir d’une chaîne JSON à l’aide d’un path comme ‘$.key’. Il subsiste toutefois quelques différences : - 1. get_json_object de spark renvoie null lorsque le path n’existe pas, tandis que JSON_VALUE renvoie une chaîne vide ; - 2. get_json_object de spark renvoie une valeur de type complexe, telle qu’un objet JSON ou un tableau JSON, tandis que JSON_VALUE renvoie une chaîne vide. #47494 (KevinyhZou).
  • Pour use_structure_from_insertion_table_in_table_functions, propagation plus souple de la structure de la table d’insert vers la table function. Correction d’un problème de mapping des noms et d’utilisation des virtual columns. Le paramètre ‘auto’ n’est plus nécessaire. #47962 (Yakov Olkhovskiy).
  • Ne pas continuer à tenter de se connecter à Keeper si la requête est interrompue ou dépasse les limites. #47985 (Raúl Marín).
  • Prise en charge de la sortie/entrée d’Enum dans BSONEachRow, autorise tous les types de clés pour Map et évite des calculs supplémentaires en sortie. #48122 (Kruglov Pavel).
  • Prise en charge de davantage de types ClickHouse dans les formats ORC/Arrow/Parquet : Enum(8|16), (U)Int(128|256), Decimal256 (pour ORC), autorise la lecture d’IPv4 à partir de valeurs Int32 (ORC produit IPv4 en Int32, et nous ne pouvions pas le relire), corrige la lecture de Nullable(IPv6) à partir de données binaires pour ORC. #48126 (Kruglov Pavel).
  • Ajout des colonnes perform_ttl_move_on_insert, load_balancing pour la table system.storage_policies, modification du type de la colonne volume_type en Enum8. #48167 (lizhuoyu5).
  • Ajout de la prise en charge de la commande BACKUP ALL, qui sauvegarde toutes les tables et bases de données, y compris les temporaires et les systèmes. #48189 (Vitaly Baranov).
  • La fonction mapFromArrays prend en charge le type Map en entrée. #48207 (李扬).
  • La sortie de certaines commandes SHOW PROCESSLIST est désormais triée. #48241 (Robert Schulze).
  • Limitation de débit par requête/par serveur pour les IO distantes/IO locales/sauvegardes (paramètres serveur : max_remote_read_network_bandwidth_for_server, max_remote_write_network_bandwidth_for_server, max_local_read_bandwidth_for_server, max_local_write_bandwidth_for_server, max_backup_bandwidth_for_server, paramètres : max_remote_read_network_bandwidth, max_remote_write_network_bandwidth, max_local_read_bandwidth, max_local_write_bandwidth, max_backup_bandwidth). #48242 (Azat Khuzhin).
  • Prise en charge de davantage de types dans le format CapnProto : Map, (U)Int(128|256), Decimal(128|256). Autorise les conversions d’entiers lors de l’entrée/sortie. #48257 (Kruglov Pavel).
  • Ne pas lever CURRENT_WRITE_BUFFER_IS_EXHAUSTED dans un fonctionnement normal. #48288 (Raúl Marín).
  • Ajout du nouveau paramètre keeper_map_strict_mode, qui impose des garanties supplémentaires sur les opérations effectuées sur les tables KeeperMap. #48293 (Antonio Andelic).
  • Vérifie que le type de clé primaire d’un dictionnaire simple est un type entier non signé natif. Ajout du paramètre check_dictionary_primary_key pour la compatibilité (définissez check_dictionary_primary_key =false pour désactiver la vérification). #48335 (lizhuoyu5).
  • Ne pas répliquer les mutations pour KeeperMap, car cela est inutile. #48354 (Antonio Andelic).
  • Autorise l’écriture/la lecture d’un tuple non nommé sous forme de Message imbriqué au format Protobuf. Les éléments du Tuple et les champs du Message sont mis en correspondance par position. #48390 (Kruglov Pavel).
  • Prise en charge des paramètres additional_table_filters et additional_result_filter dans le nouveau planner. Ajout également d’une entrée dans la documentation pour additional_result_filter. #48405 (Dmitry Novik).
  • parseDateTime prend désormais en charge la chaîne de format ‘%f’ (secondes fractionnaires). #48420 (Robert Schulze).
  • La chaîne de format “%f” dans formatDateTime() affiche désormais “000000” si la valeur formatée ne comporte pas de secondes fractionnaires ; le comportement précédent (un seul zéro) peut être rétabli à l’aide du paramètre “formatdatetime_f_prints_single_zero = 1”. #48422 (Robert Schulze).
  • Ne plus répliquer DELETE et TRUNCATE pour KeeperMap. #48434 (Antonio Andelic).
  • Génération de Decimals et de Bools valides dans la fonction generateRandom. #48436 (Kruglov Pavel).
  • Autoriser les virgules finales dans la liste d’expressions d’une requête SELECT, par exemple SELECT a, b, c, FROM table. Clôt #37802. #48438 (Nikolay Degterinsky).
  • Les paramètres client --user et --password remplacent désormais les variables d’environnement CLICKHOUSE_USER et CLICKHOUSE_PASSWORD. Clôt #38909. #48440 (Nikolay Degterinsky).
  • Ajout de tentatives supplémentaires lors du chargement des data parts dans les tables MergeTree en cas d’erreurs réessayables. #48442 (Anton Popov).
  • Ajout de la prise en charge des data types Date, Date32, DateTime, DateTime64 dans les fonctions arrayMin, arrayMax, arrayDifference. Clôt #21645. #48445 (Nikolay Degterinsky).
  • Ajout de la prise en charge de la macro {server_uuid}. Elle est utile pour identifier les répliques dans les clusters avec autoscaling lorsque de nouvelles répliques sont constamment ajoutées et supprimées à l’exécution. Cela clôt #48554. #48563 (Alexey Milovidov).
  • Le script d’installation créera un lien physique au lieu de copier le fichier lorsque c’est possible. #48578 (Alexey Milovidov).
  • Prise en charge de la syntaxe SHOW TABLE, équivalente à SHOW CREATE TABLE. Clôt #48580. #48591 (flynn).
  • Les buffers temporaires HTTP prennent désormais en charge l’éviction des données du cache du système de fichiers virtuel. #48664 (Vladimir C).
  • L’inférence de schéma fonctionne désormais pour CREATE AS SELECT. Clôt #47599. #48679 (flynn).
  • Ajout d’un paramètre replicated_max_mutations_in_one_entry pour ReplicatedMergeTree, qui permet de limiter le nombre de commandes de mutation par entrée MUTATE_PART (10000 par défaut). #48731 (Alexander Tokmakov).
  • Dans les types AggregateFunction, les octets Arena inutilisés ne sont plus comptabilisés comme read_bytes. #48745 (Raúl Marín).
  • Corrige certains paramètres liés à MySQL qui n’étaient pas gérés avec la source de dictionnaire MySQL + collection nommée. Clôt #48402. #48759 (Kseniia Sumarokova).
  • Si un utilisateur définissait max_single_part_upload_size sur une valeur très élevée, cela pouvait provoquer un crash en raison d’un bug dans le SDK AWS S3. Cela corrige #47679. #48816 (Alexey Milovidov).
  • Corrige une data race dans RabbitMQ (rapport) et refactorise le code. #48845 (Kseniia Sumarokova).
  • Ajoute les alias name et part_name à system.parts et system.part_log. Clôt #48718. #48850 (sichenzhao).
  • Les fonctions “arrayDifferenceSupport()”, “arrayCumSum()” et “arrayCumSumNonNegative()” prennent désormais en charge des tableaux d’entrée de types entiers larges (U)Int128/256. #48866 (cluster).
  • L’historique multiligne dans clickhouse-client n’est désormais plus rempli d’espaces. Cela rend le collage plus naturel. #48870 (Joanna Hulboj).
  • Apporte une légère amélioration pour le cas rare où ClickHouse s’exécute dans LXC avec LXCFS. LXCFS présente un problème : il renvoie parfois l’erreur “Transport endpoint is not connected” lors de la lecture d’un fichier dans /proc. Cette erreur était correctement consignée dans le journal serveur de ClickHouse. Nous contournons désormais aussi ce problème en rouvrant le fichier. Il s’agit d’un changement minime. #48922 (Real).
  • Améliore la comptabilisation mémoire des prefetches. Rend aléatoires les paramètres de prefetch dans la CI. #48973 (Kseniia Sumarokova).
  • Définit correctement les headers pour les opérations de copie natives sur GCS. #48981 (Antonio Andelic).
  • Ajoute la prise en charge de noms de paramètres en ligne de commande avec des tirets au lieu de traits de soulignement, par exemple --max-threads au lieu de --max_threads. Prend également en charge les tirets Unicode comme au lieu de -- : c’est utile lorsque vous communiquez avec une équipe d’une autre entreprise et qu’un responsable de cette équipe a copié-collé du code depuis MS Word. #48985 (alekseygolub).
  • Ajout d’un mécanisme de repli vers l’authentification par mot de passe lorsque l’authentification avec un certificat utilisateur SSL échoue. Clôture de #48974. #48989 (Nikolay Degterinsky).
  • Amélioration du tableau de bord intégré. Clôture de #46671. #49036 (Kevin Zhang).
  • Ajout d’événements de profil pour les messages de journalisation, afin de voir facilement le nombre de messages par niveau de gravité. #49042 (Alexey Milovidov).
  • Dans les versions précédentes, le format LineAsString se comportait de manière incohérente selon que l’analyse parallèle était activée ou non, en présence de sauts de ligne DOS ou MacOS Classic. Clôture de #49039. #49052 (Alexey Milovidov).
  • Le message d’exception concernant le paramètre de requête non analysé indiquera également le nom du paramètre. Réimplémentation de #48878. Clôture de #48772. #49061 (Alexey Milovidov).

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

  • Mise à jour des fuseaux horaires. Les éléments suivants ont été mis à jour : Africa/Cairo, Africa/Casablanca, Africa/El_Aaiun, America/Bogota, America/Cambridge_Bay, America/Ciudad_Juarez, America/Godthab, America/Inuvik, America/Iqaluit, America/Nuuk, America/Ojinaga, America/Pangnirtung, America/Rankin_Inlet, America/Resolute, America/Whitehorse, America/Yellowknife, Asia/Gaza, Asia/Hebron, Asia/Kuala_Lumpur, Asia/Singapore, Canada/Yukon, Egypt, Europe/Kirov, Europe/Volgograd, Singapore. #48572 (Alexey Milovidov).
  • Réduction du nombre de dépendances dans les fichiers d’en-tête pour accélérer la compilation. #47984 (Dmitry Novik).
  • Randomisation de la compression des marks et des index dans les tests. #48286 (Alexey Milovidov).
  • Mise à niveau de ZSTD interne de 1.5.4 à 1.5.5. #46797 (Robert Schulze).
  • Randomisation des fusions verticales de parts compactes vers des wide parts dans les tests. #48287 (Raúl Marín).
  • Prise en charge de la somme de contrôle CRC32 dans HDFS. Correction de problèmes de performance. #48614 (Alexey Milovidov).
  • Suppression des vestiges de la prise en charge de GCC. #48671 (Robert Schulze).
  • Ajout d’une exécution CI avec la nouvelle infrastructure de l’analyseur activée. #48719 (Dmitry Novik).

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

  • Corrige system.query_views_log pour les vues matérialisées alimentées depuis des threads d’arrière-plan #46668 (Azat Khuzhin).
  • Corrige plusieurs bogues liés à RENAME COLUMN #46946 (alesapin).
  • Corrige quelques problèmes mineurs de coloration syntaxique dans clickhouse-format #47610 (Natasha Murashkina).
  • Corrige un bogue dans libc++ de LLVM entraînant un crash lors du téléversement de parts vers S3 lorsque leur taille dépasse INT_MAX #47693 (Azat Khuzhin).
  • Corrige un dépassement de capacité dans la fonction sparkbar #48121 (Vladimir C).
  • Corrige une condition de concurrence dans S3 #48190 (Anton Popov).
  • Désactive le JIT pour les fonctions d’agrégation en raison d’un comportement incohérent #48195 (Alexey Milovidov).
  • Corrige le formatage de ALTER (mineur) #48289 (Natasha Murashkina).
  • Corrige l’utilisation du CPU dans RabbitMQ (elle s’était dégradée dans la version 23.2 après #44404) #48311 (Kseniia Sumarokova).
  • Corrige un crash dans EXPLAIN PIPELINE pour Merge sur Distributed #48320 (Azat Khuzhin).
  • Corrige la sérialisation de LowCardinality en tant que dictionnaire Arrow #48361 (Kruglov Pavel).
  • Réinitialise le téléchargeur pour le segment de fichier du cache dans TemporaryFileStream #48386 (Vladimir C).
  • Corrige un possible blocage de SYSTEM SYNC REPLICA en cas de DROP/REPLACE PARTITION #48391 (Azat Khuzhin).
  • Corrige une erreur au démarrage lors du chargement d’une table distribuée dépendant d’un dictionnaire #48419 (MikhailBurdukov).
  • Ne vérifie pas les dépendances lors du renommage automatique des tables système #48431 (Raúl Marín).
  • Met à jour uniquement les lignes affectées dans le moteur de stockage KeeperMap #48435 (Antonio Andelic).
  • Corrige un segfault possible dans le cache VFS #48469 (Kseniia Sumarokova).
  • La fonction toTimeZone génère une erreur lorsqu’aucune chaîne constante n’est fournie #48471 (Jordi Villar).
  • Corrige une logical error avec IPv4 dans Protobuf et ajoute la prise en charge de Date32 #48486 (Kruglov Pavel).
  • Le flag “changed” dans system.settings était calculé de manière incorrecte pour les paramètres à plusieurs valeurs #48516 (MikhailBurdukov).
  • Corrige le stockage Memory lorsque la compression est activée #48517 (Anton Popov).
  • Corrige le mode bracketed-paste qui perturbait la saisie du mot de passe en cas de reconnexion du client #48528 (Michael Kolupaev).
  • Corrige la map imbriquée pour les clés de type IP et UUID #48556 (Yakov Olkhovskiy).
  • Corrige une exception non interceptée en cas de chargeur parallèle pour les dictionnaires hachés #48571 (Azat Khuzhin).
  • La fonction d’agrégation groupArray fonctionne désormais correctement sur un résultat vide avec des types Nullable #48593 (lgbo).
  • Corrige un bug dans Keeper lorsqu’un nœud n’est parfois pas créé avec le schéma auth dans l’ACL. #48595 (Aleksei Filatov).
  • Autorise les opérateurs de comparaison IPv4 avec UInt #48611 (Yakov Olkhovskiy).
  • Corrige une erreur possible du cache #48636 (Kseniia Sumarokova).
  • Les async inserts avec des données vides ne lèveront plus d’exception. #48663 (Anton Popov).
  • Corrige les dépendances de table en cas d’échec de RENAME TABLE #48683 (Azat Khuzhin).
  • Si la clé primaire contient des colonnes dupliquées (ce qui n’est possible que pour les projections), cela pouvait entraîner un bug dans les versions précédentes #48838 (Amos Bird).
  • Corrige une race condition dans ZooKeeper lors de l’attente de fin de send_thread/receive_thread #48849 (Alexander Gololobov).
  • Corrige l’erreur de nom de part inattendu lors de la tentative de suppression d’une part detached ignorée avec la réplication zero copy #48862 (Michael Lex).
  • Corrige la lecture d’une colonne Parquet/Arrow Date32 dans une colonne autre que Date32 #48864 (Kruglov Pavel).
  • Corrige l’erreur UNKNOWN_IDENTIFIER lors d’une sélection depuis une table avec une row policy et une colonne contenant des points #48976 (Kruglov Pavel).
  • Corrige l’agrégation de chaînes Nullable vides #48999 (LiuNeng).

version de ClickHouse 23.3 LTS, 2023-03-30. Présentation, Vidéo

Notes de mise à niveau

  • Les lightweight DELETE sont prêts pour la production et activés par défaut. La requête DELETE pour les tables MergeTree est désormais disponible par défaut.
  • Le comportement des fonctions *domain*RFC et netloc a légèrement changé : l’ensemble des symboles autorisés dans l’autorité de l’URL a été assoupli afin de mieux respecter la conformité. #46841 (Azat Khuzhin).
  • La création de tables basées sur KafkaEngine avec des instructions DEFAULT/EPHEMERAL/ALIAS/MATERIALIZED pour les colonnes est désormais interdite. #47138 (Aleksandr Musorin).
  • La fonctionnalité « asynchronous connection drain » a été supprimée. Les paramètres et les métriques associés l’ont également été. Comme il s’agissait d’une fonctionnalité interne, cette suppression ne devrait pas affecter les utilisateurs qui n’en avaient jamais entendu parler. #47486 (Alexander Tokmakov).
  • Prise en charge du type de données Decimal 256 bits (plus de 38 chiffres) dans arraySum/Min/Max/Avg/Product, arrayCumSum/CumSumNonNegative, arrayDifference, la construction de tableaux, l’opérateur IN, les paramètres de requête, groupArrayMovingSum, les fonctions statistiques, min/max/any/argMin/argMax, le protocole PostgreSQL wire, le moteur de table MySQL et sa fonction, sumMap, mapAdd, mapSubtract, arrayIntersect. Prise en charge également des grands entiers dans arrayIntersect. Les fonctions d’agrégation statistiques faisant intervenir des moments (comme corr ou différents TTest) utiliseront Float64 comme représentation interne (elles utilisaient auparavant Decimal128, mais cela n’avait pas d’intérêt), et ces fonctions peuvent désormais renvoyer nan au lieu de inf en cas de variance infinie. Certaines fonctions étaient autorisées avec les types de données Decimal256, mais renvoyaient Decimal128 dans les versions précédentes ; c’est désormais corrigé. Cela résout #47569. Cela résout #44864. Cela résout #28335. #47594 (Alexey Milovidov).
  • backup_threads et restore_threads deviennent des paramètres serveur (au lieu de paramètres utilisateur). #47881 (Azat Khuzhin).
  • Ne pas autoriser les index secondaires constants et non déterministes. #46839 (Anton Popov).

Nouvelle fonctionnalité

  • Ajout d’un nouveau mode de répartition du travail entre les répliques à l’aide des paramètres parallel_replicas_custom_key et parallel_replicas_custom_key_filter_type. Si le cluster se compose d’un seul shard avec plusieurs répliques, jusqu’à max_parallel_replicas seront sélectionnées aléatoirement et traitées comme des shards. Pour chaque shard, un filtre correspondant est ajouté à la requête sur le nœud initiateur avant d’être envoyé au shard. Si le cluster se compose de plusieurs shards, le comportement sera identique à celui de sample_key, avec la possibilité de définir une clé arbitraire. #45108 (Antonio Andelic).
  • Option d’affichage d’un résultat partiel en cas d’annulation : ajout du paramètre de requête partial_result_on_first_cancel, qui permet à une requête annulée (par ex. avec Ctrl-C) de renvoyer un résultat partiel. #45689 (Alexey Perevyshin).
  • Ajout de la prise en charge de moteurs de table arbitraires pour les tables temporaires (à l’exception des moteurs Replicated et KeeperMap). Clôt #31497. #46071 (Roman Vasin).
  • Ajout de la prise en charge de la réplication des fonctions SQL définies par l’utilisateur via un stockage centralisé dans Keeper. #46085 (Aleksei Filatov).
  • Implémentation de system.server_settings (similaire à system.settings), qui contiendra les configurations du serveur. #46550 (pufit).
  • Prise en charge de la requête UNDROP TABLE. Clôt #46811. #47241 (chen).
  • Autorisation de grants distincts pour les collections nommées (par ex. pour pouvoir accorder l’accès SHOW/CREATE/ALTER/DROP named collection uniquement à certaines collections, au lieu de toutes en une seule fois). Clôt #40894. Ajout d’un nouveau type d’accès NAMED_COLLECTION_CONTROL, qui n’est pas accordé à l’utilisateur default sauf s’il est explicitement ajouté à la config utilisateur (il est requis pour pouvoir faire GRANT ALL) ; de plus, show_named_collections n’a plus besoin d’être spécifié manuellement pour l’utilisateur default afin de disposer de tous les droits d’accès, comme c’était le cas en 23.2. #46241 (Kseniia Sumarokova).
  • Autorisation des disques personnalisés imbriqués. Auparavant, les disques personnalisés ne prenaient en charge qu’une structure de disque plate. #47106 (Kseniia Sumarokova).
  • Introduction de la fonction widthBucket (avec l’alias WIDTH_BUCKET pour des raisons de compatibilité). #42974. #46790 (avoiderboi).
  • Ajout des nouvelles fonctions parseDateTime/parseDateTimeInJodaSyntax selon la chaîne de format spécifiée. parseDateTime convertit String en DateTime selon la syntaxe MySQL, parseDateTimeInJodaSyntax selon la syntaxe Joda. #46815 (李扬).
  • Utilisation de dummy UInt8 comme structure par défaut pour la table function null. Clôt #46930. #47006 (flynn).
  • Prise en charge du format de date avec virgule, comme Dec 15, 2021, dans la fonction parseDateTimeBestEffort. Clôt #46816. #47071 (chen).
  • Ajout des paramètres http_wait_end_of_query et http_response_buffer_size, qui correspondent aux paramètres d’URL wait_end_of_query et buffer_size de l’interface HTTP. Cela permet de modifier ces paramètres dans les profils. #47108 (Vladimir C).
  • Ajout de la table system.dropped_tables, qui affiche les tables supprimées des bases de données Atomic, mais pas encore complètement retirées. #47364 (chen).
  • Ajout de INSTR comme alias de positionCaseInsensitive pour la compatibilité avec MySQL. Clôt #47529. #47535 (flynn).
  • Ajout de la fonction toDecimalString, qui permet de convertir des nombres en chaîne avec une précision fixe. #47838 (Andrey Zvonov).
  • Ajout d’un paramètre MergeTree max_number_of_mutations_for_replica. Il limite le nombre de part mutations par replica à la valeur spécifiée. Zéro signifie qu’il n’y a pas de limite sur le nombre de mutations par replica (l’exécution peut néanmoins rester contrainte par d’autres paramètres). #48047 (Vladimir C).
  • Ajout de la fonction liée à Map mapFromArrays, qui permet de créer une map à partir d’une paire de tableaux. #31125 (李扬).
  • Permet de contrôler la compression dans les output formats Parquet/ORC/Arrow et ajoute la prise en charge d’un plus grand nombre d’input formats de compression. Cela clôt #13541. #47114 (Kruglov Pavel).
  • Ajout de l’authentication par certificat utilisateur SSL au native protocol. Clôt #47077. #47596 (Nikolay Degterinsky).
  • Ajout des variantes *OrNull() et *OrZero() pour parseDateTime, ainsi que de l’alias str_to_date pour la compatibilité avec MySQL. #48000 (Robert Schulze).
  • Ajout de l’operator REGEXP (similaire aux operators “LIKE”, “IN”, “MOD”, etc.) pour une meilleure compatibilité avec MySQL #47869 (Robert Schulze).

Amélioration des performances

  • Les marks en mémoire sont désormais compressés et utilisent 3 à 6 fois moins de mémoire. #47290 (Michael Kolupaev).
  • Les sauvegardes portant sur un très grand nombre de fichiers étaient incroyablement lentes dans les versions précédentes. Ce n’est plus le cas. Elles sont désormais incroyablement rapides. #47251 (Alexey Milovidov). Introduction d’un pool de threads distinct pour les opérations d’IO des sauvegardes. Cela permettra de le dimensionner indépendamment des autres pools et d’améliorer les performances. #47174 (Nikita Mikhaylov). Utilisation de requêtes MultiRead et de tentatives de réexécution pour collecter les métadonnées à l’étape finale du traitement des sauvegardes. #47243 (Nikita Mikhaylov). Si une sauvegarde et les données à restaurer se trouvent toutes deux dans S3, une copie server-side sera désormais utilisée. #47546 (Vitaly Baranov).
  • Correction de lectures excessives dans les queries avec FINAL. #47801 (Nikita Taranov).
  • Le paramètre max_final_threads sera défini sur le nombre de cœurs au démarrage du server (selon le même algorithme que pour max_threads). Cela améliore la concurrence de l’exécution de final sur les servers disposant d’un grand nombre de CPU. #47915 (Nikita Taranov).
  • Autorise l’exécution du pipeline de lecture pour le dictionnaire DIRECT avec une source CLICKHOUSE sur plusieurs threads. Pour l’activer, définissez dictionary_use_async_executor=1 dans la section SETTINGS de la source dans l’instruction CREATE DICTIONARY. #47986 (Vladimir C).
  • Optimise les performances des agrégations avec une seule clé Nullable. #45772 (LiuNeng).
  • Ajout de l’utilisation de l’index tokenbf_v1 en minuscules pour hasTokenOrNull, hasTokenCaseInsensitive et hasTokenCaseInsensitiveOrNull. #46252 (ltrk2).
  • Optimise les fonctions position et LIKE en recherchant les deux premiers caractères à l’aide de SIMD. #46289 (Jiebin Sun).
  • Optimise les queries sur system.detached_parts, qui peuvent être très volumineuses. Plusieurs sources ont été ajoutées en tenant compte de la limite de taille des blocks ; dans chaque block, un pool de threads d’IO est utilisé pour calculer la taille de la part, c’est-à-dire pour effectuer les appels système en parallèle. #46624 (Sema Checherinda).
  • Augmente la default value de max_replicated_merges_in_queue pour les tables ReplicatedMergeTree, de 16 à 1000. Cela permet d’accélérer les opérations de merge en arrière-plan sur les clusters comportant un très grand nombre de répliques, comme les clusters à stockage partagé dans ClickHouse Cloud. #47050 (Alexey Milovidov).
  • Mise à jour de clickhouse-copier pour utiliser GROUP BY au lieu de DISTINCT afin d’obtenir la liste des partitions. Pour les grandes tables, cela a réduit le temps du select de plus de 500 s à moins de 1 s. #47386 (Clayton McClure).
  • Correction d’une dégradation des performances dans ASOF JOIN. #47544 (Ongkong).
  • Davantage de traitement par lots dans Keeper. Amélioration des performances en évitant de scinder les lots lors des requêtes de lecture. #47978 (Antonio Andelic).
  • Autorisation de PREWHERE pour Merge avec des expressions DEFAULT différentes pour les colonnes. #46831 (Azat Khuzhin).

Fonctionnalité expérimentale

  • Répliques parallèles : amélioration des performances globales grâce à une meilleure utilisation de la réplique locale, et désactivation par défaut de la lecture avec des répliques parallèles à partir d’un MergeTree non répliqué. #47858 (Nikita Mikhaylov).
  • Prise en charge du push down des filtres vers la table de gauche pour les JOIN avec les tables Join, Dictionary et EmbeddedRocksDB si l’analyseur expérimental est activé. #47280 (Maksim Kita).
  • Désormais, ReplicatedMergeTree avec la réplication zero copy génère moins de charge sur Keeper. #47676 (alesapin).
  • Correction de la création d’une vue matérialisée avec MaterializedPostgreSQL #40807 (Maksim Buren).

Amélioration

  • Active input_format_json_ignore_unknown_keys_in_named_tuple par défaut. #46742 (Kruglov Pavel).
  • Autorise l’ignorance des erreurs lors de l’envoi vers MATERIALIZED VIEW (ajout du nouveau paramètre materialized_views_ignore_errors, défini par défaut sur false, mais forcé à true pour le flush des logs vers les tables system.*_log, sans condition). #46658 (Azat Khuzhin).
  • Suit en mémoire la file de fichiers des envois distribués. #45491 (Azat Khuzhin).
  • Désormais, les en-têtes X-ClickHouse-Query-Id et X-ClickHouse-Timezone sont ajoutés aux réponses pour toutes les requêtes via le protocole HTTP. Auparavant, cela n’était fait que pour les requêtes SELECT. #46364 (Anton Popov).
  • Tables externes depuis MongoDB : prise en charge de la connexion à un Replica Set via un URI avec une liste d’hôtes:ports, ainsi que de l’option readPreference dans les dictionnaires MongoDB. Exemple d’URI : mongodb://db0.example.com:27017,db1.example.com:27017,db2.example.com:27017/?replicaSet=myRepl&readPreference=primary. #46524 (artem-yadr).
  • Cette amélioration devrait être invisible pour vous. Réimplémente l’analyse des projections sur la base du plan de requête. Ajoute le paramètre query_plan_optimize_projection=1 pour basculer entre l’ancienne et la nouvelle version. Corrige #44963. #46537 (Nikolai Kochetov).
  • Utilise par défaut le format Parquet v2 au lieu de v1 comme format de sortie. Ajoute le paramètre output_format_parquet_version pour contrôler la version de Parquet, valeurs possibles : 1.0, 2.4, 2.6, 2.latest (par défaut). #46617 (Kruglov Pavel).
  • Il est désormais possible d’utiliser la nouvelle syntaxe de configuration pour configurer des topics Kafka contenant des points (.) dans leur nom. #46752 (Robert Schulze).
  • Corrige les heuristiques qui vérifient les motifs hyperscan pour détecter des répétitions problématiques. #46819 (Robert Schulze).
  • Ne signale pas l’existence d’un nœud ZK dans system.errors lorsqu’un bloc a été créé de manière concurrente par une autre réplique. #46820 (Raúl Marín).
  • Augmente la limite du nombre de fichiers ouverts dans clickhouse-local. Il pourra lire depuis des tables web sur des serveurs disposant d’un très grand nombre de cœurs CPU. Ne réduit pas la cadence de lecture depuis le moteur de table URL en cas de trop grand nombre de fichiers ouverts. Cela clôt #46852. #46853 (Alexey Milovidov).
  • Les exceptions levées lorsque des nombres ne peuvent pas être analysés ont désormais un message plus facile à lire. #46917 (Robert Schulze).
  • Ajoute une mise à jour de system.backups après chaque tâche traitée pour suivre la progression des sauvegardes. #46989 (Aleksandr Musorin).
  • Autoriser la conversion de types dans le format d’entrée Native. Ajouter le paramètre input_format_native_allow_types_conversion pour la contrôler (activé par défaut). #46990 (Kruglov Pavel).
  • Autoriser l’utilisation d’IPv4 dans la fonction range pour générer des plages d’IP. #46995 (Yakov Olkhovskiy).
  • Améliorer le message d’exception lorsqu’il est impossible de déplacer une part d’un volume/disque vers un autre. #47032 (alesapin).
  • Prise en charge du type Bool dans la fonction JSONType. Auparavant, le type Null était renvoyé par erreur pour les valeurs booléennes. #47046 (Anton Popov).
  • Utiliser le paramètre _request_body pour configurer des requêtes HTTP prédéfinies. #47086 (Constantine Peresypkin).
  • Indentation automatique dans le SQL Editor de l’UI intégrée lorsqu’on appuie sur Entrée. #47113 (Alexey Korepanov).
  • L’auto-extraction avec ‘sudo’ tentera d’attribuer aux fichiers extraits l’uid et le gid de l’utilisateur en cours d’exécution. #47116 (Yakov Olkhovskiy).
  • Auparavant, le second argument de la fonction repeat n’acceptait qu’un type entier non signé, ce qui signifiait qu’il ne pouvait pas accepter des valeurs telles que -1. Ce comportement différait de celui de la fonction Spark. Dans cette mise à jour, la fonction repeat a été modifiée pour s’aligner sur le comportement de la fonction Spark. Elle accepte désormais les mêmes types d’entrée, y compris les entiers négatifs. Des tests approfondis ont été effectués pour vérifier la validité de l’implémentation mise à jour. #47134 (KevinyhZou). Remarque : l’entrée du changelog a été réécrite par ChatGPT.
  • Supprimer la partie ::__1 des stacktraces. Afficher std::basic_string<char, ... comme String dans les stacktraces. #47171 (Mike Kot).
  • Réimplémenter le mode interserver pour éviter les attaques par rejeu (à noter que ce changement reste rétrocompatible avec les anciennes versions du serveur). #47213 (Azat Khuzhin).
  • Améliorer la reconnaissance des groupes d’expressions régulières et affiner le dictionnaire regexp_tree. #47218 (Han Fei).
  • Amélioration de Keeper : ajout du nouveau 4LW clrs pour nettoyer les ressources utilisées par Keeper (par exemple, libérer la mémoire inutilisée). #47256 (Antonio Andelic).
  • Ajouter des arguments facultatifs aux codecs DoubleDelta(bytes_size), Gorilla(bytes_size), FPC(level, float_size) ; cela permet d’utiliser ces codecs sans type de colonne dans clickhouse-compressor. Corriger d’éventuels arrêts brutaux et erreurs arithmétiques dans clickhouse-compressor avec ces codecs. Correctif : https://github.com/ClickHouse/ClickHouse/discussions/47262. #47271 (Kruglov Pavel).
  • Ajouter la prise en charge des types BigInt à la fonction runningDifference. Résout #47194. #47322 (Nikolay Degterinsky).
  • Ajouter une marge avant expiration pour les identifiants S3 qui ont une date d’expiration, afin d’éviter les erreurs ExpiredToken dans certains cas limites. Elle est configurable via expiration_window_seconds ; la valeur par défaut est de 120 secondes. #47423 (Antonio Andelic).
  • Prise en charge de Decimal et Date32 dans le format Avro. #47434 (Kruglov Pavel).
  • Ne pas démarrer le serveur si une conversion interrompue de Ordinary vers Atomic est détectée ; afficher un message d’erreur plus clair avec des instructions de dépannage. #47487 (Alexander Tokmakov).
  • Ajouter une nouvelle colonne kind à system.opentelemetry_span_log. Cette colonne contient la valeur de SpanKind définie dans OpenTelemetry. #47499 (Frank Chen).
  • Autoriser la lecture/écriture de tableaux imbriqués au format Protobuf en utilisant uniquement le nom du champ racine comme nom de colonne. Auparavant, le nom de colonne devait contenir tous les noms de champs imbriqués (par exemple a.b.c Array(Array(Array(UInt32)))) ; il est désormais possible d’utiliser simplement a Array(Array(Array(UInt32))). #47650 (Kruglov Pavel).
  • Ajout d’un modificateur STRICT optionnel pour SYSTEM SYNC REPLICA, qui fait attendre la requête jusqu’à ce que la file de réplication soit vide (exactement comme avant https://github.com/ClickHouse/ClickHouse/pull/45648). #47659 (Alexander Tokmakov).
  • Amélioration du nommage de certains logs de spans OpenTelemetry. #47667 (Frank Chen).
  • Empêcher l’utilisation de chaînes trop longues de modificateurs de fonctions d’agrégation (elles peuvent entraîner des requêtes lentes à l’étape d’analyse). Cela clôt #47715. #47716 (Alexey Milovidov).
  • Prise en charge des sous-requêtes dans les parameterized views ; résout #46741 #47725 (SmitaRKulkarni).
  • Correction d’une fuite de mémoire dans l’intégration MySQL (reproductible avec connection_auto_close=1). #47732 (Kseniia Sumarokova).
  • Amélioration de la gestion des erreurs dans le code lié aux paramètres Decimal, avec à la clé des messages d’erreur plus explicites. Auparavant, lorsque des paramètres Decimal incorrects étaient fournis, le message d’erreur généré était peu clair ou peu utile. Cette mise à jour corrige ce point en fournissant des informations plus détaillées et plus utiles, ce qui facilite l’identification et la correction des problèmes liés aux paramètres Decimal. #47812 (Yu Feng). Remarque : cette entrée du changelog a été réécrite par ChatGPT.
  • Le paramètre exact_rows_before_limit est utilisé pour faire en sorte que rows_before_limit_at_least reflète précisément le nombre de lignes renvoyées avant que la limite ne soit atteinte. Cette pull request corrige les problèmes rencontrés lorsque la requête implique un traitement distribué sur plusieurs shards ou des opérations de tri. Avant cette mise à jour, ces scénarios ne fonctionnaient pas comme prévu. #47874 (Amos Bird).
  • Introspection des métriques des ThreadPools. #47880 (Azat Khuzhin).
  • Ajout des événements de profil WriteBufferFromS3Microseconds et WriteBufferFromS3RequestsErrors. #47885 (Antonio Andelic).
  • Ajout des options --link et --noninteractive (-y) à l’installation de ClickHouse. Clôt #47750. #47887 (Nikolay Degterinsky).
  • Correction de l’exception UNKNOWN_TABLE lors d’un ATTACH sur une vue matérialisée dont certaines tables dépendantes ne sont pas disponibles. Cela peut être utile lors d’une tentative de restauration de l’état à partir d’une sauvegarde. #47975 (MikhailBurdukov).
  • Correction du cas où le chemin (facultatif) n’est pas ajouté à une configuration de disque chiffré. #47981 (Kseniia Sumarokova).
  • Prise en charge des CTE dans les vues paramétrées. Implémentation : mise à jour pour autoriser les paramètres de requête lors de l’évaluation de sous-requêtes scalaires. #48065 (SmitaRKulkarni).
  • Prise en charge des grands entiers (U)Int128/(U)Int256, de Map avec n’importe quel type de clé et de DateTime64 avec n’importe quelle précision (et pas seulement 3 et 6). #48119 (Kruglov Pavel).
  • Possibilité d’ignorer les erreurs liées à des valeurs d’enum inconnues dans les formats d’entrée par ligne. #48133 (Alexey Milovidov).

amélioration du build/des tests/du packaging

  • ClickHouse se compile désormais avec C++23. #47424 (Robert Schulze).
  • Ajout du fuzzing des requêtes EXPLAIN dans l’AST Fuzzer. #47803 #47852 (flynn).
  • Sépare le test de stress et la vérification automatisée de rétrocompatibilité (désormais Upgrade check). #44879 (Kruglov Pavel).
  • Mise à jour de l’image Ubuntu pour Docker afin d’atténuer certains faux signalements de sécurité. #46784 (Julio Jimenez). Veuillez noter que ClickHouse n’a aucune dépendance et ne nécessite pas Docker.
  • Ajoute une invite permettant de supprimer un téléchargement clickhouse existant lors de l’installation de ClickHouse via curl | sh. L’invite est : “ClickHouse binary clickhouse already exists. Overwrite? [y/N]”. #46859 (Dan Roscigno).
  • Corrige une erreur au démarrage du serveur sur d’anciennes distributions (par ex. Amazon Linux 2) et sur ARM, lorsque les symboles de glibc 2.28 sont introuvables. #47008 (Robert Schulze).
  • Prépare la prise en charge de clang 16. #47027 (Amos Bird).
  • Ajout d’une vérification CI garantissant que ClickHouse peut s’exécuter avec une ancienne glibc sur ARM. #47063 (Robert Schulze).
  • Ajoute une vérification de style pour empêcher une utilisation incorrecte de la macro NDEBUG. #47699 (Alexey Milovidov).
  • Accélère légèrement la compilation. #47714 (Alexey Milovidov).
  • Met à jour vectorscan vers 5.4.9. #47955 (Robert Schulze).
  • Ajoute un test unitaire pour vérifier que la journalisation fatale d’Apache Arrow n’interrompt pas l’exécution. Il couvre les modifications de ClickHouse/arrow#16. #47958 (Arthur Passos).
  • Restaure la possibilité de démarrer le build natif du serveur ClickHouse en mode débogage sur macOS. #48050 (Robert Schulze). Remarque : cette modification n’est pertinente que pour le développement, car les builds officiels de ClickHouse sont réalisés en compilation croisée.

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

  • Correction de la réinitialisation du parser de formats, avec test du traitement des messages incorrects dans Kafka #45693 (Kruglov Pavel).
  • Correction du calcul de la taille des données dans Keeper #46086 (Antonio Andelic).
  • Correction d’un bug dans les tentatives automatiques de la requête DROP TABLE avec des tables ReplicatedMergeTree et des bases de données Atomic. Dans de rares cas, cela pouvait entraîner les erreurs Can't get data for node /zk_path/log_pointer et The specified key does not exist si la session ZooKeeper expirait pendant le DROP et qu’une nouvelle table répliquée avec le même chemin dans ZooKeeper était créée en parallèle. #46384 (Alexander Tokmakov).
  • Correction d’une récursion incorrecte d’alias lors de la normalisation des requêtes, qui empêchait l’exécution de certaines d’entre elles. #46609 (Raúl Marín).
  • Correction de la sérialisation/désérialisation d’IPv4/IPv6 dans les formats binaires #46616 (Kruglov Pavel).
  • ActionsDAG : ne pas modifier le résultat de and pendant l’optimisation #46653 (Salvatore Mesoraca).
  • Amélioration de l’annulation des requêtes lorsqu’un client se termine inopinément #46681 (Alexander Tokmakov).
  • Correction des opérations arithmétiques dans l’optimisation des agrégations #46705 (Duc Canh Le).
  • Correction d’un possible arrêt brutal de clickhouse-local lors de l’inférence de schéma JSONEachRow #46731 (Kruglov Pavel).
  • Correction de la modification d’un rôle expiré #46772 (Vitaly Baranov).
  • Correction de l’accumulation incorrecte des colonnes PREWHERE combinées à partir de plusieurs étapes #46785 (Alexander Gololobov).
  • Utilisation de la plage initiale pour récupérer la taille du fichier dans le tampon de lecture HTTP. Sans ce changement, certains fichiers distants ne pouvaient pas être traités. #46824 (Antonio Andelic).
  • Correction de la barre de progression incorrecte lors de l’utilisation des tables URL #46830 (Antonio Andelic).
  • Correction d’un rapport MSan dans la fonction maxIntersections #46847 (Alexey Milovidov).
  • Correction d’un bug dans le type de données Map #46856 (Alexey Milovidov).
  • Correction de résultats erronés pour certaines recherches LIKE lorsque le motif LIKE contient des caractères entre guillemets qui ne peuvent pas être échappés #46875 (Robert Schulze).
  • Correction : WITH FILL pouvait provoquer un arrêt brutal lorsque le Filling Transform traitait un bloc vide #46897 (Yakov Olkhovskiy).
  • Correction de l’inférence des dates et des entiers à partir de chaînes dans JSON #46972 (Kruglov Pavel).
  • Correction d’un bug dans le choix du disque pour la zero-copy replication pendant le fetch #47010 (alesapin).
  • Corrige une faute de frappe dans la définition du service systemd #47051 (Palash Goel).
  • Corrige l’erreur NOT_IMPLEMENTED avec CROSS JOIN et algorithm = auto #47068 (Vladimir C).
  • Corrige le problème empêchant la table ‘ReplicatedMergeTree’ d’insérer deux données similaires lorsque ‘part_type’ est configuré en mode ‘InMemory’ (fonctionnalité expérimentale). #47121 (liding1992).
  • Dictionnaires externes / library-bridge : corrige l’erreur “méthode de bibliothèque inconnue ‘extDict_libClone’” #47136 (alex filatov).
  • Corrige une race condition dans un grace hash join avec une limite #47153 (Vladimir C).
  • Corrige la prise en charge de PREWHERE pour les colonnes explicites #47154 (Azat Khuzhin).
  • Corrige un interblocage possible dans Query Status #47161 (Kruglov Pavel).
  • Interdit insert select sur la même table Join, car cela entraîne un interblocage #47260 (Vladimir C).
  • Ignore les partitions fusionnées pour les merges min_age_to_force_merge_seconds #47303 (Antonio Andelic).
  • Modifie find_first_symbols afin qu’il fonctionne comme prévu pour find_first_not_symbols #47304 (Arthur Passos).
  • Corrige l’inférence des grands nombres dans les CSV #47410 (Kruglov Pavel).
  • Désactive l’optimiseur d’expressions logiques pour les expressions avec alias. #47451 (Nikolai Kochetov).
  • Corrige une erreur dans decodeURLComponent #47457 (Alexey Milovidov).
  • Corrige le graphe EXPLAIN avec projection #47473 (flynn).
  • Corrige les paramètres de requête #47488 (Alexey Milovidov).
  • Vue paramétrée : correction d’un bug. #47495 (SmitaRKulkarni).
  • Fuzzer des formats de données, et correctifs associés. #47519 (Alexey Milovidov).
  • Corrige la vérification de monotonie pour DateTime64 #47526 (Antonio Andelic).
  • Corrige l’erreur “block structure mismatch” pour une colonne Nullable LowCardinality #47537 (Nikolai Kochetov).
  • Correctif d’un bug dans Apache Parquet #45878 #47538 (Kruglov Pavel).
  • Correction de l’analyse parallèle de BSONEachRow lorsque la taille du document est invalide #47540 (Kruglov Pavel).
  • Préservation de l’erreur dans system.distribution_queue lors de SYSTEM FLUSH DISTRIBUTED #47541 (Azat Khuzhin).
  • Vérification de la présence de colonnes dupliquées dans le format BSONEachRow #47609 (Kruglov Pavel).
  • Correction de l’attente du verrou zero copy lors d’un déplacement #47631 (alesapin).
  • Correction de l’agrégation par partition #47634 (Nikita Taranov).
  • Correction d’un bug dans la sérialisation d’un tuple sous forme de tableau dans le format BSONEachRow #47690 (Kruglov Pavel).
  • Correction d’un plantage dans polygonsSymDifferenceCartesian #47702 (pufit).
  • Correction de la lecture de fichiers compressés du moteur de stockage File avec la compression zlib et gzip #47796 (Anton Popov).
  • Amélioration de la détection des requêtes vides pour PostgreSQL (avec le driver pgx pour Go) #47854 (Azat Khuzhin).
  • Correction de la vérification de monotonie de DateTime pour les types LowCardinality #47860 (Antonio Andelic).
  • Utilisation de restore_threads (et non de backup_threads) pour RESTORE ASYNC #47861 (Azat Khuzhin).
  • Correction de DROP COLUMN avec ReplicatedMergeTree contenant des projections #47883 (Antonio Andelic).
  • Correctif pour la récupération d’une base de données Replicated #47901 (Alexander Tokmakov).
  • Correctif urgent pour des avertissements HTTP trop verbeux #47903 (Alexander Tokmakov).
  • Correction de “Field value too long” dans catboostEvaluate #47970 (Robert Schulze).
  • Correction de #36971 : Watchdog : quitter avec un code non nul si le processus enfant se termine #47973 (Коренберг Марк).
  • Correctif pour “index file cidx is unexpectedly long” #48010 (SmitaRKulkarni).
  • Correction de la requête MaterializedPostgreSQL pour récupérer les attributs (replica-identity) #48015 (Solomatov Sergei).
  • parseDateTime() : corrige un UB (débordement d’entier signé) #48019 (Robert Schulze).
  • Utilise des noms uniques pour les Records dans Avro afin d’éviter de réutiliser leur schéma #48057 (Kruglov Pavel).
  • Configure correctement les timeouts des sockets TCP/HTTP dans Keeper #48108 (Antonio Andelic).
  • Corrige un possible appel de membre sur un pointeur NULL dans le format Avro #48184 (Kruglov Pavel).

Version 23.2 de ClickHouse, 2023-02-23. Présentation, Vidéo

Changement rétro-incompatible

  • Étend la fonction “toDayOfWeek()” (alias : “DAYOFWEEK”) avec un argument de mode qui indique si la semaine commence le lundi ou le dimanche, et si le comptage démarre à 0 ou à 1. Par souci de cohérence avec les autres fonctions de date et d’heure, l’argument de mode a été inséré entre les arguments time et time zone. Cela casse l’usage existant de la syntaxe à 2 arguments (jusqu’alors non documentée) “toDayOfWeek(time, time_zone)”. Pour corriger cela, il faut réécrire la fonction sous la forme “toDayOfWeek(time, 0, time_zone)”. #45233 (Robert Schulze).
  • Renomme le paramètre max_query_cache_size en filesystem_cache_max_download_size. #45614 (Kseniia Sumarokova).
  • L’utilisateur default n’aura pas, par défaut, les autorisations pour le type d’accès SHOW NAMED COLLECTION (par exemple, l’utilisateur default ne pourra plus accorder ALL à d’autres utilisateurs comme auparavant ; cette PR est donc rétro-incompatible). #46010 (Kseniia Sumarokova).
  • Si la clause SETTINGS est spécifiée avant la clause FORMAT, les paramètres s’appliqueront également au formatage. #46003 (Azat Khuzhin).
  • Supprime la prise en charge du paramètre materialized_postgresql_allow_automatic_update (qui était désactivé par défaut). #46106 (Kseniia Sumarokova).
  • Améliore légèrement les performances de countDigits sur des jeux de données réalistes. Cela a permis de clore #44518. Dans les versions précédentes, countDigits(0) renvoyait 0 ; désormais, il renvoie 1, ce qui est plus correct et conforme à la documentation existante. #46187 (Alexey Milovidov).
  • Interdit la création de nouvelles colonnes compressées par une combinaison des codecs “Delta” ou “DoubleDelta”, suivis des codecs “Gorilla” ou “FPC”. Cela peut être contourné en utilisant le paramètre “allow_suspicious_codecs = true”. #45652 (Robert Schulze).

Nouvelle fonctionnalité

  • Ajout de StorageIceberg et de la fonction de table iceberg pour accéder au stockage de tables Iceberg sur S3. #45384 (flynn).
  • Permet de configurer le stockage avec SETTINGS disk = '<disk_name>' (au lieu de storage_policy) ainsi qu’avec une création explicite de disque via SETTINGS disk = disk(type=s3, ...). #41976 (Kseniia Sumarokova).
  • Expose les compteurs ProfileEvents dans system.part_log. #38614 (Bharat Nallan).
  • Enrichissement du moteur ReplacingMergeTree existant pour permettre les insertions en double. Cela combine les avantages de ReplacingMergeTree et de CollapsingMergeTree dans un seul moteur MergeTree. Les données supprimées ne sont pas renvoyées lors des requêtes, mais ne sont pas non plus supprimées du disque. #41005 (youennL-cs).
  • Ajout de la fonction generateULID. Clôt #36536. #44662 (Nikolay Degterinsky).
  • Ajout de la fonction d’agrégation corrMatrix, qui calcule la corrélation pour chaque paire de colonnes. De plus, comme les fonctions d’agrégation covarSamp et covarPop sont similaires à corr, j’ajoute également covarSampMatrix et covarPopMatrix. @alexey-milovidov clôt #44587. #44680 (FFFFFFFHHHHHHH).
  • Introduction de la fonction arrayShuffle pour effectuer des permutations aléatoires de tableaux. #45271 (Joanna Hulboj).
  • Prise en charge du type FIXED_SIZE_BINARY dans Arrow, de FIXED_LENGTH_BYTE_ARRAY dans Parquet, avec correspondance vers FixedString. Ajout des paramètres output_format_parquet_fixed_string_as_fixed_byte_array/output_format_arrow_fixed_string_as_fixed_byte_array pour contrôler le type de sortie par défaut de FixedString. Clôt #45326. #45340 (Kruglov Pavel).
  • Ajout d’une nouvelle colonne last_exception_time à system.replication&#95;queue. #45457 (Frank Chen).
  • Ajout de deux nouvelles fonctions permettant d’utiliser des clés/seeds définis par l’utilisateur avec SipHash. #45513 (Salvatore Mesoraca).
  • Autorise une version à trois arguments pour la table function format. Clôture #45808. #45873 (FFFFFFFHHHHHHH).
  • Ajoute la prise en charge du format JodaTime pour ‘x’,‘w’,‘S’. Voir https://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html. #46073 (zk_kiger).
  • Prise en charge de la window function ntile. (lgbo).
  • Ajoute le setting final pour appliquer implicitement le modifier FINAL à chaque table. #40945 (Arthur Passos).
  • Ajout des fonctions arrayPartialSort et arrayPartialReverseSort. #46296 (Joanna Hulboj).
  • Le nouveau parameter HTTP client_protocol_version permet de définir une protocol version client pour les réponses HTTP utilisant le Native format. #40397. #46360 (Geoff Genz).
  • Ajoute la nouvelle fonction regexpExtract, semblable à la fonction Spark REGEXP_EXTRACT pour des raisons de compatibilité. Elle est similaire à la fonction existante extract. #46469 (李扬).
  • Ajoute la nouvelle fonction JSONArrayLength, qui renvoie le nombre d’éléments dans le JSON array le plus externe. La fonction renvoie NULL si la JSON string d’entrée n’est pas valide. #46631 (李扬).

Amélioration des performances

  • La logique introduite fonctionne si la condition PREWHERE est une conjonction de plusieurs conditions (cond1 AND cond2 AND … ). Elle regroupe en étapes les conditions qui nécessitent la lecture des mêmes colonnes. Après chaque étape, la partie correspondante de la condition complète est calculée et les lignes obtenues peuvent être filtrées. Cela permet de lire moins de lignes aux étapes suivantes, économisant ainsi de la bande passante d’IO et réduisant la quantité de calculs. Cette logique est désactivée par défaut pour le moment. Elle sera activée par défaut dans une future release, une fois qu’il aura été établi qu’elle n’entraîne pas de régressions. Il est donc fortement recommandé de l’utiliser à des fins de test. Elle peut être contrôlée par 2 paramètres : “enable_multiple_prewhere_read_steps” et “move_all_conditions_to_prewhere”. #46140 (Alexander Gololobov).
  • Ajout d’une option permettant d’agréger les partitions indépendamment si la clé de partition de la table et la clé de groupement sont compatibles. Contrôlée par le paramètre allow_aggregate_partitions_independently. Désactivée par défaut en raison de son applicabilité limitée (veuillez vous référer à la documentation). #45364 (Nikita Taranov).
  • Autorise l’utilisation de l’algorithme de fusion verticale avec des parts au format Compact. Cela permettra au serveur ClickHouse d’utiliser beaucoup moins de mémoire pour les opérations en arrière-plan. Cela clôt #46084. #45681 #46282 (Anton Popov).
  • Optimise le lecteur Parquet en utilisant un lecteur par lots. #45878 (LiuNeng).
  • Ajoute une nouvelle méthode io_uring pour local_filesystem_read_method, basée sur le sous-système Linux asynchrone io_uring, ce qui améliore presque systématiquement les performances de lecture par rapport à la méthode par défaut pread. #38456 (Saulius Valatka).
  • Réécrit les fonctions d’agrégation avec une expression if comme argument lorsqu’elles sont logiquement équivalentes. Par exemple, avg(if(cond, col, null)) peut être réécrit en avgIf(cond, col). Cela améliore les performances. #44730 (李扬).
  • Améliore les performances des fonctions lower/upper grâce aux instructions avx512. #37894 (yaqi-zhao).
  • Supprime la limitation selon laquelle, sur les systèmes avec >=32 cœurs et SMT désactivé, ClickHouse n’utilise que la moitié des cœurs (cas où l’Hyper-Threading est désactivé dans le BIOS). #44973 (Robert Schulze).
  • Améliore les performances de la fonction multiIf grâce à une exécution colonnaire, avec une accélération de 2,3x. #45296 (李扬).
  • Ajoute un chemin rapide pour la fonction position lorsque la sous-chaîne recherchée est vide. #45382 (李扬).
  • Active l’optimisation query_plan_remove_redundant_sorting par défaut. Optimisation implémentée dans #45420. #45567 (Igor Nikonov).
  • Augmente la taille des chunks de HTTP Transfer Encoding afin d’améliorer les performances des grandes requêtes utilisant l’interface HTTP. #45593 (Geoff Genz).
  • Correction des performances des requêtes SELECT courtes lisant des tables comportant un grand nombre de colonnes Array/Map/Nested. #45630 (Anton Popov).
  • Amélioration des performances du filtrage sur les grands entiers et les types Decimal. #45949 (李扬).
  • Ce changement peut réduire efficacement le surcoût lié à l’obtention du filtre depuis ColumnNullable(UInt8) et améliorer les performances globales des requêtes. Pour évaluer son impact, nous avons utilisé le benchmark TPC-H en remplaçant les types de colonnes non Nullable par des types Nullable, puis nous avons mesuré le QPS des requêtes comme indicateur de performance. #45962 (Zhiguo Zhou).
  • Le type des colonnes virtuelles _part et _partition_id devient LowCardinality(String). Closes #45964. #45975 (flynn).
  • Amélioration des performances de conversion de Decimal lorsque la scale ne change pas. #46095 (Alexey Milovidov).
  • Permet d’augmenter le prefetching pour read data. #46168 (Kseniia Sumarokova).
  • Réécriture de arrayExists(x -> x = 1, arr) en has(arr, 1), ce qui améliore les performances d’un facteur de 1,34. #46188 (李扬).
  • Correction d’une utilisation mémoire excessive pour les vertical merges sur des disk non distants. Respect de max_insert_delayed_streams_for_parallel_write pour les disk distants. #46275 (Nikolai Kochetov).
  • Mise à jour de zstd vers la v1.5.4. Elle apporte quelques améliorations mineures en termes de performances et de compression ratio. Si vous exécutez des réplique avec différentes versions de ClickHouse, vous pourrez voir des messages d’erreur explicites Data after merge/mutation is not byte-identical to data on another replicas. accompagnés d’une explication. Ces messages sont normaux et ne doivent pas vous inquiéter. #46280 (Raúl Marín).
  • Correction de la dégradation des performances causée par #39737. #46309 (Alexey Milovidov).
  • Le handle replicas_status répondra rapidement, même en cas de replication queue volumineuse. #46310 (Alexey Milovidov).
  • Ajout de la prise en charge d’avx512 pour l’aggregate function sum, les fonctions arithmétiques unaires et les fonctions de comparaison. #37870 (zhao zhou).
  • Réécriture du code autour de la distribution des marks et de la coordination globale de la lecture afin d’obtenir l’amélioration des performances maximale. This closes #34527. #43772 (Nikita Mikhaylov).
  • Suppression des clauses DISTINCT redondantes dans les query (subqueries). Implémentée sur la base du query plan. Cette optimisation est similaire à optimize_duplicate_order_by_and_distinct pour les clauses DISTINCT. Elle peut être activée via le paramètre query_plan_remove_redundant_distinct. Lié à #42648. #44176 (Igor Nikonov).
  • Quelques optimisations de réécriture de requêtes : sumIf(123, cond) -> 123 * countIf(1, cond), sum(if(cond, 123, 0)) -> 123 * countIf(cond), sum(if(cond, 0, 123)) -> 123 * countIf(not(cond)) #44728 (李扬).
  • Amélioration de l’interaction entre la fusion contrainte par la mémoire et l’agrégation in order dans la partie supérieure du plan de requête. Auparavant, dans certains cas, nous revenions à un tri explicite pour AIO alors que ce n’était en réalité pas nécessaire. #45892 (Nikita Taranov).
  • Les fusions concurrentes sont désormais planifiées en round-robin par défaut afin de garantir un fonctionnement équitable et sans risque de famine. Auparavant, sur des shards fortement surchargés, les grosses fusions pouvaient parfois être privées de ressources par des fusions plus petites en raison de l’utilisation d’une planification à priorité stricte. Ajout de l’option de config du serveur background_merges_mutations_scheduling_policy pour sélectionner l’algorithme de planification (round_robin ou shortest_task_first). #46247 (Sergei Trifonov).

Amélioration

  • Activer les retries pour INSERT par défaut en cas de perte de session ZooKeeper. Nous l’utilisons déjà en production. #46308 (Alexey Milovidov).
  • Ajout de la possibilité d’ignorer les clés inconnues dans un objet JSON pour les named tuples (input_format_json_ignore_unknown_keys_in_named_tuple). #45678 (Azat Khuzhin).
  • Prise en charge de l’optimisation de la clause where avec déplacement de l’expression de la sorting key vers prewhere pour les query avec final. #38893. #38950 (hexiaoting).
  • Ajout de nouvelles metrics pour les backups : num_processed_files et processed_files_size, qui décrivent le nombre réel de fichiers traités. #42244 (Aleksandr).
  • Ajout de retries en cas d’erreurs DNS interserveurs. #43179 (Anton Kozlov).
  • Amélioration de Keeper : tentative de préallocation d’espace sur le disk pour éviter les problèmes imprévus liés au manque d’espace. Introduction du setting max_log_file_size pour définir la taille maximale des fichiers de log Raft de Keeper. #44370 (Antonio Andelic).
  • Optimisation du comportement de la logique de l’API de délai d’une replica lorsque la replica est en lecture seule. #45148 (mateng915).
  • Demander le password dans clickhouse-client de manière interactive lorsque le mot de passe vide est incorrect. Closes #46702. #46730 (Nikolay Degterinsky).
  • Marquer comme suspecte la compression Gorilla sur les columns de type non-Float*. #45376 (Robert Schulze).
  • Afficher le nom de la replica qui exécute une fusion dans la column postpone_reason. #45458 (Frank Chen).
  • Enregistrer la stack trace de l’exception dans part_log. #45459 (Frank Chen).
  • Le Dictionary regexp_tree a été peaufiné et est désormais compatible avec https://github.com/ua-parser/uap-core. #45631 (Han Fei).
  • Mise à jour de la vérification de SYSTEM SYNC REPLICA, ce qui résout #45508 #45648 (SmitaRKulkarni).
  • Renommer le setting replication_alter_partitions_sync en alter_sync. #45659 (Antonio Andelic).
  • La table function generateRandom et l’engine prennent désormais en charge les data types LowCardinality. C’est utile pour les tests ; par exemple, vous pouvez écrire INSERT INTO table SELECT * FROM generateRandom() LIMIT 1000. Cela est nécessaire pour le Débogage de #45590. #45661 (Alexey Milovidov).
  • Le cache expérimental de résultats de requêtes propose désormais des paramètres de configuration plus modulaires. #45679 (Robert Schulze).
  • “query result cache” a été renommé en “query cache”. #45682 (Robert Schulze).
  • Ajout de la commande SYSTEM SYNC FILE CACHE. Elle exécute l’appel système sync. #8921. #45685 (DR).
  • Ajout d’un nouveau paramètre S3 allow_head_object_request. Cette PR rend optionnelle (et désactivée par défaut) l’utilisation de la requête GetObjectAttributes au lieu de HeadObject, introduite dans https://github.com/ClickHouse/ClickHouse/pull/45288. #45701 (Vitaly Baranov).
  • Ajout de la possibilité de remplacer les paramètres de connexion en fonction du nom de la connexion (autrement dit, il n’est plus nécessaire de stocker un mot de passe pour chaque connexion : vous pouvez tout mettre dans ~/.clickhouse-client/config.xml et même utiliser des fichiers d’historique distincts pour chacune, ce qui peut également être utile). #45715 (Azat Khuzhin).
  • Format Arrow : prise en charge du type duration. Ferme #45669. #45750 (flynn).
  • Extension de la journalisation dans le cache de requêtes afin de faciliter l’analyse du comportement de la mise en cache. #45751 (Robert Schulze).
  • Les paramètres du cache de requêtes au niveau du serveur peuvent désormais être reconfigurés à l’exécution. #45758 (Robert Schulze).
  • Masquage du mot de passe dans les logs lorsque les arguments d’une fonction de table sont spécifiés via une named collection. #45774 (Vitaly Baranov).
  • Amélioration du client S3 interne pour déduire correctement les régions et les redirections selon les différents types d’URL. #45783 (Antonio Andelic).
  • Ajout de la prise en charge des types Map, IPv4 et IPv6 dans generateRandom. Principalement utile pour les tests. #45785 (Raúl Marín).
  • Prise en charge de empty/notEmpty pour les types IP. #45799 (Yakov Olkhovskiy).
  • La colonne num_processed_files a été scindée en deux colonnes : num_files (pour BACKUP) et files_read (pour RESTORE). La colonne processed_files_size a été scindée en deux colonnes : total_size (pour BACKUP) et bytes_read (pour RESTORE). #45800 (Vitaly Baranov).
  • Ajout de la prise en charge de la requête SHOW ENGINES pour la compatibilité avec MySQL. #45859 (Filatenkov Artur).
  • Amélioration de la façon dont l’obfuscateur traite les requêtes. #45867 (Raúl Marín).
  • Améliore le comportement de la conversion en Date pour la valeur limite 65535 (2149-06-06). #46042 #45914 (Joanna Hulboj).
  • Ajoute le paramètre check_referential_table_dependencies pour vérifier les dépendances référentielles lors d’un DROP TABLE. Cette PR résout #38326. #45936 (Vitaly Baranov).
  • Corrige tupleElement pour qu’il renvoie Null lorsqu’il reçoit un argument Null. Ferme #45894. #45952 (flynn).
  • Déclenche une erreur lorsqu’aucun fichier ne correspond au wildcard S3. Ferme #45587. #45957 (chen).
  • Utilise les données d’état du cluster pour vérifier les opérations concurrentes de backup/restore. #45982 (SmitaRKulkarni).
  • Client ClickHouse : utilise une correspondance “exacte” pour la recherche floue, avec une gestion correcte de l’insensibilité à la casse et un algorithme plus adapté à la correspondance des requêtes SQL. #46000 (Azat Khuzhin).
  • Interdit la syntaxe incorrecte de création de View CREATE View X TO Y AS SELECT. Ferme #4331. #46043 (flynn).
  • La famille de moteurs Log prend désormais en charge le paramètre storage_policy. Ferme #43421. #46044 (flynn).
  • Améliore le format JSONColumns lorsque le résultat est vide. Ferme #46024. #46053 (flynn).
  • Ajoute une implémentation de référence pour SipHash128. #46065 (Salvatore Mesoraca).
  • Ajoute une nouvelle métrique pour enregistrer les temps d’allocation et le nombre d’octets via mmap. #46068 (李扬).
  • Actuellement, pour des fonctions comme leftPad, rightPad, leftPadUTF8, rightPadUTF8, le deuxième argument length doit être de type UInt8|16|32|64|128|256. C’est trop restrictif pour les utilisateurs de ClickHouse et, de plus, ce n’est pas cohérent avec d’autres fonctions similaires comme arrayResize, substring, etc. #46103 (李扬).
  • Corrige une assertion dans la fonction welchTTest dans une build de Débogage lorsque la statistique résultante est NaN. Uniformise le comportement avec celui d’autres fonctions similaires. Modifie le comportement de studentTTest pour renvoyer NaN au lieu de lever une exception, car le comportement précédent n’était pas pratique. Ceci ferme #41176 Ceci ferme #42162. #46141 (Alexey Milovidov).
  • Utilisation plus pratique des grands entiers et de ORDER BY WITH FILL. Permet d’utiliser des entiers simples pour les points de début et de fin dans WITH FILL avec ORDER BY sur de grands entiers (128 bits et 256 bits). Corrige le résultat erroné pour les grands entiers avec des points de début ou de fin négatifs. Cela résout #16733. #46152 (Alexey Milovidov).
  • Ajout des colonnes parts, active_parts et total_marks à system.tables dans le cadre du ticket. #46161 (attack204).
  • Les fonctions “multi[Fuzzy]Match(Any|AnyIndex|AllIndices}” rejettent désormais les expressions régulières qui risquent d’être évaluées très lentement dans vectorscan. #46167 (Robert Schulze).
  • Lorsque insert_null_as_default est activé et que la colonne n’a pas de valeur par défaut définie, la valeur par défaut du type de colonne est utilisée. Cette PR corrige également l’utilisation des valeurs par défaut pour les nulls dans le cas des colonnes LowCardinality. #46171 (Kruglov Pavel).
  • Privilégie les clés d’accès explicitement définies pour les clients S3. Si use_environment_credentials est défini sur true et que l’utilisateur a fourni la clé d’accès via une requête ou la config, celle-ci sera utilisée à la place de celle provenant de la variable d’environnement. #46191 (Antonio Andelic).
  • Ajout d’un alias “DATE_FORMAT()” pour la fonction “formatDateTime()” afin d’améliorer la compatibilité avec le dialecte SQL de MySQL, et extension de la fonction formatDateTime avec les substitutions “a”, “b”, “c”, “h”, “i”, “k”, “l” “r”, “s”, “W”. ### Entrée de documentation pour les changements visibles par l’utilisateur Description courte lisible par l’utilisateur : DATE_FORMAT est un alias de formatDateTime. Formate une valeur Time selon la format string donnée. Format est une expression constante ; vous ne pouvez donc pas avoir plusieurs formats pour une seule colonne de résultat. (Fournir un lien vers formatDateTime). #46302 (Jake Bamrah).
  • Ajout de ProfileEvents et CurrentMetrics concernant les tâches de rappel pour les répliques parallèles (tables s3Cluster et MergeTree). #46313 (Alexey Milovidov).
  • Ajout de la prise en charge de DELETE et UPDATE pour les tables utilisant le moteur de stockage KeeperMap. #46330 (Antonio Andelic).
  • Autorise l’écriture de requêtes RENAME avec des paramètres de requête. Résout #45778. #46407 (Nikolay Degterinsky).
  • Corrige les requêtes SELECT paramétrées avec le transformateur REPLACE. Résout #33002. #46420 (Nikolay Degterinsky).
  • Exclut du calcul de la métrique asynchrone “NumberOfDatabases” la base de données interne utilisée pour les tables temporaires/externes. Cela rend le comportement cohérent avec la table système “system.databases”. #46435 (Robert Schulze).
  • Ajout de la colonne last_exception_time à la table distribution_queue. #46564 (Aleksandr).
  • Prise en charge de la clause IN avec un paramètre dans les vues paramétrées. #46583 (SmitaRKulkarni).
  • Les collections nommées ne sont plus chargées au démarrage du serveur (elles le sont désormais lors du premier accès). #46607 (Kseniia Sumarokova).

Amélioration du build/des tests/du packaging

  • Introduction de GWP-ASan, implémenté par le runtime LLVM. Cela clôt #27039. #45226 (Han Fei).
  • Nous voulons rendre nos tests moins stables et plus sujets à des échecs intermittents : ajout d’une randomisation des paramètres de MergeTree dans les tests. #38983 (Anton Popov).
  • Activation de la prise en charge de HDFS sur PowerPC, ce qui permet de corriger les tests fonctionnels suivants : 02113_hdfs_assert.sh, 02244_hdfs_cluster.sql et 02368_cancel_write_into_hdfs.sh. #44949 (MeenaRenganathan22).
  • Ajout du fichier systemd.service pour clickhouse-keeper. Corrige #44293. #45568 (Mikhail f. Shiryaev).
  • Le fork de poco de ClickHouse a été déplacé de “contrib/” vers “base/poco/”. #46075 (Robert Schulze).
  • Ajout d’une option à clickhouse-watchdog pour redémarrer le processus enfant. Cela n’a pas beaucoup d’utilité. #46312 (Alexey Milovidov).
  • Si la variable d’environnement CLICKHOUSE_DOCKER_RESTART_ON_EXIT est définie sur 1, le conteneur Docker exécutera clickhouse-server comme processus enfant au lieu du processus principal, et le redémarrera lorsqu’il s’arrêtera. #46391 (Alexey Milovidov).
  • Correction du fichier de service systemd. #46461 (SuperDJY).
  • La version minimale de Clang requise pour compiler ClickHouse passe de 12 à 15. #46710 (Robert Schulze).
  • Mise à niveau d’Intel QPL de v0.3.0 vers v1.0.0 2. Compilation de libaccel-config et liaison statique à la bibliothèque QPL au lieu d’une liaison dynamique. #45809 (jasperzhu).

Correction de bug (dysfonctionnement perceptible par l’utilisateur dans la version stable officielle)

  • Purge les données exactement selon rabbitmq_flush_interval_ms ou rabbitmq_max_block_size dans StorageRabbitMQ. Ferme #42389. Ferme #45160. #44404 (Kseniia Sumarokova).
  • Utilise PODArray pour le rendu dans la fonction sparkBar, afin de pouvoir contrôler l’utilisation de la mémoire. Ferme #44467. #44489 (Duc Canh Le).
  • Corrige le renvoi d’un élément de tableau non trié par les fonctions (quantilesExactExclusive, quantilesExactInclusive). #45379 (wujunfu).
  • Corrige une exception non interceptée dans HTTPHandler lorsque OpenTelemetry est activé. #45456 (Frank Chen).
  • N’infère pas de dates à partir de nombres à 8 chiffres. Cela pouvait entraîner la lecture de données erronées. #45581 (Kruglov Pavel).
  • Correctifs pour utiliser correctement le paramètre odbc_bridge_use_connection_pooling. #45591 (Bharat Nallan).
  • Lorsque le callback dans le cache est appelé, il est possible que ce cache ait déjà été détruit. Pour garantir la sécurité, nous capturons les membres par valeur. Cela est également sûr pour la planification des tâches, car elle sera désactivée avant la destruction du stockage. Résout #45548. #45601 (Han Fei).
  • Corrige une corruption des données lorsque les codecs Delta ou DoubleDelta sont combinés avec le codec Gorilla. #45615 (Robert Schulze).
  • Vérifie correctement les types lors de l’utilisation d’un index N-gram Bloom filter afin d’éviter des lectures invalides. #45617 (Antonio Andelic).
  • Quelques segfaults ont été signalés autour de c-ares. Ils avaient été introduits dans mes précédentes pull requests. Je les ai corrigés avec l’aide d’Alexander Tokmakov. #45629 (Arthur Passos).
  • Corrige la description de clé en cas de clés primaires dupliquées. Cela peut se produire dans les projections. Voir #45590 pour plus de détails. #45686 (Amos Bird).
  • Définit la méthode et le niveau de compression pour les sauvegardes. Ferme #45690. #45737 (Pradeep Chhetri).
  • Il faut utiliser select_query_typed.limitByOffset au lieu de select_query_typed.limitOffset. #45817 (刘陶峰).
  • Lors de l’utilisation de l’analyseur expérimental, des requêtes comme SELECT number FROM numbers(100) LIMIT 10 OFFSET 10; donnent des résultats erronés (résultat vide pour cette requête SQL). Cela est dû à une étape d’OFFSET inutile ajoutée par le planificateur. #45822 (刘陶峰).
  • Rétrocompatibilité : autorisation d’une conversion implicite par réduction de UInt64 vers IPv4, requise pour l’expression “INSERT … VALUES …”. #45865 (Yakov Olkhovskiy).
  • Correction du parseur IPv6 pour les adresses IPv4 mixtes dont le premier octet est omis (comme ::.1.2.3). #45871 (Yakov Olkhovskiy).
  • Ajout de la colonne query_kind à la table system.processes et à la requête SHOW PROCESSLIST. Suppression du code dupliqué. Cela corrige un bug : le paramètre de configuration global max_concurrent_select_queries n’était pas respecté pour les requêtes avec des chaînes INTERSECT ou EXCEPT. #45872 (Alexey Milovidov).
  • Correction d’un plantage dans la fonction stochasticLinearRegression. Signalé par WingFuzz. #45985 (Nikolai Kochetov).
  • Correction d’un plantage dans les requêtes SELECT avec les modificateurs INTERSECT et EXCEPT qui lisent des données depuis des tables avec des colonnes sparse activées (contrôlées par le paramètre ratio_of_defaults_for_sparse_serialization). #45987 (Anton Popov).
  • Correction de l’optimisation de lecture dans l’ordre pour le tri DESC avec FINAL, corrige #45815. #46009 (Vladimir C).
  • Correction de la lecture de colonnes imbriquées inexistantes sur plusieurs niveaux dans des compact parts. #46045 (Azat Khuzhin).
  • Correction de la colonne elapsed dans system.processes (erreur d’un facteur 10). #46047 (Azat Khuzhin).
  • Correctif complémentaire pour le remplacement des types de domaine IP (IPv4, IPv6) par des types natifs https://github.com/ClickHouse/ClickHouse/pull/43221. #46087 (Yakov Olkhovskiy).
  • Correction de la substitution de variables d’environnement dans la configuration lorsqu’un paramètre a déjà une valeur. Cela corrige #46131. Cela corrige #9547. #46144 (pufit).
  • Correction d’un push down de prédicat incorrect avec des grouping sets. Corrige #45947. #46151 (flynn).
  • Correction d’un possible blocage du pipeline sur fulls_sorting_join avec des clés constantes. #46175 (Vladimir C).
  • Ne jamais réécrire les fonctions tuple en littéraux pendant le formatage afin d’éviter des résultats incorrects. #46232 (Salvatore Mesoraca).
  • Correction d’une possible erreur de dépassement de limites lors de la lecture de LowCardinality(Nullable) au format Arrow. #46270 (Kruglov Pavel).
  • Correction des requêtes SYSTEM UNFREEZE qui échouaient avec l’exception CANNOT_PARSE_INPUT_ASSERTION_FAILED. #46325 (Aleksei Filatov).
  • Corrige un plantage possible causé par un dépassement de capacité d’entier lors de la désérialisation de l’état d’agrégation d’une fonction qui stocke une HashTable. #46349 (Nikolai Kochetov).
  • Corrige un LOGICAL_ERROR possible dans les insertions asynchrones lorsque des données invalides sont envoyées au format VALUES. #46350 (Anton Popov).
  • Correction d’un LOGICAL_ERROR lors d’une tentative d’exécution de ALTER ... MOVE PART ... TO TABLE. Ce type de requête n’a en réalité jamais été pris en charge. #46359 (Alexander Tokmakov).
  • Corrige l’inférence de schéma de s3Cluster pour un insert select distribué exécuté en parallèle lorsque parallel_distributed_insert_select est activé. #46381 (Kruglov Pavel).
  • Corrige les requêtes comme ALTER TABLE ... UPDATE nested.arr1 = nested.arr2 ..., où arr1 et arr2 sont des champs de la même colonne Nested. #46387 (Anton Popov).
  • Le scheduler peut ne pas parvenir à planifier une tâche. Si cela se produit, l’ensemble du MulityPartUpload doit être abandonné et UploadHelper doit attendre les tâches déjà planifiées. #46451 (Dmitry Novik).
  • Corrige PREWHERE pour Merge avec des types par défaut différents (corrige certains NOT_FOUND_COLUMN_IN_BLOCK lorsque le type par défaut de la colonne diffère, autorise aussi PREWHERE lorsque le type de la colonne est identique dans toutes les tables, et l’interdit uniquement s’il diffère). #46454 (Azat Khuzhin).
  • Corrige un plantage pouvant survenir lorsque des valeurs constantes sont utilisées dans ORDER BY. Corrige #46466. #46493 (Nikolai Kochetov).
  • Ne pas lever d’exception si le paramètre disk est spécifié au niveau de la requête, mais que storage_policy est défini dans la section de config des paramètres merge tree. disk remplacera le paramètre défini dans la config. #46533 (Kseniia Sumarokova).
  • Corrige le traitement incorrect d’un argument constant LowCardinality dans la fonction arrayMap. Ce bug pouvait entraîner un segfault en release, ainsi qu’une erreur logique Bad cast dans une build de débogage. #46569 (Alexey Milovidov).
  • corrige #46557. #46611 (Alexander Gololobov).
  • Corrige les redémarrages en boucle de l’unité systemd clickhouse-server si le server ne peut pas démarrer en 1 min 30 s (désactivation de la logique de timeout pour le démarrage de clickhouse-server depuis le service systemd). #46613 (Azat Khuzhin).
  • Les buffers mémoire alloués pendant les insertions asynchrones étaient désalloués dans le contexte global et les compteurs MemoryTracker pour l’utilisateur et la requête correspondants n’étaient pas correctement mis à jour. Cela entraînait de faux positifs d’exceptions OOM. #46622 (Dmitry Novik).
  • Mise à jour pour ne plus effacer on_expression de table_join, car elle est utilisée par de futures exécutions d’analyse ; résout #45185. #46487 (SmitaRKulkarni).

Version 23.1 de ClickHouse, 2023-01-26. Présentation, Vidéo

Version 23.1 de ClickHouse

Notes de mise à niveau

  • La requête SYSTEM RESTART DISK devient sans effet. #44647 (alesapin).
  • L’option PREALLOCATE pour les dictionnaires HASHED/SPARSE_HASHED devient sans effet. #45388 (Azat Khuzhin). Elle n’apporte plus d’avantage significatif.
  • Interdire le codec Gorilla sur les colonnes dont le type n’est ni Float32 ni Float64. #45252 (Robert Schulze). Cela n’avait aucun intérêt et entraînait des incohérences.
  • Les quorum inserts parallèles peuvent fonctionner incorrectement avec les tables *MergeTree créées avec la syntaxe obsolète. Par conséquent, la prise en charge des quorum inserts parallèles est entièrement désactivée pour ces tables. Cela n’affecte pas les tables créées avec la nouvelle syntaxe. #45430 (Alexander Tokmakov).
  • Utiliser la requête GetObjectAttributes au lieu de la requête HeadObject pour obtenir la taille d’un objet dans AWS S3. Cette modification corrige, par exemple, la gestion des endpoints sans région explicite après la mise à jour du SDK AWS. #45288 (Vitaly Baranov). AWS S3 et Minio sont testés, mais gardez à l’esprit que divers services S3-compatible (GCS, R2, B2) peuvent présenter de subtiles incompatibilités. Cette modification peut également vous obliger à ajuster l’ACL pour autoriser la requête GetObjectAttributes.
  • Interdire les chemins dans les noms de fuseau horaire. Par exemple, un nom de fuseau horaire comme /usr/share/zoneinfo/Asia/Aden n’est pas autorisé ; il faut utiliser le nom de la base de données des fuseaux horaires IANA, comme Asia/Aden. #44225 (Kruglov Pavel).
  • Les requêtes combinant un equijoin et des expressions constantes (par ex., JOIN ON t1.x = t2.x AND 1 = 1) sont interdites en raison de résultats incorrects. #44016 (Vladimir C).

Nouvelle fonctionnalité

  • Source de dictionnaire permettant d’extraire des clés en parcourant un arbre d’expressions régulières. Peut être utilisée pour l’analyse du user-agent. #40878 (Vage Ogannisian). #43858 (Han Fei).
  • Ajout de la prise en charge des vues paramétrées : il est désormais possible de spécifier des paramètres de requête pour le moteur de table View. Résout #40907. #41687 (SmitaRKulkarni).
  • Ajout des fonctions quantileInterpolatedWeighted/quantilesInterpolatedWeighted. #38252 (Bharat Nallan).
  • Prise en charge d’ARRAY JOIN pour le type Map, comme la fonction “explode” dans Spark. #43239 (李扬).
  • Prise en charge des littéraux SQL standard pour les chaînes binaires et hexadécimales. #43785 (Mo Xuan).
  • Permet le formatage de DateTime dans le style Joda-Time. Reportez-vous à la documentation Joda-Time. #43818 (李扬).
  • Ajout d’un Formatter de secondes fractionnaires (%f) pour formatDateTime. #44060 (ltrk2). #44497 (Alexander Gololobov).
  • Ajout de la fonction age pour calculer la différence entre deux dates ou deux valeurs de date et d’heure, exprimée en nombre d’unités complètes. Corrige #41115. #44421 (Robert Schulze).
  • Ajout de la source Null pour les dictionnaires. Corrige #44240. #44502 (mayamika).
  • Permet de configurer la classe de stockage S3 avec l’option de configuration s3_storage_class, par exemple <s3_storage_class>STANDARD/INTELLIGENT_TIERING</s3_storage_class>. Corrige #44443. #44707 (chen).
  • Insère des valeurs par défaut en cas d’éléments manquants dans un objet JSON lors de l’analyse d’un named tuple. Ajout du paramètre input_format_json_defaults_for_missing_elements_in_named_tuple, qui contrôle ce comportement. Corrige #45142#issuecomment-1380153217. #45231 (Kruglov Pavel).
  • Enregistre le temps de démarrage du serveur dans ProfileEvents (ServerStartupMilliseconds). Résout #43188. #45250 (SmitaRKulkarni).
  • Refactorisation et amélioration des moteurs de streaming Kafka/RabbitMQ/NATS, avec ajout de la prise en charge de tous les formats, ainsi qu’une légère refactorisation des formats : - Correction de la production de messages dans les formats basés sur les lignes avec suffixes/préfixes. Désormais, chaque message est entièrement formaté avec tous les délimiteurs et peut être réanalysé à l’aide du input format. - Prise en charge des formats basés sur des blocs comme Native, Parquet, ORC, etc. Chaque bloc est formaté comme un message distinct. Le nombre de lignes dans un message dépend de la taille du bloc ; vous pouvez donc le contrôler via le paramètre max_block_size. - Ajout de nouveaux paramètres de moteur kafka_max_rows_per_message/rabbitmq_max_rows_per_message/nats_max_rows_per_message. Ils contrôlent le nombre de lignes formatées dans un message dans les formats basés sur les lignes. Valeur par défaut : 1. - Correction de la forte consommation de mémoire dans le table engine NATS. - Prise en charge de données binaires arbitraires dans le producteur NATS (auparavant, cela ne fonctionnait qu’avec des chaînes contenant \0 à la fin) - Ajout des paramètres de moteur Kafka/RabbitMQ/NATS manquants dans la documentation. - Refactorisation de la production et de la consommation dans Kafka/RabbitMQ/NATS, en les dissociant de la sémantique de WriteBuffers/ReadBuffers. - Refactorisation des output formats : suppression des callbacks sur chaque ligne utilisés dans Kafka/RabbitMQ/NATS (désormais, nous n’y utilisons plus de callbacks), possibilité d’utiliser IRowOutputFormat directement, clarification des délimiteurs de fin de ligne et entre les lignes, possibilité de réinitialiser le format de sortie pour recommencer le formatage - Ajout d’une implémentation correcte dans la fonction formatRow (bonus après la refactorisation des formats). #42777 (Kruglov Pavel).
  • Prise en charge de la lecture/écriture des tables Nested sous forme de List de Struct au format CapnProto. Lecture/écriture de Decimal32/64 comme Int32/64. Ferme #43319. #43379 (Kruglov Pavel).
  • Ajout d’une colonne message_format_string à system.text_log. La colonne contient un pattern utilisé pour formater le message. #44543 (Alexander Tokmakov). Cela permet d’effectuer diverses analyses sur les logs de ClickHouse.
  • Essai de détection automatique des headers avec noms de colonnes (et éventuellement types) pour les input formats CSV/TSV/CustomSeparated. Ajout des paramètres input_format_tsv/csv/custom_detect_header qui activent ce comportement (activé par défaut). Ferme #44640. #44953 (Kruglov Pavel).

Fonctionnalité expérimentale

  • Ajout d’un index inversé expérimental en tant que nouveau type d’index secondaire pour une recherche textuelle efficace. #38667 (larryluogit).
  • Ajout d’un cache des résultats de requête expérimental. #43797 (Robert Schulze).
  • Ajout d’un sous-système d’ordonnancement extensible et configurable pour les requêtes d’E/S (pas encore intégré au code d’E/S lui-même). #41840 (Sergei Trifonov). Cette fonctionnalité ne fait absolument rien, profitez-en.
  • Ajout de SYSTEM DROP DATABASE REPLICA, qui supprime les métadonnées d’une réplique morte d’une base de données Replicated. Résout #41794. #42807 (Alexander Tokmakov).

Amélioration des performances

  • Ne pas charger les parties inactives au démarrage des tables MergeTree. #42181 (Anton Popov).
  • Latence de lecture améliorée depuis le stockage S3 et la fonction de table s3 en présence d’un grand nombre de petits fichiers. Désormais, les paramètres remote_filesystem_read_method et remote_filesystem_read_prefetch prennent effet lors de la lecture depuis le stockage S3. #43726 (Anton Popov).
  • Optimisation de la lecture des champs de struct dans les fichiers Parquet/ORC. Seuls les champs nécessaires sont chargés. #44484 (lgbo).
  • L’algorithme d’agrégation à deux niveaux avait été désactivé par erreur pour les requêtes via l’interface HTTP. Il a été réactivé, ce qui entraîne une nette amélioration des performances. #45450 (Nikolai Kochetov).
  • Ajout de la prise en charge de mmap pour StorageFile, ce qui devrait améliorer les performances de clickhouse-local. #43927 (pufit).
  • Ajout de la prise en charge du sharding dans HashedDictionary pour permettre un chargement parallèle (mise à l’échelle presque linéaire selon le nombre de shards). #40003 (Azat Khuzhin).
  • Accélération de l’analyse des requêtes. #42284 (Raúl Marín).
  • Remplacement systématique de la chaîne OR expr = x1 OR ... OR expr = xN par expr IN (x1, ..., xN) lorsque expr est une colonne LowCardinality. Le paramètre optimize_min_equality_disjunction_chain_length est ignoré dans ce cas. #42889 (Guo Wangyang).
  • Légère amélioration des performances grâce à l’optimisation du code autour de ThreadStatus. #43586 (Zhiguo Zhou).
  • Optimisation de l’évaluation de la logique ternaire par colonne grâce à l’auto-vectorisation. Lors du test de performance de ce microbenchmark, nous avons observé un gain de performance maximal de 21x sur la plateforme ICX (CPU Intel Xeon Platinum 8380). #43669 (Zhiguo Zhou).
  • Éviter si possible d’acquérir des verrous de lecture dans la table system.tables. #43840 (Raúl Marín).
  • Optimisation de ThreadPool. Les tests de performance de SSB (Star Schema Benchmark) sur la plateforme ICX (CPU Intel Xeon Platinum 8380, 80 cœurs, 160 threads) montrent que ce changement pourrait réduire efficacement de 75 % la contention sur le verrou ThreadPoolImpl::mutex, augmenter l’utilisation du CPU et améliorer les performances globales de 2,4 %. #44308 (Zhiguo Zhou).
  • Désormais, l’optimisation de la prédiction de la taille de la table de hachage n’est appliquée que si la taille de la table de hachage en cache est suffisamment grande (les seuils ont été déterminés empiriquement et codés en dur). #44455 (Nikita Taranov).
  • Légère amélioration des performances pour la lecture asynchrone depuis des systèmes de fichiers distants. #44868 (Kseniia Sumarokova).
  • Ajout d’une voie rapide pour : - col like '%%'; - col like '%'; - col not like '%'; - col not like '%'; - match(col, '.*'). #45244 (李扬).
  • Améliore légèrement l’optimisation du cas le plus courant pour le filtrage (clause WHERE). #45289 (Nikita Taranov).
  • Ajout d’informations de monotonie pour toUnixTimestamp64* afin de permettre davantage d’optimisations algébriques pour l’analyse des index. #44116 (Nikita Taranov).
  • Autorise la configuration des données temporaires pour le traitement des requêtes (spilling to disk) à fonctionner avec le cache du système de fichiers (en utilisant l’espace du disque de cache) #43972 (Vladimir C). Cela améliore principalement ClickHouse Cloud, mais peut aussi être utilisé pour des déploiements autogérés, si vous savez ce que vous faites.
  • La table system.replicas effectue désormais en parallèle la récupération du statut des répliques. Résout #43918. #43998 (Nikolay Degterinsky).
  • Optimise la consommation mémoire lors des sauvegardes vers S3 : les fichiers destinés à S3 sont désormais copiés directement sans utiliser WriteBufferFromS3 (qui pouvait consommer beaucoup de mémoire). #45188 (Vitaly Baranov).
  • Ajout d’un cache pour les identifiants de block asynchrones. Cela réduira le nombre de requêtes vers ZooKeeper lorsque nous activerons la déduplication des async inserts. #45106 (Han Fei).

Amélioration

  • Utiliser la structure de la table d’insertion dans generateRandom sans argument. #45239 (Kruglov Pavel).
  • Autoriser la conversion implicite en entiers des nombres à virgule flottante stockés dans les champs de chaîne de JSON dans les fonctions JSONExtract. Par ex. JSONExtract('{"a": "1000.111"}', 'a', 'UInt64') -> 1000, alors qu’auparavant cela renvoyait 0. #45432 (Anton Popov).
  • Ajout des champs supports_parallel_parsing et supports_parallel_formatting à la table system.formats pour améliorer l’introspection. #45499 (Anton Popov).
  • Améliorer la lecture des champs CSV au format CustomSeparated/Template. Closes #42352 Closes #39620. #43332 (Kruglov Pavel).
  • Uniformiser la mesure du temps écoulé des requêtes. #43455 (Raúl Marín).
  • Améliorer l’utilisation automatique de la structure de la table d’insertion dans les fonctions de table file/hdfs/s3 lorsque des colonnes virtuelles sont présentes dans une requête SELECT, ce qui corrige les erreurs possibles Block structure mismatch ou number of columns mismatch. #43695 (Kruglov Pavel).
  • Ajouter la prise en charge des arguments signés dans la fonction range. Fixes #43333. #43733 (sanyu).
  • Supprimer les tris redondants, par exemple les tris liés aux clauses ORDER BY dans les sous-requêtes. Implémenté à partir du plan de requête. Cela réalise une optimisation similaire à optimize_duplicate_order_by_and_distinct concernant les clauses ORDER BY, mais de façon plus générique, car elle s’applique à toutes les étapes de tri redondantes (et pas seulement à celles causées par une clause ORDER BY) ainsi qu’aux sous-requêtes de n’importe quelle profondeur. Lié à #42648. #43905 (Igor Nikonov).
  • Ajouter la possibilité de désactiver la déduplication des fichiers pour BACKUP (pour les backups sans déduplication, ATTACH peut être utilisé à la place d’un RESTORE complet). Par exemple BACKUP foo TO S3(...) SETTINGS deduplicate_files=0 (par défaut deduplicate_files=1). #43947 (Azat Khuzhin).
  • Refactoriser et améliorer l’inférence de schéma pour les formats texte. Ajouter le nouveau paramètre schema_inference_make_columns_nullable, qui contrôle si les types de résultat sont rendus Nullable (activé par défaut). #44019 (Kruglov Pavel).
  • Amélioration de la prise en charge du protocole PROXYv1. #44135 (Yakov Olkhovskiy).
  • Ajouter dans la table system.parts des informations sur la dernière vérification de part effectuée par les threads de nettoyage. #44244 (Dmitry Novik).
  • Désactiver les fonctions de table pour les insertions en mode readonly. #44290 (SmitaRKulkarni).
  • Ajouter un paramètre simultaneous_parts_removal_limit pour limiter le nombre de parts traitées lors d’une itération de CleanupThread. #44461 (Dmitry Novik).
  • Ne pas initialiser ReadBufferFromS3 lorsque seules des colonnes virtuelles sont nécessaires dans une requête. Cela peut être utile pour #44246. #44493 (chen).
  • Empêche les suggestions de noms de colonnes en double. Corrige #44130. #44519 (Joanna Hulboj).
  • Autorise la substitution de macro dans l’endpoint de disks. Résout #40951. #44533 (SmitaRKulkarni).
  • Améliore l’inférence de schéma lorsque input_format_json_read_object_as_string est activé. #44546 (Kruglov Pavel).
  • Ajoute un paramètre au niveau utilisateur, database_replicated_allow_replicated_engine_arguments, qui permet d’interdire la création de tables ReplicatedMergeTree avec des arguments dans DatabaseReplicated. #44566 (alesapin).
  • Empêche les utilisateurs de spécifier par erreur la valeur zéro (invalide) pour index_granularity. Corrige #44536. #44578 (Alexey Milovidov).
  • Ajout de la possibilité de définir le chemin du fichier keytab du service dans le paramètre keytab de la section kerberos de config.xml. #44594 (Roman Vasin).
  • Utilise la partie déjà saisie de la requête pour la recherche floue (transmise à la bibliothèque skim, écrite en Rust et liée statiquement à ClickHouse). #44600 (Azat Khuzhin).
  • Active input_format_json_read_objects_as_strings par défaut afin de pouvoir lire des objets JSON imbriqués tant que le type JSON Object est expérimental. #44657 (Kruglov Pavel).
  • Amélioration de la déduplication des insertions asynchrones : lorsque des utilisateurs effectuent des insertions asynchrones en double, les doublons sont dédupliqués en mémoire avant d’interroger Keeper. #44682 (Han Fei).
  • Le format d’entrée/sortie Avro analysera le type bool comme le type bool de ClickHouse. #44684 (Kruglov Pavel).
  • Prise en charge du type Bool dans Arrow/Parquet/ORC. Corrige #43970. #44698 (Kruglov Pavel).
  • N’analyse pas de manière trop gourmande au-delà des guillemets lors de la lecture des UUIDs : cela peut conduire à analyser par erreur des données incorrectes comme si elles étaient valides. #44686 (Raúl Marín).
  • Infère UInt64 en cas de débordement de Int64 et corrige certaines transformations dans l’inférence de schéma. #44696 (Kruglov Pavel).
  • Auparavant, la résolution des dépendances dans la base de données Replicated était effectuée de manière bricolée ; elle est désormais réalisée correctement à l’aide d’un graphe explicite. #44697 (Nikita Mikhaylov).
  • Correction de output_format_pretty_row_numbers, qui ne préserve pas le compteur d’un bloc à l’autre. Clôt #44815. #44832 (flynn).
  • Ne plus signaler d’erreurs dans system.errors lorsque des parts sont fusionnées en concurrence avec le processus de nettoyage en arrière-plan. #44874 (Raúl Marín).
  • Optimisation et correction des métriques pour INSERT asynchrone sur Distributed. #44922 (Azat Khuzhin).
  • Ajout de paramètres pour interdire les sauvegardes et restaurations concurrentes, ce qui résout #43891. Implémentation : * Ajout de paramètres au niveau du server pour interdire les sauvegardes et restaurations concurrentes, lus et définis lors de la création de BackupWorker dans Context. * Les paramètres sont définis sur true par défaut. * Avant de démarrer une sauvegarde ou une restauration, ajout d’une vérification pour voir si d’autres sauvegardes/restaurations sont en cours. Pour les requêtes internes, la vérification détermine si elles proviennent du nœud lui-même à l’aide de backup_uuid. #45072 (SmitaRKulkarni).
  • Ajout du paramètre de config <storage_policy> pour les logs système. #45320 (Stig Bakken).

Amélioration du build/des tests/du packaging

  • Liaison statique avec la bibliothèque skim (écrite en Rust) pour la recherche floue dans l’historique local de clickhouse client. #44239 (Azat Khuzhin).
  • Nous avons supprimé la prise en charge de la liaison dynamique à cause de Rust. En réalité, Rust n’est qu’un prétexte pour cette suppression, que nous voulions de toute façon effectuer. #44828 (Alexey Milovidov).
  • Suppression de la dépendance à l’outil adduser dans les paquets, car nous ne l’utilisons pas. Cela corrige #44934. #45011 (Alexey Milovidov).
  • La bibliothèque SQLite a été mise à jour vers sa dernière version. Elle est utilisée pour les engines d’intégration SQLite de database et de table. Un faux positif dans un rapport TSan a également été corrigé. Cela clôt #45027. #45031 (Alexey Milovidov).
  • Modifications de CRC-32 pour résoudre le problème de collision WeakHash sur PowerPC. #45144 (MeenaRenganathan22).
  • Mise à jour des submodules aws-c* #43020 (Vitaly Baranov).
  • Fusion automatique des backport PR au vert et des PR approuvées au vert #41110 (Mikhail f. Shiryaev).
  • Mise en place d’un site web pour afficher le statut de la CI de ClickHouse. Source.

Corrections de bugs

  • Remplace les types de domaine IP (IPv4, IPv6) par native. #43221 (Yakov Olkhovskiy). Cela corrige automatiquement certaines implémentations manquantes dans le code.
  • Corrige le processus de sauvegarde si des mutations sont interrompues pendant la sauvegarde. #45351 (Vitaly Baranov).
  • Corrige le message d’exception Invalid number of rows in Chunk. #41404. #42126 (Alexander Gololobov).
  • Corrige l’utilisation possible d’une valeur non initialisée après l’exécution d’expressions après le tri. Clôt #43386 #43635 (Kruglov Pavel).
  • Améliore la gestion de NULL dans les combinators d’agrégation, corrige un possible segfault/erreur logique lors de l’utilisation de l’optimisation peu courante optimize_rewrite_sum_if_to_count_if. Clôt #43758. #43813 (Kruglov Pavel).
  • Corrige les contraintes de paramètres des requêtes CREATE USER/ROLE. #43993 (Nikolay Degterinsky).
  • Corrige un bug lié à une valeur par défaut non analysable pour la colonne EPHEMERAL dans les métadonnées de la table. #44026 (Yakov Olkhovskiy).
  • Corrige l’analyse d’une version invalide dans le paramètre de compatibilité. #44224 (Kruglov Pavel).
  • Aligne la soustraction d’un intervalle à partir d’un DateTime sur l’addition. #44241 (ltrk2).
  • Supprime les limites sur la taille maximale du résultat pour une vue. #44261 (lizhuoyu5).
  • Corrige une possible erreur logique dans le cache si do_not_evict_index_and_mrk_files=1. Clôt #42142. #44268 (Kseniia Sumarokova).
  • Corrige une possible interruption trop précoce de l’écriture dans le cache en écriture directe (la mise en cache pouvait être arrêtée en raison d’une hypothèse erronée alors qu’elle n’aurait pas dû l’être). #44289 (Kseniia Sumarokova).
  • Corrige un possible crash dans le cas où la fonction IN avec des arguments constants était utilisée comme argument constant avec LowCardinality. Corrige #44221. #44346 (Nikolai Kochetov).
  • Corrige la prise en charge des paramètres complexes (comme les Array) des fonctions d’agrégation paramétriques. Cela clôt #30975. La fonction d’agrégation sumMapFiltered était inutilisable dans les requêtes distribuées avant ce changement. #44358 (Alexey Milovidov).
  • Corrige la lecture d’ObjectId dans l’inférence de schéma BSON. #44382 (Kruglov Pavel).
  • Corrige une condition de concurrence pouvant entraîner la suppression prématurée de parts temporaires avant la fin de la fusion dans ReplicatedMergeTree. Ce problème pouvait provoquer des erreurs telles que No such file or directory: xxx. Corrige #43983. #44383 (alesapin).
  • Certaines requêtes invalides SYSTEM ... ON CLUSTER se comportaient de manière inattendue lorsqu’aucun nom de cluster n’était spécifié. Le problème est corrigé : désormais, les requêtes invalides lèvent SYNTAX_ERROR, comme prévu. Corrige #44264. #44387 (Alexander Tokmakov).
  • Corrige la lecture du type Map au format ORC. #44400 (Kruglov Pavel).
  • Corrige la lecture des colonnes absentes des données d’entrée dans les formats Parquet/ORC. Auparavant, cela pouvait entraîner l’erreur INCORRECT_NUMBER_OF_COLUMNS. Ferme #44333. #44405 (Kruglov Pavel).
  • Auparavant, la fonction bar utilisait le même caractère ’▋’ (U+258B “Left five eighths block”) pour afficher les barres 5/8 et 6/8. Ce changement corrige ce comportement en utilisant ’▊’ (U+258A “Left three quarters block”) pour afficher la barre 6/8. #44410 (Alexander Gololobov).
  • Le fait de placer les paramètres de profil après les contraintes des paramètres de profil dans le fichier de configuration rendait ces contraintes inopérantes. #44411 (Konstantin Bogdanov).
  • Corrige SYNTAX_ERROR lors de l’exécution de requêtes EXPLAIN AST INSERT avec des données. Ferme #44207. #44413 (save-my-heart).
  • Corrige la lecture d’une valeur booléenne avec CRLF au format CSV. Ferme #44401. #44442 (Kruglov Pavel).
  • N’exécute plus and/or/if/multiIf sur un dictionnaire LowCardinality, afin que le type de résultat ne puisse pas être LowCardinality. Cela pouvait entraîner l’erreur Illegal column ColumnLowCardinality dans certains cas. Corrige #43603. #44469 (Kruglov Pavel).
  • Corrige les mutations avec le paramètre max_streams_for_merge_tree_reading. #44472 (Anton Popov).
  • Corrige un déréférencement potentiel de pointeur nul avec GROUPING SETS dans ASTSelectQuery::formatImpl (#43049). #44479 (Robert Schulze).
  • Valide les types dans les arguments des fonctions de table, les arguments de la fonction CAST et l’inférence de schéma JSONAsObject conformément aux paramètres. #44501 (Kruglov Pavel).
  • Corrige la fonction IN avec LowCardinality et une colonne const, ferme #44503. #44506 (Duc Canh Le).
  • Correction d’un bug dans la normalisation d’une expression DEFAULT dans une instruction CREATE TABLE. Le second argument de la fonction in (ou l’argument droit de l’opérateur IN) pouvait être remplacé par le résultat de son évaluation lors de l’exécution de la requête CREATE. Corrige #44496. #44547 (Alexander Tokmakov).
  • Les projections ne fonctionnent pas en présence de WITH ROLLUP, WITH CUBE et WITH TOTALS. Dans les versions précédentes, une requête produisait une exception au lieu d’ignorer l’utilisation des projections. Cela clôt #44614. Cela clôt #42772. #44615 (Alexey Milovidov).
  • Les blocs asynchrones n’étaient pas nettoyés, car la fonction get all blocks sorted by time ne récupérait pas les blocs asynchrones. #44651 (Han Fei).
  • Correction de LOGICAL_ERROR The top step of the right pipeline should be ExpressionStep pour les JOIN avec sous-requête, UNION et TOTALS. Corrige #43687. #44673 (Nikolai Kochetov).
  • Évite l’exception std::out_of_range dans le moteur de table Executable. #44681 (Kruglov Pavel).
  • Ne pas appliquer optimize_syntax_fuse_functions aux quantiles sur l’AST, clôt #44712. #44713 (Vladimir C).
  • Correction d’un bug lié à un type incorrect dans la table Merge et PREWHERE, clôt #43324. #44716 (Vladimir C).
  • Correction d’un plantage possible lors de l’arrêt (pendant la destruction de TraceCollector). Corrige #44757. #44758 (Nikolai Kochetov).
  • Correction d’un plantage possible lors du traitement distribué des requêtes. Le plantage pouvait se produire si une requête avec totals ou extremes renvoyait un résultat vide et qu’il y avait des types incompatibles entre les tables Distributed et locales. Corrige #44738. #44760 (Nikolai Kochetov).
  • Correction de fsync pour les fetches (min_compressed_bytes_to_fsync_after_fetch)/petits fichiers (ttl.txt, columns.txt) dans les mutations (min_rows_to_fsync_after_merge/min_compressed_bytes_to_fsync_after_merge). #44781 (Azat Khuzhin).
  • Une rare race condition pouvait se produire lors de l’interrogation des tables system.parts ou system.parts_columns en présence de parts déplacées entre différents disks. Introduit dans #41145. #44809 (Alexey Milovidov).
  • Corrige l’erreur Context has expired, qui pouvait apparaître lorsque l’optimisation des projections était activée. Le problème peut être reproduit avec certaines fonctions, comme dictHas/dictGet, qui utilisent le contexte à l’exécution. Corrige #44844. #44850 (Nikolai Kochetov).
  • Correctif pour l’erreur Cannot read all data, qui pouvait se produire lors de la lecture du dictionnaire LowCardinality depuis un système de fichiers distant. Corrige #44709. #44875 (Nikolai Kochetov).
  • Ignore les cas où les capteurs de surveillance matérielle ne peuvent pas être lus, au lieu d’afficher un message d’exception complet dans les logs. #44895 (Raúl Marín).
  • Utilise la valeur max_delay_to_insert lorsque le temps calculé pour différer INSERT dépasse la valeur du paramètre. Lié à #44902. #44916 (Igor Nikonov).
  • Corrige l’erreur Different order of columns in UNION subquery pour les requêtes avec UNION. Corrige #44866. #44920 (Nikolai Kochetov).
  • Le délai pour INSERT peut être calculé de manière incorrecte, ce qui peut conduire à toujours utiliser le paramètre max_delay_to_insert comme délai au lieu de la valeur correcte. Utilise une formule simple max_delay_to_insert * (parts_over_threshold/max_allowed_parts_over_threshold), c.-à-d. que le délai augmente proportionnellement au nombre de parts au-dessus du seuil. Clôt #44902. #44954 (Igor Nikonov).
  • Corrige une erreur alter table TTL lorsqu’une wide part possède le masque lightweight delete. #44959 (Mingliang Pan).
  • Correctif complémentaire pour le remplacement des types de domaine IP (IPv4, IPv6) par des types natifs #43221. #45024 (Yakov Olkhovskiy).
  • Correctif complémentaire pour le remplacement des types de domaine IP (IPv4, IPv6) par des types natifs https://github.com/ClickHouse/ClickHouse/pull/43221. #45043 (Yakov Olkhovskiy).
  • Un dépassement de tampon était possible dans le parseur. Découvert par le fuzzer. #45047 (Alexey Milovidov).
  • Corrige une possible erreur de type cannot-read-all-data dans le moteur de stockage FileLog. Clôt #45051, #38257. #45057 (Kseniia Sumarokova).
  • L’agrégation économe en mémoire (paramètre distributed_aggregation_memory_efficient) est désactivée lorsque des grouping sets sont présents dans la requête. #45058 (Nikita Taranov).
  • Corrige le dictionnaire RANGE_HASHED afin de compter les colonnes de plage comme faisant partie de la clé primaire lors des mises à jour lorsque update_field est spécifié. Clôt #44588. #45061 (Maksim Kita).
  • Corrige l’erreur Cannot capture column pour l’argument capturé LowCardinality d’une lambda imbriquée. Corrige #45028. #45065 (Nikolai Kochetov).
  • Corrige un résultat de requête incorrect avec additional_table_filters (le filtre supplémentaire n’était pas appliqué) lorsque la projection minmax/count est utilisée. #45133 (Nikolai Kochetov).
  • Corrige un bogue dans la fonction histogram, qui acceptait des valeurs négatives. #45147 (simpleton).
  • Corrige la nullabilité incorrecte des colonnes dans StoreageJoin, clôt #44940. #45184 (Vladimir C).
  • Corrige le rechargement du paramètre background_fetches_pool_size (augmentation à l’exécution). #45189 (Raúl Marín).
  • Traite correctement les requêtes SELECT sur les moteurs KV (p. ex. KeeperMap, EmbeddedRocksDB) utilisant IN sur la clé avec une sous-requête produisant un type différent. #45215 (Antonio Andelic).
  • Corrige une erreur logique dans SEMI JOIN & join_use_nulls dans certains cas, clôt #45163, clôt #45209. #45230 (Vladimir C).
  • Corrige un heap-use-after-free lors de la lecture depuis S3. #45253 (Kruglov Pavel).
  • Corrige un bogue lorsque le type Avro Union est [‘null’, Nested type], clôt #45275. Corrige un bogue qui déduit incorrectement le type bytes comme Float. #45276 (flynn).
  • Lève une exception appropriée lorsqu’un PREWHERE explicite ne peut pas être utilisé avec une table utilisant le moteur de stockage Merge. #45319 (Antonio Andelic).
  • Sous WSL1 Ubuntu, l’exécutable auto-extractible de ClickHouse ne parvient pas à se décompresser en raison d’une incohérence : /proc/self/maps signale l’inode d’un fichier 32 bits, tandis que stat signale un inode 64 bits. #45339 (Yakov Olkhovskiy).
  • Corrige une condition de concurrence au démarrage d’une table Distributed (ce qui pouvait conduire à traiter plusieurs fois le fichier d’un async INSERT). #45360 (Azat Khuzhin).
  • Corrige un crash possible lors de la lecture depuis le stockage S3 et la fonction de table s3 lorsque la requête ListObject a échoué. #45371 (Anton Popov).
  • Corrige l’exception SELECT ... FROM system.dictionaries lorsqu’un dictionnaire a une structure invalide (par ex. un type incorrect dans la config XML). #45399 (Aleksei Filatov).
  • Corrige l’inférence de schéma de s3Cluster lorsque la structure de la table d’insertion est utilisée dans les requêtes INSERT INTO ... SELECT * FROM s3Cluster. #45422 (Kruglov Pavel).
  • Corrige un bug dans l’analyse de JSON/BSONEachRow via HTTP qui pouvait entraîner l’utilisation de valeurs par défaut pour certaines colonnes au lieu des valeurs des données. #45424 (Kruglov Pavel).
  • Corrige un bug (Code: 632. DB::Exception: Données inattendues … après une valeur IPv6 analysée …) lié à l’analyse typée des types IP depuis une source texte. #45425 (Yakov Olkhovskiy).
  • Ferme #45297 Ajoute une vérification des expressions régulières vides. #45428 (Han Fei).
  • Corrige un possible blocage de requête (probablement distribuée). #45448 (Azat Khuzhin).
  • Corrige un interblocage possible lorsque allow_asynchronous_read_from_io_pool_for_merge_tree est activé, en cas d’exception provenant de ThreadPool::schedule. #45481 (Nikolai Kochetov).
  • Corrige le cas possible d’une table encore utilisée après DETACH. #45493 (Azat Khuzhin).
  • Corrige un arrêt rare lorsqu’une requête est annulée et qu’une analyse parallèle a été utilisée pendant son exécution. #45498 (Anton Popov).
  • Corrige une condition de concurrence entre la création d’une table Distributed et un INSERT dans celle-ci (pouvait entraîner CANNOT_LINK pendant l’INSERT dans la table). #45502 (Azat Khuzhin).
  • Ajoute la valeur par défaut appropriée (SLRU) au getter de la stratégie de cache. Ferme #45514. #45524 (Kseniia Sumarokova).
  • Interdit ARRAY JOIN dans les mutations. Ferme #42637 #44447 (SmitaRKulkarni).
  • Correctif pour les astérisques qualifiés avec un nom d’alias de table et un transformateur de colonnes. Résout #44736. #44755 (SmitaRKulkarni).
Dernière modification le 29 juin 2026