Version de ClickHouse 22.12, 2022-12-15. Présentation, Vidéo
Notes de mise à niveau
- Correction d’une incompatibilité descendante dans la (dé)sérialisation des états des fonctions d’agrégation
min,max,any*,argMin,argMaxavec un argumentString. L’incompatibilité affecte les branches 22.9, 22.10 et 22.11 (corrigée respectivement à partir des versions 22.9.6, 22.10.4 et 22.11.2). Certaines versions mineures des branches 22.3, 22.7 et 22.8 sont également affectées : 22.3.13…22.3.14 (corrigé à partir de 22.3.15), 22.8.6…22.8.9 (corrigé à partir de 22.8.10), 22.7.6 et versions ultérieures (ne sera pas corrigé en 22.7, nous recommandons de passer de 22.7.* à 22.8.10 ou à une version ultérieure). Cette note de version ne concerne pas les utilisateurs qui n’ont jamais utilisé les versions affectées. Les versions incompatibles ajoutent un'\0'supplémentaire aux chaînes lors de la lecture des états des fonctions d’agrégation mentionnées ci-dessus. Par exemple, si une ancienne version a enregistré l’état deanyState('foobar')dansstate_column, alors la version incompatible affichera'foobar\0'avecanyMerge(state_column). Les versions incompatibles écrivent également les états des fonctions d’agrégation sans'\0'final. Les versions plus récentes (qui incluent le correctif) peuvent lire correctement les données écrites par toutes les versions, y compris les versions incompatibles, sauf dans un cas limite. Si une version incompatible a enregistré un état avec une chaîne se terminant réellement par un caractère nul, alors une version plus récente supprimera le'\0'final lors de la lecture de l’état de la fonction d’agrégation affectée. Par exemple, si une version incompatible a enregistré l’état deanyState('abrac\0dabra\0')dansstate_column, alors les versions plus récentes afficheront'abrac\0dabra'avecanyMerge(state_column). Le problème affecte également les requêtes distribuées lorsqu’une version incompatible fonctionne dans un cluster avec des versions plus anciennes ou plus récentes. #43038 (Alexander Tokmakov, Raúl Marín). Remarque : tous les builds officiels de ClickHouse incluent déjà les correctifs. Ce n’est pas nécessairement le cas des builds tiers non officiels, qu’il convient d’éviter.
Nouvelle fonctionnalité
- Ajout du format d’entrée/sortie
BSONEachRow. Dans ce format, ClickHouse formate/analyse chaque ligne comme un document BSON distinct, et chaque colonne est formatée/analysée comme un champ BSON unique, avec le nom de la colonne comme clé. #42033 (mark-polokhov). - Ajout de l’algorithme de JOIN
grace_hash, activable avecSET join_algorithm = 'grace_hash'. #38191 (BigRedEye, Vladimir C). - Permet de configurer des règles et des contrôles de complexité des mots de passe pour la création et la modification d’utilisateurs. #43719 (Nikolay Degterinsky).
- Masque les informations sensibles dans les logs ; masque les parties secrètes dans la sortie des requêtes
SHOW CREATE TABLEetSELECT FROM system.tables. Résout également #41418. #43227 (Vitaly Baranov). - Ajout de la syntaxe
GROUP BY ALL: #37631. #42265 (刘陶峰). - Ajout de la syntaxe
FROM table SELECT column. #41095 (Nikolay Degterinsky). - Ajout de la fonction
concatWithSeparatoret deconcat_wscomme alias pour la compatibilité avec Spark SQL. La fonctionconcatWithSeparatorAssumeInjectivea également été ajoutée comme variante pour activer l’optimisation deGROUP BY, à l’instar deconcatAssumeInjective. #43749 (李扬). - Ajout des fonctions
multiplyDecimaletdivideDecimalpour les opérations décimales à précision fixe. #42438 (Andrey Zvonov). - Ajout de la table
system.movesavec la liste des parts en cours de déplacement. #42660 (Sergei Trifonov). - Ajout de la prise en charge d’un endpoint Prometheus intégré pour ClickHouse Keeper. #43087 (Antonio Andelic).
- Prise en charge des littéraux numériques avec
_comme séparateur, par exemple1_000_000. #43925 (jh0x). - Ajout de la possibilité d’utiliser un tableau comme second paramètre de la fonction
cutURLParameter. Cela permet de supprimer plusieurs paramètres. Ferme #6827. #43788 (Roman Vasin). - Ajout d’une colonne contenant l’expression de l’index dans la table
system.data_skipping_indices. #43308 (Guillaume Tassery). - Ajout de la colonne
engine_fullà la table systèmedatabasesafin de permettre l’accès à la définition complète du engine d’une database via les tables système. #43468 (凌涛). - Ajout de la nouvelle fonction de hachage xxh3. De plus, les performances de
xxHash32etxxHash64sur ARM ont été améliorées grâce à une mise à jour de la bibliothèque. #43411 (Nikita Taranov). - Ajout de la possibilité de définir des contraintes pour les paramètres de MergeTree. Par exemple, vous pouvez interdire aux utilisateurs de redéfinir
storage_policy. #43903 (Sergei Trifonov). - Ajout d’un nouveau paramètre
input_format_json_read_objects_as_strings, qui permet d’analyser les objets JSON imbriqués en tant que Strings dans tous les formats d’entrée JSON. Ce paramètre est désactivé par défaut. #44052 (Kruglov Pavel).
Fonctionnalité expérimentale
- Prise en charge de la déduplication pour les insertions asynchrones. Avant cette modification, les insertions async ne prenaient pas en charge la déduplication, car plusieurs petites insertions coexistaient dans un même batch inséré. Closes #38075. #43304 (Han Fei).
- Ajout de la prise en charge de la distance cosinus pour l’index Annoy expérimental (recherche de similarité vectorielle). #42778 (Filatenkov Artur).
- Ajout des requêtes
CREATE / ALTER / DROP NAMED COLLECTION. #43252 (Kseniia Sumarokova). Cette fonctionnalité est en cours de développement et les requêtes ne sont pas effectives dans la version 22.12. Cette entrée du changelog a été ajoutée uniquement pour éviter toute confusion. Restrict default access to named collections to the user defined in config. This requires thatshow_named_collections = 1is set to be able to see them. #43325 (Kseniia Sumarokova). Thesystem.named_collectionstable is introduced #43147 (Kseniia Sumarokova).
Amélioration des performances
- Ajout des paramètres
max_streams_for_merge_tree_readingetallow_asynchronous_read_from_io_pool_for_merge_tree. Le paramètremax_streams_for_merge_tree_readinglimite le nombre de flux de lecture pour les tables MergeTree. Le paramètreallow_asynchronous_read_from_io_pool_for_merge_treeactive un pool d’E/S en arrière-plan pour lire à partir des tablesMergeTree. Cela peut améliorer les performances des requêtes limitées par les E/S s’il est utilisé avecmax_streams_to_max_threads_ratiooumax_streams_for_merge_tree_reading. #43260 (Nikolai Kochetov). Les performances peuvent être améliorées jusqu’à 100 fois dans les cas de stockage à forte latence, de faible nombre de CPU et de grand nombre de data parts. - Les paramètres
merge_tree_min_rows_for_concurrent_read_for_remote_filesystem/merge_tree_min_bytes_for_concurrent_read_for_remote_filesystemne respectaient pas la granularité adaptative. Les lignes volumineuses ne réduisaient pas le nombre de lignes lues (comme c’était le cas pourmerge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read), ce qui pouvait entraîner une utilisation mémoire élevée lors de l’utilisation de systèmes de fichiers distants. #43965 (Nikolai Kochetov). - Optimisation du nombre de requêtes de listage vers ZooKeeper ou ClickHouse Keeper lors de la sélection d’une partie à fusionner. Auparavant, cela pouvait produire des milliers de requêtes dans certains cas. Corrige #43647. #43675 (Alexander Tokmakov).
- L’optimisation est désormais ignorée si
max_size_to_preallocate_for_aggregationa une valeur trop faible. La valeur par défaut de ce paramètre a été augmentée à10^8. #43945 (Nikita Taranov). - Accélération de l’arrêt du serveur en évitant le nettoyage des anciennes data parts. Cela n’est plus nécessaire depuis https://github.com/ClickHouse/ClickHouse/pull/41145. #43760 (Sema Checherinda).
- La fusion sur le nœud initiateur utilise désormais la même approche à mémoire bornée que la fusion des résultats d’agrégation locaux si
enable_memory_bound_merging_of_aggregation_resultsest défini. #40879 (Nikita Taranov). - Amélioration de Keeper : synchronisation des logs sur disque en parallèle de la réplication. #43450 (Antonio Andelic).
- Amélioration de Keeper : les requêtes sont regroupées en lots plus fréquemment. Ce batching peut être contrôlé avec le nouveau paramètre
max_requests_quick_batch_size. #43686 (Antonio Andelic).
Amélioration
- Mise en œuvre des dépendances référentielles et utilisation de celles-ci pour créer les tables dans le bon ordre lors de la restauration depuis une sauvegarde. #43834 (Vitaly Baranov).
- Remplacement des UDFs dans la requête
CREATEafin d’éviter les échecs lors du chargement au démarrage. De plus, les UDFs peuvent désormais être utilisées comme expressionsDEFAULTpour les colonnes. #43539 (Antonio Andelic). - Modification du mode de suppression des parts par les requêtes suivantes : TRUNCATE TABLE, ALTER TABLE DROP PART, ALTER TABLE DROP PARTITION. Désormais, ces requêtes créent des parts vides qui recouvrent les anciennes. Cela permet à la requête TRUNCATE de fonctionner sans verrou exclusif ultérieur, ce qui signifie que les lectures concurrentes ne sont pas bloquées. La durabilité a également été assurée pour toutes ces requêtes. Si la requête aboutit, aucune part ressuscitée n’apparaît ensuite. Notez que l’atomicité n’est garantie qu’à l’échelle de la transaction. #41145 (Sema Checherinda).
- La requête
SET param_xne nécessite plus de sérialisation manuelle en chaîne pour la valeur du paramètre. Par exemple, la requêteSET param_a = '[\'a\', \'b\']'peut désormais s’écrireSET param_a = ['a', 'b']. #41874 (Nikolay Degterinsky). - Affichage des lignes lues dans l’indicateur de progression lors de la lecture depuis STDIN par le client. Ferme #43423. #43442 (Kseniia Sumarokova).
- Affichage d’une barre de progression lors de la lecture depuis la table function / le moteur S3. #43454 (Kseniia Sumarokova).
- La barre de progression affichera à la fois les lignes lues et les lignes écrites. #43496 (Ilya Yatsishin).
filesystemAvailableet les fonctions associées prennent en charge un argument optionnel avec le nom du disk, etfilesystemFreedevientfilesystemUnreserved. Ferme #35076. #42064 (flynn).- Intégration avec LDAP : augmentation de la valeur par défaut de search_limit à 256, et ajout d’une option de config du serveur LDAP pour la définir sur une valeur arbitraire. Ferme : #42276. #42461 (Vasily Nemkov).
- Permet également de supprimer les informations sensibles (voir
query_masking_rulesdans le fichier de configuration) des messages d’exception. Résout #41418. #42940 (filimonov). - Prise en charge de requêtes comme
SHOW FULL TABLES ...pour la compatibilité avec MySQL. #43910 (Filatenkov Artur). - Amélioration de Keeper : ajout de la commande 4lw
rqld, qui permet d’assigner manuellement un nœud comme leader. #43026 (JackyWoo). - Application des paramètres de délai d’expiration de connexion aux INSERT asynchrones sur Distributed à partir de la requête. #43156 (Azat Khuzhin).
- La fonction
unhexprend désormais en charge les argumentsFixedString. issue42369. #43207 (DR). - La priorité est donnée à la suppression des parties entièrement expirées conformément aux règles TTL, voir #42869. #43222 (zhongyuankai).
- Indication de la charge CPU plus précise et plus réactive dans clickhouse-client. #43307 (Sergei Trifonov).
- Prise en charge de la lecture des sous-colonnes des types imbriqués depuis le stockage
S3et la fonction de tables3avec les formatsParquet,ArrowetORC. #43329 (chen). - Ajout de la colonne
table_uuidà la tablesystem.parts. #43404 (Azat Khuzhin). - Ajout d’une option client pour afficher le nombre de lignes traitées localement en mode non interactif (
--print-num-processed-rows). #43407 (jh0x). - Implémentation de l’optimisation
aggregation-in-orderau niveau d’un plan de requête. Elle est activée par défaut (mais ne fonctionne qu’avecoptimize_aggregation_in_order, qui est désactivé par défaut). Définissezquery_plan_aggregation_in_order = 0pour utiliser la version précédente basée sur l’AST. #43592 (Nikolai Kochetov). - Possibilité de collecter des événements de profilage avec
trace_type = 'ProfileEvent'danssystem.trace_logà chaque incrément, avec la pile d’appels courante, le nom de l’événement de profilage et la valeur de l’incrément. Cette fonctionnalité peut être activée via le paramètretrace_profile_eventset utilisée pour analyser les performances des requêtes. #43639 (Anton Popov). - Ajout d’un nouveau paramètre
input_format_max_binary_string_sizepour limiter la taille des chaînes au format RowBinary. #43842 (Kruglov Pavel). - Lorsque ClickHouse interroge un serveur HTTP distant et que celui-ci renvoie une erreur, le code HTTP numérique ne s’affichait pas correctement dans le message d’exception. Corrige #43919. #43920 (Alexey Milovidov).
- Signale correctement les erreurs dans les requêtes, même lorsqu’une optimisation de plusieurs JOIN est en cours. #43583 (Salvatore).
Amélioration de la compilation/des tests/du packaging
- L’intégration à systemd notifie désormais correctement systemd que le service a effectivement démarré et qu’il est prêt à traiter les requêtes. #43400 (Коренберг Марк).
- Ajout d’une option permettant de compiler ClickHouse avec OpenSSL en utilisant le module FIPS d’OpenSSL. Ce type de build n’a pas été testé pour valider la sécurité et n’est pas pris en charge. #43991 (Boris Kuschel).
- Mise à niveau vers le nouveau codec de compression
DeflateQpl, implémenté dans une PR précédente (détails : https://github.com/ClickHouse/ClickHouse/pull/39494). Ce correctif améliore le codec sur les points suivants : 1. passage de QPL v0.2.0 à QPL v0.3.0 Intel® Query Processing Library (QPL) 2. amélioration du fichier CMake pour corriger les problèmes de build avec QPL v0.3.0. 3. liaison de la bibliothèque QPL avec libaccel-config au moment de la compilation, au lieu d’un chargement à l’exécution avec QPL v0.2.0 (dlopen) 4. correction d’un problème d’affichage des logs dans CompressionCodecDeflateQpl.cpp. #44024 (jasperzhu).
Correction de bug (dysfonctionnement visible par l’utilisateur dans une version stable ou prestable officielle)
- Correction d’un bug pouvant entraîner un interblocage lors de l’utilisation des insertions asynchrones. #43233 (Anton Popov).
- Correction d’une logique erronée dans l’optimisation au niveau de l’AST
optimize_normalize_count_variants. #43873 (Duc Canh Le). - Correction d’un cas où les mutations n’avançaient plus lorsque les sommes de contrôle ne correspondaient pas entre les répliques (par exemple, en raison d’un changement de format de données lors d’une mise à niveau). #36877 (nvartolomei).
- Correction de l’optimisation
skip_unavailable_shards, qui ne fonctionnait pas avec la fonction de tablehdfsCluster. #43236 (chen). - Correction de la prise en charge de
s3pour le caractère générique?. Clôt #42731. #43253 (chen). - Correction des fonctions
arrayFirstOrNulletarrayLastOrNull, qui renvoyaient null lorsque le tableau contenait des élémentsNullable. #43274 (Duc Canh Le). - Correction d’un comptage incorrect de
UserTimeMicroseconds/SystemTimeMicrosecondslié aux tables Kafka. #42791 (Azat Khuzhin). - Ne plus supprimer les exceptions sur les disques
web. Correction également des tentatives de nouvelle exécution pour le disqueweb. #42800 (Azat Khuzhin). - Correction d’une condition de concurrence (logique) entre les insertions et la suppression de vues matérialisées. Cette condition de concurrence survenait lorsqu’une vue matérialisée était supprimée en même temps qu’un INSERT : les vues matérialisées étaient présentes comme dépendance de l’insertion au début de l’exécution, mais la table avait déjà été supprimée au moment où la chaîne d’insertion tentait d’y accéder, ce qui produisait une exception
UNKNOWN_TABLEouTABLE_IS_DROPPEDet interrompait l’insertion. Après ce changement, ces exceptions sont évitées et l’insertion se poursuit simplement si la dépendance a disparu. #43161 (AlfVII). - Correction d’un comportement indéfini dans la fonction
quantiles, qui pouvait conduire à l’utilisation de mémoire non initialisée. Détecté par le fuzzer. Cela clôt #44066. #44067 (Alexey Milovidov). - Ajout d’une vérification supplémentaire en cas de taille non compressée nulle dans
CompressionCodecDelta. #43255 (Nikita Taranov). - Aplatissement des tableaux issus de Parquet pour éviter un problème d’incohérence des données dans les tableaux. Ces fichiers incorrects peuvent être générés par Apache Iceberg. #43297 (Arthur Passos).
- Correction d’un cast incorrect à partir d’une colonne
LowCardinalitylors de l’utilisation de l’exécution court-circuitée des fonctions. #43311 (Kruglov Pavel). - Correction des requêtes avec
SAMPLE BYet l’optimisation PREWHERE sur des tables utilisant le moteurMerge. #43315 (Antonio Andelic). - Vérification et comparaison du contenu du fichier
format_versiondansMergeTreeDataafin de permettre le chargement des tables même si la politique de stockage a été modifiée. #43328 (Antonio Andelic). - Corrige la possible erreur logique (très improbable) “No column to rollback” lors d’un INSERT dans des tables
Buffer. #43336 (Azat Khuzhin). - Corrige un bug qui permettait à l’analyseur syntaxique d’accepter un nombre illimité de parenthèses dans une même fonction si
allow_function_parametersest défini. #43350 (Nikolay Degterinsky). MaterializeMySQL(fonctionnalité expérimentale) prend en charge la DDL :drop table t1, t2et est compatible avec la plupart des DDL DROP de MySQL. #43366 (zzsmdfj).session_log(fonctionnalité expérimentale) : correction de l’impossibilité de se connecter (en raison de l’échec de création de l’entrée session_log) dans le très rare cas de profils de paramètres corrompus. #42641 (Vasily Nemkov).- Corrige le possible
Cannot create non-empty column with type Nothingdans les fonctionsif/multiIf. Clôt #43356. #43368 (Kruglov Pavel). - Corrige un bug lorsqu’un filtre au niveau des lignes utilise la valeur par défaut d’une colonne. #43387 (Alexander Gololobov).
- Une requête avec
DISTINCT+LIMIT BY+LIMITpeut renvoyer moins de lignes que prévu. Corrige #43377. #43410 (Igor Nikonov). - Corrige
sumMappourNullable(Decimal(...)). #43414 (Azat Khuzhin). - Corrige
date_diffpour les heures/minutes sur MacOS. Clôt #42742. #43466 (zzsmdfj). - Corrige une comptabilisation incorrecte de la mémoire due aux merges/mutations. #43516 (Azat Khuzhin).
- Corrige l’analyse de la clé primaire avec des conditions impliquant
toString(enum). #43596 (Nikita Taranov). Cette erreur a été découverte par @tisonkun. - Garantit la cohérence lorsque
clickhouse-copiermet à jour status etattach_is_donedans Keeper une fois l’attachement de la partition terminé. #43602 (lzydmxy). - Lors de la récupération d’une réplique perdue d’une base de données
Replicated(fonctionnalité expérimentale), il pouvait arriver qu’il faille échanger atomiquement deux noms de tables (avec EXCHANGE). Auparavant, nous essayions d’utiliser deux requêtes RENAME, ce qui échouait évidemment et faisait en plus échouer tout le processus de récupération de la réplique de base de données. #43628 (Nikita Mikhaylov). - Corrige le cas où la fonction
s3Clustergénère l’erreurNOT_FOUND_COLUMN_IN_BLOCK. Clôt #43534. #43629 (chen). - Corrige une possible erreur logique
Array sizes mismatchedlors de l’analyse d’un objet JSON contenant des tableaux avec les mêmes noms de clé, mais à des niveaux d’imbrication différents. Clôt #43569. #43693 (Kruglov Pavel). - Corrige une possible exception dans le cas d’un
GROUP BYdistribué avec une colonneALIASparmi les clés d’agrégation. #43709 (Nikita Taranov). - Corrige un bug pouvant entraîner des projections corrompues si la réplication zero-copy (fonctionnalité expérimentale) est activée et utilisée. #43764 (alesapin).
- Corrige l’utilisation du multipart upload pour de très grands objets S3 sur AWS S3. #43824 (ianton-ru).
- Corrige
ALTER ... RESET SETTINGavecON CLUSTER. Cela pouvait n’être appliqué qu’à une seule replica. Corrige #43843. #43848 (Elena Torró). - Corrige une erreur logique dans JOIN avec le moteur de table
Joinà droite, lorsqueUSINGest utilisé. #43963 (Vladimir C). Corrige un bug lié à un ordre incorrect des clés dans le moteur de tableJoin. #44012 (Vladimir C). - Correctif Keeper : lève une exception si le port interserver pour Raft est déjà utilisé. #43984 (Antonio Andelic).
- Corrige l’argument positionnel de ORDER BY (exemple :
ORDER BY 1, 2) en cas de pruning inutile de colonnes dans des sous-requêtes. Clôt #43964. #43987 (Kseniia Sumarokova). - Corrige une exception lorsqu’une sous-requête contient HAVING sans contenir de véritable agrégation. #44051 (Nikita Taranov).
- Corrige une condition de concurrence dans le multipart upload S3. Cette condition pouvait provoquer l’erreur
Part number must be an integer between 1 and 10000, inclusive. (S3_ERROR)lors de la restauration depuis une sauvegarde. #44065 (Vitaly Baranov).
Version de ClickHouse 22.11, 2022-11-17. Présentation, Vidéo
Changement non rétrocompatible
- La famille de fonctions
JSONExtracttentera désormais de convertir les valeurs dans le type demandé. #41502 (Márcio Martins).
Nouvelle fonctionnalité
- Ajoute la prise en charge des retries lors des INSERT dans ReplicatedMergeTree lorsqu’une session avec ClickHouse Keeper est perdue. Outre la tolérance aux pannes, cela vise à offrir une meilleure expérience utilisateur en évitant de renvoyer une erreur à l’utilisateur pendant un insert si Keeper redémarre (par exemple, lors d’une mise à niveau). #42607 (Igor Nikonov).
- Ajoute les table engines
HudietDeltaLake, en mode read-only, uniquement pour les tables sur S3. #41054 (Daniil Rubin, Kseniia Sumarokova). - Ajoute les table functions
hudietdeltaLake. #43080 (flynn). - Prise en charge des intervalles de temps composites. 1. Les opérations d’addition, de soustraction et de négation sont désormais disponibles sur les Interval. Si les types d’Interval sont différents, ils seront transformés en Tuple de ces types. 2. Un tuple of intervals peut être ajouté à un champ Date/DateTime ou en être soustrait. 3. Ajout de la prise en charge du parsing d’Interval de types différents, par exemple :
INTERVAL '1 HOUR 1 MINUTE 1 SECOND'. #42195 (Nikolay Degterinsky). - Ajout de la prise en charge du glob
**pour le parcours récursif des directory du filesystem et de S3. Résout #36316. #42376 (SmitaRKulkarni). - Introduit le disk type
s3_plainpour les opérations de type write-once-read-many. ImplémenteATTACHd’une tableMergeTreepour le disks3_plain. #42628 (Azat Khuzhin). - Ajout des politiques row-level appliquées à
system.query_log. #39819 (Vladimir Chebotaryov). - Ajoute la commande à quatre lettres
csnppour créer manuellement des snapshots dans ClickHouse Keeper. De plus,lgifa été ajoutée pour obtenir des informations Raft sur un nœud spécifique (par ex. l’index du dernier snapshot créé, le dernier index de log committed). #41766 (JackyWoo). - Ajoute la fonction
ascii, comme dans Apache Spark : https://spark.apache.org/docs/latest/api/sql/#ascii. #42670 (李扬). - Ajoute la fonction
pmod, qui renvoie un résultat non négatif basé sur le modulo. #42755 (李扬). - Ajoute la fonction
formatReadableDecimalSize. #42774 (Alejandro). - Ajoute la fonction
randCanonical, similaire à la fonctionranddans Apache Spark ou Impala. La fonction génère des résultats pseudo-aléatoires avec des values uniformément distribuées sur [0, 1), indépendantes et identiquement distribuées. #43124 (李扬). - Ajoute la fonction
displayName, ferme #36770. #37681 (hongbin). - Ajoute le setting
min_age_to_force_merge_on_partition_onlypour optimiser les anciennes parts uniquement à l’échelle de la partition entière. #42659 (Antonio Andelic). - Ajout d’une implémentation générique pour les named collections à structure arbitraire, le type d’accès et
system.named_collections. #43147 (Kseniia Sumarokova).
Amélioration des performances
- La fonction
matchpeut utiliser l’index s’il s’agit d’une condition sur un préfixe de chaîne. Cela corrige #37333. #42458 (clarkcaoliu). - Accélération des opérateurs AND et OR lorsqu’ils sont chaînés. #42214 (Zhiguo Zhou).
- Prise en charge de l’analyse en parallèle pour le input format
LineAsString. Cela améliore légèrement les performances. Cela corrige #42502. #42780 (Kruglov Pavel). - Amélioration des performances de ClickHouse Keeper : amélioration des performances de commit dans les cas où de nombreux nœuds différents ont des états non commités. Cela devrait aider lorsque qu’un nœud follower ne parvient pas à se synchroniser assez vite. #42926 (Antonio Andelic).
- Une condition comme
NOT LIKE 'prefix%'peut utiliser le primary index. #42209 (Duc Canh Le).
Fonctionnalité expérimentale
- Prise en charge du type
Objectdans d’autres types, par ex.Array(JSON). #36969 (Anton Popov). - Ignorer l’événement SAVEPOINT du binlog MySQL pour MaterializedMySQL. #42931 (zzsmdfj). Gestion (ignorée) des requêtes SAVEPOINT dans MaterializedMySQL. #43086 (Stig Bakken).
Amélioration
- Les requêtes triviales avec un petit LIMIT détermineront correctement le nombre estimé de lignes à lire, de sorte que le seuil sera correctement vérifié. Ferme #7071. #42580 (Han Fei).
- Ajout de la prise en charge des paramètres interactifs dans les requêtes INSERT VALUES. #43077 (Nikolay Degterinsky).
- Ajout du nouveau champ
allow_readonlydanssystem.table_functionspour permettre l’utilisation des fonctions de table en mode lecture seule. Résout #42414 Implémentation : * Ajout d’un nouveau champ allow_readonly à la table system.table_functions. * Mise à jour pour utiliser le nouveau champ allow_readonly afin de permettre l’utilisation des fonctions de table en mode lecture seule. Tests : * Ajout d’un test pour le filesystem tests/queries/0_stateless/02473_functions_in_readonly_mode.sh Documentation : * Mise à jour de la documentation en anglais sur les fonctions de table. #42708 (SmitaRKulkarni). system.asynchronous_metricsreçoit une documentation embarquée. Cette documentation est également exportée vers Prometheus. Correction d’une erreur dans les métriques concernant les disquescache: elles n’étaient calculées que pour un seul disque de cache arbitraire au lieu de tous. Cela clôt #7644. #43194 (Alexey Milovidov).- L’algorithme de throttling a été remplacé par un token bucket. #42665 (Sergei Trifonov).
- Masquage des mots de passe et des clés secrètes à la fois dans
system.query_loget/var/log/clickhouse-server/*.log, ainsi que dans les messages d’erreur. #42484 (Vitaly Baranov). - Suppression des parts couvertes pour une part récupérée (afin d’éviter une possible augmentation du délai de réplication). #39737 (Azat Khuzhin).
- Si
/dev/ttyest disponible, la progression dans clickhouse-client et clickhouse-local sera affichée directement dans le terminal, sans écrire sur STDERR. Cela permet d’obtenir la progression même si STDERR est redirigé vers un fichier, et le fichier ne sera pas pollué par des séquences d’échappement de terminal. La progression peut être désactivée avec--progress false. Cela clôt #32238. #42003 (Alexey Milovidov). - Ajout de la prise en charge de l’entrée
FixedStringdans les fonctions d’encodage Base64. #42285 (ltrk2). - Ajout des colonnes
bytes_on_disketpathàsystem.detached_parts. Ferme #42264. #42303 (chen). - Amélioration de l’utilisation de la structure de la table d’insertion dans les fonctions de table : le paramètre
use_structure_from_insertion_table_in_table_functionsa désormais une nouvelle valeur possible,2, ce qui signifie que ClickHouse essaiera de déterminer automatiquement s’il est possible ou non d’utiliser la structure de la table d’insertion. Ferme #40028. #42320 (Kruglov Pavel). - Correction de l’absence d’indication de progression pour INSERT FROM INFILE. Ferme #42548. #42634 (chen).
- Refactorisation de la fonction
tokenspour permettre de définir le nombre maximal de tokens renvoyés par les fonctions associées (désactivé par défaut). #42673 (李扬). - Autorisation de l’utilisation d’arguments
Date32pour les fonctionsformatDateTimeetFROM_UNIXTIME. #42737 (Roman Vasin). - Mise à jour de tzdata vers 2022f. Le Mexique n’observera plus l’heure d’été, sauf près de la frontière avec les États-Unis : https://www.timeanddate.com/news/time/mexico-abolishes-dst-2022.html. Chihuahua passe à UTC-6 toute l’année à partir du 2022-10-30. Les Fidji n’observent plus non plus l’heure d’été. Voir https://github.com/google/cctz/pull/235 et https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1995209. #42796 (Alexey Milovidov).
- Ajout de la métrique d’événement
FailedAsyncInsertQuerypour les insertions asynchrones. #42814 (Krzysztof Góralski). - Implémentation de l’optimisation
read-in-ordersur la base du query plan. Elle est activée par défaut. Définissezquery_plan_read_in_order = 0pour utiliser la version précédente basée sur l’AST. #42829 (Nikolai Kochetov). - Augmentation exponentielle de la taille des parts d’upload pour la sauvegarde vers S3 afin d’éviter les erreurs liées à la limite maximale de 10 000 parts du multipart upload vers S3. #42833 (Vitaly Baranov).
- Lorsque la tâche de merge est continuellement occupée et que l’espace disque est insuffisant, les parts complètement expirées ne peuvent pas être sélectionnées ni supprimées, ce qui entraîne un manque d’espace disque. L’idée est que, lorsqu’une Part entière expire, il n’est pas nécessaire de réserver de l’espace disque supplémentaire, afin de garantir l’exécution normale du TTL. #42869 (zhongyuankai).
- Ajout de la fonction
osset du table engineOSS(ce qui est pratique pour les utilisateurs). oss est entièrement compatible avec S3. #43155 (zzsmdfj). - Amélioration du signalement des erreurs lors de la collecte d’informations liées au système d’exploitation pour la table
system.asynchronous_metrics. #43192 (Alexey Milovidov). - Modification des tables
INFORMATION_SCHEMApour permettre à ClickHouse de se connecter à lui-même via le protocole de compatibilité MySQL. Ajout de colonnes au lieu d’alias (en lien avec #9769). Cela améliorera la compatibilité avec divers clients MySQL. #43198 (Filatenkov Artur). - Ajout de certaines fonctions pour améliorer la compatibilité avec PowerBI lorsqu’il se connecte via le protocole MySQL #42612 (Filatenkov Artur).
- Meilleure ergonomie du Dashboard lors des modifications #42872 (Vladimir C).
Amélioration de la compilation/des tests/du packaging
- Exécution de SQLancer pour chaque pull request et chaque commit sur master. SQLancer est un fuzzer Open Source spécialisé dans la détection automatique des bogues logiques. #42397 (Ilya Yatsishin).
- Mise à jour vers la dernière version de zlib-ng. #42463 (Boris Kuschel).
- Ajout de la prise en charge des tests de ClickHouse server avec Jepsen. Nous prenons déjà en charge les tests de ClickHouse Keeper avec Jepsen. Cette pull request étend cette prise en charge aux tables Replicated. #42619 (Antonio Andelic).
- Utilisation de https://github.com/matus-chochlik/ctcache pour la mise en cache des résultats de clang-tidy. #42913 (Mikhail f. Shiryaev).
- Avant ce correctif, RPM conservait la config définie par l’utilisateur dans
$file.rpmsave. Cette pull request corrige ce comportement et ne remplacera plus les fichiers de l’utilisateur par ceux des paquets. #42936 (Mikhail f. Shiryaev). - Suppression de certaines bibliothèques de l’image Docker Ubuntu. #42622 (Alexey Milovidov).
Correction de bug (dysfonctionnement visible par l’utilisateur dans une version stable ou prestable officielle)
- Mise à jour du normaliseur pour cloner l’AST de l’alias. Résout #42452 Implémentation : * Mise à jour de QueryNormalizer afin de cloner l’AST de l’alias lorsqu’il est remplacé. Auparavant, le simple fait de réaffecter le même entraînait une exception dans LogicalExpressinsOptimizer, car le même parent était inséré une seconde fois. * Ce bogue n’apparaît pas avec le nouvel analyseur (
allow_experimental_analyzer), donc aucune modification n’a été apportée de ce côté. J’ai ajouté un test correspondant. #42827 (SmitaRKulkarni). - Correction d’une condition de concurrence lors de la sauvegarde des tables dans les bases de données
Lazy. #43104 (Vitaly Baranov). - Correction pour
skip_unavailable_shards: cela ne fonctionnait pas avec la fonction de tables3Cluster. #43131 (chen). - Correction de l’inférence de schéma dans
s3Clusteret amélioration dehdfsCluster. #41979 (Kruglov Pavel). - Correction des nouvelles tentatives de lecture depuis les moteurs de table URL / la fonction de table. (les erreurs pouvant être réessayées pouvaient l’être plus de fois que nécessaire, tandis que les erreurs non réessayables provoquaient l’échec d’une assertion dans le code). #42224 (Kseniia Sumarokova).
- Un défaut de segmentation lié à DNS & c-ares a été signalé, puis corrigé. #42234 (Arthur Passos).
- Correction de
LOGICAL_ERRORArguments of 'plus' have incorrect data types, qui peut se produire lors de l’analyse de la PK (vérification de monotonie). Correction d’une analyse PK invalide pour les fonctions binaires monotones avec un premier argument constant. #42410 (Nikolai Kochetov). - Correction d’une analyse de clé incorrecte lorsque les types de clé ne peuvent pas être contenus dans Nullable. Cela corrige #42456. #42469 (Amos Bird).
- Correction d’une faute de frappe dans un nom de paramètre, qui entraînait une mauvaise utilisation du cache d’inférence de schéma avec le paramètre
input_format_csv_use_best_effort_in_schema_inference. Ferme #41735. #42536 (Kruglov Pavel). - Correction de la création d’un Set avec un en-tête incorrect lorsque le type de données est LowCardinality. Ferme #42460. #42579 (flynn).
- Les valeurs
(U)Int128et(U)Int256étaient correctement vérifiées dansPREWHERE. #42605 (Antonio Andelic). - Correction d’un bogue dans l’analyseur syntaxique des fonctions, qui pouvait entraîner un défaut de segmentation. #42724 (Nikolay Degterinsky).
- Correction du verrouillage dans
truncate table. #42728 (flynn). - Correction d’un plantage possible dans les disques
weblorsque le fichier n’existe pas (ou dansOPTIMIZE TABLE FINAL, qui peut aussi finir par produire la même erreur). #42767 (Azat Khuzhin). - Correction du mapping de
auth_typedanssystem.session_log, avec l’ajout deSSL_CERTIFICATEparmi les valeurs de l’énumération. #42782 (Miel Donkers). - Correction d’un
stack-use-after-returndans une build ASAN du parseur de requêtes CREATE USER. #42804 (Nikolay Degterinsky). - Correction de
lowerUTF8/upperUTF8lorsqu’un symbole se trouvait à cheval sur une limite de 16 octets (cas très fréquent si vous avez des chaînes de plus de 16 octets). #42812 (Azat Khuzhin). - Une vérification supplémentaire des limites a été ajoutée à la procédure de décompression LZ4 afin de corriger un dysfonctionnement en cas d’entrée malformée. #42868 (Nikita Taranov).
- Correction d’un rare blocage possible lors de l’annulation d’une requête. #42874 (Azat Khuzhin).
- Correction d’un comportement incorrect avec plusieurs disjonctions dans le hash join, clôt #42832. #42876 (Vladimir C).
- Un pointeur nul pouvait être généré lors d’un
select if as fromsur une ‘jointure de trois tables’, par exemple avec cette requête SQL : #42883 (zzsmdfj). - Correction d’un rapport du memory sanitizer dans Cluster Discovery, clôt #42763. #42905 (Vladimir C).
- Amélioration de l’inférence de schéma de DateTime dans le cas d’une chaîne vide. #42911 (Kruglov Pavel).
- Correction de la rare erreur NOT_FOUND_COLUMN_IN_BLOCK lorsqu’une projection peut être utilisée, mais qu’aucune projection n’est disponible. Cela corrige #42771 . Le bug a été introduit dans https://github.com/ClickHouse/ClickHouse/pull/25563. #42938 (Amos Bird).
- Correction de ATTACH TABLE dans le moteur de base de données
PostgreSQLsi la table contient le type de données DATETIME. Clôt #42817. #42960 (Kseniia Sumarokova). - Correction de l’analyse des lambdas. Clôt #41848. #42979 (Nikolay Degterinsky).
- Correction d’une analyse incorrecte des clés lorsque des clés Nullable apparaissent au milieu d’un hyperrectangle. Cela corrige #43111 . #43133 (Amos Bird).
- Correction de plusieurs lectures hors limites du buffer lors de la désérialisation d’aggregate function states soigneusement forgés. #43159 (Raúl Marín).
- Correction de la fonction
ifdans le cas de NULL et d’arguments const Nullable. Clôt #43069. #43178 (Kruglov Pavel). - Correction d’un overflow en arithmétique décimale lors de l’analyse de
DateTimeavec l’algorithme ‘best effort’. Closes #43061. #43180 (Kruglov Pavel). - Le champ
indentproduit par l’outilgit-importétait calculé incorrectement. Voir https://clickhouse.com/docs/getting-started/example-datasets/github/. #43191 (Alexey Milovidov). - Correction du comportement inattendu des types
Intervalavec les sous-requêtes et le transtypage. #43193 (jh0x).
Version 22.10 de ClickHouse, 2022-10-25. Présentation, Vidéo
Changement non rétrocompatible
- Renommage des commandes de cache :
show caches->show filesystem caches,describe cache->describe filesystem cache. #41508 (Kseniia Sumarokova). - Suppression de la prise en charge de la section
WITH TIMEOUTpourLIVE VIEW. Ceci résout #40557. #42173 (Alexey Milovidov). - Suppression de la prise en charge de la macro
{database}dans le prompt du client. Elle s’affichait incorrectement si la base de données n’était pas spécifiée et n’était pas mise à jour après les instructionsUSE. Ceci résout #25891. #42508 (Alexey Milovidov).
Nouvelle fonctionnalité
- Une configuration de protocoles composable a été ajoutée. Il est désormais possible de configurer différents protocoles avec différents hôtes d’écoute. Des wrappers de protocole comme PROXYv1 peuvent être configurés par-dessus n’importe quel autre protocole (TCP, TCP sécurisé, MySQL, Postgres). #41198 (Yakov Olkhovskiy).
- Ajout de
S3comme nouveau type de destination pour les sauvegardes. Prise en charge de BACKUP vers S3 en conservant telle quelle la structure des chemins/données. #42333 (Vitaly Baranov), #42232 (Azat Khuzhin). - Ajout de fonctions (
randUniform,randNormal,randLogNormal,randExponential,randChiSquared,randStudentT,randFisherF,randBernoulli,randBinomial,randNegativeBinomial,randPoisson) pour générer des valeurs aléatoires selon les distributions spécifiées. Cela clôt #21834. #42411 (Nikita Mikhaylov). - Amélioration de ClickHouse Keeper : ajout de la prise en charge du téléversement de snapshots vers S3. Les informations S3 peuvent être définies dans
keeper_server.s3_snapshot. #41342 (Antonio Andelic). - Ajout d’une fonction d’agrégation
analysisOfVariance(anova) permettant d’effectuer un test statistique sur plusieurs groupes d’observations suivant une distribution normale afin de déterminer si tous les groupes ont la même moyenne. PR d’origine #37872. #42131 (Nikita Mikhaylov). - Prise en charge de la limitation des données temporaires stockées sur disque à l’aide des paramètres
max_temporary_data_on_disk_size_for_user/max_temporary_data_on_disk_size_for_query. #40893 (Vladimir C). - Ajout du paramètre
format_json_object_each_row_column_for_object_namepour écrire/analyser le nom de l’objet comme valeur de colonne au format JSONObjectEachRow. #41703 (Kruglov Pavel). - Ajout de la fonction de hachage BLAKE3 à SQL. #33435 (BoloniniD).
- La fonction
javaHasha été étendue aux entiers. #41131 (JackyWoo). - Ajout de la prise en charge d’OpenTelemetry pour les DDL ON CLUSTER (nécessite que
distributed_ddl_entry_format_versionsoit défini sur 4). #41484 (Frank Chen). - Ajout de la table système
asynchronous_insert_log. Elle contient des informations sur les insertions asynchrones (y compris les résultats des requêtes en mode fire-and-forget (avecwait_for_async_insert=0)) pour une meilleure introspection. #42040 (Anton Popov). - Ajout de la prise en charge des méthodes
lz4,bz2,snappydansAccept-Encodingde HTTP, qui constitue une extension non standard du protocole HTTP. #42071 (Nikolay Degterinsky). - Ajout de fonctions d’encodage/décodage Morton Coding (ZCurve). #41753 (Constantine Peresypkin).
- Prise en charge de
SET setting_name = DEFAULTajoutée. #42187 (Filatenkov Artur).
Fonctionnalité expérimentale
- Ajout d’une nouvelle infrastructure pour l’analyse et la planification des requêtes avec le paramètre
allow_experimental_analyzer. #31796 (Maksim Kita). - Première implémentation de Kusto Query Language. Veuillez ne pas l’utiliser. #37961 (Yong Wang).
Amélioration des performances
- Assouplissement du seuil « Too many parts ». Cela clôt #6551. Désormais, ClickHouse autorisera davantage de parts dans une partition si la taille moyenne des parts est suffisamment importante (au moins 10 GiB). Cela permet d’avoir jusqu’à des pétaoctets de données dans une seule partition d’une seule table sur un seul serveur, ce qui est possible avec des baies de disques ou du stockage objet. #42002 (Alexey Milovidov).
- Implémentation d’un parseur de précédence des opérateurs afin de réduire la taille de pile requise. #34892 (Nikolay Degterinsky).
- L’optimisation DISTINCT in order exploite les propriétés de tri des flux de données. Cette amélioration permettra la lecture ordonnée pour DISTINCT lorsque cela s’applique (auparavant, il fallait spécifier ORDER BY pour les colonnes de DISTINCT). #41014 (Igor Nikonov).
- ColumnVector : optimisation de l’index UInt8 avec AVX512VBMI. #41247 (Guo Wangyang).
- Optimisation des contentions de verrouillage pour
ThreadGroupStatus::mutex. Les tests de performance de SSB (Star Schema Benchmark) sur la plateforme ICX (Intel Xeon Platinum 8380 CPU, 80 cœurs, 160 threads) montrent que ce changement pourrait apporter un gain de 2.95x sur la moyenne géométrique du QPS de tous les sous-cas. #41675 (Zhiguo Zhou). - Ajout des capacités
ldapraux builds AArch64. Elles sont prises en charge à partir de Graviton 2+, ainsi que sur les instances Azure et GCP. Elles ne sont apparues dans clang-15 qu’il n’y a pas si longtemps. #41778 (Daniel Kutenin). - Amélioration des performances lors de la comparaison de chaînes lorsqu’un argument est une chaîne constante vide. #41870 (Jiebin Sun).
- Optimisation de
insertFromde ColumnAggregateFunction pour partager l’aggregate state dans certains cas. #41960 (flynn). - Accélération de l’écriture sur les disques
azure_blob_storage(respect demax_single_part_upload_sizeau lieu d’écrire un bloc pour chaque taille de buffer). Inefficacité mentionnée dans #41754. #42041 (Kseniia Sumarokova). - Rendre uniques les identifiants de thread dans la liste des processus et query_log afin d’éviter le gaspillage. #42180 (Alexey Milovidov).
- Prise en charge du contournement complet du cache (à la fois le téléchargement dans le cache et la lecture des données en cache) lorsque la plage de lecture demandée dépasse le seuil défini par le paramètre de cache
bypass_cache_threashold; nécessite l’activation deenable_bypass_cache_with_threshold. #42418 (Han Shukai). Cela est utile sur les disques locaux lents.
Amélioration
- Ajout du paramètre
allow_implicit_no_password: en combinaison avecallow_no_password, il interdit de créer un utilisateur sans mot de passe, sauf siIDENTIFIED WITH no_passwordest explicitement spécifié. #41341 (Nikolay Degterinsky). - Keeper embarqué démarrera désormais toujours en arrière-plan, ce qui permet à ClickHouse de démarrer sans atteindre le quorum. #40991 (Antonio Andelic).
- Le rétablissement d’une connexion à ZooKeeper après l’expiration de la précédente est désormais plus réactif. Auparavant, une tâche s’exécutait par défaut toutes les minutes, si bien qu’une table pouvait rester en état
readonlypendant ce laps de temps. #41092 (Nikita Mikhaylov). - Les projections peuvent désormais être utilisées avec zero-copy replication (zero-copy replication n’est pas une fonctionnalité destinée à la production). #41147 (alesapin).
- Prise en charge de l’expression
(EXPLAIN SELECT ...)dans une sous-requête. Les requêtes commeSELECT * FROM (EXPLAIN PIPELINE SELECT col FROM TABLE ORDER BY col)sont désormais valides. #40630 (Vladimir C). - Autorise la modification de
async_insert_max_data_sizeouasync_insert_busy_timeout_msdans le périmètre d’une requête. Par exemple, un utilisateur peut vouloir insérer des données rarement sans avoir accès à la configuration du serveur pour ajuster les paramètres par défaut. #40668 (Nikita Mikhaylov). - Améliorations de la lecture depuis des systèmes de fichiers distants ; la taille du threadpool pour les lectures/écritures est désormais configurable. Closes #41070. #41011 (Kseniia Sumarokova).
- Prise en charge de toutes les combinaisons de combinators dans le versionnage des fonctions WindowTransform/arratReduce*/initializeAggregation/aggregate. Auparavant, des combinators comme
ForEach/Resample/Mapne fonctionnaient pas à ces endroits, et leur utilisation entraînait une exception du typeState function ... inserts results into non-state column. #41107 (Kruglov Pavel). - Ajout de la fonction
tryDecrypt, qui renvoie NULL lorsque le déchiffrement échoue (par exemple avec une clé incorrecte) au lieu de lever une exception. #41206 (Duc Canh Le). - Ajout de la colonne
unreserved_spaceà la tablesystem.diskspour vérifier l’espace non occupé par des réservations sur chaque disque. #41254 (filimonov). - Prise en charge des en-têtes d’autorisation s3 dans les arguments de fonction de table. #41261 (Kseniia Sumarokova).
- Ajout de la prise en charge de MultiRead dans Keeper et le client ZooKeeper interne (il s’agit d’une extension du protocole ZooKeeper, disponible uniquement dans ClickHouse Keeper). #41410 (Antonio Andelic).
- Ajout de la prise en charge de la comparaison du type Decimal avec un littéral en virgule flottante dans l’opérateur IN. #41544 (liang.huang).
- Autorise les valeurs de taille lisible (comme
1TB) dans la configuration du cache. #41688 (Kseniia Sumarokova). - ClickHouse pouvait conserver en cache des entrées DNS obsolètes pendant un certain temps (15 secondes par défaut), jusqu’à ce que le cache soit mis à jour de manière asynchrone. Pendant ces périodes, ClickHouse pouvait néanmoins tenter d’établir une connexion et produire des erreurs. Ce comportement a été corrigé. #41707 (Nikita Mikhaylov).
- Ajout d’une recherche interactive dans l’historique à l’aide d’un utilitaire de type fzf (fzf/sk) pour
clickhouse-client/clickhouse-local(notez que vous pouvez utiliserFZF_DEFAULT_OPTS/SKIM_DEFAULT_OPTIONSpour configurer davantage le comportement). #41730 (Azat Khuzhin). - Autoriser uniquement les clients se connectant à un serveur sécurisé avec un certificat invalide à poursuivre avec le flag
--accept-certificate. #41743 (Yakov Olkhovskiy). - Ajout de la fonction
tryBase58Decode, similaire à la fonction existantetryBase64Decode. #41824 (Robert Schulze). - Amélioration des messages de retour lors du remplacement d’une partition par une partition ayant une primary key différente. Corrige #34798. #41838 (Salvatore).
- Correction du parsing parallèle : le segmentateur vérifie désormais
max_block_size. Cela corrige une surallocation de mémoire en cas de parsing parallèle et de LIMIT faible. #41852 (Vitaly Baranov). - Ne pas ajouter l’exception “TABLE_IS_DROPPED” à
system.errorssi elle se produit lors d’un SELECT sur une system table et qu’elle est ignorée. #41908 (AlfVII). - Amélioration de l’option
enable_extended_results_for_datetime_functionsafin de renvoyer des résultats de type DateTime64 pour les fonctionstoStartOfDay,toStartOfHour,toStartOfFifteenMinutes,toStartOfTenMinutes,toStartOfFiveMinutes,toStartOfMinuteettimeSlot. #41910 (Roman Vasin). - Amélioration de l’inférence du type
DateTimepour les text formats. Désormais, elle respecte le paramètredate_time_input_formatet n’essaie pas d’inférer des DateTime à partir de nombres interprétés comme timestamps. Ferme #41389 Ferme #42206. #41912 (Kruglov Pavel). - Suppression d’un avertissement trompeur lors d’un insert avec
perform_ttl_move_on_insert= false. #41980 (Vitaly Baranov). - Autoriser l’utilisateur à écrire
countState(*), comme pourcount(*). Cela ferme #9338. #41983 (Amos Bird). - Correction d’un overflow de taille dans
rankCorr. #42020 (Duc Canh Le). - Ajout d’une option permettant de spécifier une chaîne arbitraire comme nom d’environnement dans la config de Sentry, pour des rapports plus pratiques. #42037 (Nikita Mikhaylov).
- Correction du parsing d’une valeur Date hors plage depuis un CSV. #42044 (Andrey Zvonov).
parseDataTimeBestEffortprend désormais en charge la virgule entre la date et l’heure. Résout #42038. #42049 (flynn).- Amélioration du processus de récupération des répliques obsolètes pour
ReplicatedMergeTree. Si une réplique perdue possède certaines parts absentes d’une réplique saine, mais que ces parts sont censées apparaître ultérieurement selon la file de réplication de la réplique saine, alors la réplique perdue conservera ces parts au lieu de les détacher. #42134 (Alexander Tokmakov). - Ajout de la possibilité d’utiliser des arguments
Date32pour la fonction date_diff. Correction d’un problème dans la fonction date_diff lors de l’utilisation d’arguments DateTime64 avec une date de début antérieure à l’époque Unix et une date de fin postérieure à l’époque Unix. #42308 (Roman Vasin). - Lors du téléversement de grosses parts vers Minio, ‘Complete Multipart Upload’ peut prendre beaucoup de temps. Minio envoie des battements de cœur toutes les 10 secondes (voir https://github.com/minio/minio/pull/7198). Mais ClickHouse déclenche un timeout plus tôt, car le délai d’expiration d’envoi/réception par défaut est défini à 5 secondes. #42321 (filimonov).
- Correction d’une conversion parfois invalide des types d’état d’agrégation avec des types complexes tels que Decimal. Cela corrige #42408. #42417 (Amos Bird).
- Autorise désormais l’utilisation d’arguments
Date32pour la fonctiondateName. #42554 (Roman Vasin). - Désormais, les filtres avec des littéraux NULL seront utilisés lors de l’analyse d’index. #34063. #41842 (Amos Bird).
- Fusion des parts si chaque part de la plage est plus ancienne qu’un certain seuil. Le seuil peut être défini à l’aide de
min_age_to_force_merge_seconds. Cela résout #35836. #42423 (Antonio Andelic). Il s’agit de la suite de #39550i par @fastio, qui a implémenté l’essentiel de la logique. - Ajout d’une nouvelle infrastructure pour l’analyse et la planification des requêtes avec le paramètre
allow_experimental_analyzer. #31796 (Maksim Kita). - Améliore le temps nécessaire pour rétablir les connexions perdues à Keeper. #42541 (Raúl Marín).
Amélioration de la compilation/des tests/du packaging
- Ajout d’un fuzzer pour les définitions de table #40096 (Anton Popov). Il s’agit de la plus grande avancée réalisée jusqu’à présent cette année pour les tests de ClickHouse.
- La version bêta du service ClickHouse Cloud est publiée : https://console.clickhouse.cloud/. C’est le moyen le plus simple d’utiliser ClickHouse (même un peu plus simple qu’une installation en une seule commande).
- Ajout de la prise en charge de la génération de clauses WHERE dans AST Fuzzer, ainsi que de la possibilité d’ajouter ou de supprimer ORDER BY et la clause WHERE. #38519 (Ilya Yatsishin).
- Les binaires Aarch64 nécessitent désormais au minimum ARMv8.2, publié en 2016. Cela permet notamment d’utiliser ARM LSE, c’est-à-dire des opérations atomiques natives. De plus, l’option de build CMake “NO_ARMV81_OR_HIGHER” a été ajoutée pour permettre la compilation de binaires pour des matériels ARMv8.0 plus anciens, par exemple le Raspberry Pi 4. #41610 (Robert Schulze).
- Possibilité de compiler ClickHouse avec Musl (avec de petites modifications après une prise en charge déjà présente, mais défaillante). #41987 (Alexey Milovidov).
- Ajout de la vérification du fichier
$CLICKHOUSE_CRONFILEpour éviter d’exécuter la commandesedet d’obtenir une erreur « file not found » lors de l’installation. #42081 (Chun-Sheng, Li). - Mise à jour de cctz vers
2022epour prendre en charge les nouvelles modifications de timezone. En Palestine, les changements ont désormais lieu le samedi à 02:00. Les trois zones d’Ukraine sont simplifiées en une seule. La Jordanie et la Syrie passent de +02/+03 avec DST à +03 toute l’année. (https://data.iana.org/time-zones/tzdb/NEWS). Cela clôt #42252. #42327 (Alexey Milovidov). #42273 (Dom Del Nano). - Ajout de la prise en charge du code Rust dans ClickHouse, avec la bibliothèque de fonction de hash BLAKE3 comme exemple. #33435 (BoloniniD).
Correction de bug (comportement anormal visible par l’utilisateur dans une version stable ou préstable officielle)
- Choix de la bonne méthode d’agrégation pour
LowCardinalityavec de grands types entiers. #42342 (Duc Canh Le). - Plusieurs correctifs pour le disque
web. #41652 (Kseniia Sumarokova). - Corrige un problème qui faisait échouer
docker runsihttps_portn’était pas présent dans la config. #41693 (Yakov Olkhovskiy). - Les mutations n’étaient pas correctement annulées lors de l’arrêt du serveur ou d’une requête
SYSTEM STOP MERGES, et leur annulation pouvait prendre beaucoup de temps ; c’est corrigé. #41699 (Alexander Tokmakov). - Corrige un résultat erroné pour des requêtes avec
ORDER BYouGROUP BYsur des colonnes du préfixe de la clé de tri, encapsulées dans des fonctions monotones, lorsque l’optimisation “read in order” est activée (paramètresoptimize_read_in_orderetoptimize_aggregation_in_order). #41701 (Anton Popov). - Corrige un plantage possible lors d’un
SELECTsur une tableMergeavec le paramètreoptimize_monotonous_functions_in_order_byactivé. Corrige #41269. #41740 (Nikolai Kochetov). - Corrige l’erreur “Part … intersects part …” qui pouvait se produire dans des cas extrêmement rares si une replica redémarrait juste après le détachement d’une part considérée comme corrompue. #41741 (Alexander Tokmakov).
- N’autorise plus la création ou la modification de tables MergeTree avec un nom de colonne
_row_exists, réservé au lightweight delete. Corrige #41716. #41763 (Jianmei Zhang). - Corrige un bug à cause duquel les headers CORS étaient absents de certaines réponses HTTP. #41792 (Frank Chen).
- La version 22.9 pouvait ne pas réussir à démarrer une table
ReplicatedMergeTreesi cette table avait été créée avec la version 20.3 ou une version antérieure et n’avait jamais été modifiée ; c’est corrigé. Corrige #41742. #41796 (Alexander Tokmakov). - Lorsque l’envoi d’un Batch échoue pour une raison quelconque, il ne peut pas être relancé automatiquement et, s’il n’est pas traité à temps, cela entraîne une accumulation ; le message d’erreur affiché devient alors de plus en plus long, ce qui peut bloquer le thread HTTP. #41813 (zhongyuankai).
- Corrige les compact parts avec le paramètre de marks compressées. Corrige #41783 et #41746. #41823 (alesapin).
- Les anciennes versions de Replicated database n’ont pas de marqueur spécial dans [Zoo]Keeper. Il faut vérifier uniquement si le nœud contient certaines données particulières plutôt qu’un marqueur spécial. #41875 (Nikita Mikhaylov).
- Corrige une exception possible dans le cache FS. #41884 (Kseniia Sumarokova).
- Correction de
use_environment_credentialspour la fonction de table S3. #41970 (Kseniia Sumarokova). - Correction de l’erreur “Directory already exists and is not empty” lors du détachement d’une part corrompue, qui pouvait empêcher une table
ReplicatedMergeTreede démarrer la réplication. Corrige #40957. #41981 (Alexander Tokmakov). toDateTime64renvoie désormais le même résultat avec des arguments entiers négatifs et flottants. #42025 (Robert Schulze).- Correction de l’écriture dans
azure_blob_storage. Clôt partiellement #41754. #42034 (Kseniia Sumarokova). - Correction d’un problème de décodage
bzip2pour certains fichiersbzip2. #42046 (Nikolay Degterinsky). - Correction de la fonction SQL
toLastDayOfMonthavec le paramètre “enable_extended_results_for_datetime_functions = 1” au début de la plage étendue (janvier 1900). - Correction de la fonction SQL “toRelativeWeekNum()” avec le paramètre “enable_extended_results_for_datetime_functions = 1” à la fin de la plage étendue (décembre 2299). - Amélioration des performances des fonctions SQL “toISOYear()”, “toFirstDayNumOfISOYearIndex()” et “toYearWeekOfNewyearMode()” en évitant des calculs d’index inutiles. #42084 (Roman Vasin). - La taille maximale des fetches pour chaque table avait été accidentellement définie à 8, alors que la taille du pool pouvait être supérieure. Désormais, la taille maximale des fetches pour une table est égale à la taille du pool. #42090 (Nikita Mikhaylov).
- Une table pouvait être arrêtée et un dictionnaire pouvait être détaché avant qu’il ne soit vérifié s’ils pouvaient être supprimés sans rompre les dépendances entre les tables ; ce problème est corrigé. Corrige #41982. #42106 (Alexander Tokmakov).
- Correction d’une forte inefficacité de
remote_filesystem_read_method=readavec le cache du système de fichiers. Clôt #42125. #42129 (Kseniia Sumarokova). - Correction d’une exception de timeout possible pour les requêtes distribuées avec use_hedged_requests = 0. #42130 (Azat Khuzhin).
- Correction d’un bug mineur dans la fonction
runningDifferencelorsqu’elle est utilisée avec le typeDate32. Auparavant,Dateétait utilisé, ce qui pouvait provoquer des erreurs logiques commeBad cast from type DB::ColumnVector<int> to DB::ColumnVector<unsigned short>'. #42143 (Alfred Xu). - Correction de la réutilisation de fichiers > 4GB à partir d’un base backup. #42146 (Azat Khuzhin).
- DISTINCT in order échoue avec LOGICAL_ERROR si la première colonne de la clé de tri contient une fonction. #42186 (Igor Nikonov).
- Correction d’un bug lié aux projections et au paramètre
aggregate_functions_null_for_empty. Ce bug est très rare et n’apparaît que si vous activez le paramètreaggregate_functions_null_for_emptydans la config du serveur. Cela clôt #41647. #42198 (Alexey Milovidov). - Correction de la lecture depuis les tables
Bufferavec lecture en ordre décroissant. #42236 (Duc Canh Le). - Correction d’un bug qui empêchait ClickHouse de démarrer lorsque
background_pool_size settingest défini dans le profildefaultmais quebackground_merges_mutations_concurrency_ratione l’est pas. #42315 (nvartolomei). ALTER UPDATEd’une part attachée (avec des colonnes différentes du schéma de la table) pouvait créer sur le disque des métadonnéescolumns.txtinvalides. La lecture à partir d’une telle part pouvait échouer avec des erreurs ou renvoyer des données invalides. Corrige #42161. #42319 (Nikolai Kochetov).- Le paramètre
additional_table_filtersn’était pas appliqué au moteurDistributed. Corrige #41692. #42322 (Nikolai Kochetov). - Correction d’une situation de concurrence dans la finalisation/l’annulation des requêtes. Cela clôt #42346. #42362 (Alexey Milovidov).
- Annule #40217, qui avait introduit une régression dans les fonctions de date et d’heure. #42367 (Alexey Milovidov).
- Correction d’un assert bad cast dans un join sur une condition fausse, clôt #42380. #42407 (Vladimir C).
- Correction d’un dépassement de tampon lors du traitement des types de données Decimal. Cela clôt #42451. #42465 (Alexey Milovidov).
AggregateFunctionQuantilefonctionne désormais correctement avec les colonnes UInt128. Auparavant, l’état de quantile interprétait les colonnesUInt128commeInt128, ce qui pouvait entraîner des résultats incorrects. #42473 (Antonio Andelic).- Correction d’un assert bad_cast lors d’un INSERT dans des indexes
Annoysur des colonnes non Float32. Les indexesAnnoysont une fonctionnalité expérimentale. #42485 (Robert Schulze). - L’opérateur arithmétique avec Date ou DateTime et un entier de 128 ou 256 bits référençait de la mémoire non initialisée. #42453. #42573 (Alexey Milovidov).
- Correction d’une erreur inattendue lors du chargement d’une table lorsque la clé de partition contient des noms de fonctions alias pendant une mise à niveau du serveur. #36379 (Amos Bird).
Release ClickHouse 22.9, 2022-09-22. Presentation, Video
Changement rétro-incompatible
- La mise à niveau de 20.3 et des versions antérieures vers 22.9 et les versions plus récentes doit passer par une version intermédiaire s’il existe des tables
ReplicatedMergeTree, sinon le serveur exécutant la nouvelle version ne démarrera pas. #40641 (Alexander Tokmakov). - Supprimer les fonctions
accurate_Castetaccurate_CastOrNull(elles se distinguent deaccurateCastetaccurateCastOrNullpar le caractère de soulignement dans leur nom et ne sont pas affectées par la valeur du paramètrecast_keep_nullable). Ces fonctions n’étaient ni documentées, ni testées, ni utilisées, ni nécessaires. Elles semblaient encore exister à cause de la généralisation du code. #40682 (Alexey Milovidov). - Ajouter un test pour garantir que chaque nouvelle fonction de table sera documentée. Voir #40649. Renommer la fonction de table
MeiliSearchenmeilisearch. #40709 (Alexey Milovidov). - Ajouter un test pour garantir que chaque nouvelle fonction sera documentée. Voir #40649. Les fonctions
lemmatize,synonyms,stemétaient insensibles à la casse par erreur. Elles sont désormais sensibles à la casse. #40711 (Alexey Milovidov). - Pour des raisons de sécurité et de stabilité, les modèles catboost ne sont plus évalués au sein du serveur ClickHouse. À la place, l’évaluation est désormais effectuée dans clickhouse-library-bridge, un processus distinct qui charge la bibliothèque catboost et communique avec le processus serveur via HTTP. #40897 (Robert Schulze).
- Rendre l’interprétation des configurations YAML plus conventionnelle. #41044 (Vitaly Baranov).
Nouvelle fonctionnalité
- Prise en charge de
insert_quorum = 'auto'pour utiliser la majorité. #39970 (Sachin). - Ajout de tableaux de bord intégrés au serveur ClickHouse. Il s’agit d’un projet de démonstration montrant comment obtenir 90 % des résultats avec 1 % de l’effort grâce aux fonctionnalités de ClickHouse. #40461 (Alexey Milovidov).
- Ajout du nouveau type de modifiabilité pour les contraintes de paramètres
changeable_in_readonly. #40631 (Sergei Trifonov). - Ajout de la prise en charge de
INTERSECT DISTINCTetEXCEPT DISTINCT. #40792 (Duc Canh Le). - Ajout du nouveau format d’entrée/sortie
JSONObjectEachRow- Prise en charge de l’import pour les formatsJSON/JSONCompact/JSONColumnsWithMetadata. Ajout du nouveau paramètreinput_format_json_validate_types_from_metadata, qui contrôle si les types de données des métadonnées doivent correspondre aux types de données de l’en-tête. - Ajout du nouveau paramètreinput_format_json_validate_utf8qui, lorsqu’il est activé, valide les séquences UTF-8 dans tous les formatsJSON. Il est désactivé par défaut. Notez que ce paramètre n’a aucune incidence sur les formats de sortieJSON/JSONCompact/JSONColumnsWithMetadata, qui valident toujours les séquences UTF-8 (cette exception a été introduite pour des raisons de compatibilité). - Ajout du nouveau paramètreinput_format_json_read_numbers_as_stringsqui permet d’analyser des nombres dans une colonne String ; ce paramètre est désactivé par défaut. - Ajout du nouveau paramètreoutput_format_json_quote_decimalsqui permet de sortir les décimaux entre guillemets doubles, désactivé par défaut. - Possibilité d’analyser les décimaux entre guillemets doubles lors de l’import de données. #40910 (Kruglov Pavel). - Prise en charge des paramètres de requête dans la requête DESCRIBE TABLE. #40952 (Nikita Taranov).
- Ajout de la prise en charge de Parquet Time32/64 par conversion en DateTime64. Parquet time32/64 représente le temps écoulé depuis minuit, tandis que DateTime32/64 représente un véritable Unix timestamp. La conversion applique simplement un décalage à partir de
0. #41333 (Arthur Passos). - Implémentation des opérations ensemblistes sur Apache Datasketches. #39919 (Fangyuan Deng). Remarque : utiliser Apache Datasketches ne présente aucun intérêt ; elles sont inférieures à ClickHouse et n’ont de sens que pour l’intégration avec d’autres systèmes.
- Possibilité d’enregistrer les erreurs dans un fichier spécifié lors de la lecture de formats texte (
CSV,TSV). #40516 (zjial).
Fonctionnalité expérimentale
- Ajout d’un index ANN (approximate nearest neighbor) basé sur
Annoy. #40818 (Filatenkov Artur). #37215 (VVMak). - Ajout d’un nouveau moteur de stockage
KeeperMap, qui utilise ClickHouse Keeper ou ZooKeeper comme magasin clé-valeur. #39976 (Antonio Andelic). Ce moteur de stockage est conçu pour stocker une petite quantité de métadonnées. - Amélioration des data parts en mémoire : suppression des fichiers WAL entièrement traités. #40592 (Azat Khuzhin).
Amélioration des performances
- Mise en œuvre de la compression des marks et de la clé primaire. Clôture #34437. #37693 (zhongyuankai).
- Possibilité de précharger les marks à l’aide d’un threadpool. Contrôlé par le paramètre
load_marks_asynchronously(par défaut : 0). #40821 (Kseniia Sumarokova). - Le système de fichiers virtuel sur S3 utilisera des noms d’objet aléatoires répartis sur plusieurs préfixes de chemin pour de meilleures performances sur AWS. #40968 (Alexey Milovidov).
- Prise en compte de la valeur
max_block_sizelors de la production de résultats d’agrégation à un seul niveau. Cela permet d’exécuter les étapes suivantes du plan de query avec davantage de threads. #39138 (Nikita Taranov). - Le préchargement logiciel est utilisé dans l’agrégation pour accélérer les opérations sur les tables de hachage. Contrôlé par le paramètre
enable_software_prefetch_in_aggregation, activé par défaut. #39304 (Nikita Taranov). - Meilleure prise en charge de
optimize_read_in_orderlorsque certaines colonnes de la clé de tri sont toujours constantes après application de la clauseWHERE. Par exemple, pour une query commeSELECT ... FROM table WHERE a = 'x' ORDER BY a, b, oùtablea pour définition de stockage :MergeTree ORDER BY (a, b). #38715 (Anton Popov). - Filtrage mutuel des streams joints pour
full_sorting_joinavant le tri. #39418 (Vladimir C). - Décompression LZ4 optimisée en ignorant le traitement des littéraux vides. #40142 (Nikita Taranov).
- Accélération du processus de sauvegarde en utilisant
copynatif lorsque possible, au lieu de copier via la mémoire declickhouse-server. #40395 (alesapin). - Ne pas obtenir de snapshot de stockage pour chaque bloc INSERT (améliore légèrement les performances). #40638 (Azat Khuzhin).
- Mise en œuvre du traitement par lot pour les fonctions d’agrégation avec plusieurs arguments Nullable. #41058 (Raúl Marín).
- Accélération de la lecture d’UniquesHashSet (par exemple,
uniqStatedepuis le disque). #41089 (Raúl Marín). - Correction d’une consommation mémoire élevée lors de l’exécution de mutations sur des compact parts dans des tables comportant un très grand nombre de colonnes. #41122 (lthaooo).
- Activation de la bibliothèque vectorscan sur ARM, ce qui accélère l’évaluation des regexp. #41033 (Robert Schulze).
- Mise à niveau de vectorscan vers la version 5.4.8, qui apporte de nombreuses optimisations de performances pour accélérer l’évaluation des regexp. #41270 (Robert Schulze).
- Correction d’un fallback incorrect qui contournait le cache du système de fichiers local pour les VFS (comme S3) et se produisait à des niveaux de concurrence très élevés. #40420 (Kseniia Sumarokova).
- Si le filtre de la politique de ligne est toujours faux, renvoyer immédiatement un résultat vide sans lire de données. Résout #24012. #40740 (Amos Bird).
- Le JOIN parallèle par hachage pour les types de données Float pouvait être sous-optimal. Amélioration. #41183 (Alexey Milovidov).
Amélioration
- Pendant le démarrage et l’appel ATTACH, les tables
ReplicatedMergeTreeseront en lecture seule jusqu’à ce que la connexion à ZooKeeper soit établie et que l’initialisation soit terminée. #40148 (Antonio Andelic). - Ajout de l’option
enable_extended_results_for_datetime_functionspour renvoyer des résultats de type Date32 pour les fonctions toStartOfYear, toStartOfISOYear, toStartOfQuarter, toStartOfMonth, toStartOfWeek, toMonday et toLastDayOfMonth lorsque l’argument est de type Date32 ou DateTime64 ; sinon, des résultats de type Date sont renvoyés. Pour des raisons de compatibilité, la valeur par défaut est ‘0’. #41214 (Roman Vasin). - Pour des raisons de sécurité et de stabilité, les modèles CatBoost ne sont plus évalués dans le ClickHouse server. À la place, l’évaluation est désormais effectuée dans clickhouse-library-bridge, un processus distinct qui charge la bibliothèque catboost et communique avec le processus serveur via HTTP. La fonction
modelEvaluate()a été remplacée parcatboostEvaluate(). #40897 (Robert Schulze). #39629 (Robert Schulze). - Ajout de métriques supplémentaires pour les données temporaires sur disque, corrige #40206. #40239 (Vladimir C).
- Ajout de l’option de configuration
warning_supress_regexp, corrige #40330. #40548 (Vladimir C). - Ajout d’un paramètre permettant de désactiver la limite sur kafka_num_consumers. Corrige #40331. #40670 (Kruglov Pavel).
- Prise en charge de
SETTINGSdans les requêtesDELETE .... #41533 (Kseniia Sumarokova). - Événements de profil S3 détaillés
DiskS3*, ventilés par appel d’API S3 pour S3 ObjectStorage. #41532 (Sergei Trifonov). - Deux nouvelles métriques dans
system.asynchronous_metrics:NumberOfDetachedPartsetNumberOfDetachedByUserParts. #40779 (Sema Checherinda). - Autorisation des CONSTRAINTs pour les tables ODBC et JDBC. #34551 (Alexey Milovidov).
- Ne plus afficher
SETTINGSplus d’une fois lors du formatage de la requête s’il n’apparaissait pas plusieurs fois dans la requête d’origine. #38900 (Raúl Marín). - Amélioration de la propagation du contexte de traçage (OpenTelemetry) entre les threads. #39010 (Frank Chen).
- ClickHouse Keeper : ajout d’écouteurs pour
interserver_listen_hostuniquement dans Keeper si spécifié. #39973 (Antonio Andelic). - Amélioration de la récupération du stockage des accès utilisateur Replicated après des erreurs. #39977 (Vitaly Baranov).
- Ajout de la prise en charge de TTL dans
EmbeddedRocksDB. #39986 (Lloyd-Pottiger). - Ajout de l’inférence de schéma à
clickhouse-obfuscator, ce qui rend l’argument--structuredésormais facultatif. #40120 (Nikolay Degterinsky). - Amélioration et correction des Dictionaries au format
Arrow. #40173 (Kruglov Pavel). - Conversion plus naturelle de
Date32,DateTime64etDatevers des types plus étroits : la valeur normale supérieure ou inférieure est utilisée lorsqu’une valeur sort de la plage normale. #40217 (Andrey Zvonov). - Correction du cas où une table
MergesurViewne peut pas utiliser d’index. #40233 (Duc Canh Le). - Noms de clés personnalisés pour les server logs JSON. #40251 (Mallik Hassan).
- Il est désormais possible de définir un code d’erreur personnalisé pour l’exception levée par la fonction
throwIf. #40319 (Robert Schulze). - Amélioration du cache d’inférence de schéma, avec prise en compte des paramètres de format susceptibles de modifier le schéma. #40414 (Kruglov Pavel).
- Autorise l’analyse de
DatecommeDateTimeetDateTime64. Cela met en œuvre l’amélioration proposée dans #36949. #40474 (Alexey Milovidov). - Autorise la conversion d’une
Stringcontenant unDateTime64, comme2022-08-22 01:02:03.456, versDateetDate32. Autorise également la conversion d’uneStringcontenant unDateTime, comme2022-08-22 01:02:03, versDate32. Cela clôt #39598. #40475 (Alexey Milovidov). - Meilleure prise en charge des structures de données imbriquées au format Parquet. #40485 (Arthur Passos).
- Prise en charge de la lecture de
Array(Record)dans une table imbriquée aplatie en Avro. #40534 (Kruglov Pavel). - Ajout de la prise en charge du mode lecture seule pour
EmbeddedRocksDB. #40543 (Lloyd-Pottiger). - Validation du paramètre de méthode de compression du moteur de table URL. #40600 (Frank Chen).
- Meilleure détection du format pour la table function / le moteur de table URL en présence d’une query string après un nom de fichier. Clôt #40315. #40636 (Kruglov Pavel).
- Désactivation des projections lorsqu’un grouping set est utilisé. Cela générait un résultat incorrect. Cela corrige #40635. #40726 (Amos Bird).
- Corrige le format incorrect du transformateur de colonne
APPLY, qui peut corrompre les métadonnées s’il est utilisé dans une définition de table. Cela corrige #37590. #40727 (Amos Bird). - Prise en charge du descripteur
%zpour formater le décalage de fuseau horaire dansformatDateTime. #40736 (Cory Levy). - Le mode interactif de
clickhouse-clientinterprète désormais.et/comme “exécuter la dernière commande”. #40750 (Robert Schulze). - Corrige un problème lors de la transmission des timeouts MySQL pour le moteur de base de données MySQL et la fonction de table MySQL. Ferme #34168. #40751 (Kseniia Sumarokova).
- Crée un fichier d’état pour le répertoire du cache du système de fichiers afin de s’assurer que les répertoires de cache ne sont pas partagés entre différents serveurs ou caches. #40820 (Kseniia Sumarokova).
- Ajoute la prise en charge de
DELETEetUPDATEpour le moteur de stockageEmbeddedRocksDB. #40853 (Antonio Andelic). - ClickHouse Keeper : corrige l’arrêt pendant un commit long et augmente la taille maximale autorisée des requêtes. #40941 (Antonio Andelic).
- Corrige une condition de concurrence dans WriteBufferFromS3 et ajoute des annotations TSA. #40950 (Kseniia Sumarokova).
- Avec group_by_use_nulls, les grouping sets ne doivent convertir en nullable que les colonnes clés. #40997 (Duc Canh Le).
- Améliore l’observabilité de INSERT sur une table distribuée. #41034 (Frank Chen).
- Ajoute davantage de métriques de bas niveau pour les interactions avec S3. #41039 (mateng915).
- Prend en charge un chemin relatif dans l’en-tête Location après une redirection HTTP. Ferme #40985. #41162 (Kruglov Pavel).
- Applique les modifications aux gestionnaires HTTP à chaud, sans redémarrage du serveur. #41177 (Azat Khuzhin).
- ClickHouse Keeper : ferme correctement les sessions actives pendant l’arrêt. #41215 (Antonio Andelic). Cela réduit la durée des erreurs “table is read-only”.
- Ajoute la possibilité de commenter automatiquement les requêtes SQL dans clickhouse-client/local (avec
Alt-#, comme dans readline). #41224 (Azat Khuzhin). - Corrige l’incompatibilité du cache après avoir fait passer le paramètre
do_no_evict_index_and_mark_filesde 1 à 0, puis de 0 à 1. #41330 (Kseniia Sumarokova). - Ajouter le paramètre
allow_suspicious_fixed_string_typespour empêcher les utilisateurs de créer des colonnes de type FixedString d’une taille > 256. #41495 (Duc Canh Le). - Ajouter
has_lightweight_deletedans system.parts. #41564 (Kseniia Sumarokova).
Amélioration de la compilation, des tests et du packaging
- Veiller à documenter chaque paramètre. #40644 (Alexey Milovidov).
- Veiller à documenter chaque métrique existante. #40645 (Alexey Milovidov).
- Veiller à documenter chaque compteur d’événements de profil. Rédiger la documentation là où elle manquait. #40646 (Alexey Milovidov).
- Rendre possible une build minimale de
clickhouse-localen corrigeant certaines dépendances. #40460 (Alexey Milovidov). Elle fait moins de 50 MiB. - Calculer et signaler la couverture des fonctions SQL dans les tests. #40593. #40647 (Alexey Milovidov).
- Veiller à documenter chaque paramètre MergeTree. #40648 (Alexey Milovidov).
- Prototype de documentation de référence intégrée pour les composants serveur uniformes de haut niveau. #40649 (Alexey Milovidov).
- Nous vérifierons toutes les requêtes des tests de performance modifiés afin de nous assurer que toutes les requêtes modifiées ont bien été testées. #40322 (Nikita Taranov).
- Correction des paquets TGZ. #40681 (Mikhail f. Shiryaev).
- Correction des symboles de débogage. #40873 (Azat Khuzhin).
- Extension de la configuration CI pour créer une build x86 avec SSE2 uniquement. Utile pour le matériel ancien ou embarqué. #40999 (Robert Schulze).
- Passage à llvm/clang 15. #41046 (Azat Khuzhin).
- Suite de #40938. Correction d’une violation ODR pour la classe
Loggers. Corrige #40398, #40937. #41060 (Dmitry Novik). - Ajout des binaires macOS aux assets des releases GitHub, ce qui corrige #37718. #41088 (Mikhail f. Shiryaev).
- La bibliothèque c-ares est désormais incluse dans le système de build de ClickHouse. #41239 (Robert Schulze).
- Retrait de
dlopendu code principal de ClickHouse. Il reste dans library-bridge et odbc-bridge. #41428 (Alexey Milovidov). - Ne pas autoriser
dlopendans le binaire principal de ClickHouse, car c’est nuisible et peu sûr. Nous ne l’utilisons pas. Certaines bibliothèques peuvent toutefois y recourir pour implémenter des « plugins ». Nous déconseillons fortement cette ancienne technique qui consiste à charger dans l’espace d’adressage du processus des bibliothèques 3rd-party dangereuses et non contrôlées, car elle est aberrante. #41429 (Alexey Milovidov). - Ajouter le champ
sourceaux paquets deb, mettre à journfpm. #41531 (Mikhail f. Shiryaev). - Prise en charge de DWARF-5 dans l’analyseur DWARF interne. #40710 (Azat Khuzhin).
- Ajouter l’injection de fautes dans le client ZooKeeper pour les tests #30498 (Alexander Tokmakov).
- Ajouter des tests sans état avec le stockage S3, avec
debuget tsan #35262 (Kseniia Sumarokova). - Essais de stress sur S3 #36837 (alesapin).
- Activer
concurrency-mt-unsafedansclang-tidy#40224 (Alexey Milovidov).
Correction de bugs
- Corrige une perte de données potentielle due à un bug dans AWS SDK. Ce bug ne peut être déclenché que lorsque ClickHouse est utilisé via S3. #40506 (alesapin). Ce bug est resté ouvert pendant 5 ans dans AWS SDK et a été fermé après notre signalement.
- Des données malveillantes au format Native peuvent provoquer un plantage. #41441 (Alexey Milovidov).
- La fonction d’agrégation
categorialInformationValueavait des propriétés incorrectement définies, ce qui pouvait provoquer un déréférencement de pointeur nul à l’exécution. Cela résout #41443. #41449 (Alexey Milovidov). - L’écriture de données au format Apache
ORCpeut entraîner un dépassement de tampon. #41458 (Alexey Milovidov). - Corrige des problèmes de sûreté mémoire avec les fonctions
encryptetcontingencylorsqu’unArraydeNullableest utilisé comme argument. Cela corrige #41004. #40195 (Alexey Milovidov). - Corrige des bugs dans MergeJoin lorsque ‘not_processed’ n’est pas NULL. #40335 (liql2007).
- Corrige un résultat incorrect en cas de perte de précision décimale dans l’opérateur IN, voir #41125. #41130 (Vladimir C).
- Corrige le remplissage des colonnes
Nestedmanquantes à plusieurs niveaux. #37152 (Anton Popov). - Corrige la requête SYSTEM UNFREEZE pour la base de données Ordinary (obsolète). Correctif pour https://github.com/ClickHouse/ClickHouse/pull/36424. #38262 (Vadim Volodin).
- Corrige les colonnes inconnues inutilisées introduites par l’instruction WITH. Cela corrige #37812 . #39131 (Amos Bird).
- Corrige l’analyse de requête pour ORDER BY en présence de fonctions de fenêtre. Corrige #38741 Corrige #24892. #39354 (Dmitry Novik).
- Corrige l’exception
Unknown identifier (aggregate-function)qui apparaît lorsqu’un utilisateur essaie de calculer des expressions WINDOW ORDER BY/PARTITION BY sur des fonctions d’agrégation. #39762 (Vladimir Chebotaryov). - Limite le nombre d’analyses pour une requête avec le paramètre
max_analyze_depth. Cela évite une explosion exponentielle du temps d’analyse pour les requêtes comportant un nombre extraordinairement élevé de sous-requêtes. #40334 (Vladimir C). - Corrige un bug rare avec le TTL de colonne pour la famille de moteurs MergeTree : en cas de vertical merge répété, l’erreur
Cannot unlink file ColumnName.bin ... No such file or directory.pouvait se produire. #40346 (alesapin). - Utiliser des entrées DNS pour IPv4 et IPv6 si elles sont disponibles. #40353 (Maksim Kita).
- Permettre la lecture de fichiers compressés avec Snappy depuis Hadoop. #40482 (Kruglov Pavel).
- Corrige un crash lors de l’analyse de valeurs de type
Object(fonctionnalité expérimentale) contenant des tableaux de dimension variable. #40483 (Duc Canh Le). - Corrige le paramètre
input_format_tsv_skip_first_lines. #40491 (mini4). - Corrige un bug (condition de concurrence) au démarrage du moteur de base de données/table MaterializedPostgreSQL. #40262. Corrige une erreur lors de l’atteinte de la limite de slots relcache_callback_list. #40511 (Maksim Buren).
- Corrige l’erreur possible ‘Decimal math overflow’ lors de l’analyse de DateTime64. #40546 (Kruglov Pavel).
- Corrige la fusion verticale de parts avec des lignes supprimées par lightweight delete. #40559 (Alexander Gololobov).
- Corrige une erreur de segmentation lors de l’écriture de données dans le moteur de table URL lorsque la compression est activée. #40565 (Frank Chen).
- Corrige l’erreur logique possible
'Invalid Field get from type UInt64 to type String'dans la fonction arrayElement avec Map. #40572 (Kruglov Pavel). - Corrige une possible condition de concurrence dans le cache du système de fichiers. #40586 (Kseniia Sumarokova).
- Suppression de l’omission des mutations dans les partitions non affectées des tables
MergeTree, car cette fonctionnalité n’a jamais fonctionné correctement et pourrait provoquer la réapparition de mutations terminées. #40589 (Alexander Tokmakov). - Le ClickHouse server plantera si un port gRPC déjà occupé est ajouté à la configuration à l’exécution. #40597 (何李夫).
- Corrige la gestion des 0 / ‘1’ en tête par
base58Encode / base58Decode. #40620 (Andrey Zvonov). - keeper-fix : corrige une condition de concurrence lors de l’accès aux logs pendant l’installation d’un snapshot. #40627 (Antonio Andelic).
- Corrige l’exécution en court-circuit de la fonction toFixedString. Résout (partiellement) #40622. #40628 (Kruglov Pavel).
- Corrige la conversion d’une colonne int8 SQLite en colonne int64 dans ClickHouse. Corrige #40639. #40642 (Barum Rho).
- Corrige un débordement de pile dans les tables
Bufferrécursives. Cela clôt #40637. #40643 (Alexey Milovidov). - Lors de l’insertion d’une nouvelle requête dans
ProcessList, des allocations se produisent. Si la limite mémoire est atteinte pendant ces allocations, il n’est pas possible d’utiliserOvercommitTracker, carProcessList::mutexest déjà verrouillé. Corrige #40611. #40677 (Dmitry Novik). - Correction de LOGICAL_ERROR avec max_read_buffer_size=0 lors de la lecture des marks. #40705 (Azat Khuzhin).
- Correction d’une fuite mémoire lors de l’envoi vers des MV sans contexte de requête (depuis Kafka/…). #40732 (Azat Khuzhin).
- Correction d’une possible erreur Attempt to read after eof lors de l’inférence de schéma CSV. #40746 (Kruglov Pavel).
- Correction de l’erreur logique dans le cache en écriture immédiate “File segment completion can be done only by downloader”. Clôt #40748. #40759 (Kseniia Sumarokova).
- Rend le résultat de la fonction GROUPING identique à celui de SQL et des autres SGBD. #40762 (Dmitry Novik).
- Dans #40595, il a été signalé que la fonctionnalité
host_regexpne fonctionnait pas correctement avec la résolution de noms en adresses dans/etc/hosts. C’est corrigé. #40769 (Arthur Passos). - Correction des sauvegardes incrémentielles pour la famille Log. #40827 (Vitaly Baranov).
- Correction d’un bug extrêmement rare pouvant entraîner une perte potentielle de données dans la réplication zero-copy. #40844 (alesapin).
- Correction des crashs lors de l’analyse des conditions de clé lorsque la même expression d’ensemble est construite à partir de colonne(s) différente(s). #40850 (Duc Canh Le).
- Correction de l’inférence de schéma pour les objets JSON imbriqués. #40851 (Kruglov Pavel).
- Correction du répertoire préfixé sur 3 chiffres pour les fichiers du cache du système de fichiers, qui n’était pas supprimé lorsqu’il était vide. Clôt #40797. #40867 (Kseniia Sumarokova).
- Correction de DNS_ERROR non interceptée en cas d’échec de connexion aux répliques. #40881 (Robert Coelho).
- Correction d’un bug lors de la suppression des colonnes inutiles dans une sous-requête. #40884 (luocongkai).
- Correction d’une allocation mémoire supplémentaire pour les buffers de lecture distants. #40896 (Kseniia Sumarokova).
- Correction d’un comportement où un utilisateur dont le privilège de suppression de bases de données a été explicitement révoqué peut malgré tout en supprimer une. #40906 (Nikita Mikhaylov).
- Correctif pour ClickHouse Keeper : comparaison correcte des paths dans les write requests avec les paths des nœuds système internes de Keeper. #40918 (Antonio Andelic).
- Corrige un interblocage dans WriteBufferFromS3. #40943 (Kseniia Sumarokova).
- Corrige les droits d’accès pour
DESCRIBE TABLE url()et certains autresDESCRIBE TABLE <table_function>(). #40975 (Vitaly Baranov). - Supprime une logique erronée dans l’analyseur pour
WITH GROUPING SETS, qui peut entraîner un déréférencement de nullptr. #41049 (Duc Canh Le). - Correctif pour ClickHouse Keeper : corrige un segfault possible lors de l’arrêt de Keeper. #41075 (Antonio Andelic).
- Corrige de possibles segfaults, des use-heap-after-free et des fuites de mémoire dans les combinateurs de fonctions d’agrégation. Ferme #40848. #41083 (Kruglov Pavel).
- Corrige query_views_log avec les window views. #41132 (Raúl Marín).
- Désactive optimize_monotonous_functions_in_order_by par défaut, ce qui atténue #40094. #41136 (Denny Crane).
- Corrige l’erreur “possible deadlock avoided” lors de la conversion automatique du database engine d’Ordinary vers Atomic. #41146 (Alexander Tokmakov).
- Corrige un SIGSEGV dans SortedBlocksWriter en cas de block vide (possible avec
optimize_aggregation_in_orderetjoin_algorithm=auto). #41154 (Azat Khuzhin). - Corrige un résultat de query incorrect lorsque l’optimisation triviale de count est active avec ARRAY JOIN. Cela corrige #39431. #41158 (Denny Crane).
- Corrige un stack-use-after-return dans GetPriorityForLoadBalancing::getPriorityFunc(). #41159 (Azat Khuzhin).
- Corrige l’exception sur les arguments positionnels « Positional argument out of bounds ». Ferme #40634. #41189 (Kseniia Sumarokova).
- Corrige le nettoyage en arrière-plan des broken detached parts. #41190 (Kseniia Sumarokova).
- Corrige une query rewrite exponentielle en cas de très nombreux CROSS JOIN avec WHERE, ferme #21557. #41223 (Vladimir C).
- Corrige une possible erreur logique dans le cache en écriture directe, qui se produisait parce que tous les types d’exception n’étaient pas traités correctement. Closes #41208. #41232 (Kseniia Sumarokova).
- Corrige l’entrée de journal String dans system.filesystem_cache_log. #41233 (jmimbrero).
- Les requêtes avec une clause
OFFSETdans une sous-requête et une clauseWHEREdans la requête externe pouvaient renvoyer un résultat incorrect ; c’est corrigé. Fixes #40416. #41280 (Alexander Tokmakov). - Corrige un possible résultat de requête erroné lorsque
query_plan_optimize_primary_keyest activé. Fixes #40599. #41281 (Nikolai Kochetov). - Empêche des séquences invalides d’influencer les autres lignes dans lowerUTF8/upperUTF8. #41286 (Azat Khuzhin).
- Corrige les requêtes
ALTER <table> ADD COLUMNavec des colonnes de typeObject. #41290 (Anton Popov). - Corrige l’erreur « No node » lors d’un SELECT depuis
system.distributed_ddl_queuelorsqu’il n’y a pas dedistributed_ddl.pathdans la configuration. Fixes #41096. #41296 (young scott). - Corrige l’erreur logique incorrecte
Expected relative pathdans le disque de stockage objet. Related to #41246. #41297 (Kseniia Sumarokova). - Ajoute une vérification du type de colonne avant l’insertion d’UUID au format MsgPack. #41309 (Kruglov Pavel).
- Corrige un possible crash après l’insertion asynchrone (avec le paramètre
async_insertactivé) de données mal formées dans des colonnes de typeObject. Cela pouvait se produire si les JSON de tous les batches d’insertions asynchrones étaient invalides et ne pouvaient pas être analysés. #41336 (Anton Popov). - Corrige un possible interblocage avec async_socket_for_remote/use_hedged_requests et KILL en parallèle. #41343 (Azat Khuzhin).
- Désactive optimize_rewrite_sum_if_to_count_if par défaut, atténue : #38605 #38683. #41388 (Denny Crane).
- Depuis la version 22.8, la clause
ON CLUSTERest ignorée si la base de données estReplicatedet que le nom du cluster et celui de la base de données sont identiques. Par conséquent,DROP PARTITION ON CLUSTERfonctionnait de manière inattendue avecReplicated. Ce problème est corrigé : désormais, la clauseON CLUSTERn’est ignorée que pour les requêtes répliquées au niveau de la base de données. Corrige #41299. #41390 (Alexander Tokmakov). - Corrige un possible blocage/interblocage lors de l’annulation d’une requête (
KILL QUERYou arrêt du serveur). #41467 (Azat Khuzhin). - Corrige un possible crash du serveur lors de l’utilisation de la fonctionnalité JBOD. Corrige #41365. #41483 (Amos Bird).
- Corrige la conversion d’une chaîne de longueur fixe nullable en chaîne. #41541 (Duc Canh Le).
- Empêche un crash lors du passage d’états d’agrégation incorrects à groupBitmap*. #41563 (Raúl Marín).
- Les requêtes avec
ORDER BYet1500 <= LIMIT <= max_block_sizepouvaient renvoyer un résultat incorrect avec des lignes manquantes en tête. Corrige #41182. #41576 (Nikolai Kochetov). - Corrige le nombre d’octets/lignes lus dans X-ClickHouse-Summary avec les vues matérialisées. #41586 (Raúl Marín).
- Corrige une possible exception
pipeline stuckpour les requêtes avecOFFSET. L’erreur a été constatée avecenable_optimize_predicate_expression = 0et une condition toujours fausse dansWHERE. Corrige #41383. #41588 (Nikolai Kochetov).
Release ClickHouse 22.8, du 2022-08-18. Présentation, Vidéo
Changement rétro-incompatible
- La plage de
Date32etDateTime64a été étendue pour prendre en charge les dates de 1900 à 2299. Dans les versions précédentes, l’intervalle pris en charge allait seulement de 1925 à 2283. L’implémentation utilise le calendrier grégorien proleptique (conforme à ISO 8601:2004 (clause 3.2.1 The Gregorian calendar)) au lieu de tenir compte des transitions historiques du calendrier julien vers le calendrier grégorien. Cette modification affecte le comportement spécifique à l’implémentation pour les arguments hors plage. Par exemple, si, dans les versions précédentes, la valeur1899-01-01était ramenée à1925-01-01, dans la nouvelle version elle sera ramenée à1900-01-01. Cela modifie aussi le comportement de l’arrondi avectoStartOfIntervalsi vous passezINTERVAL 3 QUARTER, jusqu’à un trimestre, car les intervalles sont comptés à partir d’un point dans le temps spécifique à l’implémentation. Ferme #28216, améliore #38393. #39425 (Roman Vasin). - Désormais, toutes les dictionary sources concernées respectent le paramètre
remote_url_allow_hosts. C’était déjà le cas pour HTTP, Cassandra et Redis. Ajout de ClickHouse, MongoDB, MySQL et PostgreSQL. L’hôte est vérifié uniquement pour les dictionnaires créés à partir de DDL. #39184 (Nikolai Kochetov). - Les binaires x86 précompilés de ClickHouse nécessitent désormais la prise en charge des instructions AVX, c.-à-d. un CPU pas plus ancien qu’un Intel Sandy Bridge / AMD Bulldozer, tous deux sortis en 2011. #39000 (Robert Schulze).
- Rendre le remote filesystem cache composable, permettre de ne pas évincer certains fichiers (notamment idx, mrk, ..), supprimer l’ancienne version du cache. Il est désormais possible de configurer le cache sur un disk Azure blob storage, un disk local, un disk StaticWeb, etc. Cette PR est marquée comme rétro-incompatible, car la configuration du cache change et le fichier de configuration doit être mis à jour pour que le cache fonctionne. L’ancien cache sera toujours utilisé avec la nouvelle configuration. Le server démarrera correctement avec l’ancienne configuration du cache. Ferme https://github.com/ClickHouse/ClickHouse/issues/36140. Ferme https://github.com/ClickHouse/ClickHouse/issues/37889. (Kseniia Sumarokova). #36171)
Nouvelle fonctionnalité
- Prise en charge de la syntaxe SQL standard DELETE FROM sur les tables MergeTree et de l’implémentation des suppressions légères pour la famille MergeTree. #37893 (Jianmei Zhang) (Alexander Gololobov). Remarque : cette nouvelle fonctionnalité ne fait pas de ClickHouse un SGBD HTAP.
- Les paramètres de requête peuvent être définis en mode interactif avec
SET param_abc = 'def'et transmis via le protocole natif comme paramètres. #39906 (Nikita Taranov). - La clé de quota peut être définie dans le protocole natif (Yakov Olkhovsky).
- Ajout d’un paramètre
exact_rows_before_limit(0/1). Lorsqu’il est activé, ClickHouse fournira la valeur exacte de la statistiquerows_before_limit_at_least, mais au prix d’une lecture complète des données avant la limite. Cela résout #6613. #25333 (kevin wan). - Ajout de la prise en charge des insert-select distribués en parallèle avec la fonction de table
s3Clustervers des tables utilisant les moteursDistributedetReplicated#34670. #39107 (Nikita Mikhaylov). - Ajout de nouveaux paramètres pour contrôler l’inférence de schéma à partir des formats texte : -
input_format_try_infer_dates- essayer d’inférer des dates à partir de chaînes. -input_format_try_infer_datetimes- essayer d’inférer des dates et heures à partir de chaînes. -input_format_try_infer_integers- essayer d’inférerInt64au lieu deFloat64. -input_format_json_try_infer_numbers_from_strings- essayer d’inférer des nombres à partir de chaînes JSON dans les formats JSON. #39186 (Kruglov Pavel). - Option permettant de produire des logs au format JSON. L’objectif est de faciliter l’ingestion et l’interrogation dans les outils d’analyse de logs. #39277 (Mallik Hassan).
- Ajout de la fonction
nowInBlock, qui permet d’obtenir l’heure actuelle pendant des requêtes longues et continues. Résout #39522. Remarques : il n’existe ni fonctionnow64InBlocknitodayInBlock. #39533 (Alexey Milovidov). - Ajout de la possibilité de spécifier des paramètres pour une fonction de table
executable(). #39681 (Constantine Peresypkin). - Implémentation de la conversion automatique du moteur de base de données de
OrdinaryversAtomic. Créez un fichier videconvert_ordinary_to_atomicdans le répertoireflagset toutes les bases de donnéesOrdinaryseront converties automatiquement au prochain démarrage du serveur. Résout #39546. #39933 (Alexander Tokmakov). - Prise en charge de
SELECT ... INTO OUTFILE '...' AND STDOUT. #37490. #39054 (SmitaRKulkarni). - Ajout des formats
PrettyMonoBlock,PrettyNoEscapesMonoBlock,PrettyCompactNoEscapes,PrettyCompactNoEscapesMonoBlock,PrettySpaceNoEscapes,PrettySpaceMonoBlock,PrettySpaceNoEscapesMonoBlock. #39646 (Kruglov Pavel).
Amélioration des performances
- Utilisation mémoire améliorée lors de la fusion avec agrégation économe en mémoire. #39429 (Nikita Taranov).
- Ajout d’une logique de contrôle de la concurrence pour limiter le nombre total de threads concurrents créés par les requêtes. #37558 (Sergei Trifonov). Ajout du paramètre
concurrent_threads_soft_limitpour améliorer les performances en cas de QPS élevé en limitant le nombre total de threads pour l’ensemble des requêtes. #37285 (Roman Vasin). - Ajout de la stratégie de cache
SLRUpour l’uncompressed cache et le cache des marks. (Kseniia Sumarokova). #34651 (alexX512). Découplage de la fonction de cache locale et de l’algorithme de cache #38048 (Han Shukai). - Intel® In-Memory Analytics Accelerator (Intel® IAA) est un accélérateur matériel disponible sur la prochaine génération de processeurs Intel® Xeon® Scalable (« Sapphire Rapids »). Son objectif est d’accélérer les opérations d’analytics courantes, comme la (dé)compression des données et le filtrage. ClickHouse intègre un nouveau compression codec, « DeflateQpl », qui exploite la technologie de déchargement Intel® IAA pour fournir une implémentation DEFLATE hautes performances. Le codec utilise la Intel® Query Processing Library (QPL), qui abstrait l’accès à l’accélérateur matériel ou, à défaut, à un mécanisme de fallback logiciel si l’accélérateur matériel n’est pas disponible. DEFLATE offre généralement des taux de compression supérieurs au codec LZ4 par défaut de ClickHouse et permet ainsi de réduire les E/S disque ainsi que la consommation de mémoire principale. #36654 (jasperzhu). #39494 (Robert Schulze).
DISTINCTdans l’ordre avecORDER BY: détermination de la manière de trier à partir de la description de tri du flux d’entrée. Le tri est ignoré si le flux d’entrée est déjà trié. #38719 (Igor Nikonov). Amélioration significative de l’utilisation mémoire et du temps d’exécution des requêtes + utilisation deDistinctSortedChunkTransformpour le distinct final lorsque les colonnesDISTINCTcorrespondent aux colonnesORDER BY, avec renommage enDistinctSortedStreamTransformdansEXPLAIN PIPELINE→ cela améliore significativement l’utilisation mémoire + suppression des allocations inutiles dans la boucle critique deDistinctSortedChunkTransform. #39432 (Igor Nikonov). UtiliserDistinctSortedTransformuniquement lorsque la description de tri s’applique aux colonnesDISTINCT, sinon revenir à l’implémentationDISTINCTclassique + cela permet de réduire le nombre de vérifications pendant l’exécution deDistinctSortedTransform. #39528 (Igor Nikonov). Correctif :DistinctSortedTransformne tirait pas parti du tri. Il ne vidait jamais le HashSet, car les clearing_columns étaient détectées de manière incorrecte (toujours vides). Il se comportait donc en pratique comme unDISTINCTclassique (DistinctTransform). Ce correctif réduit significativement l’utilisation mémoire. #39538 (Igor Nikonov).- Utiliser le nœud local en priorité pour obtenir la structure de la table distante lors de l’exécution de
clusteret de table functions similaires. #39440 (Mingliang Pan). - Optimisation du filtrage sur les colonnes numériques avec AVX512VBMI2 compress store. #39633 (Guo Wangyang). Pour les systèmes dotés d’AVX512 VBMI2, cette PR améliore les performances d’environ 6 % sur les requêtes 3.1, 3.2 et 3.3 du benchmark SSB (SF=100). Testé sur 2 sockets Intel Icelake Xeon 8380. #40033 (Robert Schulze).
- Optimisation de l’analyse des index avec des expressions fonctionnelles en environnement multithread. #39812 (Guo Wangyang).
- Optimisations pour les requêtes complexes : ne pas parcourir l’AST des UDFs si aucune n’est enregistrée. #40069 (Raúl Marín). Optimisation de l’allocation et de la libération de CurrentMemoryTracker. #40078 (Raúl Marín).
- Amélioration de l’encodage/décodage Base58. #39292 (Andrey Zvonov).
- Amélioration de la transformation du masque d’octets en masque de bits pour SSE/AVX/AVX512. #39586 (Guo Wangyang).
Amélioration
- Normalisation des types
AggregateFunctionet des représentations d’état, car des optimisations comme #35788 traiterontcount(not null columns)commecount(), ce qui peut perturber les Interpreters distribués avec l’erreur suivante :Conversion from AggregateFunction(count) to AggregateFunction(count, Int64) is not supported. #39420 (Amos Bird). Les fonctions ayant des états identiques peuvent être utilisées indifféremment dans des vues matérialisées. - Refonte et simplification de la table
system.backups: suppression de la colonneinternal, possibilité pour l’utilisateur de définir l’ID de l’opération, ajout des colonnesnum_files,uncompressed_size,compressed_size,start_time,end_time. #39503 (Vitaly Baranov). - Amélioration de la structure de la table de résultats des requêtes DDL pour la base de données
Replicated(colonnes distinctes pour le nom du shard et de la replica, statut plus clair) - les requêtesCREATE TABLE ... ON CLUSTERpeuvent d’abord être normalisées sur l’initiateur sidistributed_ddl_entry_format_versionest défini sur 3 (valeur par défaut). Cela signifie que les requêtesON CLUSTERpeuvent ne pas fonctionner si l’initiateur n’appartient pas au cluster spécifié dans la requête. Corrige #37318, #39500 - Ignorer la clauseON CLUSTERsi la base de données estReplicatedet que le nom du cluster est identique à celui de la base de données. En lien avec #35570 - Divers correctifs mineurs pour le database engineReplicated- Vérifier la cohérence des métadonnées au démarrage de la base de donnéesReplicated, lancer la recovery de la replica en cas d’incohérence entre les métadonnées locales et celles de Keeper. Résout #24880. #37198 (Alexander Tokmakov). - Ajout de result_rows et result_bytes aux rapports de progression (
X-ClickHouse-Summary). #39567 (Raúl Marín). - Amélioration de l’analyse de la clé primaire pour MergeTree. #25563 (Nikolai Kochetov).
timeSlotsfonctionne désormais avec DateTime64 ; une Duration à la sous-seconde et une taille de slot sont désormais disponibles avec DateTime64. #37951 (Andrey Zvonov).- Ajout de la prise en charge des direct join
LEFT SEMIetLEFT ANTIavec les tablesEmbeddedRocksDB. #38956 (Vladimir C). - Ajout de profile events pour les opérations fsync. #39179 (Azat Khuzhin).
- Ajout d’un second argument à la fonction ordinaire
file(path[, default]), renvoyé par la fonction lorsqu’un fichier n’existe pas. #39218 (Nikolay Degterinsky). - Quelques correctifs mineurs pour la lecture via http, avec possibilité de réessayer un contenu partiel en cas de réponse 200 OK. #39244 (Kseniia Sumarokova).
- Prise en charge des requêtes
CREATE TEMPORARY TABLE ... (<list of columns>) AS .... #39462 (Kruglov Pavel). - Ajout de la prise en charge de
!/*(point d’exclamation/astérisque) dans les TLD personnalisés (cutToFirstSignificantSubdomainCustom()/cutToFirstSignificantSubdomainCustomWithWWW()/firstSignificantSubdomainCustom()). #39496 (Azat Khuzhin). - Ajout de la prise en charge des connexions TLS à NATS. Implémente #39525. #39527 (Constantine Peresypkin).
clickhouse-obfuscator(un outil d’obfuscation de base de données pour les tests et la génération de charge) dispose désormais des nouveaux paramètres--saveet--loadpour fonctionner avec des modèles préentraînés. Cela clôt #39534. #39541 (Alexey Milovidov).- Correction du comportement incorrect de la rotation des journaux lors du redémarrage. #39558 (Nikolay Degterinsky).
- Correction de la création des projections d’agrégation lorsque l’agrégation externe est activée. Classé comme amélioration, car ce cas est rare et il existe une solution de contournement simple en modifiant les paramètres. Cela corrige #39667 . #39671 (Amos Bird).
- Autorise l’exécution de fonctions de hachage avec des arguments de type
Map. #39685 (Anton Popov). - Ajout d’un paramètre de configuration pour masquer les adresses dans les traces de pile. Cela peut légèrement améliorer la sécurité, mais c’est généralement nuisible et ne devrait pas être utilisé. #39690 (Alexey Milovidov).
- Modification de la taille du préfixe de AggregateFunctionDistinct pour garantir l’alignement du segment mémoire des données de la fonction imbriquée. #39696 (Pxl).
- Échappement correct des informations d’authentification transmises à l’outil
clickhouse-diagnostic. #39707 (Dale McDiarmid). - Amélioration de ClickHouse Keeper : création d’un snapshot à la fermeture. Ce comportement peut être contrôlé avec la config
keeper_server.create_snapshot_on_exit,truepar défaut. #39755 (Antonio Andelic). - Prise en charge de l’analyse de clé primaire pour
row_policy_filteretadditional_filter. Cela aide également à corriger des problèmes comme #37454 . #39826 (Amos Bird). - Correction de deux problèmes d’ergonomie dans Play UI : - l’interface n’était pas parfaitement fidèle au pixel près sur iPad en raison de rayons de bordure et de marges parasites ; - l’indication de progression ne s’affichait pas après la première requête. Cela clôt #39957. Cela clôt #39960. #39961 (Alexey Milovidov).
- Play UI : ajout des numéros de ligne ; ajout de la sélection de cellule au clic ; ajout d’une hystérésis pour les cellules du tableau. #39962 (Alexey Milovidov).
- Play UI : reconnaît la touche de tabulation dans la zone de texte, sans perturber pour autant la navigation par tabulation. #40053 (Alexey Milovidov).
- Le client affichera le temps écoulé côté serveur. C’est important pour comparer les performances des services ClickHouse dans des datacenters distants. Cela clôt #38070. Voir aussi ceci pour le contexte. #39968 (Alexey Milovidov).
- Ajoute les fonctions
parseDateTime64BestEffortUS,parseDateTime64BestEffortUSOrNull,parseDateTime64BestEffortUSOrZero, clôturant #37492. #40015 (Tanya Bragin). - Étend
system.processors_profile_logavec plus d’informations, comme le nombre de lignes en entrée. #40121 (Amos Bird). - Affiche par défaut le temps côté serveur dans
clickhouse-benchmarks’il est disponible (à partir de ClickHouse version 22.8). Cela est nécessaire pour comparer correctement les performances des clouds. Ce comportement peut être modifié avec la nouvelle option de ligne de commande--client-side-time. Modifie l’option de ligne de commande--randomizede--randomize 1vers une forme sans argument. #40193 (Alexey Milovidov). - Ajoute des compteurs (ProfileEvents) pour les cas où une limitation de complexité de query a été définie et atteinte (avec un compteur distinct pour
overflow_mode=breaketthrow). Par exemple, si vous avez configurémax_rows_to_readavecread_overflow_mode = 'break', examiner la valeur du compteurOverflowBreakpermettra de distinguer les résultats incomplets. #40205 (Alexey Milovidov). - Corrige la comptabilisation de la mémoire en cas d’erreurs “Memory limit exceeded” (auparavant, le pic de consommation mémoire prenait en compte les allocations ayant échoué). #40249 (Azat Khuzhin).
- Ajoute des métriques pour le cache du système de fichiers :
FilesystemCacheSizeetFilesystemCacheElements. #40260 (Kseniia Sumarokova). - Prend en charge le transfert RPC sécurisé de hadoop (hadoop.rpc.protection=privacy et hadoop.rpc.protection=integrity). #39411 (michael1589).
- Évite l’augmentation continue de la consommation mémoire du cache de motifs lors de l’utilisation des fonctions multi(Fuzzy)Match(Any|AllIndices|AnyIndex)(). #40264 (Robert Schulze).
Amélioration de la compilation, des tests et du packaging
- ClickFiddle : Un nouvel outil pour tester les versions de ClickHouse en mode lecture/écriture (Igor Baliuk).
- Le binaire ClickHouse est désormais auto-extractible #35775 (Yakov Olkhovskiy, Arthur Filatenkov).
- Mise à jour de tzdata vers 2022b pour prendre en charge les nouvelles modifications de timezone. Voir https://github.com/google/cctz/pull/226. Le passage à l’heure d’été 2022 au Chili est reporté du 4 septembre au 11 septembre. L’Iran prévoit d’abandonner définitivement l’heure d’été après le retour à l’heure standard le 2022-09-21. Des corrections ont également été apportées au fuseau horaire historique de Asia/Tehran pour l’année 1977 : l’Iran a adopté l’heure standard en 1935, et non en 1946. En 1977, l’heure d’été a été observée du 03-21 23:00 au 10-20 24:00 ; les transitions de 1978 ont eu lieu le 03-24 et le 08-05, et non le 03-20 et le 10-20 ; et la transition du printemps 1979 a eu lieu le 05-27, et non le 03-21 (https://data.iana.org/time-zones/tzdb/NEWS). (Alexey Milovidov).
- Auparavant, les paquets installaient le fichier systemd.service dans
/etc. Les fichiers qui s’y trouvent sont marqués commeconf, ne sont pas supprimés et ne sont pas mis à jour automatiquement. Cette PR les supprime. #39323 (Mikhail f. Shiryaev). - S’assurer que LSan fonctionne correctement. #39430 (Azat Khuzhin).
- TSAN pose des problèmes avec clang-14 (https://github.com/google/sanitizers/issues/1552, https://github.com/google/sanitizers/issues/1540), nous compilons donc ici les binaires TSAN avec clang-15. #39450 (Mikhail f. Shiryaev).
- Suppression de l’option permettant de compiler les outils ClickHouse en tant que programmes executable distincts. Cela corrige #37847. #39520 (Alexey Milovidov).
- Petites préparations pour la compilation sur s390x (qui est big-endian). #39627 (Harry Lee). #39656 (Harry Lee). Correction d’un problème d’Endian dans BitHelpers pour s390x. #39656 (Harry Lee). Implémentation d’un fragment de code lié à SipHash pour l’architecture s390x (qui n’est pas prise en charge par ClickHouse). #39732 (Harry Lee). Correction d’un problème d’Endian dans le code de snapshot de Coordination pour l’architecture s390x (qui n’est pas prise en charge par ClickHouse). #39931 (Harry Lee). Correction de problèmes d’Endian dans le code du codec pour l’architecture s390x (qui n’est pas prise en charge par ClickHouse). #40008 (Harry Lee). Correction de problèmes d’Endian lors de la lecture/écriture de données binaires BigEndian dans le code de ReadHelpers et WriteHelpers pour l’architecture s390x (qui n’est pas prise en charge par ClickHouse). #40179 (Harry Lee).
- Prise en charge de la compilation avec
clang-16(trunk). Cela résout #39949. #40181 (Alexey Milovidov). - Préparation de la compilation RISC-V 64 pour une exécution dans la CI. Cela concerne #40141. #40197 (Alexey Milovidov).
- Simplification de l’interface de la macro d’enregistrement des fonctions (
FUNCTION_REGISTER*) afin de supprimer l’étape consistant à ajouter et à appeler une fonction extern dans registerFunctions.cpp, ce qui accélère également les compilations incrémentielles d’une nouvelle fonction. #38615 (Li Yin). - Docker : désormais,
entrypoint.shdans l’image Docker crée et exécutechownpour tous les dossiers trouvés dans la configuration d’un environnement multidisk #17717. #39121 (Nikita Mikhaylov).
correction de bug
- Corrige un segfault possible dans le format d’entrée
CapnProto. Ce bug a été découvert et signalé par kiojj via le programme de bug bounty de ClickHouse. #40241 (Kruglov Pavel). - Corrige un cas très rare de comportement incorrect de l’opérateur d’indice de tableau. Clôt #28720. #40185 (Alexey Milovidov).
- Corrige une vérification insuffisante des arguments des fonctions de chiffrement (détectée par le fuzzer de requêtes). Clôt #39987. #40194 (Alexey Milovidov).
- Corrige le cas où l’ordre des colonnes peut être incorrect si l’opérateur
INest utilisé avec une table enENGINE = Setcontenant plusieurs colonnes. Corrige #13014. #40225 (Alexey Milovidov). - Corrige le repositionnement lors de la lecture depuis un disque chiffré. Cette PR corrige #38381. #39687 (Vitaly Baranov).
- Corrige les colonnes dupliquées dans le plan de jointure. Résout enfin #26809. #40009 (Vladimir C).
- Corrige le blocage d’une requête SELECT avec ORDER BY WITH FILL utilisant différents types de date/heure. #37849 (Yakov Olkhovskiy).
- Corrige ORDER BY lorsqu’il correspond au ORDER BY des projections (auparavant, cela renvoyait simplement un résultat non trié). #38725 (Azat Khuzhin).
- N’optimise pas les fonctions dans les instructions GROUP BY si elles masquent l’une des colonnes ou expressions de la table. Corrige #37032. #39103 (Anton Kozlov).
- Corrige un nom de table erroné dans les logs après RENAME TABLE. Corrige #38018. #39227 (Amos Bird).
- Corrige les arguments positionnels en cas d’élagage des colonnes lors de l’optimisation de la requête. Clôt #38433. #39293 (Kseniia Sumarokova).
- Corrige un bug d’inférence de schéma en cas de messages vides dans les formats Protobuf/CapnProto, qui permettait de créer une colonne avec un type
Tuplevide. Clôt #39051. Ajoute 2 nouveaux paramètresinput_format_{protobuf/capnproto}_skip_fields_with_unsupported_types_in_schema_inference, qui permettent d’ignorer les champs dont les types ne sont pas pris en charge lors de l’inférence de schéma pour les formats Protobuf et CapnProto. #39357 (Kruglov Pavel). - (Window View est une fonctionnalité expérimentale) Corrige un segfault sur
CREATE WINDOW VIEW .. ON CLUSTER ... INNER. Clôt #39363. #39384 (Kseniia Sumarokova). - Correction de la finalisation de WriteBuffer lors de l’annulation d’un insert dans une fonction (dans les versions précédentes, cela pouvait entraîner
std::terminate). #39458 (Kruglov Pavel). - Correction du stockage des colonnes de type
Objectdans une sérialisation sparse. #39464 (Anton Popov). - Correction d’une exception possible “Not found column in block” lors de l’utilisation des projections. Cela clôt #39469. #39470 (小路).
- Correction d’une exception due à une situation de concurrence entre DROP et INSERT avec des vues matérialisées. #39477 (Azat Khuzhin).
- Bogue dans la bibliothèque Apache Avro : correction d’une data race et d’un possible heap-buffer-overflow dans le format Avro. Clôt #39094 Clôt #33652. #39498 (Kruglov Pavel).
- Correction d’un bogue rare dans la lecture asynchrone (avec le paramètre
local_filesystem_read_method='pread_threadpool') lorsqueO_DIRECTest activé (via le paramètremin_bytes_to_use_direct_io). #39506 (Anton Popov). - (uniquement sur FreeBSD) Correction de l’erreur “Code: 49. DB::Exception: FunctionFactory: the function name ” is not unique. (LOGICAL_ERROR)” observée sur FreeBSD au démarrage de ClickHouse. #39551 (Alexander Gololobov).
- Correction d’un bogue lié à l’argument “maxsplit” récemment introduit pour
splitByChar, qui ne fonctionnait pas correctement. #39552 (filimonov). - Correction d’un bogue dans ASOF JOIN avec
enable_optimize_predicate_expression, clôt #37813. #39556 (Vladimir C). - Correction de la query
CREATE/DROP INDEXavecON CLUSTERou avec une databaseReplicatedetReplicatedMergeTree. Elle était auparavant exécutée sur toutes les répliques (ce qui provoquait une erreur ou le blocage de la DDL queue). Corrige #39511. #39565 (Alexander Tokmakov). - Correction de l’erreur “column not found” pour le push down avec join, clôt #39505. #39575 (Vladimir C).
- Correction du mauvais alias
REGEXP_REPLACE. Cela corrige https://github.com/ClickHouse/ClickBench/issues/9. #39592 (Alexey Milovidov). - Correction du point d’origine des fonctions de fenêtre à décroissance exponentielle : il correspond désormais à la dernière valeur de la fenêtre. Auparavant, la décroissance était calculée avec la formule
exp((t - curr_row_t) / decay_length), ce qui est incorrect lorsque la borne droite de la fenêtre n’est pasCURRENT ROW. Elle a été remplacée par :exp((t - last_row_t) / decay_length). Il n’y a aucun changement dans les résultats pour les fenêtres avecROWS BETWEEN (smth) AND CURRENT ROW. #39593 (Vladimir Chebotaryov). - Correction du dépassement lors d’une division Decimal, détectable à partir de l’échelle des opérandes. #39600 (Andrey Zvonov).
- Correction du fonctionnement conjoint des paramètres
output_format_arrow_string_as_stringetoutput_format_arrow_low_cardinality_as_dictionary. Clôt #39624. #39647 (Kruglov Pavel). - Correction d’un bug dans la résolution de la base de données
defaultlors de la lecture d’une table distribuée. #39674 (Anton Kozlov). - (Uniquement avec les bases de données Ordinary obsolètes) Une requête SELECT pouvait lire les données d’une table supprimée si le cache pour mmap IO était utilisé, si le database engine était Ordinary et si de nouvelles tables étaient créées avec le même nom que la table supprimée. C’est corrigé. #39708 (Alexander Tokmakov).
- Correction de l’erreur possible
Invalid column type for ColumnUnique::insertRangeFrom. Expected String, got ColumnLowCardinality. Corrige #38460. #39716 (Arthur Passos). - Les noms de champ dans la section
metadu format JSON étaient à tort échappés deux fois. Cela clôt #39693. #39747 (Alexey Milovidov). - Correction d’une analyse d’index erronée avec des tuples et l’opérateur
IN, pouvant entraîner un résultat de requête incorrect. #39752 (Anton Popov). - Correction du filtrage des tables
EmbeddedRocksDBpar clé à l’aide de paramètres. #39757 (Antonio Andelic). - Correction de l’erreur
Invalid number of columns in chunk pushed to OutputPort, causée par l’optimisation de ARRAY JOIN. Corrige #39164. #39799 (Nikolai Kochetov). - Contournement d’un bug du noyau Linux. Correction de l’exception
CANNOT_READ_ALL_DATAaveclocal_filesystem_read_method=pread_threadpool. D’après le man, ce bug n’affectait que les versions 5.9 et 5.10 du noyau Linux. #39800 (Anton Popov). - (Uniquement sur NFS) Correction d’un
mkdirNFS défaillant pour les volumes root-squashed. #39898 (Constantine Peresypkin). - Suppression des dictionnaires des métriques Prometheus lors de DETACH/DROP. #39926 (Azat Khuzhin).
- Correction de la lecture de StorageFile avec des colonnes virtuelles. Clôt #39907. #39943 (flynn).
- Correction d’une consommation mémoire élevée pendant les fetches. Corrige #39915. #39990 (Nikolai Kochetov).
- (fonctionnalité expérimentale) Correction d’un plantage de
hashIdet du fait que le paramètre salt n’était pas utilisé. #40002 (Raúl Marín). - Les opérateurs
EXCEPTetINTERSECTpeuvent provoquer un plantage si une combinaison spécifique de colonnes constantes et non constantes est utilisée. #40020 (Duc Canh Le). - Correction des erreurs “Part directory doesn’t exist” et “
tmp_<part_name>… No such file or directory” lors d’un INSERT trop lent ou d’une fusion/mutation trop longue. Correction également d’un problème pouvant bloquer certaines entrées de la file d’attente de réplication, sans erreur ni avertissement dans les journaux, si une tentative précédente de récupération d’une part avait échoué, mais que le répertoiretmp-fetch_<part_name>n’avait pas été nettoyé. #40031 (Alexander Tokmakov). - Correction de rares cas d’analyse de tableaux de tuples au format
Values. #40034 (Anton Popov). - Correction de la conversion du format ArrowColumn Dictionary(X) & Dictionary(Nullable(X)) en ClickHouse LowCardinality(X) & LowCardinality(Nullable(X)) respectivement. #40037 (Arthur Passos).
- Correction d’un interblocage potentiel lors de l’écriture vers S3 en cas d’échec de l’ordonnancement des tâches. #40070 (Maksim Kita).
- Correction d’un bug dans collectFilesToSkip() par l’ajout de la bonne extension de fichier (.idx ou idx2) pour les index à recalculer, afin d’éviter des liens physiques incorrects. Corrige #39896. #40095 (Jianmei Zhang).
- Correctif pour la résolution DNS inverse. #40134 (Arthur Passos).
- Correction du résultat inattendu de
arrayDifferencepour `Array(UInt32). #40211 (Duc Canh Le).
Release ClickHouse 22.7, 2022-07-21. Présentation, Vidéo
Notes de mise à niveau
- Activer le paramètre
enable_positional_argumentspar défaut. Il permet des requêtes commeSELECT ... ORDER BY 1, 2, où 1 et 2 sont des références à la clause SELECT. Si vous devez rétablir l’ancien comportement, désactivez ce paramètre. #38204 (Alexey Milovidov). - Désactiver
format_csv_allow_single_quotespar défaut. Voir #37096. (Kruglov Pavel). - Le moteur de base de données
Ordinaryet l’ancienne syntaxe de définition du stockage pour les tables*MergeTreesont obsolètes. Par défaut, il n’est pas possible de créer de nouvelles bases de données avec le moteurOrdinary. Si la base de donnéessystemutilise le moteurOrdinary, elle sera automatiquement convertie enAtomicau démarrage du serveur. Il existe des paramètres pour conserver l’ancien comportement (allow_deprecated_database_ordinaryetallow_deprecated_syntax_for_merge_tree), mais ces paramètres pourraient être supprimés dans de futures versions. #38335 (Alexander Tokmakov). - Forcer par défaut la réécriture des jointures par virgule en INNER (définir la valeur par défaut
cross_to_inner_join_rewrite = 2). Pour retrouver l’ancien comportement, définissezcross_to_inner_join_rewrite = 1. #39326 (Vladimir C). Si vous rencontrez des incompatibilités, vous pouvez rétablir ce paramètre.
Nouvelle fonctionnalité
- Prise en charge des expressions contenant des fonctions de fenêtre. Clôture #19857. #37848 (Dmitry Novik).
- Ajout d’un nouvel algorithme de jointure
directpour les tablesEmbeddedRocksDB, voir #33582. #35363 (Vladimir C). - Ajout de l’algorithme de jointure
full sorting merge join. #35796 (Vladimir C). - Implémentation du moteur de table NATS, qui permet de publier et de s’abonner sur NATS. Clôture #32388. #37171 (tchepavel). (Kseniia Sumarokova)
- Implémentation de la fonction de table
mongodb. Permet l’écriture dans le stockage / la fonction de tableMongoDB. #37213 (aaapetrenko). (Kseniia Sumarokova) - Ajout du format de sortie
SQLInsert. Clôture #38441. #38477 (Kruglov Pavel). - Ajout du paramètre
additional_table_filters. Ce paramètre permet de spécifier une condition de filtrage supplémentaire pour une table, appliquée directement après la lecture. Exemple :select number, x, y from (select number from system.numbers limit 5) f any left join (select x, y from table_1) s on f.number = s.x settings additional_table_filters={'system.numbers : 'number != 3', 'table_1' : 'x != 2'}. Ajout du paramètreadditional_result_filter, qui spécifie une condition de filtrage supplémentaire pour le résultat de la requête. Clôture #37918. #38475 (Nikolai Kochetov). - Ajout du paramètre
compatibilityet de la table systèmesystem.settings_changes, qui contient des informations sur les modifications de paramètres entre les versions de ClickHouse. Clôture #35972. #38957 (Kruglov Pavel). - Ajout des fonctions
translate(string, from_string, to_string)ettranslateUTF8(string, from_string, to_string). Elles remplacent certains caractères par d’autres. #38935 (Nikolay Degterinsky). - Prise en charge de la fonction
parseTimeDelta. Elle peut être utilisée avec;-+,:comme séparateurs, par exemple1yr-2moou2m:6s:SELECT parseTimeDelta('1yr-2mo-4w + 12 days, 3 hours : 1 minute ; 33 seconds'). #39071 (jiahui-97). - Ajout de la requête
CREATE TABLE ... EMPTY AS SELECT. Elle déduit automatiquement la structure de la table à partir de la requête SELECT, mais ne remplit pas la table après sa création. Résout #38049. #38272 (Alexander Tokmakov). - Ajout d’options pour limiter les opérations d’E/S avec le stockage distant :
max_remote_read_network_bandwidth_for_serveretmax_remote_write_network_bandwidth_for_server. #39095 (Sergei Trifonov). - Ajout du paramètre
group_by_use_nullspour rendre Nullable les colonnes clés d’agrégation dans le cas de ROLLUP, CUBE et GROUPING SETS. Clôt #37359. #38642 (Dmitry Novik). - Ajout de la possibilité de spécifier le niveau de compression lors de l’export de données. #38907 (Nikolay Degterinsky).
- Ajout d’une option pour exiger des droits explicites afin d’exécuter SELECT sur la base de données
system. Détails : #38970 (Vitaly Baranov). - Les fonctions
multiMatchAny,multiMatchAnyIndex,multiMatchAllIndiceset leurs variantes approximatives acceptent désormais un argument de tableau de motifs non constant. #38485 (Robert Schulze). La fonction SQLmultiSearchAllPositionsaccepte désormais des arguments needle non constants. #39167 (Robert Schulze). - Ajout du paramètre
zstd_window_log_maxpour configurer l’utilisation mémoire maximale lors du décodage zstd à l’import de fichiers externes. Clôt #35693. #37015 (wuxiaobai24). - Ajout du paramètre
send_logs_source_regexp. Envoie les logs texte du server dont le nom de source correspond à l’expression régulière spécifiée. Une valeur vide signifie toutes les sources. #39161 (Amos Bird). - Prise en charge de
ALTERpour les tablesHive. #38214 (lgbo). - Prise en charge de la fonction
isNullable. Cette fonction vérifie si son argument est Nullable et renvoie 1 ou 0. Clôt #38611. #38841 (lokax). - Ajout de fonctions d’encodage/décodage base58. #38159 (Andrey Zvonov).
- Ajout d’une visualisation en graphique dans l’interface Play. #38197 (Alexey Milovidov).
- Ajout de fonctions de distance L2 au carré et de norme pour les arrays comme pour les tuples. #38545 (Julian Gilyadov).
- Ajout de la possibilité de transmettre des en-têtes HTTP à la table function / au stockage
urlvia SQL. Clôt #37897. #38176 (Kseniia Sumarokova). - Ajout du binaire
clickhouse-diagnosticsaux paquets. #38647 (Mikhail f. Shiryaev).
Fonctionnalité expérimentale
- Ajoute le nouveau paramètre
implicit_transactionpour exécuter des requêtes autonomes dans une transaction. Il gère automatiquement la création et la clôture de la transaction (via COMMIT si la requête a réussi, ou ROLLBACK dans le cas contraire). #38344 (Raúl Marín).
Amélioration des performances
- Optimisation de distinct pour les colonnes triées. Utilise une transformation distinct spécialisée lorsque le flux d’entrée est trié selon la ou les colonne(s) du distinct. L’optimisation peut s’appliquer au pré-distinct, au distinct final, ou aux deux. Implémentation initiale par @dimarub2000. #37803 (Igor Nikonov).
- Améliore les performances de
ORDER BY, des mergesMergeTreeet des fonctions de fenêtre grâce à la version batch deBinaryHeap. #38022 (Maksim Kita). - Exécution plus parallèle pour les requêtes avec
FINAL#36396 (Nikita Taranov). - Corrige une régression importante des performances des jointures introduite dans #35616. Fait intéressant, des requêtes de jointure courantes, comme les requêtes ssb, ont été 10 fois plus lentes pendant près de 3 mois sans que personne ne s’en plaigne. #38052 (Amos Bird).
- Migration de la bibliothèque Intel hyperscan vers vectorscan, ce qui accélère de nombreuses opérations de correspondance de chaînes sur les plateformes non x86. #38171 (Robert Schulze).
- Parallélisme accru pour les étapes du plan de requête exécutées après l’agrégation. #38295 (Nikita Taranov).
- Améliore les performances de l’insertion dans les colonnes de type
JSON. #38320 (Anton Popov). - Optimisation de l’insertion et des recherches dans la HashTable. #38413 (Nikita Taranov).
- Corrige la dégradation des performances provenant de #32493. #38417 (Alexey Milovidov).
- Améliore les performances des jointures sur des colonnes numériques grâce aux instructions SIMD. #37235 (zzachimed). #38565 (Maksim Kita).
- Les fonctions Norm et Distance pour les arrays sont accélérées de 1,2 à 2 fois. #38740 (Alexander Gololobov).
- Ajout de
copyOverlap32Shuffleoptimisé avec AVX-512 VBMI pour la décompression LZ4. Autrement dit, les performances de décompression LZ4 sont améliorées. #37891 (Guo Wangyang). ORDER BY (a, b)bénéficiera des mêmes avantages queORDER BY a, b. #38873 (Igor Nikonov).- Aligne les branchements sur une frontière de 32B pour rendre le benchmark plus stable. #38988 (Guo Wangyang). Cela améliore les performances de 1 à 2 % en moyenne sur Intel.
- Les UDF exécutables, les dictionnaires exécutables et les tables Executable éviteront de perdre une seconde à attendre la fin d’un sous-processus. #38929 (Constantine Peresypkin).
- Optimise les accès à la table
system.stack_tracelorsque toutes les colonnes ne sont pas sélectionnées. #39177 (Azat Khuzhin). - Amélioration des performances de isNullable/isConstant/isNull/isNotNull pour l’argument LowCardinality. #39192 (Kruglov Pavel).
- Optimisation du traitement de ORDER BY dans les fonctions de fenêtre. #34632 (Vladimir Chebotarev).
- La table
system.asynchronous_metric_loga été encore optimisée pour réduire l’espace de stockage. Corrige #38134. Voir la vidéo YouTube. #38428 (Alexey Milovidov).
Amélioration
- Prise en charge de la syntaxe SQL standard CREATE INDEX et DROP INDEX. #35166 (Jianmei Zhang).
- Envoi des profile events pour les requêtes INSERT (auparavant, seul SELECT était pris en charge). #37391 (Azat Khuzhin).
- Implémentation de l’agrégation In order (
optimize_aggregation_in_order) pour les projections entièrement matérialisées. #37469 (Azat Khuzhin). - Suppression de l’utilisation de subprocess.run pour l’initialisation de Kerberos. Ajout d’un nouveau test d’intégration. Résout #27651. #38105 (Roman Vasin).
-
- Ajout du paramètre
multiple_joins_try_to_keep_original_namespour éviter de réécrire le nom de l’identifiant lors de la réécriture de plusieurs JOIN, clôture de l’issue #34697. #38149 (Vladimir C).
- Ajout du paramètre
- Expérience utilisateur améliorée pour le visualiseur de traces. #38169 (Sergei Trifonov).
- Active la collecte des traces de pile et le profiler de requêtes pour AArch64. #38181 (Maksim Kita).
- Ne plus ignorer les liens symboliques dans le répertoire
user_definedlors du chargement des fonctions SQL définies par l’utilisateur. Corrige #38042. #38184 (Maksim Kita). - Ajoute le nettoyage en arrière-plan des sous-répertoires dans
store/. Dans certains cas, clickhouse-server pouvait laisser des sous-répertoires parasites dansstore/(par exemple après un échec de création de table), et ces répertoires n’étaient jamais supprimés. Corrige #33710. #38265 (Alexander Tokmakov). - Ajoute la requête
DESCRIBE CACHEpour afficher les paramètres du cache issus de la config. Ajoute la requêteSHOW CACHESpour afficher la liste des caches du système de fichiers disponibles. #38279 (Kseniia Sumarokova). - Ajoute une vérification des droits d’accès pour
system drop filesystem cache. Prend en charge ON CLUSTER. #38319 (Kseniia Sumarokova). - Corrige l’incompatibilité du moteur de base de données PostgreSQL lors d’une mise à niveau de 21.3 vers 22.3. Corrige #36659. #38369 (Kseniia Sumarokova).
filesystemAvailableet des fonctions similaires fonctionnent désormais dansclickhouse-local. Corrige #38423. #38424 (Alexey Milovidov).- Ajoute la fonction
revision. #38555 (Azat Khuzhin). - Corrige l’utilisation de GCS via un tunnel proxy. #38726 (Azat Khuzhin).
- Prend en charge
\i filedans clickhouse client / local (comme\idans psql). #38813 (Kseniia Sumarokova). - Nouvelle option
optimize = 1dansEXPLAIN AST. Lorsqu’elle est activée, elle affiche l’AST après réécriture, sinon l’AST de la requête d’origine. Désactivée par défaut. #38910 (Igor Nikonov). - Autorise une virgule finale dans la liste des colonnes. Corrige #38425. #38440 (chen).
- Corrections de bugs et améliorations des performances pour la méthode JOIN
parallel_hash. #37648 (Vladimir C). - Prend en charge le transfert RPC sécurisé de Hadoop (hadoop.rpc.protection=privacy et hadoop.rpc.protection=integrity). #37852 (Peng Liu).
- Ajoute la prise en charge du type
structdansStorageHive. #38118 (lgbo). - Les objets S3 individuels sont désormais supprimés avec
RemoveObjectRequest. Compatibilité ajoutée avec GCP, qui ne permettait pas d’utiliserremoveFileIfExists, ce qui cassait en pratique environ la moitié de la fonctionnalité deremove. Détection automatique de l’API S3DeleteObjects, non prise en charge par GCS. Cela permettra d’utiliser GCS sans définir explicitementsupport_batch_delete=0dans la configuration. #37882 (Vladimir Chebotarev). - Expose les données de monitoring de base liées à ClickHouse Keeper (via ProfileEvents et CurrentMetrics). #38072 (lingpeng0314).
- Prise en charge de l’option
auto_closepour la connexion du moteur PostgreSQL. Résout #31486. #38363 (Kseniia Sumarokova). - Autorise le modificateur
NULLdans la déclaration des colonnes pour les fonctions de table. #38816 (Kruglov Pavel). - Désactive
mutations_finalizing_taskavant l’arrêt afin d’éviter les erreurs bénignesTABLE_IS_READ_ONLYpendant l’arrêt. #38851 (Raúl Marín). - Élimine l’attente inutile des requêtes SELECT après les requêtes ALTER, en présence de requêtes INSERT, si vous utilisez les bases de données Ordinary obsolètes. #38864 (Azat Khuzhin).
- Nouvelle option
rewritedansEXPLAIN AST. Si elle est activée, elle affiche l’AST après réécriture, sinon l’AST de la requête d’origine. Désactivée par défaut. #38910 (Igor Nikonov). - Ne signale plus les exceptions Zookeeper “Node exists” dans system.errors lorsqu’elles sont attendues. #38961 (Raúl Marín).
clickhouse-keeper: ajoute la prise en charge du calcul et de la vérification d’empreinte en temps réel. Cette fonctionnalité est désactivée par défaut. #37555 (Antonio Andelic).- Autorise la spécification de globs
* or {expr1, expr2, expr3}à l’intérieur d’une clé pour l’outilclickhouse-extract-from-config. #38966 (Nikita Mikhaylov). - clearOldLogs : ne signale pas KEEPER_EXCEPTION lors de suppressions concurrentes. #39016 (Raúl Marín).
- Amélioration de clickhouse-keeper : conserve sur disque les métadonnées concernant les serveurs Keeper. #39069 (Antonio Andelic). Cela facilitera l’exploitation si vous arrêtez ou redémarrez tous les nœuds Keeper en même temps.
- Continue sans lever d’exception lorsqu’il n’y a plus d’espace disque lors de l’utilisation du cache du système de fichiers. #39106 (Kseniia Sumarokova).
- Gestion des signaux SIGTERM de k8s. #39130 (Timur Solodovnikov).
- Ajoute la colonne
merge_algorithm(Undecided, Horizontal, Vertical) à system.part_log. #39181 (Azat Khuzhin). - Ne pas incrémenter un compteur dans
system.errorslorsque le disque n’est pas rotatif. #39216 (Raúl Marín). - La métrique
result_bytespour les requêtesINSERTdanssystem.query_logaffiche désormais le nombre d’octets insérés. Auparavant, sa valeur était incorrecte et identique à celle deresult_rows. #39225 (Ilya Yatsishin). - La métrique d’utilisation du CPU dans clickhouse-client sera affichée de manière plus claire. Corrige #38756. #39280 (Sergei Trifonov).
- Relancer l’exception lors de l’initialisation du filesystem cache au démarrage du serveur, avec un message d’erreur plus explicite. #39386 (Kseniia Sumarokova).
- OpenTelemetry collecte désormais les traces sans les spans Processors par défaut (ils sont trop nombreux). Pour activer la collecte des spans Processors, utilisez le paramètre
opentelemetry_trace_processors. #39170 (Ilya Yatsishin). - Fonctions
multiMatch[Fuzzy](AllIndices/Any/AnyIndex): ne pas lever d’erreur logique si l’argumentneedleest vide. #39012 (Robert Schulze). - Autoriser la déclaration d’une queue
RabbitMQsans les arguments par défautx-max-lengthetx-overflow. #39259 (rnbondarenko).
Amélioration de la compilation/des tests/du packaging
- Application des annotations Clang Thread Safety Analysis (TSA) à ClickHouse. #38068 (Robert Schulze).
- Adaptation du script d’installation universel pour FreeBSD. #39302 (Alexey Milovidov).
- Préparation de la compilation sur la plateforme
s390x. #39193 (Harry Lee). - Correction d’un bug dans la bibliothèque
jemalloc. #38757 (Azat Khuzhin). - Le benchmark matériel prend désormais en charge le téléversement automatique des résultats. #38427 (Alexey Milovidov).
- La table système “system.licenses” est désormais correctement alimentée sur Mac (Darwin). #38294 (Robert Schulze).
- Passage des paquets
all|noarchà des paquets dépendants de l’architecture - Correction de la documentation à ce sujet - Publication des paquets aarch64|arm64 dans l’artifactory et parmi les artefacts de release - Corrige #36443. #38580 (Mikhail f. Shiryaev).
Correction de bug (dysfonctionnement visible par l’utilisateur dans une version stable ou préstable officielle)
- Corrige l’arrondi pour
Decimal128/Decimal256avec une échelle de plus de 19 chiffres. #38027 (Igor Nikonov). - Corrige un plantage causé par une data race dans le moteur de table
Hive(intégration). #38887 (lgbo). - Corrige un plantage lors de l’exécution de GRANT ALL ON . avec ON CLUSTER. Le problème a été introduit dans https://github.com/ClickHouse/ClickHouse/pull/35767. Cela clôt #38618. #38674 (Vitaly Baranov).
- Corrige l’expansion des motifs glob dans le cas des formes
{0..10}. Corrige #38498. L’implémentation actuelle est similaire à ce que fait le shell, comme l’a mentionné @rschu1ze ici. #38502 (Heena Bansal). - Corrige un plantage des fonctions
mapUpdate,mapFilterlors de l’utilisation d’un argument map constant. Clôt #38547. #38553 (hexiaoting). - Corrige les informations de monotonie de
toHourpour l’optimisation des requêtes, ce qui pouvait entraîner un résultat de requête incorrect (analyse d’index incorrecte). Cela corrige #38333. #38675 (Amos Bird). - Corrige la vérification de la prise en charge des écritures parallèles par le stockage S3. Cela empêchait le fonctionnement des écritures parallèles vers S3. #38792 (chen).
- Corrige les lectures S3 avec seek et tampon de lecture parallèle. (Cela affectait l’utilisation de la mémoire pendant les requêtes.) Clôt #38258. #38802 (Kseniia Sumarokova).
- Met à jour
simdjson. Cela corrige #38621 - un débordement de tampon sur les machines équipées des derniers CPU Intel avec AVX-512 VBMI. #38838 (Alexey Milovidov). - Corrige une possible erreur logique dans les vertical merges. #38859 (Maksim Kita).
- Corrige le profil de paramètres avec une unité en secondes. #38896 (Raúl Marín).
- Corrige un partition pruning incorrect lorsqu’il y a une clé de partition Nullable. Remarque : vous n’utilisez très probablement pas de clés de partition Nullable ; c’est une fonctionnalité obscure que vous ne devriez pas utiliser. Les clés Nullable n’ont pas vraiment de sens, et cette fonctionnalité n’est nécessaire que pour quelques cas d’usage farfelus. Cela corrige #38941. #38946 (Amos Bird).
- Améliore
fsync_part_directorypour les fetches. #38993 (Azat Khuzhin). - Corrige un possible interblocage dans
OvercommitTracker. Corrige #37794. #39030 (Dmitry Novik). - Correction d’un bug dans le cache du système de fichiers qui pouvait survenir dans certains cas limites, lorsque la capacité du cache atteignait sa limite. Closes #39066. #39070 (Kseniia Sumarokova).
- Correction de certains cas limites dans l’interprétation des arguments des expressions de fenêtre. Corrige #38538. Autorise l’utilisation de fonctions d’ordre supérieur dans les expressions de fenêtre. #39112 (Dmitry Novik).
- Conservation du type
LowCardinalitydans la fonctiontuple. Auparavant, le typeLowCardinalityétait supprimé et les éléments du tuple créé prenaient le type sous-jacent deLowCardinality. #39113 (Anton Popov). - Correction de l’erreur
Block structure mismatchqui pouvait survenir lors d’un INSERT dans une table avec une MATERIALIZED VIEW attachée et le paramètreextremes = 1activé. Closes #29759 and #38729. #39125 (Nikolai Kochetov). - Correction d’un résultat de requête inattendu lorsque
optimize_trivial_count_queryetempty_result_for_aggregation_by_empty_setsont tous deux définis sur true. Ceci corrige #39140. #39155 (Amos Bird). - Correction de l’erreur
Not found column Type in blockdans les requêtes SELECT avecPREWHEREet les optimisations de lecture dans l’ordre. #39157 (Yakov Olkhovskiy). - Correction d’une condition de concurrence extrêmement rare lors de la création de liens physiques sur un système de fichiers distant. La seule façon de la reproduire est d’exécuter des sauvegardes de manière concurrente. #39190 (alesapin).
- (zero-copy replication est une fonctionnalité expérimentale qui ne doit pas être utilisée en production) Correction de la récupération d’une part en mémoire avec
allow_remote_fs_zero_copy_replication. #39214 (Azat Khuzhin). - (MaterializedPostgreSQL - fonctionnalité expérimentale). Correction d’une erreur de segmentation dans le moteur de base de données MaterializedPostgreSQL, qui pouvait survenir si une exception se produisait lors de l’initialisation de la réplication. Closes #36939. #39272 (Kseniia Sumarokova).
- Correction d’une récupération incorrecte des métadonnées de table depuis le moteur de base de données PostgreSQL. Closes #33502. #39283 (Kseniia Sumarokova).
- Correction d’une exception de projection lorsque les clés d’agrégation sont encapsulées dans d’autres fonctions. Ceci corrige #37151. #37155 (Amos Bird).
- Correction d’une erreur logique possible
... with argument with type Nothing and default implementation for Nothing is expected to return result with type Nothing, got ...dans certaines fonctions. Closes: #37610 Closes: #37741. #37759 (Kruglov Pavel). - Corrige l’ordre incorrect des colonnes dans les sous-requêtes de UNION (en cas de colonnes dupliquées dans les sous-requêtes, cela peut produire un résultat incorrect). #37887 (Azat Khuzhin).
- Corrige le comportement incorrect de MODIFY ALTER Column avec des noms de colonnes contenant des points. Clôt #37907. #37971 (Kruglov Pavel).
- Corrige la lecture des colonnes éparses depuis des tables
MergeTreequi stockent leurs données dans S3. #37978 (Anton Popov). - Corrige un crash possible dans
Distributedasync insert en cas de suppression d’une replica de la config. #38029 (Nikolai Kochetov). - Corrige « Missing columns » pour GLOBAL JOIN avec CTE sans alias. #38056 (Azat Khuzhin).
- Réécrit les fonctions tuple sous forme de littéraux en mode de rétrocompatibilité. #38096 (Anton Kozlov).
- Corrige la réservation mémoire redondante pour le bloc de sortie pendant
ORDER BY. #38127 (iyupeng). - Corrige une erreur logique possible
Bad cast from type DB::IColumn* to DB::ColumnNullable*dans les fonctions de mapping de tableaux. Clôt #38006. #38132 (Kruglov Pavel). - Corrige un conflit temporaire de noms dans partial merge join. Clôt #37928. #38135 (Vladimir C).
- Corrige un problème mineur avec des requêtes comme
CREATE TABLE nested_name_tuples (aTuple(x String, y Tuple(i Int32, j String))) ENGINE = Memory;#38136 (lgbo). - Corrige un bug avec des fonctions imbriquées à court-circuit qui entraînait l’exécution des arguments même si la condition était fausse. Clôt #38040. #38173 (Kruglov Pavel).
- (Window View est une fonctionnalité expérimentale) Corrige LOGICAL_ERROR pour WINDOW VIEW avec une structure incorrecte. #38205 (Azat Khuzhin).
- Met à jour le sous-module librdkafka pour corriger un crash lorsqu’un callback de refresh OAUTHBEARER est défini. #38225 (Rafael Acevedo).
- Corrige le blocage de INSERT dans Distributed dû à ProfileEvents. #38307 (Azat Khuzhin).
- Corrige les nouvelles tentatives dans le moteur PostgreSQL. #38310 (Kseniia Sumarokova).
- Corrige une optimisation dans PartialSortingTransform (SIGSEGV et résultat incorrect possible). #38324 (Azat Khuzhin).
- Correction de RabbitMQ avec les formats basés sur PeekableReadBuffer. Clôt #38061. #38356 (Kseniia Sumarokova).
- MaterializedPostgreSQL - fonctionnalité expérimentale. Correction d’un possible
Invalid number of rows in Chunkdans MaterializedPostgreSQL. Clôt #37323. #38360 (Kseniia Sumarokova). - Correction de la configuration RabbitMQ avec le paramètre de chaîne de connexion. Clôt #36531. #38365 (Kseniia Sumarokova).
- Correction du moteur PostgreSQL, qui n’utilisait pas le schéma PostgreSQL lors de la récupération de la taille de dimension d’un tableau. Clôt #36755. Clôt #36772. #38366 (Kseniia Sumarokova).
- Correction d’un résultat potentiellement incorrect des requêtes distribuées avec
DISTINCTetLIMIT. Corrige #38282. #38371 (Anton Popov). - Correction de résultats erronés de countSubstrings() & position() sur des motifs contenant des octets nuls. #38589 (Robert Schulze).
- Il est désormais possible de démarrer un clickhouse-server et d’attacher/détacher des tables, même lorsque celles-ci contiennent des valeurs incorrectes dans la représentation IPv4/IPv6. Correction adéquate du problème #35156. #38590 (alesapin).
- La fonction
rankCorrfonctionnera correctement si certains arguments sont des NaN. Cela clôt #38396. #38722 (Alexey Milovidov). - Correction de
parallel_view_processing=1avecoptimize_trivial_insert_select=1. Correction demax_insert_threadslors de l’alimentation des vues. #38731 (Azat Khuzhin). - Correction d’un use-after-free dans les fonctions d’agrégation avec le combinateur
Map, qui entraînait un résultat incorrect. #38748 (Azat Khuzhin).
Release ClickHouse 22.6, 2022-06-16. Présentation, Vidéo
changement non rétrocompatible
- Suppression de la prise en charge des littéraux numériques octaux en SQL. Dans les versions précédentes, ils étaient interprétés comme des Float64. #37765 (Yakov Olkhovskiy).
- Modification de l’analyse des paramètres utilisant
secondscomme type afin de prendre en charge les valeurs à virgule flottante (par exemple :max_execution_time=0.5). Les valeurs Infinity ou NaN déclencheront une exception. #37187 (Raúl Marín). - Modification du format de sérialisation binaire des colonnes de type expérimental
Object. Le nouveau format est plus simple à implémenter pour les clients tiers. #37482 (Anton Popov). - Activation par défaut du paramètre
output_format_json_named_tuples_as_objects. Il permet de sérialiser les tuples nommés en objets JSON dans les formats JSON. #37756 (Anton Popov). - Les motifs LIKE se terminant par un caractère d’échappement (’\’) sont désormais interdits (comme l’impose la norme SQL). #37764 (Robert Schulze).
- Si vous exécutez différentes versions de ClickHouse sur un cluster avec des CPU AArch64, ou si vous mélangez AArch64 et amd64 dans un cluster, et que vous utilisez des requêtes distribuées avec GROUP BY sur plusieurs clés de type à taille fixe tenant sur 256 bits mais pas sur 64 bits, alors si la taille du résultat est très importante, les données ne seront pas entièrement agrégées dans le résultat de ces requêtes pendant la mise à niveau. Solution de contournement : effectuez la mise à niveau avec interruption de service plutôt que via une mise à niveau progressive.
Nouvelle fonctionnalité
- Ajout de la fonction
GROUPING. Elle permet de lever l’ambiguïté sur les enregistrements dans les requêtes avecROLLUP,CUBEouGROUPING SETS. Closes #19426. #37163 (Dmitry Novik). - Un nouvel algorithme de codec FPC pour la compression des données à virgule flottante. #37553 (Mikhail Guzov).
- Ajout de nouveaux formats JSON colonnaires :
JSONColumns,JSONCompactColumns,JSONColumnsWithMetadata. Closes #36338 Closes #34509. #36975 (Kruglov Pavel). - Ajout d’un outil de visualisation des traces OpenTelemetry basé sur d3js. #37810 (Sergei Trifonov).
- Prise en charge des INSERT dans la table
system.zookeeper. Closes #22130. #37596 (Han Fei). - Prise en charge d’un argument de motif non constant pour les fonctions
LIKE,ILIKEetmatch. #37251 (Robert Schulze). - Les fonctions définies par l’utilisateur exécutables prennent désormais en charge les paramètres. Example:
SELECT test_function(parameters)(arguments). Closes #37578. #37720 (Maksim Kita). - Ajout de la colonne
merge_reasonà la tablesystem.part_log. #36912 (Sema Checherinda). - Ajout de la prise en charge des Maps et des Records dans le format Avro. Ajout du nouveau paramètre
input_format_avro_null_as_default, qui permet d’insérer une valeur null par défaut au format Avro. Closes #18925 Closes #37378 Closes #32899. #37525 (Kruglov Pavel). - Ajout de l’outil
clickhouse-diskspour inspecter et exploiter les systèmes de fichiers virtuels configurés pour ClickHouse. #36060 (Artyom Yurkov). - Ajout des fonctions H3 d’arêtes unidirectionnelles. #36843 (Bharat Nallan).
- Ajout de la prise en charge du calcul de hashids à partir d’entiers non signés. #37013 (Michael Nutt).
- Une spécification
SALTexplicite est autorisée pourCREATE USER <user> IDENTIFIED WITH sha256_hash. #37377 (Yakov Olkhovskiy). - Ajout de deux nouveaux paramètres
input_format_csv_skip_first_lines/input_format_tsv_skip_first_linespour permettre d’ignorer un nombre spécifié de lignes au début du fichier dans les formats CSV/TSV. #37537 (Kruglov Pavel). - La fonction
showCertificateaffiche le certificat SSL actuel du serveur. #37540 (Yakov Olkhovskiy). - La source HTTP pour les dictionnaires de données dans les collections nommées est désormais prise en charge. #37581 (Yakov Olkhovskiy).
- Ajout d’une nouvelle fonction de fenêtre
nonNegativeDerivative(metric_column, timestamp_column[, INTERVAL x SECOND]). #37628 (Andrey Zvonov). - Implémentation de la modification du commentaire des tables
ReplicatedMergeTree. #37416 (Vasily Nemkov). - Ajout de la requête
SYSTEM UNFREEZE, qui supprime l’intégralité de la sauvegarde, que la table correspondante ait été supprimée ou non. #36424 (Vadim Volodin).
Fonctionnalité expérimentale
- Prise en charge de
POPULATEpourWINDOW VIEW. #36945 (vxider). - Prise en charge de
ALTER TABLE ... MODIFY QUERYpourWINDOW VIEW. #37188 (vxider). - Cette PR modifie le comportement de la syntaxe
ENGINEdansWINDOW VIEWpour l’aligner sur celui deMATERIALIZED VIEW. #37214 (vxider).
Amélioration des performances
- Ajout de nombreuses optimisations pour ARM NEON #38093(Daniel Kutenin), (Alexandra Pilipyuk) Remarque : si vous exécutez différentes versions de ClickHouse sur un cluster doté de processeurs ARM et utilisez des requêtes distribuées avec GROUP BY sur plusieurs clés de type à taille fixe tenant sur 256 bits mais pas sur 64 bits, le résultat de la requête d’agrégation sera erroné pendant la mise à niveau. Solution de contournement : effectuez la mise à niveau avec interruption de service plutôt que via une mise à niveau progressive.
- Amélioration des performances et de l’utilisation mémoire pour la sélection d’un sous-ensemble de colonnes avec les formats Native, Protobuf, CapnProto, JSONEachRow, TSKV, ainsi que tous les formats avec les suffixes WithNames/WithNamesAndTypes. Auparavant, lors de la sélection d’un sous-ensemble de colonnes à partir de fichiers dans ces formats, toutes les colonnes étaient lues et stockées en mémoire. Désormais, seules les colonnes requises sont lues. Cette PR active le paramètre
input_format_skip_unknown_fieldspar défaut, car sinon, en cas de sélection d’un sous-ensemble de colonnes, une exception serait levée. #37192 (Kruglov Pavel). - Désormais, davantage de filtres peuvent être poussés au niveau du join. #37472 (Amos Bird).
- Chargement des marks uniquement pour les colonnes nécessaires lors de la lecture des wide parts. #36879 (Anton Kozlov).
- Amélioration des performances de l’agrégation lorsque des colonnes sparse (activables via le paramètre Experimental
ratio_of_defaults_for_sparse_serializationdans les tablesMergeTree) sont utilisées comme arguments dans des fonctions d’agrégation. #37617 (Anton Popov). - Optimisation de la fonction
COALESCEà deux arguments. #37666 (Anton Popov). - Remplacement de
multiIfpariflorsquemultiIfn’a qu’une seule condition, car la fonctionifest plus performante. #37695 (Anton Popov). - Amélioration des performances des fonctions
dictGetDescendantsetdictGetChildren: création d’un index hiérarchique temporaire parent-enfants par requête, et non par appel de fonction pendant la requête. Il est désormais possible de spécifierBIDIRECTIONALpour les attributsHIERARHICAL; le dictionnaire maintiendra alors en mémoire un index parent-enfants, ce qui évitera aux fonctionsdictGetDescendantsetdictGetChildrende créer un index temporaire pour chaque requête. Closes #32481. #37148 (Maksim Kita). - La destruction de l’état des agrégats peut désormais être déléguée à un thread pool. Pour les requêtes avec LIMIT et un état volumineux, cela apporte une accélération significative ; par exemple,
select uniq(number) from numbers_mt(1e7) group by number limit 100est devenu environ 2,5 fois plus rapide. #37855 (Nikita Taranov). - Amélioration des performances du tri sur une seule colonne. #37195 (Maksim Kita).
- Amélioration des performances du tri sur une seule colonne grâce à des spécialisations de la file de tri. #37990 (Maksim Kita).
- Amélioration de 2 à 4 fois des performances des fonctions de norme de tableau et des fonctions de distance. #37394 (Alexander Gololobov).
- Amélioration des performances des fonctions de comparaison de nombres grâce au dynamic dispatch. #37399 (Maksim Kita).
- Améliore les performances de ORDER BY avec LIMIT. #37481 (Maksim Kita).
- Améliore les performances de la fonction
hasAllgrâce à l’infrastructure de dispatch dynamique. #37484 (Maksim Kita). - Améliore les performances des fonctions
greatCircleAngle,greatCircleDistanceetgeoDistance. #37524 (Maksim Kita). - Améliore les performances des insertions dans MergeTree lorsqu’il y a plusieurs colonnes dans ORDER BY. #35762 (Maksim Kita).
- Corrige une utilisation excessive du CPU en arrière-plan lorsqu’il y a beaucoup de tables. #38028 (Maksim Kita).
- Améliore les performances de la fonction
notgrâce au dispatch dynamique. #38058 (Maksim Kita). - Optimise la mise en cache interne des patterns re2 qui apparaissent par exemple dans les fonctions LIKE et MATCH. #37544 (Robert Schulze).
- Améliore d’un seul tenant la fonction de génération de masques de bits de filtre avec les instructions AVX-512. #37588 (yaqi-zhao).
- Applique la méthode de lecture
threadpoolau moteur d’intégration Hive. Cela accélérera considérablement la lecture. #36328 (李扬). - Lorsque toutes les colonnes à lire sont des clés de partition, construit les colonnes à partir du numéro de ligne du fichier sans lire réellement le fichier Hive. #37103 (lgbo).
- Prend en charge plusieurs disques pour la mise en cache des fichiers Hive. #37279 (lgbo).
- Limiter l’utilisation maximale du cache par requête permet d’éviter efficacement la pollution du pool de cache. Related Issues. #37859 (Han Shukai).
- Actuellement, ClickHouse télécharge directement tous les fichiers distants dans le cache local (même s’ils ne sont lus qu’une seule fois), ce qui provoque fréquemment des opérations d’IO sur le disque local. Dans certains scénarios, ces IO ne sont pas nécessaires et peuvent facilement dégrader les performances. Comme le montre la figure ci-dessous, lorsque nous exécutons SSB Q1-Q4, le cache a eu un effet négatif sur les performances. #37516 (Han Shukai).
- Permet d’élaguer la liste des fichiers via des colonnes virtuelles telles que
_fileet_pathlors de la lecture depuis S3. Cela concerne #37174, #23494. #37356 (Amos Bird). - Dans la fonction : CompressedWriteBuffer::nextImpl(), il existe une étape inutile de copie à l’écriture, qui se produisait fréquemment lors de l’insertion de données. Voici la différence apportée par ce correctif : - Avant : 1. Compresser “working_buffer” dans “compressed_buffer” 2. copier dans “out” - Après : compresser directement “working_buffer” dans “out”. #37242 (jasperzhu).
Amélioration
- Prise en charge des types avec des valeurs par défaut non standard dans ROLLUP, CUBE et GROUPING SETS. Clôt #37360. #37667 (Dmitry Novik).
- Correction de la collecte des traces de pile sur ARM. Clôt #37044. Clôt #15638. #37797 (Maksim Kita).
- Le client essaiera chaque adresse IP renvoyée par la résolution DNS jusqu’à ce que la connexion aboutisse. #37273 (Yakov Olkhovskiy).
- Permet d’utiliser le type String au lieu de Binary dans les formats Arrow/Parquet/ORC. Cette PR introduit 3 nouveaux paramètres à cet effet :
output_format_arrow_string_as_string,output_format_parquet_string_as_string,output_format_orc_string_as_string. La valeur par défaut de tous ces paramètres estfalse. #37327 (Kruglov Pavel). - Applique le paramètre
input_format_max_rows_to_read_for_schema_inferenceau nombre total de lignes lues à partir de tous les fichiers correspondant aux globs. Auparavant, le paramètreinput_format_max_rows_to_read_for_schema_inferenceétait appliqué séparément à chaque fichier du glob et, en cas de très grand nombre de nulls, nous pouvions lire lesinput_format_max_rows_to_read_for_schema_inferencepremières lignes de chaque fichier sans rien obtenir. Augmente également la valeur par défaut de ce paramètre à 25000. #37332 (Kruglov Pavel). - Ajout d’un grant
CLUSTERdistinct (ainsi que de la directive de configurationaccess_control_improvements.on_cluster_queries_require_cluster_grant, pour assurer la rétrocompatibilité, avecfalsecomme valeur par défaut). #35767 (Azat Khuzhin). - Ajout de la prise en charge de l’inférence de schéma pour
hdfsCluster. #35812 (Nikita Mikhaylov). - Implémentation de l’algorithme d’équilibrage de charge
least_usedpour les disques au sein d’un volume (configuration multi-disques). #36686 (Azat Khuzhin). - Modifie l’endpoint HTTP pour renvoyer les statistiques complètes dans l’en-tête
X-ClickHouse-Summarylorsquesend_progress_in_http_headers=0(auparavant, il renvoyait uniquement des zéros). - Modifie l’endpoint HTTP pour renvoyer l’en-têteX-ClickHouse-Exception-Codelorsque la progression a déjà été envoyée (send_progress_in_http_headers=1) - Modifie l’endpoint HTTP pour renvoyerHTTP_REQUEST_TIMEOUT(408) au lieu deHTTP_INTERNAL_SERVER_ERROR(500) en cas d’erreursTIMEOUT_EXCEEDED. #36884 (Raúl Marín). - Permet à un utilisateur d’inspecter les grants des rôles attribués. #36941 (nvartolomei).
- Ne calcule pas une intégrale numériquement, mais utilise à la place des fonctions CDF. Cela accélérera l’exécution et améliorera la précision. Cela corrige #36714. #36953 (Nikita Mikhaylov).
- Ajout d’une implémentation par défaut pour Nothing dans les fonctions. Désormais, la plupart des fonctions renvoient une colonne de type Nothing si l’un de leurs arguments est Nothing. Cela résout également le problème avec des fonctions comme arrayMap/arrayFilter et similaires lorsqu’elles prennent un tableau vide en argument. Auparavant, des requêtes comme
select arrayMap(x -> 2 * x, []);échouaient, car la fonction à l’intérieur de la lambda ne pouvait pas fonctionner avec le typeNothing; désormais, ces requêtes renvoient un tableau vide de typeArray(Nothing). Ajout également de la prise en charge des tableaux de types nullable dans des fonctions comme arrayFilter/arrayFill. Auparavant, des requêtes commeselect arrayFilter(x -> x % 2, [1, NULL])échouaient ; elles fonctionnent désormais (si le résultat de la lambda est NULL, cette valeur ne sera pas incluse dans le résultat). Clôt #37000. #37048 (Kruglov Pavel). - Désormais, si un shard possède une réplique locale, nous créons un plan local ainsi qu’un plan de lecture depuis toutes les répliques distantes. Ils partagent un initiateur qui coordonne la lecture. #37204 (Nikita Mikhaylov).
- N’interrompt plus le démarrage du serveur si l’option de configuration “mark_cache_size” n’est pas explicitement définie. #37326 (Robert Schulze).
- Permet d’indiquer
NULL/NOT NULLjuste après le type dans la déclaration de colonne. #37337 (Igor Nikonov). - Optimise le read buffer du file segment PARTIALLY_DOWNLOADED. #37338 (xiedeyantu).
- Tente d’améliorer le traitement des fonctions à court-circuit afin de corriger des problèmes dans les tests de stress. #37384 (Kruglov Pavel).
- Clôt #37395. #37415 (Memo).
- Corrige un interblocage extrêmement rare lors du fetch d’une part en zero-copy replication. Corrige #37423. #37424 (metahys).
- N’autorise pas la création d’un stockage avec un format de données inconnu. #37450 (Kruglov Pavel).
- Définit la valeur par défaut de
global_memory_usage_overcommit_max_wait_microsecondsà 5 secondes. Ajoute des informations surOvercommitTrackerau message d’exception OOM. Ajoute l’événement de profileMemoryOvercommitWaitTimeMicroseconds. #37460 (Dmitry Novik). - N’affiche pas le temps CPU
-0.0dans clickhouse-client. Il peut apparaître en raison d’erreurs d’arrondi. Clôt #38003. Clôt #38038. #38064 (Alexey Milovidov). - Play UI : conserve les contrôles en place lorsque la page défile horizontalement. Cela rend les modifications plus confortables, même si la table est large et a été défilée loin vers la droite. Fonctionnalité proposée par Maksym Tereshchenko de CaspianDB. #37470 (Alexey Milovidov).
- Modifier le div de requête dans play.html pour qu’il puisse être étendu au-delà de 20 % de hauteur. Dans le cas de requêtes très longues, il est utile d’agrandir l’élément textarea, mais actuellement, comme le div a une hauteur fixe, la textarea agrandie masque le div de données situé en dessous. Avec ce correctif, l’agrandissement de l’élément textarea poussera le div de données vers le bas/haut afin qu’il ne soit plus masqué. Conserve également la largeur de la zone de requête à 100 % même lorsque l’utilisateur redimensionne la textarea de requête. #37488 (guyco87).
- Ajout de
ProfileEventspour l’introspection du type de parts écrites (insérées ou fusionnées) (Inserted{Wide/Compact/InMemory}Parts,MergedInto{Wide/Compact/InMemory}Parts). Ajout de la colonnepart_typeàsystem.part_log. Résout #37495. #37536 (Anton Popov). - Amélioration de ClickHouse Keeper : déplacement des logs corrompus vers un dossier horodaté. #37565 (Antonio Andelic).
- Ne pas écrire les colonnes expirées par TTL après les fusions suivantes (auparavant, seule la première fusion/optimisation de la part n’écrivait pas les colonnes expirées par TTL, toutes les autres le faisaient). #37570 (Azat Khuzhin).
- Résultat plus précis de la fonction utilitaire
dumpColumnStructureen présence de colonnes LowCardinality ou Sparse. Dans les versions précédentes, ces fonctions convertissaient l’argument en colonne complète avant de renvoyer le résultat. Cela est nécessaire pour apporter une réponse dans #6935. #37633 (Alexey Milovidov). - ClickHouse Keeper : ne stocker que des ID de session uniques pour les watches. #37641 (Azat Khuzhin).
- Correction d’un possible “Cannot write to finalized buffer”. #37645 (Azat Khuzhin).
- Ajout du paramètre
support_batch_deletepourDiskS3afin de désactiver les appels de suppression multi-objets, que Google Cloud Storage ne prend pas en charge. #37659 (Fred Wulff). - Ajout d’une option pour désactiver le pool de connexions dans l’ODBC bridge. #37705 (Anton Kozlov).
- Les fonctions
dictGetHierarchy,dictIsIn,dictGetChildren,dictGetDescendantsprennent désormais en charge l’attribut nullableHIERARCHICALdans les dictionnaires. Clôt #35521. #37805 (Maksim Kita). - Expose les informations liées à la version de BoringSSL dans la table
system.build_options. #37850 (Bharat Nallan). - Désormais, clickhouse-server supprime les répertoires
delete_tmpau démarrage du serveur. Corrige #26503. #37906 (alesapin). - Nettoyage des parties détachées corrompues après expiration du timeout. Clôt #25195. #37975 (Kseniia Sumarokova).
- Désormais, dans la famille des moteurs de table MergeTree, les parties impossibles à déplacer seront supprimées immédiatement. #37994 (alesapin).
- Désormais, si le paramètre
always_fetch_merged_partest activé pour ReplicatedMergeTree, les merges essaieront moins souvent de trouver des parties sur d’autres répliques, ce qui réduira la charge sur [Zoo]Keeper. #37995 (alesapin). - Ajout également de privilèges implicites avec l’option GRANT. Par exemple,
GRANT CREATE TABLE ON test.* TO A WITH GRANT OPTIONpermet désormais àAd’exécuterGRANT CREATE VIEW ON test.* TO B. #38017 (Vitaly Baranov).
Amélioration de la compilation/des tests/du packaging
- Utilisation de
clang-14et de l’infrastructure LLVM version 14 pour la compilation. Clôt #34681. #34754 (Alexey Milovidov). Remarque :clang-14a un bug dans ThreadSanitizer qui perturbe le fonctionnement de notre CI. - Possibilité d’abaisser les privilèges au démarrage. Cela simplifie les images Docker. Clôt #36293. #36341 (Alexey Milovidov).
- Ajout de la vérification orthographique de la documentation dans la CI. #37790 (Vladimir C).
- Correction d’un stripping trop agressif, qui supprimait le hash intégré nécessaire à la vérification de la cohérence de l’exécutable. #37993 (Robert Schulze).
Correction de bugs
- Correction des instructions
SELECT ... INTERSECTetEXCEPT SELECTavec des types de chaînes constants. #37738 (Antonio Andelic). - Correction de
GROUP BYAggregateFunction(c.-à-d. lorsqueGROUP BYest appliqué à une colonne de typeAggregateFunction). #37093 (Azat Khuzhin). - (experimental WINDOW VIEW) Correction de
addDependencydans WindowView. Ce bug peut être reproduit comme dans #37237. #37224 (vxider). - Correction d’une incohérence dans la fonctionnalité ORDER BY … WITH FILL. Une requête contenant ORDER BY … WITH FILL peut générer des lignes supplémentaires lorsque plusieurs colonnes WITH FILL sont présentes. #38074 (Yakov Olkhovskiy).
- Cette PR déplace
addDependencydu constructeur versstartup()afin d’éviter d’ajouter une dépendance à une table supprimée, corrigeant ainsi #37237. #37243 (vxider). - Correction de l’insertion des valeurs par défaut pour les valeurs manquantes dans les formats colonnaires. Auparavant, les colonnes manquantes étaient remplies avec les valeurs par défaut des types, et non celles des colonnes. #37253 (Kruglov Pavel).
- (experimental Object type) Correction de certains cas d’insertion de tableaux imbriqués dans des colonnes de type
Object. #37305 (Anton Popov). - Correction d’erreurs inattendues dues à un conflit de chaînes constantes dans une fonction d’agrégation, prewhere et join. Clôt #36891. #37336 (Vladimir C).
- Correction des projections avec GROUP/ORDER BY dans la requête et optimize_aggregation_in_order (auparavant, le résultat était incorrect, car seul le tri final était effectué). #37342 (Azat Khuzhin).
- Correction d’une erreur liée aux symboles dans le nom de clé dans S3. Corrige #33009. #37344 (Vladimir Chebotarev).
- Lever une exception lorsque GROUPING SETS est utilisé avec ROLLUP ou CUBE. #37367 (Dmitry Novik).
- Correction de LOGICAL_ERROR dans getMaxSourcePartsSizeForMerge pendant les merges (lorsque des valeurs non standard et plus élevées de
background_pool_size/background_merges_mutations_concurrency_ratiosont spécifiées dansconfig.xml(nouvelle méthode) plutôt que dansusers.xml(méthode obsolète)). #37413 (Azat Khuzhin). - Ne supprime plus le BOM UTF-8 dans le format RowBinary. #37428 (Paul Loyd). #37428 (Paul Loyd).
- Correction d’un bug de ClickHouse Keeper : correction de la récupération forcée pour un cluster à nœud unique. #37440 (Antonio Andelic).
- Corrige l’erreur logique dans les fonctions normalizeUTF8. Ferme #37298. #37443 (Maksim Kita).
- Corrige le transtypage de LowCardinality de Nullable dans JoinSwitcher. Ferme #37385. #37453 (Vladimir C).
- Corrige la sortie des tuples nommés dans les formats ORC/Arrow/Parquet. #37458 (Kruglov Pavel).
- Corrige l’optimisation des fonctions monotones dans la clause ORDER BY en présence de GROUPING SETS. Corrige #37401. #37493 (Dmitry Novik).
- Corrige une erreur lors d’une jointure avec un dictionnaire dans certaines conditions. Ferme #37386. #37530 (Vladimir C).
- Interdit
optimize_aggregation_in_orderavecGROUPING SETS(corrigeLOGICAL_ERROR). #37542 (Azat Khuzhin). - Corrige les informations de dump incorrectes d’ActionsDAG. #37587 (zhanglistar).
- Corrige la conversion de types pour les requêtes UNION (peut produire LOGICAL_ERROR). #37593 (Azat Khuzhin).
- Corrige le modificateur
WITH FILLavec des intervalles négatifs dans la clauseSTEP. Corrige #37514. #37600 (Anton Popov). - Corrige l’utilisation invalide d’un Array avec joinGet lorsque
join_use_nulls = 1. Cela corrige #37562. #37650 (Amos Bird). - Corrige l’incohérence du nombre de colonnes dans un CROSS JOIN. Ferme #37561. #37653 (Vladimir C).
- Corrige un défaut de segmentation dans
show create tableà partir d’une base de données MySQL lorsqu’elle est configurée avec des named collections. Ferme #37683. #37690 (Kseniia Sumarokova). - Corrige l’impossibilité pour RabbitMQ Storage de démarrer après le redémarrage du server si le stockage avait été créé sans clause SETTINGS. Ferme #37463. #37691 (Kseniia Sumarokova).
- Les fonctions définies par l’utilisateur SQL désactivent CREATE/DROP en mode readonly. Ferme #37280. #37699 (Maksim Kita).
- Corrige le formatage des arguments Nullable pour les fonctions définies par l’utilisateur exécutables. Ferme #35897. #37711 (Maksim Kita).
- Correction de l’optimisation activée par le paramètre
optimize_monotonous_functions_in_order_bydans les requêtes distribuées. Corrige #36037. #37724 (Anton Popov). - Correction d’une possible erreur logique :
Invalid Field get from type UInt64 to type Float64dans la fonction de tablevalues. Clôt #37602. #37754 (Kruglov Pavel). - Correction d’un segfault possible lors de l’inférence de schéma en cas d’exception dans le constructeur de SchemaReader. Clôt #37680. #37760 (Kruglov Pavel).
- Correction du paramètre cast_ipv4_ipv6_default_on_conversion_error pour la fonction CAST interne. Clôt #35156. #37761 (Maksim Kita).
- Correction d’une erreur de toString sur DatatypeDate32. #37775 (LiuNeng).
- Le paramètre
dead_session_check_period_msde ClickHouse Keeper a été converti en microsecondes (multiplié par 1000), ce qui faisait que les sessions expirées n’étaient nettoyées qu’au bout de plusieurs minutes (au lieu de 500 ms). #37824 (Michael Lex). - Correction du possible message d’erreur “No more packets are available” pour les requêtes distribuées (lorsque
async_socket_for_remote/use_hedged_requestsest désactivé). #37826 (Azat Khuzhin). - (WINDOW VIEW expérimental) Ne pas supprimer la table cible interne lors de l’exécution de
ALTER TABLE ... MODIFY QUERYdans WindowView. #37879 (vxider). - Correction du propriétaire du répertoire de coordination dans l’image Docker ClickHouse Keeper. Corrige #37914. #37915 (James Maidment).
- Correction dans Dictionaries pour les requêtes personnalisées avec champ de mise à jour et
{condition}. Clôt #33746. #37947 (Maksim Kita). - Correction d’un résultat potentiellement incorrect de
SELECT ... WITH FILLlorsqueORDER BYdoit être appliqué après le résultat deWITH FILL(par exemple, pour une requête externe). Le résultat incorrect était causé par l’optimisation des expressionsORDER BY(#35623). Clôt #37904. #37959 (Yakov Olkhovskiy). - (WINDOW VIEW expérimental) Ajout des colonnes par défaut manquantes lors de l’insertion dans la table cible dans WindowView, corrige #37815. #37965 (vxider).
- Correction d’une frame de pile trop grande qui entraînait l’échec de la compilation. #37996 (Han Shukai).
- Lors de l’activation de enable_filesystem_query_cache_limit, l’exception « Reserved cache size exceeds the remaining cache size » est désormais levée. #38004 (xiedeyantu).
- Correction de la conversion de types pour les requêtes UNION (peut produire LOGICAL_ERROR). #34775 (Azat Khuzhin).
- Une fusion TTL peut ne pas être reprogrammée si BackgroundExecutor est occupé. —merges_with_ttl_counter est incrémenté dans selectPartsToMerge() — la tâche —merge sera ignorée si BackgroundExecutor est occupé — merges_with_ttl_counter ne sera pas décrémenté. #36387 (lthaooo).
- Correction de la valeur surchargée du paramètre
normalize_function_names. #36937 (李扬). - Correction des fonctions de fenêtre à décroissance exponentielle dans le temps. Elles respectent désormais les limites de la fenêtre. #36944 (Vladimir Chebotarev).
- Correction d’une possible erreur de type heap-use-after-free lors de la lecture de system.projection_parts et system.projection_parts_columns. Cela corrige #37184. #37185 (Amos Bird).
- Correction du comportement des secondes fractionnaires de
DateTime64avant l’epoch Unix. #37697 (Andrey Zvonov). #37039 (李扬).
Release ClickHouse 22.5, 2022-05-19. Présentation, Vidéo
Notes de mise à niveau
- Désormais, les background merges, les mutations et
OPTIMIZEn’incrémentent plus les métriquesSelectedRowsetSelectedBytes. En revanche, ils continuent d’incrémenterMergedRowsetMergedUncompressedBytes, comme auparavant. Cela affecte uniquement les valeurs des métriques, en les rendant plus pertinentes. Ce changement n’introduit aucune incompatibilité, mais comme il peut susciter des questions sur l’évolution des métriques, nous l’avons classé dans cette catégorie. #37040 (Nikolai Kochetov). - Le module BoringSSL a été mis à jour vers la version officielle conforme à FIPS. ClickHouse est ainsi désormais conforme à FIPS. #35914 (Meena-Renganathan). Les chiffrements
aes-192-cfb128etaes-256-cfb128ont été supprimés, car ils ne font pas partie de la version certifiée FIPS de BoringSSL. - Le paramètre
max_memory_usagea été supprimé du profil utilisateur par défaut dansusers.xml. Cela permet d’utiliser des limites mémoire plus flexibles pour les requêtes, au lieu de l’ancienne limite fixe de 10 Go. - Le paramètre
log_query_threadsest désormais désactivé par défaut. Il contrôle la journalisation des statistiques sur chaque thread participant à l’exécution des requêtes. Avec la prise en charge des lectures asynchrones, le nombre total d’identifiants de thread distincts est devenu trop important, et la journalisation dansquery_thread_logest devenue trop lourde. #37077 (Alexey Milovidov). - La fonction
groupArraySorteda été supprimée en raison d’un bogue. #36822 (Alexey Milovidov).
Nouvelle fonctionnalité
- Activer memory overcommit par défaut. #35921 (Dmitry Novik).
- Ajouter la prise en charge de GROUPING SETS dans la clause GROUP BY. Cette implémentation prend en charge le traitement parallèle des GROUPING SETS. #33631 (Dmitry Novik).
- Ajouter la table
system.certificates. #37142 (Yakov Olkhovskiy). - Ajouter les fonctions
h3Line,h3Distanceeth3HexRing. #37030 (Bharat Nallan). - Nouvel outil de diagnostic basé sur un seul binaire (clickhouse-diagnostics). #36705 (Dale McDiarmid).
- Ajouter le format de sortie
Prometheus#36051. #36206 (Vladimir C). - Ajouter le format d’entrée
MySQLDump. Il lit toutes les données des requêtes INSERT appartenant à une même table dans le dump. S’il y a plusieurs tables, il lit par défaut les données de la première. #36667 (Kruglov Pavel). - Afficher les champs
total_rowsettotal_bytesdanssystem.tablespour les tables temporaires. #36401. #36439 (xiedeyantu). - Permettre de remplacer
parts_to_delay_insertetparts_to_throw_insertpar des paramètres au niveau de la requête. S’ils sont définis, ils remplaceront les paramètres au niveau de la table. #36371 (Memo).
Fonctionnalité expérimentale
- Implémentation des fonctions de distance L1, L2, Linf et cosinus pour les tableaux, ainsi que des fonctions de norme L1, L2 et Linf pour les tableaux. #37033 (qieqieplus). Mise en garde : ces fonctions seront renommées.
- Amélioration de la requête
WATCHdans WindowView : 1. Réduction de la latence de mise à disposition des résultats de requête en appelant le signalfire_condition. 2. Accélération de l’opération d’annulation de requête (ctrl-c) en vérifiantisCancelled()plus fréquemment. #37226 (vxider). - Introspection pour la suppression du cache du système de fichiers. #36802 (Han Shukai).
- Ajout d’une nouvelle fonction de hachage SQL,
wyHash64. #36467 (olevino). - Amélioration des bases de données répliquées : ajout de la requête
SYSTEM SYNC DATABASE REPLICA, qui permet de synchroniser les métadonnées des tables au sein d’une base de données Replicated, car la synchronisation est actuellement asynchrone. #35944 (Nikita Mikhaylov). - Amélioration du cache du système de fichiers distant : meilleure lecture depuis le cache. #37054 (Kseniia Sumarokova). Amélioration de la requête
SYSTEM DROP FILESYSTEM CACHE: option<path>et optionFORCE. #36639 (Kseniia Sumarokova). - Amélioration des données semi-structurées : permet de convertir des colonnes de type
Object(...)enObject(Nullable(...)). #36564 (awakeljw). - Amélioration des répliques parallèles : nous créons un interpréteur local si nous voulons exécuter une requête sur la réplique localhost. En revanche, lors de l’exécution d’une requête sur plusieurs répliques, nous nous appuyons sur l’existence d’une connexion pour que les répliques puissent communiquer avec le coordinateur. Ce point a désormais été amélioré, et la réplique localhost peut communiquer directement avec le coordinateur au sein du même processus. #36281 (Nikita Mikhaylov).
Amélioration des performances
- Améliore les performances des fonctions d’agrégation
avgetsumlorsqu’elles sont utilisées sans expression GROUP BY. #37257 (Maksim Kita). - Améliore les performances des fonctions arithmétiques unaires (
bitCount,bitNot,abs,intExp2,intExp10,negate,roundAge,roundDuration,roundToExp2,sign) grâce au dispatch dynamique. #37289 (Maksim Kita). - Améliore les performances de ORDER BY, de MergeJoin et des insertions dans MergeTree grâce à la compilation JIT du comparateur des colonnes de tri. #34469 (Maksim Kita).
- Modifie la structure de
system.asynchronous_metric_log. Elle occupera environ 10 fois moins d’espace. Cela clôt #36357. Le champevent_time_microsecondsa été supprimé, car il est inutile. #36360 (Alexey Milovidov). - Charge les marks uniquement pour les colonnes nécessaires lors de la lecture des wide parts. #36879 (Anton Kozlov).
- Améliore les performances du cache des descripteurs de fichiers en réduisant la portée des mutex. #36682 (Anton Kozlov).
- Améliore les performances de lecture depuis le moteur de stockage
Fileet les fonctions de tablefilelorsque le chemin contient des globs et que le répertoire correspondant contient un grand nombre de fichiers. #36647 (Anton Popov). - Applique l’analyse syntaxique parallèle au format d’entrée
HiveText, ce qui peut accélérer d’un facteur 2 l’analyse de HiveText lors de la lecture d’un fichier local. #36650 (李扬). - Le
HashJoinpar défaut n’est pas sûr vis-à-vis des threads pour l’insertion des lignes de la table de droite et s’exécute donc sur un seul thread. Lorsque la table de droite est volumineuse, le processus de join est trop lent et l’utilisation du CPU reste faible. #36415 (lgbo). - Permet de réécrire
select countDistinct(a) from tenselect count(1) from (select a from t groupBy a). #35993 (zhanglistar). - Transforme une chaîne de OR LIKE en multiMatchAny. Sera activé une fois que nous aurons davantage confiance dans son bon fonctionnement. #34932 (Daniel Kutenin).
- Améliore les performances de certaines fonctions grâce à l’inlining. #34544 (Daniel Kutenin).
- Ajoute une branche pour éviter un memcpy inutile dans readBig. Cela améliore légèrement les performances. #36095 (jasperzhu).
- Implémente une clé GROUP BY partielle pour optimize_aggregation_in_order. #35111 (Azat Khuzhin).
Amélioration
- Affiche les noms des fichiers en erreur en cas d’erreurs d’analyse lors de l’exécution des fonctions de table
file,s3eturl. #36314 (Anton Popov). - Il est désormais possible d’augmenter à l’exécution le nombre de threads utilisés pour les opérations en arrière-plan (merges, mutations, moves et fetches) s’ils sont spécifiés dans la configuration de niveau supérieur. #36425 (Nikita Mikhaylov).
- Désormais, les fonctions de conversion de date et heure qui génèrent une heure antérieure à 1970-01-01 00:00:00 avec des fuseaux horaires à heures/minutes partielles seront ramenées à zéro au lieu de provoquer un overflow. Il s’agit de la suite de https://github.com/ClickHouse/ClickHouse/pull/29953, qui traite https://github.com/ClickHouse/ClickHouse/pull/29953#discussion_r800550280 . Marqué comme amélioration, car il s’agit d’un comportement défini par l’implémentation (et d’un cas très rare) qu’il est acceptable de modifier. #36656 (Amos Bird).
- Ajoute un avertissement si quelqu’un exécute clickhouse-server avec le log level “test”. Le log level “test” a été ajouté récemment et ne peut pas être utilisé en production en raison d’une dégradation des performances inévitable, inéluctable, fatale et potentiellement mortelle. #36824 (Alexey Milovidov).
- Analyse les collations dans CREATE TABLE, lève une exception ou ignore. Ferme #35892. #36271 (yuuch).
- L’option
compatibility_ignore_auto_increment_in_create_tablepermet d’ignorer le mot-cléAUTO_INCREMENTdans une déclaration de colonne afin de simplifier la migration depuis MySQL. #37178 (Igor Nikonov). - Ajoute les alias
JSONLinesetNDJSONpourJSONEachRow. Ferme #36303. #36327 (flynn). - Limite le nombre maximal de partitions pouvant être interrogées pour chaque table Hive. Évite les dépassements de ressources. #37281 (lgbo).
- Ajout d’un transtypage implicite pour le second argument de la fonction
h3kRingafin d’en améliorer l’utilisation. Ferme #35432. #37189 (Maksim Kita). - Corrige l’indication de progression pour
INSERT SELECTdansclickhouse-local, pour toute requête, ainsi que la progression des fichiers dans le client. #37075 (Kseniia Sumarokova). - Corrige un bug pouvant laisser des outdated parts oubliées dans la famille des MergeTree table engines en cas de défaillance du filesystem lors de la suppression des parts. Avant ce correctif, elles n’étaient supprimées qu’après le premier redémarrage du server. #37014 (alesapin).
- Mise en œuvre d’un nouveau mode de gestion des row policies, pouvant être activé dans la configuration principale, qui permet aux users sans row policies permissives de lire des rows. #36997 (Vitaly Baranov).
- Interface Play : les nombres Nullable seront alignés à droite dans les cellules du tableau. Cela ferme #36982. #36988 (Alexey Milovidov).
- UI Play : s’il n’y a qu’une ligne dans le résultat et plus de quelques colonnes, afficher le résultat verticalement. Suite de #36811. #36842 (Alexey Milovidov).
- Nettoyage du CSS dans l’UI Play. Les pixels sont répartis de manière plus uniforme. Meilleure ergonomie pour les contenus longs dans les cellules des tables. #36569 (Alexey Milovidov).
- Finalisation des tampons d’écriture en cas d’exception pour éviter d’avoir à le faire dans les destructeurs. Cela devrait corriger : #36907. #36979 (Kruglov Pavel).
- Après #36425, des paramètres comme
background_fetches_pool_sizesont devenus obsolètes et peuvent apparaître au niveau supérieur de la configuration, mais ClickHouse levait une exception du typeError updating configuration from '/etc/clickhouse-server/config.xml' config.: Code: 137. DB::Exception: A setting 'background_fetches_pool_size' appeared at top level in config /etc/clickhouse-server/config.xml.Ce problème a été corrigé. #36917 (Nikita Mikhaylov). - Ajout d’informations de diagnostic supplémentaires (le cas échéant) lors de l’envoi d’une exception à un autre serveur. #36872 (tavplubix).
- Possibilité d’exécuter des fonctions de hachage avec des arguments de type
Array(Tuple(..)). #36812 (Anton Popov). - Ajout du paramètre de configuration
user_defined_path. #36753 (Maksim Kita). - Prise en charge de la macro de cluster dans la fonction de table
s3Cluster. #36726 (Vadim Volodin). - Annulation correcte des requêtes INSERT dans
clickhouse-client/clickhouse-local. #36710 (Azat Khuzhin). - Possibilité d’annuler une requête tout en conservant un Query id correct dans
MySQLHandler. #36699 (Amos Bird). - Ajout de la colonne
is_all_data_sentàsystem.processeset amélioration de la vérification de durcissement des tests internes qui s’appuie sur celle-ci. #36649 (Azat Khuzhin). - Les métriques sur le temps passé à lire depuis S3 sont désormais calculées correctement. Clôt #35483. #36572 (Alexey Milovidov).
- Prise en charge des descripteurs de fichier dans la fonction de table file lorsqu’elle est exécutée dans clickhouse-local. #36562 (wuxiaobai24).
- Possibilité d’utiliser des noms d’éléments de tuple commençant par des chiffres. #36544 (Anton Popov).
- Désormais, clickhouse-benchmark peut lire les informations d’authentification à partir des variables d’environnement. #36497 (Anton Kozlov).
- Amélioration de
clickhouse-keeper: ajout de la prise en charge de la récupération forcée, ce qui permet de reconfigurer le cluster sans quorum. #36258 (Antonio Andelic). - Amélioration de l’inférence de schéma pour les objets JSON. #36207 (Kruglov Pavel).
- Refactorisation du code autour de l’inférence de schéma avec des globs. Le fichier suivant correspondant au glob n’est essayé que lorsque cela a du sens (auparavant, le fichier suivant était essayé en cas de n’importe quelle erreur). Corrige également #36317. #36205 (Kruglov Pavel).
- Ajout d’un privilège
CLUSTERdistinct (et de la directive de configurationaccess_control_improvements.on_cluster_queries_require_cluster_grant, conservée pour la rétrocompatibilité et définie par défaut surfalse). #35767 (Azat Khuzhin). - Si la quantité de mémoire requise est disponible avant l’arrêt de la requête sélectionnée, toutes les requêtes en attente reprennent leur exécution. Désormais, nous n’arrêtons aucune requête si de la mémoire est libérée avant que la requête sélectionnée ne soit informée de l’annulation. #35637 (Dmitry Novik).
- Détection des Nullable dans Protobuf. En proto3, les valeurs par défaut ne sont pas envoyées dans le flux binaire. Il n’est donc pas trivial de distinguer les valeurs NULL des valeurs par défaut pour les colonnes Nullable. Une manière standard de traiter ce problème consiste à utiliser les wrappers Google pour imbriquer la valeur cible dans un message interne (voir https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/wrappers.proto). Dans ce cas, un champ absent est interprété comme une valeur NULL, un champ dont la valeur interne est absente est interprété comme une valeur par défaut, et un champ avec une valeur ordinaire est interprété comme une valeur ordinaire. Cependant, ClickHouse interprète les wrappers Google comme des colonnes Nested. Nous proposons d’introduire un comportement spécial pour détecter les wrappers Google et les interpréter comme décrit ci-dessus. Par exemple, pour sérialiser des valeurs pour une colonne Nullable
test, nous utiliserionsgoogle.protobuf.StringValue testdans notre schéma .proto. Notez que ces types sont ce que l’on appelle des “well-known types” dans Protobuf, implémentés directement dans la bibliothèque. #35149 (Jakub Kuklis). - Ajout de la prise en charge de la spécification de
content_typedans la configuration des gestionnaires HTTP prédéfinis et statiques. #34916 (Roman Nikonov). - Avertissement approprié lors de l’utilisation de clickhouse-client —file sans
--externalau préalable. Ferme #34747. #34765 (李扬). - Amélioration du moteur de base de données MySQL pour le rendre compatible avec le type de données binary(0). #37232 (zzsmdfj).
- Amélioration du rapport JSON de clickhouse-benchmark. #36473 (Tian Xinhui).
- Le serveur pouvait refuser de démarrer s’il ne parvenait pas à résoudre le nom d’hôte d’un dictionnaire ClickHouse externe. C’est désormais corrigé. Corrige #36451. #36463 (tavplubix).
Amélioration de la compilation, des tests et du packaging
- Désormais,
clickhouse-keeperpour l’architecturex86_64est lié statiquement à musl et ne dépend d’aucune bibliothèque système. #31833 (Alexey Milovidov). - Les builds de ClickHouse pour l’architecture
PowerPC64LEsont désormais disponibles via le script d’installation universelcurl https://clickhouse.com/ | shet par lien directhttps://builds.clickhouse.com/master/powerpc64le/clickhouse. #37095 (Alexey Milovidov). - Limiter la génération de code PowerPC à Power8 pour une meilleure compatibilité. Cela clôt l’issue #36025. #36529 (Alexey Milovidov).
- Simplifier le test de performance. Cela nous permettra de l’utiliser. #36769 (Alexey Milovidov).
- Faire échouer la comparaison de performances en cas d’erreurs dans le rapport. #34797 (Mikhail f. Shiryaev).
- Ajouter la prise en charge de ZSTD pour Arrow. Cela corrige l’issue #35283. #35486 (Sean Lafferty).
Correction de bugs
- Extrait l’ID de version s’il est présent dans l’URI et ajoute une requête à l’URI HTTP AWS. Clôt #31221. - [x] Extraire
Version IDde l’URI s’il est présent, puis réassembler l’URI sans celui-ci. - [x] Configurer l’objetAWS HTTP URIavec la requête. - [x] Tests unitaires :gtest_s3_uri- [x] Supprimer le commit d’instrumentation. #34571 (Saad Ur Rahman). - Corrige l’alias attribute.values de system.opentelemetry_span_log en values au lieu de keys. #37275 (Aleksandr Razumov).
- Corrige la conversion de Nullable(String) en Nullable(Bool/IPv4/IPv6). Clôt #37221. #37270 (Kruglov Pavel).
- Fonctionnalité expérimentale : corrige l’exécution des mutations dans les tables contenant des colonnes de type
Object. L’utilisation de sous-colonnes de typeObjectdans l’expressionWHEREdes requêtesUPDATEouDELETEest désormais autorisée, ainsi que la manipulation (DROP,MODIFY) de sous-colonnes distinctes. Corrige #37205. #37266 (Anton Popov). - Kafka n’a pas besoin de
group.idà l’étape du producteur. Dans le journal de la console, vous pouvez trouver un avertissement décrivant ce problème :2022.05.15 17:59:13.270227 [ 137 ] {} <Warning> StorageKafka (topic-name): [rdk:CONFWARN] [thrd:app]: Configuration property group.id is a consumer property and will be ignored by this producer instance. #37228 (Mark Andreev). - Fonctionnalité expérimentale (WindowView) : met à jour
max_fired_watermarkune fois les blocks réellement déclenchés, en cas de suppression de données qui n’ont pas encore été déclenchées. #37225 (vxider). - Corrige “Impossible de créer une colonne de type Set” pour les distributed queries avec LIMIT BY. #37193 (Azat Khuzhin).
- Fonctionnalité expérimentale : désormais, la requête WindowView
WATCH EVENTSne sera plus interrompue à cause du Chunk non vide créé dansWindowViewSource.h:58. #37182 (vxider). - Active
enable_global_with_statementpour les sous-requêtes, clôt #37141. #37166 (Vladimir C). - Corrige le cast implicite pour optimize_skip_unused_shards_rewrite_in. #37153 (Azat Khuzhin).
- La fonction ILIKE sur les colonnes FixedString pouvait renvoyer des résultats erronés (c.-à-d. correspondre à moins d’éléments qu’elle n’aurait dû). #37117 (Robert Schulze).
- Corrige
GROUP BYAggregateFunction(c.-à-d. lorsque vous faites unGROUP BYsur une colonne de typeAggregateFunction). #37093 (Azat Khuzhin). - Fonctionnalité expérimentale : correction de optimize_aggregation_in_order avec GROUP BY avec préfixe et les fonctions d’agrégation *Array. #37050 (Azat Khuzhin).
- Correction d’une dégradation des performances de certaines requêtes INSERT SELECT avec agrégation implicite. Corrige #36792. #37047 (tavplubix).
- Fonctionnalité expérimentale : correction de
GROUP BYordonné (optimize_aggregation_in_order=1) avec les fonctions d’agrégation*Array(groupArrayArray/…). #37046 (Azat Khuzhin). - Correction d’une sortie invalide de LowCardinality->ArrowDictionary lorsque le type des index n’est pas UInt8. Clôt #36832. #37043 (Kruglov Pavel).
- Correction d’un problème avec les valeurs infinies dans
quantileTDigest. Corrige #32107. #37021 (Vladimir Chebotarev). - Correction de l’envoi des données des tables externes dans HedgedConnections avec max_parallel_replicas != 1. #36981 (Kruglov Pavel).
- Correction d’une erreur logique sur la requête
TRUNCATEdans la base de donnéesReplicated. Corrige #33747. #36976 (tavplubix). - Fonctionnalité expérimentale : correction d’un blocage lors de la suppression de la table source dans WindowView. Clôt #35678. #36967 (vxider).
- Fonctionnalité expérimentale (cache rocksdb) : correction du problème #36671. #36929 (李扬).
- Fonctionnalité expérimentale : correction de bogues lors de l’utilisation de plusieurs colonnes dans WindowView par l’ajout d’actions de conversion pour permettre d’appeler
writeIntoWindowViewavec un schéma légèrement différent. #36928 (vxider). - Correction d’un bogue dans ClickHouse Keeper pouvant entraîner la corruption de fichiers journaux compressés en cas de faible charge et de redémarrages. #36910 (alesapin).
- Correction d’un résultat de requête incorrect lors d’une agrégation sur constante. Corrige #36728. #36888 (Amos Bird).
- Fonctionnalité expérimentale : correction du compteur
current_sizedans le cache. #36887 (Kseniia Sumarokova). - Fonctionnalité expérimentale : correction du déclenchement dans la window view avec hop window #34044. #36861 (vxider).
- Fonctionnalité expérimentale : correction d’un cast incorrect dans le buffer en cache depuis remote fs. #36809 (Kseniia Sumarokova).
- Correction de la création de tables avec
flatten_nested = 0. Auparavant, les colonnesNestednon apllaties pouvaient être aplaties après le redémarrage du serveur. #36803 (Anton Popov). - Correction de certains problèmes liés aux lectures asynchrones depuis un système de fichiers distant, qui survenaient lors de la lecture de données à faible cardinalité. #36763 (Kseniia Sumarokova).
- Fonctionnalité expérimentale : correction de l’insertion dans des colonnes de type
Objectà partir de plusieurs fichiers, par exemple via la table functionfileavec des globs. #36762 (Anton Popov). - Correction des timeouts dans les requêtes Hedged. Un blocage de la connexion juste après l’envoi d’une query distante pouvait entraîner une attente infinie. #36749 (Kruglov Pavel).
- Fonctionnalité expérimentale : correction d’un bogue de
groupBitmapAndState/groupBitmapOrState/groupBitmapXorStatesur une table distribuée. #36739 (Zhang Yifan). - Fonctionnalité expérimentale : pendant le test de la PR, j’ai constaté qu’une classe de cache était initialisée deux fois, ce qui levait une exception. Bien que la cause de ce problème ne soit pas claire, il semble qu’il existe dans ClickHouse une logique rechargeant le disque de manière répétée ; il faut donc prévoir un traitement particulier pour cette situation. #36737 (Han Shukai).
- Correction des fusions verticales dans les wide parts. Auparavant, une exception
There is no columnpouvait être levée pendant la fusion. #36707 (Anton Popov). - Correction du rechargement du serveur lors d’un changement de port (ne pas attendre les connexions en cours depuis le contexte de requête). #36700 (Azat Khuzhin).
- Fonctionnalité expérimentale : dans la PR précédente, j’ai constaté que les tests (tests sans état, vérification flaky (address, actions)) dépassaient le délai imparti. De plus, les tests en local peuvent également déclencher des deadlocks instables du système. Ce problème existe toujours avec la dernière version du code source de master. #36697 (Han Shukai).
- Fonctionnalité expérimentale : correction du redémarrage du serveur si la configuration du cache change. #36685 (Kseniia Sumarokova).
- Correction d’une possible utilisation de mémoire après libération dans l’inférence de schéma. Ferme #36661. #36679 (Kruglov Pavel).
- Correction de l’analyse des paramètres de query dans la requête
CREATElorsque le moteur n’est pas spécifié. Corrige https://github.com/ClickHouse/ClickHouse/pull/34187#issuecomment-1103812419. #36642 (tavplubix). - Fonctionnalité expérimentale : correction des fusions de wide parts avec le type
Object. #36637 (Anton Popov). - Correction d’un plantage du format lorsque l’expression par défaut suit EPHEMERAL sans être un littéral. Ferme #36618. #36633 (flynn).
- Correction de l’exception
Missing column, qui pouvait survenir lors de l’utilisation deINTERPOLATEavec une tableENGINE = MergeTree. #36549 (Yakov Olkhovskiy). - Correction d’une erreur potentielle liée aux littéraux dans
WHEREpour les requêtes avec join. Clôture de #36279. #36542 (Vladimir C). - Correction de la mise à jour de l’offset dans ReadBufferFromEncryptedFile, qui pouvait entraîner un comportement indéfini. #36493 (Kseniia Sumarokova).
- Correction des vérifications de cohérence du hostname pour la configuration du Keeper cluster. Ajout de la config
keeper_server.host_checks_enabledpour activer ou désactiver ces vérifications. #36492 (Antonio Andelic). - Correction de l’utilisation des Executable User Defined Functions dans GROUP BY. Auparavant, les Executable User Defined Functions ne pouvaient pas être utilisées comme expressions dans GROUP BY. Clôture de #36448. #36486 (Maksim Kita).
- Correction d’une exception possible liée à un paquet inconnu provenant du server dans le client. #36481 (Kseniia Sumarokova).
- Fonctionnalité expérimentale (veuillez ne jamais utiliser
system.session_log, elle sera supprimée) : ajout des valeurs enum manquantes dans la table system.session_log. Clôture de #36474. #36480 (Memo). - Correction d’un bug dans l’inférence de schéma de s3Cluster qui faisait que toutes les données n’étaient pas lues lors d’un select depuis s3Cluster. Le bug est apparu dans https://github.com/ClickHouse/ClickHouse/pull/35544. #36434 (Kruglov Pavel).
- Correction d’un déréférencement de nullptr dans JOIN et le matcher COLUMNS. Cela corrige #36416. Cela concerne https://github.com/ClickHouse/ClickHouse/pull/36417. #36430 (Amos Bird).
- Correction du rechargement du dictionnaire pour
ClickHouseDictionarySources’il contient des sous-requêtes scalaires. #36390 (lthaooo). - Correction d’une assertion dans JOIN, clôture de #36199. #36201 (Vladimir C).
- Les requêtes avec des alias à l’intérieur d’opérateurs spéciaux renvoyaient une erreur d’analyse (cassé en 22.1). Example :
SELECT substring('test' AS t, 1, 1). #36167 (Maksim Kita). - Fonctionnalité expérimentale : correction de l’insertion de JSON complexes avec des tableaux imbriqués dans des colonnes de type
Object. #36077 (Anton Popov). - Correction de ALTER DROP COLUMN sur une colonne imbriquée avec des compact parts (c.-à-d.
ALTER TABLE x DROP COLUMN n, lorsqu’il existe une colonnen.d). #35797 (Azat Khuzhin). - Correction de l’erreur de plage de longueur dans la fonction substring lorsque
offsetetlengthsont des constantes négatives et quesn’est pas constant. #33861 (RogerYK).
release ClickHouse 22.4, 2022-04-19. Présentation, Vidéo
Changement non rétrocompatible
- Ne plus autoriser SETTINGS après FORMAT dans les requêtes INSERT (il existe un paramètre de compatibilité,
allow_settings_after_format_in_insert, pour accepter de telles requêtes, mais il est désactivé par défaut). #35883 (Azat Khuzhin). - La fonction
yandexConsistentHash(algorithme de hachage cohérent de Konstantin “kostik” Oblakov) a été renommée enkostikConsistentHash. L’ancien nom est conservé comme alias pour des raisons de compatibilité. Bien que cette modification soit rétrocompatible, nous pourrions supprimer cet alias dans de futures releases ; il est donc recommandé de mettre à jour les usages de cette fonction dans vos applications. #35553 (Alexey Milovidov).
Nouvelle fonctionnalité
- Ajout de l’extension INTERPOLATE à ORDER BY … WITH FILL. Résout #34903. #35349 (Yakov Olkhovskiy).
- Profiling au niveau des processeurs (avec le paramètre
log_processors_profiles, ClickHouse écrira dans la tablesystem.processors_profile_logle temps passé par chaque processeur pendant l’exécution ou l’attente de données). #34355 (Azat Khuzhin). - Ajout des fonctions makeDate(year, month, day), makeDate32(year, month, day). #35628 (Alexander Gololobov). Implémentation de makeDateTime() et makeDateTIme64(). #35934 (Alexander Gololobov).
- Prise en charge du nouveau type de QUOTA
WRITTEN BYTESpour limiter le volume d’octets écrits lors des requêtes d’insert. #35736 (Anton Popov). - Ajout de la fonction
flattenTuple. Elle prend en argument unTuplenommé imbriqué et renvoie unTupleaplati dont les éléments sont les paths duTupled’origine. Par ex. :Tuple(a Int, Tuple(b Int, c Int)) -> Tuple(a Int, b Int, c Int).flattenTuplepeut être utilisée pour sélectionner tous les paths du typeObjectcomme colonnes distinctes. #35690 (Anton Popov). - Ajout des fonctions
arrayFirstOrNull,arrayLastOrNull. Résout #35238. #35414 (Maksim Kita). - Ajout des fonctions
minSampleSizeContinousetminSampleSizeConversion. Auteur : achimbab. #35360 (Maksim Kita). - Nouvelles fonctions
minSampleSizeContinousetminSampleSizeConversion. #34354 (achimbab). - Introduction du format
ProtobufList(tous les enregistrements sous forme de messages répétés dans le Protobuf de sortie). Résout #16436. #35152 (Nikolai Kochetov). - Ajout des fonctions
h3PointDistM,h3PointDistKm,h3PointDistRads,h3GetRes0Indexes,h3GetPentagonIndexes. #34568 (Bharat Nallan). - Ajout de la fonction
toLastDayOfMonth, qui arrondit une date ou une date avec heure au dernier jour du mois. #33501. #34394 (Habibullah Oladepo). - Ajout d’un paramètre de load balancing pour le client [Zoo]Keeper. Résout #29617. #30325 (小路).
- Ajout d’un nouveau type de politiques de lignes nommé
simple. Avant cette PR, nous avions deux types de politiques de lignes :permissiveetrestrictive. Une politique de lignessimpleajoute un nouveau filtre à une table, sans les effets de bord des politiques permissive et restrictive. #35345 (Vitaly Baranov). - Ajout de la possibilité de spécifier le secret du cluster dans une base de données Replicated. #35333 (Nikita Mikhaylov).
- Ajout de vérifications élémentaires au démarrage du serveur (mémoire disponible et espace disque, nombre maximal de threads, etc.). #34566 (Sergei Trifonov).
- Amélioration d’INTERVAL - il peut désormais être utilisé avec
[MILLI|MICRO|NANO]SECOND. Ajout des fonctionstoStartOf[Milli|Micro|Nano]second(). Ajout de[add|subtract][Milli|Micro|Nano]seconds(). #34353 (Andrey Zvonov).
Fonctionnalité expérimentale
- Ajout de la prise en charge des transactions pour les tables
MergeTreesimples. Cette fonctionnalité est très expérimentale et n’est pas recommandée en production. Fait partie de #22086. #24258 (tavplubix). - Prise en charge de l’inférence de schéma pour le type
Objectau formatJSONEachRow. Permet de convertir des colonnes de typeMapen colonnes de typeObject. #35629 (Anton Popov). - Permet d’écrire dans le cache du système de fichiers distant lors de toutes les opérations d’écriture. Ajout de la table
system.remote_filesystem_cache. Ajout de la requêtedrop remote filesystem cache. Ajout de l’introspection des métadonnées S3 avec la tablesystem.remote_data_paths. Résout #34021. Ajout d’une option de cache pour les merges, avec le moderead_from_filesystem_cache_if_exists_otherwise_bypass_cache(activé par défaut pour les merges et pouvant aussi être activé via un paramètre de requête du même nom). Renommage des paramètres liés au cache (remote_fs_enable_cache -> enable_filesystem_cache, etc.). #35475 (Kseniia Sumarokova). - Option permettant de stocker les métadonnées des parts dans RocksDB. Accélère le chargement des parts de MergeTree afin de réduire le temps de démarrage de clickhouse-server. Grâce à cette amélioration, clickhouse-server a pu faire passer son temps de démarrage de 75 minutes à 20 secondes, avec 700k parts MergeTree. #32928 (李扬).
Amélioration des performances
- Nouvelle optimisation du plan de requête. Les fonctions sont désormais évaluées après
ORDER BYlorsque c’est possible. Par exemple, pour la requêteSELECT sipHash64(number) FROM numbers(1e8) ORDER BY number LIMIT 5, la fonctionsipHash64serait évaluée aprèsORDER BYetLIMIT, ce qui permet un gain de performances d’environ 20x. #35623 (Nikita Taranov). - La taille des tables de hachage utilisées lors de l’agrégation est désormais collectée et réutilisée dans les requêtes suivantes afin d’éviter leur redimensionnement. #33439 (Nikita Taranov).
- Amélioration de la fonction hasAll grâce aux instructions SIMD (SSE et AVX2). #27653 (youennL-cs). #35723 (Maksim Kita).
- Plusieurs modifications améliorent les performances de ASOF JOIN (gain de 1,2 à 1,6x). La prise en charge des grands entiers a également été ajoutée. #34733 (Raúl Marín).
- Amélioration des performances de ASOF JOIN lorsque la clé est un entier natif. #35525 (Maksim Kita).
- Parallélisation des multipart uploads vers le stockage S3. #35343 (Sergei Trifonov).
- Le moteur de stockage URL télécharge désormais plusieurs chunks en parallèle si l’endpoint prend en charge HTTP Range. Deux paramètres supplémentaires ont été ajoutés,
max_download_threadsetmax_download_buffer_size, qui contrôlent le nombre maximal de threads qu’une seule requête peut utiliser pour télécharger le fichier, ainsi que le nombre maximal d’octets que chaque thread peut traiter. #35150 (Antonio Andelic). - Utilisation de plusieurs threads pour télécharger des objets depuis S3. Le téléchargement peut être contrôlé à l’aide des paramètres
max_download_threadsetmax_download_buffer_size. #35571 (Antonio Andelic). - Réduction de la portée du mutex lors des interactions avec HDFS. Lié à #35292. #35646 (shuchaome).
- Les mutations ne sont désormais requises pour le TTL au niveau de la table que lorsqu’il a été modifié. #35953 (Azat Khuzhin).
Amélioration
- Nombreuses améliorations de l’inférence de schéma. Quelques ajustements et heuristiques sont désormais utilisés pour déterminer les nombres, chaînes, arrays, Tuple et maps dans les formats de données CSV, TSV et TSVRaw. Ajout du paramètre
input_format_csv_use_best_effort_in_schema_inferencepour le format CSV, qui active ou désactive l’utilisation de ces heuristiques ; s’il est désactivé, tout est traité comme une chaîne. Ajout d’un paramètre similaire,input_format_tsv_use_best_effort_in_schema_inference, pour le format TSV/TSVRaw. Ces paramètres sont activés par défaut. - Ajout de la prise en charge de Maps pour l’inférence de schéma dans le format Values. - Correction d’un possible segfault lors de l’inférence de schéma dans le format Values. - Possibilité d’ignorer les colonnes avec des types non pris en charge dans les formats Arrow/ORC/Parquet. Ajout des paramètres correspondants :input_format_{parquet|orc|arrow}_skip_columns_with_unsupported_types_in_schema_inference. Ces paramètres sont désactivés par défaut. - Possibilité de convertir une colonne de type Null en colonne Nullable contenant uniquement des valeurs NULL dans les formats Arrow/Parquet. - Possibilité de spécifier les noms de colonnes pour l’inférence de schéma via le paramètrecolumn_names_for_schema_inferencepour les formats qui ne contiennent pas de noms de colonnes (comme CSV, TSV, JSONCompactEachRow, etc.) - Correction de l’inférence de schéma dans les formats ORC/Arrow/Parquet pour la gestion des colonnes Nullable. Auparavant, aucun des types inférés n’était Nullable, ce qui empêchait la lecture des colonnes Nullable à partir des données ; c’est désormais corrigé, et tous les types inférés sont toujours Nullable (car il n’est pas possible de déterminer si une colonne est Nullable ou non en lisant le schéma). - Correction de l’inférence de schéma dans le format Template avec les règles d’échappement CSV. #35582 (Kruglov Pavel). - Ajout du parsing parallèle et de l’inférence de schéma pour le format
JSONAsObject. #35592 (Anton Popov). - Ajout de la prise en charge de l’inférence de schéma automatique pour la table function
s3Cluster. Synchronisation des signatures des3ets3Cluster. #35544 (Nikita Mikhaylov). - Ajout de la prise en charge de l’inférence de schéma pour
hdfsCluster. #35602 (Nikita Mikhaylov). - Ajout du nouveau paramètre
input_format_json_read_bools_as_numbers, qui permet d’inférer et de parser les Bools comme des nombres dans les JSON input formats. Il est activé par défaut. Suggéré par @alexey-milovidov. #35735 (Kruglov Pavel). - Amélioration de l’ordre des colonnes dans l’inférence de schéma pour les formats TSKV et JSONEachRow, corrige #35640. L’inférence de schéma ne s’arrête plus lors de la lecture d’une ligne vide dans les formats TSKV et JSONEachRow. #35724 (Kruglov Pavel).
- Ajout des paramètres
input_format_orc_case_insensitive_column_matching,input_format_arrow_case_insensitive_column_matchingetinput_format_parquet_case_insensitive_column_matching, qui permettent à ClickHouse d’utiliser une correspondance des colonnes insensible à la casse lors de la lecture de données à partir de fichiers ORC, Arrow ou Parquet. #35459 (Antonio Andelic). - Ajout de la colonne
is_secureàsystem.query_log, qui indique si le client utilise une connexion sécurisée via TCP ou HTTP. #35705 (Antonio Andelic). - Désormais,
kafka_num_consumerspeut être supérieur au nombre de cœurs physiques sur les machines disposant de peu de ressources (moins de 16 cœurs). #35926 (alesapin). - Ajout de quelques metrics de base pour surveiller les tables engine=Kafka. #35916 (filimonov).
- Désormais, il n’est plus permis d’exécuter
ALTER TABLE ... RESET SETTINGsur des paramètres inexistants pour la famille de moteurs MergeTree. Corrige #35816. #35884 (alesapin). - Désormais, certaines requêtes
ALTER MODIFY COLUMNsur les typesArraysetNullablepeuvent être effectuées au niveau des métadonnées, sans mutation. Par exemple, passer deArray(Enum8('Option1'=1))àArray(Enum8('Option1'=1, 'Option2'=2)). #35882 (alesapin). - Ajout d’une animation à l’icône de sablier pour indiquer à l’utilisateur qu’une requête est en cours d’exécution. #35860 (peledni).
- Prise en charge de
ALTER TABLE t DETACH PARTITION (ALL). #35794 (awakeljw). - Améliore l’analyse des projections afin d’optimiser les requêtes triviales comme
count(). #35788 (Amos Bird). - Prise en charge de l’inférence de schéma pour
insert selectlors de l’utilisation de la fonction de tableinput. Le schéma est récupéré depuis la table d’insertion au lieu d’être inféré à partir des données dans le cas d’uninsert selectdepuis des fonctions de table prenant en charge l’inférence de schéma. Clôture #35639. #35760 (Kruglov Pavel). - Respecte
remote_url_allow_hostspour les tables Hive. #35743 (李扬). - Implémente
send_logs_levelpour clickhouse-local. Clôture #35653. #35716 (Kseniia Sumarokova). - Clôture #35641. Autorise les colonnes
EPHEMERALsans expression par défaut explicite. #35706 (Yakov Olkhovskiy). - Ajoute le compteur d’événements de profil
AsyncInsertBytespour la taille des INSERT asynchrones. #35644 (Alexey Milovidov). - Améliore la description du pipeline pour JOIN. #35612 (何李夫).
- Déduit le chemin absolu de la config HDFS. #35572 (李扬).
- Améliore les performances du collage et la compatibilité de clickhouse-client. Cela aide à résoudre #35501. #35541 (Amos Bird).
- Il était possible de provoquer un dépassement de pile dans des requêtes distribuées si l’un des paramètres
async_socket_for_remoteouuse_hedged_requestsétait activé lors de l’analyse d’un type de données très profondément imbriqué (au moins dans une build de débogage). Clôture #35509. #35524 (Kruglov Pavel). - Ajoute la taille des sous-colonnes à la table
system.parts_columns. #35488 (Anton Popov). - Ajouter des informations explicites sur la table au nœud de scan du plan d’exécution de la requête et du pipeline. #35460 (何李夫).
- Permettre au serveur d’écouter sur des ports à numéro bas (par ex. 443). Le script d’installation de ClickHouse définira
cap_net_bind_servicesur le fichier binaire. #35451 (Alexey Milovidov). - Corriger
INSERT INTO table FROM INFILE: la barre de progression ne s’affichait pas. #35429 (xiedeyantu). - Ajouter les arguments
--user,--password,--host,--portpour l’outilclickhouse-diagnostics. #35422 (李扬). - Prendre en charge uuid pour les moteurs Postgres. Clôt #35384. #35403 (Kseniia Sumarokova).
- Pour la fonction de table
s3cluster,HDFSClusterouhive, il était impossible d’obtenir le bonAccessTypeviaStorageFactory::instance().getSourceAccessType(getStorageTypeName()). Cette PR corrige le problème. #35365 (李扬). - Supprimer l’option
--testmodede clickhouse-client et l’activer inconditionnellement. #35354 (Kseniia Sumarokova). - Ne pas autoriser l’opération
wchc(commande à quatre lettres) pour ClickHouse Keeper. #35320 (zhangyuli1). - Ajouter la fonction
getTypeSerializationStreams. Pour un type donné (détecté à partir de la colonne), elle renvoie un tableau contenant tous les chemins des sous-flux de sérialisation. Cette fonction est surtout utile aux développeurs. #35290 (李扬). - Si
portn’est pas spécifié dans la configuration du cluster, le port par défaut du serveur sera utilisé. Clôt #34769. #34772 (Alexey Milovidov). - Utiliser l’index
minmaxpour les fichiers ORC/Parquet dans Hive Engine. PR associée : https://github.com/ClickHouse/arrow/pull/10. #34631 (李扬). - Les tables de logs système permettent désormais de spécifier
COMMENTdans la déclarationENGINE. Clôt #33768. #34536 (Maksim Kita). - Prise en charge correcte du paramètre
max_rows_to_readlors d’une lecture dans l’ordre de la clé de tri avec une limite spécifiée. Auparavant, l’exceptionLimit for rows or bytes to read exceededpouvait être levée même si la requête nécessitait en réalité de lire moins de lignes. #33230 (Anton Popov). - Respecter uniquement le quota et la période des cgroups, et ignorer les shares (qui ne limitent pas réellement le nombre de cœurs pouvant être utilisés). #35815 (filimonov).
Améliorations de la compilation, des tests et du packaging
- Ajout d’une nouvelle série de paramètres de randomisation dans les tests fonctionnels. #35047 (Kruglov Pavel).
- Ajout d’une vérification de rétrocompatibilité dans le test de stress. Clôt #25088. #27928 (Kruglov Pavel).
- Migration de la construction des paquets vers
nfpm- dépréciation du scriptreleaseau profit depackages/build- compilation de l’ensemble dans l’image clickhouse/binary-builder (nettoyage : clickhouse/deb-builder) - ajout de la suppression des symboles dans cmake (todo : use bin_dir/clickhouse/$binary.debug) - correction d’un problème avec les symboles DWARF - ajout des paquets Alpine APK - renommage dealienenadditional_pkgs. #33664 (Mikhail f. Shiryaev). - Ajout d’une analyse nocturne et du téléversement vers Coverity. #34895 (Boris Kuschel).
- Ajout d’un petit paquet dédié pour
clickhouse-keeper. #35308 (Mikhail f. Shiryaev). - L’exécution avec podman échouait : il signalait que le même volume était spécifié deux fois. #35978 (Roman Nikonov).
- Amélioration mineure de la configuration de compilation de contrib/krb5. #35832 (Anton Kozlov).
- Ajout d’un label pour identifier une tâche de build pour chaque image. #35583 (Mikhail f. Shiryaev).
- Application du formateur
blackau code Python et ajout d’une vérification à chaque commit. #35466 (Mikhail f. Shiryaev). - Refonte de l’image alpine pour utiliser un Dockerfile propre. Création d’un script dans tests/ci pour construire à la fois les images ubuntu et alpine. Ajout de l’image clickhouse-keeper (cc @nikitamikhaylov). Ajout d’une vérification de build à PullRequestCI. Ajout d’un job à ReleaseCI. Ajout d’un job à MasterCI pour construire et publier les images
clickhouse/clickhouse-server:headetclickhouse/clickhouse-keeper:headpour chaque PR fusionnée. #35211 (Mikhail f. Shiryaev). - Correction du rapport de test de stress dans la CI : nous ne téléversons désormais plus qu’une seule fois le runlog contenant les informations sur les tests de stress démarrés. #35093 (Mikhail f. Shiryaev).
- Passage à libcxx / libcxxabi depuis LLVM 14. #34906 (Raúl Marín).
- Mise à jour d’unixodbc pour atténuer CVE-2018-7485. Note : cette CVE n’est pas pertinente pour ClickHouse, car celui-ci implémente sa propre couche d’isolation pour ODBC. #35943 (Mikhail f. Shiryaev).
Correction de bugs
- Ajout des paramètres
input_format_ipv4_default_on_conversion_error,input_format_ipv6_default_on_conversion_errorpour permettre l’insertion de valeurs d’adresse IP invalides avec la valeur par défaut dans les tables. Ferme #35726. #35733 (Maksim Kita). - Évite d’effacer des colonnes d’un bloc si elles n’existent pas lors de la lecture des données depuis Hive. #35393 (lgbo).
- Ajout d’une vérification des types lors de la création d’une vue matérialisée. Ferme #23684. #24896 (hexiaoting).
- Correction de la mise en forme des requêtes INSERT INFILE (guillemets manquants). #35886 (Azat Khuzhin).
- Désactivation de
session_logcar un problème de sûreté mémoire a été détecté par fuzzing. Voir #35714. #35873 (Alexey Milovidov). - Évite de traiter plusieurs fois le TTL par colonne. #35820 (Azat Khuzhin).
- Correction des insertions dans des colonnes de type
Objectlorsqu’une requête d’insertion contient des données liées à plusieurs partitions. #35806 (Anton Popov). - Correction d’un bug dans les index de colonnes absentes des formats -WithNames, qui entraînait l’erreur
INCORRECT_NUMBER_OF_COLUMNSlorsque le nombre de colonnes dépassait 256. Ferme #35793. #35803 (Kruglov Pavel). - Correction de #35751. #35799 (Nikolay Degterinsky).
- Correction de la lecture depuis HDFS au format Snappy. #35771 (shuchaome).
- Correction d’un bug dans la conversion de types personnalisés en chaîne de caractères, qui pouvait entraîner un segfault ou des messages d’erreur inattendus. Ferme #35752. #35755 (Kruglov Pavel).
- Correction de l’implémentation de any/all (sous-requête). Ferme #35489. #35727 (Kseniia Sumarokova).
- Correction de la suppression d’une base de données non vide dans clickhouse-local. Ferme #35692. #35711 (Kseniia Sumarokova).
- Correction d’un bug lors de la création d’une vue matérialisée avec sous-requête après le redémarrage du serveur. La vue matérialisée n’était plus mise à jour après des insertions dans la table sous-jacente à la suite du redémarrage du serveur. Ferme #35511. #35691 (Kruglov Pavel).
- Correction d’une possible exception
Can't adjust last granulelors de la lecture des sous-colonnes du type expérimentalObject. #35687 (Anton Popov). - Activer la compilation JIT par défaut lors du build. #35683 (Maksim Kita).
- Corriger une possible perte de sous-colonnes dans le type expérimental
Object. #35682 (Anton Popov). - Corriger la vérification de la nullabilité de la clé de jointure ASOF JOIN, ferme #35565. #35674 (Vladimir C).
- Corriger la logique de vérification des parts pour les parts avec projections. L’erreur se produisait lorsque la projection et la part principale avaient des types différents. Cela est similaire à https://github.com/ClickHouse/ClickHouse/pull/33774 . Le bug a été corrigé par @caoyang10. #35667 (Amos Bird).
- Corriger le crash du serveur lorsqu’un grand nombre d’arguments est passé à la fonction
format. Voir le fichier de test pour savoir comment reproduire le crash. #35651 (Amos Bird). - Corriger l’utilisation des quotas avec les insertions asynchrones. #35645 (Anton Popov).
- Corriger les arguments positionnels avec des alias. Ferme #35600. #35620 (Kseniia Sumarokova).
- Vérifier
remote_url_allow_hostsavant l’inférence de schéma dans le moteur URL. Ferme #35064. #35619 (Kruglov Pavel). - Corriger
HashJoinlorsque des colonnes de typeLowCardinalitysont utilisées. Cela ferme #35548. #35616 (Antonio Andelic). - Corriger un possible segfault dans MaterializedPostgreSQL, qui se produisait si une exception survenait lorsque les données collectées en mémoire étaient synchronisées dans les tables sous-jacentes. Ferme #35611. #35614 (Kseniia Sumarokova).
- Le paramètre
database_atomic_wait_for_drop_and_detach_synchronouslyfonctionnait incorrectement pour la requêteATTACH TABLElorsqu’une table précédemment détachée était encore utilisée. C’est corrigé. #35594 (tavplubix). - Corriger les en-têtes HTTP avec les collections nommées et ajouter compression_method. Ferme #35273. Ferme #35269. #35593 (Kseniia Sumarokova).
- Corriger la récupération des colonnes virtuelles par le moteur S3. Ferme #35411. #35586 (Kseniia Sumarokova).
- Corriger la déduction du type de retour pour
caseWithExpression. Le type de la branche ELSE est désormais correctement pris en compte. #35576 (Antonio Andelic). - Correction de l’analyse des adresses IPv6 de plus de 39 caractères. Clôt #34022. #35539 (Maksim Kita).
- Correction de la conversion en adresses IPv4/IPv6 dans la section IN. Corrige #35528. #35534 (Maksim Kita).
- Correction d’un crash lors de l’évaluation court-circuitée des fonctions lorsqu’un des arguments est une constante Nullable. Clôt #35497. Clôt #35496. #35502 (Maksim Kita).
- Correction d’un crash dans la fonction
throwIfavec des arguments constants. #35500 (Maksim Kita). - Correction d’un bug dans Keeper pouvant entraîner des connexions client instables. Introduit dans #35031. #35498 (alesapin).
- Correction d’un bug dans la fonction
iflorsque le type de colonne résultant diffère du type de données résultant, ce qui entraînait des erreurs logiques commeLogical error: 'Bad cast from type DB::ColumnVector<int> to DB::ColumnVector<long>'.. Clôt #35367. #35476 (Kruglov Pavel). - Correction d’une journalisation excessive lors de l’utilisation de S3 comme backend pour MergeTree ou comme moteur de table/fonction distinct(e). Corrige #30559. #35434 (alesapin).
- Désormais, les merges exécutés avec la zero copy replication (experimental) ne satureront plus les logs avec le message
Found parts with the same min block and with the same max block as the missing part _ on replica _. Hoping that it will eventually appear as a result of a merge.. #35430 (alesapin). - Évite une exception possible si des chunks vides apparaissent dans GroupingAggregatedTransform. #35417 (Nikita Taranov).
- Correction de la gestion des colonnes non nécessaires à la requête dans les formats Arrow/Parquet/ORC, ce qui évite des erreurs possibles comme
Unsupported <format> type <type> of an input column <column_name>lorsque le fichier contient une colonne d’un type non pris en charge et qu’elle n’est pas utilisée dans la requête. #35406 (Kruglov Pavel). - Correction du cache local pour le remote filesystem (experimental feature) en cas de forte concurrence dans certains cas limites. #35381 (Kseniia Sumarokova). Correction d’un interblocage possible dans le cache. #35378 (Kseniia Sumarokova).
- Correction du partition pruning en cas de comparaison avec une constante dans
WHERE. Si la colonne et la constante avaient des types différents, un overflow était possible. La requête pouvait renvoyer à tort un résultat vide. Ceci corrige #35304. #35334 (Amos Bird). - Correction de l’inférence de schéma pour le format TSKV lors de l’utilisation d’une petite valeur de max_read_buffer_size. #35332 (Kruglov Pavel).
- Corrige les mutations sur les tables avec des colonnes sparse activées. #35284 (Anton Popov).
- Ne retarde plus l’écriture finale des parts par défaut (corrige les éventuels
Memory limit exceededpendantINSERTen ajoutantmax_insert_delayed_streams_for_parallel_write, avec une valeur par défaut de 1000 pour les écritures vers S3, et reste désactivé comme auparavant dans les autres cas). #34780 (Azat Khuzhin).
Release ClickHouse v22.3-lts, 2022-03-17. Présentation, Vidéo
Changement non rétrocompatible
- Faire en sorte que la fonction
arrayCompactse comporte comme les autres fonctions d’ordre supérieur : effectuer le compactage non pas sur les résultats de la fonction lambda, mais sur le tableau d’origine. Si vous utilisez des fonctions lambda non triviales dansarrayCompact, vous pouvez rétablir l’ancien comportement en enveloppant les arguments dearrayCompactdansarrayMap. Clôt #34010 #18535 #14778. #34795 (Alexandre Snarskii). - Modifier le comportement spécifique à l’implémentation en cas d’overflow de la fonction
toDatetime. La valeur sera désormais bornée à l’instant minimal ou maximal pris en charge le plus proche, au lieu d’effectuer un bouclage. Ce changement est indiqué comme « non rétrocompatible », car il est possible que certains s’appuient involontairement sur l’ancien comportement. #32898 (HaiBo Li). - Faire en sorte que les fonctions
cast(value, 'IPv4')etcast(value, 'IPv6')se comportent de la même manière quetoIPv4ettoIPv6. Le comportement en cas d’adresse IP incorrecte passée aux fonctionstoIPv4ettoIPv6a été modifié : désormais, si une adresse IP invalide est transmise à ces fonctions, une exception sera levée, alors qu’auparavant elles renvoyaient la valeur par défaut. Fonctions ajoutées :IPv4StringToNumOrDefault,IPv4StringToNumOrNull,IPv6StringToNumOrDefault,IPv6StringOrNull,toIPv4OrDefault,toIPv4OrNull,toIPv6OrDefault,toIPv6OrNull. Les fonctionsIPv4StringToNumOrDefault,toIPv4OrDefault,toIPv6OrDefaultdoivent être utilisées si la logique précédente reposait sur le fait queIPv4StringToNum,toIPv4,toIPv6renvoyaient la valeur par défaut pour une adresse invalide. Paramètre ajouté :cast_ipv4_ipv6_default_on_conversion_error; si ce paramètre est activé, les fonctions de conversion d’adresses IP se comporteront comme auparavant. Clôt #22825. Clôt #5799. Clôt #35156. #35240 (Maksim Kita).
Nouvelle fonctionnalité
- Prise en charge de la mise en cache locale des données pour les systèmes de fichiers distants. Elle peut être activée pour les disques
s3. Clôt #28961. #33717 (Kseniia Sumarokova). Entre-temps, nous avons activé la suite de tests sur le système de fichierss3et, comme il n’existe plus de problèmes connus, cette fonctionnalité est désormais en passe d’être prête pour la production. - Ajout d’une nouvelle fonction de table
hive. Elle peut être utilisée comme suit :hive('<hive metastore url>', '<hive database>', '<hive table name>', '<columns definition>', '<partition columns>'), par exempleSELECT * FROM hive('thrift://hivetest:9083', 'test', 'demo', 'id Nullable(String), score Nullable(Int32), day Nullable(String)', 'day'). #34946 (lgbo). - Prise en charge de l’authentification des utilisateurs connectés via SSL à l’aide de leur certificat X.509. #31484 (eungenue).
- Prise en charge de l’inférence de schéma pour les insertions dans les fonctions de table
file/hdfs/s3/url. #34732 (Kruglov Pavel). - Vous pouvez désormais lire la table
system.zookeepersans restriction sur le chemin ni via une expressionlike. Ces lectures peuvent générer une charge assez importante pour ZooKeeper ; pour activer cette possibilité, vous devez activer le paramètreallow_unrestricted_reads_from_keeper. #34609 (Sergei Trifonov). - Affiche les métriques CPU et mémoire dans clickhouse-local. Clôt #34545. #34605 (李扬).
- Implémente les fonctions
startsWithetendsWithpour les tableaux, clôt #33982. #34368 (usurai). - Ajout de trois fonctions pour le type de données Map : 1.
mapReplace(map1, map2)- remplace les valeurs des clés de map1 par les valeurs des clés correspondantes dans map2 ; ajoute les clés de map2 qui n’existent pas dans map1. 2.mapFilter3.mapMap. mapFilter et mapMap sont des fonctions d’ordre supérieur qui acceptent deux arguments : le premier argument est une fonction lambda prenant la paire k, v comme arguments, le second est une colonne de type Map. #33698 (hexiaoting). - Autorise la récupération de l’utilisateur par défaut et du mot de passe pour clickhouse-client à partir des variables d’environnement
CLICKHOUSE_USERetCLICKHOUSE_PASSWORD. Clôt #34538. #34947 (DR).
Fonctionnalité expérimentale
- Nouveau type de données
Object(<schema_format>), qui prend en charge le stockage de données semi-structurées (pour l’instant, JSON uniquement). Les données sont écrites dans ce type sous forme de chaîne. Ensuite, tous les chemins sont extraits selon le format des données semi-structurées et écrits dans des colonnes distinctes en utilisant les types les plus adaptés, capables de stocker toutes leurs valeurs. Ces colonnes peuvent être interrogées à l’aide de noms correspondant aux chemins dans les données source. Par ex.data.key1.key2ou avec l’opérateur de transtypagedata.key1.key2::Int64. - Ajout du paramètre
database_replicated_allow_only_replicated_engine. Lorsqu’il est activé, seules les tablesReplicatedou les tables avec des engines sans état peuvent être créées dans des bases de donnéesReplicated. #35214 (Nikolai Kochetov). Notez que la base de donnéesReplicatedreste une fonctionnalité expérimentale.
Amélioration des performances
- Amélioration des performances de l’insertion dans les tables
MergeTreegrâce à une optimisation du tri. Jusqu’à 2x d’amélioration observée sur des benchmarks réalistes. #34750 (Maksim Kita). - Élagage des colonnes lors de la lecture de fichiers Parquet, ORC et Arrow depuis une URL et S3. Résout #34163. #34849 (Kseniia Sumarokova).
- Élagage des colonnes lors de la lecture de fichiers Parquet, ORC et Arrow depuis Hive. #34954 (lgbo).
- Une série d’optimisations des performances par un super-héros du domaine. Amélioration des performances du traitement des requêtes avec de grandes clauses
IN. Amélioration des performances du dictionnairedirectsi sa source estClickHouse. Amélioration des performances des fonctionsdetectCharset,detectLanguageUnknown. #34888 (Maksim Kita). - Amélioration des performances de la fonction d’agrégation
anygrâce à un batching plus important. #34760 (Raúl Marín). - Plusieurs améliorations des performances pour
ClickHouse Keeper: moins de verrouillage #35010 (zhanglistar), réduction de l’utilisation mémoire grâce à la lecture et à l’écriture du snapshot en streaming au lieu d’une copie complète. #34584 (zhanglistar), optimisation de la compaction du stockage des logs dans l’implémentation RAFT. #34534 (zhanglistar), gestion des versions de la structure de données interne #34486 (zhanglistar).
Amélioration
- Autorise les insertions asynchrones dans les table functions. Corrige #34864. #34866 (Anton Popov).
- Conversion implicite du type de l’argument key pour les fonctions
dictGetHierarchy,dictIsIn,dictGetChildren,dictGetDescendants. Ferme #34970. #35027 (Maksim Kita). - La requête
EXPLAIN ASTpeut produire l’AST sous forme de graphe au format Graphviz :EXPLAIN AST graph = 1 SELECT * FROM system.parts. #35173 (李扬). - Lors de l’écriture de fichiers volumineux avec la table function ou le table engine
s3, le type de contenu des fichiers était, par erreur, défini surapplication/xmlen raison d’un bug dans le SDK AWS. Cela ferme #33964. #34433 (Alexey Milovidov). - Modifie légèrement les row policies restrictives pour en faire une alternative plus simple aux politiques permissives dans les cas simples. Si, pour une table donnée, seules des politiques restrictives existent (sans politiques permissives), les utilisateurs pourront voir certaines lignes. De plus,
SHOW CREATE ROW POLICYaffichera toujoursAS permissiveouAS restrictivedans la définition de la row policy. #34596 (Vitaly Baranov). - Améliore l’inférence de schéma avec les globs dans les moteurs File/S3/HDFS/URL. Essaie d’utiliser le chemin suivant pour l’inférence de schéma en cas d’erreur. #34465 (Kruglov Pavel).
- L’UI Play détecte désormais correctement le thème clair/sombre préféré du système d’exploitation. #35068 (peledni).
- Ajout de
date_time_input_format = 'best_effort_us'. Ferme #34799. #34982 (WenYao). - De nouveaux paramètres,
allow_plaintext_passwordetallow_no_password, ont été ajoutés à la server configuration et activent/désactivent des types d’authentication potentiellement peu sûrs dans certains environnements. Ils sont autorisés par défaut. #34738 (Heena Bansal). - Prise en charge du Data type
DateTime64dans le formatArrow, ferme #8280 et ferme #28574. #34561 (李扬). - Recharge
remote_url_allow_hosts(filtrage des connexions sortantes) lors d’une mise à jour de la config. #35294 (Nikolai Kochetov). - Prise en charge du paramètre
--testmodepourclickhouse-local. Ce paramètre active l’interprétation des indications de test utilisées dans les tests fonctionnels. #35264 (Kseniia Sumarokova). - Ajoute
distributed_depthau query log. Il s’agit d’une variante plus détaillée deis_initial_query. #35207 (李扬). - Respect de
remote_url_allow_hostspour les fonctions de tableMySQLetPostgreSQL. #35191 (Heena Bansal). - Ajout du champ
disk_nameàsystem.part_log. #35178 (Artyom Yurkov). - Ne pas réessayer les erreurs non récupérables lors des requêtes sur des URL distantes. Clôt #35161. #35172 (Kseniia Sumarokova).
- Prise en charge des requêtes distribuées INSERT SELECT (paramètre
parallel_distributed_insert_select) pour la fonction de tableview(). #35132 (Azat Khuzhin). - Suivi mémoire plus précis lors des
INSERTdansBufferavecAggregateFunction. #35072 (Azat Khuzhin). - Éviter les divisions par zéro dans Query Profiler si le noyau Linux comporte un bug. Clôt #34787. #35032 (Alexey Milovidov).
- Ajout de vérifications de cohérence supplémentaires pour la configuration de Keeper : il n’est désormais plus autorisé de mélanger localhost et des serveurs non locaux ; des vérifications ont également été ajoutées pour s’assurer que le port Raft interne et le port client de Keeper n’ont pas la même valeur. #35004 (alesapin).
- Actuellement, si l’utilisateur modifie les paramètres des tables système, cela génère énormément de logs et ClickHouse renomme les tables chaque minute. Cela corrige #34929. #34949 (Nikita Mikhaylov).
- Utilisation d’un pool de connexions pour le client Hive metastore. #34940 (lgbo).
- Ignorer le
TTLpar colonne dansCREATE TABLE ASsi le nouveau moteur de table ne le prend pas en charge (c.-à-d. si le moteur n’appartient pas à la familleMergeTree). #34938 (Azat Khuzhin). - Autoriser les chaînes
LowCardinalitypour les indexngrambf_v1/tokenbf_v1. Clôt #21865. #34911 (Lars Hiller Eidnes). - Autoriser l’ouverture d’une DB sqlite vide si le fichier n’existe pas. Clôt #33367. #34907 (Kseniia Sumarokova).
- Implémentation des statistiques mémoire pour FreeBSD — cela est nécessaire pour que
max_server_memory_usagefonctionne correctement. #34902 (Alexandre Snarskii). - Dans les versions précédentes, la barre de progression dans clickhouse-client pouvait avancer brusquement jusqu’à près de 50 % sans raison. Cela clôt #34324. #34801 (Alexey Milovidov).
- Les requêtes
ALTER TABLE DROP COLUMN columnXpour les moteurs de tableMergeTreefonctionneront désormais instantanément lorsquecolumnXest une colonneALIAS. Corrige #34660. #34786 (alesapin). - Affiche des suggestions lorsque l’utilisateur a mal saisi le nom d’un index de saut de données. Clôt #29698. #34764 (flynn).
- Prise en charge des fonctions de table
remote()/cluster()pourparallel_distributed_insert_select. #34728 (Azat Khuzhin). - Ne réinitialise pas la journalisation configurée via les options de ligne de commande
--log-file/--errorlog-fileen cas de configuration vide dans le fichier de configuration. #34718 (Amos Bird). - Extrait le schéma une seule fois lors de la création de la table et évite de lire les fichiers locaux/sources externes pour extraire le schéma à chaque démarrage du serveur. #34684 (Kruglov Pavel).
- Permet de spécifier des noms d’arguments pour les UDFs exécutables. Cela est nécessaire pour les formats où le nom de l’argument fait partie de la sérialisation, comme
Native,JSONEachRow. Clôt #34604. #34653 (Maksim Kita). MaterializedMySQL(fonctionnalité expérimentale) prend désormais en chargematerialized_mysql_tables_list(une liste de tables d’une base de données MySQL séparées par des virgules, qui seront répliquées par le moteur de base de données MaterializedMySQL. Valeur par défaut : liste vide — cela signifie que toutes les tables seront répliquées), mentionné dans #32977. #34487 (zzsmdfj).- Améliore les logs de spans OpenTelemetry pour l’opération INSERT sur une table distribuée. #34480 (Frank Chen).
- Rend les
ctimeetmtimedu znode cohérents entre les serveurs dans ClickHouse Keeper. #33441 (小路).
Amélioration de la compilation, des tests et du packaging
- Migration du dépôt de paquets vers JFrog Artifactory (Mikhail f. Shiryaev).
- Randomisation de certains paramètres dans les tests fonctionnels, afin de tester davantage de combinaisons possibles. Il s’agit d’une méthode de fuzzing supplémentaire pour améliorer la couverture des tests. Cela clôt #32268. #34092 (Kruglov Pavel).
- Suppression de PVS-Studio de notre CI. #34680 (Mikhail f. Shiryaev).
- Ajout de la possibilité de compiler des binaires sans symboles avec CMake. Dans les versions précédentes, cela était géré par dh-tools. #35196 (alesapin).
- Build plus léger, « fat-free », de
ClickHouse Keeper. #35031 (alesapin). - Utilisation de @robot-clickhouse comme auteur et committer pour les PR telles que https://github.com/ClickHouse/ClickHouse/pull/34685. #34793 (Mikhail f. Shiryaev).
- Limitation de la version DWARF des informations de débogage à 4 au maximum, car notre symboliseur de pile interne ne peut pas analyser DWARF version 5. Cela est pertinent si vous compilez ClickHouse avec clang-15. #34777 (Alexey Milovidov).
- Suppression du paquet Debian
clickhouse-test, source de complexité inutile. La CI utilise les tests du repository et les tests autonomes via le paquet deb ne sont plus pris en charge. #34606 (Ilya Yatsishin).
Correction de bug (dysfonctionnement visible pour l’utilisateur dans une version stable ou préstable officielle)
- Correctif pour l’intégration HDFS : lorsque la taille du tampon interne est trop faible, NEED_MORE_INPUT dans
HadoopSnappyDecoders’exécute plusieurs fois (>=3) pour un même bloc compressé. Les données d’entrée sont alors copiées au mauvais emplacement dansHadoopSnappyDecoder::buffer. #35116 (lgbo). - Ignorer les grants obsolètes dans les instructions ATTACH GRANT. Cette PR corrige #34815. #34855 (Vitaly Baranov).
- Correction d’un segfault dans la base de données Postgres lors de la récupération de la requête CREATE TABLE si la base de données a été créée à l’aide de named collections. Clôt #35312. #35313 (Kseniia Sumarokova).
- Correction d’un bug de rows dupliquées dans partial merge join, clôt #31009. #35311 (Vladimir C).
- Correction d’un possible
Assertion 'position() != working_buffer.end()' failedlors de l’utilisation de la compression bzip2 avec une faible valeur du paramètremax_read_buffer_size. Le bug a été détecté dans https://github.com/ClickHouse/ClickHouse/pull/35047. #35300 (Kruglov Pavel). Lors de l’utilisation de la compression lz4 avec une faible valeur du paramètre max_read_buffer_size. #35296 (Kruglov Pavel). Lors de l’utilisation de la compression lzma avec une faible valeur du paramètremax_read_buffer_size. #35295 (Kruglov Pavel). Lors de l’utilisation de la compressionbrotliavec une faible valeur du paramètremax_read_buffer_size. Le bug a été détecté dans https://github.com/ClickHouse/ClickHouse/pull/35047. #35281 (Kruglov Pavel). - Correction d’un possible segfault dans l’inférence de schéma de
JSONEachRow. #35291 (Kruglov Pavel). - Correction de la query
CHECK TABLElorsque les colonnes clairsemées sont activées dans la table. #35274 (Anton Popov). - Éviter std::terminate en cas d’exception lors de la lecture depuis le VFS distant. #35257 (Azat Khuzhin).
- Correction de la lecture du port depuis la config, clôt #34776. #35193 (Vladimir C).
- Correction d’une erreur dans une query avec
WITH TOTALSlorsqueHAVINGrenvoie un résultat vide. Cela corrige #33711. #35186 (Amos Bird). - Correction d’un cas limite de
replaceRegexpAll, clôt #35117. #35182 (Vladimir C). - L’inférence de schéma ne fonctionnait pas correctement dans le cas de
INSERT INTO FUNCTION s3(...) FROM ...: elle essayait de lire le schéma à partir du fichier s3 au lieu de la requête SELECT. #35176 (Kruglov Pavel). - Correction des
table overridesde MaterializedPostgreSQL (fonctionnalité expérimentale) pour partition by, etc. Corrige #35048. #35162 (Kseniia Sumarokova). - Correction de MaterializedPostgreSQL (fonctionnalité expérimentale) lors de l’ajout d’une nouvelle table à la réplication (ATTACH TABLE) après une suppression manuelle (DETACH TABLE). Corrige #33800. Corrige #34922. Corrige #34315. #35158 (Kseniia Sumarokova).
- Correction d’une erreur d’élagage des partitions lorsqu’une fonction non monotone est utilisée avec l’opérateur IN. Cela corrige #35136. #35146 (Amos Bird).
- Correction d’une conversion légèrement incorrecte des configurations YAML en XML. #35135 (Miel Donkers).
- Correction de
optimize_skip_unused_shards_rewrite_inpour les colonnes signées et les valeurs négatives. #35134 (Azat Khuzhin). - L’option de configuration
update_lagdu dictionnaire externe était inutilisable et affichait le message d’erreurUnexpected key `update_lag` in dictionary source configuration. #35089 (Jason Chu). - Évite un interblocage possible lors de l’arrêt du serveur. #35081 (Azat Khuzhin).
- Correction d’un alias manquant après l’optimisation d’une fonction en sous-colonne lorsque le paramètre
optimize_functions_to_subcolumnsest activé. Corrige #33798. #35079 (qieqieplus). - Correction de la lecture depuis la table
system.asynchronous_insertss’il existe un insert asynchrone dans une fonction de table. #35050 (Anton Popov). - Correction d’une exception possible
Reading for MergeTree family tables must be done with last position boundary(liée à une opération sur un VFS distant). Corrige #34979. #35001 (Kseniia Sumarokova). - Correction d’un résultat inattendu lors de l’utilisation d’une fonction d’agrégation de type -State dans une fenêtre. #34999 (metahys).
- Correction d’un segfault possible dans FileLog (fonctionnalité expérimentale). Corrige #30749. #34996 (Kseniia Sumarokova).
- Correction d’une possible erreur rare
Cannot push block to port which already has data. #34993 (Nikolai Kochetov). - Corrige une inférence de schéma erronée pour les dates non entre guillemets dans les fichiers CSV. Clôt #34768. #34961 (Kruglov Pavel).
- Intégration avec Hive : corrige un résultat inattendu lors de l’utilisation de
indanswheredans une requête Hive. #34945 (lgbo). - Évite un polling excessif dans ClickHouse Keeper lors de la recherche des fichiers de changelog à supprimer. #34931 (Azat Khuzhin).
- Corrige la conversion de DateTime64 depuis PostgreSQL. Clôt #33364. #34910 (Kseniia Sumarokova).
- Corrige l’erreur possible “Part directory doesn’t exist” lors d’un
INSERTdans une table MergeTree s’appuyant sur un VFS sur S3. #34876 (Azat Khuzhin). - Prend en charge l’exécution de DDLs comme CREATE USER sur un cluster répliqué de manière croisée. #34860 (Jianmei Zhang).
- Corrige des bogues liés au group by sur plusieurs colonnes dans
WindowView(fonctionnalité expérimentale). #34859 (vxider). - Corrige d’éventuelles défaillances dans les fonctions S2 lorsque les requêtes contiennent des colonnes constantes. #34745 (Bharat Nallan).
- Corrige un bogue dans les fonctions H3 contenant des colonnes constantes, qui provoquait l’échec des requêtes. #34743 (Bharat Nallan).
- Corrige l’erreur
No such file or directoryavecfsync_part_directoryactivé et la fusion verticale. #34739 (Azat Khuzhin). - Corrige la sérialisation/l’affichage des requêtes système
RELOAD MODEL,RELOAD FUNCTION,RESTART DISKlorsqu’elles sont utilisées avecON CLUSTER. Clôt #34514. #34696 (Maksim Kita). - Corrige
allow_experimental_projection_optimizationavecenable_global_with_statement(auparavant, cela pouvait entraîner l’erreurStack size too largeen cas d’expressions multiples dans la clauseWITH, et réexécutait sans cesse les sous-requêtes scalaires ; ce sera désormais plus optimal). #34650 (Azat Khuzhin). - Arrête de sélectionner une part à muter lorsqu’une autre réplique a déjà mis à jour le journal des transactions pour le moteur
ReplatedMergeTree. #34633 (Jianmei Zhang). - Corrige le résultat incorrect d’une requête
counttriviale lorsque la fonctionnalité de déplacement de parts est utilisée #34089. #34385 (nvartolomei). - Corrige l’incohérence de la limite
max_query_sizedans les sous-requêtes distribuées. #34078 (Chao Ma).
Version de ClickHouse v22.2, 2022-02-17. Présentation, Vidéo
Notes de mise à niveau
- L’utilisation d’index de saut de données pour les requêtes avec FINAL peut produire des résultats incorrects. Dans cette version, nous avons désactivé par défaut les index de saut de données pour les requêtes avec FINAL (un nouveau paramètre
use_skip_indexes_if_finala été introduit et est désactivé par défaut). #34243 (Azat Khuzhin).
Nouvelle fonctionnalité
- Les projections sont prêtes pour la production.
allow_experimental_projection_optimizationest désormais activé par défaut, et ce paramètre est déprécié. #34456 (Nikolai Kochetov). - Une option permet de créer de nouveaux fichiers à l’insert pour les moteurs
File/S3/HDFS. L’écrasement d’un fichier est autorisé dansHDFS. Une exception est levée par défaut en cas de tentative d’écrasement d’un fichier dansS3. Une exception est également levée en cas de tentative d’ajout de données à un fichier dans les formats qui ont un suffixe (et ne prennent donc pas en charge l’ajout, commeParquet,ORC). Clôt #31640 Clôt #31622 Clôt #23862 Clôt #15022 Clôt #16674. #33302 (Kruglov Pavel). - Ajouter un paramètre permettant à l’utilisateur de définir sa propre sémantique de déduplication dans
MergeTree/ReplicatedMergeTree. S’il est fourni, il est utilisé à la place de l’empreinte des données pour générer l’ID de bloc. Ainsi, par exemple, en fournissant une valeur unique pour ce paramètre dans chaque instruction INSERT, l’utilisateur peut empêcher la déduplication des mêmes données insérées. Cela clôt : #7461. #32304 (Igor Nikonov). - Ajouter la prise en charge du mot-clé
DEFAULTpour les instructions INSERT. Clôt #6331. #33141 (Andrii Buriachevskyi). - Le spécificateur de colonne
EPHEMERALest ajouté à la requêteCREATE TABLE. Clôt #9436. #34424 (yakov-olkhovskiy). - Prise en charge de la clause
IF EXISTSpour la fonctionnalitéTTL expr TO [DISK|VOLUME] [IF EXISTS] 'xxx'. Les parts ne seront déplacées vers le disk ou le volume que s’il existe sur la réplique ; ainsi, les règlesMOVE TTLpourront se comporter différemment selon les répliques en fonction des politiques de stockage existantes. Résout #34455. #34504 (Anton Popov). - Autoriser la définition du moteur de table par défaut et la création de tables sans spécifier ENGINE. #34187 (Ilya Yatsishin).
- Ajouter la fonction de table
format(format_name, data). #34125 (Kruglov Pavel). - Détecter le format dans
clickhouse-localà partir du nom du fichier, même lorsqu’il est passé via stdin. #33829 (Kruglov Pavel). - Ajouter l’inférence de schéma pour la fonction de table
values. Clôt #33811. #34017 (Kruglov Pavel). - Rechargement dynamique des certificats TLS du server lors du rechargement de la config. Résout #15764. #15765 (johnskopis). #31257 (Filatenkov Artur).
- ReplicatedMergeTree peut désormais récupérer les données lorsque certains de ses disks sont défectueux. #13544 (Amos Bird).
- Connexions tolérantes aux pannes dans clickhouse-client :
clickhouse-client ... --host host1 --host host2 --port port2 --host host3 --port port --host host4. #34490 (Kruglov Pavel). #33824 (Filippov Denis). - Ajout des fonctions
DEGREESetRADIANSpour assurer la compatibilité avec MySQL. #33769 (Bharat Nallan). - Ajout de la fonction
h3ToCenterChild. #33313 (Bharat Nallan). Ajout de nouvelles fonctions h3 diverses :edgeLengthKm,exactEdgeLengthKm,exactEdgeLengthM,exactEdgeLengthRads,numHexagons. #33621 (Bharat Nallan). - Ajout de la fonction
bitSlicepour extraire des sous-séquences de bits depuis String/FixedString. #33360 (RogerYK). - Implémentation de la fonction d’agrégation
meanZTest. #33354 (achimbab). - Ajout d’intervalles de confiance aux fonctions d’agrégation de t-test. #33260 (achimbab).
- Ajout de la fonction
addressToLineWithInlines. Résout #26211. #33467 (SuperDJY). - Ajout de
#!et#comme débuts reconnus d’un commentaire single line. Résout #34138. #34230 (Aaron Katz).
Fonctionnalité expérimentale
- Fonctions de classification de texte : détection de la langue et du jeu de caractères. Voir #23271. #33314 (Nikolay Degterinsky).
- Ajout de l’overcommit mémoire à
MemoryTracker. Ajout de paramètresguaranteedpour les limites mémoire, qui représentent des limites mémoire souples. Lorsque la limite mémoire stricte est atteinte,MemoryTrackeressaie d’annuler la requête la plus en surallocation. Le nouveau paramètrememory_usage_overcommit_max_wait_microsecondsspécifie combien de temps les requêtes peuvent attendre qu’une autre requête s’arrête. Clôt #28375. #31182 (Dmitry Novik). - Activation des jointures entre flux et table dans WindowView. #33729 (vxider).
- Prise en charge des types de données
SET,YEAR,TIMEetGEOMETRYdansMaterializedMySQL(fonctionnalité expérimentale). Corrige #18091, #21536, #26361. #33429 (zzsmdfj). - Correction de divers problèmes lorsque les projections sont activées par défaut. Chaque problème est décrit dans un commit distinct. Cela concerne #33678. Cela corrige #34273. #34305 (Amos Bird).
Amélioration des performances
- Prise en charge de
optimize_read_in_ordersi le préfixe de la clé de tri est déjà trié. Par ex., si une table a pour clé de triORDER BY (a, b)et qu’une requête contient les clausesWHERE a = const ORDER BY b, la lecture se fera désormais dans l’ordre de la clé de tri au lieu d’effectuer un tri complet. #32748 (Anton Popov). - Amélioration des performances des insertions partitionnées dans les fonctions de table
URL,S3,File,HDFS. Corrige #34348. #34510 (Maksim Kita). - Plusieurs améliorations des performances de ClickHouse Keeper. #34484 #34587 (zhanglistar).
FlatDictionaryaméliore les performances du chargement des données du dictionnaire. #33871 (Maksim Kita).- Amélioration des performances de la fonction
mapPopulateSeries. Corrige #33944. #34318 (Maksim Kita). - Les colonnes virtuelles
_fileet_path(dans les moteurs de table de type fichier) passent enLowCardinality, ce qui accélère les requêtes sur plusieurs fichiers. Corrige #34300. #34317 (flynn). - Accélération du chargement des data parts. Ce processus n’était auparavant pas parallélisé : le paramètre
part_loading_threadsn’avait aucun effet. Voir #4699. #34310 (alexey-milovidov). - Amélioration des performances du format
LineAsString. Corrige #34303. #34306 (alexey-milovidov). - Optimisation de
quantilesExact{Low,High}pour utilisernth_elementau lieu desort. #34287 (Danila Kutenin). - Légère amélioration des performances du format
Regexp. #34202 (alexey-milovidov). - Amélioration mineure de l’analyse des sous-requêtes scalaires. #34128 (Federico Rodriguez).
- Rendre les tuples dans
ORDER BYpresque aussi rapides que les colonnes dansORDER BY. Il existe des optimisations spécifiques pourORDER BYsur plusieurs colonnes : https://github.com/ClickHouse/ClickHouse/pull/10831 . Il est également utile de les appliquer aux colonnes de type tuple. #34060 (Amos Bird). - Refonte et réintroduction du cache des sous-requêtes scalaires dans l’exécution des vues matérialisées. #33958 (Raúl Marín).
- Légère amélioration des performances de
ORDER BYgrâce à la prise en charge d’AVX-512 sur x86-64 pour les fonctionsmemcmpSmall, afin d’accélérer les comparaisons en mémoire. Cela fonctionne uniquement si vous compilez ClickHouse vous-même. #33706 (hanqf-git). - Amélioration des performances du dictionnaire
range_hashedlorsqu’une clé comporte un grand nombre d’intervalles. Corrige #23821. #33516 (Maksim Kita). - Pour les insertions et les fusions dans S3, écriture des fichiers en parallèle lorsque c’est possible (TODO : vérifier si c’est fusionné). #33291 (Nikolai Kochetov).
- Amélioration des performances de
ClickHouse Keeperet correction de plusieurs fuites de mémoire dans la bibliothèque NuRaft. #33329 (alesapin).
Amélioration
- Prise en charge des inserts asynchrones dans
clickhouse-clientpour les requêtes avec données intégrées. #34267 (Anton Popov). - Les fonctions
dictGetetdictHasconvertissent implicitement l’argument de clé vers la structure de clé du dictionnaire lorsqu’ils diffèrent. #33672 (Maksim Kita). - Améliorations des dictionnaires
range_hashed. Amélioration des performances de chargement en présence de plusieurs attributs. Possibilité de créer un dictionnaire sans attributs. Ajout d’une option permettant de spécifier la stratégie lorsque les intervallesstartetendsont de typeNullable;convert_null_range_bound_to_openvauttruepar défaut. Résout #29791. Il est désormais possible d’utiliserFloat,Decimal,DateTime64,Int128,Int256,UInt128,UInt256comme types de plage.RangeHashedDictionaryprend désormais en charge les valeurs de plage qui étendent le typeInt64. Résout #28322. Ajout de l’optionrange_lookup_strategypour spécifier le type de recherche de plage,minoumax, avecminpar défaut. Résout #21647. Correction du calcul des octets alloués. Correction du nom de type danssystem.dictionariesdans le cas deComplexKeyHashedDictionary. #33927 (Maksim Kita). - Les dictionnaires
flat,hashedethashed_arrayprennent désormais en charge la création avec des attributs vides, avec prise en charge de la lecture des clés et de l’utilisation dedictHas. Corrige #33820. #33918 (Maksim Kita). - Ajout de la prise en charge du type de données
DateTime64dans les dictionnaires. #33914 (Maksim Kita). - Possibilité d’écrire
s3(url, access_key_id, secret_access_key)(détection automatique du format de données et de la structure de table, mais avec des credentials explicites). #34503 (Kruglov Pavel). - Ajout de l’envoi du format de sortie au client, comme c’est déjà le cas avec le protocole HTTP, comme suggéré dans #34362. Résout #34362. #34499 (Vitaly Baranov).
- Envoi des statistiques ProfileEvents dans le cas d’une requête INSERT SELECT (pour afficher les métriques de requête dans
clickhouse-clientpour ce type de requêtes). #34498 (Dmitry Novik). - Prise en charge de l’extension
.jsonlpour le format JSONEachRow. #34496 (Kruglov Pavel). - Amélioration de l’inférence de schéma dans clickhouse-local. Il est désormais possible d’écrire simplement
clickhouse-local -q "select * from table" < data.format. #34495 (Kruglov Pavel). - Les privilèges CREATE/ALTER/DROP ROW POLICY peuvent désormais être accordés sur une table, sur
database.*ou globalement sur*.*. #34489 (Vitaly Baranov). - Permet d’exporter vers
s3des fichiers de taille arbitrairement grande. Ajout de deux nouveaux paramètres :s3_upload_part_size_multiply_factorets3_upload_part_size_multiply_parts_count_threshold. Désormais, chaque fois que le nombre de parts envoyées vers S3 par une seule query atteints3_upload_part_size_multiply_parts_count_threshold,s3_min_upload_part_sizeest multiplié pars3_upload_part_size_multiply_factor. Corrige #34244. #34422 (alesapin). - Permet d’ignorer les URL introuvables (404) dans les globs lors de l’utilisation du stockage URL / de la table function. Clôt également #34359. #34392 (Kseniia Sumarokova).
- Formats d’entrée et de sortie par défaut pour
clickhouse-local, qui peuvent être redéfinis avec —input-format et —output-format. Clôt #30631. #34352 (李扬). - Ajout d’options pour
clickhouse-format, ce qui clôt #30528 :max_query_size,max_parser_depth. #34349 (李扬). - Meilleure gestion des entrées préalables avant le démarrage du client. Cela concerne #34308. #34336 (Amos Bird).
- Alias de fonction
REGEXP_MATCHESetREGEXP_REPLACEpour la compatibilité avec PostgreSQL. Clôt #30885. #34334 (李扬). - Certains serveurs attendent un en-tête
User-Agentdans leurs HTTP request. Un en-têteUser-Agenta été ajouté aux HTTP request, sous la forme : User-Agent: ClickHouse/VERSION_STRING. #34330 (Saad Ur Rahman). - Annuler les merges avant d’acquérir le verrou de table pour la query
TRUNCATE, afin d’éviter l’erreurDEADLOCK_AVOIDEDdans certains cas. Corrige #34302. #34304 (tavplubix). - Changement du niveau de gravité du message “Cancelled merging parts” dans les logs, car il ne s’agit pas d’une erreur. Cela clôt #34148. #34232 (alexey-milovidov).
- Ajout de la possibilité de combiner l’opérateur de transtypage
::de style PostgreSQL avec des expressions utilisant les opérateurs[]et.(indexation de tableaux et de tuples). #34229 (Nikolay Degterinsky). - Prise en charge du format
YYYYMMDD-hhmmssdans la fonctionparseDateTimeBestEffort. Cela clôt #34206. #34208 (alexey-milovidov). - Autorise les retours chariot au milieu d’une ligne lors de l’analyse avec le format
Regexp. Cela clôt #34200. #34205 (alexey-milovidov). - Autorise l’analyse de la
PRIMARY KEYdu dictionnaire sous la formePRIMARY KEY (id, value); auparavant, seule la formePRIMARY KEY id, valueétait prise en charge. Clôt #34135. #34141 (Maksim Kita). - Ajoute un argument facultatif à
splitByCharpour limiter le nombre d’éléments résultants. Clôt #34081. #34140 (李扬). - Améliore l’expérience d’édition sur plusieurs lignes dans clickhouse-client. Il s’agit d’un suivi de #31123. #34114 (Amos Bird).
- Ajoute la prise en charge de
UUIDdans le format d’entrée/sortieMsgPack. #34065 (Kruglov Pavel). - Le contexte de tracing (pour OpenTelemetry) est désormais propagé depuis les métadonnées du client GRPC (ce changement concerne le protocole client-serveur GRPC). #34064 (andremarianiello).
- Prend en charge tous les types de requêtes
SYSTEMavec la clauseON CLUSTER. #34005 (小路). - Améliore le suivi de l’utilisation mémoire pour les requêtes qui utilisent moins de
max_untracker_memory. #34001 (Azat Khuzhin). - Corrige la recherche insensible à la casse dans les chaînes UTF-8 lorsque les caractères minuscules et majuscules sont représentés par un nombre d’octets différent. Exemple :
ẞetß. Cela clôt #7334. #33992 (Harry Lee). - Détecte le format et le schéma depuis stdin dans
clickhouse-local. #33960 (Kruglov Pavel). - Gère correctement le cas d’une mauvaise configuration lorsque plusieurs disks utilisent le même path sur le filesystem. #29072. #33905 (zhongyuankai).
- Essaie chaque adresse IP résolue lors de la récupération du proxy S3. Les proxies S3 sont rarement utilisés, principalement dans Yandex Cloud. #33862 (Nikolai Kochetov).
- Prend en charge la requête EXPLAIN AST CREATE FUNCTION :
EXPLAIN AST CREATE FUNCTION mycast AS (n) -> cast(n as String)renverraEXPLAIN AST CREATE FUNCTION mycast AS n -> CAST(n, 'String'). #33819 (李扬). - Ajoute la prise en charge du cast de
Map(Key, Value)versArray(Tuple(Key, Value)). #33794 (Maksim Kita). - Ajoute quelques améliorations et corrections pour le type de données
Bool. Corrige #33244. #33737 (Kruglov Pavel). - Analyse et stocke l’identifiant de trace OpenTelemetry dans l’ordre big-endian. #33723 (Frank Chen).
- Amélioration des fonctions de la famille
fromUnixTimestamp64.. Elles acceptent désormais toute valeur entière convertible enInt64. Cela clôt le ticket : #14648. #33505 (Andrey Zvonov). - Réimplémentation de
_shard_numà partir de constantes (voir #7624) avec la fonctionshardNum()(voir #27020), afin d’éviter d’éventuels problèmes (comme ceux relevés dans #16947). #33392 (Azat Khuzhin). - Prise en charge de l’arithmétique binaire (addition, soustraction, multiplication, division, least, greatest) entre Decimal et Float. #33355 (flynn).
- Prise en compte des limites cgroups dans l’autodétection de max_threads. #33342 (JaySon).
- Ajout du nouveau paramètre
min_session_timeout_msde ClickHouse Keeper. Désormais, ClickHouse Keeper déterminera le délai d’expiration de la session client en fonction des paramètresmin_session_timeout_msetsession_timeout_ms. #33288 (JackyWoo). - Ajout de la prise en charge du type de données
UUIDpour les fonctionshexetbin. #32170 (Frank Chen). - Correction de la lecture des sous-colonnes contenant des points dans leur nom. En particulier, correction de la lecture des colonnes
Nestedsi les noms de leurs éléments contiennent des points (par ex.Nested(`keys.name` String, `keys.id` UInt64, values UInt64)). #34228 (Anton Popov). - Correction du non-fonctionnement de
parallel_view_processing = 0lors d’une insertion dans une table avecVALUES. - Correction deview_duration_msdans lequery_views_log, qui n’était pas correctement défini pour les vues matérialisées. #34067 (Raúl Marín). - Correction de l’analyse de la structure des tables à partir de ZooKeeper : désormais, les métadonnées de ZooKeeper sont comparées aux métadonnées locales sous leur forme canonique. Cela aide lorsque les noms canoniques des fonctions peuvent changer entre les versions de ClickHouse. #33933 (sunny).
- Échappement correct de certains caractères lors de l’interaction avec LDAP. #33401 (IlyaTsoi).
Amélioration de la compilation, des tests et du packaging
- Suppression de la prise en charge des builds non packagés. #33690 (Azat Khuzhin).
- Garantit que les tests ne dépendent pas du résultat d’un tri non stable d’éléments égaux. Ajout, en mode Débogage, d’une randomisation des plages d’éléments égaux après le tri afin d’éviter les problèmes lorsque l’on s’appuie sur l’ordre de tri des éléments égaux. #34393 (Maksim Kita).
- Ajout de verbosité à un check de style. #34289 (Mikhail f. Shiryaev).
- Suppression du paquet Debian
clickhouse-test, car il est obsolète. #33948 (Ilya Yatsishin). - Plusieurs améliorations du système de build pour éviter l’utilisation occasionnelle de paquets du système d’exploitation et imposer des builds hermétiques. #33695 (Amos Bird).
Correction de bugs (dysfonctionnement visible par l’utilisateur dans une version stable ou préstable officielle)
- Correction de l’assertion lors de l’utilisation de
allow_experimental_parallel_reading_from_replicasavecmax_parallel_replicaségal à 1. Cela corrige #34525. #34613 (Nikita Mikhaylov). - Correction d’un bug rare lors de la lecture de tableaux vides, qui pouvait provoquer l’erreur
Data compressed with different methods. Cela peut se produire si vous avez principalement des tableaux vides, mais pas systématiquement, et que la lecture s’effectue en sens inverse avec ORDER BY … DESC. Cette erreur a très peu de chances de se produire. #34327 (Anton Popov). - Correction d’un résultat incorrect de
round/roundBankerslors de l’arrondi de valeurs entières de petits types. Ferme #33267. #34562 (李扬). - Il arrivait parfois que l’annulation d’une requête ne fonctionne pas immédiatement lors de la lecture de plusieurs fichiers depuis S3 ou HDFS. Corrige #34301. Lié à #34397. #34539 (Dmitry Novik).
- Correction de l’exception
Chunk should have AggregatedChunkInfo in MergingAggregatedTransform(dans le cas deoptimize_aggregation_in_order = 1etdistributed_aggregation_memory_efficient = 0). Corrige #34526. #34532 (Anton Popov). - Correction de la comparaison entre entiers et nombres à virgule flottante dans l’analyse d’index. Auparavant, cela pouvait conduire à ignorer par erreur certaines granules lors de la lecture. Corrige #34493. #34528 (Anton Popov).
- Correction de la prise en charge de la compression dans le moteur URL. #34524 (Frank Chen).
- Correction de l’erreur possible ‘file_size: Operation not supported’ lors de l’auto-détection du schéma des fichiers. #34479 (Kruglov Pavel).
- Correction d’une possible condition de concurrence avec la suppression d’une table. #34416 (Kseniia Sumarokova).
- Correction de l’erreur possible
Cannot convert column Function to masklors de l’évaluation en court-circuit des fonctions. Ferme #34171. #34415 (Kruglov Pavel). - Correction d’un plantage potentiel lors de l’inférence de schéma à partir d’une source URL. Ferme #34147. #34405 (Kruglov Pavel).
- Pour les UDFs, les permissions d’accès étaient vérifiées au niveau de la base de données au lieu du niveau global, comme cela aurait dû être le cas. Ferme #34281. #34404 (Maksim Kita).
- Correction d’une syntaxe de moteur incorrecte dans le résultat de la requête
SHOW CREATE DATABASEpour les bases de données utilisant le moteurMemory. Cela ferme #34335. #34345 (alexey-milovidov). - Correction de quelques situations de concurrence extrêmement rares qui pouvaient entraîner un état incohérent de la file de réplication et l’erreur “intersecting parts”. #34297 (tavplubix).
- Correction de la largeur de la barre de progression. Elle était arrondie à tort à un nombre entier de caractères. #34275 (alexey-milovidov).
- Correction des champs d’information client current_user/current_address pour la communication inter-serveur (avant ce correctif, current_user/current_address étaient conservés depuis la requête précédente). #34263 (Azat Khuzhin).
- Correction d’une fuite mémoire en cas de certaines Exception pendant le traitement des requêtes avec
optimize_aggregation_in_order=1. #34234 (Azat Khuzhin). - Correction de la métrique
Query, qui affiche le nombre de requêtes en cours d’exécution. Au cours des dernières versions, elle valait toujours 0. #34224 (Anton Popov). - Correction de l’inférence de schéma pour la fonction de table
s3. #34186 (Kruglov Pavel). - Correction d’une situation de concurrence rare et bénigne dans les moteurs de stockage
HDFS,S3etURL, qui peut entraîner des connexions supplémentaires. #34172 (alesapin). - Correction d’un bug qui peut, dans de rares cas, provoquer l’erreur “Cannot read all data” lors de la lecture de colonnes LowCardinality de la famille des moteurs de table MergeTree stockant les données sur un système de fichiers distant comme S3 (le système de fichiers virtuel sur S3 est une fonctionnalité expérimentale qui n’est pas prête pour la production). #34139 (alesapin).
- Correction des insertions dans les tables Distributed en cas de changement du protocole natif. Le dernier changement remonte à la version 22.1, il peut donc y avoir certains échecs d’insertion dans les tables Distributed après une mise à niveau vers cette version. #34132 (Anton Popov).
- Correction d’une possible data race dans le moteur de table
File, introduite dans #33960. Clôture de #34111. #34113 (Kruglov Pavel). - Correction d’une situation de concurrence mineure qui pouvait provoquer l’erreur “intersecting parts” dans des cas extrêmement rares après une perte de connexion à ZooKeeper. #34096 (tavplubix).
- Correction des insertions asynchrones avec le format
Native. #34068 (Anton Popov). - Correction d’un bug qui pouvait empêcher le serveur de démarrer lorsque le stockage d’accès répliqué et Keeper (intégré à clickhouse-server) étaient utilisés ensemble. Introduction de deux paramètres de délai d’expiration du socket Keeper à la place des paramètres de l’utilisateur par défaut :
keeper_server.socket_receive_timeout_secetkeeper_server.socket_send_timeout_sec. Corrige #33973. #33988 (alesapin). - Correction d’un segfault lors de l’analyse d’un fichier ORC avec un pied de page corrompu. Clôture de #33797. #33984 (Kruglov Pavel).
- Corrige l’analyse des IPv6 à partir des paramètres de requête (instructions préparées) et la conversion d’IPv6 en chaîne. Clôt #33928. #33971 (Kruglov Pavel).
- Corrige un crash lors de la lecture de tuples imbriqués. Corrige #33838. #33956 (Anton Popov).
- Corrige l’utilisation des fonctions
arrayettupleavec des arguments littéraux dans les requêtes distribuées. Auparavant, cela pouvait entraîner l’exceptionNot found columns. #33938 (Anton Popov). - Le combinateur de fonction d’agrégation
-Ifne traitait pas correctement l’argument de filtreNullable. Cela clôt #27073. #33920 (alexey-milovidov). - Corrige une condition de concurrence potentielle lors d’une lecture sur disque distant (le système de fichiers virtuel sur s3 est une fonctionnalité expérimentale qui n’est pas prête pour la production). #33912 (Amos Bird).
- Corrige un crash si une UDF SQL est créée avec une lambda dont les arguments ne sont pas des identifiants. Clôt #33866. #33868 (Maksim Kita).
- Corrige l’utilisation des colonnes sparse (qui peuvent être activées par le paramètre expérimental
ratio_of_defaults_for_sparse_serialization). #33849 (Anton Popov). - Corrige l’erreur logique
replica is not readonlysur la requêteSYSTEM RESTORE REPLICAlorsque la réplique est en réalitéreadonly. Corrige #33806. #33847 (tavplubix). - Corrige une fuite de mémoire dans
clickhouse-keeperlorsque la compression est utilisée (par défaut). #33840 (Azat Khuzhin). - Corrige l’analyse des index lorsqu’aucun type commun n’est disponible. #33833 (Amos Bird).
- Corrige l’inférence de schéma pour
JSONEachRowetJSONCompactEachRow. #33830 (Kruglov Pavel). - Corrige l’utilisation des dictionnaires externes avec la source
rediset un grand nombre de clés. #33804 (Anton Popov). - Corrige un bug dans le client qui entraînait ‘Connection reset by peer’ sur le serveur. Clôt #33309. #33790 (Kruglov Pavel).
- Corrige l’analyse de la requête INSERT INTO … VALUES SETTINGS … (…), … #33776 (Kruglov Pavel).
- Corrige un bug dans la vérification de table lors de la création d’une data part au format wide et d’une projection. #33774 (李扬).
- Correction d’une légère condition de concurrence entre count() et INSERT/merges/… dans MergeTree (il est possible de renvoyer un nombre incorrect de lignes pour SELECT avec optimize_trivial_count_query). #33753 (Azat Khuzhin).
- Lever une exception lorsque la requête de listage de répertoire échoue dans le stockage HDFS. #33724 (LiuNeng).
- Correction d’une mutation lorsque la table contient des projections. Cela corrige #33010. Cela corrige #33275. #33679 (Amos Bird).
- Déterminer correctement la base de données courante si
CREATE TEMPORARY TABLE AS SELECTest exécuté dans une session HTTP nommée. Il s’agit d’un cas d’usage très rare. Cela clôt #8340. #33676 (alexey-milovidov). - Autoriser certaines requêtes avec tri, LIMIT BY, ARRAY JOIN et fonctions lambda. Cela clôt #7462. #33675 (alexey-milovidov).
- Correction d’un bug dans la “réplication zero copy” (une fonctionnalité en cours de développement et qui ne doit pas être utilisée en production) qui entraînait une duplication des données en cas de TTL move. Corrige #33643. #33642 (alesapin).
- Correction de
Chunk should have AggregatedChunkInfo in GroupingAggregatedTransform(dans le cas deoptimize_aggregation_in_order = 1). #33637 (Azat Khuzhin). - Correction de l’erreur
Bad cast from type ... to DB::DataTypeArray, qui peut se produire lorsqu’une table possède une colonneNestedavec des points dans son nom et qu’une valeur par défaut est générée pour celle-ci (par exemple lors d’un insert, lorsque la colonne n’est pas listée). Suite de #28762. #33588 (Alexey Pavlenko). - L’export vers des fichiers
lz4a été corrigé. Clôt #31421. #31862 (Kruglov Pavel). - Correction d’un plantage potentiel si
group_by_overflow_modeétait défini surany(GROUP BY approximatif) et que l’agrégation était effectuée sur une seule colonne de typeLowCardinality. #34506 (DR). - Correction de l’insertion dans des tables temporaires via le protocole client-serveur gRPC. Corrige #34347, ticket
#2. #34364 (Vitaly Baranov). - Correction du ticket #19429. #34225 (Vitaly Baranov).
- Correction du ticket #18206. #33977 (Vitaly Baranov).
- Cette PR permet d’utiliser plusieurs stockages LDAP dans une même liste de répertoires utilisateurs. Cela fonctionnait auparavant, mais ne fonctionnait plus parce que les tests LDAP sont désactivés (ils font partie des tests testflows). #33574 (Vitaly Baranov).
Version de ClickHouse v22.1, 2022-01-18. Présentation, Vidéo
Notes de mise à niveau
- Les fonctions
leftetrightétaient auparavant implémentées dans le parseur et prennent désormais pleinement en charge toutes les fonctionnalités. Les requêtes distribuées utilisant les fonctionsleftourightsans alias peuvent lever une exception si le cluster contient différentes versions declickhouse-server. Si vous mettez votre cluster à niveau et rencontrez cette erreur, vous devez terminer la mise à niveau afin de vous assurer que tous les nœuds utilisent la même version. Vous pouvez également ajouter des alias (AS something) aux colonnes de vos requêtes pour éviter ce problème. #33407 (alexey-milovidov). - Depuis cette version, l’utilisation des ressources par les sous-requêtes scalaires est entièrement comptabilisée. Avec ce changement, les lignes lues dans les sous-requêtes scalaires sont désormais consignées dans le
query_log. Si la sous-requête scalaire est mise en cache (répétée ou appelée pour plusieurs lignes), les lignes lues ne sont comptées qu’une seule fois. Cette modification permet d’interrompre les requêtes avec KILL et de suivre leur progression pendant l’exécution de sous-requêtes scalaires. #32271 (Raúl Marín).
Nouvelle fonctionnalité
- Mise en œuvre de l’inférence de schéma pour les formats d’entrée. Possibilité d’omettre la structure (ou d’écrire simplement
auto) dans les fonctions de tablefile,url,s3,hdfset dans les paramètres declickhouse-local. Possibilité d’omettre la structure dans la requête CREATE pour les moteurs de tableFile,HDFS,S3,URL,Merge,Buffer,DistributedetReplicatedMergeTree(si de nouvelles répliques sont ajoutées). #32455 (Kruglov Pavel). - Détection du format à partir de l’extension du fichier dans les fonctions de table
file/hdfs/s3/urlet les moteurs de tableHDFS/S3/URL, ainsi que pourSELECT INTO OUTFILEetINSERT FROM INFILE#33565 (Kruglov Pavel). Ferme #30918. #33443 (OnePiece). - Un outil de collecte des données de diagnostic en cas de besoin d’assistance. #33175 (Alexander Burmak).
- Découverte automatique du cluster via Zoo/Keeper. Cela permet d’ajouter des répliques au cluster sans modifier la configuration de chaque serveur. #31442 (vdimir).
- Mise en œuvre du moteur de table Hive pour accéder à Apache Hive depuis ClickHouse. Cela implémente : #29245. #31104 (taiyang-li).
- Ajout des fonctions d’agrégation
cramersV,cramersVBiasCorrected,theilsUetcontingency. Ces fonctions calculent la dépendance (mesure de l’association) entre des valeurs catégorielles. Elles reposent toutes sur un tableau croisé (histogramme de paires) pour leur implémentation. On peut les voir comme un coefficient de corrélation, mais pour n’importe quelles valeurs discrètes (pas nécessairement numériques). #33366 (alexey-milovidov). Implémentation initiale par Vanyok-All-is-OK et antikvist. - Ajout de la fonction de table
hdfsCluster, qui permet de traiter des fichiers depuis HDFS en parallèle à partir de plusieurs nœuds d’un cluster donné, à l’instar des3Cluster. #32400 (Zhichang Yu). - Ajout de la prise en charge des disques s’appuyant sur Azure Blob Storage, à l’instar de ce qui existe déjà pour les disques s’appuyant sur AWS S3. #31505 (Jakub Kuklis).
- Autorisation de
COMMENTdansCREATE VIEW(pour tous les types de VIEW). #31062 (Vasily Nemkov). - Réinitialisation dynamique des ports d’écoute et des protocoles lors des changements de configuration. #30549 (Kevin Michel).
- Ajout des fonctions
left,right,leftUTF8,rightUTF8. Correction d’une erreur dans l’implémentation de la fonctionsubstringUTF8avec un OFFSET négatif (OFFSET à partir de la fin de la chaîne). #33407 (alexey-milovidov). - Ajout de nouvelles fonctions pour le système de coordonnées
H3:h3HexAreaKm2,h3CellAreaM2,h3CellAreaRads2. #33479 (Bharat Nallan). - Ajout de la fonction
MONTHNAME. #33436 (usurai). - Ajout de la fonction
arrayLast. Résout #33390. #33415 Ajout de la fonctionarrayLastIndex. #33465 (Maksim Kita). - Ajout de la fonction
decodeURLFormComponent, légèrement différente dedecodeURLComponent. Résout #10298. #33451 (SuperDJY). - Possibilité de séparer les règles de rollup
GraphiteMergeTreepour les métriques simples/avec tags (champ rule_type facultatif). #33494 (Michail Safronov).
Amélioration des performances
- Prise en charge du déplacement des conditions vers
PREWHERE(paramètreoptimize_move_to_prewhere) pour les tables du moteurMergesi toutes les tables sous-jacentes prennent en chargePREWHERE. #33300 (Anton Popov). - Gestion plus efficace des globs pour le stockage URL. Vous pouvez désormais interroger facilement un million d’URL en parallèle, avec nouvelles tentatives en cas d’échec. Corrige #32866. #32907 (Kseniia Sumarokova).
- Évite le backtracking exponentiel dans l’analyseur syntaxique. Cela corrige #20158. #33481 (alexey-milovidov).
- Une utilisation abusive de la fonction
untupleentraînait une complexité exponentielle dans l’analyse des requêtes (détectée par le fuzzer). Cela corrige #33297. #33445 (alexey-milovidov). - Réduit la mémoire allouée aux dictionnaires avec des attributs String. #33466 (Maksim Kita).
- Légère amélioration des performances de la fonction
reinterpret. #32587 (alexey-milovidov). - Changement mineur. Dans des cas extrêmement rares où une part de données est perdue sur chaque réplique, après la fusion de certaines parts de données, les requêtes suivantes peuvent ignorer moins de partitions lors de l’élagage des partitions. Cela n’a pratiquement aucun impact. #32220 (Azat Khuzhin).
- Améliore les performances d’écriture de
ClickHouse Keeperen optimisant la logique de calcul de taille. #32366 (zhanglistar). - Optimise la matérialisation des projections sur une seule part. Cela corrige #31669. #31885 (Amos Bird).
- Améliore les performances des requêtes sur les tables système. #33312 (OnePiece).
- Optimise la sélection des parts MergeTree pouvant être déplacées entre volumes. #33225 (OnePiece).
- Corrige les performances du dictionnaire
sparse_hashedavec des clés séquentielles (fonction de hachage incorrecte). #32536 (Azat Khuzhin).
Fonctionnalité expérimentale
- Lecture parallèle à partir de plusieurs répliques au sein d’un shard lors d’une requête distribuée sans utiliser de clé d’échantillonnage. Pour l’activer, définissez
allow_experimental_parallel_reading_from_replicas = 1etmax_parallel_replicassur n’importe quelle valeur. Cela clôt #26748. #29279 (Nikita Mikhaylov). - Implémentation de la sérialisation creuse. Elle peut réduire l’espace disque utilisé et améliorer les performances de certaines requêtes sur les colonnes qui contiennent beaucoup de valeurs par défaut (zéro). Elle peut être activée en définissant
ratio_for_sparse_serialization. La sérialisation creuse sera choisie dynamiquement pour une colonne si le ratio entre le nombre de valeurs par défaut et le nombre total de valeurs dépasse ce seuil. La sérialisation (par défaut ou creuse) sera fixée pour chaque colonne dans chaque part, mais peut varier d’une part à l’autre. #22535 (Anton Popov). - Ajout de la fonctionnalité “TABLE OVERRIDE” pour personnaliser les schémas de table de MaterializedMySQL. #32325 (Stig Bakken).
- Ajout de la requête
EXPLAIN TABLE OVERRIDE. #32836 (Stig Bakken). - Prise en charge de la clause TABLE OVERRIDE pour MaterializedPostgreSQL. RFC : #31480. #32749 (Kseniia Sumarokova).
- Modification du chemin ZooKeeper pour les marks de zero-copy des données partagées. Notez que “zero-copy replication” est une fonctionnalité non destinée à la production (à un stade précoce de développement) que vous ne devriez de toute façon pas utiliser. Mais si vous l’avez utilisée, gardez ce changement à l’esprit. #32061 (ianton-ru).
- Prise en charge de la clause EVENTS pour la requête WATCH WINDOW VIEW. #32607 (vxider).
- Correction de l’ACL avec un hash numérique explicite dans
ClickHouse Keeper: le comportement est désormais cohérent avec ZooKeeper et le digest généré est toujours accepté. #33249 (小路). #33246. - Correction de la suppression inattendue de projection lors du détachement de parts. #32067 (Amos Bird).
Amélioration
- Désormais, les fonctions de conversion de date et d’heure qui génèrent une heure antérieure à
1970-01-01 00:00:00seront ramenées à zéro au lieu de provoquer un overflow. #29953 (Amos Bird). Cela corrige également un bug dans l’analyse des index lorsque la fonction de troncature de date produisait un résultat antérieur à l’epoch Unix. - Toujours afficher l’utilisation des ressources (utilisation totale du CPU, utilisation totale de la RAM et utilisation maximale de la RAM par hôte) dans le client. #33271 (alexey-milovidov).
- Amélioration de la sérialisation et de la désérialisation du type
Bool, avec vérification de la plage de valeurs. #32984 (Kruglov Pavel). - Si un paramètre invalide est défini à l’aide de la requête
SETou des paramètres de requête dans la HTTP request, le message d’erreur contiendra des suggestions proches de la chaîne du paramètre invalide (le cas échéant). #32946 (Antonio Andelic). - Prise en charge de suggestions pour les noms de paramètres mal saisis dans clickhouse-client et clickhouse-local. Clôt #32237. #32841 (凌涛).
- Autorise l’utilisation de virtual columns dans les vues matérialisées. Clôt #11210. #33482 (OnePiece).
- Ajout d’une configuration permettant de désactiver IPv6 dans ClickHouse Keeper si nécessaire. Cela clôt #33381. #33450 (Wu Xueyang).
- Ajout d’informations supplémentaires dans
system.build_optionssur la révision git actuelle. #33431 (taiyang-li). clickhouse-local: prise en compte de la mémoire avec l’option--max_memory_usage_in_client. #33341 (Azat Khuzhin).- Autorise les intervalles négatifs dans la fonction
intervalLengthSum. Leur longueur sera également ajoutée. Cela clôt #33323. #33335 (alexey-milovidov). LineAsStringpeut être utilisé comme format de sortie. Cela clôt #30919. #33331 (Sergei Trifonov).- Prise en charge de
<secure/>dans la configuration du cluster, comme forme alternative à<secure>1</secure>. Clôt #33270. #33330 (SuperDJY). - Un double appui sur Ctrl+C arrête immédiatement
clickhouse-benchmarksans attendre la fin des requêtes en cours. Cela clôt #32586. #33303 (alexey-milovidov). - Prise en charge des Unix timestamp en millisecondes dans la fonction
parseDateTimeBestEffort. #33276 (Ben). - Autorise l’annulation d’une query pendant la lecture de données depuis une external table aux formats
Arrow/Parquet/ORC— auparavant, l’annulation échouait dans le cas de fichiers volumineux lorsque le paramètre input_format_allow_seeks était défini sur false. Clôt #29678. #33238 (Kseniia Sumarokova). - Si le table engine prend en charge la clause
SETTINGS, autorise le passage des paramètres au format key-value ou via la config. Ajoute cette prise en charge pour MySQL. #33231 (Kseniia Sumarokova). - Empêche correctement les primary keys Nullable si nécessaire. Cela concerne #32780. #33218 (Amos Bird).
- Ajoute une nouvelle tentative pour les connections
PostgreSQLdans le cas où rien n’a encore été récupéré. Clôt #33199. #33209 (Kseniia Sumarokova). - Valide les keys de config pour les external dictionaries. #33095. #33130 (Kseniia Sumarokova).
- Envoie les informations de profile dans
clickhouse-local. Clôt #33093. #33097 (Kseniia Sumarokova). - Évaluation en court-circuit : prise en charge de la fonction
throwIf. Clôt #32969. #32973 (Maksim Kita). - (Cela se produit uniquement dans des builds non officiels). Correction d’un segfault lors de l’insertion de données dans des columns compressées de type Decimal, String, FixedString et Array. Cela clôt #32939. #32940 (N. Kolotov).
- Ajoute la prise en charge de la spécification d’une subquery comme SQL user defined function. Example :
CREATE FUNCTION test AS () -> (SELECT 1). Clôt #30755. #32758 (Maksim Kita). - Améliore la prise en charge de la compression gRPC pour #28671. #32747 (Vitaly Baranov).
- Vide toutes les data parts en mémoire lorsque le WAL n’est pas activé lors de l’arrêt du server ou du détachement d’une table. #32742 (nauta).
- Autorise le contrôle des connection timeouts pour MySQL (auparavant pris en charge uniquement pour dictionary source). Clôt #16669. Auparavant, la valeur par défaut de connect_timeout était assez faible ; elle est maintenant configurable. #32734 (Kseniia Sumarokova).
- Ajoute la prise en charge de l’option
authSourcepour le stockageMongoDB. Clôt #32594. #32702 (Kseniia Sumarokova). - Prise en charge du type
Date32dans la table functiongenarateRandom. #32643 (nauta). - Ajout des paramètres
max_concurrent_select_queriesetmax_concurrent_insert_queriespour contrôler les requêtes concurrentes par type de requête. Corrige #3575. #32609 (SuperDJY). - Améliore la gestion des structures imbriquées avec des colonnes manquantes lors de la lecture de données au format
Protobuf. Suite de https://github.com/ClickHouse/ClickHouse/pull/31988. #32531 (Vitaly Baranov). - Autorise des informations d’identification vides pour le moteur
MongoDB. Corrige #26267. #32460 (Kseniia Sumarokova). - Désactive certaines optimisations pour les window functions susceptibles d’entraîner des exceptions. Corrige #31535. Corrige #31620. #32453 (Kseniia Sumarokova).
- Permet la connexion à MongoDB 5.0. Corrige #31483,. #32416 (Kseniia Sumarokova).
- Autorise la comparaison entre
DecimaletFloat. Corrige #22626. #31966 (flynn). - Ajout des paramètres
command_read_timeoutetcommand_write_timeoutpourStorageExecutable,StorageExecutablePool,ExecutableDictionary,ExecutablePoolDictionary,ExecutableUserDefinedFunctions. Le paramètrecommand_read_timeoutcontrôle le délai d’attente pour la lecture des données depuis le stdout de la commande, en millisecondes. Le paramètrecommand_write_timeoutcontrôle le délai d’attente pour l’écriture des données vers le stdin de la commande, en millisecondes. Ajout du paramètrecommand_termination_timeoutpourExecutableUserDefinedFunction,ExecutableDictionary,StorageExecutable. Ajout du paramètreexecute_directpourExecutableUserDefinedFunction, avectruepar défaut. Ajout du paramètreexecute_directpourExecutableDictionary,ExecutablePoolDictionary, avecfalsepar défaut. #30957 (Maksim Kita). - Les aggregate functions de bitmap renverront un résultat correct pour un argument hors plage, au lieu d’un effet de bouclage. #33127 (DR).
- Corrige l’analyse de requêtes incorrectes avec l’instruction
FROM INFILE. #33521 (Kruglov Pavel). - N’autorise pas l’écriture dans
S3si le chemin contient des globs. #33142 (Kruglov Pavel). - L’option
--echon’était pas utilisée parclickhouse-clienten mode batch avec une seule requête. #32843 (N. Kolotov). - Utilise l’option
--databasepour clickhouse-local. #32797 (Kseniia Sumarokova). - Corrige un code étonnamment mauvais dans la fonction SQL ordinaire
file. Elle prend désormais en charge les liens symboliques. #32640 (alexey-milovidov). - Mise à jour de
modification_timepour la partie de données danssystem.partsaprès le déplacement de cette partie de données #32964. #32965 (save-my-heart). - Problème potentiel, non exploitable : un dépassement de capacité d’entier peut se produire lors du redimensionnement d’un tableau. #33024 (varadarajkumar).
Amélioration de la compilation, des tests et du packaging
- Ajout de paquets, de tests fonctionnels et de builds Docker pour la version AArch64 (ARM) de ClickHouse. #32911 (Mikhail f. Shiryaev). #32415
- Préparation de ClickHouse pour une compilation avec musl-libc. Cette option n’est pas activée par défaut. #33134 (alexey-milovidov).
- Correction du script d’installation pour qu’il fonctionne sur FreeBSD. Ceci clôt #33384. #33418 (alexey-milovidov).
- Ajout de
actionlintpour les workflows GitHub Actions et vérification des fichiers de workflow avecact --listafin de s’assurer de la validité de leur syntaxe. #33612 (Mikhail f. Shiryaev). - Ajout de tests supplémentaires pour la fonctionnalité de clé primaire Nullable. Ajout également de tests couvrant différents types et variantes de MergeTree, ainsi que des données générées aléatoirement. #33228 (Amos Bird).
- Ajout d’un outil simple pour visualiser les tests instables dans un navigateur web. #33185 (alexey-milovidov).
- Activation de builds hermétiques pour les builds partagés. Cela concerne principalement les développeurs. #32968 (Amos Bird).
- Mise à jour de
libc++etlibc++abivers leurs dernières versions. #32484 (Raúl Marín). - Ajout d’un test d’intégration pour le client .NET externe (ClickHouse.Client). #23230 (Oleg V. Kozlyuk).
- Injection d’informations Git dans le binaire clickhouse. Il est ainsi plus facile d’obtenir la révision du code source à partir du binaire clickhouse. #33124 (taiyang-li).
- Suppression de code obsolète dans ConfigProcessor. Le code spécifique à Yandex n’est plus utilisé. Ce code contenait un défaut mineur. Ce défaut a été signalé par Mallik Hassan dans #33032. Ceci clôt #33032. #33026 (alexey-milovidov).
Correction de bugs (dysfonctionnement visible par l’utilisateur dans une version stable ou préstable officielle)
- Plusieurs corrections ont été apportées à l’analyse des formats. Cela concerne les cas où
clickhouse-serverest ouvert en écriture à un attaquant. Des données d’entrée spécialement conçues pour le formatNativepeuvent entraîner la lecture de mémoire non initialisée ou un crash. Cela concerne les cas oùclickhouse-serverest ouvert en écriture à un attaquant. #33050 (Heena Bansal). Correction d’un problème d’index hors limites pour le type Union d’Apache Avro dans le format binaire Apache Avro. #33022 (Harry Lee). Correction d’un déréférencement de pointeur nul dans des donnéesLowCardinalitylors de la désérialisation de donnéesLowCardinalityau format Native. #33021 (Harry Lee). - Le handler ClickHouse Keeper supprimera correctement l’opération une fois la réponse envoyée. #32988 (JackyWoo).
- Erreur potentielle de calcul des quotas de type off-by-one : la limite du quota n’était pas atteinte, mais elle était considérée comme dépassée. Cela corrige #31174. #31656 (sunny).
- Correction du CAST de String vers IPv4 ou IPv6, et inversement. Correction du message d’erreur en cas d’échec de conversion. #29224 (Dmitry Novik) #27914 (Vasily Nemkov).
- Correction d’une exception du type
Unknown aggregate function nothinglors d’une exécution sur un serveur distant. Cela corrige #16689. #26074 (hexiaoting). - Correction de l’utilisation de la mauvaise database pour JOIN sans database explicite dans les distributed queries (corrige : #10471). #33611 (Azat Khuzhin).
- Correction d’un segfault dans le format Apache
Avroapparaissant après la deuxième insertion dans le fichier. #33566 (Kruglov Pavel). - Correction d’un segfault dans le format Apache
Arrowsi le schéma contient le typeDictionary. Clôt #33507. #33529 (Kruglov Pavel). - Les paramètres
offsetetlimithors bande peuvent être appliqués incorrectement aux views. Clôt #33289 #33518 (hexiaoting). - Correction d’une exception
Block structure mismatchpouvant se produire lors d’une insertion dans une table avec une colonneLowCardinalityimbriquée par défaut. Corrige #33028. #33504 (Nikolai Kochetov). - Correction des expressions de dictionnaire pour les attributs min et max de plage de
range_hashedlorsqu’ils sont créés via DDL. Clôt #30809. #33478 (Maksim Kita). - Correction d’un possible use-after-free pour INSERT dans une vue matérialisée avec un DROP concurrent (Azat Khuzhin).
- N’essayez pas de lire au-delà de EOF (pour contourner un bug du noyau Linux) ; ce bug peut être reproduit sur les noyaux (3.14..5.9) et nécessite
index_granularity_bytes=0(c.-à-d. désactiver la granularité d’index adaptative). #33372 (Azat Khuzhin). - Les commandes
SYSTEM SUSPENDetSYSTEM ... THREAD FUZZERn’étaient pas soumises au contrôle d’accès. C’est corrigé. Auteur : Kevin Michel. #33333 (alexey-milovidov). - Correction du cas où
COMMENTpour les dictionnaires n’apparaissait pas danssystem.tables,system.dictionaries. Il est désormais possible de modifier le commentaire pour le moteurDictionary. Corrige #33251. #33261 (Maksim Kita). - Ajout des inserts asynchrones (avec le paramètre
async_insertactivé) au journal des requêtes. Auparavant, ces requêtes n’y apparaissaient pas. #33239 (Anton Popov). - Correction de l’envoi des expressions
WHERE 1 = 0pour les requêtes sur des bases de données externes. Corrige #33152. #33214 (Kseniia Sumarokova). - Correction de la validation DDL pour MaterializedPostgreSQL. Correction du paramètre
materialized_postgresql_allow_automatic_update. Corrige #29535. #33200 (Kseniia Sumarokova). S’assure que les replication slots inutilisés sont toujours supprimés. Problème identifié dans #26952. #33187 (Kseniia Sumarokova). Correction du detach/attach de MaterializedPostgreSQL (suppression/ajout à la réplication) pour les tables avec un schéma non par défaut. Problème identifié dans #29535. #33179 (Kseniia Sumarokova). Correction de la suppression de la base de données MaterializedPostgreSQL avecDROP. #33468 (Kseniia Sumarokova). - La métrique
StorageBufferBytesétait parfois mal calculée. #33159 (xuyatian). - Correction de l’erreur
Invalid version for SerializationLowCardinality key columnlors de la lecture d’une colonneLowCardinalityaveclocal_filesystem_read_prefetchouremote_filesystem_read_prefetchactivé. #33046 (Nikolai Kochetov). - Correction de la lecture d’un fichier vide par la table function
s3. Corrige #33008. #33037 (Kseniia Sumarokova). - Correction d’une fuite de
Contextdans le cas de cancel_http_readonly_queries_on_client_close (c.-à-d. une fuite des tables externes téléversées vers le serveur et d’autres ressources). #32982 (Azat Khuzhin). - Corrige une sortie incorrecte de
Tupleau formatCSVen cas de délimiteur CSV personnalisé. #32981 (Kruglov Pavel). - Corrige la vérification de l’URL HDFS, qui ne permettait pas d’utiliser une adresse de namenode HA. Le bug a été introduit dans https://github.com/ClickHouse/ClickHouse/pull/31042. #32976 (Kruglov Pavel).
- Corrige le déclenchement d’une exception de type positional argument out of bounds pour des arguments non positionnels. Ferme #31173#event-5789668239. #32961 (Kseniia Sumarokova).
- Corrige un comportement indéfini en cas d’EOF inattendue lors du remplissage d’un Set à partir d’une requête HTTP (par exemple si le client interrompt la requête en cours, p. ex.
timeout 0.15s curl -Ss -F 's=@t.csv;' 'http://127.0.0.1:8123/?s_structure=key+Int&query=SELECT+dummy+IN+s', avec unt.csvsuffisamment volumineux). #32955 (Azat Khuzhin). - Corrige une régression dans la fonction
replaceRegexpAll. La fonction se comportait incorrectement lorsque la sous-chaîne correspondante était vide. Cela ferme #32777. Cela ferme #30245. #32945 (alexey-milovidov). - Corrige la lecture des stripes au format
ORC. #32929 (kreuzerkrieg). topKWeightedStateéchouait avec certains types d’entrée. #32487. #32914 (vdimir).- Corrige l’exception
Single chunk is expected from view inner query (LOGICAL_ERROR)dans une vue matérialisée. Corrige #31419. #32862 (Nikolai Kochetov). - Corrige l’optimisation avec seek différé pour les lectures asynchrones depuis des systèmes de fichiers distants. Ferme #32803. #32835 (Kseniia Sumarokova).
- Le moteur de table
MergeTreepouvait ignorer silencieusement certaines mutations s’il y avait trop de mutations en cours ou en cas de forte consommation mémoire ; c’est corrigé. Corrige #17882. #32814 (tavplubix). - Évite de réutiliser le cache des sous-requêtes scalaires lors du traitement des blocks de MV. Cela corrige un bug lorsque la requête scalaire référence la table source, mais implique que toutes les sous-requêtes scalaires de la définition de la MV seront calculées pour chaque block. #32811 (Raúl Marín).
- Le serveur pouvait échouer à démarrer si une database avec le moteur
MySQLne parvenait pas à se connecter au serveur MySQL ; c’est corrigé. Corrige #14441. #32802 (tavplubix). - Correction d’un crash lors de l’utilisation de la fonction
fuzzBits, clôt #32737. #32755 (SuperDJY). - Correction de l’erreur
Column is not under aggregate functiondans le cas d’une MV avecGROUP BY (list of columns)(analysé commeGROUP BY tuple(...)) surKafka/RabbitMQ. Corrige #32668 et #32744. #32751 (Nikolai Kochetov). - Correction de la requête
ALTER TABLE ... MATERIALIZE TTLavec les modesTTL ... DELETE WHERE ...etTTL ... GROUP BY .... #32695 (Anton Popov). - Correction de l’optimisation
optimize_read_in_orderlorsque le table engine estDistributedouMergeet que les tablesMergeTreesous-jacentes ont une fonction monotone dans le préfixe de la clé de tri. #32670 (Anton Popov). - Correction de l’exception LOGICAL_ERROR lorsque la cible d’une vue matérialisée est un JOIN ou une table SET. #32669 (Raúl Marín).
- L’insertion dans S3 avec multipart upload vers Google Cloud Storage peut déclencher un abandon. #32504. #32649 (vdimir).
- Correction d’une exception possible au démarrage du moteur de stockage
RabbitMQen retardant la création du canal. #32584 (Kseniia Sumarokova). - Correction de la durée de vie de la table (c.-à-d. d’un possible use-after-free) dans le cas d’un DROP TABLE parallèle et d’un INSERT. #32572 (Azat Khuzhin).
- Correction des async inserts avec les formats
CustomSeparated,Template,Regexp,MsgPacketJSONAsString. Auparavant, les async inserts avec ces formats ne lisaient aucune donnée. #32530 (Kruglov Pavel). - Correction de la fonction
groupBitmapAndsur une distributed table. #32529 (minhthucdao). - Correction d’un crash dans JOIN découvert par le fuzzer, clôt #32458. #32508 (vdimir).
- Gestion correcte du cas de duplication de colonnes Apache Arrow. #32507 (Dmitriy Mokhnatkin).
- Correction d’un problème de formatage ambigu des requêtes dans les distributed queries, qui entraînait des erreurs lorsque certaines colonnes de table étaient nommées
ALLouDISTINCT. Cela clôt #32391. #32490 (alexey-milovidov). - Correction d’échecs dans les requêtes qui tentent d’utiliser des skipping indices non encore matérialisés. Corrige #32292 et #30343. #32359 (Anton Popov).
- Correction d’une requête
selectdéfaillante lorsqu’il y a plus de 2 row policies sur la même colonne, à partir de la deuxième requête de la même session. #31606. #32291 (SuperDJY). - Correction de la conversion d’un Unix timestamp fractionnaire en
DateTime64: la partie fractionnaire était inversée pour les Unix timestamps négatifs (avant 1970-01-01). #32240 (Ben). - Certaines entrées de la replication queue pouvaient rester bloquées pendant
temporary_directories_lifetime(1 jour par défaut) avecDirectory tmp_merge_<part_name>ouPart ... (state Deleting) already exists, but it will be deleted soon, ou une erreur similaire. C’est corrigé. Corrige #29616. #32201 (tavplubix). - Correction du parsing du transformateur de colonne
APPLY lambda, qui pouvait entraîner un plantage du client/serveur. #32138 (Kruglov Pavel). - Correction de
base64Encode, qui ajoutait des octets superflus à la fin des petites chaînes. #31797 (Kevin Michel). - Correction d’un plantage possible (ou d’un résultat incorrect) en cas d’arguments
LowCardinalitypour une window function. Corrige #31114. #31888 (Nikolai Kochetov). - Correction d’un blocage avec la commande
DROP TABLE system.query_log sync. #33293 (zhanghuajie).