Changements incompatibles avec les versions précédentes
- Les fonctions
greatestetleastignorent désormais les valeurs d’entrée NULL, alors qu’auparavant elles renvoyaient NULL si l’un des arguments était NULL. Par exemple,SELECT greatest(1, 2, NULL)renvoie désormais 2. Ce changement rend le comportement compatible avec PostgreSQL. #65519 (kevinyhzou). - N’autorise plus, par défaut, les types Variant/Dynamic dans ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY, car cela peut entraîner des résultats inattendus. #69731 (Pavel Kruglov).
- Supprime les tables système
generate_seriesetgenerateSeries. Elles ont été ajoutées ici par erreur : #59390. #71091 (Alexey Milovidov). - Supprime
StorageExternalDistributed. Clôt #70600. #71176 (flynn). - 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 exemple
date_time_output_format. #71178 (Michael Kolupaev). - Corrige une possible erreur
No such file or directorydue à des caractères spéciaux non échappés dans les fichiers des sous-colonnes JSON. #71182 (Pavel Kruglov). - Les moteurs de table Kafka, NATS et RabbitMQ sont désormais couverts par leurs propres grants dans la hiérarchie
SOURCES. Ajoutez les grants nécessaires à tous les utilisateurs de base de données non par défaut qui créent des tables avec ces types d’engine. #71250 (Christoph Wurm). - Vérifie la requête complète de mutation avant de l’exécuter (y compris les sous-requêtes). Cela évite d’exécuter accidentellement une requête invalide et d’accumuler des mutations mortes qui bloquent les mutations valides. #71300 (Christoph Wurm).
- Renomme le 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). - Interdit les types Dynamic/Variant dans les fonctions min/max afin d’éviter toute confusion. #71761 (Pavel Kruglov).
- Supprime la prise en charge de
Enumainsi que des argumentsUInt128etUInt256dansdeltaSumTimestamp. Supprime également la prise en charge deInt8,UInt8,Int16etUInt16pour le deuxième argument (« timestamp ») dedeltaSumTimestamp. #71790 (Alexey Milovidov). - Ajoute la validation de la requête source lorsque ClickHouse est utilisé comme source pour un dictionnaire. #72548 (Alexey Katsman).
Nouvelles fonctionnalités
- Implémentation de la commande SYSTEM LOAD PRIMARY KEY pour charger les index primaires de toutes les parts d’une table spécifié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 (ZAWA_ll).
- Ajout de l’instruction
SYSTEM LOAD PRIMARY KEYpour charger les index primaires de toutes les parts d’une table spécifiée, ou de toutes les tables si aucune table n’est spécifiée. Cela peut être utile pour les benchmarks et pour éviter une latence supplémentaire lors de l’exécution des requêtes. #67733 (ZAWA_ll). - Ajout de la requête
CHECK GRANTpour vérifier si l’utilisateur/rôle actuel a reçu le privilège spécifique et si la table/colonne correspondante existe en mémoire. #68885 (Unalian). - Ajout de la syntaxe SQL pour décrire le workload et la gestion des ressources. Voir la documentation. #69187 (Sergei Trifonov).
- Le format de stockage de données Iceberg offre à l’utilisateur de nombreuses possibilités pour modifier le schéma de sa table. Cette pull request implémente la lecture d’une table au format Iceberg lorsque l’ordre des colonnes, les noms de colonnes ou des extensions de type simples ont été modifiés. #69445 (Daniil Ivanik).
- Permettre à chaque méthode d’authentification d’avoir sa propre date d’expiration, supprimée de l’entité utilisateur. #70090 (Arthur Passos).
- Propagation des rôles utilisateur externes depuis 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).
- Prise en charge de ALTER de String vers JSON. Cette PR modifie également la sérialisation des types JSON et Dynamic vers la nouvelle version V2. L’ancienne version V1 peut toujours être utilisée en activant le paramètre
merge_tree_use_v1_object_and_dynamic_serialization(cela peut être utile pendant une mise à niveau afin de pouvoir effectuer un rollback de version sans problème). #70442 (Pavel Kruglov). - Ajout de la fonction
toUnixTimestamp64Second, qui convertit unDateTime64en une valeurInt64avec une précision fixe à la seconde, afin de prendre en charge le renvoi d’une valeur négative si la date est antérieure à 00:00:00 UTC le jeudi 1 janvier 1970. #70597 (zhanglistar). - Ajout du nouveau paramètre
enforce_index_structure_match_on_partition_manipulationpour autoriser ATTACH lorsque les projections et les index secondaires de la table source constituent un sous-ensemble de ceux de la table cible. Résout #70602. #70603 (zwy991114). - La sortie de la fonction
castdiffère de celle d’Apache Spark, ce qui provoque un écart dans le projet gluten ; voir https://github.com/apache/incubator-gluten/issues/7602 Cette PR ajoute la prise en charge du format de sortie texte Spark, désactivée par défaut. #70957 (zhanglistar). - Ajout d’un nouveau type de header pour les S3 endpoints pour l’authentification des utilisateurs (
access_header). Cela permet d’obtenir un header d’accès avec la priorité la plus basse, qui sera écrasé paraccess_key_iddepuis n’importe quelle autre source (par exemple, un schéma de table ou une named collection). #71011 (MikhailBurdukov). - Implémentation initiale des niveaux de paramètres. #71145 (Raúl Marín).
- Ajout de la prise en charge de la clause staleness dans ORDER BY WITH FILL. #71151 (Mikhail Artemenko).
- Implémentation d’un CAST simple de Map/Tuple/Object vers le nouveau JSON via sérialisation/désérialisation à partir d’une chaîne JSON. #71320 (Pavel Kruglov).
- 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, en CamelCase uniquement, plutôt qu’une syntaxe mixte CamelCase/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 logs JSON de prendre en charge la date et l’heure UTC au format RFC 3339/ISO8601. #71560 (Ali). - Ajout d’une option permettant de choisir le côté de la jointure qui servira de table interne (build) dans le plan de requête. 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). - Optimisation de l’utilisation mémoire pour les valeurs de granularité d’index lorsque la granularité est constante pour une part. Ajout de la possibilité de toujours sélectionner une granularité constante pour une part (paramètre
use_const_adaptive_granularity), ce qui permet de garantir qu’elle est toujours optimisée en mémoire. Cela aide, pour les charges de travail importantes (des milliers de milliards de lignes sur stockage partagé), à éviter une augmentation continue de l’utilisation mémoire due aux métadonnées (valeurs de granularité d’index) des parts de données. #71786 (Anton Popov). - Implémentation de
allowed_feature_tiercomme commutateur global pour désactiver toutes les fonctionnalités expérimentales / bêta. #71841 (Raúl Marín). - Ajout des fonctions de table
iceberg[S3;HDFS;Azure]Cluster,deltaLakeCluster,hudiCluster. #72045 (Mikhail Artemenko). - Ajout de la syntaxe
ALTER USER {ADD|MODIFY|DROP SETTING},ALTER USER {ADD|DROP PROFILE}, et de même pourALTER ROLEetALTER PROFILE. #72050 (pufit). - Ajout de la fonction
arrayPrAUC, qui calcule l’AUC (aire sous la courbe) de la courbe précision-rappel. #72073 (Emmanuel). - Ajout d’un cache pour l’index primaire des tables
MergeTree(peut être activé via 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 (de manière similaire au mark cache) au lieu d’être conservé indéfiniment en mémoire. Ajout du préchauffage de l’index primaire lors des insertions/fusions/récupérations de parts de données et lors des redémarrages de la table (peut être activé via le paramètreprewarm_primary_key_cache). #72102 (Anton Popov). - Ajout de la fonction indexOfAssumeSorted pour les types Array. Optimise la recherche dans le cas d’un tableau trié par ordre non décroissant. #72517 (Eric Kurbanov).
- Permet d’utiliser un délimiteur comme second argument facultatif de la fonction d’agrégation
groupConcat. #72540 (Yarik Briukhovetskyi). - Nouveau paramètre,
http_response_headers, qui permet de personnaliser les en-têtes de réponse HTTP. Par exemple, vous pouvez demander au navigateur d’afficher une image stockée dans la base de données. Cela corrige #59620. #72656 (Alexey Milovidov). - Ajoute la fonction
fromUnixTimestamp64Second, qui convertit une valeur Int64 de timestamp Unix en DateTime64. #73146 (Robert Schulze).
Améliorations des performances
- Ajout de 2 nouveaux paramètres
short_circuit_function_evaluation_for_nullsetshort_circuit_function_evaluation_for_nulls_threshold, qui permettent d’exécuter les fonctions sur des colonnesNullableen court-circuit lorsque la proportion de valeurs NULL dans le bloc de données dépasse le seuil spécifié. Cela signifie que la fonction n’est exécutée que sur les lignes contenant des valeurs non NULL. Cela s’applique uniquement aux fonctions qui renvoient une valeur NULL pour les lignes où au moins un argument est NULL. #60129 (李扬). - L’utilisation mémoire de
clickhouse disks remove --recursivea été réduite pour les disques de stockage objet. #67323 (Kirill). - Désormais, les colonnes des blocs d’entrée ne seront plus copiées pour
join_algorithm='parallel_hash'lors de leur répartition entre les threads pour un traitement parallèle. #67782 (Nikita Taranov). - Activation de la compilation JIT pour davantage d’expressions :
abs/bitCount/sign/modulo/pmod/isNull/isNotNull/assumeNotNull/to(U)Int*/toFloat*, fonctions de comparaison (=,<,>,>=,<=), fonctions logiques (and,or). #70598 (李扬). - Désormais, l’algorithme
parallel_hashsera 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). - Optimisation de l’algorithme de fusion
Replacingpour les parts non intersectantes. #70977 (Anton Popov). - Ne plus lister les detached parts des disques en lecture seule et write-once dans les metrics et dans system.detached_parts. #71086 (Alexey Milovidov).
- Ne plus calculer les heavy asynchronous metrics par défaut. Cette 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).
- Amélioration des performances et de la précision de l’intervalle de collecte de system.query_metric_log grâce à la réduction de la région critique. #71473 (Pablo Marcos).
- Ajout d’une option permettant d’extraire les expressions communes des expressions
WHEREetONafin de réduire le nombre de tables de hachage utilisées lors des jointures. Peut être activée avecoptimize_extract_common_expressions = 1. #71537 (János Benjamin Antal). - Permet d’utiliser des index sur
SELECTavecLowCardinality(String). #71598 (Yarik Briukhovetskyi). - Lors de l’exécution d’une query avec parallel replicas et le plan local activé, ignorer l’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 query). #72109 (Igor Nikonov).
- Restauration de l’optimisation pour la lecture des subcolumns d’une seule colonne dans les Compact parts à partir de https://github.com/ClickHouse/ClickHouse/pull/57631. Elle avait été supprimée accidentellement. #72285 (Pavel Kruglov).
- Accélération du tri des colonnes
LowCardinality(String)grâce à la dévirtualisation des appels dans le comparateur. #72337 (Alexander Gololobov). - Optimisation de la fonction argMin/Max pour certains types de données simples. #72350 (alesapin).
- Optimisation du verrouillage avec des verrous partagés dans le memory tracker afin de réduire la contention des verrous. #72375 (Jiebin Sun).
- Ajout d’un nouveau paramètre,
use_async_executor_for_materialized_views. Permet une exécution asynchrone et potentiellement multithreadée des requêtes de vue matérialisée, ce qui peut accélérer le traitement des vues pendantINSERT, mais aussi consommer davantage de mémoire. #72497 (alesapin). - Les valeurs par défaut des paramètres
max_size_to_preallocate_for_aggregation,max_size_to_preallocate_for_joinsont encore été augmentées à10^12, de sorte que l’optimisation s’appliquera dans davantage de cas. #72555 (Nikita Taranov). - Amélioration des performances de la désérialisation des états des fonctions d’agrégation (dans le type de données
AggregateFunctionet dans les requêtes distribuées). Légère amélioration également des performances de l’analyse du formatRowBinary. #72818 (Anton Popov).
Amélioration
- Les fonctions d’ordre supérieur avec des tableaux constants et des arguments capturés constants retournent des constantes. #58400 (Alexey Milovidov).
- Optimisation de la lecture dans l’ordre grâce à la génération de lignes virtuelles, ce qui permet de lire moins de données lors du tri par fusion, en particulier lorsque plusieurs parties existent. #62125 (Shichao Jin).
- Les noms des étapes du plan de requête (
EXPLAIN PLAN json=1) et les noms des processeurs du pipeline (EXPLAIN PIPELINE compact=0,graph=1) ont désormais un identifiant unique en suffixe. Cela permet de faire correspondre la sortie du profileur des processeurs et les traces OpenTelemetry avec la sortie d’EXPLAIN. #63518 (qhsong). - Ajout d’une option permettant de vérifier qu’un objet existe après son écriture dans Azure Blob Storage, contrôlée par le paramètre
check_objects_after_upload. #64847 (Smita Kulkarni). - Correction d’une logique de use-after-dtor dans HashTable destroyElements. #65279 (cangyin).
- Utilise la base de données
Atomicpar défaut dansclickhouse-local. Traite les points 1 et 5 de #50647. Ferme #44817. #68024 (Alexey Milovidov). - Le buffer d’écriture doit être annulé ou finalisé explicitement. Les exceptions interrompent le protocole HTTP afin d’alerter le client en cas d’erreur. #68800 (Sema Checherinda).
- Signale les hôtes DDLWorker actifs en créant replica_dir et en marquant les répliques comme actives dans DDLWorker. #69658 (Tuan Pham Anh).
-
- Refactoriser
DDLQueryStatusSource: - RenommerDDLQueryStatusSourceenDistributedQueryStatusSourceet en faire une classe de base - Créer deux sous-classes,DDLOnClusterQueryStatusSourceetReplicatedDatabaseQueryStatusSource, dérivées deDDLQueryStatusSource, pour interroger respectivement l’état des tâches DDL deDDL On Cluster et des bases de données Replicated. 2. Prendre en charge l’interruption de l’attente des hôtes hors ligne dansDDLOnClusterQueryStatusSource`. #69660 (Tuan Pham Anh).
- Refactoriser
- Ajout d’une nouvelle logique d’annulation :
CancellationCheckervérifie les délais d’expiration de chaque requête lancée et les arrête une fois le délai atteint. #69880 (Yarik Briukhovetskyi). - Suppression du paramètre
allow_experimental_join_condition, ce qui autorise par défaut les conditions non équi. #69910 (Vladimir Cherkasov). - Activation de
parallel_replicas_local_planpar défaut. La construction d’un plan local complet sur l’initiateur de la requête améliore les performances des répliques parallèles avec une consommation de ressources moindre et offre davantage de possibilités d’optimisation des requêtes. #70171 (Igor Nikonov). - Ajout de la possibilité de définir l’utilisateur et le mot de passe dans les http_handlers (pour
dynamic_query_handler/predefined_query_handler). #70725 (Azat Khuzhin). - Prise en charge de
ALTER TABLE ... MODIFY/RESET SETTING ...pour certains paramètres du moteur de stockage S3Queue. #70811 (Kseniia Sumarokova). - Ne plus appeler l’API d’object storage lors du listage des répertoires, car cela peut entraîner des coûts inutiles. À la place, stocker en mémoire la liste des noms de fichiers. En contrepartie, le temps de chargement initial augmente, tout comme la mémoire nécessaire pour stocker les noms de fichiers. #70823 (Julia Kartseva).
- Ajout du paramètre
--threadsàclickhouse-compressor, ce qui permet de compresser les données en parallèle. #70860 (Alexey Milovidov). - La taille de l’historique du client Replxx est désormais configurable. #71014 (Jiří Kozlovský).
- Ajout du paramètre
prewarm_mark_cache, qui active le chargement des marks dans le mark cache lors des insertions, des fusions, des récupérations de parts et au démarrage de la table. #71053 (Anton Popov). - Prise en charge du type Boolean par le lecteur natif Parquet. #71055 (Arthur Passos).
- Réessai d’un plus grand nombre d’erreurs lors des interactions avec S3, comme “Malformed message”. #71088 (Alexey Milovidov).
- Réduction du niveau de journalisation de certains messages concernant S3. #71090 (Alexey Milovidov).
- Prise en charge de l’écriture de fichiers HDFS contenant des espaces. #71105 (exmy).
system.session_logconvient tout à fait. Cela clôt #51760. #71150 (Alexey Milovidov).- Correction des jointures RIGHT / FULL dans les requêtes avec 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 distribuée). Les jointures FULL ne peuvent pas être parallélisées entre les nœuds et sont exécutées localement. #71162 (Igor Nikonov).
- Ajout de paramètres limitant le nombre de tables répliquées, de dictionnaires et de vues. #71179 (Kirill).
- Corrige #71227. #71286 (Arthur Passos).
GROUP BY/ORDER BYautomatiques sur disque en fonction de l’utilisation de la mémoire du serveur/de l’utilisateur. Contrôlé par les paramètres de requêtemax_bytes_ratio_before_external_group_by/max_bytes_ratio_before_external_sort. #71406 (Azat Khuzhin).- Ajout de tableaux de bord par hôte
Overview (host)etCloud overview (host)à l’Advanced dashboard. #71422 (alesapin). - 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). - Ajout des nouvelles fonctions
parseDateTime64,parseDateTime64OrNulletparseDateTime64OrZero. Par rapport à la fonction existanteparseDateTime(et à ses variantes), elles renvoient une valeur de typeDateTime64au lieu deDateTime. #71581 (kevinyhzou). - Ajuste à la taille exacte le tableau index_granularity en mémoire afin de réduire l’empreinte mémoire de la famille de moteurs de table MergeTree. #71595 (alesapin).
- Les applications en ligne de commande mettront en évidence la syntaxe même pour les instructions multiples. #71622 (Alexey Milovidov).
- Les applications en ligne de commande renverront 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). - Le format
Vertical(également activé lorsque vous terminez votre requête par\G) bénéficie désormais des fonctionnalités des formats Pretty, notamment : - la mise en évidence des séparateurs de milliers dans les nombres ; - l’affichage d’une indication facilitant la lecture des nombres. #71630 (Alexey Milovidov). - 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_sizepour 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). - Modifie la valeur par défaut de
enable_http_compressionde 0 à 1. Ferme #71591. #71774 (Peter Nguyen). - Prise en charge de
ALTERdeObjectversJSON. #71784 (Pavel Kruglov). - Amélioration légère du parsing du type JSON : si le bloc actuel pour le chemin JSON contient des valeurs de plusieurs types, tentative de sélection du type le plus approprié en testant les types selon un ordre spécial de best effort. #71785 (Pavel Kruglov).
- Auparavant, la lecture de
system.asynchronous_metricsattendait la fin d’une mise à jour concurrente. Cela pouvait prendre beaucoup de temps lorsque le système était fortement chargé. Avec ce changement, les valeurs collectées précédemment peuvent toujours être lues. #71798 (Alexander Gololobov). polling_max_timeout_msest défini sur 10 minutes etpolling_backoff_mssur 30 secondes. #71817 (Kseniia Sumarokova).- Les requêtes comme ‘SELECT - FROM t LIMIT 1’ chargeaient les index des parts alors qu’ils n’étaient pas utilisés. #71866 (Alexander Gololobov).
- Allow_reorder_prewhere_conditions est activé par défaut avec les anciens paramètres de compatibilité. #71867 (Raúl Marín).
- N’incrémente pas le compteur
ILLEGAL_TYPE_OF_ARGUMENTdans la tablesystem.errorslorsque la fonctionbitmapTransformest utilisée et que les types d’argument sont valides. #71971 (Dmitry Novik). - Lors de la récupération directe de données depuis un dictionnaire via le moteur Dictionary, la table function dictionary, ou un
SELECTdirect sur le dictionnaire lui-même, il suffit désormais d’avoir la permissionSELECTou la permissiondictGetsur le dictionnaire. Cela s’aligne sur les 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 ce dernier changement rétrocompatible. #72051 (Nikita Mikhaylov). - Ajout d’un sélecteur déroulant du tableau de bord sur la page HTML du tableau de bord avancé, à partir de la table
system.dashboards. #72081 (Sergei Trifonov). - Respecte
prefer_locahost_replicalors de la construction du plan pourINSERT ... SELECTdistribué. #72190 (filimonov). - Le problème est décrit ici. Azure Iceberg Writer crée des fichiers de métadonnées Iceberg (ainsi que des fichiers manifest) qui ne respectent pas les spécifications. Dans cette PR, une tentative a été ajoutée pour lire des métadonnées Iceberg au format v1 avec le lecteur v2 (car elles sont écrites de cette manière), ainsi qu’une erreur lorsque les champs correspondants n’ont pas été créés dans un fichier manifest. #72277 (Daniil Ivanik).
- Les types JSON/Dynamic/Variant passent du statut de fonctionnalités expérimentales à celui de bêta. #72294 (Pavel Kruglov).
- Il est désormais possible d’utiliser
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’insertion-, toutes les autres tables seront ignorées. #72347 (alesapin). - 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).
- Ajoute 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 rencontrer un problème d’utilisation élevée de la mémoire. #72490 (Miсhael Stetsyuk).
- Toutes les variantes orthographiques du mot
Nullsont désormais reconnues lorsqu’une requête utiliseFormat Null. Auparavant, les autres formes (par ex.NULL) ne provoquaient pas d’exception, mais en même temps, le formatNulln’était en réalité pas utilisé dans ces cas. #72658 (Nikita Taranov). - Autorisation des valeurs inconnues dans un Set qui ne sont pas présentes dans Enum. Correction de #72662. #72686 (zhanglistar).
- Ajout de total_bytes_with_inactive à system.tables pour comptabiliser le nombre total d’octets des parts inactives. #72690 (Kai Zhu).
- Ajout de MergeTreeSettings à system.settings_changes. #72694 (Raúl Marín).
- Prise en charge de l’opérateur de recherche de chaînes (par ex. like) pour le type de données Enum, correction de #72661. #72732 (zhanglistar).
- Prise en charge du type JSON dans la fonction notEmpty. #72741 (Pavel Kruglov).
- Prise en charge de l’analyse de l’erreur S3 de GCS
AuthenticationRequired. #72753 (Vitaly Baranov). - Prise en charge du type Dynamic dans les fonctions ifNull et coalesce. #72772 (Pavel Kruglov).
- Ajout des profile events
JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCount. #72842 (Vladimir Cherkasov). - Prise en charge de Dynamic dans les fonctions toFloat64/touInt32/etc. #72989 (Pavel Kruglov).
Correction de bogue (dysfonctionnement visible par l’utilisateur dans une version stable officielle)
- Les parts dédupliquées pendant la requête
ATTACH PARTne restent plus bloquées avec le préfixeattaching_. #65636 (Kirill). - Correction d’un bug où
DateTime64perdait de la précision avec la fonctionIN. #67230 (Yarik Briukhovetskyi). - Correction d’une possible erreur logique lors de l’utilisation de fonctions avec
IGNORE/RESPECT NULLSdansORDER BY ... WITH FILL, corrige #57609. #68234 (Vladimir Cherkasov). - Correction de rares erreurs logiques dans les insertions asynchrones au format
Nativelorsque la limite de mémoire est atteinte. #68965 (Anton Popov). - Correction de
COMMENTdansCREATE TABLEpour une colonneEPHEMERAL. #70458 (Yakov Olkhovskiy). - Correction d’une erreur logique dans
JSONExtractavecLowCardinality(Nullable). #70549 (Pavel Kruglov). - Correction du comportement lorsque le nom de la table est trop long. #70810 (Yarik Briukhovetskyi).
- Ajout de la possibilité de surcharger
Content-Typevia des headers utilisateur dans le moteurURL. #70859 (Artem Iurin). - Correction de l’erreur logique dans
StorageS3Queue: “Cannot create a persistent node in /processed since it already exists”. #70984 (Kseniia Sumarokova). - Correction du bug qui ne prenait pas en compte la colonne _row_exists dans l’option de reconstruction de
projection lightweight delete. #71089 (Shichao Jin). - Correction d’une valeur erronée dans
system.query_metric_logdue à une condition de concurrence inattendue. #71124 (Pablo Marcos). - Correction du nom incohérent de la fonction d’agrégation
quantileExactWeightedInterpolated. Le bug a été introduit dans https://github.com/ClickHouse/ClickHouse/pull/69619. cc @Algunenano. #71168 (李扬). - Correction de l’exception
bad_weak_ptravecDynamiclors de la comparaison de fonctions. #71183 (Pavel Kruglov). - Ne supprime plus un blob lorsque des nœuds l’utilisent dans
ReplicatedMergeTreeavec la réplication zero-copy. #71186 (Antonio Andelic). - Correction de la non-prise en compte des paramètres de format au format
Nativevia HTTP et les insertions asynchrones. #71193 (Pavel Kruglov). - Les requêtes
SELECTexécutées avec le paramètreuse_query_cache = 1ne sont plus rejetées si le nom d’une system table 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, alors que le disk de la configuration de stockage n’avait aucune configuration de cache. #71261 (Kseniia Sumarokova).
- Correction d’une erreur possible “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 named collections. Sans ce correctif, clickhouse-server ne peut pas démarrer. #71308 (MikhailBurdukov).
- Correction des async inserts avec des blocks vides via le native protocol. #71312 (Anton Popov).
- Correction d’un formatage AST incohérent lors de l’attribution de grants avec caractères génériques incorrects #71309. #71332 (pufit).
- Vérification des types suspects et Experimental dans les type hints JSON. #71369 (Pavel Kruglov).
- Correction de l’erreur Invalid number of rows in Chunk avec une colonne Variant. #71388 (Pavel Kruglov).
- Correction d’un crash dans la table function
mongodblors du passage d’arguments invalides (par ex.NULL). #71426 (Vladimir Cherkasov). - Correction d’un crash avec optimize_rewrite_array_exists_to_has. #71432 (Raúl Marín).
- Correction d’une erreur NoSuchKey lors du rollback d’une transaction quand la création d’un directory échoue pour le disk palin_rewritable. #71439 (Julia Kartseva).
- Correction de l’utilisation du paramètre
max_insert_delayed_streams_for_parallel_writedans les inserts. Auparavant, il fonctionnait incorrectement, ce qui pouvait entraîner une utilisation mémoire élevée dans les inserts qui écrivent des données dans plusieurs partitions. #71474 (Anton Popov). - Correction d’une erreur possible
Argument for function must be constant(ancien analyzer) dans le cas où arrayJoin peut apparemment apparaître dans la conditionWHERE. Régression après https://github.com/ClickHouse/ClickHouse/pull/65414. #71476 (Nikolai Kochetov). - Prévention d’un crash dans SortCursor avec 0 colonnes (ancien analyzer). #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, voir https://github.com/apache/incubator-gluten/issues/7823. #71500 (李扬).
- Correction du calcul de la taille des colonnes dans la Wide part pour les types Dynamic et JSON. #71526 (Pavel Kruglov).
- Correction de l’analyseur lorsqu’une requête dans une vue matérialisée utilise IN avec une CTE. Clôt #65598. #71538 (Maksim Kita).
- Retourne 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 crashs du serveur lors de l’utilisation d’une vue matérialisée avec certains moteurs. #71593 (Pervakov Grigorii).
- ARRAY JOIN avec une structure de données imbriquée contenant un alias vers un Array constant provoquait 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 transforme plus les ensembles constants dans les prédicats sur les colonnes de partition dans le cas de l’opérateur NOT IN. #71695 (Eduard Karacharov).
- 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 avec toDayOfWeek dans une condition WHERE avec une clé primaire de type DateTime64. #71849 (Yakov Olkhovskiy).
- Correction du remplissage des valeurs par défaut après le parsing dans des colonnes sparse. #71854 (Anton Popov).
- Correction d’une erreur de la fonction GROUPING lorsque l’entrée est ALIAS sur une table distribuée, clôt #68602. #71855 (Vladimir Cherkasov).
- Correction des instructions select qui utilisent la clause
WITH TIESet qui pouvaient ne pas renvoyer suffisamment de lignes. #71886 (wxybear). - Correction d’une exception TOO_LARGE_ARRAY_SIZE provoqué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 incorrectes 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é. Intercepte les frappes clavier pendant les requêtes INSERT pour basculer l’affichage de la table de progression. #71901 (Julia Kartseva).
- Correction de la sérialisation des valeurs Dynamic dans les formats Pretty JSON. #71923 (Pavel Kruglov).
- Correction de la colonne rows_processed dans system.s3/azure_queue_log, cassée dans la version 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 lorsqu’un glob pattern était utilisé dans l’URI S3 (commepattern/*) et qu’un objet vide avec la clépattern/existait (de tels objets sont créés automatiquement par la Console S3). De plus, la valeur par défaut du paramètres3_skip_empty_filesa été changée defalseàtrue. #71947 (Nikita Taranov). - Correction d’un crash 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 utilisé à l’intérieur d’une sous-requête. Les autres types de requêtes entraînent une erreur logique : ‘Bad cast from type DB::ASTCreateQuery to DB::ASTSelectWithUnionQuery’ ou
Inconsistent AST formatting. #71982 (Pavel Kruglov). - Lors de l’insertion d’un enregistrement via
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, alors qu’il devrait être [statistics, ttl, settings]. #71991 (Han Fei). - Correction de la mise en forme des commandes ALTER
MOVE PARTITION ... TO TABLE ...lorsqueformat_alter_commands_with_parenthesesest activé. #72080 (János Benjamin Antal). - Ajout du nom de format inféré à la requête CREATE dans les engines File/S3/URL/HDFS/Azure. Auparavant, le nom du format était redéduit à chaque redémarrage du serveur et, si les fichiers de données spécifiés avaient été supprimés, cela provoquait des erreurs au démarrage du serveur. #72108 (Pavel Kruglov).
- Correction d’un bug où
min_age_to_force_merge_on_partition_onlyrestait bloqué en essayant de fusionner de manière répétée la même partition, déjà fusionnée en une seule part, et ne fusionnait pas les partitions qui comportaient plusieurs parts. #72209 (Christoph Wurm). - Correction d’un crash dans
SimpleSquashingChunksTransformqui se produisait dans de rares cas lors du traitement de colonnes creuses. #72226 (Vladimir Cherkasov). - Correction d’une situation de concurrence dans
GraceHashJoin, qui pouvait entraîner l’absence de certaines lignes dans la sortie du JOIN. #72233 (Nikita Taranov). - Correction des requêtes
ALTER DELETEavec la colonne matérialisée_block_number(si le paramètreenable_block_number_columnest activé). #72261 (Anton Popov). - Correction d’une situation de concurrence lorsque
ColumnDynamic::dumpStructure()est appelée de manière concurrente, par exemple dans le constructeur deConcurrentHashJoin. #72278 (Nikita Taranov). - Corrige une possible
LOGICAL_ERRORliée à des colonnes dupliquées dansORDER BY ... WITH FILL. #72387 (Vladimir Cherkasov). - Corrige des incompatibilités de type dans plusieurs cas après application de
optimize_functions_to_subcolumns. #72394 (Anton Popov). - Corrige un échec lors de l’analyse des requêtes
BACKUP DATABASE db EXCEPT TABLES db.table. #72429 (Konstantin Bogdanov). - Empêche la création d’un Variant vide. #72454 (Pavel Kruglov).
- Corrige le formatage incorrect de
result_part_pathdanssystem.merges. #72567 (Konstantin Bogdanov). - Corrige l’analyse d’un glob ne contenant qu’un seul élément. #72572 (Konstantin Bogdanov).
- Corrige la génération de requête pour le serveur follower dans le cas d’une distributed query avec ARRAY JOIN. Corrige #69276. #72608 (Dmitry Novik).
- Corrige un bug où DateTime64 dans DateTime64 ne renvoie rien. #72640 (Yarik Briukhovetskyi).
- 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). - La suppression du mark cache pouvait prendre un temps notable lorsqu’il était volumineux. Si le mutex de contexte est conservé pendant ce temps, cela bloque de nombreuses autres activités, au point qu’il devient impossible d’établir une nouvelle connexion client avant sa libération. Or, conserver ce mutex n’est pas réellement nécessaire pour la synchronisation : il suffit d’avoir une référence locale vers le cache via un shared ptr. #72749 (Alexander Gololobov).
- Le cache PK sous-estimait fortement sa taille sur l’une des instances de test. En particulier, les colonnes LowCardinality n’incluaient pas la taille du dictionnaire. La correction consiste à utiliser
column->allocatedBytes()ainsi que quelques estimations supplémentaires de l’overhead pour la taille de l’entrée de cache. #72750 (Alexander Gololobov). - Corrige l’exception levée dans RemoteQueryExecutor lorsque l’utilisateur n’existe pas localement. #72759 (Andrey Zvonov).
- Corrige les mutations avec la colonne materialized
_block_number(si le paramètreenable_block_number_columnest activé). #72854 (Anton Popov). - Corrige les opérations de 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 plantage potentiel lors de la restauration depuis une sauvegarde. #72947 (Kseniia Sumarokova).
- Corrige un bogue dans la méthode de JOIN
parallel_hashpouvant survenir lorsqu’une requête contient une condition complexe dans la clauseON, avec des filtres d’inégalité. #72993 (Nikita Taranov). - Utilise 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).
- Corrige un plantage dans les transactions avec un moteur de stockage non pris en charge. #73045 (Raúl Marín).
- Vérifie la présence de clés JSON en double lors de l’analyse de Tuple. Auparavant, cela pouvait provoquer l’erreur logique
Invalid number of rows in Chunkpendant l’analyse. #73082 (Pavel Kruglov).