Passer au contenu principal

Version de ClickHouse 22.12, 2022-12-15. Présentation, Vidéo

Cette version contient un commentaire de service systemd erroné qui risque de compromettre l’installation de ClickHouse lors de la mise à niveau sur certaines distributions Linux. Le service systemd modifie les autorisations du propriétaire du répertoire /run/systemd, ce qui fait échouer toutes les opérations systemd suivantes. Il est recommandé de ne pas effectuer la mise à niveau vers cette version et de passer directement à une version plus récente de ClickHouse.Consultez cette issue sur GitHub pour plus de détails : https://github.com/ClickHouse/ClickHouse/issues/48285

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, argMax avec un argument String. 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 de anyState('foobar') dans state_column, alors la version incompatible affichera 'foobar\0' avec anyMerge(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 de anyState('abrac\0dabra\0') dans state_column, alors les versions plus récentes afficheront 'abrac\0dabra' avec anyMerge(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 avec SET 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 TABLE et SELECT 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 concatWithSeparator et de concat_ws comme alias pour la compatibilité avec Spark SQL. La fonction concatWithSeparatorAssumeInjective a également été ajoutée comme variante pour activer l’optimisation de GROUP BY, à l’instar de concatAssumeInjective. #43749 (李扬).
  • Ajout des fonctions multiplyDecimal et divideDecimal pour les opérations décimales à précision fixe. #42438 (Andrey Zvonov).
  • Ajout de la table system.moves avec 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 exemple 1_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ème databases afin 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 xxHash32 et xxHash64 sur 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 that show_named_collections = 1 is set to be able to see them. #43325 (Kseniia Sumarokova). The system.named_collections table is introduced #43147 (Kseniia Sumarokova).

Amélioration des performances

  • Ajout des paramètres max_streams_for_merge_tree_reading et allow_asynchronous_read_from_io_pool_for_merge_tree. Le paramètre max_streams_for_merge_tree_reading limite le nombre de flux de lecture pour les tables MergeTree. Le paramètre allow_asynchronous_read_from_io_pool_for_merge_tree active un pool d’E/S en arrière-plan pour lire à partir des tables MergeTree. Cela peut améliorer les performances des requêtes limitées par les E/S s’il est utilisé avec max_streams_to_max_threads_ratio ou max_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_filesystem ne respectaient pas la granularité adaptative. Les lignes volumineuses ne réduisaient pas le nombre de lignes lues (comme c’était le cas pour merge_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_aggregation a 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_results est 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 CREATE afin d’éviter les échecs lors du chargement au démarrage. De plus, les UDFs peuvent désormais être utilisées comme expressions DEFAULT pour 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_x ne nécessite plus de sérialisation manuelle en chaîne pour la valeur du paramètre. Par exemple, la requête SET param_a = '[\'a\', \'b\']' peut désormais s’écrire SET 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).
  • filesystemAvailable et les fonctions associées prennent en charge un argument optionnel avec le nom du disk, et filesystemFree devient filesystemUnreserved. 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_rules dans 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 unhex prend désormais en charge les arguments FixedString. 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 S3 et la fonction de table s3 avec les formats Parquet, Arrow et ORC. #43329 (chen).
  • Ajout de la colonne table_uuid à la table system.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-order au niveau d’un plan de requête. Elle est activée par défaut (mais ne fonctionne qu’avec optimize_aggregation_in_order, qui est désactivé par défaut). Définissez query_plan_aggregation_in_order = 0 pour 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' dans system.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ètre trace_profile_events et utilisée pour analyser les performances des requêtes. #43639 (Anton Popov).
  • Ajout d’un nouveau paramètre input_format_max_binary_string_size pour 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 table hdfsCluster. #43236 (chen).
  • Correction de la prise en charge de s3 pour le caractère générique ?. Clôt #42731. #43253 (chen).
  • Correction des fonctions arrayFirstOrNull et arrayLastOrNull, qui renvoyaient null lorsque le tableau contenait des éléments Nullable. #43274 (Duc Canh Le).
  • Correction d’un comptage incorrect de UserTimeMicroseconds/SystemTimeMicroseconds lié 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 disque web. #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_TABLE ou TABLE_IS_DROPPED et 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 LowCardinality lors de l’utilisation de l’exécution court-circuitée des fonctions. #43311 (Kruglov Pavel).
  • Correction des requêtes avec SAMPLE BY et l’optimisation PREWHERE sur des tables utilisant le moteur Merge. #43315 (Antonio Andelic).
  • Vérification et comparaison du contenu du fichier format_version dans MergeTreeData afin 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_parameters est défini. #43350 (Nikolay Degterinsky).
  • MaterializeMySQL (fonctionnalité expérimentale) prend en charge la DDL : drop table t1, t2 et 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 Nothing dans les fonctions if/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 + LIMIT peut renvoyer moins de lignes que prévu. Corrige #43377. #43410 (Igor Nikonov).
  • Corrige sumMap pour Nullable(Decimal(...)). #43414 (Azat Khuzhin).
  • Corrige date_diff pour 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-copier met à jour status et attach_is_done dans 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 s3Cluster génère l’erreur NOT_FOUND_COLUMN_IN_BLOCK. Clôt #43534. #43629 (chen).
  • Corrige une possible erreur logique Array sizes mismatched lors 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 BY distribué avec une colonne ALIAS parmi 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 SETTING avec ON 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, lorsque USING est utilisé. #43963 (Vladimir C). Corrige un bug lié à un ordre incorrect des clés dans le moteur de table Join. #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 JSONExtract tentera 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 Hudi et DeltaLake, en mode read-only, uniquement pour les tables sur S3. #41054 (Daniil Rubin, Kseniia Sumarokova).
  • Ajoute les table functions hudi et deltaLake. #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_plain pour les opérations de type write-once-read-many. Implémente ATTACH d’une table MergeTree pour le disk s3_plain. #42628 (Azat Khuzhin).
  • Ajout des politiques row-level appliquées à system.query_log. #39819 (Vladimir Chebotaryov).
  • Ajoute la commande à quatre lettres csnp pour créer manuellement des snapshots dans ClickHouse Keeper. De plus, lgif a é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 fonction rand dans 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_only pour 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 match peut 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 Object dans 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_readonly dans system.table_functions pour 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_metrics reçoit une documentation embarquée. Cette documentation est également exportée vers Prometheus. Correction d’une erreur dans les métriques concernant les disques cache : 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_log et /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/tty est 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 FixedString dans les fonctions d’encodage Base64. #42285 (ltrk2).
  • Ajout des colonnes bytes_on_disk et path à 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_functions a 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 tokens pour 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 Date32 pour les fonctions formatDateTime et FROM_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 FailedAsyncInsertQuery pour les insertions asynchrones. #42814 (Krzysztof Góralski).
  • Implémentation de l’optimisation read-in-order sur la base du query plan. Elle est activée par défaut. Définissez query_plan_read_in_order = 0 pour 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 oss et du table engine OSS (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_SCHEMA pour 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 table s3Cluster. #43131 (chen).
  • Correction de l’inférence de schéma dans s3Cluster et amélioration de hdfsCluster. #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_ERROR Arguments 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)Int128 et (U)Int256 étaient correctement vérifiées dans PREWHERE. #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 web lorsque le fichier n’existe pas (ou dans OPTIMIZE TABLE FINAL, qui peut aussi finir par produire la même erreur). #42767 (Azat Khuzhin).
  • Correction du mapping de auth_type dans system.session_log, avec l’ajout de SSL_CERTIFICATE parmi les valeurs de l’énumération. #42782 (Miel Donkers).
  • Correction d’un stack-use-after-return dans une build ASAN du parseur de requêtes CREATE USER. #42804 (Nikolay Degterinsky).
  • Correction de lowerUTF8/upperUTF8 lorsqu’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 from sur 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 PostgreSQL si 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 if dans 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 DateTime avec l’algorithme ‘best effort’. Closes #43061. #43180 (Kruglov Pavel).
  • Le champ indent produit par l’outil git-import était calculé incorrectement. Voir https://clickhouse.com/docs/getting-started/example-datasets/github/. #43191 (Alexey Milovidov).
  • Correction du comportement inattendu des types Interval avec 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 TIMEOUT pour LIVE 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 instructions USE. 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 S3 comme 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_name pour é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 javaHash a é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_version soit 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 (avec wait_for_async_insert=0)) pour une meilleure introspection. #42040 (Anton Popov).
  • Ajout de la prise en charge des méthodes lz4, bz2, snappy dans Accept-Encoding de 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 = DEFAULT ajouté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 ldapr aux 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 insertFrom de ColumnAggregateFunction pour partager l’aggregate state dans certains cas. #41960 (flynn).
  • Accélération de l’écriture sur les disques azure_blob_storage (respect de max_single_part_upload_size au 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 de enable_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 avec allow_no_password, il interdit de créer un utilisateur sans mot de passe, sauf si IDENTIFIED WITH no_password est 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 readonly pendant 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 comme SELECT * 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_size ou async_insert_busy_timeout_ms dans 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/Map ne fonctionnaient pas à ces endroits, et leur utilisation entraînait une exception du type State 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 table system.disks pour 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 utiliser FZF_DEFAULT_OPTS/SKIM_DEFAULT_OPTIONS pour 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 existante tryBase64Decode. #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.errors si 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_functions afin de renvoyer des résultats de type DateTime64 pour les fonctions toStartOfDay, toStartOfHour, toStartOfFifteenMinutes, toStartOfTenMinutes, toStartOfFiveMinutes, toStartOfMinute et timeSlot. #41910 (Roman Vasin).
  • Amélioration de l’inférence du type DateTime pour les text formats. Désormais, elle respecte le paramètre date_time_input_format et 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 pour count(*). 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).
  • parseDataTimeBestEffort prend 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 Date32 pour 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 Date32 pour la fonction dateName. #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_CRONFILE pour éviter d’exécuter la commande sed et d’obtenir une erreur « file not found » lors de l’installation. #42081 (Chun-Sheng, Li).
  • Mise à jour de cctz vers 2022e pour 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 LowCardinality avec 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 run si https_port n’é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 BY ou GROUP BY sur 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ètres optimize_read_in_order et optimize_aggregation_in_order). #41701 (Anton Popov).
  • Corrige un plantage possible lors d’un SELECT sur une table Merge avec le paramètre optimize_monotonous_functions_in_order_by activé. 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 ReplicatedMergeTree si 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_credentials pour 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 ReplicatedMergeTree de démarrer la réplication. Corrige #40957. #41981 (Alexander Tokmakov).
  • toDateTime64 renvoie 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 bzip2 pour certains fichiers bzip2. #42046 (Nikolay Degterinsky).
  • Correction de la fonction SQL toLastDayOfMonth avec 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=read avec 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 runningDifference lorsqu’elle est utilisée avec le type Date32. Auparavant, Date était utilisé, ce qui pouvait provoquer des erreurs logiques comme Bad 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ètre aggregate_functions_null_for_empty dans la config du serveur. Cela clôt #41647. #42198 (Alexey Milovidov).
  • Correction de la lecture depuis les tables Buffer avec lecture en ordre décroissant. #42236 (Duc Canh Le).
  • Correction d’un bug qui empêchait ClickHouse de démarrer lorsque background_pool_size setting est défini dans le profil default mais que background_merges_mutations_concurrency_ratio ne l’est pas. #42315 (nvartolomei).
  • ALTER UPDATE d’une part attachée (avec des colonnes différentes du schéma de la table) pouvait créer sur le disque des métadonnées columns.txt invalides. 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_filters n’était pas appliqué au moteur Distributed. 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).
  • AggregateFunctionQuantile fonctionne désormais correctement avec les colonnes UInt128. Auparavant, l’état de quantile interprétait les colonnes UInt128 comme Int128, 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 Annoy sur des colonnes non Float32. Les indexes Annoy sont 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_Cast et accurate_CastOrNull (elles se distinguent de accurateCast et accurateCastOrNull par le caractère de soulignement dans leur nom et ne sont pas affectées par la valeur du paramètre cast_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 MeiliSearch en meilisearch. #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 DISTINCT et EXCEPT DISTINCT. #40792 (Duc Canh Le).
  • Ajout du nouveau format d’entrée/sortie JSONObjectEachRow - Prise en charge de l’import pour les formats JSON/JSONCompact/JSONColumnsWithMetadata. Ajout du nouveau paramètre input_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ètre input_format_json_validate_utf8 qui, lorsqu’il est activé, valide les séquences UTF-8 dans tous les formats JSON. Il est désactivé par défaut. Notez que ce paramètre n’a aucune incidence sur les formats de sortie JSON/JSONCompact/JSONColumnsWithMetadata, qui valident toujours les séquences UTF-8 (cette exception a été introduite pour des raisons de compatibilité). - Ajout du nouveau paramètre input_format_json_read_numbers_as_strings qui permet d’analyser des nombres dans une colonne String ; ce paramètre est désactivé par défaut. - Ajout du nouveau paramètre output_format_json_quote_decimals qui 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_size lors 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_order lorsque certaines colonnes de la clé de tri sont toujours constantes après application de la clause WHERE. Par exemple, pour une query comme SELECT ... FROM table WHERE a = 'x' ORDER BY a, b, où table a pour définition de stockage : MergeTree ORDER BY (a, b). #38715 (Anton Popov).
  • Filtrage mutuel des streams joints pour full_sorting_join avant 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 copy natif lorsque possible, au lieu de copier via la mémoire de clickhouse-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, uniqState depuis 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 ReplicatedMergeTree seront 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_functions pour 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 par catboostEvaluate(). #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 SETTINGS dans les requêtes DELETE .... #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 : NumberOfDetachedParts et NumberOfDetachedByUserParts. #40779 (Sema Checherinda).
  • Autorisation des CONSTRAINTs pour les tables ODBC et JDBC. #34551 (Alexey Milovidov).
  • Ne plus afficher SETTINGS plus 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_host uniquement 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 --structure désormais facultatif. #40120 (Nikolay Degterinsky).
  • Amélioration et correction des Dictionaries au format Arrow. #40173 (Kruglov Pavel).
  • Conversion plus naturelle de Date32, DateTime64 et Date vers 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 Merge sur View ne 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 Date comme DateTime et DateTime64. Cela met en œuvre l’amélioration proposée dans #36949. #40474 (Alexey Milovidov).
  • Autorise la conversion d’une String contenant un DateTime64, comme 2022-08-22 01:02:03.456, vers Date et Date32. Autorise également la conversion d’une String contenant un DateTime, comme 2022-08-22 01:02:03, vers Date32. 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 %z pour formater le décalage de fuseau horaire dans formatDateTime. #40736 (Cory Levy).
  • Le mode interactif de clickhouse-client interprè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 DELETE et UPDATE pour le moteur de stockage EmbeddedRocksDB. #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_files de 1 à 0, puis de 0 à 1. #41330 (Kseniia Sumarokova).
  • Ajouter le paramètre allow_suspicious_fixed_string_types pour empêcher les utilisateurs de créer des colonnes de type FixedString d’une taille > 256. #41495 (Duc Canh Le).
  • Ajouter has_lightweight_delete dans 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-local en 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 dlopen du code principal de ClickHouse. Il reste dans library-bridge et odbc-bridge. #41428 (Alexey Milovidov).
  • Ne pas autoriser dlopen dans 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 source aux paquets deb, mettre à jour nfpm. #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 debug et tsan #35262 (Kseniia Sumarokova).
  • Essais de stress sur S3 #36837 (alesapin).
  • Activer concurrency-mt-unsafe dans clang-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 categorialInformationValue avait 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 ORC peut entraîner un dépassement de tampon. #41458 (Alexey Milovidov).
  • Corrige des problèmes de sûreté mémoire avec les fonctions encrypt et contingency lorsqu’un Array de Nullable est 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 Nested manquantes à 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 Buffer ré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’utiliser OvercommitTracker, car ProcessList::mutex est 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_regexp ne 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 autres DESCRIBE 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_order et join_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 OFFSET dans une sous-requête et une clause WHERE dans 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_key est 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 COLUMN avec des colonnes de type Object. #41290 (Anton Popov).
  • Corrige l’erreur « No node » lors d’un SELECT depuis system.distributed_ddl_queue lorsqu’il n’y a pas de distributed_ddl.path dans la configuration. Fixes #41096. #41296 (young scott).
  • Corrige l’erreur logique incorrecte Expected relative path dans 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_insert activé) de données mal formées dans des colonnes de type Object. 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 CLUSTER est ignorée si la base de données est Replicated et que le nom du cluster et celui de la base de données sont identiques. Par conséquent, DROP PARTITION ON CLUSTER fonctionnait de manière inattendue avec Replicated. Ce problème est corrigé : désormais, la clause ON CLUSTER n’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 QUERY ou 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 BY et 1500 <= LIMIT <= max_block_size pouvaient 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 stuck pour les requêtes avec OFFSET. L’erreur a été constatée avec enable_optimize_predicate_expression = 0 et une condition toujours fausse dans WHERE. Corrige #41383. #41588 (Nikolai Kochetov).

Release ClickHouse 22.8, du 2022-08-18. Présentation, Vidéo

Changement rétro-incompatible

  • La plage de Date32 et DateTime64 a é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 valeur 1899-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 avec toStartOfInterval si vous passez INTERVAL 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 statistique rows_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 s3Cluster vers des tables utilisant les moteurs Distributed et Replicated #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érer Int64 au lieu de Float64. - 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 fonction now64InBlock ni todayInBlock. #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 Ordinary vers Atomic. Créez un fichier vide convert_ordinary_to_atomic dans le répertoire flags et toutes les bases de données Ordinary seront 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_limit pour 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 SLRU pour 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).
  • DISTINCT dans l’ordre avec ORDER 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 de DistinctSortedChunkTransform pour le distinct final lorsque les colonnes DISTINCT correspondent aux colonnes ORDER BY, avec renommage en DistinctSortedStreamTransform dans EXPLAIN PIPELINE → cela améliore significativement l’utilisation mémoire + suppression des allocations inutiles dans la boucle critique de DistinctSortedChunkTransform. #39432 (Igor Nikonov). Utiliser DistinctSortedTransform uniquement lorsque la description de tri s’applique aux colonnes DISTINCT, sinon revenir à l’implémentation DISTINCT classique + cela permet de réduire le nombre de vérifications pendant l’exécution de DistinctSortedTransform. #39528 (Igor Nikonov). Correctif : DistinctSortedTransform ne 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 un DISTINCT classique (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 cluster et 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 AggregateFunction et des représentations d’état, car des optimisations comme #35788 traiteront count(not null columns) comme count(), 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 colonne internal, possibilité pour l’utilisateur de définir l’ID de l’opération, ajout des colonnes num_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êtes CREATE TABLE ... ON CLUSTER peuvent d’abord être normalisées sur l’initiateur si distributed_ddl_entry_format_version est défini sur 3 (valeur par défaut). Cela signifie que les requêtes ON CLUSTER peuvent ne pas fonctionner si l’initiateur n’appartient pas au cluster spécifié dans la requête. Corrige #37318, #39500 - Ignorer la clause ON CLUSTER si la base de données est Replicated et que le nom du cluster est identique à celui de la base de données. En lien avec #35570 - Divers correctifs mineurs pour le database engine Replicated - Vérifier la cohérence des métadonnées au démarrage de la base de données Replicated, 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).
  • timeSlots fonctionne 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 SEMI et LEFT ANTI avec les tables EmbeddedRocksDB. #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 --save et --load pour 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, true par défaut. #39755 (Antonio Andelic).
  • Prise en charge de l’analyse de clé primaire pour row_policy_filter et additional_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_log avec 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-benchmark s’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 --randomize de --randomize 1 vers 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 = break et throw). Par exemple, si vous avez configuré max_rows_to_read avec read_overflow_mode = 'break', examiner la valeur du compteur OverflowBreak permettra 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 : FilesystemCacheSize et FilesystemCacheElements. #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 comme conf, 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.sh dans l’image Docker crée et exécute chown pour 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 IN est utilisé avec une table en ENGINE = Set contenant 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 Tuple vide. Clôt #39051. Ajoute 2 nouveaux paramètres input_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 Object dans 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') lorsque O_DIRECT est activé (via le paramètre min_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 INDEX avec ON CLUSTER ou avec une database Replicated et ReplicatedMergeTree. 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 pas CURRENT 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 avec ROWS 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_string et output_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 default lors 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 meta du 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 EmbeddedRocksDB par 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_DATA avec local_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 mkdir NFS 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 hashId et du fait que le paramètre salt n’était pas utilisé. #40002 (Raúl Marín).
  • Les opérateurs EXCEPT et INTERSECT peuvent 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épertoire tmp-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 arrayDifference pour `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_arguments par défaut. Il permet des requêtes comme SELECT ... 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_quotes par défaut. Voir #37096. (Kruglov Pavel).
  • Le moteur de base de données Ordinary et l’ancienne syntaxe de définition du stockage pour les tables *MergeTree sont obsolètes. Par défaut, il n’est pas possible de créer de nouvelles bases de données avec le moteur Ordinary. Si la base de données system utilise le moteur Ordinary, elle sera automatiquement convertie en Atomic au démarrage du serveur. Il existe des paramètres pour conserver l’ancien comportement (allow_deprecated_database_ordinary et allow_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éfinissez cross_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 direct pour les tables EmbeddedRocksDB, 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 table MongoDB. #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ètre additional_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 compatibility et de la table système system.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) et translateUTF8(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 exemple 1yr-2mo ou 2m: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_server et max_remote_write_network_bandwidth_for_server. #39095 (Sergei Trifonov).
  • Ajout du paramètre group_by_use_nulls pour 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, multiMatchAllIndices et leurs variantes approximatives acceptent désormais un argument de tableau de motifs non constant. #38485 (Robert Schulze). La fonction SQL multiSearchAllPositions accepte désormais des arguments needle non constants. #39167 (Robert Schulze).
  • Ajout du paramètre zstd_window_log_max pour 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 ALTER pour les tables Hive. #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 url via SQL. Clôt #37897. #38176 (Kseniia Sumarokova).
  • Ajout du binaire clickhouse-diagnostics aux paquets. #38647 (Mikhail f. Shiryaev).

Fonctionnalité expérimentale

  • Ajoute le nouveau paramètre implicit_transaction pour 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 merges MergeTree et des fonctions de fenêtre grâce à la version batch de BinaryHeap. #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 copyOverlap32Shuffle optimisé 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 que ORDER 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_trace lorsque 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_log a é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_names pour é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).
  • 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_defined lors 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 dans store/ (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 CACHE pour afficher les paramètres du cache issus de la config. Ajoute la requête SHOW CACHES pour 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).
  • filesystemAvailable et des fonctions similaires fonctionnent désormais dans clickhouse-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 file dans clickhouse client / local (comme \i dans psql). #38813 (Kseniia Sumarokova).
  • Nouvelle option optimize = 1 dans EXPLAIN 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 struct dans StorageHive. #38118 (lgbo).
  • Les objets S3 individuels sont désormais supprimés avec RemoveObjectRequest. Compatibilité ajoutée avec GCP, qui ne permettait pas d’utiliser removeFileIfExists, ce qui cassait en pratique environ la moitié de la fonctionnalité de remove. Détection automatique de l’API S3 DeleteObjects, non prise en charge par GCS. Cela permettra d’utiliser GCS sans définir explicitement support_batch_delete=0 dans 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_close pour la connexion du moteur PostgreSQL. Résout #31486. #38363 (Kseniia Sumarokova).
  • Autorise le modificateur NULL dans la déclaration des colonnes pour les fonctions de table. #38816 (Kruglov Pavel).
  • Désactive mutations_finalizing_task avant l’arrêt afin d’éviter les erreurs bénignes TABLE_IS_READ_ONLY pendant 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 rewrite dans EXPLAIN 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’outil clickhouse-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.errors lorsque le disque n’est pas rotatif. #39216 (Raúl Marín).
  • La métrique result_bytes pour les requêtes INSERT dans system.query_log affiche désormais le nombre d’octets insérés. Auparavant, sa valeur était incorrecte et identique à celle de result_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’argument needle est vide. #39012 (Robert Schulze).
  • Autoriser la déclaration d’une queue RabbitMQ sans les arguments par défaut x-max-length et x-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/Decimal256 avec 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, mapFilter lors de l’utilisation d’un argument map constant. Clôt #38547. #38553 (hexiaoting).
  • Corrige les informations de monotonie de toHour pour 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_directory pour 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 LowCardinality dans la fonction tuple. Auparavant, le type LowCardinality était supprimé et les éléments du tuple créé prenaient le type sous-jacent de LowCardinality. #39113 (Anton Popov).
  • Correction de l’erreur Block structure mismatch qui pouvait survenir lors d’un INSERT dans une table avec une MATERIALIZED VIEW attachée et le paramètre extremes = 1 activé. Closes #29759 and #38729. #39125 (Nikolai Kochetov).
  • Correction d’un résultat de requête inattendu lorsque optimize_trivial_count_query et empty_result_for_aggregation_by_empty_set sont tous deux définis sur true. Ceci corrige #39140. #39155 (Amos Bird).
  • Correction de l’erreur Not found column Type in block dans les requêtes SELECT avec PREWHERE et 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 MergeTree qui stockent leurs données dans S3. #37978 (Anton Popov).
  • Corrige un crash possible dans Distributed async 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 (a Tuple(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 Chunk dans 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 DISTINCT et LIMIT. 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 rankCorr fonctionnera correctement si certains arguments sont des NaN. Cela clôt #38396. #38722 (Alexey Milovidov).
  • Correction de parallel_view_processing=1 avec optimize_trivial_insert_select=1. Correction de max_insert_threads lors 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 seconds comme 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 avec ROLLUP, CUBE ou GROUPING 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, ILIKE et match. #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 table system.part&#95;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-disks pour 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 SALT explicite est autorisée pour CREATE 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_lines pour permettre d’ignorer un nombre spécifié de lignes au début du fichier dans les formats CSV/TSV. #37537 (Kruglov Pavel).
  • La fonction showCertificate affiche 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 POPULATE pour WINDOW VIEW. #36945 (vxider).
  • Prise en charge de ALTER TABLE ... MODIFY QUERY pour WINDOW VIEW. #37188 (vxider).
  • Cette PR modifie le comportement de la syntaxe ENGINE dans WINDOW VIEW pour l’aligner sur celui de MATERIALIZED 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_fields par 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_serialization dans les tables MergeTree) 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 multiIf par if lorsque multiIf n’a qu’une seule condition, car la fonction if est plus performante. #37695 (Anton Popov).
  • Amélioration des performances des fonctions dictGetDescendants et dictGetChildren : 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écifier BIDIRECTIONAL pour les attributs HIERARHICAL ; le dictionnaire maintiendra alors en mémoire un index parent-enfants, ce qui évitera aux fonctions dictGetDescendants et dictGetChildren de 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 100 est 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 hasAll grâce à l’infrastructure de dispatch dynamique. #37484 (Maksim Kita).
  • Améliore les performances des fonctions greatCircleAngle, greatCircleDistance et geoDistance. #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 not grâ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 threadpool au 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 _file et _path lors 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 est false. #37327 (Kruglov Pavel).
  • Applique le paramètre input_format_max_rows_to_read_for_schema_inference au nombre total de lignes lues à partir de tous les fichiers correspondant aux globs. Auparavant, le paramètre input_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 les input_format_max_rows_to_read_for_schema_inference premiè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 CLUSTER distinct (ainsi que de la directive de configuration access_control_improvements.on_cluster_queries_require_cluster_grant, pour assurer la rétrocompatibilité, avec false comme 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_used pour 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-Summary lorsque send_progress_in_http_headers=0 (auparavant, il renvoyait uniquement des zéros). - Modifie l’endpoint HTTP pour renvoyer l’en-tête X-ClickHouse-Exception-Code lorsque la progression a déjà été envoyée (send_progress_in_http_headers=1) - Modifie l’endpoint HTTP pour renvoyer HTTP_REQUEST_TIMEOUT (408) au lieu de HTTP_INTERNAL_SERVER_ERROR (500) en cas d’erreurs TIMEOUT_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 type Nothing ; désormais, ces requêtes renvoient un tableau vide de type Array(Nothing). Ajout également de la prise en charge des tableaux de types nullable dans des fonctions comme arrayFilter/arrayFill. Auparavant, des requêtes comme select 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 NULL juste 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 sur OvercommitTracker au message d’exception OOM. Ajoute l’événement de profile MemoryOvercommitWaitTimeMicroseconds. #37460 (Dmitry Novik).
  • N’affiche pas le temps CPU -0.0 dans 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 ProfileEvents pour 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 colonne part_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 dumpColumnStructure en 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_delete pour DiskS3 afin 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, dictGetDescendants prennent désormais en charge l’attribut nullable HIERARCHICAL dans 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_tmp au 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_part est 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 OPTION permet désormais à A d’exécuter GRANT CREATE VIEW ON test.* TO B. #38017 (Vitaly Baranov).

Amélioration de la compilation/des tests/du packaging

  • Utilisation de clang-14 et de l’infrastructure LLVM version 14 pour la compilation. Clôt #34681. #34754 (Alexey Milovidov). Remarque : clang-14 a 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 ... INTERSECT et EXCEPT SELECT avec des types de chaînes constants. #37738 (Antonio Andelic).
  • Correction de GROUP BY AggregateFunction (c.-à-d. lorsque GROUP BY est appliqué à une colonne de type AggregateFunction). #37093 (Azat Khuzhin).
  • (experimental WINDOW VIEW) Correction de addDependency dans 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 addDependency du constructeur vers startup() 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_ratio sont spécifiées dans config.xml (nouvelle méthode) plutôt que dans users.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_order avec GROUPING SETS (corrige LOGICAL_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 FILL avec des intervalles négatifs dans la clause STEP. 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_by dans les requêtes distribuées. Corrige #36037. #37724 (Anton Popov).
  • Correction d’une possible erreur logique : Invalid Field get from type UInt64 to type Float64 dans la fonction de table values. 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_ms de 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_requests est 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 QUERY dans 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 FILL lorsque ORDER BY doit être appliqué après le résultat de WITH FILL (par exemple, pour une requête externe). Le résultat incorrect était causé par l’optimisation des expressions ORDER 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 DateTime64 avant 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 OPTIMIZE n’incrémentent plus les métriques SelectedRows et SelectedBytes. En revanche, ils continuent d’incrémenter MergedRows et MergedUncompressedBytes, 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-cfb128 et aes-256-cfb128 ont été supprimés, car ils ne font pas partie de la version certifiée FIPS de BoringSSL.
  • Le paramètre max_memory_usage a été supprimé du profil utilisateur par défaut dans users.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_threads est 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 dans query_thread_log est devenue trop lourde. #37077 (Alexey Milovidov).
  • La fonction groupArraySorted a é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, h3Distance et h3HexRing. #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_rows et total_bytes dans system.tables pour les tables temporaires. #36401. #36439 (xiedeyantu).
  • Permettre de remplacer parts_to_delay_insert et parts_to_throw_insert par 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 WATCH dans WindowView : 1. Réduction de la latence de mise à disposition des résultats de requête en appelant le signal fire_condition. 2. Accélération de l’opération d’annulation de requête (ctrl-c) en vérifiant isCancelled() 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 option FORCE. #36639 (Kseniia Sumarokova).
  • Amélioration des données semi-structurées : permet de convertir des colonnes de type Object(...) en Object(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 avg et sum lorsqu’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 champ event_time_microseconds a é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 File et les fonctions de table file lorsque 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 HashJoin par 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 t en select 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, s3 et url. #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&#95;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_table permet d’ignorer le mot-clé AUTO_INCREMENT dans une déclaration de colonne afin de simplifier la migration depuis MySQL. #37178 (Igor Nikonov).
  • Ajoute les alias JSONLines et NDJSON pour JSONEachRow. 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 h3kRing afin d’en améliorer l’utilisation. Ferme #35432. #37189 (Maksim Kita).
  • Corrige l’indication de progression pour INSERT SELECT dans clickhouse-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_size sont devenus obsolètes et peuvent apparaître au niveau supérieur de la configuration, mais ClickHouse levait une exception du type Error 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.processes et 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 CLUSTER distinct (et de la directive de configuration access_control_improvements.on_cluster_queries_require_cluster_grant, conservée pour la rétrocompatibilité et définie par défaut sur false). #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 utiliserions google.protobuf.StringValue test dans 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_type dans la configuration des gestionnaires HTTP prédéfinis et statiques. #34916 (Roman Nikonov).
  • Avertissement approprié lors de l’utilisation de clickhouse-client —file sans --external au 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-keeper pour l’architecture x86_64 est lié statiquement à musl et ne dépend d’aucune bibliothèque système. #31833 (Alexey Milovidov).
  • Les builds de ClickHouse pour l’architecture PowerPC64LE sont désormais disponibles via le script d’installation universel curl https://clickhouse.com/ | sh et par lien direct https://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 ID de l’URI s’il est présent, puis réassembler l’URI sans celui-ci. - [x] Configurer l’objet AWS HTTP URI avec 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 type Object dans l’expression WHERE des requêtes UPDATE ou DELETE est 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_watermark une 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 EVENTS ne sera plus interrompue à cause du Chunk non vide créé dans WindowViewSource.h:58. #37182 (vxider).
  • Active enable_global_with_statement pour 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 BY AggregateFunction (c.-à-d. lorsque vous faites un GROUP BY sur une colonne de type AggregateFunction). #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 BY ordonné (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 TRUNCATE dans la base de données Replicated. 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 writeIntoWindowView avec 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_size dans 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 colonnes Nested non 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 function file avec 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/groupBitmapXorState sur 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 column pouvait ê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 CREATE lorsque 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 de INTERPOLATE avec une table ENGINE = MergeTree. #36549 (Yakov Olkhovskiy).
  • Correction d’une erreur potentielle liée aux littéraux dans WHERE pour 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_enabled pour 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 ClickHouseDictionarySource s’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 colonne n.d). #35797 (Azat Khuzhin).
  • Correction de l’erreur de plage de longueur dans la fonction substring lorsque offset et length sont des constantes négatives et que s n’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 en kostikConsistentHash. 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 table system.processors_profile_log le 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 BYTES pour limiter le volume d’octets écrits lors des requêtes d’insert. #35736 (Anton Popov).
  • Ajout de la fonction flattenTuple. Elle prend en argument un Tuple nommé imbriqué et renvoie un Tuple aplati dont les éléments sont les paths du Tuple d’origine. Par ex. : Tuple(a Int, Tuple(b Int, c Int)) -> Tuple(a Int, b Int, c Int). flattenTuple peut être utilisée pour sélectionner tous les paths du type Object comme colonnes distinctes. #35690 (Anton Popov).
  • Ajout des fonctions arrayFirstOrNull, arrayLastOrNull. Résout #35238. #35414 (Maksim Kita).
  • Ajout des fonctions minSampleSizeContinous et minSampleSizeConversion. Auteur : achimbab. #35360 (Maksim Kita).
  • Nouvelles fonctions minSampleSizeContinous et minSampleSizeConversion. #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 : permissive et restrictive. Une politique de lignes simple ajoute 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 fonctions toStartOf[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 MergeTree simples. 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 Object au format JSONEachRow. Permet de convertir des colonnes de type Map en colonnes de type Object. #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ête drop remote filesystem cache. Ajout de l’introspection des métadonnées S3 avec la table system.remote_data_paths. Résout #34021. Ajout d’une option de cache pour les merges, avec le mode read_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 BY lorsque c’est possible. Par exemple, pour la requête SELECT sipHash64(number) FROM numbers(1e8) ORDER BY number LIMIT 5, la fonction sipHash64 serait évaluée après ORDER BY et LIMIT, 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_threads et max_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_threads et max_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_inference pour 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ètre column_names_for_schema_inference pour 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 de s3 et s3Cluster. #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_matching et input_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_consumers peut ê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 SETTING sur des paramètres inexistants pour la famille de moteurs MergeTree. Corrige #35816. #35884 (alesapin).
  • Désormais, certaines requêtes ALTER MODIFY COLUMN sur les types Arrays et Nullable peuvent être effectuées au niveau des métadonnées, sans mutation. Par exemple, passer de Array(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 select lors de l’utilisation de la fonction de table input. 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’un insert select depuis des fonctions de table prenant en charge l’inférence de schéma. Clôture #35639. #35760 (Kruglov Pavel).
  • Respecte remote_url_allow_hosts pour les tables Hive. #35743 (李扬).
  • Implémente send_logs_level pour clickhouse-local. Clôture #35653. #35716 (Kseniia Sumarokova).
  • Clôture #35641. Autorise les colonnes EPHEMERAL sans expression par défaut explicite. #35706 (Yakov Olkhovskiy).
  • Ajoute le compteur d’événements de profil AsyncInsertBytes pour 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_remote ou use_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_service sur 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, --port pour l’outil clickhouse-diagnostics. #35422 (李扬).
  • Prendre en charge uuid pour les moteurs Postgres. Clôt #35384. #35403 (Kseniia Sumarokova).
  • Pour la fonction de table s3cluster, HDFSCluster ou hive, il était impossible d’obtenir le bon AccessType via StorageFactory::instance().getSourceAccessType(getStorageTypeName()). Cette PR corrige le problème. #35365 (李扬).
  • Supprimer l’option --testmode de 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 port n’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 minmax pour 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 COMMENT dans la déclaration ENGINE. Clôt #33768. #34536 (Maksim Kita).
  • Prise en charge correcte du paramètre max_rows_to_read lors d’une lecture dans l’ordre de la clé de tri avec une limite spécifiée. Auparavant, l’exception Limit for rows or bytes to read exceeded pouvait ê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 script release au profit de packages/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 prefix/lib/prefix/lib/bin_dir/clickhouse/$binary.debug) - correction d’un problème avec les symboles DWARF - ajout des paquets Alpine APK - renommage de alien en additional_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 black au 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:head et clickhouse/clickhouse-keeper:head pour 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_error pour 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_log car 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 Object lorsqu’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_COLUMNS lorsque 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 granule lors de la lecture des sous-colonnes du type expérimental Object. #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_hosts avant l’inférence de schéma dans le moteur URL. Ferme #35064. #35619 (Kruglov Pavel).
  • Corriger HashJoin lorsque des colonnes de type LowCardinality sont 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_synchronously fonctionnait incorrectement pour la requête ATTACH TABLE lorsqu’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 throwIf avec 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 if lorsque le type de colonne résultant diffère du type de données résultant, ce qui entraînait des erreurs logiques comme Logical 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 exceeded pendant INSERT en ajoutant max_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 arrayCompact se 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 dans arrayCompact, vous pouvez rétablir l’ancien comportement en enveloppant les arguments de arrayCompact dans arrayMap. 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') et cast(value, 'IPv6') se comportent de la même manière que toIPv4 et toIPv6. Le comportement en cas d’adresse IP incorrecte passée aux fonctions toIPv4 et toIPv6 a é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 fonctions IPv4StringToNumOrDefault, toIPv4OrDefault, toIPv6OrDefault doivent être utilisées si la logique précédente reposait sur le fait que IPv4StringToNum, toIPv4, toIPv6 renvoyaient 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 fichiers s3 et, 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 exemple SELECT * 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.zookeeper sans restriction sur le chemin ni via une expression like. Ces lectures peuvent générer une charge assez importante pour ZooKeeper ; pour activer cette possibilité, vous devez activer le paramètre allow_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 startsWith et endsWith pour 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. mapFilter 3. 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_USER et CLICKHOUSE_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.key2 ou avec l’opérateur de transtypage data.key1.key2::Int64.
  • Ajout du paramètre database_replicated_allow_only_replicated_engine. Lorsqu’il est activé, seules les tables Replicated ou les tables avec des engines sans état peuvent être créées dans des bases de données Replicated. #35214 (Nikolai Kochetov). Notez que la base de données Replicated reste une fonctionnalité expérimentale.

Amélioration des performances

  • Amélioration des performances de l’insertion dans les tables MergeTree grâ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 dictionnaire direct si sa source est ClickHouse. Amélioration des performances des fonctions detectCharset , detectLanguageUnknown . #34888 (Maksim Kita).
  • Amélioration des performances de la fonction d’agrégation any grâ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 AST peut 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 sur application/xml en 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 POLICY affichera toujours AS permissive ou AS restrictive dans 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_password et allow_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 DateTime64 dans le format Arrow, 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 --testmode pour clickhouse-local. Ce paramètre active l’interprétation des indications de test utilisées dans les tests fonctionnels. #35264 (Kseniia Sumarokova).
  • Ajoute distributed_depth au query log. Il s’agit d’une variante plus détaillée de is_initial_query. #35207 (李扬).
  • Respect de remote_url_allow_hosts pour les fonctions de table MySQL et PostgreSQL. #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 table view(). #35132 (Azat Khuzhin).
  • Suivi mémoire plus précis lors des INSERT dans Buffer avec AggregateFunction. #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 TTL par colonne dans CREATE TABLE AS si le nouveau moteur de table ne le prend pas en charge (c.-à-d. si le moteur n’appartient pas à la famille MergeTree). #34938 (Azat Khuzhin).
  • Autoriser les chaînes LowCardinality pour les index ngrambf_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_usage fonctionne 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 columnX pour les moteurs de table MergeTree fonctionneront désormais instantanément lorsque columnX est une colonne ALIAS. 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() pour parallel_distributed_insert_select. #34728 (Azat Khuzhin).
  • Ne réinitialise pas la journalisation configurée via les options de ligne de commande --log-file/--errorlog-file en 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 charge materialized_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 ctime et mtime du 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 HadoopSnappyDecoder s’exécute plusieurs fois (>=3) pour un même bloc compressé. Les données d’entrée sont alors copiées au mauvais emplacement dans HadoopSnappyDecoder::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()' failed lors de l’utilisation de la compression bzip2 avec une faible valeur du paramètre max_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ètre max_read_buffer_size. #35295 (Kruglov Pavel). Lors de l’utilisation de la compression brotli avec une faible valeur du paramètre max_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 TABLE lorsque 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 TOTALS lorsque HAVING renvoie 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 overrides de 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_in pour les colonnes signées et les valeurs négatives. #35134 (Azat Khuzhin).
  • L’option de configuration update_lag du dictionnaire externe était inutilisable et affichait le message d’erreur Unexpected 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_subcolumns est activé. Corrige #33798. #35079 (qieqieplus).
  • Correction de la lecture depuis la table system.asynchronous_inserts s’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 in dans where dans 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 INSERT dans 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 directory avec fsync_part_directory activé et la fusion verticale. #34739 (Azat Khuzhin).
  • Corrige la sérialisation/l’affichage des requêtes système RELOAD MODEL, RELOAD FUNCTION, RESTART DISK lorsqu’elles sont utilisées avec ON CLUSTER. Clôt #34514. #34696 (Maksim Kita).
  • Corrige allow_experimental_projection_optimization avec enable_global_with_statement (auparavant, cela pouvait entraîner l’erreur Stack size too large en cas d’expressions multiples dans la clause WITH, 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 count triviale lorsque la fonctionnalité de déplacement de parts est utilisée #34089. #34385 (nvartolomei).
  • Corrige l’incohérence de la limite max_query_size dans 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_final a é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_optimization est 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é dans HDFS. Une exception est levée par défaut en cas de tentative d’écrasement d’un fichier dans S3. 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, comme Parquet, 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é DEFAULT pour les instructions INSERT. Clôt #6331. #33141 (Andrii Buriachevskyi).
  • Le spécificateur de colonne EPHEMERAL est ajouté à la requête CREATE TABLE. Clôt #9436. #34424 (yakov-olkhovskiy).
  • Prise en charge de la clause IF EXISTS pour 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ègles MOVE TTL pourront 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 DEGREES et RADIANS pour 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 bitSlice pour 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ètres guaranteed pour les limites mémoire, qui représentent des limites mémoire souples. Lorsque la limite mémoire stricte est atteinte, MemoryTracker essaie d’annuler la requête la plus en surallocation. Le nouveau paramètre memory_usage_overcommit_max_wait_microseconds spé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, TIME et GEOMETRY dans MaterializedMySQL (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_order si le préfixe de la clé de tri est déjà trié. Par ex., si une table a pour clé de tri ORDER BY (a, b) et qu’une requête contient les clauses WHERE 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).
  • FlatDictionary amé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 _file et _path (dans les moteurs de table de type fichier) passent en LowCardinality, 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_threads n’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 utiliser nth_element au lieu de sort. #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 BY presque aussi rapides que les colonnes dans ORDER BY. Il existe des optimisations spécifiques pour ORDER BY sur 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 BY grâce à la prise en charge d’AVX-512 sur x86-64 pour les fonctions memcmpSmall, 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_hashed lorsqu’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 Keeper et correction de plusieurs fuites de mémoire dans la bibliothèque NuRaft. #33329 (alesapin).

Amélioration

  • Prise en charge des inserts asynchrones dans clickhouse-client pour les requêtes avec données intégrées. #34267 (Anton Popov).
  • Les fonctions dictGet et dictHas convertissent 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 intervalles start et end sont de type Nullable ; convert_null_range_bound_to_open vaut true par défaut. Résout #29791. Il est désormais possible d’utiliser Float, Decimal, DateTime64, Int128, Int256, UInt128, UInt256 comme types de plage. RangeHashedDictionary prend désormais en charge les valeurs de plage qui étendent le type Int64. Résout #28322. Ajout de l’option range_lookup_strategy pour spécifier le type de recherche de plage, min ou max, avec min par défaut. Résout #21647. Correction du calcul des octets alloués. Correction du nom de type dans system.dictionaries dans le cas de ComplexKeyHashedDictionary. #33927 (Maksim Kita).
  • Les dictionnaires flat, hashed et hashed_array prennent 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 de dictHas. Corrige #33820. #33918 (Maksim Kita).
  • Ajout de la prise en charge du type de données DateTime64 dans 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-client pour ce type de requêtes). #34498 (Dmitry Novik).
  • Prise en charge de l’extension .jsonl pour 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 s3 des fichiers de taille arbitrairement grande. Ajout de deux nouveaux paramètres : s3_upload_part_size_multiply_factor et s3_upload_part_size_multiply_parts_count_threshold. Désormais, chaque fois que le nombre de parts envoyées vers S3 par une seule query atteint s3_upload_part_size_multiply_parts_count_threshold, s3_min_upload_part_size est multiplié par s3_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_MATCHES et REGEXP_REPLACE pour la compatibilité avec PostgreSQL. Clôt #30885. #34334 (李扬).
  • Certains serveurs attendent un en-tête User-Agent dans leurs HTTP request. Un en-tête User-Agent a é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’erreur DEADLOCK_AVOIDED dans 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-hhmmss dans la fonction parseDateTimeBestEffort. 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 KEY du dictionnaire sous la forme PRIMARY KEY (id, value) ; auparavant, seule la forme PRIMARY KEY id, value était prise en charge. Clôt #34135. #34141 (Maksim Kita).
  • Ajoute un argument facultatif à splitByChar pour 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 UUID dans le format d’entrée/sortie MsgPack. #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 SYSTEM avec la clause ON 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) renverra EXPLAIN AST CREATE FUNCTION mycast AS n -> CAST(n, 'String'). #33819 (李扬).
  • Ajoute la prise en charge du cast de Map(Key, Value) vers Array(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 en Int64. Cela clôt le ticket : #14648. #33505 (Andrey Zvonov).
  • Réimplémentation de _shard_num à partir de constantes (voir #7624) avec la fonction shardNum() (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_ms de ClickHouse Keeper. Désormais, ClickHouse Keeper déterminera le délai d’expiration de la session client en fonction des paramètres min_session_timeout_ms et session_timeout_ms. #33288 (JackyWoo).
  • Ajout de la prise en charge du type de données UUID pour les fonctions hex et bin. #32170 (Frank Chen).
  • Correction de la lecture des sous-colonnes contenant des points dans leur nom. En particulier, correction de la lecture des colonnes Nested si 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 = 0 lors d’une insertion dans une table avec VALUES. - Correction de view_duration_ms dans le query_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_replicas avec max_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/roundBankers lors 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 de optimize_aggregation_in_order = 1 et distributed_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 mask lors 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 DATABASE pour les bases de données utilisant le moteur Memory. 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, S3 et URL, 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_sec et keeper_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 array et tuple avec des arguments littéraux dans les requêtes distribuées. Auparavant, cela pouvait entraîner l’exception Not found columns. #33938 (Anton Popov).
  • Le combinateur de fonction d’agrégation -If ne traitait pas correctement l’argument de filtre Nullable. 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 readonly sur la requête SYSTEM RESTORE REPLICA lorsque la réplique est en réalité readonly. Corrige #33806. #33847 (tavplubix).
  • Corrige une fuite de mémoire dans clickhouse-keeper lorsque 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 JSONEachRow et JSONCompactEachRow. #33830 (Kruglov Pavel).
  • Corrige l’utilisation des dictionnaires externes avec la source redis et 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 SELECT est 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 de optimize_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 colonne Nested avec 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 lz4 a été corrigé. Clôt #31421. #31862 (Kruglov Pavel).
  • Correction d’un plantage potentiel si group_by_overflow_mode était défini sur any (GROUP BY approximatif) et que l’agrégation était effectuée sur une seule colonne de type LowCardinality. #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 left et right é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 fonctions left ou right sans alias peuvent lever une exception si le cluster contient différentes versions de clickhouse-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 table file, url, s3, hdfs et dans les paramètres de clickhouse-local. Possibilité d’omettre la structure dans la requête CREATE pour les moteurs de table File, HDFS, S3, URL, Merge, Buffer, Distributed et ReplicatedMergeTree (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/url et les moteurs de table HDFS/S3/URL, ainsi que pour SELECT INTO OUTFILE et INSERT 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, theilsU et contingency. 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 de s3Cluster. #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 COMMENT dans CREATE 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 fonction substringUTF8 avec 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 fonction arrayLastIndex. #33465 (Maksim Kita).
  • Ajout de la fonction decodeURLFormComponent, légèrement différente de decodeURLComponent. Résout #10298. #33451 (SuperDJY).
  • Possibilité de séparer les règles de rollup GraphiteMergeTree pour 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ètre optimize_move_to_prewhere) pour les tables du moteur Merge si toutes les tables sous-jacentes prennent en charge PREWHERE. #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 untuple entraî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 Keeper en 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_hashed avec 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 = 1 et max_parallel_replicas sur 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:00 seront 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 SET ou 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_options sur 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).
  • LineAsString peut ê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-benchmark sans 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 PostgreSQL dans 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 authSource pour le stockage MongoDB. Clôt #32594. #32702 (Kseniia Sumarokova).
  • Prise en charge du type Date32 dans la table function genarateRandom. #32643 (nauta).
  • Ajout des paramètres max_concurrent_select_queries et max_concurrent_insert_queries pour 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 Decimal et Float. Corrige #22626. #31966 (flynn).
  • Ajout des paramètres command_read_timeout et command_write_timeout pour StorageExecutable, StorageExecutablePool, ExecutableDictionary, ExecutablePoolDictionary, ExecutableUserDefinedFunctions. Le paramètre command_read_timeout contrôle le délai d’attente pour la lecture des données depuis le stdout de la commande, en millisecondes. Le paramètre command_write_timeout contrôle le délai d’attente pour l’écriture des données vers le stdin de la commande, en millisecondes. Ajout du paramètre command_termination_timeout pour ExecutableUserDefinedFunction, ExecutableDictionary, StorageExecutable. Ajout du paramètre execute_direct pour ExecutableUserDefinedFunction, avec true par défaut. Ajout du paramètre execute_direct pour ExecutableDictionary, ExecutablePoolDictionary, avec false par 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 S3 si le chemin contient des globs. #33142 (Kruglov Pavel).
  • L’option --echo n’était pas utilisée par clickhouse-client en mode batch avec une seule requête. #32843 (N. Kolotov).
  • Utilise l’option --database pour 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_time pour la partie de données dans system.parts aprè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 actionlint pour les workflows GitHub Actions et vérification des fichiers de workflow avec act --list afin 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++ et libc++abi vers 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-server est ouvert en écriture à un attaquant. Des données d’entrée spécialement conçues pour le format Native peuvent entraîner la lecture de mémoire non initialisée ou un crash. Cela concerne les cas où clickhouse-server est 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ées LowCardinality lors de la désérialisation de données LowCardinality au 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 nothing lors 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 Avro apparaissant après la deuxième insertion dans le fichier. #33566 (Kruglov Pavel).
  • Correction d’un segfault dans le format Apache Arrow si le schéma contient le type Dictionary. Clôt #33507. #33529 (Kruglov Pavel).
  • Les paramètres offset et limit hors bande peuvent être appliqués incorrectement aux views. Clôt #33289 #33518 (hexiaoting).
  • Correction d’une exception Block structure mismatch pouvant se produire lors d’une insertion dans une table avec une colonne LowCardinality imbriquée par défaut. Corrige #33028. #33504 (Nikolai Kochetov).
  • Correction des expressions de dictionnaire pour les attributs min et max de plage de range_hashed lorsqu’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 SUSPEND et SYSTEM ... THREAD FUZZER n’étaient pas soumises au contrôle d’accès. C’est corrigé. Auteur : Kevin Michel. #33333 (alexey-milovidov).
  • Correction du cas où COMMENT pour les dictionnaires n’apparaissait pas dans system.tables, system.dictionaries. Il est désormais possible de modifier le commentaire pour le moteur Dictionary. Corrige #33251. #33261 (Maksim Kita).
  • Ajout des inserts asynchrones (avec le paramètre async_insert activé) au journal des requêtes. Auparavant, ces requêtes n’y apparaissaient pas. #33239 (Anton Popov).
  • Correction de l’envoi des expressions WHERE 1 = 0 pour 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 avec DROP. #33468 (Kseniia Sumarokova).
  • La métrique StorageBufferBytes était parfois mal calculée. #33159 (xuyatian).
  • Correction de l’erreur Invalid version for SerializationLowCardinality key column lors de la lecture d’une colonne LowCardinality avec local_filesystem_read_prefetch ou remote_filesystem_read_prefetch activé. #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 Context dans 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 Tuple au format CSV en 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 un t.csv suffisamment 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 MergeTree pouvait 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 MySQL ne 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 function dans le cas d’une MV avec GROUP BY (list of columns) (analysé comme GROUP BY tuple(...)) sur Kafka/RabbitMQ. Corrige #32668 et #32744. #32751 (Nikolai Kochetov).
  • Correction de la requête ALTER TABLE ... MATERIALIZE TTL avec les modes TTL ... DELETE WHERE ... et TTL ... GROUP BY .... #32695 (Anton Popov).
  • Correction de l’optimisation optimize_read_in_order lorsque le table engine est Distributed ou Merge et que les tables MergeTree sous-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 RabbitMQ en 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, MsgPack et JSONAsString. Auparavant, les async inserts avec ces formats ne lisaient aucune donnée. #32530 (Kruglov Pavel).
  • Correction de la fonction groupBitmapAnd sur 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 ALL ou DISTINCT. 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 select dé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) avec Directory tmp_merge_<part_name> ou Part ... (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 LowCardinality pour une window function. Corrige #31114. #31888 (Nikolai Kochetov).
  • Correction d’un blocage avec la commande DROP TABLE system.query_log sync. #33293 (zhanghuajie).
Dernière modification le 29 juin 2026