Table des matières
Release ClickHouse v24.11, 2024-11-26
Release ClickHouse v24.10, 2024-10-31
Release ClickHouse v24.9, 2024-09-26
Release ClickHouse v24.8 LTS, 2024-08-20
Release ClickHouse v24.7, 2024-07-30
Release ClickHouse v24.6, 2024-07-01
Release ClickHouse v24.5, 2024-05-30
Release ClickHouse v24.4, 2024-04-30
Release ClickHouse v24.3 LTS, 2024-03-26
Release ClickHouse v24.2, 2024-02-29
Release ClickHouse v24.1, 2024-01-30
historique des modifications de 2023
Release ClickHouse 24.12, 2024-12-19. Présentation, Vidéo
Changement non rétrocompatible
- Les fonctions
greatestetleastignorent désormais les valeurs d’entréeNULL, alors qu’auparavant elles renvoyaientNULLsi l’un des arguments étaitNULL. Par exemple,SELECT greatest(1, 2, NULL)renvoie désormais 2. Ce changement rend leur comportement compatible avec PostgreSQL, mais rompt en même temps la compatibilité avec MySQL, qui renvoieNULL. Pour conserver le comportement précédent, définissez le paramètreleast_greatest_legacy_null_behavior(par défaut :false) surtrue. #65519 #73344 (kevinyhzou). - Une nouvelle intégration MongoDB est désormais utilisée par défaut. Les utilisateurs qui souhaitent continuer à utiliser l’ancien driver MongoDB (basé sur le driver Poco) peuvent activer le paramètre serveur
use_legacy_mongodb_integration. #73359 (Kirill Nikiforov.
Nouvelle fonctionnalité
- Fait passer les types
JSON/Dynamic/Variantdes fonctionnalités expérimentales au statut bêta. #72294 (Pavel Kruglov). Nous avons également rétroporté vers la 24.11 tous les correctifs ainsi que ce changement. - L’évolution de schéma du format de stockage de données Iceberg offre à l’utilisateur de nombreuses possibilités pour modifier le schéma de sa table. L’ordre des colonnes, les noms de colonnes et les extensions simples de type peuvent être modifiés en interne. #69445 (Daniil Ivanik).
- Intégration à Iceberg REST Catalog : un nouveau moteur de base de données, nommé Iceberg, qui branche l’ensemble du catalogue dans ClickHouse. #71542 (Kseniia Sumarokova).
- Ajout d’un cache pour l’index primaire des tables
MergeTree(peut être activé avec le paramètre de tableuse_primary_key_cache). Si le chargement paresseux et le cache sont activés pour l’index primaire, celui-ci sera chargé dans le cache à la demande (comme pour le mark cache) au lieu d’être conservé indéfiniment en mémoire. Ajout également du préchauffage de l’index primaire lors des insertions/fusions/récupérations de data parts et lors des redémarrages de table (peut être activé avec le paramètreprewarm_primary_key_cache). Cela permet de réduire l’utilisation mémoire pour les très grandes tables sur stockage partagé, et nous l’avons testé sur des tables contenant plus d’un quadrillion d’enregistrements. #72102 (Anton Popov). #72750 (Alexander Gololobov). - Implémentation de la commande
SYSTEM LOAD PRIMARY KEYpour charger les index primaires de toutes les parts d’une table donnée, ou de toutes les tables si aucune table n’est spécifiée. Cela sera utile pour les benchmarks et pour éviter une latence supplémentaire lors de l’exécution des requêtes. #66252 #67733 (ZAWA_ll). - Ajout d’une requête permettant d’attacher des tables
MergeTreecommeReplicatedMergeTreeet inversement :ATTACH TABLE ... AS REPLICATEDetATTACH TABLE ... AS NOT REPLICATED. #65401 (Kirill). - Nouveau paramètre,
http_response_headers, qui permet de personnaliser les en-têtes de réponse HTTP. Par exemple, vous pouvez indiquer au navigateur d’afficher une image stockée dans la base de données. Cela clôt #59620. #72656 (Alexey Milovidov). - Ajout de la fonction
toUnixTimestamp64Second, qui convertit unDateTime64en une valeurInt64avec une précision fixe à la seconde, afin de prendre en charge le renvoi de valeurs négatives si la date est antérieure à l’époque Unix. #70597 (zhanglistar). #73146 (Robert Schulze). - Ajout du nouveau paramètre
enforce_index_structure_match_on_partition_manipulationpour autoriser ATTACH lorsque l’ensemble des projections et des index secondaires de la table source est un sous-ensemble de celui de la table cible. Clôt #70602. #70603 (zwy991114). - Ajout de la syntaxe ALTER USER
{ADD|MODIFY|DROP SETTING}, ALTER USER{ADD|DROP PROFILE}, et de même pour ALTER ROLE et ALTER PROFILE. Ainsi, au lieu de remplacer tout l’ensemble des paramètres, vous pouvez le modifier. #72050 (pufit). - Ajout de la fonction
arrayPRAUC, qui calcule l’AUC (Area Under the Curve) de la courbe précision-rappel. #72073 (Emmanuel). - Ajout de la fonction
indexOfAssumeSortedpour les types Array. Optimise la recherche dans le cas d’un tableau trié par ordre non décroissant. L’effet se fait sentir sur de très grands tableaux (plus de 100 000 éléments). #72517 (Eric Kurbanov). - Permet d’utiliser un délimiteur comme second argument facultatif pour la fonction d’agrégation
groupConcat. #72540 (Yarik Briukhovetskyi). - La fonction
translateprend désormais en charge la suppression de caractères si l’argumentfromcontient plus de caractères que l’argumentto. Exemple :SELECT translate('clickhouse', 'clickhouse', 'CLICK')renvoie désormaisCLICK. #71441 (shuai.xu).
Fonctionnalités expérimentales
- Nouveau paramètre MergeTree
allow_experimental_reverse_key, qui active la prise en charge du tri décroissant dans les clés de tri de MergeTree. Cela est utile pour l’analyse de séries temporelles, en particulier pour les requêtes TopN. Exemple d’utilisation :ENGINE = MergeTree ORDER BY (time DESC, key)- ordre décroissant pour le champtime. #71095 (Amos Bird).
Amélioration des performances
- Réordonnancement de JOIN. Ajout d’une option permettant de sélectionner le côté de la jointure qui servira de table interne (build) dans le query plan. Ce comportement est contrôlé par
query_plan_join_swap_table, qui peut être défini surauto. Dans ce mode, ClickHouse essaiera de choisir la table ayant le plus petit nombre de lignes. #71577 (Vladimir Cherkasov). - L’algorithme
parallel_hashsera désormais utilisé (le cas échéant) lorsque le paramètrejoin_algorithmest défini surdefault. Les deux alternatives précédentes (directethash) restent prises en compte lorsqueparallel_hashne peut pas être utilisé. #70788 (Nikita Taranov). - Ajout d’une option pour extraire les expressions communes des expressions
WHEREetONafin de réduire le nombre de tables de hachage utilisées lors des jointures. Cela est pertinent lorsque la condition JOIN ON contient des parties communes à l’intérieur de AND dans différentes branches de OR. Peut être activé avecoptimize_extract_common_expressions = 1. #71537 (János Benjamin Antal). - Permet d’utiliser les indexes sur
SELECTlorsqu’une colonne indexée est convertie par CAST enLowCardinality(String), ce qui peut se produire lorsqu’une requête s’exécute sur une Merge table avec certaines tables enStringet d’autres enLowCardinality(String). #71598 (Yarik Briukhovetskyi). - Lors de l’exécution d’une requête avec parallel replicas et plan local activé, ne pas effectuer d’index analysis sur les workers. Le coordinator choisira les ranges à lire pour les workers en s’appuyant sur l’index analysis effectuée de son côté (sur l’initiator de la requête). Cela permet aux requêtes courtes avec parallel replicas d’avoir une latence aussi faible que les requêtes sur un seul nœud. #72109 (Igor Nikonov).
- L’utilisation mémoire de
clickhouse disks remove --recursivea été réduite pour les object storage disks. #67323 (Kirill). - Rétablissement de l’optimisation de lecture des subcolumns d’une seule colonne dans les compact parts issue de #57631. Elle avait été supprimée accidentellement. #72285 (Pavel Kruglov).
- Accélération du tri des colonnes
LowCardinality(String)par dévirtualisation des appels dans le comparateur. #72337 (Alexander Gololobov). - Optimisation de la fonction
argMin/argMaxpour certains data types simples. #72350 (alesapin). - Optimisation du verrouillage avec des verrous partagés dans le memory tracker afin de réduire la contention, ce qui améliore les performances sur les systèmes avec un très grand nombre de CPU. #72375 (Jiebin Sun).
- Ajout d’un nouveau paramètre,
use_async_executor_for_materialized_views. Utilise une exécution asynchrone et potentiellement multithread des requêtes de materialized view, ce qui peut accélérer le traitement des views lors des INSERT, mais consomme aussi davantage de mémoire. #72497 (alesapin). - Amélioration des performances de la désérialisation des états des aggregate functions (dans le data type
AggregateFunctionet dans les distributed queries). Légère amélioration des performances du parsing du formatRowBinary. #72818 (Anton Popov). - Découpage des ranges en lecture avec parallel replicas selon l’ordre de la clé de la table afin de consommer moins de mémoire pendant la lecture. #72173 (JIaQi).
- Accélère les insertions dans MergeTree lorsqu’une seule valeur de clé de partition est présente dans le lot inséré. #72348 (alesapin).
- Implémente la création de tables en parallèle lors de la restauration à partir d’une sauvegarde. Avant cette PR, la commande
RESTOREcréait toujours les tables dans un seul thread, ce qui pouvait être lent pour les sauvegardes contenant de nombreuses tables. #72427 (Vitaly Baranov). - La suppression du mark cache peut prendre un certain temps lorsqu’il est volumineux. Si le mutex du Context est conservé pendant cette opération, cela bloque de nombreuses autres activités, au point qu’aucune nouvelle connexion client ne peut être établie avant sa libération. Or, il n’est pas réellement nécessaire de conserver ce mutex pour la synchronisation : il suffit d’avoir une référence locale au cache via un shared ptr. #72749 (Alexander Gololobov).
Amélioration
- Suppression du paramètre
allow_experimental_join_condition, ce qui autorise par défaut les conditions non-équi. #69910 (Vladimir Cherkasov). - Les paramètres de la configuration du serveur (users.xml) s’appliquent désormais aussi au client. Utile pour les paramètres de format, par ex.
date_time_output_format. #71178 (Michael Kolupaev). - Bascule automatique de
GROUP BY/ORDER BYsur disque en fonction de l’utilisation mémoire du serveur/de l’utilisateur. Contrôlée par les paramètres de requêtemax_bytes_ratio_before_external_group_by/max_bytes_ratio_before_external_sort. #71406 (Azat Khuzhin). - Ajout d’une nouvelle logique d’annulation :
CancellationCheckervérifie les timeouts de chaque requête démarrée et les arrête une fois le délai atteint. #69880 (Yarik Briukhovetskyi). - Prise en charge de ALTER de
ObjectversJSON, ce qui permet de migrer facilement depuis le type Object déprécié. #71784 (Pavel Kruglov). - Autorisation des valeurs inconnues dans un Set qui ne sont pas présentes dans Enum. Corrige #72662. #72686 (zhanglistar).
- Prise en charge de l’opérateur de recherche de chaînes (par ex. LIKE) pour le type de données
Enum, implémente #72661. #72732 (zhanglistar). - Certaines requêtes ALTER USER dénuées de sens étaient acceptées. Corrige #71227. #71286 (Arthur Passos).
- Prise en compte de
prefer_locahost_replicalors de la construction du plan pourINSERT ... SELECTdistribué. #72190 (filimonov). - Azure a enfreint la spécification Iceberg en étiquetant par erreur Iceberg v1 comme Iceberg v2. Le problème est décrit ici. Azure Iceberg Writer crée des fichiers de métadonnées Iceberg (ainsi que des fichiers manifestes) qui ne respectent pas les spécifications. Nous essayons désormais de lire les métadonnées au format Iceberg v1 avec le lecteur v2 (puisqu’elles sont écrites ainsi), et avons ajouté une erreur lorsqu’ils n’ont pas créé les champs correspondants dans un fichier manifeste. #72277 (Daniil Ivanik).
- Il est désormais possible de
CREATE MATERIALIZED VIEWavecUNION [ALL]dans la requête. Le comportement est le même que pour une vue matérialisée avecJOIN: seule la première table de l’expressionSELECTservira de déclencheur pour l’insert, toutes les autres tables seront ignorées. Toutefois, s’il y a plusieurs références à la première table (par ex. un UNION avec elle-même), elles seront toutes traitées comme le bloc de données inséré. #72347 (alesapin). - Ajout de la validation de la requête source lorsque ClickHouse est utilisé comme source pour un dictionnaire. #72548 (Alexey Katsman).
- Garantit que ClickHouse voit les modifications de ZooKeeper lors du rechargement de la configuration. #72593 (Azat Khuzhin).
- Meilleure approximation de l’utilisation mémoire des marks en cache afin de réduire l’utilisation mémoire totale du cache. #72630 (Antonio Andelic).
- Ajout d’une nouvelle métrique
StartupScriptsExecutionState. Cette métrique peut prendre trois valeurs : 0 = les scripts de démarrage ne sont pas encore terminés, 1 = les scripts de démarrage se sont exécutés avec succès, 2 = les scripts de démarrage ont échoué. Cette métrique est nécessaire pour savoir si les scripts de démarrage s’exécutent correctement dans le cloud, en particulier après des mises à jour des configurations de base. #72637 (Miсhael Stetsyuk). - Ajout de la nouvelle métrique
MergeTreeIndexGranularityInternalArraysTotalSizeàsystem.metrics. Cette métrique est nécessaire pour identifier les instances avec d’énormes jeux de données susceptibles de la forte - Ajout de tentatives supplémentaires lors de la création d’une table répliquée. #72682 (Vitaly Baranov).
- Ajout de
total_bytes_with_inactiveàsystem.tablespour comptabiliser le nombre total d’octets des parts inactives. #72690 (Kai Zhu). - Ajout des paramètres MergeTree à
system.settings_changes. #72694 (Raúl Marín). - Prise en charge du type JSON dans la fonction
notEmpty. #72741 (Pavel Kruglov). - Prise en charge de l’analyse de l’erreur GCS S3
AuthenticationRequired. #72753 (Vitaly Baranov). - Prise en charge du type
Dynamicdans les fonctionsifNulletcoalesce. #72772 (Pavel Kruglov). - Prise en charge de
Dynamicdans les fonctionstoFloat64/touInt32/etc. #72989 (Pavel Kruglov). - Ajout des paramètres de requête S3
http_max_fields,http_max_field_name_size,http_max_field_value_size, utilisés lors de l’analyse des réponses de l’API S3 pendant une sauvegarde ou une restauration. #72778 (Vitaly Baranov). - Suppression des métadonnées de table dans Keeper dans Storage S3(Azure)Queue uniquement après la suppression de la dernière table utilisant ces métadonnées. #72810 (Kseniia Sumarokova).
- Ajout des profile events
JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCount. #72842 (Vladimir Cherkasov). - Prise en charge des sous-colonnes dans la clé de tri MergeTree et les skip indexes. #72644 (Pavel Kruglov).
Correction de bug (dysfonctionnement visible par l’utilisateur dans une version stable officielle)
- Corrige les possibles parties qui se chevauchent dans MergeTree (après l’échec d’une opération de déplacement d’une part vers le répertoire detached, possiblement en raison d’une opération sur l’object storage). #70476 (Azat Khuzhin).
- Corrige la détection des erreurs lorsqu’un nom de table est trop long. Fournit un diagnostic indiquant la longueur maximale. Ajoute une nouvelle fonction
getMaxTableNameLengthForDatabase. #70810 (Yarik Briukhovetskyi). - Corrige les processus zombies après un crash de
clickhouse-library-bridge(ce programme permet d’exécuter des bibliothèques non sécurisées). #71301 (MikhailBurdukov). - Corrige l’erreur NoSuchKey lors du rollback d’une transaction lorsque la création d’un répertoire échoue pour le disk
plain_rewritable. #71439 (Julia Kartseva). - Corrige la sérialisation des valeurs
Dynamicdans les formats JSONPretty. #71923 (Pavel Kruglov). - Ajoute le nom du format inféré à la requête CREATE dans les engines
File/S3/URL/HDFS/Azure. Auparavant, le nom du format était réinféré à chaque redémarrage du server, et si les data files spécifiés étaient supprimés, cela provoquait des erreurs au démarrage du server. #72108 (Pavel Kruglov). - Corrige des bugs lors de l’utilisation d’une UDF dans une expression de join avec l’ancien analyzer. #72179 (Raúl Marín).
- Corrige quelques petits bugs dans
StorageObjectStorage. Nécessite d’activeruse_hive_partitioningpar défaut. #72185 (Yarik Briukhovetskyi). - Corrige un bug où
min_age_to_force_merge_on_partition_onlyrestait bloqué à tenter de fusionner en boucle la même partition, déjà fusionnée en une seule part, sans fusionner les partitions qui comportaient plusieurs parts. #72209 (Christoph Wurm). - Corrige un crash dans
SimpleSquashingChunksTransformqui survenait dans de rares cas lors du traitement de colonnes sparse. #72226 (Vladimir Cherkasov). - Corrige une data race dans
GraceHashJoin, qui pouvait entraîner l’absence de certaines rows dans la sortie du join. #72233 (Nikita Taranov). - Corrige les requêtes
ALTER DELETEavec une colonne_block_numbermaterialized (si le settingenable_block_number_columnest activé). #72261 (Anton Popov). - Corrige une data race lorsque
ColumnDynamic::dumpStructure()est appelé de manière concurrente, par exemple dans le constructeur deConcurrentHashJoin. #72278 (Nikita Taranov). - Corrige un possible
LOGICAL_ERRORavec des colonnes dupliquées dansORDER BY ... WITH FILL. #72387 (Vladimir Cherkasov). - Corrige des incompatibilités de types dans plusieurs cas après l’application de
optimize_functions_to_subcolumns. #72394 (Anton Popov). - Utilise
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILEau lieu deAWS_CONTAINER_AUTHORIZATION_TOKEN_PATH. Corrige #71074. #72397 (Konstantin Bogdanov). - Corrige un échec lors de l’analyse des requêtes
BACKUP DATABASE db EXCEPT TABLES db.table. #72429 (Konstantin Bogdanov). - N’autorise pas la création d’un
Variantvide. #72454 (Pavel Kruglov). - Corrige la mise en forme incorrecte de
result_part_pathdanssystem.merges. #72567 (Konstantin Bogdanov). - Corrige l’analyse d’un motif glob ne comportant qu’un seul élément (comme
{file}). #72572 (Konstantin Bogdanov). - Corrige la génération de requêtes pour le serveur follower dans le cas d’une requête distribuée avec
ARRAY JOIN. Corrige #69276. #72608 (Dmitry Novik). - Corrige un bug lorsque
DateTime64 IN DateTime64ne renvoie rien. #72640 (Yarik Briukhovetskyi). - Corrige des métadonnées incohérentes lors de l’ajout d’une nouvelle réplique à une base de données Replicated contenant une table créée avec
flatten_nested=0. #72685 (Alexander Tokmakov). - Corrige la configuration SSL avancée pour la communication interne de Keeper. #72730 (Antonio Andelic).
- Corrige l’erreur “No such key” en mode unordered de S3Queue lorsque le paramètre
tracked_files_limitest inférieur au rythme d’apparition des fichiers S3. #72738 (Kseniia Sumarokova). - Corrige l’exception levée dans RemoteQueryExecutor lorsqu’un utilisateur n’existe pas localement. #72759 (Andrey Zvonov).
- Corrige les mutations avec la colonne matérialisée
_block_number(si le paramètreenable_block_number_columnest activé). #72854 (Anton Popov). - Corrige backup/restore avec un disque réinscriptible simple lorsqu’il y a des fichiers vides dans la sauvegarde. #72858 (Kseniia Sumarokova).
- Annule correctement les inserts dans DistributedAsyncInsertDirectoryQueue. #72885 (Antonio Andelic).
- Corrige un crash lors de l’analyse de données incorrectes dans des colonnes sparse (cela peut se produire lorsque le paramètre
enable_parsing_to_custom_serializationest activé). #72891 (Anton Popov). - Corrige un crash potentiel lors de la restauration d’une sauvegarde. #72947 (Kseniia Sumarokova).
- Corrige un bug dans la méthode JOIN
parallel_hashqui peut apparaître lorsqu’une requête comporte une condition complexe dans la clauseONavec des filtres d’inégalité. #72993 (Nikita Taranov). - Utiliser les paramètres de format par défaut lors de l’analyse du JSON afin d’éviter une désérialisation incorrecte. #73043 (Pavel Kruglov).
- Corriger un plantage dans les transactions avec un stockage non pris en charge. #73045 (Raúl Marín).
- Corriger une possible surestimation du suivi de la mémoire (lorsque l’écart entre
MemoryTrackingetMemoryResidentcontinuait de se creuser). #73081 (Azat Khuzhin). - Vérifier la présence de clés JSON dupliquées lors de l’analyse de Tuple. Auparavant, cela pouvait entraîner une erreur logique
Invalid number of rows in Chunkpendant l’analyse. #73082 (Pavel Kruglov).
Amélioration de la compilation, des tests et du packaging
- Tous les petits utilitaires auparavant stockés dans le dossier
/utilset nécessitant une compilation manuelle depuis le code source font désormais partie du bundle principal de ClickHouse. Cela clôt : #72404. #72426 (Nikita Mikhaylov). - Annulation de la suppression de
/etc/systemd/system/clickhouse-server.serviceintroduite dans la version 22.3 #39323. #72259 (Mikhail f. Shiryaev). - Scinder les grandes unités de traduction pour éviter les échecs de compilation dus à des limitations de mémoire et de CPU. #72352 (Yakov Olkhovskiy).
- OSX : compilation avec prise en charge d’ICU, ce qui active les collations, les conversions de jeux de caractères et d’autres fonctionnalités de localisation. #73083 (Raúl Marín).
Release ClickHouse 24.11, 2024-11-26. Présentation, Vidéo
changement non rétrocompatible
- Suppression des tables système
generate_seriesetgenerateSeries. Elles ont été ajoutées ici par erreur : #59390. #71091 (Alexey Milovidov). - Suppression de
StorageExternalDistributed. Clôt #70600.#71176 (flynn). - Les moteurs de table Kafka, NATS et RabbitMQ relèvent désormais de leurs propres grants dans la hiérarchie
SOURCES. Ajoutez les grants nécessaires à tout utilisateur de base de données autre quedefaultqui crée des tables avec ces types de moteur. #71250 (Christoph Wurm). - Vérifiez la requête de mutation complète avant de l’exécuter (y compris les sous-requêtes). Cela évite de lancer accidentellement une requête invalide et d’accumuler des mutations mortes qui bloquent les mutations valides. #71300 (Christoph Wurm).
- Renommage du paramètre du cache du système de fichiers
skip_download_if_exceeds_query_cacheenfilesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit. #71578 (Kseniia Sumarokova). - Suppression de la prise en charge de
Enum, ainsi que des argumentsUInt128etUInt256, dansdeltaSumTimestamp. Suppression également de la prise en charge deInt8,UInt8,Int16etUInt16pour le deuxième argument (« timestamp ») dedeltaSumTimestamp. #71790 (Alexey Milovidov). - Lors de la récupération directe de données depuis un dictionnaire à l’aide du stockage Dictionary, de la fonction de table dictionary ou d’un
SELECTdirect sur le dictionnaire lui-même, il suffit désormais de disposer de la permissionSELECTou de la permissiondictGetsur le dictionnaire. Cela s’inscrit dans la continuité des tentatives précédentes visant à empêcher les contournements d’ACL : https://github.com/ClickHouse/ClickHouse/pull/57362 et https://github.com/ClickHouse/ClickHouse/pull/65359. Cela rend également cette dernière modification rétrocompatible. #72051 (Nikita Mikhaylov).
Fonctionnalité expérimentale
- Implémentation de
allow_feature_tiercomme paramètre global pour désactiver toutes les fonctionnalités expérimentales / bêta. #71841 #71145 (Raúl Marín). - Correction d’une erreur possible
No such file or directorydue à des caractères spéciaux non échappés dans les fichiers des sous-colonnes JSON. #71182 (Pavel Kruglov). - Prise en charge de la modification de type de String vers JSON avec
ALTER. Cette PR modifie également la sérialisation des types JSON et Dynamic vers la nouvelle version V2. L’ancienne version V1 peut toujours être utilisée en activant le paramètremerge_tree_use_v1_object_and_dynamic_serialization(utilisable pendant une mise à niveau afin de pouvoir effectuer un rollback de version sans problème). #70442 (Pavel Kruglov). - Implémentation d’un CAST simple de Map/Tuple/Object vers le nouveau JSON via sérialisation/désérialisation à partir d’une JSON string. #71320 (Pavel Kruglov).
- Les types Variant/Dynamic ne sont plus autorisés par défaut dans ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY, car ils peuvent entraîner des résultats inattendus. #69731 (Pavel Kruglov).
- Les types Dynamic/Variant sont interdits dans les fonctions min/max afin d’éviter toute confusion. #71761 (Pavel Kruglov).
Nouvelle fonctionnalité
- Ajout de la syntaxe SQL pour décrire la gestion des workloads et des ressources. https://clickhouse.com/docs/operations/workload-scheduling. #69187 (Sergei Trifonov).
- Un nouveau type de données,
BFloat16, représente des nombres à virgule flottante sur 16 bits avec un exposant sur 8 bits, un bit de signe et une mantisse sur 7 bits. Cela clôt #44206. Cela clôt #49937. #64712 (Alexey Milovidov). - Ajout de la query
CHECK GRANTpour vérifier si le privilège spécifié a été accordé à l’utilisateur/au rôle actuel et si la table/le colonne correspondant existe en mémoire. #68885 (Unalian). - Ajout des table functions
iceberg[S3;HDFS;Azure]Cluster,deltaLakeCluster,hudiCluster. #72045 (Mikhail Artemenko). - Ajout de la possibilité de définir l’utilisateur/le mot de passe dans http_handlers (pour
dynamic_query_handler/predefined_query_handler). #70725 (Azat Khuzhin). - Ajout de la prise en charge de la clause de staleness dans l’opérateur ORDER BY WITH FILL. #71151 (Mikhail Artemenko).
- Chaque méthode d’authentification peut désormais avoir sa propre date d’expiration, celle-ci étant supprimée de l’entité utilisateur. #70090 (Arthur Passos).
- Ajout des nouvelles fonctions
parseDateTime64,parseDateTime64OrNulletparseDateTime64OrZero. Par rapport à la fonction existanteparseDateTime(et ses variantes), elles renvoient une valeur de typeDateTime64au lieu deDateTime. #71581 (kevinyhzou).
Amélioration des performances
- Utilisation mémoire optimisée pour les valeurs d’index granularity lorsque la granularity est constante pour une part. Ajout de la possibilité de toujours sélectionner une granularity constante pour une part (paramètre
use_const_adaptive_granularity), ce qui garantit une optimisation mémoire systématique. Cela aide, dans les workloads volumineux (des milliers de milliards de rows sur un stockage partagé), à éviter l’augmentation continue de la mémoire utilisée par les metadata (valeurs d’index granularity) des data parts. #71786 (Anton Popov). - Désormais, nous ne copions plus les columns des blocks d’entrée pour
join_algorithm = 'parallel_hash'lors de leur répartition entre les threads pour un traitement en parallèle. #67782 (Nikita Taranov). - Algorithme de merge
Replacingoptimisé pour les parts non intersecting. #70977 (Anton Popov). - Ne pas lister les detached parts des disks readonly et write-once dans les metrics ni dans system.detached_parts. #71086 (Alexey Milovidov).
- Ne pas calculer les heavy asynchronous metrics par défaut. La fonctionnalité a été introduite dans #40332, mais il n’est pas souhaitable d’avoir une tâche d’arrière-plan lourde nécessaire pour un seul client. #71087 (Alexey Milovidov).
- Pour les disks
plain_rewritable: ne pas appeler l’API de l’object storage lors de l’énumération des répertoires, car cela peut être coûteux. À la place, stocker en mémoire la liste des noms de fichiers. Le compromis est un temps d’initial load plus long ainsi qu’une consommation mémoire supplémentaire pour stocker ces noms de fichiers. #70823 (Julia Kartseva). - Amélioration des performances et de la précision de l’intervalle de collecte de
system.query_metric_logen réduisant la région critique. #71473 (Pablo Marcos). - Optimisation de la lecture dans l’ordre via la génération de rows virtuelles, afin de lire moins de données pendant le tri par merge, ce qui est particulièrement utile lorsque plusieurs parts existent. #62125 (Shichao Jin).
- Ajout du server setting
async_load_system_database, qui permet au server de démarrer avec une system database non entièrement chargée. Cela permet de démarrer ClickHouse plus rapidement lorsqu’il existe de nombreuses system tables. #69847 (Sergei Trifonov). - Ajout du parameter
--threadsàclickhouse-compressor, qui permet de compresser les données en parallèle. #70860 (Alexey Milovidov). - Ajout d’un paramètre
prewarm_mark_cachequi active le loading des marks dans le mark cache lors des inserts, des merges, des fetches de parts et au démarrage de la table. #71053 (Anton Popov). - Ajustement de la taille du tableau index_granularity en mémoire afin de réduire l’empreinte mémoire de la famille de table engines MergeTree. #71595 (alesapin).
- Désactivation du paramètre
boundary_alignmentdu filesystem cache pour les lectures non effectuées depuis un disk, ce qui améliore les performances de lecture des fichiers distants standalone avec caching. #71827 (Kseniia Sumarokova). - Les queries comme
SELECT * FROM table LIMIT ...chargeaient auparavant les indexes des parts même lorsqu’ils n’étaient pas utilisés. #71866 (Alexander Gololobov). - Activer
parallel_replicas_local_planpar défaut. L’élaboration d’un plan local complet sur l’initiateur de requête améliore les performances des répliques parallèles tout en réduisant la consommation de ressources, et permet d’appliquer davantage d’optimisations de requête. #70171 (Igor Nikonov).
Amélioration
- Permet d’utiliser clickhouse avec un argument de fichier, par exemple
ch queries.sql. #71589 (Raúl Marín). - Le format
Vertical(qui est également activé lorsque vous terminez votre requête par\G) bénéficie désormais des fonctionnalités des Pretty formats, telles que : - la mise en évidence des séparateurs de milliers dans les nombres ; - l’affichage d’un indicateur numérique plus lisible. #71630 (Alexey Milovidov). - Propage les rôles d’utilisateurs externes de l’initiateur de la requête vers les autres nœuds du cluster. Utile lorsque seul l’initiateur a accès à l’authentificateur externe (comme LDAP). #70332 (Andrey Zvonov).
- Ajout des alias
anyRespectNulls,firstValueRespectNullsetanyValueRespectNullspour la fonction d’agrégationany. Ajout également des aliasanyLastRespectNullsetlastValueRespectNullspour la fonction d’agrégationanyLast. Cela permet d’utiliser une syntaxe plus naturelle, uniquement en camel case, plutôt qu’une syntaxe mixte camel case/underscore, par exemple :SELECT anyLastRespectNullsStateIfau lieu deanyLast_respect_nullsStateIf. #71403 (Peter Nguyen). - Ajout du paramètre de configuration
date_time_utc, permettant au formatage des journaux JSON de prendre en charge la date et l’heure UTC au format RFC 3339/ISO8601. #71560 (Ali). - Ajout d’un nouveau type de header pour les S3 endpoints destiné à l’authentification des utilisateurs (
access_header). Cela permet de récupérer un header d’accès avec la priorité la plus faible, qui sera remplacé paraccess_key_idprovenant de toute autre source (par exemple, un schéma de table ou une named collection). #71011 (MikhailBurdukov). - Les fonctions d’ordre supérieur avec des Arrays constants et des arguments capturés constants renverront des constantes. #58400 (Alexey Milovidov).
- Les noms des étapes du query plan (
EXPLAIN PLAN json=1) et les noms des processors du pipeline (EXPLAIN PIPELINE compact=0,graph=1) ont désormais un identifiant unique comme suffixe. Cela permet de faire correspondre la sortie du Profiler des processors et les traces OpenTelemetry avec la sortie d’EXPLAIN. #63518 (qhsong). - Ajout d’une option permettant de vérifier si l’objet existe après son écriture dans Azure Blob Storage, contrôlée par le paramètre
check_objects_after_upload. #64847 (Smita Kulkarni). - Utilise la database
Atomicpar défaut dansclickhouse-local. Traite les points 1 et 5 de #50647. Ferme #44817. #68024 (Alexey Milovidov). - Les Exceptions interrompent le protocole HTTP afin d’alerter le client en cas d’erreur. #68800 (Sema Checherinda).
- Signale les hôtes exécutant des requêtes DDL distribuées en créant replica_dir et marque les répliques actives dans DDLWorker. #69658 (tuanpach).
- Attend uniquement les répliques actives pour les requêtes de database ON CLUSTER si distributed_ddl_output_mode est défini sur *_only_active. #69660 (tuanpach).
- Meilleure gestion des erreurs et annulation des backups et restores
ON CLUSTER: - Si un backup ou un restore échoue sur un hôte, il sera automatiquement annulé sur les autres hôtes - Aucune erreur incohérente ne doit être produite parce que certains hôtes ont échoué tandis que d’autres continuaient leur traitement - Si un backup ou un restore est annulé sur un hôte, il sera automatiquement annulé sur les autres hôtes - Correction de problèmes avectest_disallow_concurrency: la désactivation de la concurrence doit désormais mieux fonctionner - Les backups et restores sont maintenant beaucoup plus résistants aux déconnexions de ZooKeeper. #70027 (Vitaly Baranov). - Prise en charge de
ALTER TABLE ... MODIFY/RESET SETTING ...pour certains settings du stockage S3Queue. #70811 (Kseniia Sumarokova). - Ajout de la possibilité de recharger les certificats client de la même manière que les certificats server. #70997 (Roman Antonov).
- La taille de l’historique client est désormais configurable, et sa taille par défaut a été augmentée. #71014 (Jiří Kozlovský).
- Prise en charge des types booléens par le lecteur natif Parquet. #71055 (Arthur Passos).
- Réessayer davantage d’erreurs lors des interactions avec S3, telles que “Malformed message”. #71088 (Alexey Milovidov).
- Réduction du niveau de log de certains messages concernant S3. #71090 (Alexey Milovidov).
- Prise en charge de l’écriture de fichiers HDFS dont le nom contient des espaces. #71105 (exmy).
- Ajout de settings limitant le nombre de replicated tables, dictionaries et views. #71179 (Kirill).
- Utiliser
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILEau lieu deAWS_CONTAINER_AUTHORIZATION_TOKENsi le premier est disponible. Corrige #71074. #71269 (Konstantin Bogdanov). - Suppression de la création du nœud ZooKeeper metadata_version du thread de redémarrage de ReplicatedMergeTree. Le seul scénario dans lequel ce nœud doit être créé est celui où l’utilisateur est passé directement d’une version antérieure à 20.4 à une version postérieure à 24.10. ClickHouse ne prend pas en charge les upgrades couvrant plus d’un an ; nous devons donc lever une exception et demander à l’utilisateur de mettre à jour progressivement, au lieu de créer le nœud. #71385 (Miсhael Stetsyuk).
- Ajout des dashboards par hôte
Overview (host)etCloud overview (host)au dashboard avancé. #71422 (alesapin). clickhouse-localutilise implicit SELECT par défaut, ce qui permet de l’utiliser comme calculatrice. Amélioration de la coloration syntaxique pour le mode implicit SELECT. #71620 (Alexey Milovidov).- Les applications en ligne de commande mettront la syntaxe en évidence même pour les multi-statements. #71622 (Alexey Milovidov).
- Les applications en ligne de commande renverront désormais des codes de sortie non nuls en cas d’erreur. Dans les versions précédentes, l’application
disksrenvoyait zéro en cas d’erreur, et les autres applications renvoyaient zéro pour les erreurs 256 (PARTITION_ALREADY_EXISTS) et 512 (SET_NON_GRANTED_ROLE). #71623 (Alexey Milovidov). - Lorsque l’utilisateur/le groupe est indiqué sous forme d’ID,
clickhouse suéchoue. Ce correctif lui permet également d’accepterUID:GID. #71626 (Mikhail f. Shiryaev). - Permet de désactiver l’augmentation de la taille du buffer mémoire pour le cache du système de fichiers via le paramètre
filesystem_cache_prefer_bigger_buffer_size. #71640 (Kseniia Sumarokova). - Ajout d’un paramètre distinct,
background_download_max_file_segment_size, pour la taille maximale des segments de fichier téléchargés en arrière-plan dans le cache du système de fichiers. #71648 (Kseniia Sumarokova). - L’analyse du type JSON est légèrement améliorée : si le block actuel pour le JSON path contient des valeurs de plusieurs types, le système essaie de choisir le type le plus approprié en testant les types selon un ordre spécial de best effort. #71785 (Pavel Kruglov).
- Auparavant, la lecture depuis
system.asynchronous_metricsattendait la fin d’une mise à jour concurrente. Cela peut prendre beaucoup de temps si le système est fortement chargé. Avec ce changement, les valeurs collectées précédemment peuvent toujours être lues. #71798 (Alexander Gololobov). - S3Queue et AzureQueue : définir
polling_max_timeout_mssur 10 minutes etpolling_backoff_mssur 30 secondes. #71817 (Kseniia Sumarokova). - Met à jour
HostResolvertrois fois sur une période d’history. #71863 (Sema Checherinda). - Ajout, sur la page HTML Advanced dashboard, d’un sélecteur déroulant pour le dashboard à partir de la table
system.dashboards. #72081 (Sergei Trifonov). - Vérifie la présence de la base de données par défaut après l’authentification. Corrige #71097. #71140 (Konstantin Bogdanov).
Correction de bug (dysfonctionnement visible par l’utilisateur dans une version stable officielle)
- Les parties dédupliquées lors de la requête
ATTACH PARTne restent plus bloquées avec le préfixeattaching_. #65636 (Kirill). - Correction d’un bug où DateTime64 perdait en précision avec la fonction
IN. #67230 (Yarik Briukhovetskyi). - Corrige une possible erreur logique lors de l’utilisation de fonctions avec
IGNORE/RESPECT NULLSdansORDER BY ... WITH FILL, clôt #57609. #68234 (Vladimir Cherkasov). - Corrige de rares erreurs logiques dans les insertions asynchrones au format
Nativelorsque la memory limit est atteinte. #68965 (Anton Popov). - Corrige COMMENT dans CREATE TABLE pour une colonne EPHEMERAL. #70458 (Yakov Olkhovskiy).
- Corrige une erreur logique dans JSONExtract avec LowCardinality(Nullable). #70549 (Pavel Kruglov).
- Autorise system drop replica zkpath lorsqu’il existe une autre replica avec le même chemin zk. #70642 (MikhailBurdukov).
- Corrige un crash et une fuite de mémoire dans AggregateFunctionGroupArraySorted. #70820 (Michael Kolupaev).
- Ajoute la possibilité de remplacer Content-Type via les headers utilisateur dans l’URL engine. #70859 (Artem Iurin).
- Corrige l’erreur logique dans
StorageS3Queue“Cannot create a persistent node in /processed since it already exists”. #70984 (Kseniia Sumarokova). - Corrige le fait que les sessions nommées ne se fermaient pas et restaient bloquées indéfiniment dans certaines circonstances. #70998 (Márcio Martins).
- Corrige le bug qui ne prenait pas en compte la colonne _row_exists dans l’option de reconstruction de la projection lightweight delete. #71089 (Shichao Jin).
- Corrige le problème
AT_* is out of rangelors de l’exécution sur Oracle Linux UEK 6.10. #71109 (Örjan Fors). - Corrige une valeur incorrecte dans system.query_metric_log en raison d’une race condition inattendue. #71124 (Pablo Marcos).
- Corrige le nom incorrect de la fonction d’agrégation quantileExactWeightedInterpolated. Le bug a été introduit dans https://github.com/ClickHouse/ClickHouse/pull/69619. cc @Algunenano. #71168 (李扬).
- Corrige l’exception bad_weak_ptr avec Dynamic lors de la comparaison de fonctions. #71183 (Pavel Kruglov).
- Vérifie que le fichier 7z lu se trouve sur une machine locale. #71184 (Daniil Ivanik).
- Correction d’un problème où les paramètres de format étaient ignorés dans le format Native via HTTP et avec les insertions asynchrones. #71193 (Pavel Kruglov).
- Les requêtes SELECT exécutées avec le paramètre
use_query_cache = 1ne sont plus rejetées si le nom d’une table système apparaît comme littéral ; par exemple,SELECT * FROM users WHERE name = 'system.metrics' SETTINGS use_query_cache = true;fonctionne désormais. #71254 (Robert Schulze). - Correction d’un bug entraînant une augmentation de l’utilisation mémoire si enable_filesystem_cache=1, mais que le disque dans la configuration de stockage n’avait aucune configuration de cache. #71261 (Kseniia Sumarokova).
- Correction d’une possible erreur “Cannot read all data” lors de la désérialisation d’un dictionnaire LowCardinality à partir d’une colonne Dynamic. #71299 (Pavel Kruglov).
- Correction d’un nettoyage incomplet du format de sortie parallèle dans le client. #71304 (Raúl Marín).
- Ajout du déséchappement manquant dans les collections nommées. Sans ce correctif, clickhouse-server ne peut pas démarrer. #71308 (MikhailBurdukov).
- Correction des insertions asynchrones avec des blocs vides via le protocole natif. #71312 (Anton Popov).
- Correction d’un formatage AST incohérent lors de l’octroi de privilèges génériques avec joker incorrects #71309. #71332 (pufit).
- Ajout de try/catch aux destructeurs des data parts pour éviter std::terminate. #71364 (alesapin).
- Vérification des types suspects et expérimentaux dans les indications de type du type JSON. #71369 (Pavel Kruglov).
- Démarrage du worker thread mémoire également sur les OS non Linux (corrige #71051). #71384 (Alexandre Snarskii).
- Correction de l’erreur Invalid number of rows in Chunk avec la colonne Variant. #71388 (Pavel Kruglov).
- Correction de l’erreur column “attgenerated” does not exist pour les anciennes versions de PostgreSQL, corrige #60651. #71396 (0xMihalich).
- Pour éviter d’inonder les journaux du serveur, les tentatives d’authentification échouées sont désormais consignées au niveau
DEBUGau lieu deERROR. #71405 (Robert Schulze). - Correction d’un crash dans la fonction de table
mongodblors du passage d’arguments incorrects (par ex.NULL). #71426 (Vladimir Cherkasov). - Correction d’un crash avec optimize_rewrite_array_exists_to_has. #71432 (Raúl Marín).
- Correction de l’utilisation du paramètre
max_insert_delayed_streams_for_parallel_writepour les insertions. Auparavant, il ne fonctionnait pas correctement, ce qui pouvait entraîner une forte utilisation de la mémoire lors d’insertions écrivant des données dans plusieurs partitions. #71474 (Anton Popov). - Correction d’une erreur possible,
Argument for function must be constant(ancien analyseur), lorsquearrayJoinpeut apparemment apparaître dans la conditionWHERE. Régression après https://github.com/ClickHouse/ClickHouse/pull/65414. #71476 (Nikolai Kochetov). - Évite un plantage dans SortCursor avec 0 colonne (ancien analyseur). #71494 (Raúl Marín).
- Correction d’une valeur Date32 hors plage causée par des données ORC non initialisées. Pour plus de détails, consultez https://github.com/apache/incubator-gluten/issues/7823. #71500 (李扬).
- Correction du calcul de la taille d’une colonne dans une wide part pour les types Dynamic et JSON. #71526 (Pavel Kruglov).
- Correction de l’analyseur lorsqu’une requête à l’intérieur d’une vue matérialisée utilise IN avec une CTE. Clôt #65598. #71538 (Maksim Kita).
- Évite un plantage lors de l’utilisation d’une UDF dans une contrainte. #71541 (Raúl Marín).
- Renvoie 0 ou le caractère par défaut au lieu de lever une erreur dans les fonctions bitShift en cas de dépassement des limites. #71580 (Pablo Marcos).
- Correction de plantages du serveur lors de l’utilisation d’une vue matérialisée avec certains moteurs. #71593 (Pervakov Grigorii).
- Un ARRAY JOIN avec une structure de données imbriquée contenant un alias vers un tableau constant entraînait un déréférencement de pointeur nul. Clôt #71677. #71678 (Alexey Milovidov).
- Correction de LOGICAL_ERROR lors de l’exécution de ALTER avec un tuple vide. Corrige #71647. #71679 (Amos Bird).
- Ne transformez pas l’ensemble constant dans les prédicats sur les colonnes de partition dans le cas de l’opérateur NOT IN. #71695 (Eduard Karacharov).
- Correction du message de journal en cas d’échec du script d’initialisation Docker pour le rendre plus clair. #71734 (Андрей).
- Correction de CAST de LowCardinality(Nullable) vers Dynamic. Auparavant, cela pouvait entraîner l’erreur
Bad cast from type DB::ColumnVector<int> to DB::ColumnNullable. #71742 (Pavel Kruglov). - Correction d’une exception pour
toDayOfWeekdans une conditionWHEREavec une clé primaire de type DateTime64. #71849 (Yakov Olkhovskiy). - Correction du remplissage des valeurs par défaut après le parsing dans des colonnes sparse. #71854 (Anton Popov).
- Correction d’une erreur de la fonction GROUPING lorsque l’entrée est un ALIAS sur une table distribuée, clôt #68602. #71855 (Vladimir Cherkasov).
- Correction d’un plantage possible lors de l’utilisation de
allow_experimental_join_condition, clôt #71693. #71857 (Vladimir Cherkasov). - Correction des instructions SELECT utilisant la clause
WITH TIES, qui pouvaient ne pas renvoyer suffisamment de lignes. #71886 (wxybear). - Correction de l’exception TOO_LARGE_ARRAY_SIZE déclenchée lorsqu’une colonne issue de l’évaluation de arrayWithConstant était considérée à tort comme dépassant la limite de taille du tableau. #71894 (Udi).
clickhouse-benchmarksignalait des métriques erronées pour les requêtes durant plus d’une seconde. #71898 (Alexey Milovidov).- Correction d’une data race entre l’indicateur de progression et la table de progression dans clickhouse-client. Ce problème est visible lorsque FROM INFILE est utilisé. Interception des frappes clavier pendant les requêtes INSERT pour basculer l’affichage de la table de progression. #71901 (Julia Kartseva).
- Utilisation de keepers auxiliaires pour l’autodiscovery du cluster. #71911 (Anton Ivashkin).
- Correction de la colonne rows_processed dans system.s3/azure_queue_log, cassée en 24.6. Clôt #69975. #71946 (Kseniia Sumarokova).
- Correction d’un cas où les fonctions
s3/s3Clusterpouvaient renvoyer un résultat incomplet ou lever une exception. Cela se produisait lors de l’utilisation d’un glob pattern dans l’URI s3 (par exemplepattern/*) et lorsqu’un objet vide avec la keypattern/existait (de tels objets sont créés automatiquement par la S3 Console). De plus, la valeur par défaut du paramètres3_skip_empty_filesest passée defalseàtrue. #71947 (Nikita Taranov). - Correction d’un plantage dans la coloration syntaxique de clickhouse-client. Clôt #71864. #71949 (Nikolay Degterinsky).
- Correction de l’erreur
Illegal typepour les tablesMergeTreeavec une fonction monotone binaire dansORDER BYlorsque le premier argument est constant. Corrige #71941. #71966 (Nikolai Kochetov). - Autoriser uniquement les requêtes SELECT dans EXPLAIN AST lorsqu’il est utilisé à l’intérieur d’une sous-requête. Les autres types de requêtes entraînent une logical error : ‘Bad cast from type DB::ASTCreateQuery to DB::ASTSelectWithUnionQuery’ ou
Inconsistent AST formatting. #71982 (Pavel Kruglov). - Lors de l’insertion d’un enregistrement avec
clickhouse-client, le client lit les descriptions de colonnes depuis le serveur. Mais un bug faisait que nous écrivions les descriptions dans le mauvais ordre ; l’ordre correct est [statistics, ttl, settings]. #71991 (Han Fei). - Corrige la mise en forme des commandes ALTER
MOVE PARTITION ... TO TABLE ...lorsqueformat_alter_commands_with_parenthesesest activé. #72080 (János Benjamin Antal). - Corrige les jointures RIGHT / FULL dans les requêtes avec des répliques parallèles. Désormais, les jointures RIGHT peuvent être exécutées avec des répliques parallèles (la lecture de la table de droite est répartie). Les jointures FULL ne peuvent pas être parallélisées entre les nœuds et sont exécutées localement. #71162 (Igor Nikonov).
- Corrige le problème où ClickHouse, dans des conteneurs Docker, affichait “get_mempolicy: Operation not permitted” sur stderr en raison d’appels système restreints. #70900 (filimonov).
- Corrige l’enregistrement metadata_version dans ZooKeeper dans le thread de redémarrage plutôt que dans le thread d’Attach. #70297 (Miсhael Stetsyuk).
- Il s’agit d’un correctif pour la réplication “zero-copy”, qui n’est pas prise en charge et sera entièrement supprimée. Ne supprime pas de blob lorsque des nœuds l’utilisent dans ReplicatedMergeTree avec la réplication zero-copy. #71186 (Antonio Andelic).
- Il s’agit d’un correctif pour la réplication “zero-copy”, qui n’est pas prise en charge et sera entièrement supprimée. Acquisition d’un verrou partagé zero-copy avant le déplacement d’une part vers un disque zero-copy afin d’éviter une éventuelle perte de données si Keeper n’est pas disponible. #71845 (Aleksei Filatov).
Release ClickHouse 24.10, 2024-10-31. Présentation, Vidéo
Changement non rétrocompatible
- Il est désormais possible d’écrire
SETTINGSavantFORMATdans une chaîne de requêtes avecUNIONlorsque les sous-requêtes sont entre parenthèses. Cela clôt #39712. Le comportement change lorsqu’une requête contient deux fois la clause SETTINGS dans une séquence. La clause SETTINGS la plus proche est prioritaire pour la sous-requête correspondante. Dans les versions précédentes, la clause SETTINGS la plus externe pouvait primer sur la clause interne. #68614 (Alexey Milovidov). - La réorganisation des conditions de filtre de la clause
[PRE]WHEREest désormais autorisée par défaut. Elle peut être désactivée en définissantallow_reorder_prewhere_conditionssurfalse. #70657 (Nikita Taranov). - Suppression de la bibliothèque
idxd-config, dont la licence est incompatible. Cela supprime également le codec expérimental Intel DeflateQPL. #70987 (Alexey Milovidov).
Nouvelle fonctionnalité
- Permet d’accorder l’accès aux préfixes génériques avec joker.
GRANT SELECT ON db.table_pefix_* TO user. #65311 (pufit). - Si vous appuyez sur la barre d’espace pendant l’exécution d’une requête, le client affichera un tableau en temps réel avec des métriques détaillées. Vous pouvez l’activer globalement avec la nouvelle option
--progress-tabledans clickhouse-client ; une nouvelle option--enable-progress-table-toggleest associée à--progress-tableet permet d’activer ou de désactiver l’affichage du tableau de progression en appuyant sur la touche de contrôle (Espace). #63689 (Maria Khristenko), #70423 (Julia Kartseva). - Permet de mettre en cache les fichiers lus pour les table engines de stockage objet et les data lakes en utilisant le hash de l’ETag + le chemin du fichier comme clé de cache. #70135 (Kseniia Sumarokova).
- Prend en charge la création d’une table à partir d’une requête :
CREATE TABLE ... CLONE AS .... Cela clone le schéma de la table source, puis attache toutes les partitions à la table nouvellement créée. Cette fonctionnalité n’est prise en charge qu’avec les tables de la familleMergeTree. Closes #65015. #69091 (tuanpach). - Ajout d’une nouvelle system table,
system.query_metric_log, qui contient l’historique des valeurs de mémoire et de métriques de la table systèmesystem.eventspour chaque requête, périodiquement écrites sur disque. #66532 (Pablo Marcos). - Une simple requête SELECT peut être écrite avec un SELECT implicite pour permettre des expressions de type calculatrice, par exemple
ch "1 + 2". Ce comportement est contrôlé par un nouveau setting,implicit_select. #68502 (Alexey Milovidov). - Prise en charge du mode
--copypour clickhouse local, comme raccourci pour la conversion de format #68503. #68583 (Denis Hananein). - Ajout d’une page HTML intégrée pour visualiser les merges, disponible au chemin
/merges. #70821 (Alexey Milovidov). - Ajout de la prise en charge de la fonction
arrayUnion. #68989 (Peter Nguyen). - Permet les alias SQL paramétrés. #50665 (Anton Kozlov).
- Nouvelle fonction d’agrégation
quantileExactWeightedInterpolated, version interpolée basée surquantileExactWeighted. Certains pourraient se demander pourquoi une nouvelle fonctionquantileExactWeightedInterpolatedest nécessaire alors quequantileExactInterpolatedWeightedexiste déjà. La raison est que la nouvelle est plus précise que l’ancienne. Cela vise la compatibilité avec Spark. #69619 (李扬). - Nouvelle fonction
arrayElementOrNull. Elle renvoieNULLsi l’index du tableau est hors limites ou si une clé de Map est introuvable. #69646 (李扬). - Permet aux utilisateurs de spécifier des expressions régulières via les nouveaux champs
message_regexpetmessage_regexp_negativedans le fichierconfig.xmlafin de filtrer la journalisation. La journalisation s’applique au texte formaté non coloré pour offrir l’expérience développeur la plus intuitive. #69657 (Peter Nguyen). - Ajout de la fonction
RIPEMD160, qui calcule le hachage cryptographique RIPEMD-160 d’une chaîne. Exemple :SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))renvoie37F332F68DB77BD9D7EDD4969571AD671CF9DD3B. #70087 (Dergousov Maxim). - Prise en charge de la lecture des tables
IcebergsurHDFS. #70268 (flynn). - Prise en charge des CTE sous la forme
WITH ... INSERT, alors qu’auparavant seule la formeINSERT ... WITH ...était prise en charge. #70593 (Shichao Jin). - Intégration MongoDB : prise en charge de tous les types MongoDB, des clauses WHERE et ORDER BY côté MongoDB, et restriction des expressions non prises en charge par MongoDB. Notez que la nouvelle intégration est désactivée par défaut ; pour l’utiliser, définissez
<use_legacy_mongodb_integration>surfalsedans la configuration du serveur. #63279 (Kirill Nikiforov). - Une nouvelle fonction,
getSettingOrDefault, a été ajoutée pour renvoyer la valeur par défaut et éviter une exception si un paramètre personnalisé est introuvable dans le profil actuel. #69917 (Shankar).
Fonctionnalité expérimentale
- Les vues matérialisées actualisables sont prêtes pour la production. #70550 (Michael Kolupaev). Les vues matérialisées actualisables sont désormais prises en charge dans les bases de données Replicated. #60669 (Michael Kolupaev).
- Les répliques parallèles passent du statut expérimental au statut bêta. Les paramètres qui contrôlent le comportement des algorithmes des répliques parallèles ont été retravaillés. En bref : ClickHouse dispose de quatre algorithmes différents de lecture parallèle impliquant plusieurs répliques, ce qui se reflète dans le paramètre
parallel_replicas_mode, dont la valeur par défaut estread_tasks. De plus, le paramètre de basculeenable_parallel_replicasa été ajouté. #63151 (Alexey Milovidov), (Nikita Mikhaylov). - Prise en charge du type
Dynamicdans la plupart des fonctions, en les exécutant sur les types internes deDynamic. #69691 (Pavel Kruglov). - Permet de lire/écrire le type
JSONcomme une chaîne binaire au formatRowBinaryavec les paramètresinput_format_binary_read_json_as_string/output_format_binary_write_json_as_string. #70288 (Pavel Kruglov). - Permet de sérialiser/désérialiser une colonne
JSONcomme une unique colonne String au format Native. Pour la sortie, utilisez le paramètreoutput_format_native_write_json_as_string. Pour l’entrée, utilisez la version de sérialisation1avant les données de la colonne. #70312 (Pavel Kruglov). - Introduction d’un mode spécial (expérimental) de sélecteur de fusion pour les tables MergeTree, qui le rend plus agressif pour les partitions proches de la limite du nombre de parts. Il est contrôlé par le paramètre
merge_selector_use_blurry_baseau niveau de MergeTree. #70645 (Nikita Mikhaylov). - Implémentation d’une sérialisation/désérialisation générique entre
Uniond’Avro et les typesVariantde ClickHouse. Résout #69713. #69712 (Jiří Kozlovský).
Amélioration des performances
- Refactorisation de
IDisketIObjectStoragepour améliorer les performances. Les tables des stockages objetplainetplain_rewritables’initialiseront plus rapidement. #68146 (Alexey Milovidov, Julia Kartseva). Ne plus appeler l’API LIST du stockage objet pour déterminer si un fichier ou un répertoire existe sur le disk plain rewritable, car cela peut entraîner des coûts inutiles. #70852 (Julia Kartseva). Réduction du nombre de requêtes HEAD API vers le stockage objet sur le disk plain_rewritable. #70915 (Julia Kartseva). - Ajout de la possibilité de parser directement les données dans des colonnes éparses. #69828 (Anton Popov).
- Amélioration des performances de parsing des formats comportant un grand nombre de valeurs manquantes (par ex.
JSONEachRow). #69875 (Anton Popov). - Prise en charge de la lecture en parallèle des row groups Parquet et du prefetch des row groups en mode monothread. #69862 (LiuNeng).
- Prise en charge de l’index MinMax pour
pointInPolygon. #62085 (JackyWoo). - Utilisation de bloom filters lors de la lecture de fichiers Parquet. #62966 (Arthur Passos).
- Renommage des parts sans verrou afin d’éviter qu’INSERT n’affecte SELECT (à cause du verrou sur les parts) (dans des conditions normales avec
fsync_part_directory, le QPS de SELECT avec INSERT en parallèle a doublé, et sous forte charge l’effet est encore plus marqué). À noter : cela ne concerne pour l’instant queReplicatedMergeTree. #64955 (Azat Khuzhin). - Respect de
ttl_only_drop_partsavecmaterialize ttl; seules les colonnes nécessaires sont lues pour recalculer le TTL et supprimer les parts en les remplaçant par une part vide. #65488 (Andrey Zvonov). - Optimisation de la création de threads dans le ThreadPool afin de minimiser la contention sur les verrous. La création des threads s’effectue désormais en dehors de la section critique afin d’éviter les retards dans l’ordonnancement des tâches et la gestion des threads sous forte charge. ClickHouse est ainsi nettement plus réactif sous forte charge concurrente. #68694 (filimonov).
- Activation de la lecture des colonnes de type chaîne
LowCardinalitydepuisORC. #69481 (李扬). - Utilisation de
LowCardinalitypourProfileEventsdans les logs système tels quepart_log,query_views_log,filesystem_cache_log. #70152 (Alexey Milovidov). - Amélioration des performances des fonctions
fromUnixTimestamp/toUnixTimestamp. #71042 (kevinyhzou). - Ne plus désactiver la lecture non bloquante depuis le page cache pour l’ensemble du server lors d’une lecture via une E/S bloquante. Cela dégradait les performances lorsqu’un seul filesystem (par ex. tmpfs) ne prenait pas en charge l’appel système
preadv2, alors que les autres le prenaient en charge. #70299 (Antonio Andelic). ALTER TABLE .. REPLACE PARTITIONn’attend plus les mutations/merges qui se produisent dans d’autres partitions. #59138 (Vasily Nemkov).- Ne plus effectuer de validation lors de la synchronisation des ACL depuis Keeper. La validation est déjà effectuée lors de la création. Cela ne devrait pas avoir beaucoup d’impact, mais certaines installations comptent des dizaines de milliers d’utilisateurs, voire plus, et la validation inutile du hash peut prendre beaucoup de temps au démarrage du serveur (tout est synchronisé depuis Keeper). #70644 (Raúl Marín).
Amélioration
CREATE TABLE AScopieraPRIMARY KEY,ORDER BYet les clauses similaires (des tablesMergeTree). #69739 (sakulali).- Prise en charge de XID 64 bits dans Keeper. Cette fonctionnalité peut être activée avec la valeur de configuration
use_xid_64. #69908 (Antonio Andelic). - Les arguments de ligne de commande pour les paramètres Bool sont définis sur true lorsqu’aucune valeur n’est fournie pour l’argument (par ex.
clickhouse-client --optimize_aggregation_in_order --query "SELECT 1"). #70459 (davidtsuk). - Ajout des paramètres au niveau utilisateur
min_free_disk_bytes_to_perform_insertetmin_free_disk_perform_to_throw_insertpour empêcher les insertions sur des disques presque pleins. #69755 (Marco Vilas Boas). - La documentation embarquée des paramètres sera strictement plus détaillée et plus complète que la documentation du site web. Il s’agit de la première étape avant que la documentation du site soit systématiquement générée automatiquement à partir du code source. Cela a des implications durables : - il sera garanti que chaque paramètre y figure ; - il n’y aura aucun risque que les valeurs par défaut deviennent obsolètes ; - nous pourrons générer cette documentation pour chaque version de ClickHouse ; - la documentation pourra être affichée par le serveur lui-même, même sans accès à Internet. Générer la documentation du site web à partir du code source. #70289 (Alexey Milovidov).
- Autoriser une sous-chaîne de recherche vide dans la fonction
replace, avec le même comportement que PostgreSQL. #69918 (zhanglistar). - Autoriser une sous-chaîne de recherche vide dans les fonctions
replaceRegexp*. #70053 (zhanglistar). - Des liens symboliques pour les tables dans le répertoire
data/database_name/sont créés vers les chemins réels des données de la table, selon la storage policy, au lieu du répertoirestore/...sur le disque par défaut. #61777 (Kirill). - Lors de l’analyse d’un champ
EnumdepuisJSON, une chaîne contenant un entier sera interprétée comme l’élémentEnumcorrespondant. Cela clôt #65119. #66801 (scanhex12). - Autoriser
TRIMsur une chaîne videLEADINGouTRAILINGcomme no-op. Clôt #67792. #68455 (Peter Nguyen). - Amélioration de la compatibilité de
cast(timestamp as String)avec Spark. #69179 (Wenzheng Liu). - Toujours utiliser le nouvel analyseur pour calculer les expressions constantes lorsque
enable_analyzerest défini surtrue. Prise en charge du calcul des arguments de la table functionexecutablesans utiliser de querySELECTpour les expressions constantes. #69292 (Dmitry Novik). - Ajout d’un paramètre
enable_secure_identifierspour interdire les identifiants comportant des caractères spéciaux. #69411 (tuanpach). - Ajout de
show_create_query_identifier_quoting_rulepour définir le comportement de mise entre guillemets des identifiants dans le résultat de la requêteSHOW CREATE TABLE. Valeurs possibles : -user_display: lorsque les identifiants sont des mots-clés. -when_necessary: lorsque les identifiants font partie de{"distinct", "all", "table"}et lorsqu’ils peuvent créer une ambiguïté : noms de colonnes, noms d’attributs de dictionnaire. -always: toujours mettre les identifiants entre guillemets. #69448 (tuanpach). - Amélioration de la restauration des dépendances des entités d’accès #69563 (Vitaly Baranov).
- Si vous exécutez
clickhouse-clientou une autre application CLI, qu’elle démarre lentement à cause d’un serveur surchargé et que vous commencez à saisir votre requête, par exempleSELECT, les versions précédentes affichaient le reste du contenu d’écho du terminal avant le message d’accueil, par exempleSELECTClickHouse local version 24.10.1.1.au lieu deClickHouse local version 24.10.1.1.. C’est désormais corrigé. Cela clôt #31696. #69856 (Alexey Milovidov). - Ajout de la nouvelle colonne
readonly_durationà la tablesystem.replicas. Nécessaire pour distinguer les réplique readonly réelles des répliques sentinelles dans les alerts. #69871 (Miсhael Stetsyuk). - Changement du type du paramètre
join_output_by_rowlist_perkey_rows_thresholden entier non signé. #69886 (kevinyhzou). - Amélioration de la journalisation des span OpenTelemetry pour inclure les paramètres de requête. #70011 (sharathks118).
- Ajout d’informations de diagnostic sur les fonctions de tableau d’ordre supérieur si le type de résultat de la lambda est inattendu. #70093 (ttanay).
- Amélioration de Keeper : moins de verrous lors des changements de cluster. #70275 (Antonio Andelic).
- Ajout des mots-clés
WITH IMPLICITetFINALà la commandeSHOW GRANTS. Correction d’un bug mineur lié aux grants implicites : #70094. #70293 (pufit). - Prise en compte de
compatibilitypour les paramètres MergeTree. La valeurcompatibilityest récupérée depuis le profildefaultau démarrage du serveur, et les paramètres MergeTree par défaut sont modifiés en conséquence. Les modifications ultérieures du paramètrecompatibilityn’affectent pas les paramètres MergeTree. #70322 (Nikolai Kochetov). - Évite de saturer les logs avec de gros corps de réponse HTTP en cas d’erreurs lors de la communication inter-server. #70487 (Vladimir Cherkasov).
- Ajout d’un nouveau paramètre
max_parts_to_movepour contrôler le nombre maximal de parts pouvant être déplacées en une seule fois. #70520 (Vladimir Cherkasov). - Limitation de la fréquence de certains messages de log. #70601 (Alexey Milovidov).
CHECK TABLEavec le qualificateurPARTétait formaté de manière incorrecte dans le client. #70660 (Alexey Milovidov).- Prise en charge de l’écriture de l’index de colonne et de l’index de décalage avec le writer natif Parquet. #70669 (LiuNeng).
- Prise en charge de l’analyse de
DateTime64pour les microsecondes et le fuseau horaire en syntaxe Joda (“joda” est une bibliothèque Java populaire pour la gestion des dates et heures, et la “syntaxe joda” correspond au style de cette bibliothèque). #70737 (kevinyhzou). - Changement d’approche pour déterminer si un cloud storage prend en charge la suppression par lot ou non. #70786 (Vitaly Baranov).
- Prise en charge de la page Parquet v2 dans le reader natif. #70807 (Arthur Passos).
- Ajout d’une vérification lorsque la table a à la fois
storage_policyetdiskdéfinis. Une vérification a également été ajoutée pour s’assurer qu’une nouvelle storage policy est compatible avec l’ancienne lors de l’utilisation du paramètredisk. #70839 (Kirill). - Ajout de
system.s3_queue_settingsetsystem.azure_queue_settings. #70841 (Kseniia Sumarokova). - Les fonctions
base58Encodeetbase58Decodeacceptent désormais des arguments de typeFixedString. Exemple :SELECT base58Encode(toFixedString('plaintext', 9));. #70846 (Faizan Patel). - Ajout de la colonne
partitionà chaque type d’entrée du journal des parts. Auparavant, elle n’était définie que pour certaines entrées. Cela corrige #70819. #70848 (Alexey Milovidov). - Ajout des événements
MergeStartetMutateStartdanssystem.part_log, ce qui facilite l’analyse et la visualisation des merges. #70850 (Alexey Milovidov). - Ajout d’un événement de profil concernant le nombre de parts source fusionnées. Cela permet de surveiller le fan-out du merge tree en production. #70908 (Alexey Milovidov).
- Les téléchargements en arrière-plan vers le cache du système de fichiers ont été réactivés. #70929 (Nikita Taranov).
- Ajout d’un nouvel algorithme de merge selector, nommé
Trivial, réservé à un usage expert. Il est moins performant que le merge selectorSimple. #70969 (Alexey Milovidov). - Prise en charge de
CREATE OR REPLACE VIEWatomique. #70536 (tuanpach) - Ajout du mode
strict_onceà la fonction d’agrégationwindowFunnelpour éviter de compter plusieurs fois un même événement lorsqu’il correspond à plusieurs conditions, corrige #21835. #69738 (Vladimir Cherkasov).
Correction de bug (anomalie visible par l’utilisateur dans une version stable officielle)
- Applique les mises à jour de configuration dans l’objet de contexte global. Cela corrige des problèmes comme #62308. #62944 (Amos Bird).
- Corrige le fait que
ReadSettingsn’utilisait pas les valeurs définies par l’utilisateur, car seules les valeurs par défaut étaient prises en compte. #65625 (Kseniia Sumarokova). - Corrige un problème d’incompatibilité de type dans
sumMapFilteredlors de l’utilisation d’arguments signés. #58408 (Chen768959). - Corrige la monotonie des fonctions de conversion de type
toHourlorsqu’un argument optionnel de fuseau horaire est passé. #60264 (Amos Bird). - Assouplit la vérification
supportsPrewherepour les tablesMerge. Cela corrige #61064. Elle avait été durcie inutilement dans #60082. #61091 (Amos Bird). - Corrige la gestion du paramètre
use_concurrency_controlafin d’appliquer correctement la limiteconcurrent_threads_soft_limit_num. Cela active le contrôle de concurrence par défaut, car il ne fonctionnait pas correctement auparavant. #61473 (Sergei Trifonov). - Corrige une optimisation incorrecte de la section
JOIN ONdans le cas d’une vérificationIS NULLsous une autre fonction (commeNOT), ce qui pouvait entraîner des résultats erronés. Clôt #67915. #68049 (Vladimir Cherkasov). - Empêche les queries
ALTERqui rendraient la queryCREATEdes tables invalide. #68574 (János Benjamin Antal). - Corrige le formatage AST incohérent pour les fonctions
negate(-) etNOTavec des tuples et des tableaux. #68600 (Vladimir Cherkasov). - Corrige l’insertion d’un type incomplet dans
Dynamiclors de la désérialisation. Cela pouvait entraîner des erreursParameter out of bound. #69291 (Pavel Kruglov). - La réplication zero-copy, qui est expérimentale et ne doit pas être utilisée en production : corrige une boucle infinie après
restore replicadans le merge tree répliqué avec zero copy. #69293 (MikhailBurdukov). - Rétablit la valeur par défaut de
processing_threads_numau nombre de cœurs CPU dans le stockageS3Queue. #69384 (Kseniia Sumarokova). - Contourne le flux try/catch lors de la dé/sérialisation de Protobuf répétés imbriqués vers des colonnes imbriquées (corrige #41971). #69556 (Eliot Hautefeuille).
- Corrige un crash lors de l’insertion dans une colonne FixedString du moteur PostgreSQL. #69584 (Pavel Kruglov).
- Corrige un crash lors de l’exécution de
create view t as (with recursive 42 as ttt select ttt);. #69676 (Han Fei). - Correction de
maxMapStatequi levait ‘Bad get’ lorsque le type de valeur était DateTime64. #69787 (Michael Kolupaev). - Correction de
getSubcolumnavec les colonnesLowCardinalityen redéfinissantuseDefaultImplementationForLowCardinalityColumnspour renvoyertrue. #69831 (Miсhael Stetsyuk). - Correction du blocage permanent des envois distribués lorsqu’un DROP de table distribuée échouait. #69843 (Azat Khuzhin).
- Correction des requêtes non annulables contenant WITH FILL avec des clés NaN. Cela clôt #69261. #69845 (Alexey Milovidov).
- Correction de la valeur par défaut de l’analyseur pour l’ancienne valeur de compatibilité. #69895 (Raúl Marín).
- Ne pas vérifier les dépendances pendant CREATE OR REPLACE VIEW lors du DROP de l’ancienne table. Auparavant, la requête CREATE OR REPLACE échouait lorsqu’il existait des tables dépendantes de la vue recréée. #69907 (Pavel Kruglov).
- Correctif lié à Decimal. Corrige #69730. #69978 (Arthur Passos).
- Désormais, DEFINER/INVOKER fonctionneront avec les vues paramétrées. #69984 (pufit).
- Correction de l’analyse syntaxique des clauses DEFINER des vues. #69985 (pufit).
- Correction d’un bug où le fuseau horaire pouvait modifier le résultat de la requête avec des arguments
DateouDate32. #70036 (Yarik Briukhovetskyi). - Correction de
Block structure mismatchpour les requêtes avec des vues imbriquées et une conditionWHERE. Corrige #66209. #70054 (Nikolai Kochetov). - Évite la réutilisation de colonnes entre différents tuples nommés lors de l’évaluation des fonctions
tuple. Cela corrige #70022. #70103 (Amos Bird). - Correction d’un LOGICAL_ERROR incorrect lors du remplacement de littéraux dans des intervalles. #70122 (Pablo Marcos).
- Vérification du type Nullable(Nothing) pendant ALTER TABLE MODIFY COLUMN/QUERY afin d’empêcher les tables avec un tel type de données. #70123 (Pavel Kruglov).
- Message d’erreur approprié pour la requête illégale
JOIN ... ON *, clôt #68650. #70124 (Vladimir Cherkasov). - Correction d’un résultat incorrect avec un index de saut. #70127 (Raúl Marín).
- Corrige une condition de concurrence dans la méthode de décompression de ColumnObject/ColumnTuple pouvant entraîner une utilisation de mémoire après libération sur le tas. #70137 (Pavel Kruglov).
- Corrige un possible blocage dans ALTER COLUMN avec le type Dynamic. #70144 (Pavel Kruglov).
- Désormais, ClickHouse considérera davantage d’erreurs comme pouvant être retentées et ne marquera pas les parties de données comme corrompues dans ce cas. #70145 (alesapin).
- Utilise le bon paramètre
max_typeslors de la création du type Dynamic pour une sous-colonne JSON. #70147 (Pavel Kruglov). - Corrige l’affichage du mot de passe dans
system.query_logpour les utilisateurs utilisant la méthode d’authentification par mot de passe bcrypt. #70148 (Nikolay Degterinsky). - Corrige le compteur d’événements de l’interface native (InterfaceNativeSendBytes). #70153 (Yakov Olkhovskiy).
- Corrige un possible crash lié aux colonnes JSON. #70172 (Pavel Kruglov).
- Corrige plusieurs problèmes dans arrayMin et arrayMax. #70207 (Raúl Marín).
- Respecte le paramètre allow_simdjson dans le parseur du type JSON. #70218 (Pavel Kruglov).
- Corrige un déréférencement de pointeur nul lors de la création d’une vue matérialisée avec deux SELECT et un
INTERSECT, par exempleCREATE MATERIALIZED VIEW v0 AS (SELECT 1) INTERSECT (SELECT 1);. #70264 (Konstantin Bogdanov). - Ne modifie plus les paramètres globaux via les scripts de démarrage. Auparavant, la modification d’un paramètre dans un script de démarrage l’affectait globalement. #70310 (Antonio Andelic).
- Corrige ALTER du type
Dynamicavec réduction du paramètre max_types, ce qui pouvait entraîner un crash du serveur. #70328 (Pavel Kruglov). - Corrige un crash lors d’une utilisation incorrecte de WITH FILL. #70338 (Raúl Marín).
- Corrige un possible use-after-free dans
SYSTEM DROP FORMAT SCHEMA CACHE FOR Protobuf. #70358 (Azat Khuzhin). - Corrige un crash lors d’un GROUP BY sur une sous-colonne de sous-objet JSON. #70374 (Pavel Kruglov).
- Ne précharge pas les parties pour les fusions verticales si la partie ne contient aucune ligne. #70452 (Antonio Andelic).
- Corrige un crash dans WHERE avec des fonctions lambda. #70464 (Raúl Marín).
- Corrige la création de table avec
CREATE ... AS table_function(...)dans une base de donnéesReplicatedquand la source de la fonction de table n’est pas disponible sur la réplique secondaire. #70511 (Kseniia Sumarokova). - Ignorer toute sortie liée à l’async insert avec
wait_for_async_insert=1. Corrige #62644. #70530 (Konstantin Bogdanov). - Ignorer frozen_metadata.txt lors du parcours du répertoire shadow depuis system.remote_data_paths. #70590 (Aleksei Filatov).
- Corriger la création de fonctions de fenêtre avec état sur une mémoire désalignée. #70631 (Raúl Marín).
- Corrige de rares plantages dans les
SELECTet les fusions après l’ajout d’une colonne de typeArrayavec une expression par défaut non vide. #70695 (Anton Popov). - L’insert dans la fonction de table s3 respectera les paramètres de requête. #70696 (Vladimir Cherkasov).
- Corriger une récursion infinie lors de l’inférence d’un schéma Protobuf lorsque l’ignorance des champs non pris en charge est activée. #70697 (Raúl Marín).
- Désactiver enable_named_columns_in_function_tuple par défaut. #70833 (Raúl Marín).
- Corriger le fait que le paramètre processing_threads_num du moteur de table S3Queue n’était pas pris en compte lorsqu’il était déduit du nombre de cœurs CPU du serveur. #70837 (Kseniia Sumarokova).
- Normaliser les arguments de
named tupledans les états d’agrégation. Cela corrige #69732. #70853 (Amos Bird). - Corriger une
logical errordue à des zéros négatifs dans la table de hachage à deux niveaux. Cela clôt #70973. #70979 (Alexey Milovidov). - Corriger
limit byetlimit with tiespour le mode distribué et les répliques parallèles. #70880 (Nikita Taranov).
Version 24.9 de ClickHouse, 2024-09-26. Présentation, Vidéo
Changement non rétrocompatible
- Les expressions comme
a[b].csont prises en charge pour les tuples nommés, ainsi que les accès nommés par indice à partir d’expressions arbitraires, par exempleexpr().name. Cela est utile pour traiter du JSON. Cela clôt #54965. Dans les versions précédentes, une expression de la formeexpr().nameétait analysée commetupleElement(expr(), name), et le query analyzer recherchait une colonnenameplutôt que l’élément de tuple correspondant ; dans la nouvelle version, elle devienttupleElement(expr(), 'name'). Dans la plupart des cas, l’ancienne version ne fonctionnait pas, mais on peut imaginer un cas très inhabituel où ce changement pourrait entraîner une incompatibilité : si vous stockiez les noms des éléments de tuple dans une colonne ou un alias portant un nom différent de celui de l’élément de tuple :SELECT 'b' AS a, CAST([tuple(123)] AS 'Array(Tuple(b UInt8))') AS t, t[1].a. Il est très peu probable que vous utilisiez ce type de requêtes, mais nous devons tout de même signaler ce changement comme potentiellement non rétrocompatible. #68435 (Alexey Milovidov). - Lorsque le paramètre
print_pretty_type_namesest activé, il affiche le Data typeTuplesous une forme Pretty dans les instructionsSHOW CREATE TABLE, la fonctionformatQuery, ainsi qu’en interactive mode dansclickhouse-clientetclickhouse-local. Dans les versions précédentes, ce paramètre ne s’appliquait qu’aux queriesDESCRIBEet àtoTypeName. Cela clôt #65753. #68492 (Alexey Milovidov). - Ne pas autoriser la spécification explicite d’un UUID lors de la création d’une table dans des bases de données
Replicated. De même, ne pas autoriser la spécification explicite du Keeper path et du nom de replica pour les tables *MergeTree dans des bases de donnéesReplicated. Cela introduit un nouveau paramètredatabase_replicated_allow_explicit_uuidet modifie le type dedatabase_replicated_allow_replicated_engine_argumentsde Bool à UInt64 #66104 (Alexander Tokmakov).
Nouvelle fonctionnalité
- Permettre à un utilisateur d’avoir plusieurs méthodes d’authentification au lieu d’une seule. Permettre aussi de réinitialiser les méthodes d’authentification vers la méthode ajoutée le plus récemment. Si vous devez exécuter des instances en 24.8 et une en 24.9 pendant un certain temps, il est préférable de définir
max_authentication_methods_per_user= 1 pendant cette période afin d’éviter d’éventuelles incompatibilités. #65277 (Arthur Passos). - Ajouter la prise en charge de
ATTACH PARTITION ALL FROM. #61987 (Kirill Nikiforov). - Ajouter le paramètre
input_format_json_empty_as_defaultqui, lorsqu’il est activé, traite les champs vides dans les entrées JSON comme des valeurs par défaut. Résout #59339. #66782 (Alexis Arnaud). - Ajouter les fonctions
overlayetoverlayUTF8, qui remplacent une partie d’une chaîne par une autre. Exemple :SELECT overlay('Hello New York', 'Jersey', 11)renvoieHello New Jersey. #66933 (李扬). - Ajouter la prise en charge des lightweight deletes par partition dans
DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr;#67805 (sunny). - Implémenter la comparaison des valeurs du type de données
Intervalappartenant à différents domaines (par exemple secondes et minutes), qui sont désormais converties vers le plus petit supertype commun. #68057 (Yarik Briukhovetskyi). - Ajouter le paramètre
create_if_not_existspour utiliser par défaut le comportementIF NOT EXISTSlors des instructions CREATE. #68164 (Peter Nguyen). - Permettre la lecture de tables
Icebergdans Azure et en local. #68210 (Daniil Ivanik). - Les entrées du query cache peuvent désormais être supprimées par tag. Par exemple, l’entrée du query cache créée par
SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc'peut maintenant être supprimée avecSYSTEM DROP QUERY CACHE TAG 'abc'. #68477 (Michał Tabaszewski). - Ajouter le chiffrement du stockage pour les named collections. #68615 (Pablo Marcos).
- Ajouter la colonne virtuelle
_headerspour le table engineURL. Résout #65026. #68867 (flynn). - Ajouter la table
system.projectionspour suivre les projections disponibles. #68901 (Jordi Villar). - Ajouter la nouvelle fonction
arrayZipUnalignedpour la compatibilité avec Spark (où elle s’appellearrays_zip), qui autorise des Arrays non alignés à partir dearrayZip. #69030 (李扬). - Ajouter les commandes
cp/mvà l’application en ligne de commande du client Keeper, afin de copier/déplacer un nœud de manière atomique. #69034 (Mikhail Artemenko). - Ajoute l’argument
scale(par défaut :true) à la fonctionarrayAUC, permettant d’ignorer l’étape de normalisation (ticket #69609). #69717 (gabrielmcg44).
Fonctionnalité expérimentale
- Ajoute un paramètre
input_format_try_infer_variantsqui permet d’inférer le typeVariantlors de l’inférence de schéma pour les formats texte lorsqu’il existe plusieurs types possibles pour les éléments de colonne/tableau. #63798 (Shaun Struwig). - Ajoute les fonctions d’agrégation
distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypespour une meilleure introspection du contenu des colonnes de type JSON. #68463 (Kruglov Pavel). - Nouvel algorithme pour déterminer l’unité de distribution des marks entre les répliques parallèles à l’aide d’un hachage cohérent. Différents nombres de marks sont choisis selon les modèles de lecture afin d’améliorer les performances. #68424 (Nikita Taranov).
- Auparavant, la complexité algorithmique de la logique de déduplication des parts dans la gestion des annonces des répliques parallèles était de O(n^2), ce qui pouvait prendre un temps notable pour les tables comportant de nombreuses parts (ou partitions). Ce changement ramène la complexité à O(n*log(n)). #69596 (Alexander Gololobov).
- Améliorations des vues matérialisées actualisables : mode append (
... REFRESH EVERY 1 MINUTE APPEND ...) pour ajouter des lignes à la table existante au lieu d’écraser la table entière, tentatives de nouvelle exécution (désactivées par défaut, configurées dans la section SETTINGS de la query), querySYSTEM WAIT VIEW <name>qui attend l’actualisation en cours, ainsi que quelques corrections. #58934 (Michael Kolupaev). - Ajout de
min_maxcomme nouveau type de statistiques (expérimental). Il permet d’estimer les prédicats de plage sur des colonnes numériques, par ex.x < 100. #67013 (JackyWoo). - Améliore castOrDefault pour les colonnes Variant/Dynamic afin qu’il fonctionne lorsque les types internes ne sont pas convertibles du tout. #67150 (Kruglov Pavel).
- La réplication d’un sous-ensemble de colonnes est désormais disponible via MaterializedPostgreSQL. Résout #33748. #69092 (Kruglov Kirill).
Amélioration des performances
- Mise en œuvre de la lecture des seuls fichiers nécessaires pour le partitionnement Hive. #68963 (Yarik Briukhovetskyi).
- Amélioration des performances des JOIN en réorganisant la table de droite par clés lorsque les clés de table sont denses dans les hash joins LEFT ou INNER. #60341 (kevinyhzou).
- Amélioration des performances des ALL JOIN grâce à l’ajout paresseux de la liste des lignes. #63677 (kevinyhzou).
- Chargement asynchrone des métadonnées du cache du système de fichiers pendant le démarrage afin d’accélérer les redémarrages (contrôlé par le paramètre
load_metadata_asynchronously). #65736 (Daniel Pozo Escalona). - Les fonctions
arrayetmapont été optimisées pour traiter beaucoup plus rapidement certains cas courants. #67707 (李扬). - Optimisation mineure de la lecture des chaînes ORC, en particulier lorsqu’une colonne ne contient aucune valeur NULL. #67794 (李扬).
- Amélioration des performances globales des fusions en réduisant le surcoût lié à l’ordonnancement des étapes de fusion. #68016 (Anton Popov).
- Accélération des requêtes vers S3 lorsqu’aucun profil n’est défini, qu’aucune information d’authentification n’est définie et que l’IMDS n’est pas disponible (par exemple, lorsque vous interrogez un bucket public depuis une machine hors d’un cloud). Cela clôt #52771. #68082 (Alexey Milovidov).
- Dévirtualisation du lecteur de format dans
RowInputFormatWithNamesAndTypesafin d’améliorer les performances. #68437 (李扬). - Ajout de la fusion en parallèle pour la aggregate function
uniqlors d’une agrégation avec une clé de regroupement afin de maximiser l’utilisation du CPU. #68441 (Jiebin Sun). - Ajout du paramètre
output_format_orc_dictionary_key_size_thresholdpour permettre à l’utilisateur d’activer l’encodage par dictionnaire pour une colonne de type chaîne dans le output formatORC. Cela contribue à réduire significativement la taille du fichierORCde sortie et à améliorer les performances de lecture. #68591 (李扬). - Introduction de la nouvelle requête Keeper RemoveRecursive, qui supprime un nœud avec l’ensemble de son sous-arbre. #69332 (Mikhail Artemenko).
- Accélération des insertions dans une table dotée d’un vector similarity index grâce à l’ajout des données à l’index vectoriel en parallèle. #69493 (flynn).
- Réduction de l’utilisation mémoire des insertions en JSON grâce à une taille de tampon d’écriture adaptative. De nombreux fichiers créés par une JSON column dans une Wide part contiennent peu de données, et il n’est pas pertinent de leur allouer un tampon de 1 Mo. #69272 (Kruglov Pavel).
- Évite de restituer un thread au threadpool du concurrent hash join afin qu’une query ne crée pas un nombre excessif de threads. #69406 (Duc Canh Le).
Amélioration
- CREATE TABLE AS copie désormais PRIMARY KEY, ORDER BY et les clauses similaires. Pour l’instant, cette prise en charge est limitée à la famille de moteurs de table MergeTree. #69076 (sakulali).
- Renforcement de certaines parties du codebase liées à l’analyse syntaxique de petites entités. Les bogues (mineurs) suivants ont été détectés et corrigés : - si une table
DeltaLakeest partitionnée par Bool, la valeur de partition est toujours interprétée comme false ; - la tableExternalDistributedn’utilisait qu’un seul shard parmi les adresses fournies ; la valeur du paramètremax_threadset d’autres paramètres similaires s’affichait sous la forme'auto(N)'au lieu deauto(N). #52503 (Alexey Milovidov). - Utilisation de métriques spécifiques aux cgroups pour le calcul de l’utilisation CPU au lieu de métriques système globales. #62003 (Nikita Taranov).
- La planification des E/S pour les disques S3 distants s’effectue désormais au niveau des flux de sockets HTTP (au lieu de requêtes S3 entières) afin de résoudre les problèmes de limitation de débit liés à
bandwidth_limit. #65182 (Sergei Trifonov). - Les fonctions
upperUTF8etlowerUTF8ne pouvaient auparavant convertir en majuscules / minuscules que les caractères cyrilliques. Cette limitation a désormais été levée, et les caractères de n’importe quelle langue sont maintenant convertis correctement en majuscules/minuscules. Exemple :SELECT upperUTF8('Süden')renvoie maintenantSÜDEN. #65761 (李扬). - Lorsqu’un lightweight delete se produit sur une table avec une ou plusieurs projections, les utilisateurs avaient jusqu’ici deux possibilités : lever une exception (par défaut) ou supprimer la projection au moment du lightweight delete. Une troisième option est désormais disponible : conserver le lightweight delete, puis reconstruire la ou les projections. #66169 (jsc0218).
- Deux options (
dns_allow_resolve_names_to_ipv4etdns_allow_resolve_names_to_ipv6) ont été ajoutées pour permettre de bloquer les connexions selon la famille d’IP. #66895 (MikhailBurdukov). - Le comportement d’ignorance de Ctrl-Z (ignore_shell_suspend) dans clickhouse-client est désormais configurable. #67134 (Azat Khuzhin).
- Amélioration de la validation UTF-8 dans les formats de sortie JSON. Cela garantit qu’un JSON valide est généré en présence de certaines séquences d’octets dans les données de résultat. #67938 (mwoenker).
- Ajout de profile events pour les merges et les mutations afin d’améliorer l’introspection. #68015 (Anton Popov).
- ODBC : récupérer http_max_tries depuis la configuration du serveur. #68128 (Rodolphe Dugé de Bernonville).
- Ajout de la prise en charge des caractères génériques pour l’identification des utilisateurs dans l’extension X.509 SubjectAltName. #68236 (Marco Vilas Boas).
- Amélioration de l’inférence de schéma pour les valeurs de date time. Désormais,
DateTime64n’est utilisé que lorsque la valeur de date time comporte une partie fractionnaire ; sinon, le type DateTime classique est utilisé. L’inférence de Date/DateTime est également plus stricte, en particulier lorsquedate_time_input_format='best_effort', afin d’éviter d’inférer des valeurs de date time à partir de chaînes dans certains cas limites. #68382 (Kruglov Pavel). - Supprime l’ancien code des named collections dans les dictionnaires et le remplace par le nouveau, ce qui permet d’utiliser dans les dictionnaires des named collections créées en DDL. Clôture #60936, clôture #36890. #68412 (Kseniia Sumarokova).
- Utilise HTTP/1.1 au lieu de HTTP/1.0 (défini par défaut) pour les authentificateurs HTTP externes. #68456 (Aleksei Filatov).
- Ajout d’un nouvel ensemble de métriques pour l’introspection du pool de threads, offrant des informations plus détaillées sur ses performances et son comportement. #68674 (filimonov).
- Prise en charge des paramètres de requête dans les async inserts au format
Values. #68741 (Anton Popov). - Prise en charge de
Date32dansdateTruncettoStartOfInterval. #68874 (LiuNeng). - Ajoute les colonnes
plan_step_nameetplan_step_descriptionàsystem.processors_profile_log. #68954 (Alexander Gololobov). - Prise en charge de l’espagnol dans les dictionnaires intégrés. #69035 (Vasily Okunev).
- Ajoute l’architecture CPU au message court d’information sur les pannes. #69037 (Konstantin Bogdanov).
- Les requêtes échoueront plus rapidement s’il est impossible d’établir une nouvelle connexion à Keeper pendant les retries. #69148 (Raúl Marín).
- Met à jour Database Factory afin de permettre aux database engines définis par l’utilisateur d’avoir des arguments, des settings et des surcharges de table (comme StorageFactory). #69201 (NikBarykin).
- Le mode restore qui remplace tous les table engines externes et les fonctions par le moteur
Null(paramètresrestore_replace_external_engines_to_null,restore_replace_external_table_functions_to_null) échouait si la table contenait SETTINGS. Désormais, il supprime les settings de la définition de table dans ce cas et permet de restaurer ces tables. #69253 (Ilya Yatsishin). - CLICKHOUSE_PASSWORD est correctement échappé pour XML dans le point d’entrée de l’image clickhouse. #69301 (aohoyd).
- Autorise les arguments vides pour
arrayZip/arrayZipUnaligned, comme c’était déjà le cas pour concat dans https://github.com/ClickHouse/ClickHouse/pull/65887. Cela vise la compatibilité avec Spark dans Gluten CH Backend. #69576 (李扬). - Prise en charge d’options SSL plus avancées pour la communication interne de Keeper (par exemple, des private keys avec passphrase). #69582 (Antonio Andelic).
- L’analyse des index peut prendre un temps notable sur les grandes tables comportant de nombreuses parts ou partitions. Cette modification devrait permettre d’interrompre une requête lourde à cette étape. #69606 (Alexander Gololobov).
- Masquage des informations sensibles dans la table function
gcs. #69611 (Vitaly Baranov). - Reconstruire la projection lors des fusions qui réduisent le nombre de lignes. #62364 (cangyin).
correction de bug
- Correction de l’attachement d’une table lorsque
pg dbnamecontient-dans le moteur MaterializedPostgreSQL expérimental et non pris en charge. #62730 (takakawa). - Correction d’une erreur sur les colonnes générées dans le moteur MaterializedPostgreSQL expérimental et totalement non pris en charge lorsque l’ordre de
adnumest incorrect #63161. Correction d’une erreur sur la colonneidavec l’expressionnextvalcomme valeur par défaut dans MaterializedPostgreSQL expérimental et totalement non pris en charge lorsqu’une table contient des colonnes générées. Correction d’une erreur lors de la suppression d’une publication contenant des symboles autres que [a-z1-9-]. #67664 (Kruglov Kirill). - Storage Join prend désormais en charge les colonnes
Nullabledans la table de gauche, corrige #61247. #66926 (vdimir). - Résultat de requête incorrect avec les répliques parallèles (y compris la distribution des requêtes) lorsque l’opérateur
INcontient une conversion enDecimal(). Le bug a été introduit avec le nouvel analyseur. #67234 (Igor Nikonov). - Correction du problème où
ALTER MODIFY ORDER BYprovoque des métadonnées incohérentes. #67436 (iceFireser). - Correction de la borne supérieure de la fonction
fromModifiedJulianDay. Elle était censée être9999-12-31, mais avait été définie par erreur à9999-01-01. #67583 (PHO). - Correction du cas où l’index n’est pas au début du tuple dans une requête
IN. #67626 (Yarik Briukhovetskyi). - Correction de l’expiration dans
RoleCache. #67748 (Vitaly Baranov). - Correction des blocks manquants dans window view en raison d’un flush trop lent vers la vue. #67983 (Raúl Marín).
- Correction d’un problème MSan causé par un format de date incorrect. #68105 (JackyWoo).
- Correction d’un crash dans le filtrage Parquet lorsque les types de données du fichier diffèrent sensiblement des types demandés (par ex.
... FROM file('a.parquet', Parquet, 'x String'), alors que le fichier contientx Int64). Sans ce correctif, utilisezinput_format_parquet_filter_push_down = 0comme solution de contournement. #68131 (Michael Kolupaev). - Correction d’un crash dans
lag/lead, introduit dans #67091. #68262 (lgbo). - Tentative de correction d’un crash de Postgres lorsqu’une requête est annulée. #68288 (Kseniia Sumarokova).
- Après https://github.com/ClickHouse/ClickHouse/pull/61984,
schema_inference_make_columns_nullable=0pouvait toujours rendre des colonnesNullabledans les formats Parquet/Arrow. Ce changement n’était pas rétrocompatible, et les utilisateurs ont remarqué ce changement de comportement. Cette PR rétablit le fonctionnement précédent deschema_inference_make_columns_nullable=0(aucune colonneNullablene sera inférée) et introduit une nouvelle valeur,auto, pour ce paramètre, qui rendra les colonnesNullableuniquement si les données contiennent des informations sur la nullabilité. #68298 (Kruglov Pavel). - Corrige #50868. De petites valeurs constantes DateTime64 renvoyées par une sous-requête imbriquée dans une distributed query étaient transformées à tort en NULL, ce qui provoquait des erreurs et pouvait produire des résultats de requête incorrects. #68323 (Shankar).
- Corrige l’absence du mode sync replica dans la requête
SYSTEM SYNC REPLICA. #68326 (Duc Canh Le). - Corrige un bogue dans la condition de clé. #68354 (Han Fei).
- Corrige un crash lors de la suppression ou du renommage d’un rôle utilisé dans le répertoire externe d’utilisateurs LDAP. #68355 (Andrey Zvonov).
- Corrige une valeur supérieure à 1 dans la colonne Progress de system.view_refreshes #68377. #68378 (megao).
- Traite correctement les indicateurs regexp. #68389 (Han Fei).
- L’opérateur de transtypage de style PostgreSQL (
::) fonctionne correctement même avec les littéraux hexadécimaux de style SQL et les littéraux de chaînes binaires (par ex.SELECT x'414243'::String). Cela corrige également #68324. #68482 (Alexey Milovidov). - Correctif mineur pour https://github.com/ClickHouse/ClickHouse/pull/68131. #68494 (Chang chen).
- Corrige #68239 pour SAMPLE n lorsque n est un entier. #68499 (Denis Hananein).
- Corrige un bogue dans mann-whitney-utest lorsque la taille des deux distributions n’est pas égale. #68556 (Han Fei).
- Après un redémarrage inattendu, corrige l’échec du démarrage de la réplication de ReplicatedMergeTree dû à une gestion anormale d’une part couverte par une part endommagée. #68584 (baolin).
- Corrige les
LOGICAL_ERRORlorsque les fonctionssipHash64Keyed,sipHash128KeyedousipHash128ReferenceKeyedsont appliquées à des tableaux ou des tuples vides. #68630 (Robert Schulze). - L’index de texte intégral peut filtrer les mauvaises colonnes lors de l’indexation de plusieurs colonnes, car il ne réinitialisait pas row_id entre les différentes colonnes ; la procédure de reproduction se trouve dans tests/queries/0_stateless/03228_full_text_with_multi_col.sql. Sans cela. #68644 (siyuan).
- Corrige les caractères invalides ‘\t’ et ‘\n’ dans replica_name lors de la création d’une table Replicated, ce qui provoque une analyse incorrecte de ‘source replica’ dans LogEntry. Mentionné dans l’issue #68640. #68645 (Zhigao Hong).
- Rétablissement des colonnes virtuelles
_tableet_databasedans les tables distribuées. Elles étaient disponibles jusqu’à la version 24.3. #68672 (Anton Popov). - Correction d’une erreur possible
Size of permutation (0) is less than required (...)lors de la permutation d’une colonne Variant. #68681 (Kruglov Pavel). - Correction d’une erreur possible
DB::Exception: Block structure mismatch in joined block stream: different columns:avec la nouvelle colonne JSON. #68686 (Kruglov Pavel). - Correction d’un problème lié aux clés constantes matérialisées lors du hachage de maps avec des arrays comme clés dans les fonctions
sipHash(64/128)Keyed. #68731 (Salvatore Mesoraca). ColumnsDescription::toStringformate désormais chaque colonne à l’aide du même objetIAST::FormatState. Cela permet d’écrire sur disque et dans ZooKeeper des métadonnées de colonnes uniformes. #68733 (Miсhael Stetsyuk).- Correction de la fusion des données agrégées pour les grouping sets. #68744 (Nikolai Kochetov).
- Correction d’une erreur logique lors de la création d’un MergeTree répliqué, de la modification d’une colonne, puis de l’exécution de modify statistics. #68820 (Han Fei).
- Correction de la résolution des sous-colonnes Dynamic depuis des sous-requêtes dans l’analyseur. #68824 (Kruglov Pavel).
- Correction de l’analyse des métadonnées de types complexes dans DeltaLake. Clôt #68739. #68836 (Kseniia Sumarokova).
- Correction des insertions asynchrones lorsque les métadonnées d’une table sont modifiées (par des requêtes
ALTER ADD/MODIFY COLUMN) après l’insert, mais avant l’écriture dans la table. #68837 (Anton Popov). - Correction d’une exception inattendue lors du passage d’un tuple vide dans un array. Cela corrige #68618. #68848 (Amos Bird).
- Correction de l’analyse des commandes de mutation portant uniquement sur les métadonnées. #68935 (János Benjamin Antal).
- Correction d’un résultat potentiellement erroné lors de la fusion de l’état anyHeavy. #68950 (Raúl Marín).
- Correction de l’écriture dans les vues matérialisées lorsque le paramètre
optimize_functions_to_subcolumnsest activé. #68951 (Anton Popov). - Le cache des sérialisations n’est plus utilisé dans les méthodes const des colonnes Dynamic. Cela pouvait entraîner l’utilisation d’une valeur non initialisée, voire une situation de concurrence pendant les agrégations. #68953 (Kruglov Pavel).
- Correction d’une erreur d’analyse lorsque null doit, dans certains cas, être inséré comme valeur par défaut lors de l’analyse du type JSON. #68955 (Kruglov Pavel).
- Correction de l’absence d’envoi de
Content-Encodingdans certaines réponses compressées. #64802. #68975 (Konstantin Bogdanov). - Dans certains cas, le chemin était concaténé incorrectement et contenait la séquence
//; ce problème est résolu grâce à la normalisation du chemin. #69066 (Yarik Briukhovetskyi). - Correction d’une erreur logique en présence d’un async insert vide. #69080 (Han Fei).
- Correction d’une data race dans l’indication de progression de clickhouse-client lors de l’annulation d’une requête. #69081 (Sergei Trifonov).
- Correction d’un bug empêchant l’utilisation du vector similarity index (actuellement Experimental) lorsqu’il était utilisé avec cosine distance comme fonction de distance. #69090 (flynn).
- Cette modification corrige un problème où une nouvelle tentative de création d’une base de données Replicated après une défaillance du serveur pendant le processus de création initial pouvait entraîner une erreur. #69102 (Miсhael Stetsyuk).
- Ne pas inférer le type Bool à partir de String dans les CSV lorsque
input_format_csv_try_infer_numbers_from_strings = 1, car la lecture de valeurs Bool à partir de chaînes n’est pas autorisée. #69109 (Kruglov Pavel). - Correction des erreurs d’analyse des requêtes
explain ast insertcôté client lorsque--multiqueryest activé. #69123 (wxybear). - La clause
UNIONdans les subqueries n’était pas gérée correctement dans les requêtes avec parallel replicas et entraînait l’erreur LOGICAL_ERRORDuplicate announcement received for replica. #69146 (Igor Nikonov). - Correction de la propagation de l’argument structure dans s3Cluster. Auparavant, l’expression
DEFAULTde la colonne pouvait être perdue lors de l’envoi de la requête aux répliques dans s3Cluster. #69147 (Kruglov Pavel). - Prise en compte des paramètres de format dans le format Values lors de la conversion d’une expression vers le type de destination. #69149 (Kruglov Pavel).
- Correction de
clickhouse-client --queries-filepour les utilisateurs readonly (échouait auparavant avecCannot modify 'log_comment' setting in readonly mode). #69175 (Azat Khuzhin). - Correction d’une data race dans clickhouse-client lorsqu’il est redirigé vers un processus qui s’est terminé prématurément. #69186 (vdimir).
- Correction de résultats incorrects pour
uniqetGROUP BYavec les types JSON/Dynamic. #69203 (Kruglov Pavel). - Correction de la détection du format INFILE pour les asynchronous inserts. Si le format n’est pas défini explicitement dans la clause FORMAT, il peut être détecté à partir de l’extension du fichier INFILE. #69237 (Julia Kartseva).
- Après ce problème, on trouve en production un grand nombre de répliques de table dont la valeur du nœud
metadata_versionest à la fois égale à0et différente de la version du nœudmetadatade la table correspondante. Cela entraîne l’échec des requêtesaltersur ces répliques. #69274 (Miсhael Stetsyuk). - Marquer le type Dynamic comme un type de clé primaire non sûr afin d’éviter les problèmes avec Fields. #69311 (Kruglov Pavel).
- Améliorer la restauration des dépendances des entités d’accès. #69346 (Vitaly Baranov).
- Corriger un comportement indéfini lorsque toutes les tentatives de connexion échouent au moment d’obtenir une connexion pour des insertions. #69390 (Pablo Marcos).
- Ferme #69135. Si l’on essaie de réutiliser des données jointes pour une jointure
cross, cela ne peut toutefois pas se produire dans ClickHouse à l’heure actuelle. Il vaut mieux conserverhave_compresseddansreuseJoinedData. #69404 (lgbo). - Faire en sorte que la fonction
materialize()renvoie une full column lorsque le paramètre est une colonne sparse. #69429 (Alexander Gololobov). - Correction d’une
LOGICAL_ERRORdans la fonctionsqidDecode(#69450). #69451 (Robert Schulze). - Correctif rapide pour un problème de s3queue en 24.6 ou pour une requête CREATE avec une base de données replicated. #69454 (Kseniia Sumarokova).
- Correction d’un cas où la consommation de mémoire était trop élevée à cause du squashing dans les requêtes
INSERT INTO ... SELECTouCREATE TABLE AS SELECT. #69469 (Yarik Briukhovetskyi). - Les instructions
SHOW COLUMNSetSHOW INDEXfonctionnent désormais correctement si le nom de la table contient des points. #69514 (Salvatore Mesoraca). - L’utilisation du query cache pour les requêtes avec un mode d’overflow != ‘throw’ est désormais interdite. Cela évite que des résultats de requête potentiellement tronqués et incorrects ne soient stockés dans le query cache. (issue #67476). #69549 (Robert Schulze).
- Conserver l’ordre d’origine des conditions lors du déplacement vers prewhere. Auparavant, l’ordre pouvait changer, ce qui pouvait entraîner l’échec de requêtes lorsque cet ordre est important. #69560 (Kruglov Pavel).
- Corriger le prétraitement des requêtes multiples de Keeper après une erreur ZNOAUTH. #69627 (Antonio Andelic).
- Corriger
METADATA_MISMATCH, qui pouvait survenir à cause de TTL avec une clause WHERE dans DatabaseReplicated lors de la création d’une nouvelle replica. #69736 (Nikolay Degterinsky). - Corriger le paramètre
tracked_file_ttl_secdeStorageS3(Azure)Queue. Nous l’écrivions dans Keeper avec la clétracked_file_ttl_sec, mais le lisions commetracked_files_ttl_sec, ce qui était une faute de frappe. #69742 (Kseniia Sumarokova). - Utiliser tryconvertfieldtotype dans gethyperrectangleforrowgroup. #69745 (Miсhael Stetsyuk).
- Annulation de “Fix prewhere without columns and without adaptive index granularity (almost w/o anything)”’. En raison de ce retour en arrière, des erreurs peuvent survenir lors de la lecture de parties de données produites par d’anciennes versions de ClickHouse (probablement 2021 ou antérieures). #68897 (Alexander Gololobov).
version de ClickHouse 24.8 LTS, 2024-08-20. Presentation, Video
Changement non rétrocompatible
clickhouse-clientetclickhouse-localutilisent désormais le mode multi-requête par défaut (au lieu du mode requête unique). Par exemple,clickhouse-client -q "SELECT 1; SELECT 2"fonctionne désormais, alors qu’auparavant il fallait ajouter--multiquery(ou-n). L’option--multiquery/-nest devenue obsolète. Les requêtes INSERT dans des instructions multi-requêtes sont traitées différemment selon leur clause FORMAT : si le FORMAT estVALUES(le cas le plus courant), la fin de l’instruction INSERT est marquée par un point-virgule final;à la fin de la requête. Pour tous les autres FORMATs (par ex.CSVouJSONEachRow), la fin de l’instruction INSERT est marquée par deux sauts de ligne\n\nà la fin de la requête. #63898 (FFish).- Dans les versions précédentes, il était possible d’utiliser une syntaxe alternative pour les types de données
LowCardinalityen ajoutantWithDictionaryau nom du type de données. Il s’agissait d’une première implémentation fonctionnelle, qui n’a jamais été documentée ni exposée publiquement. Elle est désormais dépréciée. Si vous avez utilisé cette syntaxe, vous devez exécuter ALTER sur vos tables et renommer les types de données enLowCardinality. #66842 (Alexey Milovidov). - Correction d’erreurs logiques avec le moteur
Bufferutilisé avec une table de destination distribuée. Il s’agit d’un changement non rétrocompatible : les requêtes utilisantBufferavec une table de destination distribuée peuvent cesser de fonctionner si la table apparaît plus d’une fois dans la requête (par ex. dans une auto-jointure). #67015 (vdimir). - Dans les versions précédentes, l’appel de fonctions de distributions aléatoires basées sur la fonction gamma (comme Chi-Squared, Student, Fisher) avec des arguments négatifs proches de zéro entraînait des calculs très longs ou une boucle infinie. Dans la nouvelle version, appeler ces fonctions avec des arguments nuls ou négatifs produira une exception. Cela clôt #67297. #67326 (Alexey Milovidov).
- La table système
text_logest activée par défaut. Cela reste entièrement compatible avec les versions précédentes, mais vous pourriez constater une légère augmentation de l’utilisation du disque local (cette table système n’occupe qu’une très petite quantité d’espace disque). #67428 (Alexey Milovidov). - Dans les versions précédentes,
arrayWithConstantpouvait être lent lorsqu’il devait générer de très grands tableaux. Dans la nouvelle version, il est limité à 1 Go par tableau. Cela clôt #32754. #67741 (Alexey Milovidov). - Correction de la syntaxe du modificateur REPLACE (il n’est plus permis d’omettre les parenthèses). #67774 (Azat Khuzhin).
- Rétroporté dans #68349 : réimplémentation du type
Dynamic. Désormais, lorsque la limite des types de données dynamiques est atteinte, les nouveaux types ne sont plus convertis en String, mais stockés dans une structure de données spéciale au format binaire, avec le type de données encodé en binaire. Désormais, tout type ayant déjà été inséré dans une colonneDynamicpeut être lu depuis celle-ci comme sous-colonne. #68132 (Kruglov Pavel).
Nouvelle fonctionnalité
- Ajout d’un nouveau paramètre
MergeTreededuplicate_merge_projection_modepour contrôler les projections pendant les fusions (pour certains moteurs) et la requêteOPTIMIZE DEDUPLICATE. Options prises en charge :throw(déclencher une exception si la projection n’est pas entièrement prise en charge pour le moteur *MergeTree),drop(supprimer la projection pendant la fusion si elle ne peut pas elle-même être fusionnée de manière cohérente) etrebuild(reconstruire la projection depuis zéro, ce qui est une opération coûteuse). #66672 (jsc0218). - Ajout de la colonne virtuelle
_etagpour le moteur de table S3. Corrige #65312. #65386 (skyoct). - Ajout d’un mécanisme de balisage (espace de noms) pour le cache de requêtes. Les mêmes requêtes avec des tags différents sont considérées comme distinctes par le cache de requêtes. Exemple :
SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'abc'etSELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'def'créent désormais des entrées de cache de requêtes différentes. #68235 (sakulali). - Prise en charge de davantage de variantes de la strictesse de JOIN (
LEFT/RIGHT SEMI/ANTI/ANY JOIN) avec des conditions d’inégalité impliquant des colonnes des tables de gauche et de droite. Par ex.t1.y < t2.y(voir le paramètreallow_experimental_join_condition). #64281 (lgbo). - Interprétation du partitionnement de style Hive pour différents moteurs (
File,URL,S3,AzureBlobStorage,HDFS). Le partitionnement de style Hive organise les données dans des sous-répertoires partitionnés, ce qui permet d’interroger et de gérer efficacement de grands jeux de données. Pour l’instant, il crée uniquement des colonnes virtuelles avec le nom et les données appropriés. La PR suivante introduira le filtrage approprié des données (gain de performances). #65997 (Yarik Briukhovetskyi). - Ajout de la fonction
printfpour la compatibilité avec Spark (mais vous pouvez utiliser la fonction existanteformat). #66257 (李扬). - Ajout des options
restore_replace_external_engines_to_nulletrestore_replace_external_table_functions_to_nullpour remplacer les moteurs externes et les moteurs de table par le moteurNull, ce qui peut être utile pour les tests. Cela doit fonctionner pour RESTORE et la création explicite de tables. #66536 (Ilya Yatsishin). - Ajout de la prise en charge de la lecture de la géométrie
MULTILINESTRINGau formatWKTà l’aide de la fonctionreadWKTLineString. #67647 (Jacob Reckhard). - Ajout d’une nouvelle fonction de table
fuzzQuery. Cette fonction permet de modifier une chaîne de requête donnée à l’aide de variations aléatoires. Exemple :SELECT query FROM fuzzQuery('SELECT 1') LIMIT 5;. #67655 (pufit). - Ajout de la requête
ALTER TABLE ... DROP DETACHED PARTITION ALLpour supprimer toutes les partitions détachées. #67885 (Duc Canh Le). - Ajout de la statistique
rows_before_aggregation_at_leastà la réponse de la requête lorsqu’un nouveau paramètre,rows_before_aggregation, est activé. Cette statistique représente le nombre de lignes lues avant l’agrégation. Dans le contexte d’une requête distribuée, lors de l’utilisation de la fonction d’agrégationgroup byoumaxsanslimit,rows_before_aggregation_at_leastpeut refléter le nombre de lignes traitées par la requête. #66084 (morning-color). - Prise en charge de la requête
OPTIMIZEsur les tablesJoinafin de réduire leur empreinte mémoire. #67883 (Duc Canh Le). - Permet d’exécuter instantanément une requête dans play si vous ajoutez
&run=1dans l’URL #66457 (Aleksandr Musorin).
Fonctionnalité expérimentale
- Implémentation d’un nouveau type de données
JSON. #66444 (Kruglov Pavel). - Ajout du nouveau moteur de table
TimeSeries. #64183 (Vitaly Baranov). - Ajout d’un nouveau moteur de stockage expérimental
Kafkapour stocker les offsets dans Keeper au lieu de s’appuyer sur leur commit dans Kafka. Cela rend atomique le commit dans les tables ClickHouse par rapport à la consommation depuis la file d’attente. #57625 (János Benjamin Antal). - Utilisation d’une méthode adaptative de calcul de la taille des tâches de lecture (adaptative signifie qu’elle dépend de la taille des colonnes lues) pour les répliques parallèles. #60377 (Nikita Taranov).
- Ajout du type de statistiques
count_min(count-min sketches), qui fournit des estimations de sélectivité pour des prédicats d’égalité commecol = 'val'. Les types de données pris en charge sont les chaînes, les dates,datatimeet les types numériques. #65521 (JackyWoo).
Amélioration des performances
- Le paramètre
optimize_functions_to_subcolumnsest désormais activé par défaut. #68053 (Anton Popov). - Stocke les métadonnées du répertoire de disque
plain_rewritabledans la structure__meta, séparément des données MergeTree dans le stockage objet. Déplace le disqueplain_rewritablevers une structure de répertoires plate. #65751 (Julia Kartseva). - Améliore le compactage des colonnes (une opération effectuée dans les requêtes INSERT) pour les types
String/Array/Map/Variant/Dynamicen réservant à l’avance la mémoire nécessaire pour toutes les sous-colonnes. #67043 (Kruglov Pavel). - Accélère
SYSTEM FLUSH LOGSainsi que le vidage des logs à l’arrêt. #67472 (Sema Checherinda). - Améliore les performances globales des fusions en réduisant le surcoût des étapes d’ordonnancement des fusions. #68016 (Anton Popov).
- Accélère la suppression des tables pour la requête
DROP DATABASEet augmente à 16 la valeur par défaut dedatabase_catalog_drop_table_concurrency. #67228 (Nikita Mikhaylov). - Évite de surallouer de la capacité à une colonne de type Array lors de l’écriture au format ORC. Les performances augmentent de 15 % pour une colonne Array. #67879 (李扬).
- Accélère considérablement les mutations sur les tables MergeTree non répliquées. #66911 #66909 (Alexey Milovidov).
Amélioration
- Le paramètre
allow_experimental_analyzerest renommé enenable_analyzer. L’ancien nom est conservé sous forme d’alias. Cela signifie que l’analyzer n’est plus en bêta et est désormais pleinement promu pour la production. #66438 (Nikita Mikhaylov). - Amélioration de l’inférence de schéma des valeurs de date et d’heure. Désormais, DateTime64 n’est utilisé que lorsque la valeur de date et d’heure comporte une partie fractionnaire ; sinon, le type DateTime classique est utilisé. L’inférence de Date/DateTime est désormais plus stricte, en particulier lorsque
date_time_input_format='best_effort', afin d’éviter d’inférer des valeurs de date et d’heure à partir de chaînes dans certains cas limites. #68382 (Kruglov Pavel). - Le serveur ClickHouse prend désormais en charge le nouveau paramètre
max_keep_alive_requests. Pour les connexions HTTP keep-alive au serveur, il fonctionne de concert aveckeep_alive_timeout: si le délai d’inactivité n’a pas expiré, mais que plus demax_keep_alive_requestsrequêtes ont déjà été effectuées via cette connexion, celle-ci sera fermée par le serveur. #61793 (Nikita Taranov). - Diverses améliorations de l’Advanced dashboard. Ceci clôt #67697. Ceci clôt #63407. Ceci clôt #51129. Ceci clôt #61204. #67701 (Alexey Milovidov).
- Ne pas exiger de privilège pour REMOTE lors de la création d’une table Distributed : un privilège pour le moteur Distributed suffit. #65419 (jsc0218).
- Ne pas transmettre explicitement les logs de Keeper dans l’image Docker afin de permettre leur surcharge. #65564 (Azat Khuzhin).
- Introduction du paramètre
use_same_password_for_base_backuppour les requêtesBACKUPetRESTORE, permettant de créer et de restaurer des sauvegardes incrémentielles vers/depuis des archives protégées par mot de passe. #66214 (Samuele). - Ignorer
async_load_databasespour la requêteATTACH(auparavant,ATTACHpouvait se terminer avant que les tables ne soient attachées). #66240 (Azat Khuzhin). - Ajout de logs et de métriques pour les connexions rejetées (lorsque les ressources sont insuffisantes). #66410 (Alexander Tokmakov).
- Prise en charge correcte du type
UUIDpour le moteur MongoDB. #66671 (Azat Khuzhin). - Ajout de métriques de retard de réplication et de temps de reprise. #66703 (Miсhael Stetsyuk).
- Ajout de la métrique
DiskS3NoSuchKeyErrors. #66704 (Miсhael Stetsyuk). - Garantit le bon fonctionnement de la clause
COMMENTpour tous les moteurs de table. #66832 (Joe Lynch). - La fonction
mapFromArraysaccepte désormaisMap(K, V)comme premier argument. Par exemple,SELECT mapFromArrays(map('a', 4, 'b', 4), ['aa', 'bb'])fonctionne maintenant et renvoie{('a',4):'aa',('b',4):'bb'}. De plus, si le 1er argument est un Array, il peut désormais aussi être de typeArray(Nullable(T))ouArray(LowCardinality(Nullable(T))), tant que les valeurs effectives du tableau ne sont pasNULL. #67103 (李扬). - Lecture de la configuration de
clickhouse-localdepuis~/.clickhouse-local. #67135 (Azat Khuzhin). - Renommage du setting
input_format_orc_read_use_writer_time_zoneeninput_format_orc_reader_timezoneet possibilité, pour l’utilisateur, de définir le fuseau horaire du lecteur. #67175 (kevinyhzou). - Réduction du niveau de l’erreur
Socket is not connectedlorsque la connexion HTTP est immédiatement réinitialisée par le pair après l’établissement de la connexion ; clôt #34218. #67177 (vdimir). - Ajout de la possibilité de charger des dashboards pour
system.dashboardsdepuis la config (une fois définis, ils remplacent le préréglage de dashboards par défaut). #67232 (Azat Khuzhin). - Les window functions en SQL sont traditionnellement en snake case. ClickHouse utilise
camelCase, de nouveaux aliasdenseRank()etpercentRank()ont donc été créés. Ces nouvelles fonctions peuvent être appelées exactement comme les fonctions d’originedense_rank()etpercent_rank(). Les syntaxes snake case et camelCase restent toutes deux utilisables. Un nouveau test a également été ajouté pour chacune de ces fonctions. Cela clôt #67042. #67334 (Peter Nguyen). - Détection automatique du format du configuration file s’il n’est pas en
.xml,.ymlou.yaml. Si le fichier commence par <, il peut s’agir de XML ; sinon, il peut s’agir de YAML. Cela est utile lorsqu’un configuration file est fourni via un pipe :clickhouse-server --config-file <(echo "hello: world"). #67391 (sakulali). - Les fonctions
formatDateTimeetformatDateTimeInJodaSyntaxconsidèrent désormais leur paramètre de format comme facultatif. S’il n’est pas spécifié, les format strings%Y-%m-%d %H:%i:%setyyyy-MM-dd HH:mm:sssont supposées. Example :SELECT parseDateTime('2021-01-04 23:12:34')renvoie désormais la valeur DateTime2021-01-04 23:12:34(auparavant, cela levait une exception). #67399 (Robert Schulze). - Nouvelle tentative automatique des requêtes Keeper dans KeeperMap lorsqu’elles échouent à cause d’un timeout ou d’une perte de connexion. #67448 (Antonio Andelic).
- Ajout de
-no-pieaux builds Linux Aarch64 pour permettre une introspection correcte et la résolution des symboles dans les stacktraces après un redémarrage de ClickHouse. #67916 (filimonov). - Ajout de profile events pour les merges et les mutations afin d’améliorer l’introspection. #68015 (Anton Popov).
- Suppression des logs inutiles pour
MergeTreenon répliqué. #68238 (Daniil Ivanik).
Amélioration de la compilation/des tests/du packaging
- Le check des tests d’intégration instables exécute désormais chaque cas de test plusieurs fois afin de détecter davantage de problèmes et de rendre les tests plus fiables. Il utilise la bibliothèque
pytest-repeatpour exécuter plusieurs fois un cas de test dans le même environnement. Il est important de nettoyer les tables et autres entités à la fin d’un cas de test pour qu’il réussisse. Cette approche est bien plus rapide que plusieurs exécutions de pytest, car elle ne démarre les conteneurs nécessaires qu’une seule fois. #66986 (Ilya Yatsishin). - L’utilisation de CLion avec ClickHouse n’est plus bloquée. Dans les versions précédentes, CLion se figeait pendant une minute à chaque frappe. Cela clôt #66994. #66995 (Alexey Milovidov).
- getauxval : évite un crash lors d’une réexécution sous sanitizer en raison de l’entropie ASLR élevée dans les noyaux Linux récents. #67081 (Raúl Marín).
- Certaines parties du code du client ont été extraites dans un seul fichier, et le niveau d’optimisation le plus élevé possible leur est appliqué, même pour les builds de débogage. Cela clôt : #65745. #67215 (Nikita Mikhaylov).
Correction de bugs
- Pertinent uniquement pour le Data type Variant expérimental. Corrige un plantage avec le type Variant + AggregateFunction. #67122 (Kruglov Pavel).
- Corrige un plantage dans DistributedAsyncInsert lorsque la connection est vide. #67219 (Pablo Marcos).
- Corrige le plantage de
uniqetuniqThetaavec l’argumenttuple(). Ferme #67303. #67306 (flynn). - Corrige #66026. Évite de parcourir des arguments de table function non résolus dans
ReplaceTableNodeToDummyVisitor. #67522 (Dmitry Novik). - Corrige un possible dépassement de pile dans la fonction
JSONMergePatch. Cette fonction a été renommée dejsonMergePatchenJSONMergePatch, car le nom précédent était incorrect. L’ancien nom est toujours conservé pour des raisons de compatibilité. Améliore également le diagnostic des erreurs dans la fonction. Cela ferme #67304. #67756 (Alexey Milovidov). - Corrige un déréférencement de pointeur NULL, déclenché par une query spécialement conçue, qui faisait planter le server via hopEnd, hopStart, tumbleEnd et tumbleStart. #68098 (Salvatore Mesoraca).
- Corrige
Not-ready Setdans certaines system tables lors du filtrage avec des subqueries. #66018 (Michael Kolupaev). - Corrige la lecture des subcolumns après la query
ALTER ADD COLUMN. #66243 (Anton Popov). - Corrige les littéraux booléens dans la query envoyée à la database externe (pour des engines comme
PostgreSQL). #66282 (vdimir). - Corrige le formatting d’une query avec une expression JOIN ON aliasée ; par exemple,
... JOIN t2 ON (x = y) AS e ORDER BY xdoit être formaté comme... JOIN t2 ON ((x = y) AS e) ORDER BY x. #66312 (vdimir). - Corrige cluster() pour le secret inter-server (préserve l’utilisateur initial comme auparavant). #66364 (Azat Khuzhin).
- Corrige une possible erreur de runtime lors de la conversion d’un field Array contenant des nulls en Array(Variant). #66727 (Kruglov Pavel).
- Corrige un interblocage occasionnel dans Context::getDDLWorker. #66843 (Alexander Gololobov).
- Corrige la création d’une table KeeperMap après un drop incomplet. #66865 (Antonio Andelic).
- Corrige une erreur de part endommagée lors de la restauration sur un disk
s3_plain_rewritable. #66881 (Vitaly Baranov). - Dans de rares cas, ClickHouse pouvait considérer des parts comme endommagées en raison de projections inattendues sur le disk. C’est désormais corrigé. #66898 (alesapin).
- Correction d’une détection de format non valide lors de l’inférence de schéma, qui pouvait entraîner l’erreur logique « Le format ne prend pas en charge l’inférence de schéma. » #66899 (Kruglov Pavel).
- Corrige un interblocage possible lors de l’annulation d’une requête avec des répliques parallèles. #66905 (Nikita Taranov).
- Interdit create as select même lorsque
database_replicated_allow_heavy_createest défini. C’était interdit sans exception dans la 23.12, et accidentellement autorisé par ce paramètre dans la 24.7 non publiée. #66980 (vdimir). - La lecture depuis
numberspouvait à tort lever une exception lorsque la limitemax_rows_to_readétait définie. Cela corrige #66992. #66996 (Alexey Milovidov). - Ajoute une conversion de type correcte aux fonctions de fenêtre lagInFrame et leadInFrame, ce qui corrige le test msan. #67091 (Yakov Olkhovskiy).
- TRUNCATE DATABASE arrêtait auparavant la réplication comme s’il s’agissait d’une requête DROP DATABASE ; c’est corrigé. #67129 (Alexander Tokmakov).
- Utilise un contexte client distinct dans
clickhouse-local. #67133 (Vitaly Baranov). - Corrige l’erreur
Cannot convert column because it is non constant in source stream but must be constant in result.pour une requête qui lit depuis la tableMergesur la tableDistriburtedavec un shard. #67146 (Nikolai Kochetov). - Corrige le comportement de
ORDER BY alllorsqueenable_order_by_allest désactivé et avec des répliques parallèles (également pour les requêtes distribuées). #67153 (Igor Nikonov). - Corrige l’utilisation incorrecte de input_format_max_bytes_to_read_for_schema_inference dans le cache de schéma. #67157 (Kruglov Pavel).
- Corrige la fuite de mémoire pour count distinct lorsqu’une exception est levée pendant un group by sur une seule clé nullable. #67171 (Jet He).
- Corrige une erreur dans l’optimisation qui convertit OUTER JOIN en INNER JOIN. Cela corrige #67156. Cela corrige #66447. Le bug a été introduit dans https://github.com/ClickHouse/ClickHouse/pull/62907. #67178 (Maksim Kita).
- Corrige l’erreur
Conversion from AggregateFunction(name, Type) to AggregateFunction(name, Nullable(Type)) is not supported. Le bug était causé par l’optimisationoptimize_rewrite_aggregate_function_with_if. Corrige #67112. #67229 (Nikolai Kochetov). - Corrige une requête bloquée lors de l’utilisation d’un tuple vide comme lhs de la fonction IN. #67295 (Duc Canh Le).
- Il était possible de créer des données JSON très profondément imbriquées, ce qui provoquait un débordement de pile lors de l’ignorance des champs inconnus. Cela clôt #67292. #67324 (Alexey Milovidov).
- Correction de l’attachement d’une table ReplicatedMergeTree après une exception au démarrage. #67360 (Antonio Andelic).
- Correction d’un segfault provoqué par un détachement incorrect du groupe de threads dans
Aggregator. #67385 (Antonio Andelic). - Correction d’un autre cas où une fonction non déterministe est spécifiée dans la PK. #67395 (Nikolai Kochetov).
- Correction d’un index
bloom_filterqui cassait des requêtes avec des conditions un peu inhabituelles comme(k=2)=(k=2)ouhas([1,2,3], k). #67423 (Michael Kolupaev). - Analyse correcte d’un nom de fichier/URI contenant
::s’il ne s’agit pas d’une archive. #67433 (Antonio Andelic). - Correction de l’attente des tâches dans ~WriteBufferFromS3 lorsque WriteBuffer a été annulé. #67459 (Kseniia Sumarokova).
- Protection des répertoires temporaires de parts contre leur suppression pendant RESTORE. #67491 (Vitaly Baranov).
- Correction de l’exécution des fonctions imbriquées à court-circuit. #67520 (Kruglov Pavel).
- Correction de
Logical error: Expected the argument №N of type T to have X rows, but it has 0. L’erreur pouvait se produire dans une requête distante avec une expression constante dansGROUP BY(avec le nouvel analyseur). #67536 (Nikolai Kochetov). - Correction des jointures sur des Tuple contenant des NULL : certaines requêtes avec le nouvel analyseur et
NULLà l’intérieur du tuple dans la sectionJOIN ONrenvoyaient des résultats incorrects. #67538 (vdimir). - Correction de la replanification redondante de FileCache::freeSpaceRatioKeepingThreadFunc() dans le cas d’un cache plein non évictable. #67540 (Kseniia Sumarokova).
- Correction de l’insertion dans des moteurs de type stream (Kafka, RabbitMQ, NATS) via l’interface HTTP. #67554 (János Benjamin Antal).
- Correction de la fonction
toStartOfWeek, qui renvoyait un résultat erroné avec une faible valeurDateTime64. #67558 (Yarik Briukhovetskyi). - Correction de la création d’une vue avec une CTE récursive. #67587 (Yakov Olkhovskiy).
- Correction de
Logical error: 'file_offset_of_buffer_end <= read_until_position'dans le cache du système de fichiers. Clôt #57508. #67623 (Kseniia Sumarokova). - Corrige #62282. Suppression de l’appel à
convertFieldToString()et ajout d’un code de sérialisation spécifique à chaque type de données. La substitution des vues paramétrées était défaillante pour plusieurs types de données lorsque la valeur du paramètre était une fonction ou une expression renvoyant une instance de type de données. #67654 (Shankar). - Corrige un crash sur
percent_rank. Le type de frame par défaut depercent_rankdevientrange unbounded preceding and unbounded following. La frame de fenêtre par défaut deIWindowFunctionest désormais prise en compte, et les fonctions de fenêtre sans définition de frame en SQL peuvent maintenant être correctement réparties dans différentsWindowTransfomers. #67661 (lgbo). - Corrige le rechargement des UDF SQL avec UNION. Auparavant, le redémarrage du serveur pouvait rendre une UDF invalide. #67665 (Antonio Andelic).
- Corrige une possible erreur logique “Unexpected return type from if” avec le type expérimental Variant et le paramètre activé
use_variant_as_common_typedans la fonction if avec des Tuples et des Maps. #67687 (Kruglov Pavel). - En raison d’un bug du noyau Linux, une query peut se bloquer dans
TimerDescriptor::drain. Cela clôt #37686. #67702 (Alexey Milovidov). - Corrige la finalisation de la commande
RESTORE ON CLUSTER. #67720 (Vitaly Baranov). - Corrige le blocage d’un dictionnaire en cas de CANNOT_SCHEDULE_TASK pendant le chargement. #67751 (Azat Khuzhin).
- Les queries telles que
SELECT count() FROM t WHERE cast(c = 1 or c = 9999 AS Bool) SETTINGS use_skip_indexes=1, avec des index Bloom filter surc, fonctionnent désormais correctement. #67781 (jsc0218). - Corrige un résultat d’agrégation erroné dans certaines queries avec agrégation sans clés ni filtre, clôt #67419. #67804 (vdimir).
- Valide les types de données expérimentaux/suspects dans ALTER ADD/MODIFY COLUMN. #67911 (Kruglov Pavel).
- Corrige l’analyse de DateTime64 après constant folding dans les requêtes distribuées, clôt #66773. #67920 (vdimir).
- Corrige un résultat
count()erroné lorsqu’une fonction non déterministe est présente dans le prédicat. #67922 (János Benjamin Antal). - Corrige le calcul de la limite souple maximale du nombre de threads dans les environnements conteneurisés où le nombre de CPU utilisables est limité. #67963 (Robert Schulze).
- Désormais, ClickHouse ne considère plus une part comme corrompue si la projection n’existe pas sur le disque mais figure dans
checksums.txt. #68003 (alesapin). - Correction du saut des parts non modifiées dans les mutations avec le nouvel analyseur. Auparavant, avec l’analyseur activé, les données d’une part pouvaient être réécrites par une mutation, même si celle-ci n’affectait pas cette part selon le prédicat. #68052 (Anton Popov).
- Supprime une optimisation incorrecte qui retirait le tri dans les sous-requêtes utilisant
OFFSET. Corrige #67906. #68099 (Graham Campbell). - Tentative de correction de
Block structure mismatch in AggregatingStep stream: different typespour l’optimisation des projections agrégées. #68107 (Nikolai Kochetov). - Tentative de correction d’un crash de Postgres lorsqu’une requête est annulée. #68288 (Kseniia Sumarokova).
- Correction de l’absence du mode de synchronisation de replica dans la requête
SYSTEM SYNC REPLICA. #68326 (Duc Canh Le).
Version 24.7 de ClickHouse, 2024-07-30. Présentation, Vidéo
changement non rétrocompatible
- Interdiction de
CRATE MATERIALIZED VIEW ... ENGINE Replicated*MergeTree POPULATE AS SELECT ...avec des bases de données Replicated. #63963 (vdimir). clickhouse-keeper-clientn’acceptera désormais les chemins que dans des littéraux de chaîne, par exemplels '/hello/world', et non des chaînes non délimitées commels /hello/world. #65494 (Alexey Milovidov).- La métrique
KeeperOutstandingRequetsa été renommée enKeeperOutstandingRequests. #66206 (Robert Schulze). - Suppression du champ
is_deterministicde la tablesystem.functions. #66630 (Alexey Milovidov). - La fonction
tupleessaiera désormais de construire des tuples nommés dans les requêtes (contrôlé parenable_named_columns_in_function_tuple). Ajout de la fonctiontupleNamespour extraire les noms des tuples. #54881 (Amos Bird). - Modification du fonctionnement de la déduplication pour les vues matérialisées. Correction de nombreux cas, par exemple : - sur la table de destination : les données sont réparties en 2 blocs ou plus, et ces blocs sont considérés comme des doublons lorsqu’ils sont insérés en parallèle. - sur la table de destination de la MV : les blocs identiques sont dédupliqués, ce qui se produit lorsque la MV produit souvent des données identiques à partir de données d’entrée différentes en raison de l’agrégation. - sur la table de destination de la MV : les blocs identiques provenant de différentes MV sont dédupliqués. #61601 (Sema Checherinda).
- Les fonctions
bitShiftLeftetbitShitfRightrenvoient une erreur si les positions de décalage sont hors limites #65838 (Pablo Marcos).
Nouvelle fonctionnalité
- Ajout de la prise en charge de
ASOF JOINpour l’algorithmefull_sorting_join. #55051 (vdimir). - Prise en charge de l’authentification JWT dans
clickhouse-client(disponible uniquement dans ClickHouse Cloud). #62829 (Konstantin Bogdanov). - Ajout des fonctions SQL
changeYear,changeMonth,changeDay,changeHour,changeMinute,changeSecond. Par exemple,SELECT changeMonth(toDate('2024-06-14'), 7)renvoie la date2024-07-14. #63186 (cucumber95). - Introduction de scripts de démarrage permettant d’exécuter des requêtes préconfigurées au démarrage. #64889 (pufit).
- Prise en charge de
accept_invalid_certificatedans la config du client afin de lui permettre de se connecter en TCP sécurisé à un serveur utilisant un certificat auto-signé ; peut être utilisé comme raccourci pour les client settingsopenSSLcorrespondantsverificationMode=none+invalidCertificateHandler.name=AcceptCertificateHandler. #65238 (peacewalker122). - Ajout de system.error_log, qui contient l’historique des valeurs d’erreur de la table system.errors, périodiquement écrites sur disque. #65381 (Pablo Marcos).
- Ajout de la fonction d’agrégation
groupConcat. Elle est à peu près équivalente àarrayStringConcat( groupArray(column), ','). Elle peut recevoir 2 paramètres : un délimiteur de chaîne et le nombre d’éléments à traiter. #65451 (Yarik Briukhovetskyi). - Ajout du stockage AzureQueue. #65458 (Kseniia Sumarokova).
- Ajout d’un nouveau paramètre pour désactiver ou activer l’écriture de l’index de page dans les fichiers Parquet. #65475 (lgbo).
- Introduction de la config serveur
logger.console_log_levelpour contrôler le niveau de journalisation dans la console (si activé). #65559 (Azat Khuzhin). - Ajout automatique d’un caractère générique
*à la fin d’un chemin de répertoire avec la table functionfile. #66019 (Zhidong (David) Guo). - Ajout de l’option
--memory-usageau client en mode non interactif. #66393 (vdimir). - Création d’un client interactif pour clickhouse-disks, avec ajout d’un disque local à partir du répertoire local. #64446 (Daniil Ivanik).
- Lorsqu’un lightweight delete se produit sur une table avec une ou plusieurs projections, les utilisateurs peuvent soit lever une exception (par défaut), soit supprimer la projection. #65594 (jsc0218).
- Ajout de tables système contenant les principales informations sur toutes les tables détachées. #65400 (Konstantin Morozov).
Fonctionnalité expérimentale
- Modification de la sérialisation binaire du type de données
Variant: ajout du modecompactpour éviter d’écrire plusieurs fois le même discriminateur pour les granules ne contenant qu’une seule variante ou uniquement des valeurs NULL. Ajout du paramètre MergeTreeuse_compact_variant_discriminators_serialization, activé par défaut. Notez que le type Variant reste expérimental et qu’une modification non rétrocompatible de la sérialisation est acceptable. #62774 (Kruglov Pavel). - Prise en charge d’un backend de stockage sur disque pour ClickHouse Keeper. #56626 (Han Fei).
- Refactorisation des fonctions JSONExtract, avec prise en charge d’un plus grand nombre de types, y compris le type expérimental Dynamic. #66046 (Kruglov Pavel).
- Prise en charge de la sous-colonne map NULL pour les sous-colonnes
VariantetDynamic. #66178 (Kruglov Pavel). - Correction de la lecture des sous-colonnes
Dynamicà partir d’une tableMemorymodifiée. Auparavant, si le paramètremax_typesd’un type Dynamic était modifié dans une table Memory via alter, la lecture ultérieure des sous-colonnes pouvait renvoyer un résultat erroné. #66066 (Kruglov Pavel). - Ajout de la prise en charge de
cluster_for_parallel_replicaslors de l’utilisation du mode parallel replicas avec une clé personnalisée. Cela permet d’utiliser le mode parallel replicas avec une clé personnalisée sur des tables MergeTree. #65453 (Antonio Andelic).
Amélioration des performances
- Remplacement de l’algorithme de conversion des entiers en chaînes par un algorithme plus rapide (d’une version modifiée de amdn/itoa à une version modifiée de jeaiii/itoa). #61661 (Raúl Marín).
- Les tailles des tables de hachage créées par la jointure (algorithme
parallel_hash) sont désormais collectées et mises en cache. Ces informations serviront à préallouer de l’espace dans les tables de hachage lors des exécutions suivantes de requêtes, afin de réduire le temps consacré à leur redimensionnement. #64553 (Nikita Taranov). - Optimisation des requêtes avec
ORDER BYsur la clé primaire etWHEREcontenant une condition à forte sélectivité grâce au buffering. Ce comportement est contrôlé par le paramètreread_in_order_use_buffering(activé par défaut) et peut augmenter l’utilisation mémoire de la requête. #64607 (Anton Popov). - Amélioration des performances de chargement des métadonnées
plain_rewritable. #65634 (Alexey Milovidov). - L’attachement de tables sur des disques en lecture seule utilisera moins de ressources en ne chargeant pas les parties obsolètes. #65635 (Alexey Milovidov).
- Prise en charge des hyperrectangles min-max pour les index Set. #65676 (AntiTopQuark).
- Déchargement de l’index primaire des parties obsolètes afin de réduire l’utilisation mémoire totale. #65852 (Anton Popov).
- Les fonctions
replaceRegexpAlletreplaceRegexpOnesont désormais nettement plus rapides lorsque le pattern est trivial, c’est-à-dire qu’il ne contient ni métacaractères, ni classes de patterns, ni indicateurs, ni caractères de groupement, etc. (Merci à Taiyang Li). #66185 (Robert Schulze). - Requêtes S3 : réduction du temps de réessai pour les requêtes, augmentation du nombre de tentatives pour les sauvegardes. 8,5 minutes et 100 tentatives pour les requêtes, 1,2 heures et 1 000 tentatives pour la restauration de sauvegardes. #65232 (Sema Checherinda).
- Prise en charge de l’optimisation LIMIT dans le query plan. Prise en charge du pushdown de LIMIT pour le stockage PostgreSQL et la fonction de table. #65454 (Maksim Kita).
- Amélioration de l’équilibrage de charge de ZooKeeper. La session actuelle n’expire pas tant que les nœuds optimaux ne redeviennent pas disponibles, malgré
fallback_session_lifetime. Ajout de la prise en charge de l’équilibrage tenant compte des AZ. #65570 (Alexander Tokmakov). - DatabaseCatalog supprime les tables plus rapidement en utilisant jusqu’à database_catalog_drop_table_concurrency threads. #66065 (Sema Checherinda).
Amélioration
- Amélioration de l’équilibrage de charge de ZooKeeper. La session en cours n’expire pas tant que les nœuds optimaux ne redeviennent pas disponibles, malgré
fallback_session_lifetime. Ajout de la prise en charge de l’équilibrage sensible aux AZ. #65570 (Alexander Tokmakov). - Le réglage
optimize_trivial_insert_selectest désactivé par défaut. Dans la plupart des cas, cela devrait être bénéfique. Néanmoins, si vous constatez un ralentissement de INSERT SELECT ou une augmentation de l’utilisation de la mémoire, vous pouvez le réactiver ou utiliserSET compatibility = '24.6'. #58970 (Alexey Milovidov). - Affiche une stacktrace et des informations de diagnostic si
clickhouse-clientouclickhouse-localse ferme brutalement. #61109 (Alexander Tokmakov). - Le résultat de
SHOW INDEX | INDEXES | INDICES | KEYSétait auparavant trié selon les noms des colonnes de la clé primaire. Comme cela n’était pas intuitif, le résultat est désormais trié selon la position des colonnes de la clé primaire au sein de celle-ci. #61131 (Robert Schulze). - Modification du fonctionnement de la déduplication pour les vues matérialisées. Correction de nombreux cas, par exemple : - sur la table de destination : les données sont divisées en 2 blocs ou plus, et ces blocs sont considérés comme des doublons lorsqu’un bloc est inséré en parallèle. - sur la table de destination de la MV : les blocs identiques sont dédupliqués, ce qui se produit lorsque la MV produit souvent des données identiques à partir de données d’entrée différentes en raison d’une agrégation. - sur la table de destination de la MV : les blocs identiques provenant de différentes MV sont dédupliqués. #61601 (Sema Checherinda).
- Prise en charge de la lecture de données DeltaLake partitionnées. Déduction du schéma DeltaLake à partir des métadonnées plutôt que des données. #63201 (Kseniia Sumarokova).
- Dans les protocoles composables, la couche TLS n’acceptait que les paramètres
certificateFileetprivateKeyFile. https://clickhouse.com/docs/operations/settings/composable-protocols. #63985 (Anton Ivashkin). - Ajout de l’événement de profil
SelectQueriesWithPrimaryKeyUsage, qui indique combien de requêtes SELECT utilisent la clé primaire pour évaluer la clause WHERE. #64492 (0x01f). - Corrections et améliorations liées à
StorageS3Queue. Déduit une valeur par défaut pours3queue_processing_threads_numen fonction du nombre de CPU cores physiques du serveur (au lieu de l’ancienne valeur par défaut de 1). Définit la valeur par défaut des3queue_loading_retriesà 10. Corrige la possible présence d’un vague “Uncaught exception” dans la colonne d’exception desystem.s3queue. N’incrémente pas le nombre de tentatives en cas d’exceptionMEMORY_LIMIT_EXCEEDED. Déplace le commit des fichiers vers une étape postérieure à la fin complète de l’insertion dans la table afin d’éviter que des fichiers soient validés alors qu’ils n’ont pas été insérés. Ajoute les réglagess3queue_max_processed_files_before_commit,s3queue_max_processed_rows_before_commit,s3queue_max_processed_bytes_before_commit,s3queue_max_processing_time_sec_before_commit, afin de mieux contrôler le commit et le temps de flush. #65046 (Kseniia Sumarokova). - Prise en charge des alias dans la fonction de vue paramétrée (nouvel analyzer uniquement). #65190 (Kseniia Sumarokova).
- Mise à jour pour masquer la clé de compte dans les journaux de
azureBlobStorage. #65273 (SmitaRKulkarni). - Partition pruning pour les prédicats
INlorsque l’expression de filtre fait partie de l’expressionPARTITION BY. #65335 (Eduard Karacharov). arrayMin/arrayMaxpeuvent s’appliquer à tous les types de données comparables. #65455 (pn).- Amélioration de la comptabilisation de la mémoire pour cgroups v2 afin d’exclure la part occupée par le page cache. #65470 (Nikita Taranov).
- Ne pas créer de paramètres de format pour chaque ligne lors de la sérialisation de chunks à insérer dans la table EmbeddedRocksDB. #65474 (Duc Canh Le).
- Réduire l’invite de
clickhouse-localà:)uniquement.getFQDNOrHostName()est trop lent sur MacOS, et nous ne voulons de toute façon pas de hostname dans l’invite declickhouse-local. #65510 (Konstantin Bogdanov). - Éviter d’afficher un message de jemalloc à propos des arenas par CPU sur les machines virtuelles peu puissantes. #65532 (Alexey Milovidov).
- Désactiver par défaut le téléchargement en arrière-plan du filesystem cache. Il sera réactivé lorsque nous aurons corrigé le problème pouvant entraîner « Memory limit exceeded », car la désallocation de mémoire se fait en dehors du contexte de la query (alors que le buffer est alloué dans le contexte de la query) si l’on utilise des threads de téléchargement en arrière-plan. De plus, nous devons ajouter un paramètre distinct pour définir la taille maximale à télécharger pour les workers en arrière-plan (actuellement, elle est limitée par max_file_segment_size, ce qui peut être trop élevé). #65534 (Kseniia Sumarokova).
- Ajouter une nouvelle option à la config
<config_reload_interval_ms>pour spécifier à quelle fréquence ClickHouse rechargera la config. #65545 (alesapin). - Implémenter l’encodage binaire pour les types de données ClickHouse et en ajouter la spécification dans la documentation. L’utiliser dans la sérialisation binaire de Dynamic, et permettre son utilisation dans les formats RowBinaryWithNamesAndTypes et Native via les paramètres. #65546 (Kruglov Pavel).
- Les paramètres serveur
compiled_expression_cache_sizeetcompiled_expression_cache_elements_sizesont désormais affichés danssystem.server_settings. #65584 (Robert Schulze). - Ajouter la prise en charge de l’identification des utilisateurs basée sur l’extension x509 SubjectAltName. #65626 (Anton Kozlov).
clickhouse-localrespecteramax_server_memory_usageetmax_server_memory_usage_to_ram_ratiodéfinis dans le fichier de configuration. Il définira également par défaut l’utilisation mémoire maximale à 90 % de la mémoire système, comme le faitclickhouse-server. #65697 (Alexey Milovidov).- Ajouter un script pour sauvegarder vos fichiers vers ClickHouse. #65699 (Alexey Milovidov).
- La source PostgreSQL prend désormais en charge l’annulation des requêtes. #65722 (Maksim Kita).
- Faire en sorte que
allow_experimental_analyzersoit contrôlé par l’initiateur pour les distributed queries. Cela garantit la compatibilité et la justesse des opérations dans des clusters exécutant des versions mixtes. #65777 (Nikita Mikhaylov). - Respecter la limite CPU du cgroup dans Keeper. #65819 (Antonio Andelic).
- Permet d’utiliser la fonction
concatavec des arguments vides:) select concat();. #65887 (李扬). - Permet de gérer les collections nommées dans
clickhouse-local. #65973 (Alexey Milovidov). - Améliore les événements de profil liés à Azure. #65999 (alesapin).
- Prend en charge la lecture de fichiers ORC selon le fuseau horaire utilisé lors de l’écriture. #66025 (kevinyhzou).
- Ajoute des paramètres pour contrôler les connexions à PostgreSQL. Le paramètre
postgresql_connection_attempt_timeoutspécifie la valeur transmise au paramètreconnect_timeoutde l’URL de connexion. Le paramètrepostgresql_connection_pool_retriesspécifie le nombre de tentatives pour établir une connexion au point de terminaison PostgreSQL. #66232 (Dmitry Novik). - Réduit l’imprécision de
input_wait_elapsed_us/elapsed_usdanssystem.processors_profile_log. #66239 (Azat Khuzhin). - Améliore les ProfileEvents pour le cache du système de fichiers. #66249 (zhukai).
- Ajoute des paramètres pour ignorer la clause
ON CLUSTERdans les requêtes de gestion des collections nommées avec le stockage répliqué. #66288 (MikhailBurdukov). - La fonction
generateSnowflakeIDpermet désormais de spécifier un ID de machine comme paramètre afin d’éviter les collisions dans les grands clusters. #66374 (ZAWA_ll). - Désactive la suspension avec
Ctrl+Zen mode interactif. Il s’agit d’un piège fréquent, et ce comportement n’est pas celui attendu par la quasi-totalité des utilisateurs. J’imagine que seuls quelques utilisateurs particulièrement experts pourraient apprécier de suspendre des applications de terminal en arrière-plan, mais je n’en connais aucun. #66511 (Alexey Milovidov). - Ajoute une option pour valider le type de clé primaire dans Dictionaries. Sans cette option, pour les layouts simples, tout type de colonne sera implicitement converti en UInt64. #66595 (MikhailBurdukov).
Correction de bug (dysfonctionnement visible par l’utilisateur dans une version stable officielle)
- Vérifie les dépendances cycliques dans les requêtes CREATE/REPLACE/RENAME/EXCHANGE et lève une exception en cas de dépendance cyclique. Auparavant, de telles dépendances cycliques pouvaient provoquer un interblocage au démarrage du serveur. Corrige également certains bogues liés à la création des dépendances. #65405 (Kruglov Pavel).
- Corrige les tailles inattendues des colonnes
LowCardinalitydans les appels de fonction. #65298 (Raúl Marín). - Corrige un crash dans maxIntersections. #65689 (Raúl Marín).
- Corrige la réinitialisation de la clause
VALID UNTILdans la définition de l’utilisateur après un redémarrage. #66409 (Nikolay Degterinsky). - Corrige la colonne du temps restant dans
SHOW MERGES. #66735 (Alexey Milovidov). Query was cancelledpouvait s’afficher deux fois dans clickhouse-client. Ce comportement a été corrigé. #66005 (Nikita Mikhaylov).- Corrige un crash lors de l’utilisation de
MaterializedMySQL(une fonctionnalité expérimentale non prise en charge) avec TABLE OVERRIDE, qui mappe un champ MySQL NULL vers un champ ClickHouse not NULL. #54649 (Filipp Ozinov). - Corrige une erreur logique lorsque l’expression
PREWHEREne lit aucune colonne et que la table n’a pas d’adaptive index granularity (table très ancienne). #59173 (Alexander Gololobov). - Corrige un bogue dans le buffer d’annulation lors de l’annulation d’une requête. #64478 (Sema Checherinda).
- Corrige le remplissage des colonnes des parts à partir des métadonnées (lorsque columns.txt n’existe pas). #64757 (Azat Khuzhin).
- Corrige un crash avec
ALTER TABLE ... ON CLUSTER ... MODIFY SQL SECURITY. #64957 (pufit). - Corrige un crash lors de la destruction d’AccessControl : ajout d’un arrêt explicite. #64993 (Vitaly Baranov).
- Élimine récursivement la fonction injective dans l’argument des fonctions
uniq*. Cela fonctionnait correctement auparavant, mais a été cassé dans le nouvel analyzer. #65140 (Duc Canh Le). - Corrige un nom de projection inattendu dans une requête avec CTE. #65267 (wudidapaopao).
- Exige le privilège
dictGetlors de l’accès aux Dictionaries via une requête directe ou le moteur de tableDictionary. #65359 (Joe Lynch). - Corrige l’authentification S3 spécifique à l’utilisateur avec les sauvegardes incrémentielles. #65481 (Antonio Andelic).
- Désactive l’optimisation
non-intersecting-partspour les requêtes avecFINALlorsque l’optimisationread-in-orderest activée. Cela pouvait entraîner des résultats de requête incorrects. Comme solution de contournement, désactivezdo_not_merge_across_partitions_select_finaletsplit_parts_ranges_into_intersecting_and_non_intersecting_finalavant l’intégration de ce correctif. #65505 (Nikolai Kochetov). - Correction de l’exception
Index out of bound for blob metadatalorsque tous les fichiers du batch de liste avaient été filtrés. #65523 (Kseniia Sumarokova). - Correction de
NOT_FOUND_COLUMN_IN_BLOCKlors de la fusion de déduplication d’une projection. #65573 (Yakov Olkhovskiy). - Correction d’un bug dans MergeJoin. Une colonne dans une sérialisation sparse pouvait être traitée comme une colonne de son type imbriqué alors que la conversion requise n’avait pas été effectuée. #65632 (Nikita Taranov).
- Correction d’un bug où le niveau de compatibilité ‘23.4’ n’était pas correctement appliqué. #65737 (cw5121).
- Correction des tables ODBC comportant des champs Nullable. #65738 (Rodolphe Dugé de Bernonville).
- Correction d’une data race dans
TCPHandler, pouvant se produire lors d’une erreur fatale. #65744 (Kseniia Sumarokova). - Correction d’exceptions invalides dans la fonction
parseDateTimeavec les placeholders%Fet%D. #65768 (Antonio Andelic). - Pour les requêtes qui lisent depuis
PostgreSQL, annulation de la requête internePostgreSQLune fois la requête ClickHouse terminée. Sinon, la requêteClickHousene peut pas être annulée tant que la requête internePostgreSQLn’est pas terminée. #65771 (Maksim Kita). - Correction d’un bug dans la logique de court-circuit lorsque l’ancien analyzer et dictGetOrDefault sont utilisés. #65802 (jsc0218).
- Correction d’un bug qui pouvait amener EmbeddedRocksDB avec écriture TTL à corrompre des fichiers SST. #65816 (Duc Canh Le).
- Les fonctions
bitTest,bitTestAlletbitTestAnyrenvoient désormais une erreur si l’index de bit spécifié est hors limites. #65818 (Pablo Marcos). - Le paramètre
join_any_take_last_rowest pris en charge dans toute requête avec hash join. #65820 (vdimir). - Meilleure gestion des conditions de join impliquant des vérifications
IS NULL(par exemple,ON (a = b AND (a IS NOT NULL) AND (b IS NOT NULL) ) OR ( (a IS NULL) AND (b IS NULL) )est réécrit enON a <=> b), avec correction d’une optimisation incorrecte lorsque des conditions autres queIS NULLsont présentes. #65835 (vdimir). - Correction de l’augmentation de l’utilisation de la mémoire dans S3Queue. #65839 (Kseniia Sumarokova).
- Correction de la gestion des ex æquo dans
arrayAUCpour correspondre à sklearn. #65840 (gabrielmcg44). - Correction de problèmes potentiels avec les connexions TLS du protocole du serveur MySQL. #65917 (Azat Khuzhin).
- Corrige d’éventuels problèmes liés aux connexions TLS du protocole client MySQL. #65938 (Azat Khuzhin).
- Corrige la gestion de
SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITEavec un timeout nul. #65941 (Azat Khuzhin). - Ajoute au cache d’inférence de schéma les paramètres manquants
input_format_csv_skip_first_lines/input_format_tsv_skip_first_lines/input_format_csv_try_infer_numbers_from_strings/input_format_csv_try_infer_strings_from_quoted_tuples, car ils peuvent modifier le schéma obtenu. Cela évite des résultats d’inférence de schéma incorrects lorsque ces paramètres sont modifiés. #65980 (Kruglov Pavel). - La colonne _size dans le moteur S3 et la fonction de table S3 indique la taille d’un fichier à l’intérieur de l’archive, et non celle de l’archive elle-même. #65993 (Daniil Ivanik).
- Corrige la résolution des sous-colonnes dynamiques dans l’analyzer et évite de lire la colonne entière lors de la lecture d’une sous-colonne dynamique. #66004 (Kruglov Pavel).
- Corrige la fusion de config pour from_env avec des overrides replace. #66034 (Azat Khuzhin).
- Corrige un possible blocage de
GRPCServerlors de l’arrêt. #66061 (Vitaly Baranov). - Corrige plusieurs cas dans la fonction
hasavec des argumentsLowCardinalitynon constants. #66088 (Anton Popov). - Corrige
groupArrayIntersect. Le comportement était incorrect dans la fonctionmerge(). De plus, le comportement dedeserialise()a été corrigé pour les données numériques et générales. #66103 (Yarik Briukhovetskyi). - Corrige un bug de dépassement de tampon dans l’implémentation de
unbin/unhex. #66106 (Nikita Taranov). - Désactive l’optimisation
merge-filtersintroduite dans #64760. Elle peut provoquer une exception si l’optimisation fusionne deux expressions de filtre sans appliquer d’évaluation en court-circuit. #66126 (Nikolai Kochetov). - Corrige le problème où le serveur ne parvenait pas à analyser des fichiers Avro encodés avec des arrays de taille de block négative, ce qui est désormais autorisé par la spécification Avro. #66130 (Serge Klochkov).
- Corrige un bug dans le client ZooKeeper : une session pouvait rester bloquée dans un état inutilisable après avoir reçu une erreur matérielle de ZooKeeper. Par exemple, cela pouvait se produire à cause de la « soft memory limit » dans ClickHouse Keeper. #66140 (Alexander Tokmakov).
- Corrige un problème dans SumIfToCountIfVisitor avec les entiers signés. #66146 (Raúl Marín).
- Corrige un cas rare de valeur manquante dans le résultat d’une requête distribuée. #66174 (vdimir).
- Corrige l’ordre d’analyse des champs de métadonnées dans StorageDeltaLake. #66211 (Kseniia Sumarokova).
- Ne plus générer
TIMEOUT_EXCEEDEDpour le modenone_only_activededistributed_ddl_output_mode. #66218 (Alexander Tokmakov). - Corriger la gestion de la limite pour
system.numbers_mtlorsqu’aucun index ne peut être utilisé. #66231 (János Benjamin Antal). - Correction de la détection par le serveur ClickHouse du nombre maximal de cœurs CPU utilisables tel que défini par cgroups v2 lorsque le serveur s’exécute dans un conteneur comme Docker. Plus précisément, les conteneurs exécutent souvent leur processus dans le cgroup racine, qui a un nom vide. Dans ce cas, ClickHouse ignorait les limites CPU définies par cgroups v2. #66237 (filimonov).
- Corriger l’erreur
Not-ready setlorsqu’une sous-requête avecINest utilisée dans la contrainte. #66261 (Nikolai Kochetov). - Corriger le signalement des erreurs lors de la copie vers S3 ou AzureBlobStorage. #66295 (Vitaly Baranov).
- Empêcher le watchdog de conserver les descripteurs de fichiers journaux supprimés du répertoire (après rotation). #66334 (Aleksei Filatov).
- Corriger le bogue où logicalexpressionoptimizerpass perdait le type logique d’une constante. #66344 (pn).
- Corriger l’erreur
Column identifier is already registeredavecgroup_by_use_nulls=trueet le nouvel analyseur. #66400 (Nikolai Kochetov). - Corriger un résultat potentiellement incorrect pour les requêtes faisant des jointures et appliquant un filtre sur une table avec moteur externe (comme PostgreSQL), en raison d’un pushdown de filtre trop agressif. Désormais, les conditions de la clause
WHEREne seront pas envoyées à la base de données externe dans le cas d’une jointure externe avec une table externe. #66402 (vdimir). - Ajout de la matérialisation de colonne manquante pour la jointure croisée. #66413 (lgbo).
- Corriger l’erreur
Cannot find columnpour les requêtes avec une expression constante dans la cléGROUP BYet le nouvel analyseur activé. #66433 (Nikolai Kochetov). - Éviter une possible erreur logique lors de l’import au format Npy en cas de niveau d’imbrication de tableau incorrect, et corriger les tests d’autres types d’erreurs. #66461 (Yarik Briukhovetskyi).
- Corriger un résultat erroné de count() lorsqu’une fonction non déterministe est utilisée dans le prédicat. #66510 (Duc Canh Le).
- Suivre correctement l’utilisation mémoire pour
Allocator::realloc. #66548 (Antonio Andelic). - Corriger la lecture de mémoire non initialisée lors du hachage de tuples vides. #66562 (Alexey Milovidov).
- Corriger un résultat invalide pour les requêtes avec
WINDOW. Cela pouvait se produire lorsque les colonnesPARTITIONutilisaient une sérialisation sparse et que les fonctions de fenêtre étaient exécutées en parallèle. #66579 (Nikolai Kochetov). - Correction de la suppression des collections nommées dans le stockage local. #66599 (János Benjamin Antal).
- Correction du fait que
column_lengthn’est pas mis à jour dansColumnTuple::insertManyFrom. #66626 (lgbo). - Correction des erreurs
Unknown identifieretColumn is not under aggregate functionpour les requêtes avec l’expression(column IS NULL).Le bug a été déclenché par #65088, uniquement avec l’analyseur désactivé. #66654 (Nikolai Kochetov). - Correction de l’erreur
Method getResultType is not supported for QUERY query nodelorsqu’une sous-requête scalaire était utilisée comme premier argument de IN (avec le nouvel analyseur). #66655 (Nikolai Kochetov). - Correction d’une possible erreur PARAMETER_OUT_OF_BOUND lors de la lecture d’une sous-colonne de Variant. #66659 (Kruglov Pavel).
- Correction d’un cas rare de fusion bloquée après la suppression d’une colonne. #66707 (Raúl Marín).
- Correction de l’assertion
isUniqTypeslors d’un insert select depuis des sources distantes. #66722 (Sema Checherinda). - Correction d’une erreur logique dans PrometheusRequestHandler. #66621 (Vitaly Baranov).
- Correction d’un cas lié à la fonction
indexHintdécouvert par le fuzzer. #66286 (Anton Popov). - Correction du formatage de l’AST de ‘create table b empty as a’. #64951 (Michael Kolupaev).
Version 24.6 de ClickHouse, 2024-07-01. Présentation, Vidéo
changement non rétrocompatible
- Active le chargement asynchrone des bases de données et des tables par défaut. Voir
async_load_databasesdans config.xml. Bien que ce changement soit entièrement compatible, il peut introduire une différence de comportement. Lorsqueasync_load_databasesvaut false, comme dans les versions précédentes, le serveur n’accepte pas de connexions tant que toutes les tables ne sont pas chargées. Lorsqueasync_load_databasesvaut true, comme dans la nouvelle version, le serveur peut accepter des connexions avant que toutes les tables ne soient chargées. Si une requête est effectuée sur une table qui n’est pas encore chargée, elle attendra le chargement de la table, ce qui peut prendre beaucoup de temps. Cela peut modifier le comportement du serveur s’il fait partie d’un grand système distribué derrière un load balancer. Dans le premier cas, le load balancer peut recevoir un refus de connexion et basculer rapidement vers un autre serveur. Dans le second cas, le load balancer peut se connecter à un serveur qui charge encore les tables, et la requête aura une latence plus élevée. De plus, si de nombreuses requêtes s’accumulent en attente, cela peut entraîner un problème de « thundering herd » lorsqu’elles commencent à être traitées simultanément. Cela ne peut faire une différence que pour des backends distribués fortement chargés. Vous pouvez définir la valeur deasync_load_databasessur false pour éviter ce problème. #57695 (Alexey Milovidov). - Le paramètre
replace_long_file_name_to_hashest activé par défaut pour les tablesMergeTree. #64457 (Anton Popov). Ce paramètre est entièrement compatible, et aucune action n’est nécessaire lors de la mise à niveau. Le nouveau format de données est pris en charge par toutes les versions à partir de 23.9. Après avoir activé ce paramètre, vous ne pouvez plus revenir à une version 23.8 ou antérieure. - Certaines requêtes invalides échoueront plus tôt lors de l’analyse syntaxique. Remarque : la prise en charge des expressions KQL inline (le langage Kusto expérimental) a été désactivée lorsqu’elles sont placées dans une table function
kqlsans littéral de chaîne, par exemplekql(garbage | trash)au lieu dekql('garbage | trash')oukql($$garbage | trash$$). Cette fonctionnalité a été introduite involontairement et ne devrait pas exister. #61500 (Alexey Milovidov). - Refonte du traitement parallèle en mode
Ordereddu stockageS3Queue. Cette PR est incompatible avec les versions précédentes pour le mode Ordered si vous utilisiez les paramètress3queue_processing_threads_numous3queue_total_shards_num. Le paramètres3queue_total_shards_numest supprimé ; auparavant, son utilisation n’était autorisée qu’avecs3queue_allow_experimental_sharded_mode, qui est maintenant obsolète. Un nouveau paramètre a été ajouté :s3queue_buckets. #64349 (Kseniia Sumarokova). - De nouvelles fonctions
snowflakeIDToDateTime,snowflakeIDToDateTime64,dateTimeToSnowflakeIDetdateTime64ToSnowflakeIDont été ajoutées. Contrairement aux fonctions existantessnowflakeToDateTime,snowflakeToDateTime64,dateTimeToSnowflakeetdateTime64ToSnowflake, les nouvelles fonctions sont compatibles avec la fonctiongenerateSnowflakeID, c’est-à-dire qu’elles acceptent les Snowflake IDs générés pargenerateSnowflakeIDet produisent des Snowflake IDs du même type quegenerateSnowflakeID(c.-à-d.UInt64). En outre, les nouvelles fonctions utilisent par défaut l’époque UNIX (c.-à-d. 1970-01-01), tout commegenerateSnowflakeID. Si nécessaire, une époque différente, par exemple l’époque de Twitter/X du 2010-11-04, c.-à-d. 1288834974657 ms depuis l’époque UNIX, peut être transmise. Les anciennes fonctions de conversion sont obsolètes et seront supprimées après une période de transition : pour continuer à les utiliser malgré tout, activez le paramètreallow_deprecated_snowflake_conversion_functions. #64948 (Robert Schulze).
Nouvelle fonctionnalité
- Permet de stocker des collections nommées dans ClickHouse Keeper. #64574 (Kseniia Sumarokova).
- Prise en charge des tuples vides. #55061 (Amos Bird).
- Ajout de fonctions d’encodage et de décodage de la courbe de Hilbert. #60156 (Artem Mustafin).
- Ajout de la prise en charge de l’analyse d’index pour
hilbertEncode. #64662 (Artem Mustafin). - Ajout de la prise en charge de la lecture de la géométrie
LINESTRINGau format WKT à l’aide de la fonctionreadWKTLineString. #62519 (Nikita Mikhaylov). - Permet d’attacher des parts depuis un autre disk. #63087 (Unalian).
- Ajout de nouvelles fonctions SQL
generateSnowflakeIDpour générer des Snowflake IDs au format Twitter. #63577 (Danila Puzov). - Ajout des paramètres
merge_workloadetmutation_workloadpour réguler l’utilisation et le partage des ressources entre les merges, les mutations et les autres workloads. #64061 (Sergei Trifonov). - Ajout de la prise en charge de la comparaison des types
IPv4etIPv6avec l’opérateur=. #64292 (Francisco J. Jurado Moreno). - Prise en charge des arguments Decimal dans les fonctions mathématiques binaires (pow, atan2, max2, min2, hypot). #64582 (Mikhail Gorshkov).
- Ajout des fonctions SQL
parseReadableSize(ainsi que des variantesOrNulletOrZero). #64742 (Francisco J. Jurado Moreno). - Ajout des paramètres serveur
max_table_num_to_throwetmax_database_num_to_throwpour limiter le nombre de bases de données ou de tables dans les requêtesCREATE. #64781 (Xu Jia). - Ajout de la colonne virtuelle
_timeaux storages de type fichier (s3/file/hdfs/url/azureBlobStorage). #64947 (Ilya Golshtein). - Introduction des nouvelles fonctions
base64URLEncode,base64URLDecodeettryBase64URLDecode. #64991 (Mikhail Gorshkov). - Ajout de la nouvelle fonction
editDistanceUTF8, qui calcule la distance d’édition entre deux chaînes UTF8. #65269 (LiuNeng). - Ajout de la configuration
http_response_headerspour prendre en charge des en-têtes de réponse personnalisés dans des handlers HTTP personnalisés. #63562 (Grigorii). - Ajout d’une nouvelle table function
looppour renvoyer les résultats d’une requête en boucle infinie. #63452 (Sariel). Utile pour les tests. - Ajout de deux colonnes supplémentaires dans
system.query_log:used_privilegesetmissing_privileges.used_privilegesest renseignée avec les privilèges vérifiés lors de l’exécution de la requête, etmissing_privilegescontient les privilèges requis qui sont absents. #64597 (Alexey Katsman). - Ajout d’un paramètre
output_format_pretty_display_footer_column_namesqui, lorsqu’il est activé, affiche les noms de colonnes en bas du tableau pour les tableaux longs (50 lignes par défaut) ; la valeur seuil du nombre minimum de lignes est contrôlée paroutput_format_pretty_display_footer_column_names_min_rows. #65144 (Shaun Struwig).
Fonctionnalité expérimentale
- Ajout de statistiques de type « nombre de valeurs distinctes ». #59357 (Han Fei).
- Prise en charge des statistiques pour ReplicatedMergeTree. #64934 (Han Fei).
- Si un « groupe de répliques » est configuré pour une base de données
Replicated, création automatique d’un cluster incluant les répliques de tous les groupes. #64312 (Alexander Tokmakov). - Ajout des paramètres
parallel_replicas_custom_key_range_loweretparallel_replicas_custom_key_range_upperpour contrôler la façon dont les répliques parallèles avec des shards dynamiques parallélisent les requêtes lors de l’utilisation d’un filtre par plage. #64604 (josh-hildred).
Amélioration des performances
- Ajout de la possibilité de réorganiser les lignes lors d’un
insertafin d’optimiser la taille sans enfreindre l’ordre défini parPRIMARY KEY. Cette fonctionnalité est contrôlée par le paramètreoptimize_row_order(désactivé par défaut). #63578 (Igor Markelov). - Ajout d’un Parquet reader natif, capable de lire directement un binaire Parquet dans des colonnes ClickHouse. Cette fonctionnalité est contrôlée par le paramètre
input_format_parquet_use_native_reader(désactivé par défaut). #60361 (ZhiHong Zhang). - Prise en charge de l’optimisation partielle du comptage trivial lorsque le filtre de la query peut sélectionner des plages exactes dans des tables MergeTree. #60463 (Amos Bird).
- Réduction de l’utilisation mémoire maximale des
INSERTmultithread grâce au regroupement des chunks de plusieurs threads dans une seule transformation. #61047 (Yarik Briukhovetskyi). - Réduction de l’utilisation mémoire avec le stockage objet Azure grâce à une allocation mémoire fixe, évitant l’allocation d’un buffer supplémentaire. #63160 (SmitaRKulkarni).
- Réduction du nombre d’appels à des fonctions virtuelles dans
ColumnNullable::size. #60556 (HappenLee). - Accélération de
splitByRegexplorsque l’argument de regular expression est un seul caractère. #62696 (Robert Schulze). - Accélération de l’aggregation avec des clés de 8 et 16 bits grâce au suivi des clés minimales et maximales utilisées. Cela permet de réduire le nombre de cellules à vérifier. #62746 (Jiebin Sun).
- Optimisation de l’opérateur IN lorsque la partie gauche est
LowCardinalityet la partie droite un ensemble de constantes. #64060 (Zhiguo Zhou). - Utilisation d’un thread pool pour initialiser et détruire les hash tables dans
ConcurrentHashJoin. #64241 (Nikita Taranov). - Optimisation des vertical merges dans les tables avec des colonnes sparse. #64311 (Anton Popov).
- Activation des prefetches de données depuis un remote filesystem pendant les vertical merges. Cela améliore la latence des vertical merges dans les tables dont les données sont stockées sur un remote filesystem. #64314 (Anton Popov).
- Réduction des appels redondants à
isDefaultdansColumnSparse::filterafin d’améliorer les performances. #64426 (Jiebin Sun). - Accélération des commandes keeper-client
find_super_nodesetfind_big_familyen effectuant plusieurs requêtesgetChildrenasynchrones. #64628 (Alexander Gololobov). - Amélioration de la fonction
least/greatestpour les arguments numériques de type Nullable. #64668 (KevinyhZou). - Possibilité de fusionner deux étapes de filtrage consécutives d’un query plan. Cela améliore l’optimisation du push-down des filtres si la filter condition peut être poussée vers le bas depuis l’étape parente. #64760 (Nikolai Kochetov).
- Supprime une optimisation défaillante dans l’implémentation verticale de FINAL et réactive par défaut l’algorithme vertical de FINAL. #64783 (Duc Canh Le).
- Supprime les nœuds ALIAS de l’expression de filtrage. Cela améliore légèrement les performances des requêtes avec
PREWHERE(avec le nouvel analyseur). #64793 (Nikolai Kochetov). - Réactive la mise en cache des sessions OpenSSL. #65111 (Robert Schulze).
- Ajoute des paramètres pour désactiver la matérialisation des skip indexes et des statistiques lors des insertions (
materialize_skip_indexes_on_insertetmaterialize_statistics_on_insert). #64391 (Anton Popov). - Utilise la taille de la mémoire allouée pour calculer la taille du row group et réduire le pic de mémoire du writer Parquet en mode monothread. #64424 (LiuNeng).
- Améliore l’itérateur de la colonne creuse afin de réduire les appels à
size. #64497 (Jiebin Sun). - Met à jour la condition pour utiliser une copie côté serveur pour les sauvegardes vers Azure blob storage. #64518 (SmitaRKulkarni).
- Optimise l’utilisation de la mémoire des fusions verticales pour les tables comportant un grand nombre de skip indexes. #64580 (Anton Popov).
Amélioration
SHOW CREATE TABLEexécuté sur des tables système affichera désormais le commentaire très utile, propre à chaque table, qui explique pourquoi cette table est nécessaire. #63788 (Nikita Mikhaylov).- Le deuxième argument (
scale) des fonctionsround(),roundBankers(),floor(),ceil()ettrunc()peut désormais être non constant. #64798 (Mikhail Gorshkov). - Rechargement à chaud de la storage policy pour les tables
Distributedlors de l’ajout d’un nouveau disk. #58285 (Duc Canh Le). - Évite un interblocage potentiel lors de l’analyse d’index de MergeTree pendant l’ordonnancement des threads dans un service saturé. #59427 (Sean Haynes).
- Plusieurs corrections mineures de cas limites pour la prise en charge du proxy S3 et du tunneling. #63427 (Arthur Passos).
- Améliore la visibilité des resoumissions de io_uring. Renomme l’événement de profile
IOUringSQEsResubmits->IOUringSQEsResubmitsAsyncet ajoute un nouvel événement,IOUringSQEsResubmitsSync. #63699 (Tomer Shafir). - Ajout d’un nouveau paramètre,
metadata_keep_free_space_bytes, pour conserver de l’espace libre sur le disk de metadata storage. #64128 (MikhailBurdukov). - Ajoute des metrics pour suivre le nombre de répertoires créés et supprimés par le metadata storage
plain_rewritable, ainsi que le nombre d’entries dans l’in-memory map local-vers-distant. #64175 (Julia Kartseva). - Le query cache considère désormais des queries identiques avec des settings différents comme étant différentes. Cela améliore la robustesse lorsque différents settings (par ex.
limitouadditional_table_filters) peuvent affecter le résultat de la query. #64205 (Robert Schulze). - Prend en charge le code d’error non standard
QpsLimitExceededdans l’object storage comme error réessayable. #64225 (Sema Checherinda). - Interdit de convertir une table MergeTree en table répliquée si le chemin ZooKeeper de cette table existe déjà. #64244 (Kirill).
- Ajout d’un nouveau paramètre
input_format_parquet_prefer_block_bytespour contrôler la taille moyenne en octets du block de sortie, et modification de la default value deinput_format_parquet_max_block_sizeà 65409. #64427 (LiuNeng). - Permet de contourner le proxy pour les hosts spécifiés dans la variable d’environnement
no_proxyet dans la configuration du proxy ClickHouse. #63314 (Arthur Passos). - Démarre toujours Keeper avec un nombre suffisant de threads dans le pool global de threads. #64444 (Duc Canh Le).
- Les settings de la config de l’utilisateur n’affectent pas les merges ni les mutations pour
MergeTreesur object storage. #64456 (alesapin). - Prend en charge le code d’erreur non standard
TotalQpsLimitExceededdans le stockage objet en tant qu’erreur pouvant faire l’objet d’une nouvelle tentative. #64520 (Sema Checherinda). - Mise à jour de l’Advanced Dashboard pour les versions open-source et ClickHouse Cloud afin d’inclure un graphique pour ‘Connexions réseau simultanées maximales’. #64610 (Thom O’Connor).
- Améliore le rapport de progression pour
zeros_mtetgenerateRandom. #64804 (Raúl Marín). - Ajoute une métrique asynchrone
jemalloc.profile.activepour indiquer si l’échantillonnage est actuellement actif. Il s’agit d’un mécanisme d’activation en plus deprof.active; les deux doivent être actifs pour que le thread appelant effectue l’échantillonnage. #64842 (Unalian). - Supprime l’indication « important » de
allow_experimental_join_condition. Ce marquage a pu empêcher l’exécution correcte de requêtes distribuées dans un cluster avec des versions mixtes. #65008 (Nikita Mikhaylov). - Ajout des métriques asynchrones du serveur
DiskGetObjectThrottler*etDiskGetObjectThrottler*, qui reflètent la limite de débit en requêtes par seconde définie par les paramètres de disques3_max_get_rpsets3_max_put_rps, ainsi que le nombre de requêtes actuellement disponibles pouvant être envoyées sans atteindre la limite de throttling du disque. Les métriques sont définies pour chaque disque ayant une limite configurée. #65050 (Sergei Trifonov). - Initialise le collecteur global de traces pour
Poco::ThreadPool(nécessaire pour Keeper, etc.). #65239 (Kseniia Sumarokova). - Ajoute une validation lors de la création d’un utilisateur avec
bcrypt_hash. #65242 (Raúl Marín). - Ajoute des événements de profil pour le nombre de lignes lues pendant/après
PREWHERE. #64198 (Nikita Taranov). - Affiche la requête dans
EXPLAIN PLANavec des répliques parallèles. #64298 (vdimir). - Renomme
allow_deprecated_functionsenallow_deprecated_error_prone_window_functions. #64358 (Raúl Marín). - Respecte également le paramètre
max_read_buffer_sizepour les descripteurs de fichier dans la fonction de tablefile. #64532 (Azat Khuzhin). - Désactive les transactions pour les moteurs de stockage non pris en charge, y compris pour les vues matérialisées. #64918 (alesapin).
- Interdit la clause
QUALIFYdans l’ancien analyseur. L’ancien analyseur ignoraitQUALIFY, ce qui pouvait entraîner une suppression inattendue de données dans les mutations. #65356 (Dmitry Novik).
correction de bug (dysfonctionnement visible par l’utilisateur dans une version stable officielle)
- Un bug dans la bibliothèque Apache ORC a été corrigé : le calcul des statistiques ORC à l’écriture a été corrigé pour les types non signés sur toutes les plateformes, ainsi que pour Int8 sur ARM. #64563 (Michael Kolupaev).
- Le comportement de ClickHouse concernant l’interprétation des Tuples au format CSV a été rétabli. Ce changement annule effectivement https://github.com/ClickHouse/ClickHouse/pull/60994 et ne le rend disponible qu’au travers de quelques paramètres :
output_format_csv_serialize_tuple_into_separate_columns,input_format_csv_deserialize_separate_columns_into_tupleetinput_format_csv_try_infer_strings_from_quoted_tuples. #65170 (Nikita Mikhaylov). - Correction d’une erreur d’autorisation permettant, dans une situation particulière, à un utilisateur d’élever ses privilèges sur la base de données default sans les grants nécessaires. #64769 (pufit).
- Correction d’un crash avec UniqInjectiveFunctionsEliminationPass et uniqCombined. #65188 (Raúl Marín).
- Correction d’un bug dans ClickHouse Keeper provoquant une incohérence de digest lors de la fermeture de session. #65198 (Aleksei Filatov).
- Utilisation du bon alignement mémoire pour le combinator Distinct. Auparavant, un crash pouvait se produire en raison d’une allocation mémoire invalide lors de l’utilisation du combinator. #65379 (Antonio Andelic).
- Correction d’un crash avec
DISTINCTet les window functions. #64767 (Igor Nikonov). - Correction du skip index ‘set’, qui ne fonctionnait pas avec IN et indexHint(). #62083 (Michael Kolupaev).
- Prise en charge de l’exécution d’une fonction lors de l’affectation de la valeur d’une parameterized view. #63502 (SmitaRKulkarni).
- Correction du suivi mémoire de Parquet. #63584 (Michael Kolupaev).
- Correction de la lecture de colonnes de type
Tuple(Map(LowCardinality(String), String), ...). #63956 (Anton Popov). - Correction de l’erreur
Cyclic aliasespour des alias cycliques de types différents (expression et fonction). #63993 (Nikolai Kochetov). - Cette correction utilisera un contexte redéfini approprié avec le bon définisseur pour chaque vue individuelle du query pipeline. #64079 (pufit).
- Correction dans l’analyzer : l’erreur “Not found column” est corrigée lors de l’utilisation d’INTERPOLATE. #64096 (Yakov Olkhovskiy).
- Correction de la création de backups vers des S3 buckets avec des credentials différents de ceux du disk contenant le fichier. #64153 (Antonio Andelic).
- Le query cache considère désormais deux requêtes identiques exécutées sur des bases de données différentes comme distinctes. Le comportement précédent pouvait être utilisé pour contourner l’absence de privilèges de lecture sur une table. #64199 (Robert Schulze).
- Corrige un arrêt brutal possible en cas d’exception non interceptée dans
~WriteBufferFromFileDescriptorde StatusFile. #64206 (Kruglov Pavel). - Corrige l’erreur
duplicate aliaspour les requêtes distribuées avecARRAY JOIN. #64226 (Nikolai Kochetov). - Corrige un
accurateCastinattendu d’une chaîne en entier. #64255 (wudidapaopao). - Corrige la simplification en CNF lorsqu’un groupe
ORcontient des atomes mutuellement exclusifs. #64256 (Eduard Karacharov). - Corrige la validation de la taille du Query Tree. #64377 (Dmitry Novik).
- Corrige l’erreur
Logical error: Bad castpour la tableBufferavecPREWHERE. #64388 (Nikolai Kochetov). - Empêche la journalisation récursive dans
blob_storage_loglorsqu’il est stocké sur le stockage objet. #64393 (vdimir). - Corrige les requêtes
CREATE TABLE ASpour les tables avec des expressions par défaut. #64455 (Anton Popov). - Corrige le comportement de
optimize_read_in_orderpour ORDER BY … NULLS FIRST / LAST sur les tables avec des clés Nullable. #64483 (Eduard Karacharov). - Corrige les erreurs
Expression nodes list expected 1 projection namesetUnknown expression or identifierpour les requêtes avec des alias versGLOBAL IN.. #64517 (Nikolai Kochetov). - Corrige l’erreur
Cannot find columndans les requêtes distribuées avec une CTE constante dans la cléGROUP BY. #64519 (Nikolai Kochetov). - Corrige la boucle de plantage lorsque la restauration depuis une sauvegarde est bloquée par la création d’une MV avec un
definerqui n’a pas encore été restauré. #64595 (pufit). - Corrige la sortie de la fonction
formatDateTimeInJodaSyntaxlorsqu’un spécificateur de format génère un nombre impair de caractères et que le dernier caractère est0. Par exemple,SELECT formatDateTimeInJodaSyntax(toDate('2012-05-29'), 'D')renvoie désormais correctement150au lieu de15auparavant. #64614 (LiuNeng). - N’effectue pas de réécriture de l’agrégation si le combinateur
-Ifest déjà utilisé. #64638 (Dmitry Novik). - Corrige l’inférence de type pour les nombres à virgule flottante (dans le cas d’un petit buffer, c.-à-d.
--max_read_buffer_size 1). #64641 (Azat Khuzhin). - Corrige un bug qui pouvait rendre les TTL inopérants avec des expressions. #64694 (alesapin).
- Corrige la suppression des expressions
WHEREetPREWHEREtoujours vraies (pour le nouvel analyseur). #64695 (Nikolai Kochetov). - Correction de l’élimination excessive de parties par les index de texte basés sur des tokens (
ngrambf,full_text) lors du filtrage sur le résultat destartsWith,endsWith,match,multiSearchAny. #64720 (Eduard Karacharov). - Corrige le comportement incorrect de l’échappement ANSI CSI dans la fonction
UTF8::computeWidth. #64756 (Shaun Struwig). - Corrige un cas de suppression incorrecte de
ORDER BY/LIMIT BYau travers de sous-requêtes. #64766 (Raúl Marín). - Corrige les jointures d’inégalité (expérimentales) avec des sous-requêtes pour des ensembles présents dans des conditions de jointure mixtes. #64775 (lgbo).
- Corrige un crash dans un cache local sur le disque
plain_rewritable. #64778 (Julia Kartseva). - Correction dans Keeper : renvoie la valeur correcte pour
zk_latest_snapshot_sizedans la commandemntr. #64784 (Antonio Andelic). - Corrige l’erreur
Cannot find columndans une requête distribuée avecARRAY JOINsur une colonneNested. Corrige #64755. #64801 (Nikolai Kochetov). - Corrige une fuite mémoire dans la politique de cache slru. #64803 (Kseniia Sumarokova).
- Correction d’un possible suivi mémoire incorrect dans plusieurs types de requêtes : requêtes lisant des données depuis S3, requêtes via le protocole HTTP, insertions asynchrones. #64844 (Anton Popov).
- Corrige l’erreur
Block structure mismatchpour les requêtes lisant avecPREWHEREdepuis une vue matérialisée lorsque celle-ci possède des colonnes de types différents de la table source. Corrige #64611. #64855 (Nikolai Kochetov). - Corrige un crash rare lorsqu’une table a un TTL avec sous-requête + base de données replicated + répliques parallèles + analyseur. C’est vraiment rare, mais n’utilisez pas de TTL avec des sous-requêtes. #64858 (alesapin).
- Corrige la duplication des événements
Deletedansblob_storage_logdans le cas d’un lot volumineux à supprimer. #64924 (vdimir). - Correction de l’erreur
Session moved to another serverde [Zoo]Keeper, qui pouvait se produire après le démarrage du serveur lorsque la configuration inclut des éléments provenant de [Zoo]Keeper. #64986 (Alexander Tokmakov). - Corrige la requête
ALTER MODIFY COMMENTqui ne fonctionnait plus pour les VIEW paramétrées dans https://github.com/ClickHouse/ClickHouse/pull/54211. #65031 (Nikolay Degterinsky). - Corrige
host_iddans DatabaseReplicated lorsque le paramètrecluster_secure_connectionest activé. Auparavant, toutes les connexions au sein du cluster créées par DatabaseReplicated n’étaient pas sécurisées, même si ce paramètre était activé. #65054 (Nikolay Degterinsky). - Correction de l’erreur
Not-ready Setaprès l’optimisationPREWHEREpour StorageMerge. #65057 (Nikolai Kochetov). - Évite l’écriture dans un buffer finalisé pour les storages de type File. #65063 (Kruglov Pavel).
- Correction d’une durée de requête potentiellement infinie en cas d’alias cycliques. Corrige #64849. #65081 (Nikolai Kochetov).
- Correction de l’erreur
Unknown expression identifierpour les requêtes distantes avecINTERPOLATE (alias)(nouvel analyseur). Corrige #64636. #65090 (Nikolai Kochetov). - Correction du déplacement des opérations arithmétiques hors de l’agrégation. Dans le nouvel analyseur, l’optimisation n’était appliquée qu’une seule fois. #65104 (Dmitry Novik).
- Correction de la réécriture des noms des fonctions d’agrégation dans le nouvel analyseur. #65110 (Dmitry Novik).
- Renvoie un code 5xx au lieu de 200 OK en cas de timeout de réception lors de la lecture du corps de la requête (ou d’une partie de celui-ci) depuis le socket client. #65118 (Julian Maicher).
- Correction d’un crash possible pour les requêtes hedged. #65206 (Azat Khuzhin).
- Correction d’un bug dans l’évaluation en court-circuit des dictionnaires Hashed et Hashed_Array, qui pouvait lire un nombre non initialisé et entraîner diverses erreurs. #65256 (jsc0218).
- Cette PR garantit que le type de la constante (deuxième paramètre de l’opérateur IN) reste toujours visible pendant le processus de conversion de type de l’opérateur IN. Sinon, la perte d’informations de type peut faire échouer certaines conversions, comme celle de DateTime vers Date. Cela corrige #64487. #65315 (pn).
amélioration de la compilation, des tests et du packaging
- Ajout de la prise en charge de LLVM XRay. #64592 #64837 (Tomer Shafir).
- Regroupement des implémentations de stockage s3/hdfs/azure en une seule classe fonctionnant avec IObjectStorage. Même chose pour *Cluster, les data lakes et les stockages Queue. #59767 (Kseniia Sumarokova).
- Refactorisation du writer de data part pour supprimer les dépendances à MergeTreeData et DataPart. #63620 (Alexander Gololobov).
- Refactorisation de
KeyConditionet de l’analyse de clé afin d’améliorer PartitionPruner et l’optimisation triviale de comptage. Ceci est distinct de #60463. #61459 (Amos Bird). - Ajout d’assertions pour vérifier que toutes les fonctions sont appelées avec des colonnes de la bonne taille. #63723 (Raúl Marín).
- Le service
networkdevient obligatoire lors de l’utilisation du script d’initialisationrcpour démarrer le démon du serveur ClickHouse. #60650 (Chun-Sheng, Li). - Réduction de la taille de certains tests lents. #64387 #64452 (Raúl Marín).
- Rejeu des logs ZooKeeper à l’aide de keeper-bench. #62481 (Antonio Andelic).
version de ClickHouse 24.5, 2024-05-30. Présentation, Vidéo
Changement non rétrocompatible
- Les « index inversés » ont été renommés en « index plein texte », une appellation moins technique et plus conviviale. Cela modifie également les métadonnées internes des tables et casse les tables contenant des index inversés (expérimentaux) existants. Veillez à supprimer ces index avant la mise à niveau, puis à les recréer après celle-ci. #62884 (Robert Schulze).
- L’utilisation des fonctions
neighbor,runningAccumulate,runningDifferenceStartingWithFirstValueetrunningDifferenceest dépréciée (car sujette aux erreurs). Il convient d’utiliser à la place de véritables fonctions de fenêtre. Pour les réactiver, définissezallow_deprecated_error_prone_window_functions = 1oucompatibility = '24.4', ou une valeur inférieure. #63132 (Nikita Taranov). - Les requêtes sur
system.columnsseront plus rapides lorsqu’il existe un grand nombre de colonnes, mais queSHOW TABLESn’a pas été accordé sur de nombreuses bases de données ou tables. Notez que dans les versions précédentes, si vous accordiezSHOW COLUMNSsur des colonnes individuelles sans accorderSHOW TABLESsur les tables correspondantes, la tablesystem.columnsaffichait ces colonnes, mais dans la nouvelle version, elle ignorera entièrement la table. Suppression des messages du journal de trace « Access granted » et « Access denied », qui ralentissaient les requêtes. #63439 (Alexey Milovidov).
Nouvelle fonctionnalité
- Ajoute le format
Formpour lire/écrire un seul enregistrement au formatapplication/x-www-form-urlencoded. #60199 (Shaun Struwig). - Ajout de la possibilité d’utiliser la compression dans CROSS JOIN. #60459 (p1rattttt).
- Ajout de la possibilité d’effectuer un
CROSS JOINdans des fichiers temporaires si la taille dépasse les limites. #63432 (p1rattttt). - Prise en charge des
joinavec des conditions d’inégalité impliquant des colonnes de la table de gauche comme de la table de droite, par exemplet1.y < t2.y. Pour l’activer, utilisezSET allow_experimental_join_condition = 1. #60920 (lgbo). - Les maps peuvent désormais avoir
Float32,Float64,Array(T),Map(K, V)etTuple(T1, T2, ...)comme clés. Corrige #54537. #59318 (李扬). - Introduction du chargement en masse dans
EmbeddedRocksDBpar création et ingestion de fichiers SST, au lieu de s’appuyer sur la memtable intégrée de RocksDB. Cela permet d’accélérer l’importation, en particulier pour les requêtes d’insertion de longue durée dans les tables StorageEmbeddedRocksDB. Ajout également de table settings pourEmbeddedRocksDB. #59163 #63324 (Duc Canh Le). - L’utilisateur peut désormais analyser les fins de ligne CRLF avec le format TSV à l’aide du paramètre
input_format_tsv_crlf_end_of_line. Corrige #56257. #59747 (Shaun Struwig). - Nouveau paramètre
input_format_force_null_for_omitted_fieldsqui force des valeurs NULL pour les champs omis. #60887 (Constantine Peresypkin). - Auparavant, notre stockage S3 et la fonction de table s3 ne prenaient pas en charge la sélection à partir de fichiers d’archive, tels que des tarballs, des fichiers zip ou 7z. Ils permettent désormais d’itérer sur les fichiers contenus dans des archives sur S3. #62259 (Daniil Ivanik).
- Prise en charge de la fonction conditionnelle
clamp. #62377 (skyoct). - Ajout du format de sortie
NPy. #62430 (豪肥肥). Rawest désormais un synonyme deTSVRaw. #63394 (Unalian).- Ajout d’une nouvelle fonction SQL
generateUUIDv7pour générer des UUID version 7, c’est-à-dire des UUID basés sur un timestamp avec une composante aléatoire. Ajout également d’une nouvelle fonctionUUIDToNumpour extraire les octets d’un UUID, ainsi que d’une nouvelle fonctionUUIDv7ToDateTimepour extraire la composante timestamp d’un UUID version 7. #62852 (Alexey Petrunyaka). - Sous Linux et MacOS, si le programme a stdout redirigé vers un fichier avec une extension de compression, utilisez la méthode de compression correspondante au lieu de n’en utiliser aucune (ce qui le fait se comporter comme
INTO OUTFILE). #63662 (v01dXYZ). - Modifier l’avertissement en cas de nombre élevé de tables attachées afin de distinguer les tables, les vues et les dictionnaires. #64180 (Francisco J. Jurado Moreno).
- Ajouter la prise en charge de la fonction
azureBlobStoragedans ClickHouse server pour utiliser Azure Workload Identity afin de s’authentifier auprès d’Azure Blob Storage. Si le paramètreuse_workload_identityest défini dans la configuration, l’identité de workload est utilisée pour l’authentification. #57881 (Vinay Suryadevara). - Ajouter des informations sur le TTL dans la table
system.parts_columns. #63200 (litlig).
Fonctionnalités expérimentales
- Ajout du type de données
Dynamic, qui permet de stocker des valeurs de n’importe quel type sans toutes les connaître à l’avance. Le typeDynamicest disponible via le paramètreallow_experimental_dynamic_type. Référence : #54864. #63058 (Kruglov Pavel). - Il est désormais possible de créer une base de données
MaterializedMySQLsans connexion à MySQL. #63397 (Kirill). - Marque automatiquement une réplique d’une base de données Replicated comme perdue et lance la récupération si une tâche DDL échoue plus de
max_retries_before_automatic_recoveryfois de suite avec la même erreur (100 par défaut). Corrige également un bug pouvant entraîner l’omission d’entrées DDL lorsqu’une exception est levée au début de l’exécution d’une entrée. #63549 (Alexander Tokmakov). - Prend en compte les fichiers en échec dans
s3queue_tracked_file_ttl_secets3queue_traked_files_limitpourStorageS3Queue. #63638 (Kseniia Sumarokova).
Amélioration des performances
- Moins de contention dans le cache du système de fichiers (partie 4). Possibilité de ne pas remplir le cache du système de fichiers jusqu’à sa limite en effectuant une éviction supplémentaire en arrière-plan (contrôlée par
keep_free_space_size(elements)_ratio). Cela permet d’alléger la pression sur la réservation d’espace pour les requêtes (dans la méthodetryReserve). De plus, cela est réalisé autant que possible sans verrouillage et ne devrait, par exemple, pas bloquer l’utilisation normale du cache. #61250 (Kseniia Sumarokova). - Ignorer la fusion des blocs de projection nouvellement créés pendant les
INSERT. #59405 (Nikita Taranov). - Traiter les fonctions sur les chaînes
...UTF8en mode ASCII si les chaînes d’entrée ne contiennent que des caractères ASCII. Inspiré de https://github.com/apache/doris/pull/29799. Accélération globale de 1.07x à 1.62x. À noter que le pic d’utilisation mémoire a diminué dans certains cas. #61632 (李扬). - Amélioration des performances des globs de sélection (
{}) dans StorageS3. #62120 (Andrey Zvonov). - HostResolver contient chaque adresse IP plusieurs fois. Si l’hôte distant possède plusieurs IP et que, pour une raison quelconque (des règles de pare-feu, par exemple), l’accès est autorisé sur certaines IP mais interdit sur d’autres, alors seul le premier enregistrement des IP interdites est marqué comme ayant échoué, et à chaque tentative ces IP peuvent de nouveau être sélectionnées (et échouer à nouveau). Même après ce correctif, le cache DNS est vidé toutes les 120 secondes, et ces IP peuvent donc être sélectionnées à nouveau. #62652 (Anton Ivashkin).
- Ajout d’une nouvelle configuration
prefer_merge_sort_block_bytespour contrôler l’utilisation mémoire et accélérer le tri d’un facteur 2 lors des fusions quand il y a beaucoup de colonnes. #62904 (LiuNeng). clickhouse-localdémarrera plus rapidement. Dans les versions précédentes, il ne supprimait pas les répertoires temporaires, par erreur. Désormais, ce sera le cas. Cela clôt #62941. #63074 (Alexey Milovidov).- Micro-optimisations pour le nouvel analyseur. #63429 (Raúl Marín).
- L’analyse des index fonctionnera si
DateTimeest comparé àDateTime64. Cela clôt #63441. #63443 #63532 (Alexey Milovidov). - Légère accélération des index de type
set(environ 1,5 fois) en supprimant les éléments inutiles. #64098 (Alexey Milovidov). - Suppression de la copie des données lors de l’écriture dans le cache du système de fichiers. #63401 (Kseniia Sumarokova).
- Désormais, les backups avec Azure blob storage utiliseront la copie multiple. #64116 (alesapin).
- Permet d’utiliser la copie native pour Azure même avec des conteneurs différents. #64154 (alesapin).
- Active enfin la copie native pour Azure. #64182 (alesapin).
Amélioration
- Autoriser l’utilisation de
clickhouse-localet de ses raccourcisclickhouseetchavec une requête ou un fichier de requêtes comme argument positionnel. Exemples :ch "SELECT 1",ch --param_test Hello "SELECT {test:String}",ch query.sql. Cela clôt #62361. #63081 (Alexey Milovidov). - Activer les métadonnées plain_rewritable pour les stockages objet locaux et Azure (azure_blob_storage). #63365 (Julia Kartseva).
- Prise en charge des guillemets Unicode de style anglais, par exemple “Hello”, ‘world’. C’est globalement discutable, mais utile lorsque vous saisissez votre requête dans un traitement de texte comme Google Docs. Cela clôt #58634. #63381 (Alexey Milovidov).
- Autoriser les virgules finales dans la liste des colonnes d’une requête INSERT. Par exemple,
INSERT INTO test (a, b, c, ) VALUES .... #63803 (Alexey Milovidov). - Améliorer les messages d’exception pour le format
Regexp. #63804 (Alexey Milovidov). - Autoriser les virgules finales dans le format
Values. Par exemple, cette requête est désormais autorisée :INSERT INTO test (a, b, c) VALUES (4, 5, 6,);. #63810 (Alexey Milovidov). - Faire en sorte que rabbitmq envoie un nack pour les messages corrompus. Clôt #45350. #60312 (Kseniia Sumarokova).
- Corriger un crash lors du déroulage asynchrone de la pile (par exemple lors de l’utilisation du sampling query profiler) pendant l’interprétation des informations de débogage. Cela clôt #60460. #60468 (Alexey Milovidov).
- Messages distincts pour l’erreur S3 ‘no key’ dans les cas disk et storage. #61108 (Sema Checherinda).
- La barre de progression fonctionnera pour les requêtes triviales avec LIMIT sur
system.zeros,system.zeros_mt(elle fonctionne déjà poursystem.numbersetsystem.numbers_mt), ainsi que pour la table functiongenerateRandom. En bonus, si le nombre total d’enregistrements dépasse la limitemax_rows_to_read, elle lèvera une exception plus tôt. Cela clôt #58183. #61823 (Alexey Milovidov). - Prise en charge de “Merge Key” dans les configurations YAML (c’est une fonctionnalité étrange de YAML, n’y prêtez pas trop attention). #62685 (Azat Khuzhin).
- Améliorer le message d’erreur lorsqu’une fonction non déterministe est utilisée avec une source Replicated. #62896 (Grégoire Pineau).
- Corriger le secret inter-serveur pour Distributed sur Distributed depuis
remote. #63013 (Azat Khuzhin). - Prise en charge de
include_frompour les fichiers YAML. Il est toutefois préférable d’utiliserconfig.d#63106 (Eduard Karacharov). - Les données précédentes sont désormais conservées dans le terminal après une sélection parmi les suggestions de skim. #63261 (FlameFactory).
- La largeur des champs (dans les Pretty formats ou la fonction
visibleWidth) ignore désormais correctement les séquences d’échappement ANSI. #63270 (Shaun Struwig). - Remplacement, lorsque c’est pertinent, du code d’erreur
NUMBER_OF_ARGUMENTS_DOESNT_MATCHpar des codes d’erreur plus précis. #63406 (Yohann Jardin). os_useretclient_hostnamesont désormais correctement définis pour les requêtes de suggestion en ligne de commande dans clickhouse-client. Cela clôt #63430. #63433 (Alexey Milovidov).- Correction automatique de
max_block_sizeà la valeur par défaut si sa valeur est zéro. #63587 (Antonio Andelic). - Ajout d’une colonne ALIAS build_id à trace_log pour faciliter le renommage automatique lors de la détection de changements du binaire. Cela vise à résoudre #52086. #63656 (Zimu Li).
- Activation de l’opération de troncature pour les object storage disks. #63693 (MikhailBurdukov).
- Le chargement de la liste des mots-clés dépend désormais de la révision du serveur et sera désactivé pour les anciennes versions de ClickHouse server. CC @azat. #63786 (Nikita Mikhaylov).
- Les disks ClickHouse doivent lire le server setting pour obtenir la version réelle du format des metadata. #63831 (Sema Checherinda).
- Désactivation des restrictions du Pretty format (
output_format_pretty_max_rows/output_format_pretty_max_value_width) lorsque stdout n’est pas un TTY. #63942 (Azat Khuzhin). - La gestion des exceptions fonctionne désormais lorsque ClickHouse est utilisé dans AWS Lambda. Auteur : Alexey Coolnev. #64014 (Alexey Milovidov).
- Lever
CANNOT_DECOMPRESSau lieu deCORRUPTED_DATApour des données compressées invalides transmises via HTTP. #64036 (vdimir). - L’astuce d’affichage pour un seul grand nombre dans les Pretty formats fonctionne désormais avec Nullable et LowCardinality. Cela clôt #61993. #64084 (Alexey Milovidov).
- Ajout de metrics, de logs et de noms de thread autour du filtrage des parts avec des index. #64130 (Alexey Milovidov).
- Ignorer
allow_suspicious_primary_keyavecATTACHet vérifier avecALTER. #64202 (Azat Khuzhin).
amélioration de la compilation, des tests et du packaging
- ClickHouse est compilé avec clang-18. De nombreux nouveaux checks de clang-tidy-18 ont été activés. #60469 (Alexey Milovidov).
- Prise en charge expérimentale de loongarch64 en tant que nouvelle plateforme pour ClickHouse. #63733 (qiangxuhui).
- Le Dockerfile est examiné par la bibliothèque officielle Docker dans https://github.com/docker-library/official-images/pull/15846. #63400 (Mikhail f. Shiryaev).
- Des informations sur chaque symbole de chaque unité de traduction seront collectées dans la base de données CI pour chaque build de la CI. Cela clôt #63494. #63495 (Alexey Milovidov).
- Mise à jour de la bibliothèque Apache Datasketches. Cela résout #63858. #63923 (Alexey Milovidov).
- Activation de la prise en charge de GRPC pour aarch64 Linux lors de la compilation croisée du binaire. #64072 (alesapin).
- Correction du déroulage de pile sur SIGSEGV sur aarch64 (en raison d’une pile de signal trop petite) #64058 (Azat Khuzhin).
Corrections de bugs
- Paramètre
enable_vertical_finaldésactivé par défaut. Cette fonctionnalité ne doit pas être utilisée, car elle comporte un bug : #64543. #64544 (Alexander Tokmakov). - Correction de la sauvegarde lorsque plusieurs shards sont utilisés #57684 (Vitaly Baranov).
- Correction de la transmission des projections/index/clé primaire depuis la liste des colonnes de la requête CREATE vers la table interne de la MV #59183 (Azat Khuzhin).
- Correction d’une fusion incorrecte de boundRatio #60532 (Tao Wang).
- Correction d’un crash lors de l’appel de certaines fonctions sur des colonnes constantes à faible cardinalité #61966 (Michael Kolupaev).
- Correction des requêtes avec FINAL qui renvoient un résultat incorrect lorsque la table n’utilise pas la granularité adaptative #62432 (Duc Canh Le).
- Amélioration de la détection de la prise en charge de cgroups v2 pour les contrôleurs de mémoire #62903 (Robert Schulze).
- Correction de l’utilisation ultérieure des tables externes dans le client #62964 (Azat Khuzhin).
- Correction d’un crash avec untuple et une lambda non résolue #63131 (Raúl Marín).
- Correction de la mise en écoute prématurée du serveur pour les connexions #63181 (alesapin).
- Correction de parts qui se chevauchent lors d’un redémarrage après une commande DROP PART #63202 (Han Fei).
- Chargement correct des valeurs par défaut de SQL security au démarrage #63209 (pufit).
- Correction du pushdown de filtre pour JOIN filter join #63234 (Maksim Kita).
- Correction d’une boucle infinie dans AzureObjectStorage::listObjects #63257 (Julia Kartseva).
- CROSS JOIN ignore le paramètre join_algorithm #63273 (vdimir).
- Correction de la finalisation de WriteBufferToFileSegment et de StatusFile #63346 (vdimir).
- Correction d’une erreur logique lors d’une requête SELECT après ALTER dans de rares cas #63353 (alesapin).
- Correction de l’en-tête
X-ClickHouse-Timezoneavecsession_timezone#63377 (Andrey Zvonov). - Correction d’une assertion de débogage lors de l’utilisation du groupement WITH ROLLUP et des types LowCardinality #63398 (Raúl Marín).
- Petites corrections pour group_by_use_nulls #63405 (vdimir).
- Correction du backup/de la restauration d’une partie de projection lorsque la projection a été supprimée des métadonnées de la table, mais que la partie contient encore la projection #63426 (Kseniia Sumarokova).
- Correction de la source de dictionnaire MySQL #63481 (vdimir).
- Insertion de QueryFinish sur AsyncInsertFlush sans données #63483 (Raúl Marín).
- Correction :
used_dictionariesvide dans system.query_log #63487 (Eduard Karacharov). MergeTreePrefetchedReadPoolrendu plus sûr #63513 (Antonio Andelic).- Correction d’un crash à la fermeture avec sentry activé (openssl étant détruit avant sentry) #63548 (Azat Khuzhin).
- Correction de la prise en charge de Array et Map avec le hachage par clé #63628 (Salvatore Mesoraca).
- Correction du pushdown de filtre pour Parquet et peut-être StorageMerge #63642 (Michael Kolupaev).
- Empêche la conversion vers Replicated si le chemin ZooKeeper existe déjà #63670 (Kirill).
- Analyseur : les vues ne lisent que les colonnes nécessaires #63688 (Maksim Kita).
- Analyseur : interdire la redéfinition de WINDOW #63694 (Dmitry Novik).
- flatten_nested ne fonctionnait pas avec la base de données Replicated expérimentale #63695 (Nikolai Kochetov).
- Correction de #63653 #63722 (Nikolai Kochetov).
- Autoriser la conversion de Array(Nothing) en Map(Nothing, Nothing) #63753 (Nikolai Kochetov).
- Correction de ILLEGAL_COLUMN dans la jointure partial_merge #63755 (vdimir).
- Correction : suppression d’un distinct redondant avec les window functions #63776 (Igor Nikonov).
- Correction d’un possible crash avec SYSTEM UNLOAD PRIMARY KEY #63778 (Raúl Marín).
- Correction d’une requête avec un alias cyclique dupliqué #63791 (Nikolai Kochetov).
- Rendre
TokenIteratorlazy comme il devrait l’être #63801 (Alexey Milovidov). - Ajout du paramètre d’URI S3
endpoint_subpath#63806 (Julia Kartseva). - Correction d’un interblocage dans
ParallelReadBuffer#63814 (Antonio Andelic). - Correction des colonnes équivalentes pour le push down des filtres JOIN #63819 (Maksim Kita).
- Suppression des données de tous les disques après un DROP avec une base de données Lazy. #63848 (MikhailBurdukov).
- Correction d’un résultat incorrect lors de la lecture depuis une MV avec des répliques parallèles et le nouvel analyseur #63861 (Nikita Taranov).
- Corrections des commandes
find_super_nodesetfind_big_familydans keeper-client #63862 (Alexander Gololobov). - Mise à jour du nom d’exécution des lambdas #63864 (Nikolai Kochetov).
- Correction d’un SIGSEGV dû au Profiler CPU/Real #63865 (Azat Khuzhin).
- Correction de la requête
EXPLAIN CURRENT TRANSACTION#63926 (Anton Popov). - Correction de l’analyseur : c’est des tortues à perte de vue… #63930 (Yakov Olkhovskiy).
- Autorisation de certaines commandes ALTER TABLE pour le disque
plain_rewritable#63933 (Julia Kartseva). - Correction pour les CTE récursives distribuées #63939 (Maksim Kita).
- Analyseur : correction de la résolution de COLUMNS #63962 (Dmitry Novik).
- LIMIT BY et skip_unused_shards avec l’analyseur #63983 (Nikolai Kochetov).
- Correctif pour quelques problèmes résiduels (Kusto expérimental) #63992 (Yong Wang).
- Désérialisation plus sûre des entrées binary non fiables #64024 (Robert Schulze).
- Correction de l’analyse des requêtes avec le paramètre
final= 1 pour les tables Distributed sur des tables n’appartenant pas à la famille MergeTree. #64037 (Nikolai Kochetov). - Ajout des paramètres manquants à recoverLostReplica #64040 (Raúl Marín).
- Correction des vérifications d’accès SQL security avec l’analyseur #64079 (pufit).
- Correction de l’analyseur : seule l’expression interpolée doit être utilisée pour le DAG #64096 (Yakov Olkhovskiy).
- Correction de l’écriture des sauvegardes Azure en blocs multipart de 1 MiB (taille du read buffer) au lieu de
max_upload_part_size(dans le cas d’une copie non native) #64117 (Kseniia Sumarokova). - Assurer un repli correct lors de la copie de sauvegarde #64153 (Antonio Andelic).
- Éviter LOGICAL_ERROR lors de CREATE TABLE en tant que vue matérialisée #64174 (Raúl Marín).
- Query Cache : considérer comme différentes des requêtes identiques exécutées sur différentes bases de données #64199 (Robert Schulze).
- Ignorer
text_logpour Keeper #64218 (Antonio Andelic). - Corriger une erreur logique : mauvaise conversion de type pour une table Buffer avec prewhere. #64388 (Nikolai Kochetov).
version de ClickHouse 24.4, 2024-04-30. Présentation, Vidéo
Notes de mise à niveau
clickhouse-odbc-bridgeetclickhouse-library-bridgesont désormais des paquets distincts. Cela résout #61677. #62114 (Alexey Milovidov).- Il n’est plus possible de définir max_parallel_replicas (pour la lecture parallèle expérimentale à partir de répliques) sur
0, car cela n’a pas de sens. Résout #60140. #61201 (Kruglov Pavel). - Suppression de la prise en charge de la requête
INSERT WATCH(qui fait partie de la fonctionnalité obsolèteLIVE VIEW). #62382 (Alexey Milovidov). - Suppression du paramètre
optimize_monotonous_functions_in_order_by. #63004 (Raúl Marín). - Suppression de l’étiquette Experimental du database engine
Replicated. Il est désormais au stade Beta. #62937 (Justin de Guzman).
Nouvelle fonctionnalité
- Prise en charge des CTE récursives. #62074 (Maksim Kita).
- Prise en charge de la clause
QUALIFY. Résout #47819. #62619 (Maksim Kita). - Les table engines peuvent désormais faire l’objet de grants, sans effet sur le comportement des utilisateurs existants. #60117 (jsc0218).
- Ajout d’un S3 disk réinscriptible qui prend en charge les opérations INSERT et ne nécessite pas de métadonnées stockées localement. #61116 (Julia Kartseva). Le principal cas d’usage concerne les system tables.
- La coloration syntaxique pendant la saisie dans le client fonctionnera au niveau de la syntaxe (auparavant, elle fonctionnait au niveau du lexer). #62123 (Alexey Milovidov).
- Prise en charge de la suppression de plusieurs tables en même temps, comme avec
DROP TABLE a, b, c;. #58705 (zhongyuankai). - La modification des table settings d’une table memory via
ALTER MODIFY SETTINGest désormais prise en charge. Exemple :ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;. #62039 (zhongyuankai). - Ajout du query parameter
roleà la HTTP interface. Il fonctionne de manière similaire àSET ROLE x, en appliquant le rôle avant l’exécution du statement. Cela permet de contourner la limitation de la HTTP interface : les statements multiples ne sont pas autorisés, et il n’est donc pas possible d’envoyer à la foisSET ROLE xet le statement lui-même. Il est possible de définir plusieurs rôles de cette manière, par exemple?role=x&role=y, ce qui équivaut àSET ROLE x, y. #62669 (Serge Klochkov). - Ajout de
SYSTEM UNLOAD PRIMARY KEYpour libérer la mémoire utilisée par la primary key d’une table. #62738 (Pablo Marcos). - Ajout des colonnes
value1,value2, …,value10àsystem.text_log. Ces colonnes contiennent les valeurs utilisées pour formater le message. #59619 (Alexey Katsman). - Ajout de la persistent virtual column
_block_offset, qui stocke le numéro d’origine de la row dans le block assigné lors de l’insert. La persistance de la column_block_offsetpeut être activée via le MergeTree settingenable_block_offset_column. Ajout de la virtual column_part_data_version, qui contient soit le numéro minimal du block, soit la version de mutation de la part. La persistent virtual column_block_numbern’est plus considérée comme Experimental. #60676 (Anton Popov). - Ajout d’un setting
input_format_json_throw_on_bad_escape_sequence; sa désactivation permet d’enregistrer des séquences d’échappement invalides dans les JSON input formats. #61889 (Kruglov Pavel).
Amélioration des performances
- Amélioration du push down des filtres de JOIN à l’aide de sets équivalents. #61216 (Maksim Kita).
- Optimisation de la conversion de OUTER JOIN en INNER JOIN lorsque le filtre appliqué après le JOIN filtre toujours les valeurs par défaut. L’optimisation peut être contrôlée avec le paramètre
query_plan_convert_outer_join_to_inner_join, activé par défaut. #62907 (Maksim Kita). - Amélioration pour AWS S3. Le client doit envoyer l’en-tête ‘Keep-Alive: timeout=X’ au serveur. Si un client reçoit du serveur une réponse avec cet en-tête, il doit utiliser la valeur fournie par le serveur. De plus, il est préférable pour un client de ne pas utiliser une connexion proche de l’expiration afin d’éviter une condition de concurrence lors de la fermeture de la connexion. #62249 (Sema Checherinda).
- Réduction de la surcharge liée aux mutations pour les SELECTs (v2). #60856 (Azat Khuzhin).
- Les fonctions les plus fréquemment appelées dans PODArray sont désormais forcées à être inline. #61144 (李扬).
- Accélération du parsing du JSON en ignorant le reste de l’objet lorsque toutes les colonnes requises ont été lues. #62210 (lgbo).
- Amélioration des insert select triviales depuis des fichiers dans les table functions file/s3/hdfs/url/… Ajout d’un paramètre max_parsing_threads distinct pour contrôler le nombre de threads utilisés pour le parsing en parallèle. #62404 (Kruglov Pavel).
- Les fonctions
to_utc_timestampetfrom_utc_timestampsont désormais environ 2x plus rapides. #62583 (KevinyhZou). - Les fonctions
parseDateTimeOrNull,parseDateTimeOrZero,parseDateTimeInJodaSyntaxOrNulletparseDateTimeInJodaSyntaxOrZeros’exécutent désormais nettement plus vite (10x - 1000x) lorsque l’entrée contient principalement des valeurs impossibles à parser. #62634 (LiuNeng). - Les SELECTs sur
system.query_cachesont désormais sensiblement plus rapides lorsque le query cache contient beaucoup d’entrées (par ex. plus de 100.000). #62671 (Robert Schulze). - Moins de contention dans le cache du système de fichiers (partie 3) : exécution de la suppression depuis le système de fichiers sans verrou lors de la tentative de réservation d’espace. #61163 (Kseniia Sumarokova).
- Accélération du redimensionnement dynamique du cache du système de fichiers. #61723 (Kseniia Sumarokova).
- Le dictionary source avec
INVALIDATE_QUERYn’est plus rechargé deux fois au démarrage. #62050 (vdimir). - Correction d’un problème où, lorsqu’un
= 1ou= 0redondant est ajouté après une expression booléenne impliquant la clé primaire, l’index primaire n’est pas utilisé. Par exemple,SELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1etSELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0effectuent tous deux un parcours complet de la table, alors que l’index primaire pourrait être utilisé. #62142 (josh-hildred). - Renvoyer un flux de fragments depuis
system.remote_data_pathsau lieu d’accumuler l’ensemble du résultat dans un seul gros fragment. Cela permet d’utiliser moins de mémoire, d’afficher une progression intermédiaire et d’annuler la requête. #62613 (Alexander Gololobov).
Fonctionnalité expérimentale
- Prise en charge d’un tampon d’écriture parallèle pour Azure Blob Storage, géré par le paramètre
azure_allow_parallel_part_upload. #62534 (SmitaRKulkarni). - Le cache de pages en espace utilisateur fonctionne désormais avec le stockage web statique (
disk(type = web)). Utilisez le paramètre clientuse_page_cache_for_disks_without_file_cache=1pour l’activer. #61911 (Michael Kolupaev). - Les variantes Bool et numériques ne sont plus considérées comme suspectes dans le type
Variant. #61999 (Kruglov Pavel). - Amélioration de la conversion de String vers
Variantà l’aide de l’analyse syntaxique. #62005 (Kruglov Pavel). - Prise en charge de
Variantdans les fonctions JSONExtract. #62014 (Kruglov Pavel). - Le type
Variantest désormais marqué comme comparable, ce qui permet de l’utiliser dans une clé primaire. #62693 (Kruglov Pavel).
Amélioration
- Par commodité,
SELECT * FROM numbers()fonctionnera de la même manière queSELECT * FROM system.numbers— sans limite. #61969 (YenchangChan). - Introduction de tags consumer/producer distincts pour la configuration Kafka. Cela évite les avertissements de librdkafka (une mauvaise bibliothèque C avec beaucoup de bogues) signalant que des propriétés consumer ont été spécifiées pour des instances producer, et inversement (par exemple
Configuration property session.timeout.ms is a consumer property and will be ignored by this producer instance). Clôture : #58983. #58956 (Aleksandr Musorin). - Les fonctions
date_diffetagecalculent désormais leur résultat avec une précision à la nanoseconde au lieu de la microseconde. Elles proposent aussi désormaisnanosecond(ounanosecondsouns) comme valeur possible pour le paramètreunit. #61409 (Austin Kothig). - Ajout des unités nano-, micro- et milliseconde pour
date_trunc. #62335 (Misz606). - Rechargement de la chaîne de certificats lors du rechargement du certificat. #61671 (Pervakov Grigorii).
- Tentative de prévention de l’erreur #60432 en interdisant l’attachement d’une table s’il existe une replica active pour ce chemin de replica. #61876 (Arthur Passos).
- Ajout de la prise en charge de
inputpourclickhouse-local. #61923 (Azat Khuzhin). - Le
Jointable engine avec la strictnessANYest désormais cohérent après rechargement. Lorsque plusieurs rows avec la même key sont insérées, la première a la priorité (auparavant, elle était choisie aléatoirement lors du chargement de la table). Corrige #51027. #61972 (vdimir). - Déduction automatique des column types Nullable à partir du schéma Apache Arrow. #61984 (Maksim Kita).
- Possibilité d’annuler le merge parallèle des aggregate states pendant l’aggregation. Example :
uniqExact. #61992 (Maksim Kita). - Utilisation de
system.keywordspour alimenter les suggestions, et utilisation de ceux-ci partout en interne. #62000 (Nikita Mikhaylov). OPTIMIZE FINALpourReplicatedMergeTreeattendra désormais la fin des merges actifs, puis réessaiera de planifier un merge final. Ce comportement se rapproche ainsi davantage de celui deMergeTree. #62067 (Nikita Taranov).- Lors de la lecture de données à partir d’un Hive Text File, la première ligne du fichier était utilisée pour ajuster le nombre de champs en entrée. Il arrivait parfois que le nombre de champs de cette première ligne ne corresponde pas à celui défini dans la Hive table. Par exemple, si la Hive table est définie avec 3 colonnes, comme
test_tbl(a Int32, b Int32, c Int32), mais que la première ligne du fichier texte ne contient que 2 champs, alors le nombre de champs en entrée est ramené à 2. Si la ligne suivante du fichier texte contient 3 champs, le troisième ne peut alors pas être lu et reçoit à la place la valeur par défaut 0, ce qui est incorrect. #62086 (KevinyhZou). CREATE AScopie le commentaire de la table. #62117 (Pablo Marcos).- Ajout de la progression des requêtes à la table zookeeper. #62152 (JackyWoo).
- Ajout de la possibilité d’activer le collector de trace (temps réel et CPU) à l’échelle du serveur. #62189 (alesapin).
- Ajout du paramètre
lightweight_deletes_sync(valeur par défaut : 2 - attendre toutes les répliques de manière synchrone). Il est similaire au paramètremutations_sync, mais n’affecte que le comportement des suppressions légères. #62195 (Anton Popov). - Distinction entre booléens et entiers lors de l’analyse des valeurs des paramètres personnalisés :
SET custom_a = true; SET custom_b = 1;. #62206 (Vitaly Baranov). - Prise en charge de l’accès à S3 via des endpoints d’interface AWS Private Link. Ferme #60021, #31074 et #53761. #62208 (Arthur Passos).
- Ne plus créer de répertoire pour les UDF dans clickhouse-client s’il n’existe pas. Cela ferme #59597. #62366 (Alexey Milovidov).
- Le cache de requêtes ne met désormais plus en cache les résultats des requêtes sur les tables système (
system.*,information_schema.*,INFORMATION_SCHEMA.*). #62376 (Robert Schulze). - La requête
MOVE PARTITION TO TABLEpeut être retardée ou déclencher l’exceptionTOO_MANY_PARTSafin d’éviter de dépasser les limites du nombre de parts. Les mêmes paramètres et limites s’appliquent que pour la requêteINSERT(voir les paramètresmax_parts_in_total,parts_to_delay_insert,parts_to_throw_insert,inactive_parts_to_throw_insert,inactive_parts_to_delay_insert,max_avg_part_size_for_too_many_parts,min_delay_to_insert_msetmax_delay_to_insert). #62420 (Sergei Trifonov). - Le répertoire d’installation par défaut sur macOS passe de
/usr/binà/usr/local/bin. Cela est nécessaire, car la protection de l’intégrité du système d’Apple introduite avec macOS El Capitan (2015) empêche l’écriture dans/usr/bin, même avecsudo. #62489 (haohang). - Faire en sorte que transform renvoie toujours la première correspondance. #62518 (Raúl Marín).
- Ajout de la colonne
hostnamemanquante à la table systèmeblob_storage_log. #62456 (Jayme Bird). - Par souci de cohérence avec les autres tables système,
system.backup_logdispose désormais d’une colonneevent_time. #62541 (Jayme Bird). - La table
system.backup_logutilise désormais la clé de tri “par défaut”event_date, event_time, comme les autres moteurs de table_log. #62667 (Nikita Mikhaylov). - Éviter l’évaluation des expressions DEFAULT de la table lors de l’exécution de
RESTORE. #62601 (Vitaly Baranov). - Le stockage S3 et les sauvegardes nécessitent également les mêmes paramètres keep-alive par défaut que le disque S3. #62648 (Sema Checherinda).
- Ajouter l’identifiant client de librdkafka (cette tristement célèbre bibliothèque C, qui comporte de nombreux bugs) aux messages de journalisation afin de pouvoir différencier ceux provenant de différents consommateurs d’une même table. #62813 (János Benjamin Antal).
- Autoriser les macros spéciales
{uuid}et{database}dans le chemin ZooKeeper d’une base de données Replicated. #62818 (Vitaly Baranov). - Autoriser l’utilisation d’une clé de quota avec différents schémas d’authentification dans les requêtes HTTP. #62842 (Kseniia Sumarokova).
- Réduire la verbosité de l’argument de ligne de commande
--helpdansclickhouse clientetclickhouse local. La sortie précédente est désormais générée par--help --verbose. #62973 (Yarik Briukhovetskyi). log_bin_use_v1_row_eventsa été supprimé dans MySQL 8.3, et le moteur expérimentalMaterializedMySQLa été adapté en conséquence #60479. #63101 (Eugene Klimov). Auteur : Nikolay Yankin.
Amélioration de la compilation, des tests et du packaging
- Ajout des dépendances Rust au dépôt, afin que le code Rust (que nous utilisons pour des fonctionnalités mineures, pour le hype et les lulz) puisse être compilé de manière raisonnable, comme en C++. #62297 (Raúl Marín).
- ClickHouse utilise désormais OpenSSL 3.2 au lieu de BoringSSL. #59870 (Robert Schulze). Notez qu’OpenSSL a globalement une culture d’ingénierie moins bonne (par exemple un nombre non nul de rapports de sanitizer, que nous avons dû corriger, un système de compilation complexe avec des fichiers générés, etc.), mais offre une meilleure compatibilité.
- Ignorer les requêtes DROP dans le test de stress avec une probabilité d’une fois sur deux, et utiliser TRUNCATE au lieu d’ignorer DROP dans la vérification de mise à niveau des tables Memory/JOIN. #61476 (Kruglov Pavel).
- Retirer de l’image Docker de Keeper les volumes situés dans /etc/clickhouse-keeper et /var/log/clickhouse-keeper. #61683 (Tristan).
- Ajout de tests pour tous les tickets devenus sans objet depuis que l’analyseur est activé par défaut. Closes: #55794 Closes: #49472 Closes: #44414 Closes: #13843 Closes: #55803 Closes: #48308 Closes: #45535 Closes: #44365 Closes: #44153 Closes: #42399 Closes: #27115 Closes: #23162 Closes: #15395 Closes: #15411 Closes: #14978 Closes: #17319 Closes: #11813 Closes: #13210 Closes: #23053 Closes: #37729 Closes: #32639 Closes: #9954 Closes: #41964 Closes: #54317 Closes: #7520 Closes: #36973 Closes: #40955 Closes: #19687 Closes: #23104 Closes: #21584 Closes: #23344 Closes: #22627 Closes: #10276 Closes: #19687 Closes: #4567 Closes: #17710 Closes: #11068 Closes: #24395 Closes: #23416 Closes: #23162 Closes: #25655 Closes: #11757 Closes: #6571 Closes: #4432 Closes: #8259 Closes: #9233 Closes: #14699 Closes: #27068 Closes: #28687 Closes: #28777 Closes: #29734 Closes: #61238 Closes: #33825 Closes: #35608 Closes: #29838 Closes: #35652 Closes: #36189 Closes: #39634 Closes: #47432 Closes: #54910 Closes: #57321 Closes: #59154 Closes: #61014 Closes: #61950 Closes: #55647 Closes: #61947. #62185 (Nikita Mikhaylov).
- Ajout de tests supplémentaires issus de tickets qui ne sont plus pertinents ou qui ont été corrigés par l’analyseur. Ferme : #58985 Ferme : #59549 Ferme : #36963 Ferme : #39453 Ferme : #56521 Ferme : #47552 Ferme : #56503 Ferme : #59101 Ferme : #50271 Ferme : #54954 Ferme : #56466 Ferme : #11000 Ferme : #10894 Ferme : https://github.com/ClickHouse/ClickHouse/issues/448 Ferme : #8030 Ferme : #32139 Ferme : #47288 Ferme : #50705 Ferme : #54511 Ferme : #55466 Ferme : #58500 Ferme : #39923 Ferme : #39855 Ferme : #4596 Ferme : #47422 Ferme : #33000 Ferme : #14739 Ferme : #44039 Ferme : #8547 Ferme : #22923 Ferme : #23865 Ferme : #29748 Ferme : #4222. #62457 (Nikita Mikhaylov).
- Correction des erreurs de compilation lorsque OpenSSL est lié dynamiquement (remarque : cela n’est généralement pas pris en charge et n’est requis que pour les plateformes s390x d’IBM). #62888 (Harry Lee).
Correction de bug (dysfonctionnement visible par l’utilisateur dans une version stable officielle)
- Correction d’une erreur logique lors de l’annulation d’une transaction d’insertion avec quorum. #61953 (Han Fei).
- Correction d’une erreur de parseur lors de l’utilisation de COUNT(*) avec la clause FILTER #61357 (Duc Canh Le).
- Correction d’une erreur logique dans
group_by_use_nulls+ grouping sets + analyseur + materialize/constant #61567 (Kruglov Pavel). - Annulation des merges avant la suppression des parts déplacées #61610 (János Benjamin Antal).
- Correction d’un arrêt brutal dans Apache Arrow #61720 (Kruglov Pavel).
- Recherche de l’indicateur
convert_to_replicateddans le bon chemin correspondant au disque concerné #61769 (Kirill). - Correction d’une possible compétition d’accès aux données des connexions pour distributed_foreground_insert/distributed_background_insert_batch #61867 (Azat Khuzhin).
- Marquage de l’erreur CANNOT_PARSE_ESCAPE_SEQUENCE comme erreur d’analyse afin de pouvoir l’ignorer dans les formats d’entrée ligne par ligne #61883 (Kruglov Pavel).
- Correction de l’écriture du message d’Exception dans le format de sortie HTTP lorsque http_wait_end_of_query est utilisé #61951 (Kruglov Pavel).
- Correction complète de LowCardinality avec les fonctions JSONExtact #61957 (Nikita Mikhaylov).
- Crash dans le moteur Merge si la ROW POLICY n’a pas d’expression #61971 (Ilya Golshtein).
- Correction d’une exception non interceptée dans le destructeur de WriteBufferAzureBlobStorage #61988 (SmitaRKulkarni).
- Correction de CREATE TABLE sans définition de colonnes pour ReplicatedMergeTree #62040 (Azat Khuzhin).
- Correction de optimize_skip_unused_shards_rewrite_in pour une clé de partitionnement composite #62047 (Azat Khuzhin).
- ReadWriteBufferFromHTTP définit l’en-tête host correct lors d’une redirection #62068 (Sema Checherinda).
- Correction du cas où la table externe ne pouvait pas analyser le type de données Bool #62115 (Duc Canh Le).
- Analyseur : correction de la résolution des paramètres de requête #62186 (Dmitry Novik).
- Correction de la restauration des parts en mode readonly #62207 (Vitaly Baranov).
- Correction d’un crash dans une définition d’index contenant une UDF SQL #62225 (vdimir).
- Correction de la graine aléatoire NULL pour generateRandom avec l’analyseur. #62248 (Nikolai Kochetov).
- Prise en charge correcte des colonnes constantes dans Distinct Transfom #62250 (Antonio Andelic).
- Correction de Parts Splitter pour les requêtes avec le modificateur FINAL #62268 (Nikita Taranov).
- Analyseur : correction de la résolution d’alias vers une vue paramétrée #62274 (Dmitry Novik).
- Analyseur : correction de la résolution des noms à partir des portées parentes #62281 (Dmitry Novik).
- Correction de argMax avec une colonne numérique Nullable non native #62285 (Raúl Marín).
- Correction de BACKUP et RESTORE d’une vue matérialisée dans une base de données Ordinary #62295 (Vitaly Baranov).
- Correction d’une data race sur les scalaires dans Context #62305 (Kruglov Pavel).
- Correction de la clé primaire dans une vue matérialisée #62319 (Murat Khairulin).
- Ne pas construire de pipeline d’insert multithreadé pour les tables qui ne le prennent pas en charge #62333 (vdimir).
- Correction de l’analyseur avec des arguments positionnels dans une requête distribuée #62362 (flynn).
- Correction du pushdown de filtre depuis additional_table_filters dans le moteur Merge avec l’analyseur #62398 (Kruglov Pavel).
- Correction des requêtes de table GLOBAL IN avec l’analyseur. #62409 (Nikolai Kochetov).
- Prise en compte des paramètres truncate_on_insert/create_new_file_on_insert dans les moteurs S3/HDFS/Azure lors de l’écriture partitionnée #62425 (Kruglov Pavel).
- Correction du chemin de restauration de sauvegarde pour AzureBlobStorage #62447 (SmitaRKulkarni).
- Correction de SimpleSquashingChunksTransform #62451 (Nikita Taranov).
- Correction de la capture d’une lambda imbriquée. #62462 (Nikolai Kochetov).
- Évite un crash lors de la lecture de Protobuf avec des types récursifs #62506 (Raúl Marín).
- Correction d’un bug lors du déplacement d’une partition vers elle-même #62524 (helifu).
- Correction d’une sous-requête scalaire dans LIMIT #62567 (Nikolai Kochetov).
- Correction d’un segfault dans le moteur Hive expérimental et non pris en charge, que nous n’apprécions de toute façon guère #62578 (Nikolay Degterinsky).
- Correction d’une fuite de mémoire dans groupArraySorted #62597 (Antonio Andelic).
- Correction d’un crash dans largestTriangleThreeBuckets #62646 (Raúl Marín).
- Correction de tumble[Start,End] et hop[Start,End] pour des résolutions plus élevées #62705 (Jordi Villar).
- Correction de l’état du combinateur argMin/argMax #62708 (Raúl Marín).
- Correction de l’échec des données temporaires dans le cache en raison de l’optimisation de la contention sur le verrou du cache #62715 (Kseniia Sumarokova).
- Correction d’un crash dans la fonction
mergeTreeIndex#62762 (Anton Popov). - correction : mise à jour : colonnes matérialisées imbriquées : corrections des vérifications de taille #62773 (Eliot Hautefeuille).
- Correction du fait que le modificateur FINAL n’est pas respecté dans une CTE avec l’analyseur #62811 (Duc Canh Le).
- Correction d’un crash dans la fonction
formatRowavec le formatJSONet l’interface HTTP #62840 (Anton Popov). - Azure : correction de la construction de l’URL finale à partir de l’objet endpoint #62850 (Daniel Pozo Escalona).
- Correction du codec GCD #62853 (Nikita Taranov).
- Correction de la clé LowCardinality(Nullable) dans hyperrectangle #62866 (Amos Bird).
- Correction de fromUnixtimestamp en syntaxe Joda lorsque la valeur d’entrée dépasse UInt32 #62901 (KevinyhZou).
- Désactivation de optimize_rewrite_aggregate_function_with_if pour sum(nullable) #62912 (Raúl Marín).
- Correction de PREWHERE pour StorageBuffer avec différents types de colonnes dans la table source. #62916 (Nikolai Kochetov).
- Correction du traitement incorrect de l’échec de création du répertoire de clé de cache pour les données temporaires dans le cache #62925 (Kseniia Sumarokova).
- gRPC : correction d’un crash sur une connexion peer IPv6 #62978 (Konstantin Bogdanov).
- Correction d’un possible CHECKSUM_DOESNT_MATCH (et d’autres) lors de fetches répliqués #62987 (Azat Khuzhin).
- Correction d’un arrêt dû à une exception non interceptée dans les données temporaires du cache #62998 (Kseniia Sumarokova).
- Correction de
optimize_rewrite_aggregate_function_with_ifavec transtypage implicite #62999 (Raúl Marín). - Correction d’une exception non gérée dans ~RestorerFromBackup #63040 (Vitaly Baranov).
- Ne pas supprimer les constantes du serveur de la clé GROUP BY pour la requête secondaire. #63047 (Nikolai Kochetov).
- Correction d’une évaluation incorrecte de la monotonie de la fonction abs #63097 (Duc Canh Le).
- Définition du nom du serveur pour la négociation SSL dans le engine MongoDB #63122 (Alexander Gololobov).
- Utilisation de la DB spécifiée par l’utilisateur au lieu de “config” pour la vérification de la version du wire protocol MongoDB #63126 (Alexander Gololobov).
Version 24.3 LTS de ClickHouse, 2024-03-27. Présentation, Vidéo
Notes de mise à niveau
- Le paramètre
allow_experimental_analyzerest activé par défaut et bascule l’analyse des requêtes vers une nouvelle implémentation, offrant une meilleure compatibilité et une couverture fonctionnelle plus complète. La fonctionnalité “analyzer” est désormais considérée comme bêta plutôt qu’expérimentale. Vous pouvez rétablir l’ancien comportement en définissantcompatibilitysur24.2ou en désactivant le paramètreallow_experimental_analyzer. Regardez la vidéo sur YouTube. - ClickHouse autorise des données binaires arbitraires dans le type de données String, généralement encodé en UTF-8. Les Strings Parquet/ORC/Arrow ne prennent en charge que l’UTF-8. C’est pourquoi vous pouvez choisir le type de données Arrow à utiliser pour le type de données String de ClickHouse : String ou Binary. Cela est contrôlé par les paramètres
output_format_parquet_string_as_string,output_format_orc_string_as_string,output_format_arrow_string_as_string. Bien que Binary soit plus correct et plus compatible, l’utilisation de String par défaut correspondra aux attentes des utilisateurs dans la plupart des cas. Parquet/ORC/Arrow prend en charge de nombreuses méthodes de compression, notamment lz4 et zstd. ClickHouse prend en charge chacune de ces méthodes de compression. Certains outils moins performants ne prennent pas en charge la méthode de compressionlz4, plus rapide, c’est pourquoi nous avons choisizstdpar défaut. Cela est contrôlé par les paramètresoutput_format_parquet_compression_method,output_format_orc_compression_methodetoutput_format_arrow_compression_method. Nous avons remplacé la valeur par défaut parzstdpour Parquet et ORC, mais pas pour Arrow (qui est davantage destiné à des usages bas niveau). #61817 (Alexey Milovidov). - Dans la nouvelle version de ClickHouse, les fonctions
geoDistance,greatCircleDistanceetgreatCircleAngleutiliseront le type de données à virgule flottante double précision 64 bits pour les calculs internes et comme type de retour si tous les arguments sont de type Float64. Cela clôt #58476. Dans les versions précédentes, la fonction utilisait toujours Float32. Vous pouvez revenir à l’ancien comportement en définissantgeo_distance_returns_float64_on_float64_argumentssurfalseou en définissantcompatibilitysur24.2ou une version antérieure. #61848 (Alexey Milovidov). Coécrit avec Geet Patel. - Les data parts obsolètes en mémoire sont dépréciées depuis la version 23.5 et ne sont plus prises en charge depuis la version 23.10. Le code restant est désormais supprimé. Suite de #55186 et #45409. Il est peu probable que vous ayez utilisé des data parts en mémoire, car elles n’étaient disponibles qu’avant la version 23.5 et uniquement si vous les activiez manuellement en spécifiant les SETTINGS correspondants pour une table MergeTree. Pour vérifier si vous avez des data parts en mémoire, exécutez la requête suivante :
SELECT part_type, count() FROM system.parts GROUP BY part_type ORDER BY part_type. Pour désactiver l’utilisation des data parts en mémoire, exécutezALTER TABLE ... MODIFY SETTING min_bytes_for_compact_part = DEFAULT, min_rows_for_compact_part = DEFAULT. Avant de mettre à niveau depuis d’anciennes versions de ClickHouse, vérifiez d’abord que vous n’avez pas de data parts en mémoire. S’il y a des data parts en mémoire, désactivez-les d’abord, puis attendez qu’il n’y en ait plus avant de poursuivre la mise à niveau. #61127 (Alexey Milovidov). - Le nom de la colonne a été changé de
duration_msàduration_microsecondsdans la tablesystem.zookeeperafin de refléter le fait que la durée est exprimée avec une résolution à la microseconde. #60774 (Duc Canh Le). - Rejeter les requêtes
INSERTentrantes lorsque les paramètres au niveau de la requêteasync_insertetdeduplicate_blocks_in_dependent_materialized_viewssont activés simultanément. Ce comportement est contrôlé par le paramètrethrow_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert, activé par défaut. Il s’agit de la suite de https://github.com/ClickHouse/ClickHouse/pull/59699, nécessaire pour débloquer https://github.com/ClickHouse/ClickHouse/pull/59915. #60888 (Nikita Mikhaylov). - L’utilitaire
clickhouse-copiera été déplacé vers un repository GitHub distinct : https://github.com/ClickHouse/copier. Il n’est plus inclus dans le bundle, mais reste disponible en téléchargement séparé. Cela clôture : #60734 Cela clôture : #60540 Cela clôture : #60250 Cela clôture : #52917 Cela clôture : #51140 Cela clôture : #47517 Cela clôture : #47189 Cela clôture : #46598 Cela clôture : #40257 Cela clôture : #36504 Cela clôture : #35485 Cela clôture : #33702 Cela clôture : #26702. - Pour améliorer la compatibilité avec MySQL, l’alias de compatibilité
locateaccepte désormais par défaut les arguments(needle, haystack[, start_pos]). Le comportement précédent(haystack, needle, [, start_pos])peut être rétabli en définissantfunction_locate_has_mysql_compatible_argument_order = 0. #61092 (Robert Schulze). - Interdire par défaut
SimpleAggregateFunctiondansORDER BYdes tablesMergeTree(commeAggregateFunction, car ils ne sont pas comparables) (utilisezallow_suspicious_primary_keypour les autoriser). #61399 (Azat Khuzhin). - Le database engine
Ordinaryest obsolète. Vous recevrez un avertissement dans clickhouse-client si votre server l’utilise. Cela clôture #52229. #56942 (shabroo).
Nouvelle fonctionnalité
- Prise en charge de la lecture et de l’écriture des sauvegardes au format
tar(en plus dezip). #59535 (josh-hildred). - Prise en charge des buckets S3 Express. #59965 (Nikita Taranov).
- Possibilité d’attacher des parts depuis un autre disk (en utilisant une copie au lieu d’un lien physique). #60112 (Unalian).
- Tables
Memoryavec taille plafonnée : contrôlées par leurs paramètresmin_bytes_to_keep,max_bytes_to_keep,min_rows_to_keepetmax_rows_to_keep. #60612 (Jake Bamrah). - Limites distinctes pour le nombre de requêtes en attente et en cours d’exécution. Ajout d’un nouveau paramètre serveur,
max_waiting_queries, qui limite le nombre de requêtes en attente à cause deasync_load_databases. Les limites existantes sur le nombre de requêtes en cours d’exécution ne comptent plus les requêtes en attente. #61053 (Sergei Trifonov). - Ajout d’une table
system.keywordsqui contient tous les mots-clés du parser. Elle est surtout nécessaire et sera utilisée pour améliorer le fuzzing et la coloration syntaxique. #51808 (Nikita Mikhaylov). - Ajout de la prise en charge de
ATTACH PARTITION ALL. #61107 (Kirill Nikiforov). - Ajout d’une nouvelle fonction,
getClientHTTPHeader. Cela clôt le ticket #54665. Coécrit avec @lingtaolf. #61820 (Alexey Milovidov). - Ajout de
generate_seriescomme table function (alias de compatibilité PostgreSQL pour la fonction existantenumbers). Cette fonction génère une table contenant une progression arithmétique de nombres naturels. #59390 (divanik). - Ajout d’un mode pour
topK/topkWeighedqui renvoie le nombre de valeurs et son erreur. #54508 (UnamedRus). - Ajout de la fonction
toMillisecond, qui renvoie la composante milliseconde pour les valeurs de typeDateTimeouDateTime64. #60281 (Shaun Struwig). - Possibilité de configurer des handlers de redirection HTTP pour clickhouse-server. Par exemple, vous pouvez faire en sorte que
/redirige vers l’UI Play. #60390 (Alexey Milovidov).
Amélioration des performances
- Optimisation de la fonction
dotProductpour éviter les copies mémoire inutiles et coûteuses. #60928 (Robert Schulze). - Affichage 30x plus rapide pour les entiers 256 bits. #61100 (Raúl Marín).
- Si la clé primaire de la table contient surtout des colonnes inutiles, ne les conservez pas en mémoire. Ce comportement est contrôlé par un nouveau réglage
primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns, dont la valeur par défaut est0.9, ce qui signifie : pour une clé primaire composite, si une colonne change de valeur dans au moins 0,9 de tous les cas, les colonnes suivantes ne seront pas chargées. #60255 (Alexey Milovidov). - Améliore les performances des méthodes d’agrégation sérialisées lorsqu’elles impliquent plusieurs colonnes
Nullable. #55809 (Amos Bird). - Construit la sortie JSON de façon lazy afin d’améliorer les performances de ALL JOIN. #58278 (LiuNeng).
- Rend réutilisables, pour tous les cas d’usage, les connexions HTTP/HTTPS vers des services externes comme AWS S3, même lorsque la réponse est 3xx ou 4xx. #58845 (Sema Checherinda).
- Améliorations des fonctions d’agrégation
argMin/argMax/any/anyLast/anyHeavy, ainsi que des requêtesORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1. #58640 (Raúl Marín). - Optimisation triviale du filtre de colonne. Le pic de mémoire peut être réduit à 44 % de la valeur d’origine dans certains cas. #59698 (李扬).
- Exécute la fonction
multiIfde façon columnar lorsque le type sous-jacent du type de résultat est un nombre. #60384 (李扬). - Mutex presque 2x plus rapides. #60823 (Azat Khuzhin).
- Draine plusieurs connexions en parallèle lorsqu’une requête distribuée se termine. #60845 (lizhuoyu5).
- Optimise le déplacement des données entre les colonnes d’un nombre Nullable ou d’une chaîne Nullable, ce qui améliore certains micro-benchmarks. #60846 (李扬).
- Les opérations sur le cache du système de fichiers souffriront moins de la contention sur les verrous. #61066 (Alexey Milovidov).
- Optimise ARRAY JOIN et les autres JOIN en empêchant une optimisation incorrecte du compilateur. Ferme #61074. #61075 (李扬).
- Si une requête contenant une erreur de syntaxe utilisait le sélecteur
COLUMNSavec une expression régulière, celle-ci était compilée à chaque retour en arrière du parseur, au lieu de l’être une seule fois. C’était une erreur fondamentale. L’expression régulière compilée était placée dans l’AST. Or, la lettre A de AST signifie « abstract », ce qui veut dire qu’il ne doit pas contenir d’objets lourds. Des parties de l’AST peuvent être créées puis supprimées pendant l’analyse, notamment lors d’un grand nombre de retours en arrière. Cela ralentit l’analyse et permet donc à un utilisateur readonly de provoquer un DoS. Mais le principal problème est que cela bloque la progression des fuzzers. #61543 (Alexey Milovidov). - Ajout d’une nouvelle passe de l’analyseur pour optimiser l’opérateur IN lorsqu’il n’y a qu’une seule valeur. #61564 (LiuNeng).
- DNSResolver mélange l’ensemble des adresses IP résolues, ce qui est nécessaire pour utiliser de manière uniforme plusieurs points de terminaison d’AWS S3. #60965 (Sema Checherinda).
Fonctionnalité expérimentale
- Prise en charge de la lecture parallèle pour Azure Blob Storage. Cela améliore les performances du stockage d’objets Azure expérimental. #61503 (SmitaRKulkarni).
- Ajout d’un WriteBuffer asynchrone pour Azure Blob Storage, similaire à S3. Cela améliore les performances du stockage d’objets Azure expérimental. #59929 (SmitaRKulkarni).
- Utilisation d’une identité managée pour les E/S des sauvegardes avec Azure Blob Storage. Ajout d’un paramètre pour empêcher ClickHouse de tenter de créer un conteneur inexistant, ce qui nécessite des autorisations au niveau du compte de stockage. #61785 (Daniel Pozo Escalona).
- Ajout d’un paramètre
parallel_replicas_allow_in_with_subquery = 1qui permet d’utiliser des sous-requêtes dans les expressions IN avec les répliques parallèles. #60950 (Nikolai Kochetov). - Modification de la réplication « zero-copy » : tous les verrous zero-copy liés à une table doivent être supprimés lorsque la table est supprimée. Le répertoire qui contient ces verrous doit également être supprimé. #57575 (Sema Checherinda).
Amélioration
- Utiliser
MergeTreecomme table engine par défaut. #60524 (Alexey Milovidov) - Activer
output_format_pretty_row_numberspar défaut. C’est plus pratique à l’usage. #61791 (Alexey Milovidov). - Dans la version précédente, certains nombres dans les Pretty formats n’étaient pas affichés de manière assez élégante. #61794 (Alexey Milovidov).
- Une valeur longue dans les Pretty formats ne sera pas tronquée si c’est l’unique valeur du resultset, comme dans le résultat de la query
SHOW CREATE TABLE. #61795 (Alexey Milovidov). - À l’instar de
clickhouse-local,clickhouse-clientacceptera l’option--output-formatcomme synonyme de l’option--format. Cela clôture #59848. #61797 (Alexey Milovidov). - Si stdout est un terminal et que l’output format n’est pas spécifié,
clickhouse-clientet les outils similaires utiliserontPrettyCompactpar défaut, comme en mode interactif.clickhouse-clientetclickhouse-localgéreront les arguments de ligne de commande des formats d’entrée et de sortie de manière unifiée. Cela clôture #61272. #61800 (Alexey Milovidov). - Regrouper les chiffres avec des underscores dans les Pretty formats pour améliorer la lisibilité. Cela est contrôlé par un nouveau paramètre,
output_format_pretty_highlight_digit_groups. #61802 (Alexey Milovidov). - Ajouter la possibilité de redéfinir les paramètres INSERT initiaux via
SYSTEM FLUSH DISTRIBUTED. #61832 (Azat Khuzhin). - Activer par défaut le profiling des processors (temps passé / octets entrants et sortants pour le tri, l’aggregation, …). #61096 (Azat Khuzhin).
- Prise en charge des fichiers sans extension de format dans la base de données Filesystem. #60795 (Kruglov Pavel).
- Rendre tous les noms de format insensibles à la casse, comme Tsv, ou TSV, ou tsv, ou même rowbinary. #60420 (豪肥肥). J’apprécierais que vous continuiez à les écrire correctement, par exemple
JSON😇, et nonJson🤮, mais cela ne nous dérange pas si vous les écrivez comme vous préférez. - Ajout du mode
none_only_activepour le paramètredistributed_ddl_output_mode. #60340 (Alexander Tokmakov). - Le tableau de bord Advanced a des couleurs légèrement meilleures pour les graphiques multilignes. #60391 (Alexey Milovidov).
- Le tableau de bord Advanced dispose désormais de contrôles toujours visibles lors du défilement. Cela vous permet d’ajouter un nouveau graphique sans remonter en haut. #60692 (Alexey Milovidov).
- Lors de l’exécution de la requête
MODIFY COLUMNsur des vues matérialisées, vérifiez la structure de la table interne pour vous assurer que chaque colonne existe. #47427 (sunny). - Les types String et les Enums peuvent être utilisés dans le même contexte, par exemple dans les tableaux, les requêtes UNION et les expressions conditionnelles. Cela corrige #60726. #60727 (Alexey Milovidov).
- Autorise la déclaration d’Enums dans la structure des données externes pour le traitement des requêtes (il s’agit d’une table temporaire immédiate que vous pouvez fournir à votre requête). #57857 (Duc Canh Le).
- Prend en compte les lignes supprimées par lightweight delete lors de la sélection des parts à fusionner, afin de mieux estimer la taille sur disque de la part résultante. #58223 (Zhuo Qiu).
- Ajout de commentaires sur les colonnes dans davantage de tables système. Suite de https://github.com/ClickHouse/ClickHouse/pull/58356. #59016 (Nikita Mikhaylov).
- Il est désormais possible d’utiliser des colonnes virtuelles dans PREWHERE. Cela est utile pour les colonnes virtuelles non constantes comme
_part_offset. #59033 (Amos Bird). Amélioration générale de l’utilisation des colonnes virtuelles. Il est désormais autorisé d’utiliser des colonnes virtuelles dansPREWHERE(cela est utile pour les colonnes virtuelles non constantes comme_part_offset). Une documentation intégrée est désormais disponible pour les colonnes virtuelles sous la forme d’un commentaire de colonne dans la requêteDESCRIBElorsque le paramètredescribe_include_virtual_columnsest activé. #60205 (Anton Popov). - Au lieu d’utiliser une clé constante, le stockage d’objets génère désormais une clé pour déterminer la capacité de suppression d’objets. #59495 (Sema Checherinda).
- Autorise “local” comme type de stockage d’objets à la place de “local_blob_storage”. #60165 (Kseniia Sumarokova).
- Flush parallèle des blocks INSERT en attente du moteur Distributed lors de
DETACH, de l’arrêt du serveur et deSYSTEM FLUSH DISTRIBUTED(le parallélisme ne fonctionnera que si vous avez une policy multi-disques pour une table, comme c’est déjà le cas pour tout dans le moteur Distributed). #60225 (Azat Khuzhin). - Ajout d’un paramètre pour forcer le cache en lecture directe pour les fusions. #60308 (Kseniia Sumarokova).
- Amélioration du protocole de compatibilité MySQL. Le ticket #57598 mentionne un comportement différent concernant la gestion des transactions. L’envoi d’un COMMIT/ROLLBACK lorsqu’aucune transaction n’est active est signalé comme une erreur, contrairement au comportement de MySQL. #60338 (PapaToemmsn).
- La fonction
substringdispose désormais d’un nouvel alias,byteSlice. #60494 (Robert Schulze). - Le paramètre serveur
dns_cache_max_sizea été renommé endns_cache_max_entriesafin de réduire toute ambiguïté. #60500 (Kirill Nikiforov). SHOW INDEX | INDEXES | INDICES | KEYSne trie plus selon les colonnes de clé primaire (ce qui n’était pas intuitif). #60514 (Robert Schulze).- Amélioration de Keeper : interruption du démarrage si un snapshot invalide est détecté, afin d’éviter toute perte de données. #60537 (Antonio Andelic).
- Mise à jour de tzdata vers 2024a. #60768 (Raúl Marín).
- Amélioration de Keeper : prise en charge de
leadership_expiry_msdans les paramètres de Keeper. #60806 (Brokenice0415). - Toujours inférer les nombres en notation exponentielle dans les formats JSON, quel que soit le paramètre
input_format_try_infer_exponent_floats. Ajout du paramètreinput_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects, qui permet d’utiliser le type String pour les chemins ambigus au lieu de lever une exception lors de l’inférence de tuples nommés à partir d’objets JSON. #60808 (Kruglov Pavel). - Ajout de la prise en charge de la syntaxe
START TRANSACTION, couramment utilisée avec MySQL, ce qui résout https://github.com/ClickHouse/ClickHouse/discussions/60865. #60886 (Zach Naimon). - Ajout d’un indicateur pour l’algorithme de jointure par fusion avec tri complet afin de traiter null comme la plus grande ou la plus petite valeur. Le comportement peut ainsi être rendu compatible avec d’autres systèmes SQL, comme Apache Spark. #60896 (loudongfeng).
- Prise en charge de la détection du format de sortie à partir de l’extension du fichier dans
clickhouse-clientetclickhouse-local. #61036 (豪肥肥). - Mise à jour de la limite de mémoire à l’exécution lorsque la valeur des cgroups Linux change. #61049 (Han Fei).
- Ajout de la fonction
toUInt128OrZero, qui avait été omise par erreur (cette erreur est liée à https://github.com/ClickHouse/ClickHouse/pull/945). Les alias de compatibilitéFROM_UNIXTIMEetDATE_FORMAT(ils ne sont pas natifs de ClickHouse et n’existent que pour la compatibilité MySQL) sont désormais insensibles à la casse, comme attendu pour des alias de compatibilité SQL. #61114 (Alexey Milovidov). - Amélioration des vérifications d’accès, permettant de révoquer des droits non détenus lorsque l’utilisateur cible ne possède pas non plus les privilèges de révocation. Exemple :
GRANT SELECT ON *.* TO user1; REVOKE SELECT ON system.* FROM user1;. #61115 (pufit). - Correction de la fonction
has()avec une colonneNullable(corrige #60214). #61249 (Mikhail Koviazin). - Il est désormais possible de spécifier l’attribut
merge="true"dans les substitutions de configuration pour les sous-arbres<include from_zk="/path" merge="true">. Si cet attribut est spécifié, ClickHouse fusionnera le sous-arbre avec la configuration existante ; sinon, le comportement par défaut consiste à ajouter le nouveau contenu à la configuration. #61299 (alesapin). - Ajout de métriques asynchrones pour les mappings mémoire de la mémoire virtuelle :
VMMaxMapCount&VMNumMaps. Clôt #60662. #61354 (Tuan Pham Anh). - Utilise le paramètre
temporary_files_codecpartout où des données temporaires sont créées, par exemple pour le tri en mémoire externe et le GROUP BY en mémoire externe. Auparavant, cela ne fonctionnait que dans l’algorithme de JOINpartial_merge. #61456 (Maksim Kita). - Ajout d’un nouveau paramètre
max_parser_backtrackspermettant de limiter la complexité de l’analyse des query. #61502 (Alexey Milovidov). - Réduction de la contention lors du redimensionnement dynamique du filesystem cache. #61524 (Kseniia Sumarokova).
- Désactivation du mode segmenté de la queue StorageS3, car il sera réécrit. #61537 (Kseniia Sumarokova).
- Correction d’une faute de frappe :
use_leagcy_max_leveldevientuse_legacy_max_level. #61545 (William Schoeffel). - Suppression de certaines entrées en double dans
system.blob_storage_log. #61622 (YenchangChan). - Ajout de la fonction
current_usercomme alias de compatibilité pour MySQL. #61770 (Yarik Briukhovetskyi). - Correction d’états de fonctions d’agrégation à virgule flottante incohérents dans des clusters mixtes x86-64 / ARM #60610 (Harry Lee).
Amélioration de la compilation/des tests/du packaging
- Le query profiler en temps réel fonctionne désormais sur AArch64. Dans les versions précédentes, il ne fonctionnait que lorsqu’un programme ne passait pas de temps dans un appel système. #60807 (Alexey Milovidov).
- La version de ClickHouse a été ajoutée aux labels Docker. Résout #54224. #60949 (Nikolay Monkov).
- Mise à niveau de
prqlcvers la version 0.11.3. #60616 (Maximilian Roos). - Ajout d’un fuzzer générique pour le texte des requêtes dans
clickhouse-local. #61508 (Alexey Milovidov).
Correction de bug (dysfonctionnement visible par l’utilisateur dans une version stable officielle)
- Correction de finished_mutations_to_keep=0 pour MergeTree (comme l’indique la documentation, 0 signifie tout conserver) #60031 (Azat Khuzhin).
- Un problème affectait l’optimisation FINAL ; voici comment l’auteur le décrit : “PartsSplitter invalid ranges for the same part”. #60041 (Maksim Kita).
- Un problème affectait Apache Hive, qui est expérimental et non pris en charge. #60262 (shanfengp).
- Une amélioration pour les répliques parallèles expérimentales : forcer une nouvelle analyse si les répliques parallèles ont changé #60362 (Raúl Marín).
- Correction de l’utilisation du type de métadonnées simple avec la nouvelle option de configuration
disks#60396 (Kseniia Sumarokova). - Tentative de correction de l’erreur logique ‘Cannot capture column because it has incompatible type’ dans mapContainsKeyLike #60451 (Kruglov Pavel).
- Éviter le calcul des sous-requêtes scalaires pour CREATE TABLE. #60464 (Nikolai Kochetov).
- Correction d’un interblocage lors de l’analyse en parallèle quand de nombreuses lignes sont ignorées à cause d’erreurs #60516 (Kruglov Pavel).
- Un problème affectait la prise en charge expérimentale de KQL (Kusto) : correction de
max_query_size_for_kql_compound_operator: #60534 (Yong Wang). - Correction dans Keeper : ajout de timeouts lors de l’attente des journaux de commit #60544 (Antonio Andelic).
- Ne plus afficher d’astuces numériques pour les types Date #60577 (Raúl Marín).
- Correction de la lecture depuis MergeTree avec des fonctions non déterministes dans le filtre #60586 (Kruglov Pavel).
- Correction d’une erreur logique en cas de mauvais type de valeur pour le paramètre de compatibilité #60596 (Kruglov Pavel).
- fix(prql) : gestion robuste des panic #60615 (Maximilian Roos).
- Correction de
intDivpour les arguments Decimal et Date #60672 (Yarik Briukhovetskyi). - Correction : développer la CTE dans la requête alter modify #60682 (Yakov Olkhovskiy).
- Correction de system.parts pour le database engine non-Atomic/Ordinary (c.-à-d. Memory) #60689 (Azat Khuzhin).
- Correction de “Invalid storage definition in metadata file” pour les vues paramétrées #60708 (Azat Khuzhin).
- Correction d’un dépassement de tampon dans CompressionCodecMultiple #60731 (Alexey Milovidov).
- Supprime des incohérences dans SQL/JSON #60738 (Alexey Milovidov).
- Supprime une assertion incorrecte dans la fonction d’agrégation quantileGK #60740 (李扬).
- Corrige un bug de insert-select + insert_deduplication_token en définissant streams à 1 #60745 (Jordi Villar).
- Empêche la définition d’en-têtes de métadonnées personnalisés sur des opérations de multipart upload non prises en charge #60748 (Francisco J. Jurado Moreno).
- Corrige toStartOfInterval #60763 (Andrey Zvonov).
- Corrige un crash dans arrayEnumerateRanked #60764 (Raúl Marín).
- Corrige un crash lors de l’utilisation de input() dans INSERT SELECT JOIN #60765 (Kruglov Pavel).
- Corrige un crash lorsque allow_experimental_analyzer a une valeur différente dans les sous-requêtes #60770 (Dmitry Novik).
- Supprime la récursion lors de la lecture depuis S3 #60849 (Antonio Andelic).
- Corrige un blocage possible en cas d’erreur dans HashedDictionaryParallelLoader #60926 (vdimir).
- Corrige RESTORE asynchrone avec une base de données Replicated (fonctionnalité expérimentale) #60934 (Antonio Andelic).
- Corrige un interblocage dans les inserts asynchrones vers les tables
Logvia le protocole natif #61055 (Anton Popov). - Corrige l’exécution différée de l’argument par défaut dans dictGetOrDefault pour RangeHashedDictionary #61196 (Kruglov Pavel).
- Corrige plusieurs bugs dans groupArraySorted #61203 (Raúl Marín).
- Corrige la reconfiguration de Keeper pour le binaire autonome #61233 (Antonio Andelic).
- Corrige l’utilisation de session_token dans le moteur S3 #61234 (Kruglov Pavel).
- Corrige un résultat potentiellement incorrect de la fonction d’agrégation
uniqExact#61257 (Anton Popov). - Corrige des bugs dans SHOW DATABASE #61269 (Raúl Marín).
- Corrige une erreur logique dans le stockage RabbitMQ avec des colonnes MATERIALIZED #61320 (vdimir).
- Corrige CREATE OR REPLACE DICTIONARY #61356 (Vitaly Baranov).
- Corrige une requête ATTACH avec ON CLUSTER externe #61365 (Nikolay Degterinsky).
- Corrige l’optimisation des clés consécutives pour les clés Nullable #61393 (Anton Popov).
- corrige le problème de fractionnement du DAG d’actions #61458 (Raúl Marín).
- Corrige la finalisation d’un RESTORE en échec #61466 (Vitaly Baranov).
- Désactive correctement async_insert_use_adaptive_busy_timeout avec les paramètres de compatibilité #61468 (Raúl Marín).
- Autorise la mise en file d’attente dans le pool de restauration #61475 (Nikita Taranov).
- Corrige une incohérence lors de la lecture de system.parts à l’aide d’un UUID. #61479 (Dan Wu).
- Corrige ALTER QUERY MODIFY SQL SECURITY #61480 (pufit).
- Corrige un crash dans window view (fonctionnalité expérimentale) #61526 (Alexey Milovidov).
- Corrige
repeatavec des entiers non natifs #61527 (Antonio Andelic). - Corrige l’argument
-sdu client #61530 (Mikhail f. Shiryaev). - Corrige un crash dans arrayPartialReverseSort #61539 (Raúl Marín).
- Corrige la recherche de chaînes avec une position constante #61547 (Antonio Andelic).
- Corrige l’erreur provoquée par addDays lorsqu’il est utilisé avec DateTime64 #61561 (Shuai li).
- Interdit le type d’entrée LowCardinality pour JSONExtract #61617 (Julia Kartseva).
- Corrige
system.part_logpour async insert avec déduplication #61620 (Antonio Andelic). - Corrige une exception
Non-ready setpour system.parts. #61666 (Nikolai Kochetov). - Corrige actual_part_name pour REPLACE_RANGE (
Entry actual part isn't empty yet) #61675 (Alexander Tokmakov). - Corrige un signalement du sanitizer dans
multiSearchAllPositionsCaseInsensitiveUTF8pour un UTF-8 incorrect #61749 (pufit). - Corrige le fait que le frame RANGE n’est pas pris en charge pour les colonnes Nullable. #61766 (YuanLiu).
Version 24.2 de ClickHouse, 2024-02-29. Présentation, Vidéo
Changement incompatible avec les versions précédentes
- Validation des types suspects/expérimentaux dans les types imbriqués. Auparavant, nous ne validions pas ces types (sauf JSON) dans des types imbriqués comme Array/Tuple/Map. #59385 (Kruglov Pavel).
- Ajout d’une vérification de cohérence pour le nombre de threads et la taille des blocs. #60138 (Raúl Marín).
- Ne plus inférer les Float en notation exponentielle par défaut. Ajout du paramètre
input_format_try_infer_exponent_floatspour restaurer le comportement précédent (désactivé par défaut). Clôt #59476. #59500 (Kruglov Pavel). - Autorisation des opérations alter entre parenthèses. L’ajout des parenthèses peut être contrôlé via la configuration
format_alter_operations_with_parentheses. Par défaut, dans les requêtes formatées, les parenthèses sont ajoutées, car nous stockons les opérations alter formatées à certains endroits comme métadonnées (par exemple : mutations). La nouvelle syntaxe clarifie certaines requêtes dans lesquelles les opérations alter se terminent par une liste. Par exemple :ALTER TABLE x MODIFY TTL date GROUP BY a, b, DROP COLUMN cne peut pas être analysée correctement avec l’ancienne syntaxe. Avec la nouvelle syntaxe, la requêteALTER TABLE x (MODIFY TTL date GROUP BY a, b), (DROP COLUMN c)est sans ambiguïté. Les anciennes versions ne peuvent pas lire la nouvelle syntaxe ; par conséquent, son utilisation peut poser problème si des versions récentes et anciennes de ClickHouse coexistent dans un même cluster. #59532 (János Benjamin Antal). - Correctif d’un problème de sécurité des vues matérialisées, qui permettait à un utilisateur d’insérer dans une table sans disposer des privilèges requis. Le correctif vérifie que l’utilisateur a les droits nécessaires pour insérer non seulement dans une vue matérialisée, mais aussi dans toutes les tables sous-jacentes. Cela signifie que certaines requêtes, qui fonctionnaient auparavant, peuvent désormais échouer avec
Not enough privileges. Pour résoudre ce problème, cette release introduit une nouvelle fonctionnalité de SQL security pour les vues https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security. #54901 #60439 (pufit).
Nouvelle fonctionnalité
- Ajout d’une nouvelle syntaxe permettant de spécifier l’utilisateur définisseur dans une vue/vue matérialisée. Cela permet d’exécuter des SELECT/INSERT à partir de vues sans privilèges explicites sur les tables sous-jacentes. Une vue encapsule donc les privilèges. #54901 #60439 (pufit).
- Détection automatique du format de fichier lors de l’inférence de schéma s’il est inconnu dans les moteurs
file/s3/hdfs/url/azureBlobStorage. Clôture #50576. #59092 (Kruglov Pavel). - Mise en œuvre de l’ajustement automatique des délais d’attente des insertions asynchrones. Les settings suivants sont introduits : async_insert_poll_timeout_ms, async_insert_use_adaptive_busy_timeout, async_insert_busy_timeout_min_ms, async_insert_busy_timeout_max_ms, async_insert_busy_timeout_increase_rate, async_insert_busy_timeout_decrease_rate. #58486 (Julia Kartseva).
- Possibilité de définir un quota pour le nombre maximal d’échecs de connexion séquentiels. #54737 (Alexey Gerasimchuck).
- Nouvelle fonction d’agrégation
groupArrayIntersect. Suite de #49862. #59598 (Yarik Briukhovetskyi). - Prise en charge de Backup & Restore pour
AzureBlobStorage. Résout #50747. #56988 (SmitaRKulkarni). - L’utilisateur peut désormais spécifier directement la chaîne Template dans la requête à l’aide de
format_schema_rows_templatecomme alternative àformat_template_row. Clôture #31363. #59088 (Shaun Struwig). - Mise en œuvre de la conversion automatique de tables MergeTree de différents types vers le moteur Replicated. Créez un fichier vide
convert_to_replicateddans le répertoire de données de la table (/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/) et cette table sera convertie automatiquement au prochain démarrage du serveur. #57798 (Kirill). - Ajout de la requête
ALTER TABLE table FORGET PARTITION partition, qui supprime les nœuds ZooKeeper liés à une partition vide. #59507 (Sergei Trifonov). Il s’agit d’une fonctionnalité destinée aux experts. - Prise en charge d’un fichier de credentials JWT pour le moteur de table NATS. #59543 (Nickolaj Jepsen).
- Mise en œuvre de la table
system.dns_cache, qui peut être utile pour le débogage des problèmes DNS. #59856 (Kirill Nikiforov). - Le codec
LZ4HCacceptera un nouveau niveau 2, plus rapide que l’ancien niveau minimum 3, au prix d’une compression moindre. Dans les versions précédentes,LZ4HC(2)et toute valeur inférieure étaient équivalents àLZ4HC(3). Auteur : Cyan4973. #60090 (Alexey Milovidov). - Ajout de la table
system.dns_cache, qui peut être utile pour le débogage de problèmes DNS. Nouveau paramètre du serveur dns_cache_max_size. #60257 (Kirill Nikiforov). - Prise en charge de la version à argument unique pour la fonction de table
merge, sous la formemerge(['db_name', ] 'tables_regexp'). #60372 (豪肥肥). - Prise en charge des arguments positionnels négatifs. Clôture de #57736. #58292 (flynn).
- Prise en charge de la définition d’un ensemble d’utilisateurs autorisés pour certains paramètres S3 dans la config à l’aide de la clé
user. #60144 (Antonio Andelic). - Ajout de la fonction de table
mergeTreeIndex. Elle représente le contenu des fichiers d’index et de marks des tablesMergeTree. Elle peut être utilisée pour l’introspection. Syntaxe :mergeTreeIndex(database, table, [with_marks = true]), oùdatabase.tableest une table existante utilisant le moteurMergeTree. #58140 (Anton Popov).
Fonctionnalité expérimentale
- Ajout de la fonction
seriesOutliersDetectTukeypour détecter les valeurs aberrantes dans des données de séries chronologiques à l’aide de l’algorithme des bornes de Tukey. #58632 (Bhavna Jindal). Gardez à l’esprit que ce comportement sera modifié dans la prochaine version corrective. - Ajout de la fonction
variantType, qui renvoie un Enum contenant le nom du type de variante pour chaque ligne. #59398 (Kruglov Pavel). - Prise en charge de
LEFT JOIN,ALL INNER JOINet des sous-requêtes simples pour les répliques parallèles (uniquement avec analyzer). Le nouveau paramètreparallel_replicas_prefer_local_joinsélectionne l’exécution locale deJOIN(par défaut) ouGLOBAL JOIN. Toutes les tables doivent exister sur chaque réplique decluster_for_parallel_replicas. Les nouveaux paramètresmin_external_table_block_size_rowsetmin_external_table_block_size_bytesservent à regrouper les petits blocs envoyés pour les tables temporaires (uniquement avec analyzer). #58916 (Nikolai Kochetov). - Autorise la création concurrente de tables dans la base de données
Replicatedlors de l’ajout ou de la restauration d’une nouvelle réplique. #59277 (Konstantin Bogdanov). - Implémente l’opérateur de comparaison pour les valeurs
Variantainsi que l’insertion correcte de Field dans une colonneVariant. N’autorise pas, par défaut, la création du typeVariantavec des types de variante similaires (autorisé avec le paramètreallow_suspicious_variant_types). Résout #59996. Résout #59850. #60198 (Kruglov Pavel). - Désactive les
JOINde répliques parallèles avec CTE (sans analyzer) #59239 (Raúl Marín).
Amélioration des performances
- La clé primaire utilisera moins de mémoire. #60049 (Alexey Milovidov).
- Réduit l’utilisation de la mémoire pour la clé primaire et certaines autres opérations. #60050 (Alexey Milovidov).
- Les clés primaires des tables seront chargées en mémoire de manière paresseuse, lors du premier accès. Ce comportement est contrôlé par le nouveau paramètre MergeTree
primary_key_lazy_load, activé par défaut. Cela présente plusieurs avantages : - elles ne seront pas chargées pour les tables qui ne sont pas utilisées ; - s’il n’y a pas assez de mémoire, une exception sera levée lors de la première utilisation plutôt qu’au démarrage du serveur. Cela a aussi plusieurs inconvénients : - la latence de chargement de la clé primaire sera reportée à la première requête, au lieu d’être absorbée avant l’acceptation des connexions ; cela peut théoriquement entraîner un problème d’emballement. Ceci clôt #11188. #60093 (Alexey Milovidov). - Fonctions de distance vectorisées utilisées pour la recherche vectorielle. #58866 (Robert Schulze).
- Fonction vectorisée
dotProduct, utile pour la recherche vectorielle. #60202 (Robert Schulze). - Ajoute l’évaluation en court-circuit pour la fonction
dictGetOrDefault. Clôt #52098. #57767 (jsc0218). - Amélioration de Keeper : ne met en cache en mémoire qu’une certaine quantité de logs, contrôlée par
latest_logs_cache_size_thresholdetcommit_logs_cache_size_threshold. #59460 (Antonio Andelic). - Amélioration de Keeper : réduit encore la taille du nœud de données. #59592 (Antonio Andelic).
- Poursuit l’optimisation des ratés de prédiction de branchement de la fonction
iflorsque le type de résultat estFloat*/Decimal*/*Int*, dans la continuité de https://github.com/ClickHouse/ClickHouse/pull/57885. #59148 (李扬). - Optimise la fonction
iflorsque le type d’entrée estMap, avec un gain de performance pouvant atteindre ~10x. #59413 (李扬). - Améliore les performances du type
Int8en implémentant le strict aliasing (nous l’avons déjà pourUInt8et tous les autres types entiers). #59485 (Raúl Marín). - Optimise conditionnellement les performances de sum/avg pour les types bigint et big decimal en réduisant les ratés de prédiction de branchement. #59504 (李扬).
- Améliore les performances des
SELECTavec des mutations actives. #59531 (Azat Khuzhin). - Fonction
isNotNulloptimisée avec AVX2. #59621 (李扬). - Améliore les performances de ASOF JOIN pour les données triées ou presque triées. #59731 (Maksim Kita).
- La précédente valeur par défaut de
async_insert_max_data_size, fixée à 1 MB, s’est avérée trop faible. La nouvelle sera de 10 MiB. #59536 (Nikita Mikhaylov). - Utilisation de plusieurs threads lors de la lecture des métadonnées des tables depuis une sauvegarde pendant l’exécution de la commande RESTORE. #60040 (Vitaly Baranov).
- Désormais, si
StorageBufferpossède plus d’un segment (num_layers> 1), le flush en arrière-plan s’effectuera simultanément pour tous les segments, sur plusieurs threads. #60111 (alesapin).
Amélioration
- Lorsque le format de sortie est
Prettyet qu’un bloc contient une seule valeur numérique supérieure à un million, un nombre lisible est affiché à droite du tableau. #60379 (rogeryk). - Ajout des paramètres
split_parts_ranges_into_intersecting_and_non_intersecting_finaletsplit_intersecting_parts_ranges_into_layers_final. Ces paramètres servent à désactiver les optimisations pour les querys avecFINALet sont uniquement destinés au débogage. #59705 (Maksim Kita). En réalité, pas seulement : ils peuvent aussi réduire l’utilisation de la mémoire au détriment des performances. - Renommage du paramètre
extract_kvp_max_pairs_per_rowenextract_key_value_pairs_max_pairs_per_row. Le problème (abréviation inutile dans le nom du paramètre) a été introduit dans https://github.com/ClickHouse/ClickHouse/pull/43606. Correction de la documentation de ce paramètre. #59683 (Alexey Milovidov). #59960 (jsc0218). - L’exécution de
ALTER COLUMN MATERIALIZEsur une colonne avec une expressionDEFAULTouMATERIALIZEDrespecte désormais précisément la sémantique attendue. #58023 (Duc Canh Le). - Activation d’une logique de backoff exponentiel pour les erreurs survenant pendant les mutations. Cela réduira l’utilisation du CPU, l’utilisation de la mémoire et la taille des fichiers journaux. #58036 (MikhailBurdukov).
- Ajout d’une amélioration pour comptabiliser l’événement de profil
InitialQuery. #58195 (Unalian). - Possibilité de définir
volume_prioritydansstorage_configuration. #58533 (Andrey Zvonov). - Ajout de la prise en charge du type
Date32dans le codecT64. #58738 (Hongbin Ma). - Autorisation des virgules finales dans les types comportant plusieurs éléments. #59119 (Aleksandr Musorin).
- Les paramètres du Distributed table engine peuvent désormais être spécifiés dans le server configuration file (comme les paramètres de MergeTree), par exemple
<distributed> <flush_on_detach>false</flush_on_detach> </distributed>. #59291 (Azat Khuzhin). - Nouvelle tentative après déconnexion ou expiration de session lors de la lecture de
system.zookeeper. Cela est utile lors de la lecture d’un grand nombre de lignes de la tablesystem.zookeeper, en particulier en présence de déconnexions injectées pour les tests de panne. #59388 (Alexander Gololobov). - Ne plus interpréter les nombres avec des zéros initiaux comme des valeurs octales lorsque
input_format_values_interpret_expressions=0. #59403 (Joanna Hulboj). - Au démarrage et à chaque modification des fichiers de configuration, ClickHouse met à jour les limites strictes de mémoire de son memory tracker global. Ces limites sont calculées à partir de divers paramètres serveur et des limites des cgroups (sous Linux). Auparavant, le paramètre
/sys/fs/cgroup/memory.max(pour cgroups v2) était codé en dur. Par conséquent, les limites de mémoire cgroup v2 configurées pour des groupes imbriqués (hiérarchies), par exemple/sys/fs/cgroup/my/nested/group/memory.max, étaient ignorées. Ce problème est désormais corrigé. Le comportement des limites de mémoire v1 reste inchangé. #59435 (Robert Schulze). - Nouveaux événements de profil ajoutés pour observer le temps passé à calculer les PK/projections/indices secondaires pendant les
INSERT. #59436 (Nikita Taranov). - Permet de définir un point de départ pour S3Queue en mode Ordered lors de la création à l’aide du paramètre
s3queue_last_processed_path. #59446 (Kseniia Sumarokova). - Les commentaires des tables système sont désormais également disponibles dans
system.tablesdansclickhouse-local. #59493 (Nikita Mikhaylov). - Table
system.zookeeper: auparavant, l’ensemble du résultat était accumulé en mémoire et renvoyé en un seul gros fragment. Ce changement devrait aider à réduire la consommation de mémoire lors de la lecture d’un grand nombre de lignes depuissystem.zookeeper, permettre d’afficher une progression intermédiaire (combien de lignes ont été lues jusqu’à présent) et éviter les délais d’expiration de la connexion lorsque l’ensemble de résultats est volumineux. #59545 (Alexander Gololobov). - Le tableau de bord comprend désormais aussi bien l’état compressé que non compressé du #hash des URL (rétrocompatibilité). Suite de #59124. #59548 (Amos Bird).
- Mise à niveau d’Intel QPL (utilisé par le codec
DEFLATE_QPL) de v1.3.1 à v1.4.0. Correction également d’un bug du mécanisme de délai d’expiration du polling : nous avons observé que, dans certains cas, le délai d’expiration ne fonctionnait pas correctement ; lorsqu’il expirait, IAA et le CPU pouvaient traiter le buffer de manière concurrente. Pour l’instant, il vaut mieux s’assurer que le statut du codec IAA n’est pas QPL_STS_BEING_PROCESSED, puis basculer vers le codec logiciel. #59551 (jasperzhu). - N’affichez pas d’avertissement concernant la version du serveur dans ClickHouse Cloud, car ClickHouse Cloud gère automatiquement et de manière transparente les mises à niveau. #59657 (Alexey Milovidov).
- Après l’auto-extraction, le binaire temporaire est déplacé au lieu d’être copié. #59661 (Yakov Olkhovskiy).
- Correction du déroulage de pile sur Apple macOS. Cela résout #53653. #59690 (Nikita Mikhaylov).
- Vérifie le débordement de pile dans les parseurs même si l’utilisateur a mal configuré le paramètre
max_parser_depthà une valeur très élevée. Cela résout #59622. #59697 (Alexey Milovidov). #60434 - Uniformise le comportement des named collections créées via XML et SQL dans le stockage Kafka. #59710 (Pervakov Grigorii).
- Lorsque
merge_max_block_size_bytesest suffisamment petit et que les tables contiennent des lignes volumineuses (chaînes ou tuples), les fusions en arrière-plan peuvent rester bloquées dans une boucle infinie. Ce comportement est corrigé. Suite de https://github.com/ClickHouse/ClickHouse/pull/59340. #59812 (Nikita Mikhaylov). - Autorise uuid dans replica_path si CREATE TABLE l’indique explicitement. #59908 (Azat Khuzhin).
- Ajout de la colonne
metadata_versionpour les tables ReplicatedMergeTree dans la table systèmesystem.tables. #59942 (Maksim Kita). - Amélioration de Keeper : n’envoyer à Prometheus que les métriques/événements liés à Keeper. #59945 (Antonio Andelic).
- Le tableau de bord affichera les métriques de différentes versions de ClickHouse, même si la structure des tables système a changé après la mise à niveau. #59967 (Alexey Milovidov).
- Autoriser le chargement des informations AZ à partir d’un fichier. #59976 (Konstantin Bogdanov).
- Amélioration de Keeper : ajout de tentatives en cas d’échec pour les opérations liées aux disques. #59980 (Antonio Andelic).
- Ajout du nouveau paramètre de configuration
backups.remove_backup_files_after_failure:<clickhouse> <backups> <remove_backup_files_after_failure>true</remove_backup_files_after_failure> </backups> </clickhouse>. #60002 (Vitaly Baranov). - Pour la copie de fichiers S3, ajout d’un mécanisme de secours GCP vers une copie via tampon lorsque GCP renvoie
Internal Erroravec le code d’erreur HTTPGATEWAY_TIMEOUT. #60164 (Maksim Kita). - Exécution avec court-circuit pour
ULIDStringToDateTime. #60211 (Juan Madurga). - Ajout de la colonne
query_idpour les tablessystem.backupsetsystem.backup_log. Ajout de la stacktrace de l’erreur dans la colonneerror. #60220 (Maksim Kita). - Les connexions via le port MySQL utilisent désormais automatiquement le paramètre
prefer_column_name_to_alias = 1afin de prendre en charge QuickSight immédiatement. De plus, les paramètresmysql_map_string_to_text_in_show_columnsetmysql_map_fixed_string_to_text_in_show_columnssont désormais activés par défaut, et n’affectent eux aussi que les connexions MySQL. Cela améliore la compatibilité avec davantage d’outils BI. #60365 (Robert Schulze). - Correction d’une condition de concurrence dans le code JavaScript entraînant la superposition de graphiques dupliqués. #60392 (Alexey Milovidov).
amélioration de la compilation/des tests/du packaging
- Ajout de builds et de tests avec collecte de couverture pour l’introspection. Suite de #56102. #58792 (Alexey Milovidov).
- Mise à jour de la toolchain Rust dans
corrosion-cmakelorsque la variable de toolchain de cross-compilation CMake est définie. #59309 (Aris Tritas). - Ajout de fuzzing à ASTLiterals. #59383 (Raúl Marín).
- Si vous souhaitez exécuter les scripts initdb à chaque démarrage du conteneur ClickHouse, vous devez définir la variable d’environnement CLICKHOUSE_ALWAYS_RUN_INITDB_SCRIPTS. #59808 (Alexander Nikolaev).
- Suppression de la possibilité de désactiver les composants génériques de ClickHouse (comme server/client/…), tout en conservant ceux qui nécessitent des bibliothèques supplémentaires (comme ODBC ou Keeper). #59857 (Azat Khuzhin).
- Le fuzzer de requêtes prendra désormais en compte les SETTINGS dans les requêtes. #60087 (Alexey Milovidov).
- Ajout de la prise en charge de la compilation de ClickHouse avec clang-19 (master). #60448 (Alexey Milovidov).
Correction de bug (dysfonctionnement visible par l’utilisateur dans une version stable officielle)
- Corrige une erreur “Non-ready set” dans TTL WHERE. #57430 (Nikolai Kochetov).
- Corrige un bug dans la fonction
quantilesGK#58216 (李扬). - Corrige un comportement incorrect de
intDivavec des arguments Decimal #59243 (Yarik Briukhovetskyi). - Corrige
translateavec une entrée FixedString #59356 (Raúl Marín). - Corrige le calcul du digest dans Keeper #59439 (Antonio Andelic).
- Corrige les stacktraces pour les binaires sans symboles de débogage #59444 (Azat Khuzhin).
- Corrige
ASTAlterCommand::formatImpldans le cas de paramètres spécifiques à une colonne… #59445 (János Benjamin Antal). - Corrige
SELECT * FROM [...] ORDER BY ALLavec Analyzer #59462 (zhongyuankai). - Corrige une exception potentiellement non interceptée lors de l’annulation d’une requête distribuée #59487 (Azat Khuzhin).
- Fait en sorte que MAX utilise les mêmes règles que permutation pour les types complexes #59498 (Raúl Marín).
- Corrige un cas limite lors de l’utilisation de
update_insert_deduplication_token_in_dependent_materialized_views#59544 (Jordi Villar). - Corrige le résultat incorrect de arrayElement / map avec une valeur vide #59594 (Raúl Marín).
- Corrige un crash dans topK lors de la fusion d’états vides #59603 (Raúl Marín).
- Corrige une table distribuée avec une clé de sharding constante #59606 (Vitaly Baranov).
- Corrige un problème KQL détecté par WingFuzz #59626 (Yong Wang).
- Corrige l’erreur “Read beyond last offset” pour AsynchronousBoundedReadBuffer #59630 (Vitaly Baranov).
- Préserve l’alias de fonction dans RewriteSumFunctionWithSumAndCountVisitor #59658 (Raúl Marín).
- Corrige l’heure de début des requêtes non initiales #59662 (Raúl Marín).
- Valide les types d’arguments pour l’index de skipping
minmax#59733 (Anton Popov). - Corrige la fonction leftPad / rightPad avec une entrée FixedString #59739 (Raúl Marín).
- Correction d’un problème de l’AST fuzzer dans la fonction
countMatches#59752 (Robert Schulze). - RabbitMQ : correction du cas où les messages n’étaient ni acquittés ni rejetés #59775 (Kseniia Sumarokova).
- Correction de StorageURL, qui exécutait une partie de la requête sur un seul thread #59833 (Michael Kolupaev).
- S3Queue : correction d’une valeur non initialisée #59897 (Kseniia Sumarokova).
- Correction de l’analyse syntaxique des expressions de partition entourées de parenthèses #59901 (János Benjamin Antal).
- Correction d’un plantage dans le format JSONColumnsWithMetadata via HTTP #59925 (Kruglov Pavel).
- Ne pas réécrire sum en count si la valeur de retour diffère dans l’analyseur #59926 (Azat Khuzhin).
- Correction d’un plantage à la lecture d’UniqExactSet #59928 (Maksim Kita).
- Correction d’une valeur metadata_version invalide dans ReplicatedMergeTree #59946 (Maksim Kita).
- Correction d’une data race dans
StorageDistributed#59987 (Nikita Taranov). - Docker : exécuter les scripts d’initialisation lorsque l’option est activée plutôt que lorsqu’elle est désactivée #59991 (jktng).
- Correction d’INSERT dans
SQLiteavec guillemet simple (en échappant les guillemets simples avec un guillemet au lieu d’un antislash) #60015 (Azat Khuzhin). - Correction de plusieurs erreurs logiques dans
arrayFold#60022 (Raúl Marín). - Correction de optimize_uniq_to_count, qui supprimait l’alias de colonne #60026 (Raúl Marín).
- Correction d’une exception possible de la table S3Queue lors d’un DROP #60036 (Kseniia Sumarokova).
- Correction du formatage de NOT avec des littéraux isolés #60042 (Raúl Marín).
- Utiliser max_query_size du contexte dans DDLLogEntry au lieu de la valeur 4096 codée en dur #60083 (Kruglov Pavel).
- Correction du formatage incohérent des requêtes contenant des tables nommées
table. Correction du formatage erroné des requêtes avecUNION ALL,INTERSECTetEXCEPTlorsque leur structure n’était pas linéaire. Cela clôt #52349. Correction du formatage erroné des requêtesSYSTEM, notammentSYSTEM ... DROP FILESYSTEM CACHE,SYSTEM ... REFRESH/START/STOP/CANCEL/TEST VIEW,SYSTEM ENABLE/DISABLE FAILPOINT. Correction du formatage des requêtes DDL paramétrées. Correction du formatage de la requêteDESCRIBE FILESYSTEM CACHE. Correction du formatage incorrect deSET param_...(une requête qui définit un paramètre). Correction du formatage incorrect des requêtesCREATE INDEX. Correction du formatage incohérent deCREATE USERet des requêtes similaires. Correction du formatage incohérent deCREATE SETTINGS PROFILE. Correction du formatage incorrect deALTER ... MODIFY REFRESH. Correction du formatage incohérent des fonctions de fenêtre si les offsets du frame étaient des expressions. Correction du formatage incohérent deRESPECT NULLSetIGNORE NULLSlorsqu’ils étaient utilisés après une fonction qui implémente un opérateur (commeplus). Correction du formatage absurde deSYSTEM SYNC REPLICA ... LIGHTWEIGHT FROM .... Correction du formatage incohérent des requêtes invalides avecGROUP BY GROUPING SETS ... WITH ROLLUP/CUBE/TOTALS. Correction du formatage incohérent deGRANT CURRENT GRANTS. Correction du formatage incohérent deCREATE TABLE (... COLLATE). De plus, j’ai corrigé le formatage incorrect deEXPLAINdans les sous-requêtes (#60102). Correction du formatage incorrect des fonctions lambda (#60012). Ajout d’une vérification pour qu’il soit impossible de laisser passer ces aberrations à l’avenir. #60095 (Alexey Milovidov). - Correction du formatage incohérent de
EXPLAINdans les sous-requêtes #60102 (Alexey Milovidov). - Correction d’un crash de cosineDistance avec Nullable #60150 (Raúl Marín).
- Autorisation du transtypage de booléens représentés sous forme de chaînes en véritables booléens #60160 (Robert Schulze).
- Correction de
system.s3queue_log#60166 (Kseniia Sumarokova). - Correction de arrayReduce avec un nom de fonction d’agrégation nullable #60188 (Raúl Marín).
- Masquage des informations sensibles pour
S3Queue#60233 (Kseniia Sumarokova). - Correction des codes d’exception HTTP. #60252 (Austin Kothig).
- S3Queue : correction d’un bug (corrige aussi le test instable test_storage_s3_queue/test.py::test_shards_distributed) #60282 (Kseniia Sumarokova).
- Correction d’une utilisation de valeur non initialisée et d’un résultat invalide dans les fonctions de hachage avec IPv6 #60359 (Kruglov Pavel).
- Correction de OptimizeDateOrDateTimeConverterWithPreimageVisitor avec des arguments NULL #60453 (Raúl Marín).
- Correction d’un bug mineur qui empêchait l’exécution sur les répliques des requêtes sur des tables distribuées envoyées par des clients utilisant le dialecte KQL ou PRQL. #59674. #60470 (Alexey Milovidov) #59674 (Austin Kothig).
version de ClickHouse 24.1, 2024-01-30. Presentation, Video
Changement incompatible avec les versions précédentes
- Le paramètre
print_pretty_type_namesest activé par défaut. Vous pouvez le désactiver pour conserver l’ancien comportement, ou utiliserSET compatibility = '23.12'. #57726 (Alexey Milovidov). - Le paramètre MergeTree
clean_deleted_rowsest déprécié et n’a désormais plus aucun effet. Le mot-cléCLEANUPpourOPTIMIZEn’est pas autorisé par défaut (sauf siallow_experimental_replacing_merge_with_cleanupest activé). #58316 (Alexander Tokmakov). - La fonction
reverseDNSQueryn’est plus disponible. Cela résout #58368. #58369 (Alexey Milovidov). - Activez diverses modifications pour améliorer le contrôle d’accès dans le fichier de configuration. Ces changements modifient le comportement, et vous devez vérifier
config.xmldans la sectionaccess_control_improvements. En cas de doute, conservez dans le fichier de configuration les valeurs de la version précédente. #58584 (Alexey Milovidov). - Améliore le fonctionnement de
sumMapFilteredavec les valeurs NaN. Les valeurs NaN sont désormais placées à la fin (au lieu d’être placées aléatoirement) et considérées comme différentes de toutes les autres valeurs.-0est désormais également traité comme égal à0; comme les valeurs 0 sont ignorées, les valeurs-0le sont aussi. #58959 (Raúl Marín). - La fonction
visibleWidthse comportera conformément à la documentation. Dans les versions précédentes, elle comptait simplement les points de code après sérialisation de la chaîne, comme la fonctionlengthUTF8, mais ne tenait pas compte des caractères de largeur nulle et des caractères combinés, des caractères pleine chasse, des tabulations et des suppressions. Ce comportement a désormais été ajusté en conséquence. Si vous souhaitez conserver l’ancien comportement, définissezfunction_visible_width_behaviorsur0, oucompatibilitysur23.12ou une version antérieure. #59022 (Alexey Milovidov). - Le dialecte
Kustoest désactivé jusqu’à ce que ces deux bogues soient corrigés : #59037 et #59036. #59305 (Alexey Milovidov). Toute tentative d’utiliserKustose soldera par une exception. - Une implémentation plus efficace du modificateur
FINALne garantit plus la préservation de l’ordre, même simax_threads = 1. Si vous vous appuyiez sur le comportement précédent, définissezenable_vertical_finalsur 0 oucompatibilitysur23.12.
Nouvelle fonctionnalité
- Implémente le type de données Variant, qui représente une union d’autres types de données. Le type
Variant(T1, T2, ..., TN)signifie que chaque ligne de ce type contient une valeur de typeT1,T2, …TN, ou aucune d’entre elles (valeurNULL). Le type Variant est disponible via le paramètreallow_experimental_variant_type. Référence : #54864. #58047 (Kruglov Pavel). - Certains paramètres (actuellement
min_compress_block_sizeetmax_compress_block_size) peuvent désormais être spécifiés au niveau des colonnes, auquel cas ils prévalent sur le paramètre correspondant au niveau de la table. Exemple :CREATE TABLE tab (col String SETTINGS (min_compress_block_size = 81920, max_compress_block_size = 163840)) ENGINE = MergeTree ORDER BY tuple();. #55201 (Duc Canh Le). - Ajoute la fonction d’agrégation
quantileDD, ainsi que les fonctions correspondantesquantilesDDetmedianDD. Elle est basée sur DDSketch https://www.vldb.org/pvldb/vol12/p2195-masson.pdf. ### Entrée de documentation pour les changements visibles par les utilisateurs. #56342 (Srikanth Chekuri). - Permet de configurer n’importe quel type de stockage objet avec n’importe quel type de métadonnées. #58357 (Kseniia Sumarokova).
- Ajout des modes
null_status_on_timeout_only_activeetthrow_only_activepourdistributed_ddl_output_mode, afin d’éviter d’attendre les répliques inactives. #58350 (Alexander Tokmakov). - Ajoute la fonction
arrayShinglespour calculer des sous-tableaux, par exemplearrayShingles([1, 2, 3, 4, 5], 3)renvoie[[1,2,3],[2,3,4],[3,4,5]]. #58396 (Zheng Miao). - Ajout des fonctions
punycodeEncode,punycodeDecode,idnaEncodeetidnaDecode, utiles pour convertir les noms de domaine internationaux en représentation ASCII conformément à la norme IDNA. #58454 (Robert Schulze). - Ajout des fonctions de similarité de chaînes
dramerauLevenshteinDistance,jaroSimilarityetjaroWinklerSimilarity. #58531 (Robert Schulze). - Ajoute deux paramètres :
output_format_compression_levelpour modifier le niveau de compression de sortie, etoutput_format_compression_zstd_window_logpour définir explicitement la taille de fenêtre de compression et activer le mode longue portée pour la compression zstd si la méthode de compression de sortie estzstd. S’applique àINTO OUTFILEet lors de l’écriture vers les fonctions de tablefile,url,hdfs,s3etazureBlobStorage. #58539 (Duc Canh Le). - Désactive automatiquement les séquences d’échappement ANSI dans les formats Pretty si la sortie n’est pas un terminal. Ajoute le nouveau mode
autoau paramètreoutput_format_pretty_color. #58614 (Shaun Struwig). - Ajout de la fonction
sqidDecode, qui décode les Sqids. #58544 (Robert Schulze). - Permet la lecture de valeurs Bool comme String dans les formats d’entrée JSON. Cela se fait via le paramètre
input_format_json_read_bools_as_strings, activé par défaut. #58561 (Kruglov Pavel). - Ajout de la fonction
seriesDecomposeSTL, qui décompose une série temporelle en une composante saisonnière, une tendance et une composante résiduelle. #57078 (Bhavna Jindal). - Introduction de MySQL Binlog Client pour MaterializedMySQL : une seule connexion binlog pour de nombreuses bases de données. #57323 (Val Doroshchuk).
- Intel QuickAssist Technology (QAT) fournit une compression et une cryptographie accélérées matériellement. ClickHouse dispose d’un nouveau codec de compression
ZSTD_QATqui utilise QAT pour la compression zstd. Le codec s’appuie sur QATlib d’Intel et le plugin QAT ZSTD d’Intel. Pour l’instant, seule la compression peut être accélérée matériellement (un mécanisme de repli logiciel prend le relais si QAT ne peut pas être initialisé) ; la décompression s’exécute toujours en logiciel. #57509 (jasperzhu). - Mise en œuvre d’une nouvelle méthode de génération des clés du stockage objet pour les disques S3. Le format peut désormais être défini selon la syntaxe regex
re2avec l’optionkey_templatedans la description du disque. #57663 (Sema Checherinda). - La table system.dropped_tables_parts contient les parts des tables de system.dropped_tables (tables supprimées mais pas encore retirées). #58038 (Yakov Olkhovskiy).
- Ajout du paramètre
max_materialized_views_size_for_tablepour limiter le nombre de vues matérialisées rattachées à une table. #58068 (zhongyuankai). - Améliorations de
clickhouse-format: prise en charge des requêtes INSERT avecVALUES; prise en charge des commentaires (utilisez--commentspour les afficher) ; prise en charge de l’option--max_line_lengthpour formater uniquement les requêtes longues sur plusieurs lignes. #58246 (vdimir). - Attache toutes les tables système dans
clickhouse-local, y comprissystem.parts. Cela résout #58312. #58359 (Alexey Milovidov). - Prise en charge des types de données
Enumdans la fonctiontransform. Cela résout #58241. #58360 (Alexey Milovidov). - Ajout de la table
system.database_engines. #58390 (Bharat Nallan). Permet d’enregistrer les moteurs de base de données indépendamment dans le code source. #58365 (Bharat Nallan). Permet d’enregistrer les interpréteurs indépendamment. #58443 (Bharat Nallan). - Ajout du modificateur
FROM <Replicas>pour la requêteSYSTEM SYNC REPLICA LIGHTWEIGHT. Le modificateurFROMgarantit que nous attendons les fetches et les drop-ranges uniquement pour les répliques source spécifiées, ainsi que pour toute réplique absente de ZooKeeper ou avec unsource_replicavide. #58393 (Jayme Bird). - Ajout du paramètre
update_insert_deduplication_token_in_dependent_materialized_views. Ce paramètre permet de mettre à jour le jeton de déduplication des insertions avec l’identifiant de la table lors d’un insert dans des vues matérialisées dépendantes. Clôt #59165. #59238 (Maksim Kita). - Ajout de l’instruction
SYSTEM RELOAD ASYNCHRONOUS METRICS, qui met à jour les métriques asynchrones. Principalement utile pour les tests et le développement. #53710 (Robert Schulze).
Amélioration des performances
- La coordination des répliques parallèles a été réécrite pour améliorer le parallélisme et la localité du cache. Elle a été testée avec une scalabilité linéaire sur des centaines de répliques. La lecture dans l’ordre est désormais également prise en charge. #57968 (Nikita Taranov).
- Remplace le buffering sortant HTTP par les buffers natifs de ClickHouse. Ajoute des métriques de comptage des octets pour les interfaces. #56064 (Yakov Olkhovskiy).
- Les états d’agrégation volumineux de
uniqExactseront fusionnés en parallèle dans les requêtes distribuées. #59009 (Nikita Taranov). - Réduction de l’utilisation mémoire après lecture depuis des tables
MergeTree. #59290 (Anton Popov). - Réduction de l’utilisation mémoire lors des fusions verticales. #59340 (Anton Popov).
- Évite une consommation mémoire excessive au démarrage de Keeper dans davantage de cas. #58455 (Antonio Andelic).
- Amélioration de Keeper : réduction de l’utilisation mémoire pour les nœuds stockés. #59002 (Antonio Andelic).
- Implémentation de FINAL davantage optimisée pour le cache. Remarque concernant le changement de comportement : auparavant, les requêtes avec le modificateur
FINALlues via un flux unique (par exemplemax_threads = 1) produisaient une sortie triée sans clauseORDER BYexplicitement fournie. Cela n’est plus garanti lorsqueenable_vertical_final = true(et c’est la valeur par défaut). #54366 (Duc Canh Le). - Évite une copie supplémentaire dans
ReadBufferFromIStream, utilisé, par exemple, pour la lecture depuis S3. #56961 (Nikita Taranov). - Optimise la fonction d’élément de tableau lorsque l’entrée est de type Array(Map)/Array(Array(Num)/Array(Array(String))/Array(BigInt)/Array(Decimal). Les implémentations précédentes effectuaient plus d’allocations que nécessaire. Le gain de performance apporté par cette optimisation peut atteindre ~6x, en particulier lorsque le type d’entrée est Array(Map). #56403 (李扬).
- Lit la colonne une seule fois lors de la lecture de plusieurs sous-colonnes dans des compact parts. #57631 (Kruglov Pavel).
- Réécrit l’AST de la fonction
sum(column + constant). Cette optimisation est disponible comme passe d’optimisation pour l’analyseur #57853 (Jiebin Sun). - L’évaluation de la fonction
matchutilise désormais les skipping indicesngrambf_v1ettokenbf_v1. #57882 (凌涛). - L’évaluation de la fonction
matchutilise désormais des indices inversés. #58284 (凌涛). - MergeTree
FINALne compare pas les lignes d’une même part non-L0. #58142 (Duc Canh Le). - Accélère les appels à iota (remplissage d’un tableau avec des nombres consécutifs). #58271 (Raúl Marín).
- Accélère MIN/MAX pour les types non numériques. #58334 (Raúl Marín).
- Optimiser la combinaison des filtres (comme dans PREWHERE à plusieurs étapes) avec les intrinsèques BMI2/SSE #58800 (Zhiguo Zhou).
- Utiliser un thread de moins dans
clickhouse-local. #58968 (Alexey Milovidov). - Améliorer les performances de la fonction
multiIflorsque le type est Nullable. #57745 (KevinyhZou). - Ajouter
SYSTEM JEMALLOC PURGEpour purger les pages jemalloc inutilisées,SYSTEM JEMALLOC [ ENABLE | DISABLE | FLUSH ] PROFILEpour contrôler le profil jemalloc si le profileur est activé. Ajouter la commande 4LW liée à jemalloc dans Keeper :jmstpour afficher les statistiques jemalloc,jmfp,jmep,jmdppour contrôler le profil jemalloc si le profileur est activé. #58665 (Antonio Andelic). - Réduire la consommation de mémoire des sauvegardes vers S3. #58962 (Vitaly Baranov).
Amélioration
- Ajout de commentaires (brèves descriptions) à toutes les colonnes des tables système. Il y a plusieurs raisons à cela : - Nous utilisons beaucoup les tables système, et il peut parfois être très difficile pour un développeur de comprendre le rôle et la signification d’une colonne donnée. - Nous modifions souvent les tables système (en ajoutant de nouvelles colonnes ou en modifiant celles qui existent déjà) et leur documentation est toujours obsolète. Par exemple, jetez un œil à la page de documentation de
system.parts. Il y manque beaucoup de colonnes - À terme, nous aimerions générer la documentation directement depuis ClickHouse. #58356 (Nikita Mikhaylov). - Autorise les requêtes sans alias pour les sous-requêtes avec
PASTE JOIN. #58654 (Yarik Briukhovetskyi). - Active l’intégration
MySQL/MariaDBsur macOS. Cela clôt #21191. #46316 (Alexey Milovidov) (Robert Schulze). - Désactive
max_rows_in_set_to_optimize_joinpar défaut. #56396 (vdimir). - Ajout du paramètre de config
<host_name>, qui permet d’éviter la résolution des noms d’hôte dans les requêtes DDL ON CLUSTER et les moteurs de base de données Replicated. Cela réduit le risque que la file d’attente se bloque en cas de modification de la définition du cluster. Clôt #57573. #57603 (Nikolay Degterinsky). - Augmente
load_metadata_threadsà 16 pour le cache du système de fichiers. Cela permettra au serveur de démarrer plus rapidement. #57732 (Alexey Milovidov). - Ajoute la possibilité de limiter les merges/mutations (
max_mutations_bandwidth_for_server/max_merges_bandwidth_for_server). #57877 (Azat Khuzhin). - Remplace la colonne non documentée (booléenne)
is_hot_reloadabledans la table systèmesystem.server_settingspar la colonne (Enum8)changeable_without_restart, avec les valeurs possiblesNo,Yes,IncreaseOnlyetDecreaseOnly. La colonne a également été documentée. #58029 (skyoct). - Cluster discovery prend désormais en charge la définition d’un nom d’utilisateur et d’un mot de passe, clôt #58063. #58123 (vdimir).
- Prise en charge des paramètres de requête dans
ALTER TABLE ... PART. #58297 (Azat Khuzhin). - Crée des consumers pour les tables Kafka à la volée (tout en les conservant pendant un certain temps —
kafka_consumers_pool_ttl_msdepuis leur dernière utilisation). Cela devrait corriger le problème des statistiques poursystem.kafka_consumers(qui ne consommait rien lorsque personne ne lisait depuis une table Kafka, ce qui entraînait une fuite mémoire active et un détachement lent de la table) et cette PR réactive également par défaut les statistiques poursystem.kafka_consumers. #58310 (Azat Khuzhin). sparkBarcomme alias desparkbar. #58335 (凌涛).- Évite l’envoi de requêtes
ComposeObjectaprès le téléversement versGCS. #58343 (Azat Khuzhin). - Gérer correctement les clés dont le nom contient un point dans les fichiers de configuration XML. #58354 (Azat Khuzhin).
- Faire en sorte que la fonction
formatrenvoie une constante lorsque ses arguments sont constants. Cela résout #58355. #58358 (Alexey Milovidov). - Ajout d’un paramètre
max_estimated_execution_timepour dissociermax_execution_timeetmax_estimated_execution_time. #58402 (Zhang Yifan). - Fournir une indication lorsqu’un nom de moteur de base de données non valide est utilisé. #58444 (Bharat Nallan).
- Ajouter des paramètres pour mieux contrôler le type des index dans le dictionnaire Arrow. Utiliser par défaut un type entier signé pour les index, comme le recommande Arrow. Résout #57401. #58519 (Kruglov Pavel).
- Implémente #58575 : prise en charge de la variable d’environnement
CLICKHOUSE_PASSWORD_FILElors de l’exécution de l’image Docker. #58583 (Eyal Halpern Shalev). - Lors de l’exécution de certaines requêtes nécessitant de nombreux flux pour lire les données, l’erreur
"Paste JOIN requires sorted tables only"était auparavant levée. Désormais, le nombre de flux est ramené à 1 dans ce cas. #58608 (Yarik Briukhovetskyi). - Message amélioré pour l’erreur INVALID_IDENTIFIER. #58703 (Yakov Olkhovskiy).
- Amélioration de la gestion des littéraux numériques signés dans normalizeQuery. #58710 (Salvatore Mesoraca).
- Prise en charge du type de données Point pour MySQL. #58721 (Kseniia Sumarokova).
- Lors de la comparaison d’une colonne Float32 avec une chaîne constante, lire la chaîne comme un Float32 (au lieu d’un Float64). #58724 (Raúl Marín).
- Améliorer la compatibilité avec S3 et ajouter la prise en charge du stockage EOS d’ECloud. #58786 (xleoken).
- Autoriser
KILL QUERYà annuler les sauvegardes / restaurations. Cette PR rend également visibles les sauvegardes et restaurations en cours danssystem.processes. De plus, un nouveau paramètre est désormais disponible dans la configuration du serveur :shutdown_wait_backups_and_restores(default=true), qui permet au serveur soit d’attendre, lors de l’arrêt, la fin de toutes les sauvegardes et restaurations en cours, soit de simplement les annuler. #58804 (Vitaly Baranov). - Le format Avro prend désormais en charge le codec ZSTD. Résout #58735. #58805 (flynn).
- L’interface MySQL prend désormais en charge les paramètres
net_write_timeoutetnet_read_timeout.net_write_timeoutest converti en paramètre natif ClickHousesend_timeoutet, de même,net_read_timeoutenreceive_timeout. Correction d’un problème qui empêchait de définir le paramètre MySQLsql_select_limitsauf si l’instruction entière était en majuscules. #58835 (Serge Klochkov). - Meilleur message d’exception en cas de conflit lors de la création d’un dictionnaire et d’une table portant le même nom. #58841 (Yarik Briukhovetskyi).
- Vérification que, pour les disques personnalisés (créés depuis SQL),
filesystem_caches_path(préfixe de répertoire commun à tous les caches du système de fichiers) oucustom_cached_disks_base_directory(préfixe de répertoire commun uniquement aux caches du système de fichiers créés à partir de disques personnalisés) est spécifié dans la config du serveur.custom_cached_disks_base_directoryest prioritaire surfilesystem_caches_pathpour les disques personnalisés, ce dernier n’étant utilisé que si le premier est absent. Le paramètrepathdu cache du système de fichiers doit se trouver dans ce répertoire, sinon une exception sera levée et empêchera la création du disque. Cela n’affecte pas les disques créés avec une ancienne version avant mise à niveau du serveur : dans ce cas, l’exception ne sera pas levée afin de permettre au serveur de démarrer correctement.custom_cached_disks_base_directoryest ajouté à la config serveur par défaut avec la valeur/var/lib/clickhouse/caches/. Ferme #57825. #58869 (Kseniia Sumarokova). - L’interface MySQL est désormais compatible avec les requêtes
SHOW WARNINGS/SHOW COUNT(*) WARNINGS, bien que le résultat renvoyé soit toujours un ensemble vide. #58929 (Serge Klochkov). - Ignorer les répliques indisponibles lors de l’exécution d’un
INSERT SELECTdistribué en parallèle. #58931 (Alexander Tokmakov). - Afficher le niveau de log en toutes lettres lors de l’activation du formatage structuré des logs en JSON. #58936 (Tim Liou).
- L’interface MySQL prend désormais en charge les instructions
CAST(x AS SIGNED)etCAST(x AS UNSIGNED)via des alias de type de données :SIGNEDpour Int64 etUNSIGNEDpour UInt64. Cela améliore la compatibilité avec des outils de BI comme Looker Studio. #58954 (Serge Klochkov). - Changer le répertoire de travail pour le data path dans le conteneur Docker. #58975 (cangyin).
- Ajout du paramètre
azure_max_unexpected_write_error_retriespour Azure Blob Storage ; il peut également être défini dans la config, sous la section azure. #59001 (SmitaRKulkarni). - Permettre au serveur de démarrer avec une table de data lake défectueuse. Ferme #58625. #59080 (Kseniia Sumarokova).
- Permettre d’ignorer l’évolution du schéma dans le moteur de table
Iceberget de lire toutes les données en utilisant soit le schéma spécifié par l’utilisateur lors de la création de la table, soit le dernier schéma analysé à partir des métadonnées au moment de la création de la table. Cela se fait via le paramètreiceberg_engine_ignore_schema_evolution, désactivé par défaut. Notez que l’activation de ce paramètre peut produire des résultats incorrects car, en cas d’évolution du schéma, tous les data files seront lus à l’aide du même schéma. #59133 (Kruglov Pavel). - Interdire les opérations de modification (
INSERT/ALTER/OPTIMIZE/…) sur les stockages en lecture seule/à écriture unique avec une erreurTABLE_IS_READ_ONLYappropriée (pour éviter les résidus). Éviter de laisser des résidus sur les disques à écriture unique (format_version.txt) lors deCREATE/ATTACH. IgnorerDROPpourReplicatedMergeTree(comme pourMergeTree). Corriger l’itération surs3_plain(MetadataStorageFromPlainObjectStorage::iterateDirectory). À noter que le stockage en lecture seule est le disqueweb, et que le stockage à écriture unique ests3_plain. #59170 (Azat Khuzhin). - Corrige un bug dans la colonne expérimentale
_block_numberqui pouvait entraîner une logical error lors d’une combinaison complexe deALTERet demerge. Corrige #56202. Remplace #58601. #59295 (alesapin). - L’UI Play comprend désormais lorsqu’une exception est renvoyée dans du JSON. Ajustement pour #52853. #59303 (Alexey Milovidov).
- Le handler HTTP
/binarypermet de spécifier l’utilisateur, l’hôte et, éventuellement, le mot de passe dans la query string. #59311 (Alexey Milovidov). - Prise en charge des backups pour les tables compressées en mémoire. Cela clôt #57893. #59315 (Alexey Milovidov).
- Prise en charge de la clause
FORMATdans les queryBACKUPetRESTORE. #59338 (Vitaly Baranov). - La fonction
concatWithSeparatorprend désormais en charge des types d’arguments arbitraires (au lieu des seuls argumentsStringetFixedString). Par exemple,SELECT concatWithSeparator('.', 'number', 1)renvoie désormaisnumber.1. #59341 (Robert Schulze).
Amélioration de la compilation/des tests/du packaging
- Améliore les alias du binaire ClickHouse (
ch/clickhousecorrespond désormais àclickhouse-localouclickhouse, selon les arguments) et ajoute l’autocomplétion bash pour les nouveaux alias. #58344 (Azat Khuzhin). - Ajoute à la CI une vérification des modifications de paramètres afin de s’assurer que toutes les modifications de paramètres sont bien reflétées dans leur historique. #58555 (Kruglov Pavel).
- Utilise des tables attachées directement depuis S3 dans les tests avec état. #58791 (Alexey Milovidov).
- Enregistre l’intégralité de
fuzzer.logsous forme d’archive au lieu des 100k dernières lignes.tail -n 100000supprime souvent des lignes contenant des définitions de table. Exemple : #58821 (Dmitry Novik). - Active Rust sur MacOS avec Aarch64 (cela ajoutera la recherche floue dans le client avec skim et le langage PRQL, même si je ne pense pas qu’il y ait beaucoup de gens qui hébergent ClickHouse sur Darwin, donc c’est surtout pour la recherche floue dans le client, dirais-je). #59272 (Azat Khuzhin).
- Corrige un problème d’agrégation dans des clusters mixtes x86_64 et ARM #59132 (Harry Lee).
Correction de bug (dysfonctionnement visible par l’utilisateur dans une version stable officielle)
- Ajouter la conversion des clés de jointure pour les LowCardinality imbriqués #51550 (vdimir).
- Aplatir uniquement le véritable type Nested si flatten_nested=1, et non tous les Array(Tuple) #56132 (Kruglov Pavel).
- Corriger un bogue avec les projections et le paramètre
aggregate_functions_null_for_emptylors de l’insertion. #56944 (Amos Bird). - Corriger une exception potentielle due à un UUID de profil obsolète #57263 (Vasily Nemkov).
- Corriger la gestion des tampons de lecture dans StreamingFormatExecutor #57438 (Kruglov Pavel).
- Ignorer les MV dont la table cible a été supprimée lors de la propagation vers les vues #57520 (Kruglov Pavel).
- Éliminer une possible condition de concurrence entre ALTER_METADATA et MERGE_PARTS #57755 (Azat Khuzhin).
- Corriger un bogue dans l’ordre des expressions de GROUP BY avec rollup #57786 (Chen768959).
- Correctif pour la fonctionnalité obsolète de réplication “zero-copy” : corriger la perte de blobs après la suppression d’une réplique avec des parties détachées corrompues #58333 (Alexander Tokmakov).
- Permettre aux utilisateurs de travailler avec des liens symboliques dans user_files_path #58447 (Duc Canh Le).
- Corriger un plantage lorsque la table Graphite n’a pas de fonction d’agrégation #58453 (Duc Canh Le).
- Retarder la lecture depuis StorageKafka afin d’autoriser plusieurs lectures dans les vues matérialisées #58477 (János Benjamin Antal).
- Corriger un cas absurde de parties qui se chevauchent #58482 (Alexander Tokmakov).
- Désactiver MergeTreePrefetchedReadPool pour les requêtes avec uniquement LIMIT #58505 (Maksim Kita).
- Activer les bases de données ordinaires pendant la restauration #58520 (Jihyuk Bok).
- Corriger la lecture via le pool de threads Apache Hive pour ORC/Parquet/… #58537 (sunny).
- Masquer les informations d’authentification dans la colonne
base_backup_namedesystem.backup_log#58550 (Daniel Pozo Escalona). toStartOfIntervalpour l’arrondi des valeurs en millisecondes et microsecondes #58557 (Yarik Briukhovetskyi).- Désactiver
max_joined_block_rowsdans ConcurrentHashJoin #58595 (vdimir). - Corriger les jointures utilisant Nullable dans l’ancien analyzer #58596 (vdimir).
makeDateTime64: autorise un argument de fraction non constant #58597 (Robert Schulze).- Corrige une possible déréférence de NULL lors de la symbolisation de frames inline #58607 (Azat Khuzhin).
- Améliore l’isolation des entrées du cache de requêtes pour les utilisateurs recréés ou lors des changements de rôle #58611 (Robert Schulze).
- Corrige une analyse défaillante de la clé de partitionnement lors de l’optimisation des projections #58638 (Amos Bird).
- Cache de requêtes : corrige le quota par utilisateur #58731 (Robert Schulze).
- Corrige le partitionnement des flux dans les fonctions de fenêtre exécutées en parallèle #58739 (Dmitry Novik).
- Corrige un double appel au destructeur lors de la levée d’une exception dans addBatchLookupTable8 #58745 (Raúl Marín).
- Ne traite pas les requêtes dans Keeper pendant l’arrêt #58765 (Antonio Andelic).
- Corrige une déréférence de pointeur nul dans
SlabsPolygonIndex::find#58771 (Yarik Briukhovetskyi). - Corrige la fonction JSONExtract pour les colonnes LowCardinality(Nullable) #58808 (vdimir).
- Corrige une accumulation inattendue de l’utilisation mémoire lors de la création d’un très grand nombre de tables avec CREATE et DROP. #58831 (Maksim Kita).
- Lecture multiple du stockage file log dans mv #58877 (János Benjamin Antal).
- Restriction de l’identifiant de clé d’accès pour S3. #58900 (MikhailBurdukov).
- Corrige un possible crash dans clickhouse-local lors du chargement des suggestions #58907 (Kruglov Pavel).
- Corrige un crash lorsque
indexHintest utilisé #58911 (Dmitry Novik). - Corrige l’oubli des headers par StorageURL au redémarrage du serveur #58933 (Michael Kolupaev).
- Analyseur : corrige le remplacement du stockage avec le bloc d’insertion #58958 (Yakov Olkhovskiy).
- Corrige le seek dans ReadBufferFromZipArchive #58966 (Michael Kolupaev).
- Correctif pour les index inversés expérimentaux (ne pas utiliser en production) :
DROP INDEXd’un index inversé supprime désormais tous les fichiers pertinents du stockage persistant #59040 (mochi). - Corrige une situation de concurrence sur query_factories_info #59049 (Kseniia Sumarokova).
- Désactivation des nouvelles tentatives en cas d’erreur “Too many redirects” #59099 (skyoct).
- Correction d’un interblocage lors de l’arrêt d’une base de données non démarrée #59137 (Sergei Trifonov).
- Correction : LIMIT BY et LIMIT dans une requête distribuée #59153 (Igor Nikonov).
- Correction d’un crash avec un fuseau horaire Nullable pour
toString#59190 (Yarik Briukhovetskyi). - Correction d’un arrêt brutal dans les métadonnées Iceberg en cas de chemins de fichier invalides #59275 (Kruglov Pavel).
- Correction du nom d’architecture dans la sélection de la cible Rust #59307 (p1rattttt).
- Correction d’une erreur logique liée à “not-ready set” lors de l’interrogation de
system.tablesavec une sous-requête dans la clause IN. #59351 (Nikolai Kochetov).