Table des matières
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 = 1ouSET compatibility = '23.11'. Clôt #37286. #51858 (Alexey Milovidov). - Le paramètre MergeTree
clean_deleted_rowsest obsolète et n’a désormais plus aucun effet. Le mot-cléCLEANUPpourOPTIMIZEn’est pas autorisé par défaut (il peut être réactivé avec le paramètreallow_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 clauseON, 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 BYprend désormais en chargeALL, ce qui signifie que ClickHouse trie sur toutes les colonnes de la clauseSELECT. 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
/binaryouvre une visionneuse visuelle des symboles du binaire ClickHouse. #58211 (Alexey Milovidov). - Ajout d’une nouvelle fonction SQL
sqidpour générer des Sqids (https://sqids.org/), exemple :SELECT sqid(125, 126). #57512 (Robert Schulze). - Ajout d’une nouvelle fonction
seriesPeriodDetectFFTpour 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 :defaultetunion. 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(etCOMPLEX_KEY_HASHED_ARRAY) prend en chargeSHARDS, commeHASHED. #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_BYTEScomme alias deformatReadableSize. #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 types3_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_finalest 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/RESTOREainsi que la commandeclickhouse-disks copy. #56744 (MikhailBurdukov). - Le hash JOIN respecte le paramètre
max_joined_block_size_rowset ne produit pas de gros blocks pourALL 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
countpour les tables utilisant le moteurMerge. #57867 (skyoct). - Optimise l’aggregation dans certains cas. #57872 (Anton Popov).
- La fonction
hasAnypeut désormais tirer parti des skipping indices en texte intégral. #57878 (Jpnock). - La fonction
if(cond, then, else)(et son aliascond ? 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_finalsi l’expression de clé de partition ne contient que des colonnes de l’expression de clé primaire. #58218 (Maksim Kita). - Accélère
MINetMAXpour les types natifs. #58231 (Raúl Marín). - Implémente la cache policy
SLRUpour 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ètrebackground_fetches_pool_size. - Le paramètre de niveau MergeTreereplicated_max_parallel_fetches_for_hostest devenu Obsolete - Les paramètres de niveau MergeTreereplicated_fetches_http_connection_timeout,replicated_fetches_http_send_timeoutetreplicated_fetches_http_receive_timeoutont été déplacés au niveau Server. - Le paramètrekeep_alive_timeouta été ajouté à la liste des paramètres de niveau Server. #57523 (Nikita Mikhaylov). - Rend les requêtes sur
system.filesystem_cachemoins 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_shardscomme paramètre pour les tablesDistributed, à 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 typesEnum. Auparavant, le premier argument de la fonction devait être une valeur de typeStringouFixedString. Cela améliore la compatibilité avec des outils tiers comme Tableau via l’interface MySQL. #57277 (Serge Klochkov). - La fonction
formatprend désormais en charge des arguments de tout type (au lieu des seuls argumentsStringetFixedString). C’est important pour évaluerSELECT format('The {0} to all questions is {1}', 'answer', 42). #57549 (Robert Schulze). - Permet désormais d’utiliser la fonction
date_truncavec un premier argument insensible à la casse. Les deux variantes sont maintenant prises en charge :SELECT date_trunc('day', now())etSELECT 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_dropetmax_table_size_to_dropau 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_countdanssystem.distribution_queue(dans le cas dedistributed_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_zket un élément non vide avec replace=1. #57628 (Azat Khuzhin). - Ajoute une table function
fuzzJSONqui 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 cacheafin de définir combien de temps attendre avant la mise à jour du cache. Déprécie le paramètreasync_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 avecKILL QUERY. #57746 (Vitaly Baranov). - Interdit les requêtes
CREATE TABLE ... AS SELECTpour les table enginesReplicateddans la base de données expérimentaleReplicated, 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_tracepour 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’attendrestorage_system_stack_trace_pipe_read_timeout_mslorsque 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://ets3://) 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 --obfuscatesaura reconnaître Settings, MergeTreeSettings et les fuseaux horaires, et conservera leurs noms inchangés. #58179 (Alexey Milovidov).- Ajout d’une fonction explicite
finalize()dansZipArchiveWriter. Simplification d’un code trop complexe dansZipArchiveWriter. 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_marksdansParallelReplicasReadingCoordinator#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.backupsetsystem.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
Templatependant 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_ndimsdans 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_traceen 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_consumerscar il comporte un bogue. #57822 (Azat Khuzhin). - Corrige la prise en charge des clés LowCardinality dans Merge JOIN. #57827 (vdimir).
- Correctif pour
InterpreterCreateQuerylié 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
accurateCastOrNullpour les valeursDateTimehors plage #58139 (Andrey Zvonov). - Corrige une possible erreur
PARAMETER_OUT_OF_BOUNDlors 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) etnamed_collection_control(gestion des collections nommées via des requêtes SQL) pour l’utilisateurdefault. Cela clôt #56482. #56619 (Alexey Milovidov). - Plusieurs améliorations ont été apportées à
RESPECT NULLS/IGNORE NULLSpour 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/%cde la fonctionparseDateTimepeuvent 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éfinissezparsedatetime_parse_without_leading_zeros = 0pour restaurer le comportement précédent, qui exigeait deux chiffres. La fonctionformatDateTimepeut désormais également afficher des heures/mois sans zéro initial. Ce comportement est contrôlé par le paramètreformatdatetime_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
avgWeightedavec des arguments de typeDecimal. Solution de contournement : convertissez les arguments enFloat64. 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 argumentsDecimal, contactez support@clickhouse.com. Correction d’une erreur dans la fonction d’agrégationsumMap, 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 fonctiongroupArraySample: 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_databasespour 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 moteursOrdinary,AtomicetReplicated. 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 tablesystem.asynchronous_loaderpour 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_compressiondans la sectionzookeeper. 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 surtrue, 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_DAYSde MySQL. Par exemple,SELECT fromDaysSinceYearZero(739136)renvoie2023-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
Float16pour une utilisation dans les fichiers.npy. Résout #56344. #56424 (Yarik Briukhovetskyi). - Ajout d’une vue système
information_schema.statisticspour 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épertoireuser_files. #56868 (Andrey Zvonov). - Ajout de la colonne virtuelle
_size, contenant la taille du fichier en octets, aux enginess3/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_algorithmrespecte 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_queriesde 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 tablesystem.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 engineMerge. #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
seeksur 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 commeselect 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
FileetHDFS. #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
BackupEntriesCollectordans les sauvegardes. #56312 (Kseniia Sumarokova).
Amélioration
- Ajoute un nouveau paramètre
MergeTreeadd_implicit_sign_column_constraint_for_collapsing_engine(désactivé par défaut). Lorsqu’il est activé, il ajoute une contrainte CHECK implicite pour les tablesCollapsingMergeTree, qui limite la valeur de la colonneSignà -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
Mergefiltre 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 tableMerge. #50209 (Ilya Golshtein). - Ajoute un paramètre
max_execution_time_leafpour limiter le temps d’exécution sur un shard pour une requête distribuée, ainsi quetimeout_overflow_mode_leafpour 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 etbackground_schedule_pool_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
\ret 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\nou\n\r;\rdoit 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ù\rse 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_LISTdans les formats Apache Arrow. #56118 (edef). - Autorise la compaction manuelle de
EmbeddedRocksDBvia la requêteOPTIMIZE. #56225 (Azat Khuzhin). - Ajout de la possibilité de spécifier
BlockBasedTableOptionspour les tablesEmbeddedRocksDB. #56264 (Azat Khuzhin). SHOW COLUMNSaffiche 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ètreuse_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èsTRUNCATEouDROP PARTITION. #56282 (Alexander Tokmakov). - Correction de la gestion des query strings non constantes dans les fonctions
formatQuery/formatQuerySingleLine. Ajout également de variantesOrNullpour les deux fonctions, qui renvoientNULLlorsqu’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.replicasenvoient 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 verssystem.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_failuresa é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 valeursfalseoutrue) a été marqué comme obsolète. Il a été remplacé par le paramètrequery_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 nulldans la clause JOIN ON. Analyseur expérimental uniquement. #56538 (vdimir). - La fonction
concatprend 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 deconcat. Par exemple,SELECT concat('ab', 42)renvoie désormaisab42. #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 queriesALTER TABLE ... MOVE PARTITION|PART TO DISK|VOLUMEde manière asynchrone. La taille du pool pour les exécutions en arrière-plan est contrôlée parbackground_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_bytesettotal_rowsdans 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
concatpeut désormais être appelée avec un seul argument, par exempleSELECT concat('abc'). Cela rend son comportement plus cohérent avec l’implémentation deconcatdans 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 sidictionaries_lazy_loadest false. #57133 (Vitaly Baranov). - Vérifie le type de source du dictionnaire lors de sa création, même si
dictionaries_lazy_loadest 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
/dashboarddu serveur HTTP prend désormais en charge les graphiques à plusieurs lignes. #57236 (Sergei Trifonov). - L’option de ligne de commande
max_memory_usage_in_clientprend 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_windowdans 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-localetclickhouse-clientsont 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 fonctioncoveragequi renvoie un Array d’adresses uniques dans le code trouvées depuis la réinitialisation précédente de la couverture ; (2) la querySYSTEM 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)
- Corrige l’Analyzer expérimental : une insertion depuis SELECT avec une sous-requête référençant la table d’insertion ne doit traiter que le bloc d’insertion. #50857 (Yakov Olkhovskiy).
- Corrige un bug dans la fonction
str_to_map. #56423 (Arthur Passos). - Keeper
reconfig: ajoute un délai d’expiration avant de céder/prendre le rôle de leader #53481 (Mike Kot). - Corrige un header incorrect dans le grace hash join et le filter pushdown #53922 (vdimir).
- SELECT depuis des tables système lorsqu’une table est basée sur une table function. #55540 (MikhailBurdukov).
- RFC : corrige “Cannot find column X in source stream” pour les requêtes Distributed avec LIMIT BY #55836 (Azat Khuzhin).
- Corrige ‘Cannot read from file:’ lors de l’exécution du client en arrière-plan #55976 (Kruglov Pavel).
- Corrige la fermeture de clickhouse-local en cas de paramètre send_logs_level invalide #55994 (Kruglov Pavel).
- Corrige un bug dans explain ast avec une vue paramétrée #56004 (SmitaRKulkarni).
- Corrige un crash pendant le chargement des tables au démarrage #56232 (Nikolay Degterinsky).
- Corrige les dictionnaires basés sur ClickHouse avec une requête explicite #56236 (Nikolay Degterinsky).
- Corrige un segfault dans le gestionnaire de signaux de Keeper #56266 (Antonio Andelic).
- Corrige un résultat de requête incomplet pour UNION dans la fonction view(). #56274 (Nikolai Kochetov).
- Corrige l’incohérence entre “cast(‘0’ as DateTime64(3))” et “cast(‘0’ as Nullable(DateTime64(3)))” #56286 (李扬).
- Corrige une rare condition de concurrence liée à un échec d’allocation de mémoire #56303 (alesapin).
- Corrige la restauration depuis une sauvegarde avec
flatten_nestedetdata_type_default_nullable#56306 (Kseniia Sumarokova). - Corrige un crash lors de l’ajout d’une colonne de type Object(JSON) #56307 (Nikita Mikhaylov).
- Corrige un crash dans filterPushDown #56380 (vdimir).
- Corrige la restauration depuis une sauvegarde avec une vue matérialisée et une table source supprimée #56383 (Kseniia Sumarokova).
- Corrige un segfault lors de l’initialisation de Kerberos #56401 (Nikolay Degterinsky).
- Corrige un dépassement de tampon dans T64 #56434 (Alexey Milovidov).
- Corrige le problème de clé primaire Nullable dans final (2) #56452 (Amos Bird).
- Corrige les requêtes ON CLUSTER sans base de données sur le nœud initial #56484 (Nikolay Degterinsky).
- Corrige un échec au démarrage dû à une dépendance TTL #56489 (Nikolay Degterinsky).
- Corrige les requêtes ALTER COMMENT ON CLUSTER #56491 (Nikolay Degterinsky).
- Corrige ALTER COLUMN avec ALIAS #56493 (Nikolay Degterinsky).
- Corrige les NAMED COLLECTIONs vides #56494 (Nikolay Degterinsky).
- Corrige deux cas d’analyse de projection. #56502 (Amos Bird).
- Corrige la gestion des alias dans le cache de requêtes #56545 (Robert Schulze).
- Corrige la conversion de
Nullable(Enum)versNullable(String)#56644 (Nikolay Degterinsky). - Gestion plus fiable des journaux dans Keeper #56670 (Antonio Andelic).
- Corrige la fusion de configuration pour les nœuds avec des attributs de substitution #56694 (Konstantin Bogdanov).
- Corrige l’utilisation en double de la fonction de table input(). #56695 (Nikolai Kochetov).
- Corrige un problème de chargement dynamique d’OpenSSL dans RabbitMQ #56703 (Igor Nikonov).
- Corrige un plantage dans le codec GCD lorsque des zéros sont présents dans les données #56704 (Nikita Mikhaylov).
- Corrige ‘mutex lock failed: Invalid argument’ dans clickhouse-local lors d’une insertion dans une fonction #56710 (Kruglov Pavel).
- Corrige l’analyse du texte Date dans le chemin optimiste #56765 (Kruglov Pavel).
- Corrige un plantage dans le codec FPC #56795 (Alexey Milovidov).
- DatabaseReplicated : corrige le timeout d’une requête DDL après la récupération d’une réplique #56796 (Alexander Tokmakov).
- Corrige le signalement incorrect des colonnes Nullable dans le protocole binaire MySQL #56799 (Serge Klochkov).
- Prise en charge des fichiers de métadonnées Iceberg pour les tables du metastore #56810 (Kruglov Pavel).
- Correction d’un rapport TSAN dans transform #56817 (Raúl Marín).
- Correction de la requête SET et du formatage de SETTINGS #56825 (Nikolay Degterinsky).
- Correction d’un échec au démarrage dû à une dépendance de table dans joinGet #56828 (Nikolay Degterinsky).
- Correction de l’aplatissement des colonnes Nested existantes lors de ADD COLUMN #56830 (Nikolay Degterinsky).
- Correction de la prise en charge de CR en fin de ligne pour CSV #56901 (KevinyhZou).
- Correction de
tryBase64Decodeavec une entrée non valide #56913 (Robert Schulze). - Correction de la génération de colonnes profondément imbriquées dans les schémas CapnProto/Protobuf #56941 (Kruglov Pavel).
- Empêche les ALTER incompatibles des colonnes de projection #56948 (Amos Bird).
- Correction de la validation du chemin de fichier SQLite #56984 (San).
- S3Queue : correction de l’incrémentation de la référence des métadonnées #56990 (Kseniia Sumarokova).
- Correction mineure de S3Queue #56999 (Kseniia Sumarokova).
- Correction de la validation du chemin de fichier pour DatabaseFileSystem #57029 (San).
- Correction de
fuzzBitsavecARRAY JOIN#57033 (Antonio Andelic). - Correction d’un déréférencement de pointeur nul dans partial merge join avec joined_subquery_re… #57048 (vdimir).
- Correction d’une condition de concurrence dans RemoteSource #57052 (Raúl Marín).
- Implémentation de
bitHammingDistancepour les grands entiers #57073 (Alexey Milovidov). - Correction d’un bug affectant les liens de type S3 #57075 (Yarik Briukhovetskyi).
- Correction de la fonction JSON_QUERY avec plusieurs chemins numériques #57096 (KevinyhZou).
- Correction d’un dépassement de tampon dans le codec Gorilla #57107 (Nikolay Degterinsky).
- Fermeture de la connexion interserver sur toute exception avant l’authentification #57142 (Antonio Andelic).
- Correction d’un segfault après ALTER UPDATE avec une colonne Nullable MATERIALIZED #57147 (Nikolay Degterinsky).
- Correction d’une optimisation incorrecte du plan de JOIN avec une projection normale partiellement matérialisée #57196 (Amos Bird).
- Ignorer les commentaires lors de la comparaison des descriptions de colonnes #57259 (Antonio Andelic).
- Correction de la métrique
ReadonlyReplicadans tous les cas #57267 (Antonio Andelic). - Les merges en arrière-plan utilisent correctement le stockage temporaire des données dans le cache #57275 (vdimir).
- Correction de Keeper pour le changelog et les snapshots #57299 (Antonio Andelic).
- Ignorer les tâches ON CLUSTER terminées si le nom d’hôte a changé #57339 (Alexander Tokmakov).
- Les mutations MergeTree réutilisent la granularité d’index de la part source #57352 (Maksim Kita).
- Cache FS : ajout d’une limite pour le téléchargement en arrière-plan #57424 (Kseniia Sumarokova).
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 endistributed_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_timeoutdéfini côté client commereceive_timeoutcô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 tablessystem.s3queueetsystem.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 exemplex >= 10 AND x <= 20 AND y >= 20 AND y <= 30, peuvent être utilisées pour l’indexation. Un paramètreanalyze_index_with_space_filling_curvesa é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 TABLEoffre 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 avecCHECK 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 fonctionformatQuerySingleLine, 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
_erroret_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 stockagenats_handle_error_modepour NATS,rabbitmq_handle_error_modepour RabbitMQ ethandle_error_modepour FileLog, de manière similaire àkafka_handle_error_mode. Si cette valeur est définie surdefault, une exception est levée lorsque ClickHouse ne parvient pas à analyser un enregistrement ; si elle est définie surstream, 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 existanteSHOW SETTINGS. #55979 (Maksim Kita). - Ajout des champs
substreamsetfilenamesà la tablesystem.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_defaultpour utiliserORDER BY ()par défaut. #55899 (Srikanth Chekuri).
Amélioration des performances
- Ajout de l’option
query_plan_preserve_num_streams_after_window_functionspour 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_mapparabsl::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
INlorsque 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::insertManyetColumnVector::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 limitemax_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
densitytransmis à 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ètremax_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 volumineuxwatchesetlist_watches. #56054 (Alexander Gololobov). - Ajout du paramètre
optimize_trivial_approximate_count_querypour utiliser une approximation decountpour 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) ettoWeek(WEEK) prennent désormais en charge les argumentsString. Leur comportement est ainsi cohérent avec celui de MySQL. #55589 (Robert Schulze). - Ajout du paramètre
date_time_overflow_behavioravec les valeurs possiblesignore,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_settingsaprè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_projectionest devenu obsolète (il était activé par défaut depuis longtemps). #55112 (Nikita Mikhaylov). - Lorsque la fonction
untupleest 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 deuntupleet 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êteDESCRIBE. Ajout également du paramètredescribe_compact_output. S’il est défini surtrue, la requêteDESCRIBErenvoie uniquement les noms et les types des colonnes, sans informations supplémentaires. #55129 (Anton Popov). - Il arrive que
OPTIMIZEavecoptimize_throw_if_noop=1échoue avec l’erreurunknown 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
MaterializedPostgreSQLsuivant 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ètrematerialized_postgresql_use_unique_replication_consumer_identifier. Closes #54918. #55145 (Kseniia Sumarokova). - Permet d’analyser des
DateTime64etDateTimenégatifs avec une partie fractionnaire à partir de chaînes courtes. #55146 (Andrey Zvonov). - Pour améliorer la compatibilité avec MySQL, 1.
information_schema.tablesinclut désormais le nouveau champtable_rows, et 2.information_schema.columnsinclut désormais le nouveau champextra. #55215 (Robert Schulze). clickhouse-clientn’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
RENAMEsans le mot-cléTABLE, comme dansRENAME 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 COLUMNSsignale désormais correctement le typeFixedStringcommeBLOBsi le paramètreuse_mysql_types_in_show_columnsest activé. Deux nouveaux paramètres ont également été ajoutés,mysql_map_string_to_text_in_show_columnsetmysql_map_fixed_string_to_text_in_show_columns, pour renvoyer les typesStringetFixedStringenTEXTouBLOB. #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-localet basculer vers une autre base de données. Cela rend le comportement cohérent avecclickhouse-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 exempleSELECT 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
nulllors de la sérialisation de Tuple en objets JSON, ce qui permet de conserver la compatibilité avec la fonctionto_jsonde Spark, également utile pour gluten. #55956 (李扬). - Les fonctions
(add|sub)Dateprennent désormais en charge les arguments de date encodés sous forme de chaîne, par exempleSELECT 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 exempleSELECT '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-keeperavec une configuration intégrée. #56086 (Maksim Kita). - Définit une valeur maximale pour le paramètre de configuration
queued.min.messagesafin 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éeminSampleSizeContinuous). 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-keeperdepuis le paquetclickhouse-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
DEFAULTpour 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_columnsn’affecte queSHOW COLUMNS#55481 (Robert Schulze). - Corrige l’analyse incorrecte de
DW_FORM_ref_addrpar 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
FORMATde 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_infoet 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_objectsdans 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ètreinput_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ètreinput_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’erreurCannot determine type for column 'column_name' by first 25000 rows of data, most likely this column contains only Nulls or empty Arrays/Mapslors 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,hdfsetazure_blob_storagepeut désormais contenir les élémentsread_resourceetwrite_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ètreworkloadet classées via la sectionworkload_classifiersde 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 schedulingbandwidth_limit. Il permet de spécifier les contraintesmax_speedetmax_burstsur 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_numberpour les MergeTree tables. #44532. #47532 (SmitaRKulkarni). - Ajout de la clause
IF EMPTYpour les requêtesDROP TABLE. #48915 (Pavel Novitskiy). - Les fonctions SQL
toString(datetime, timezone)etformatDateTime(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 deDECIMAL(P, 0)) etDECIMAL(raccourci deDECIMAL(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_logpour suivre toutes les opérationsBACKUPetRESTORE. #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 sortieMarkdown. #53860 (irenjj). - Ajout de la fonction
decodeHTMLComponent. #54097 (Bharat Nallan). - Ajout de
peak_threads_usageà la tablequery_log. #54335 (Alexey Gerasimchuck). - Ajout de la prise en charge de
SHOW FUNCTIONSdans clickhouse-client. #54337 (Julia Kartseva). - Ajout de la fonction
toDaysSinceYearZeroavec l’aliasTO_DAYS(pour la compatibilité avec MySQL), qui renvoie le nombre de jours écoulés depuis le0001-01-01(dans le calendrier grégorien proleptique). #54479 (Robert Schulze). La fonctiontoDaysSinceYearZeroprend désormais aussi en charge les arguments de typeDateTimeetDateTime64. #54856 (Serge Klochkov). - Ajout des fonctions
YYYYMMDDtoDate,YYYYMMDDtoDate32,YYYYMMDDhhmmssToDateTimeetYYYYMMDDhhmmssToDateTime64. 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 existantesYYYYMMDDToDate,YYYYMMDDToDateTime,YYYYMMDDhhmmddToDateTime,YYYYMMDDhhmmddToDateTime64. #54509 (Quanfa Fu) (Robert Schulze). - Ajout de plusieurs fonctions de distance entre chaînes, notamment
byteHammingDistanceeteditDistance. #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_namespour 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/_pathaprè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 dansMergeTreesi ORDER BY contient une colonneDecimal. 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 deuniqencountlorsqu’ils sont sélectionnés à partir d’une sous-requête avec GROUP BY. #52082 #52645 (JackyWoo). - Supprime les appels manuels à
mmap/mremap/munmapet 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
toStringavec 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 dansColumnString. #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
GeneratorJSONPathet 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-clienttraite les fichiers en parallèle dans le cas deINFILE '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_sizepour 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::ceilRowsToCompleteGranulespar une recherche binaire. #54869 (usurai).
Fonctionnalité expérimentale
- La création des index
Annoypeut désormais être parallélisée à l’aide du paramètremax_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
MergeTreepar des hachages de noms. Cela permet d’éviter l’erreurFile name too longdans certains cas. #50612 (Anton Popov). - Interprète les données au format
JSONcommeJSONEachRowen cas d’échec de l’analyse des métadonnées. Cela permet de lire les fichiers avec l’extension.jsonmê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_formatpour activer/désactiver ce comportement (activé par défaut). #52853 (Kruglov Pavel). - La vue
information_schema.tablesinclut désormais un nouveau champdata_lengthqui 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 engineEmbeddedRocksDBne ferme pas correctement les fichiers sur NFS après l’exécution deDROP TABLE. #53502 (Mingliang Pan). RESTORE TABLE ON CLUSTERdoit 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 dossierdetachedavec 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_nsaux 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),syncetexistspour keeper-client. #54201 (pufit). clickhouse-localetclickhouse-clientpermettent désormais de spécifier le paramètre--queryplusieurs 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_partspar 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 fonctionstddevPoppour la compatibilité avec MySQL. Clôt #54274. #54382 (Nikolay Degterinsky). - Ajout de la fonction
addDatepour la compatibilité avec MySQL et desubDatepour 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_stringqui 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 commemap/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
versionoptionnel à la commandermdanskeeper-clientpour 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èmesystem.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_schemaont é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 champinformation_schema.tables.table_typeest passé de Enum8 à String. 2. Ajout des champstable_commentettable_collationà la vueinformation_schema.table. 3. Ajout des vuesinformation_schema.key_column_usageetreferential_constraints. 4. Remplacement des alias en majuscules dans les vuesinformation_schemapar 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,randomStringoudictGet. 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., commeclickhouse-server. #54807 (Michael Kolupaev). - Champ
is_obsoletedans la tablesystem.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 HOURSdoit ê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,matchet 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 utiliserstring 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
timestamppour 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/envpour localiser bash — cela prend désormais en charge Nix OS. #54603 (Fionera). - CMake a ajouté l’option
PROFILE_CPU, nécessaire pour exécuterperf recordsans 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
IPv6pour le bloom filter #54200 (Yakov Olkhovskiy). - Correction d’une incompatibilité de type possible avec
IPv4#54212 (Bharat Nallan). - Correction de
system.data_skipping_indicespour 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.errorsaprè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 charactersdans la table functions3#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-localprend en charge l’argument de ligne de commande--database#54503 (vdimir).- Corrige une parsing error possible dans les formats
-WithNamesavecinput_format_with_names_use_headerdé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 Chunkdans MaterializedPostgreSQL #54844 (Kseniia Sumarokova). - Déplacement des paramètres de format Obsolete dans une section distincte #54855 (Kruglov Pavel).
- Reconstruction de
minmax_count_projectionlorsque la partition key est modifiée #54943 (Amos Bird). - Correction d’un CAST incorrect vers
ColumnVector<Int128>dans la fonctionif#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 :
FINALproduit 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 formedisk = 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--concurrencysupé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 declickhouse-benchmarka été supprimée. Si vous utilisiez cette option, vous pouvez extraire les données desystem.query_logau format JSON comme solution de contournement. #53293 (Alexey Milovidov).- La colonne
microsecondsest supprimée desystem.text_log, et la colonnemillisecondsest supprimée desystem.metric_log, car elles sont redondantes en présence de la colonneevent_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_cacheest 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_logpourtrace_type = 'MemorySample'. Cette colonne contient une adresse d’allocation. Ajout de la fonctionflameGraph, 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 functions3Cluster. #50795 (SmitaRKulkarni). - Autorise l’utilisation de
cluster,clusterAllReplicas,remoteetremoteSecuresans 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/fromUTCTimestamppour se comporter commeto_utc_timestamp/from_utc_timestampde 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ètresformat_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ètreoutput_format_schema. #52278 (Kruglov Pavel). - Un nouveau field
query_cache_usagedanssystem.query_logindique désormais si et comment le query cache a été utilisé. #52384 (Robert Schulze). - Ajout des nouvelles fonctions
startsWithUTF8etendsWithUTF8. #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 testerReplicatedMergeTree). #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 colonnedummyde typeUInt8et la valeur0, commesystem.one. Il peut être utilisé avec les colonnes virtuelles_file/_pathpour 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_indexespour 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.clusterscomme alias decluster. #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
S3Queuepour 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_implementationpour réécrirecountDistinctIfaveccount_distinct_implementation. Corrige #30642. #46051 (flynn). - Accélération de la fusion des états des fonctions d’agrégation
uniqetuniqExacten 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
ORCnatif 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_reactionpour 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_loget à 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_controlpour 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
indexdans 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’endpointdefault, 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
Aggregatorlorsquemax_block_sizeest 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
arrayIntersectrenvoie 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 FREEZEne 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
s3refusait de fonctionner avec des URL présignées. Corrige #50846. #52310 (chen). - Ajout de la colonne
namecomme alias deeventetmetricdans les tablessystem.eventsetsystem.metrics. Corrige #51257. #52315 (chen). - Ajout de la prise en charge de la syntaxe
CREATE UNIQUE INDEXdans le parseur, comme no-op, pour une meilleure compatibilité SQL. L’indexUNIQUEn’est pas pris en charge. Définissezcreate_index_ignore_unique = 1pour 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_metricsinclut 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_classdans la clauseSETTINGSde l’instructionBACKUPpour 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_schematantôt en minuscules, tantôt en majuscules. C’est pourquoi nous avons la base de donnéesinformation_schema, qui contient des tables en minuscules, commeinformation_schema.tables, et la base de donnéesINFORMATION_SCHEMA, qui contient des tables en majuscules, commeINFORMATION_SCHEMA.TABLES. Mais certains outils interrogentINFORMATION_SCHEMA.tablesetinformation_schema.TABLES. La solution proposée consiste à dupliquer les tables en minuscules et en majuscules dans les bases de donnéesinformation_schemaetINFORMATION_SCHEMA. #52695 (Yarik Briukhovetskyi). - La requête
CHECK TABLEoffre 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,intDivetintDivOrZeropour les tuples, en les appliquant à chacun des éléments du tuple. #52758 (Yakov Olkhovskiy). - Recherche des fichiers de configuration
yamletymlpar défaut dans clickhouse-client aprèsxml. #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_parsingpour 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 pourclickhouse-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
SETTINGSdes requêtesRESTORE. #52970 (Victor Krasnov). - Ajout de la possibilité de limiter les requêtes S3 lors des opérations de sauvegarde (
BACKUPetRESTORErespectent désormaiss3_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).
hasTokenOrNullethasTokenCaseInsensitiveOrNullrenvoient 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_pathest 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 lepathdans la configuration du cache est relatif, il sera placé dansfilesystem_caches_path; si lepathdans la configuration du cache est absolu, il devra se trouver à l’intérieur defilesystem_caches_path. Sifilesystem_caches_pathn’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 exempleSYSTEM STOP LISTEN QUERIES ALL EXCEPT TCP, HTTP. #53280 (Nikolay Degterinsky). - La valeur par défaut de
max_concurrent_queriespasse 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’erreurDirectory for table data already existslors de la réplication ou de la récupération d’une base de donnéesReplicated. #53425 (Alexander Tokmakov). - Si les paramètres serveur
asynchronous_metrics_update_period_setasynchronous_heavy_metrics_update_period_ssont 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’unDROPou de l’arrêt du serveur. #53501 (Azat Khuzhin). - La fonction
domainRFCprend 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 fonctiongroupArraylors de la sérialisation. La valeur par défaut est16777215. #53550 (Nikolai Kochetov). SCHEMAa été ajouté comme alias deDATABASEafin 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-clientau 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
arrayAUCutilisait 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.cppest dupliqué à la fois dansdbms_sourcesetclickhouse_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
tupleavec 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
PREWHEREen 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
~PushingAsyncPipelineExecutordans 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_modelorsqu’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 colonnedefaultavec 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(aliasUSE 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 parentNAMED COLLECTION ADMINl’est également). Proposé dans #50277. Pour l’accorder, utilisezGRANT NAMED COLLECTION ON collection_name TO userouGRANT NAMED COLLECTION ON * TO user; pour pouvoir accorder ces grants,named_collection_adminest 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.partslast_removal_attemp_time. Elle s’appelle désormaislast_removal_attempt_time. #52104 (filimonov). - La version de
distributed_ddl_entry_format_versionpasse 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 pendantinsert/merge. Supprimez ces projections avant la mise à jour. Corrige #52353. #52361 (Nikolai Kochetov). - La fonctionnalité expérimentale
hashida é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
Overlaypour combiner plusieurs bases de données en une seule. Ajout du moteur de base de donnéesFilesystempour 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éesS3permet 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éesHDFSpermet 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.settingset 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 LISTENpour 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_binspour 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
RowBinaryWithDefaultsavec 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/initcapUTF8qui 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 KEYdans 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
logeterrorlog), soit dans les arguments de ligne de commande (--log-fileet--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(+ versionsCaseInsensitiveetUTF8) pour rechercher des sous-séquences dans des chaînes. #52050 (Dmitry Kardymon). - Ajout de
array_aggcomme alias degroupArraypour la compatibilité avec PostgreSQL. Clôt #52100. ### Entrée de documentation pour les changements visibles par les utilisateurs. #52135 (flynn). - Ajout de
any_valuecomme alias de compatibilité pour la fonction d’agrégationany. Clôt #52140. #52147 (flynn). - Ajout de la fonction d’agrégation
array_concat_aggpour la compatibilité avec BigQuery ; c’est un alias degroupArrayArray. Clôt #52139. #52149 (flynn). - Ajout de
OCTET_LENGTHcomme alias delength. Clôt #52153. #52176 (FFFFFFFHHHHHHH). - Ajout de la fonction
firstLinepour 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êteKusto. #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é serveurasync_insert_queue_flush_on_shutdown(truepar défaut), qui détermine s’il faut vider la file d’attente des insertions asynchrones lors d’un arrêt propre. Le paramètreasync_insert_threadsest désormais un paramètre côté serveur. #49160 (Anton Popov). - Ajout des alias
current_databaseet de la nouvelle fonctioncurrent_schemaspour la compatibilité avec PostgreSQL. #51076 (Pedro Riera). - Ajout d’un alias pour les fonctions
today(désormais aussi disponible sous les nomscurdate/current_date) etnow(current_timestamp). #52106 (Lloyd-Pottiger). - Prise en charge de
async_deduplication_tokenpour 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.937555153. Vous pouvez désactiver l’utilisation du format de sérialisation sparse en définissant le paramètreratio_of_defaults_for_sparse_serialization = 1pour vos tables MergeTree. #49631 (Alexey Milovidov). - Active par défaut les paramètres
move_all_conditions_to_prewhereetenable_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 dansMergeTreeReadPool. 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
OpenedFileCachepouvait 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_partspar 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, avec4Mipar défaut. Le nombre de threads d’arrière-plan se configure via le paramètre de cachebackground_download_threads, avec2par défaut. De plus,max_file_segment_sizea été augmenté de8Mià32Midans 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_columnsajouté. S’il est défini surtrue, seules les tailles des colonnes de la sectionPREWHEREseront 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
FETCHSQL standard sansOFFSET. 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_headersdans 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 EiBd’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ètrefunction_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_diffetageprennent 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_copypour BACKUP/RESTORE, ets3_allow_native_copypour les disquess3/s3_plain). #51448 (Azat Khuzhin). - Ajout de la colonne
primary_key_sizeà la tablesystem.partspour afficher la taille sur disque de la clé primaire compressée. Clôt #51400. #51496 (Yarik Briukhovetskyi). - Autoriser l’exécution de
clickhouse-localsans 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é
%apour le nom de fichier complet dans le paramètrerename_files_after_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_valuesau 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) = cenc1 <= 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 colonnesMATERIALIZEDetALIAS. 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êtesADD INDEXsansTYPEspé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_logdè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_projectionspour désactiver les projections implicites (actuellement, uniquement la projectionmin_max_count). #52152 (Amos Bird). - Il était possible d’utiliser la fonction
hasTokenpour 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 blockdans 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
ZooKeeperRetriesControlrelance une erreur, il est plus utile de voir sa stack trace d’origine plutôt que celle deZooKeeperRetriesControllui-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 nomname). #51552 (Kseniia Sumarokova). Cette syntaxe peut être modifiée dans cette version. - (experimental MaterializedMySQL) Correction d’un plantage lorsque
mysqlxx::Pool::Entryest 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
reconfigpour ClickHouse Keeper avec reconfiguration incrémentielle, qui peut être activée via le paramètrekeeper_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::fillArrowArrayWithArrayColumnDatafonctionne 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.licensesinclut 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 ,worldau lieu deHello, world. #52549 (Alexey Milovidov).
Correction de bogue (dysfonctionnement visible par l’utilisateur dans une version stable officielle)
- Correction de syncTables dans MaterializedPostgreSQL #49698 (Kseniia Sumarokova).
- Correction de la projection avec optimize_aggregators_of_group_by_keys #49709 (Amos Bird).
- Correction de optimize_skip_unused_shards avec les JOIN #51037 (Azat Khuzhin).
- Correction de formatDateTime() avec un datetime64 négatif fractionnaire #51290 (Dmitry Kardymon).
- Les fonctions
hasToken*étaient totalement incorrectes. Ajout d’un test pour #43358 #51378 (Alexey Milovidov). - Correction de l’optimisation qui déplace les fonctions avant le tri #51481 (Nikolai Kochetov).
- Correction d’une incompatibilité de structure de bloc dans Pipe::unitePipes pour FINAL #51492 (Nikita Taranov).
- Correction d’un SIGSEGV pour les clusters dont tous les shards ont un poids nul (corrige INSERT INTO FUNCTION clusterAllReplicas()) #51545 (Azat Khuzhin).
- Correction du timeout pour les hedged requests #51582 (Azat Khuzhin).
- Correction d’une erreur logique dans ANTI join avec NULL #51601 (vdimir).
- Correction du déplacement des conditions ‘IN’ vers PREWHERE #51610 (Alexander Gololobov).
- Ne pas appliquer PredicateExpressionsOptimizer pour ASOF/ANTI join #51633 (vdimir).
- Correction de l’async insert avec deduplication pour ReplicatedMergeTree utilisant des algorithmes de merging #51676 (Antonio Andelic).
- Correction de la lecture depuis une colonne vide dans
parseSipHashKey#51804 (Nikita Taranov). - Correction d’un segfault lors de la création d’une table EmbeddedRocksdb invalide #51847 (Duc Canh Le).
- Correction des inserts dans les tables MongoDB #51876 (Nikolay Degterinsky).
- Correction d’un interblocage à l’arrêt de DatabaseCatalog #51908 (Alexander Tokmakov).
- Correction d’une erreur dans les opérateurs de sous-requête #51922 (Alexey Milovidov).
- Correction de la connexion asynchrone aux hôtes ayant plusieurs adresses IP #51934 (Kruglov Pavel).
- Ne pas supprimer les entrées après ActionsDAG::merge #51947 (Nikolai Kochetov).
- Vérifie le compteur de références dans
RemoveManyObjectStorageOperation::finalizeau lieu deexecute#51954 (vdimir). - Autorise les UDF paramétriques #51964 (Alexey Milovidov).
- Petit correctif de
toDateTime64()pour les dates postérieures au 2283-12-31 #52130 (Andrey Zvonov). - Corrige le tuple ORDER BY des fonctions WINDOW #52145 (Alexey Milovidov).
- Corrige une analyse incorrecte des projections lorsque l’expression d’agrégation contient des fonctions monotones #52151 (Amos Bird).
- Corrige une erreur dans les fonctions
groupArrayMoving#52161 (Alexey Milovidov). - Désactive la jointure directe pour le dictionnaire de plage #52187 (Duc Canh Le).
- Corrige le test des mutations sticky (ainsi qu’une condition de concurrence extrêmement rare) #52197 (alesapin).
- Corrige une condition de concurrence sur le disque Web #52211 (Kseniia Sumarokova).
- Corrige une data race dans
Connection::setAsyncCallbacksur un paquet inconnu provenant du serveur #52219 (Kruglov Pavel). - Corrige la suppression des données temporaires au démarrage et ajoute un test #52275 (vdimir).
- N’utilise pas les projections minmax_count lors du comptage de colonnes Nullable #52297 (Amos Bird).
- MergeTree/ReplicatedMergeTree doivent utiliser le fuseau horaire du serveur pour les entrées de journal #52325 (Azat Khuzhin).
- Corrige la vue paramétrée avec CTE et usages multiples #52328 (SmitaRKulkarni).
- Désactive les expression templates pour les intervalles de temps #52335 (Alexander Tokmakov).
- Corrige
apply_snapshotdans Keeper #52358 (Antonio Andelic). - Met à jour
build-osx.md#52377 (AlexBykovski). - Corrige le blocage de
countSubstringsavec un needle vide et un haystack en colonne #52409 (Sergei Trifonov). - Corrige une projection standard avec une table Merge #52432 (Amos Bird).
- Corrige une possible double libération dans Aggregator #52439 (Nikita Taranov).
- Corrige l’insertion dans le moteur Buffer #52440 (Vasily Nemkov).
- L’implémentation de AnyHash n’était pas conforme. #52448 (Alexey Milovidov).
- Vérification de la profondeur de récursion dans OptimizedRegularExpression #52451 (Alexey Milovidov).
- Correction d’une condition de concurrence dans DatabaseReplicated::startupTables()/canExecuteReplicatedMetadataAlter() #52490 (Azat Khuzhin).
- Correction d’un plantage dans la fonction
transform#52513 (Alexey Milovidov). - Correction de lightweight delete après la suppression d’une projection #52517 (Anton Popov).
- Correction de l’erreur possible “Cannot drain connections: cancel first” #52585 (Kruglov Pavel).
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_filesdu 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_sizeethttp_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 CPUNormalizedseront 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 queCASEavec 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
TRUNCATEdans la clauseINTO OUTFILE. Il est recommandé d’utiliserAPPENDouTRUNCATEavecINTO OUTFILElorsque le fichier existe. #50950 (alekar). - Ajout du moteur de table
Rediset de la fonction de tableredis. 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_columnspour modifier l’instruction SQLSHOW COLUMNSafin d’afficher les types équivalents à ceux de MySQL lorsqu’un client est connecté via le port de compatibilité MySQL. #49577 (Thomas Panetti). clickhouse-clientpeut 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ètresmax_merge_selecting_sleep_ms,merge_selecting_sleep_slowdown_factor,max_cleanup_delay_periodetcleanup_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_idlocal 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_storagespour 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 PARTITIONni les mutations via la base de donnéesReplicatedsi elle ne comporte qu’un seul shard et que la table sous-jacente estReplicatedMergeTree. #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’
insertde 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_inferencepour 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_defaultlors 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_linesetinput_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_delayetnumber_of_mutations_to_throwsont 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*etparseDateTime64BestEffort*, 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_filesdesystem.partspour 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
RUNdu Dockerfile en blocs conditionnels plus petits. Installation des outils nécessaires à la demande dans la même coucheRUN, 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
ColumnConstversColumnVector<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_descriptiondansCreatingSets#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_marksetcompress_primary_keydans 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_storagesetinput_format_parquet_preserve_orderont é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, utilisezparallelize_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_projectionspour contrôler si les projections seront sélectionnées pour les requêtes SELECT. Le paramètreallow_experimental_projection_optimizationest obsolète et n’a aucun effet. #49719 (Alexey Milovidov). - Marquer
joinGetcomme non déterministe (commedictGet). Cela permet de les utiliser dans des mutations sans paramètre supplémentaire. #49843 (Azat Khuzhin). - Annuler la modification «
groupArrayreturns cannot be nullable » (en raison d’une rupture de compatibilité binaire pourgroupArray/groupArrayLast/groupArraySamplesur les typesNullable, ce qui entraînera probablementTOO_LARGE_ARRAY_SIZEouCANNOT_READ_ALL_DATA). #49971 (Azat Khuzhin). - Le paramètre
enable_memory_bound_merging_of_aggregation_resultsest 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 surfalsejusqu’à 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_cacheest 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,PolygonetMultiPolygon) 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ètredefault_password_typedans leconfig.xmldu 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 functiongenerateRandom. #47409 (Kruglov Pavel). - Autorise l’utilisation de
CASEsans brancheELSEet étendtransformpour 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
headerpour 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_limitetmerges_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 MetricMergesMutationsMemoryTrackingest é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
dotProductfonctionne avec lesArray. #49050 (FFFFFFFHHHHHHH). - Prise en charge de l’instruction
SHOW INDEXpour améliorer la compatibilité avec MySQL. #49158 (Robert Schulze). - Ajout de la prise en charge des colonnes virtuelles
_fileet_pathdans la fonction de tableurl. - Amélioration du message d’erreur pour la fonction de tableurl. - résout #49231 - résout #49232. #49356 (Ziyi Tan). - Ajout du champ
grantsdans 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 FILLregroupe le remplissage par préfixe de tri. Contrôlé par le paramètreuse_with_fill_by_sorting_prefix(activé par défaut). En lien avec #33203#issuecomment-1418736794. #49503 (Igor Nikonov). clickhouse-clientaccepte 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_timeoutdistinct 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
dictGetAllpour 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
toLastDayOfWeekpour 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_processeset de la requêteSHOW USER PROCESSESpour 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_selectpour afficher les secrets des tables, bases de données, fonctions de table et dictionnaires. Ajout du privilègedisplaySecretsInShowAndSelect, 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_marksetcompress_primary_keydans 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
ANYhash join si rien n’est inséré. #48633 (vdimir). - Corrige l’aggregate combinator
-Iflorsqu’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_bytespour limiter la quantité de mémoire utilisée pour les opérations en arrière-plan. -vertical_merge_algorithm_min_bytes_to_activatepour 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_fsetmax_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_HASHEDconsomme désormais 2.6x moins de mémoire et est ~2x plus rapide). #49380 (Azat Khuzhin). - Optimise les tables
system.query_logetsystem.query_thread_logen appliquantLowCardinalitylorsque cela est pertinent. Les requêtes sur ces tables seront plus rapides. #49530 (Alexey Milovidov). - Meilleures performances pour la lecture de fichiers
Parquetlocaux (grâce à la lecture en parallèle). #49539 (Michael Kolupaev). - Améliore les performances de
RIGHT/FULL JOINjusqu’à 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. UtiliseLowCardinalitylorsque 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
Listlors 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
countest 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_resultsest désormais activé par défaut. #50319 (Nikita Taranov).
Fonctionnalité expérimentale
- Le codec
DEFLATE_QPLabaisse 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
Outdatedavec la “réplication zero-copy”. #49630 (Alexander Tokmakov). - Répliques parallèles : 1) Correction d’une erreur
NOT_FOUND_COLUMN_IN_BLOCKlors de l’utilisation de répliques parallèles avec un stockage non répliqué lorsque le paramètreparallel_replicas_for_non_replicated_merge_treeest désactivé 2) Désormais,allow_experimental_parallel_reading_from_replicaspeut 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 siallow_experimental_parallel_reading_from_replicasest 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
BACKUPne 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_insertpour les tablesMergeTree. Il a la même signification que le paramètreasync_insertau 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 depuisclickhouse-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_valueetlast_valuepour accepter NULL. #46467 (lgbo). - Ajout des alias
str_to_mapetmapFromStringpourextractKeyValuePairs. 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 fonctionsossetcosn, il s’agit simplement d’un alias de la table functions3et 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
Replicateddanssystem.clusters:database_shard_name,database_replica_name,is_active. Ajout d’une clause facultativeFROM SHARDà la requêteSYSTEM DROP DATABASE REPLICA. #48548 (Alexander Tokmakov). - Ajout d’une nouvelle colonne
zookeeper_namedanssystem.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
INprend en charge la comparaison entreDateetDate32. 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
Intervaldans les tables. #49085 (larryluogit). - Autorise l’utilisation de la fonction de fenêtre
ntilesans 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êtesALTERqui 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_directoriesdans le cache du système de fichiers. #49203 (Kseniia Sumarokova). - Copie les exemples intégrés dans un nouveau champ
exampledesystem.functionsafin de compléter le champdescription. #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
asymptoticpour la méthode de calculasympdekolmogorovSmirnovTest. 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_sizeetoutdated_part_loading_thread_pool_queue_size. #49317 (Nikita Mikhaylov). - Ne surestimez pas la taille des données traitées pour les colonnes
LowCardinalitylorsqu’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
ARRAYen 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_sizeetmax_parts_cleaning_thread_pool_sizedans la config de niveau supérieur. Les settings au niveau de la tablemax_part_loading_threadsetmax_part_removal_threadssont devenus obsolètes. #49474 (Nikita Mikhaylov). - Autorise
?password=passdans 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_trackeraprès le détachement deThreadGroup. #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
dictionarypourRegExpTreeDictionary. #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_sizesur 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’accepterkey_value_delimitercomme é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
partitionsa été ajouté àsystem.query_logpour indiquer quelles partitions participent au calcul. #49779 (helifu). - Ajout du paramètre
enable_the_endpoint_id_with_zookeeper_name_prefixpourReplicatedMergeTree(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 erreursDuplicate interserver IO endpointlorsqu’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_configouuser_defined_executable_functions_configdans 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
INsont des tuples à un seul élément. #49844 (MikhailBurdukov). - La fonction
bitHammingDistanceprend en charge les types de donnéesStringetFixedString. 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
toUnixTimestampaccepte désormais les argumentsDateetDate32. #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 queSQL_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_optimizationpouroptimize_use_projections,allow_experimental_lightweight_deletepourenable_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
CGroupCpuCfsPeriodetCGroupCpuCfsQuotadans 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 dansmulti, un champweightpeut ê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 champsmin_valueetmax_valuesont 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_tests__release__databasereplicated__[3_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
arrayMapavec 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_prefixdans OptimizeRegularExpression #49919 (Han Fei). - Corrige les métriques
WriteBufferFromS3Bytes,WriteBufferFromS3MicrosecondsetWriteBufferFromS3RequestsErrors#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
--queryet--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
%Mdans 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
pathdans 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
LIGHTWEIGHTetPULLpour la querySYSTEM SYNC REPLICA. La versionLIGHTWEIGHTattend uniquement les fetches et les drop-ranges (les merges et les mutations sont ignorés). La versionPULLrécupère les nouvelles entrées depuis ZooKeeper sans les attendre. Corrige #47794. #48085 (Alexander Tokmakov). - Ajout de la fonction
kafkaMurmurHashpour 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 tablesystem.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 profileReplicatedDataLoss, 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
Mappour JSONExtract. #48629 (李扬). - Ajout du format
PrettyJSONEachRowpour 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
ParquetMetadatapour lire les métadonnées d’un fichier Parquet. #48911 (Kruglov Pavel). - Ajout de la fonction
extractKeyValuePairspour 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 \, \;) etquoting_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
patternetreplacementnon 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
Parquetest désormais bien plus rapide. Les E/S et le décodage sont parallélisés (via le paramètremax_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 tabletcomporte plusieurs parts, un set pour la subquerySELECT id FROM huge_tableest 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_replican’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
INavec 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 functionsurl,file. #48727 (Igor Nikonov). Ce comportement est contrôlé par le paramètreparallelize_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_shardsest 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
Icebergavec des données non partitionnées. - Prise en charge du formatIcebergen version v2 (auparavant, seule la v1 était prise en charge) - Prise en charge de la lecture des données partitionnées pourDeltaLake/Hudi- Lecture plus rapide des métadonnéesDeltaLakegrâce à l’utilisation des fichiers de checkpoint de Delta - Correction de lecturesHudiincorrectes : 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 pourIceberg/DeltaLake/Hudiavec 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_servercomme 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
bitCountprend en charge les data typesFixedStringetString. #49044 (flynn). - Ajout de retries configurables pour toutes les opérations avec [Zoo]Keeper pour les query Backup. #47224 (Nikita Mikhaylov).
- Active
use_environment_credentialspour 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 pourMapet é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 pourORC. #48126 (Kruglov Pavel). - Ajout des colonnes
perform_ttl_move_on_insert,load_balancingpour la tablesystem.storage_policies, modification du type de la colonnevolume_typeenEnum8. #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
Mapen 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 tablesKeeperMap. #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_keypour la compatibilité (définissezcheck_dictionary_primary_key =falsepour 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_filtersetadditional_result_filterdans le nouveau planner. Ajout également d’une entrée dans la documentation pouradditional_result_filter. #48405 (Dmitry Novik). parseDateTimeprend 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
--useret--passwordremplacent désormais les variables d’environnementCLICKHOUSE_USERetCLICKHOUSE_PASSWORD. Clôt #38909. #48440 (Nikolay Degterinsky). - Ajout de tentatives supplémentaires lors du chargement des data parts dans les tables
MergeTreeen cas d’erreurs réessayables. #48442 (Anton Popov). - Ajout de la prise en charge des data types
Date,Date32,DateTime,DateTime64dans les fonctionsarrayMin,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_entrypourReplicatedMergeTree, qui permet de limiter le nombre de commandes de mutation par entréeMUTATE_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_sizesur 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
nameetpart_nameàsystem.partsetsystem.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-threadsau 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
LineAsStringse 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
toTimeZonegé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
Memorylorsque 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
groupArrayfonctionne 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
authdans 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
Date32dans une colonne autre queDate32#48864 (Kruglov Pavel). - Corrige l’erreur
UNKNOWN_IDENTIFIERlors 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
DELETEpour les tables MergeTree est désormais disponible par défaut. - Le comportement des fonctions
*domain*RFCetnetloca 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
Decimal256 bits (plus de 38 chiffres) dansarraySum/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 dansarrayIntersect. Les fonctions d’agrégation statistiques faisant intervenir des moments (commecorrou différentsTTest) utiliserontFloat64comme représentation interne (elles utilisaient auparavantDecimal128, mais cela n’avait pas d’intérêt), et ces fonctions peuvent désormais renvoyernanau lieu deinfen cas de variance infinie. Certaines fonctions étaient autorisées avec les types de donnéesDecimal256, mais renvoyaientDecimal128dans 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_threadsetrestore_threadsdeviennent 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_keyetparallel_replicas_custom_key_filter_type. Si le cluster se compose d’un seul shard avec plusieurs répliques, jusqu’àmax_parallel_replicasseront 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 desample_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 collectionuniquement à certaines collections, au lieu de toutes en une seule fois). Clôt #40894. Ajout d’un nouveau type d’accèsNAMED_COLLECTION_CONTROL, qui n’est pas accordé à l’utilisateur default sauf s’il est explicitement ajouté à la config utilisateur (il est requis pour pouvoir faireGRANT ALL) ; de plus,show_named_collectionsn’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’aliasWIDTH_BUCKETpour des raisons de compatibilité). #42974. #46790 (avoiderboi). - Ajout des nouvelles fonctions
parseDateTime/parseDateTimeInJodaSyntaxselon la chaîne de format spécifiée.parseDateTimeconvertit String en DateTime selon la syntaxe MySQL,parseDateTimeInJodaSyntaxselon la syntaxe Joda. #46815 (李扬). - Utilisation de
dummy UInt8comme structure par défaut pour la table functionnull. Clôt #46930. #47006 (flynn). - Prise en charge du format de date avec virgule, comme
Dec 15, 2021, dans la fonctionparseDateTimeBestEffort. Clôt #46816. #47071 (chen). - Ajout des paramètres
http_wait_end_of_queryethttp_response_buffer_size, qui correspondent aux paramètres d’URLwait_end_of_queryetbuffer_sizede 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éesAtomic, mais pas encore complètement retirées. #47364 (chen). - Ajout de
INSTRcomme alias depositionCaseInsensitivepour 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’aliasstr_to_datepour 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_threadssera défini sur le nombre de cœurs au démarrage du server (selon le même algorithme que pourmax_threads). Cela améliore la concurrence de l’exécution definalsur 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=1dans la sectionSETTINGSde la source dans l’instructionCREATE 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_v1en minuscules pourhasTokenOrNull,hasTokenCaseInsensitiveethasTokenCaseInsensitiveOrNull. #46252 (ltrk2). - Optimise les fonctions
positionetLIKEen 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_queuepour 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-copierpour utiliserGROUP BYau lieu deDISTINCTafin 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,DictionaryetEmbeddedRocksDBsi 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_tuplepar 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 surfalse, mais forcé àtruepour le flush des logs vers les tablessystem.*_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-IdetX-ClickHouse-Timezonesont ajoutés aux réponses pour toutes les requêtes via le protocole HTTP. Auparavant, cela n’était fait que pour les requêtesSELECT. #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=1pour 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_versionpour 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 tableswebsur 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.backupsaprè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_conversionpour la contrôler (activé par défaut). #46990 (Kruglov Pavel). - Autoriser l’utilisation d’IPv4 dans la fonction
rangepour 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
Booldans la fonctionJSONType. Auparavant, le typeNullétait renvoyé par erreur pour les valeurs booléennes. #47046 (Anton Popov). - Utiliser le paramètre
_request_bodypour 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
repeatn’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 fonctionrepeata é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
::__1des stacktraces. Afficherstd::basic_string<char, ...commeStringdans 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
clrspour 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 dansclickhouse-compressor. Corriger d’éventuels arrêts brutaux et erreurs arithmétiques dansclickhouse-compressoravec 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
ExpiredTokendans certains cas limites. Elle est configurable viaexpiration_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
OrdinaryversAtomicest 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
Protobufen 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 exemplea.b.c Array(Array(Array(UInt32)))) ; il est désormais possible d’utiliser simplementa Array(Array(Array(UInt32))). #47650 (Kruglov Pavel). - Ajout d’un modificateur
STRICToptionnel pourSYSTEM 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_limitest utilisé pour faire en sorte querows_before_limit_at_leastreflè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
WriteBufferFromS3MicrosecondsetWriteBufferFromS3RequestsErrors. #47885 (Antonio Andelic). - Ajout des options
--linket--noninteractive(-y) à l’installation de ClickHouse. Clôt #47750. #47887 (Nikolay Degterinsky). - Correction de l’exception
UNKNOWN_TABLElors 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, deMapavec n’importe quel type de clé et deDateTime64avec 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
EXPLAINdans 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
clickhouseexistant lors de l’installation de ClickHouse viacurl | 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
vectorscanvers 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 TABLEavec des tablesReplicatedMergeTreeet des bases de donnéesAtomic. Dans de rares cas, cela pouvait entraîner les erreursCan't get data for node /zk_path/log_pointeretThe specified key does not existsi 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
andpendant 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-locallors 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
BSONEachRowlorsque la taille du document est invalide #47540 (Kruglov Pavel). - Préservation de l’erreur dans
system.distribution_queuelors deSYSTEM 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
Fileavec la compressionzlibetgzip#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
cidxis 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_sizeenfilesystem_cache_max_download_size. #45614 (Kseniia Sumarokova). - L’utilisateur
defaultn’aura pas, par défaut, les autorisations pour le type d’accèsSHOW NAMED COLLECTION(par exemple, l’utilisateurdefaultne 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
countDigitssur des jeux de données réalistes. Cela a permis de clore #44518. Dans les versions précédentes,countDigits(0)renvoyait0; désormais, il renvoie1, 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
StorageIceberget de la fonction de tableicebergpour accéder au stockage de tables Iceberg sur S3. #45384 (flynn). - Permet de configurer le stockage avec
SETTINGS disk = '<disk_name>'(au lieu destorage_policy) ainsi qu’avec une création explicite de disque viaSETTINGS disk = disk(type=s3, ...). #41976 (Kseniia Sumarokova). - Expose les compteurs
ProfileEventsdanssystem.part_log. #38614 (Bharat Nallan). - Enrichissement du moteur
ReplacingMergeTreeexistant pour permettre les insertions en double. Cela combine les avantages deReplacingMergeTreeet deCollapsingMergeTreedans 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égationcovarSampetcovarPopsont similaires àcorr, j’ajoute égalementcovarSampMatrixetcovarPopMatrix. @alexey-milovidov clôt #44587. #44680 (FFFFFFFHHHHHHH). - Introduction de la fonction
arrayShufflepour effectuer des permutations aléatoires de tableaux. #45271 (Joanna Hulboj). - Prise en charge du type
FIXED_SIZE_BINARYdans Arrow, deFIXED_LENGTH_BYTE_ARRAYdansParquet, avec correspondance versFixedString. Ajout des paramètresoutput_format_parquet_fixed_string_as_fixed_byte_array/output_format_arrow_fixed_string_as_fixed_byte_arraypour contrôler le type de sortie par défaut deFixedString. Clôt #45326. #45340 (Kruglov Pavel). - Ajout d’une nouvelle colonne
last_exception_timeàsystem.replication_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
JodaTimepour ‘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
finalpour appliquer implicitement le modifierFINALà chaque table. #40945 (Arthur Passos). - Ajout des fonctions
arrayPartialSortetarrayPartialReverseSort. #46296 (Joanna Hulboj). - Le nouveau parameter HTTP
client_protocol_versionpermet 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 SparkREGEXP_EXTRACTpour des raisons de compatibilité. Elle est similaire à la fonction existanteextract. #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
Parqueten utilisant un lecteur par lots. #45878 (LiuNeng). - Ajoute une nouvelle méthode
io_uringpourlocal_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éfautpread. #38456 (Saulius Valatka). - Réécrit les fonctions d’agrégation avec une expression
ifcomme 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
multiIfgrâce à une exécution colonnaire, avec une accélération de 2,3x. #45296 (李扬). - Ajoute un chemin rapide pour la fonction
positionlorsque la sous-chaîne recherchée est vide. #45382 (李扬). - Active l’optimisation
query_plan_remove_redundant_sortingpar 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
SELECTcourtes lisant des tables comportant un grand nombre de colonnesArray/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
_partet_partition_iddevientLowCardinality(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)enhas(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_writepour 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_statusré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_distinctpour les clauses DISTINCT. Elle peut être activée via le paramètrequery_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_policypour sélectionner l’algorithme de planification (round_robinoushortest_task_first). #46247 (Sergei Trifonov).
Amélioration
- Activer les retries pour
INSERTpar 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
whereavec déplacement de l’expression de la sorting key versprewherepour les query avecfinal. #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_sizepour 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
Gorillasur 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_treea é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_syncenalter_sync. #45659 (Antonio Andelic). - La table function
generateRandomet l’engine prennent désormais en charge les data typesLowCardinality. C’est utile pour les tests ; par exemple, vous pouvez écrireINSERT 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èmesync. #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êteGetObjectAttributesau lieu deHeadObject, 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.xmlet 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_filesa été scindée en deux colonnes :num_files(pour BACKUP) etfiles_read(pour RESTORE). La colonneprocessed_files_sizea été scindée en deux colonnes :total_size(pour BACKUP) etbytes_read(pour RESTORE). #45800 (Vitaly Baranov). - Ajout de la prise en charge de la requête
SHOW ENGINESpour 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_dependenciespour vérifier les dépendances référentielles lors d’unDROP TABLE. Cette PR résout #38326. #45936 (Vitaly Baranov). - Corrige
tupleElementpour qu’il renvoieNulllorsqu’il reçoit un argumentNull. 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
Logprend désormais en charge le paramètrestorage_policy. Ferme #43421. #46044 (flynn). - Améliore le format
JSONColumnslorsque 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 argumentlengthdoit ê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 commearrayResize,substring, etc. #46103 (李扬). - Corrige une assertion dans la fonction
welchTTestdans une build de Débogage lorsque la statistique résultante est NaN. Uniformise le comportement avec celui d’autres fonctions similaires. Modifie le comportement destudentTTestpour 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_partsettotal_marksàsystem.tablesdans 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_defaultest 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_credentialsest défini surtrueet 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
formatDateTimeavec 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_FORMATest un alias deformatDateTime. 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
ProfileEventsetCurrentMetricsconcernant les tâches de rappel pour les répliques parallèles (tabless3ClusteretMergeTree). #46313 (Alexey Milovidov). - Ajout de la prise en charge de
DELETEetUPDATEpour les tables utilisant le moteur de stockageKeeperMap. #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-watchdogpour redémarrer le processus enfant. Cela n’a pas beaucoup d’utilité. #46312 (Alexey Milovidov). - Si la variable d’environnement
CLICKHOUSE_DOCKER_RESTART_ON_EXITest définie sur 1, le conteneur Docker exécuteraclickhouse-servercomme 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_msourabbitmq_max_block_sizedansStorageRabbitMQ. 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.limitByOffsetau lieu deselect_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 tablesystem.processeset à la requêteSHOW PROCESSLIST. Suppression du code dupliqué. Cela corrige un bug : le paramètre de configuration globalmax_concurrent_select_queriesn’était pas respecté pour les requêtes avec des chaînesINTERSECTouEXCEPT. #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
SELECTavec les modificateursINTERSECTetEXCEPTqui lisent des données depuis des tables avec des colonnes sparse activées (contrôlées par le paramètreratio_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
elapseddanssystem.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_joinavec 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 UNFREEZEqui échouaient avec l’exceptionCANNOT_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_ERRORpossible dans les insertions asynchrones lorsque des données invalides sont envoyées au formatVALUES. #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_selectest activé. #46381 (Kruglov Pavel). - Corrige les requêtes comme
ALTER TABLE ... UPDATE nested.arr1 = nested.arr2 ..., oùarr1etarr2sont des champs de la même colonneNested. #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
UploadHelperdoit attendre les tâches déjà planifiées. #46451 (Dmitry Novik). - Corrige
PREWHEREpour Merge avec des types par défaut différents (corrige certainsNOT_FOUND_COLUMN_IN_BLOCKlorsque le type par défaut de la colonne diffère, autorise aussiPREWHERElorsque 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
diskest spécifié au niveau de la requête, mais questorage_policyest défini dans la section de config des paramètres merge tree.diskremplacera le paramètre défini dans la config. #46533 (Kseniia Sumarokova). - Corrige le traitement incorrect d’un argument constant
LowCardinalitydans la fonctionarrayMap. Ce bug pouvait entraîner un segfault en release, ainsi qu’une erreur logiqueBad castdans 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 DISKdevient sans effet. #44647 (alesapin). - L’option
PREALLOCATEpour les dictionnairesHASHED/SPARSE_HASHEDdevient sans effet. #45388 (Azat Khuzhin). Elle n’apporte plus d’avantage significatif. - Interdire le codec
Gorillasur les colonnes dont le type n’est niFloat32niFloat64. #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
*MergeTreecréé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
GetObjectAttributesau lieu de la requêteHeadObjectpour 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êteGetObjectAttributes. - Interdire les chemins dans les noms de fuseau horaire. Par exemple, un nom de fuseau horaire comme
/usr/share/zoneinfo/Asia/Adenn’est pas autorisé ; il faut utiliser le nom de la base de données des fuseaux horaires IANA, commeAsia/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
DateTimedans le style Joda-Time. Reportez-vous à la documentation Joda-Time. #43818 (李扬). - Ajout d’un Formatter de secondes fractionnaires (
%f) pourformatDateTime. #44060 (ltrk2). #44497 (Alexander Gololobov). - Ajout de la fonction
agepour 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
Nullpour 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 moteurkafka_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
Nestedsous forme deListdeStructau formatCapnProto. Lecture/écriture deDecimal32/64commeInt32/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éesReplicated. 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
S3et la fonction de tables3en présence d’un grand nombre de petits fichiers. Désormais, les paramètresremote_filesystem_read_methodetremote_filesystem_read_prefetchprennent effet lors de la lecture depuis le stockageS3. #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 = xNparexpr IN (x1, ..., xN)lorsqueexprest une colonneLowCardinality. Le paramètreoptimize_min_equality_disjunction_chain_lengthest 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.replicaseffectue 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_parsingetsupports_parallel_formattingà la tablesystem.formatspour 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 mismatchounumber 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_distinctconcernant les clausesORDER 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éfautdeduplicate_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 rendusNullable(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.partsdes 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_limitpour 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_stringest 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 tablesReplicatedMergeTreeavec des arguments dansDatabaseReplicated. #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
keytabde la sectionkerberosde 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_stringspar 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
Avroanalysera 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.errorslorsque 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
adduserdans les paquets, car nous ne l’utilisons pas. Cela corrige #44934. #45011 (Alexey Milovidov). - La bibliothèque
SQLitea é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
EPHEMERALdans 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
INavec des arguments constants était utilisée comme argument constant avecLowCardinality. 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 CLUSTERse 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èventSYNTAX_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
barutilisait 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_ERRORlors de l’exécution de requêtesEXPLAIN AST INSERTavec 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 ColumnLowCardinalitydans 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
DEFAULTdans une instructionCREATE TABLE. Le second argument de la fonctionin(ou l’argument droit de l’opérateurIN) 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 timene récupérait pas les blocs asynchrones. #44651 (Han Fei). - Correction de
LOGICAL_ERRORThe top step of the right pipeline should be ExpressionSteppour les JOIN avec sous-requête, UNION et TOTALS. Corrige #43687. #44673 (Nikolai Kochetov). - Évite l’exception
std::out_of_rangedans le moteur de table Executable. #44681 (Kruglov Pavel). - Ne pas appliquer
optimize_syntax_fuse_functionsaux 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.partsousystem.parts_columnsen 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, commedictHas/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 dictionnaireLowCardinalitydepuis 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_insertlorsque 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 subquerypour les requêtes avecUNION. 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_insertcomme délai au lieu de la valeur correcte. Utilise une formule simplemax_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_HASHEDafin de compter les colonnes de plage comme faisant partie de la clé primaire lors des mises à jour lorsqueupdate_fieldest spécifié. Clôt #44588. #45061 (Maksim Kita). - Corrige l’erreur
Cannot capture columnpour l’argument capturéLowCardinalityd’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
SELECTsur les moteurs KV (p. ex. KeeperMap, EmbeddedRocksDB) utilisantINsur 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
bytescommeFloat. #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
S3et la fonction de tables3lorsque la requêteListObjecta échoué. #45371 (Anton Popov). - Corrige l’exception
SELECT ... FROM system.dictionarieslorsqu’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_treeest activé, en cas d’exception provenant deThreadPool::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).