Passer au contenu principal

Version de ClickHouse v21.12, 2021-12-15. Présentation, Vidéo

Changement rétro-incompatible

  • Correction d’une fonctionnalité qui avait auparavant un comportement indésirable. Ne plus autoriser le direct select pour Kafka/RabbitMQ/FileLog. Cela peut être activé en définissant stream_like_engine_allow_direct_select. Le direct select ne sera pas autorisé même si ce paramètre est activé, s’il existe une vue matérialisée attachée. Pour Kafka et RabbitMQ, le direct select, s’il est autorisé, ne validera pas les messages par défaut. Pour activer les commits avec le direct select, l’utilisateur doit utiliser le paramètre au niveau du stockage kafka{rabbitmq}_commit_on_select=1 (valeur par défaut : 0). #31053 (Kseniia Sumarokova).
  • Léger changement de comportement d’une nouvelle fonction. Renvoie une chaîne non entre guillemets dans JSON_VALUE. Clôt #27965. #31008 (Kseniia Sumarokova).
  • Renommage d’un paramètre. Ajout de la prise en charge d’une représentation NULL personnalisée pour les formats d’entrée TSV/CSV. Correction de la désérialisation de Nullable(String) dans les formats d’entrée TSV/CSV/JSONCompactStringsEachRow/JSONStringsEachRow. Renommage de output_format_csv_null_representation et output_format_tsv_null_representation en format_csv_null_representation et format_tsv_null_representation, respectivement. #30497 (Kruglov Pavel).
  • Dépréciation supplémentaire de code déjà inutilisé. Cela ne concerne que les utilisateurs de versions de ClickHouse antérieures à 20.6. Le mécanisme d’« élection du leader » a été supprimé de ReplicatedMergeTree, car plusieurs leaders sont pris en charge depuis la version 20.6. Si vous effectuez une mise à niveau depuis une version plus ancienne et qu’une réplique exécutant cette ancienne version est leader, le serveur ne démarrera pas après la mise à niveau. Arrêtez les répliques sur l’ancienne version pour permettre le démarrage de la nouvelle. Après cela, il ne sera plus possible de revenir à une version antérieure à 20.6. #32140 (tavplubix).

Nouvelle fonctionnalité

  • Implémentation d’un plus grand nombre de commandes ZooKeeper Four Letter Words dans ClickHouse Keeper : https://zookeeper.apache.org/doc/r3.4.8/zookeeperAdmin.html#sc_zkCommands. #28981 (JackyWoo). Désormais, clickhouse-keeper est complet sur le plan fonctionnel.
  • Prise en charge du type de données Bool. #31072 (kevin wan).
  • Prise en charge de PARTITION BY dans les stockages File, URL et HDFS, ainsi qu’avec la fonction de table INSERT INTO. Closes #30273. #30690 (Kseniia Sumarokova).
  • Ajout de CONSTRAINT ... ASSUME ... (sans vérification lors de INSERT). Ajout de la transformation de requête en CNF (https://github.com/ClickHouse/ClickHouse/issues/11749) pour une optimisation plus pratique. Ajout d’une réécriture simple de requête à l’aide de contraintes (correspondance simple uniquement pour l’instant, avec prise en charge ultérieure de <,=,>…). Ajout de la possibilité de remplacer des colonnes lourdes par des colonnes légères lorsque c’est possible. #18787 (Nikita Vasilev).
  • Authentification Basic pour les fonctions http/url. #31648 (michael1589).
  • Prise en charge du type INTERVAL dans la clause STEP pour le modificateur WITH FILL. #30927 (Anton Popov).
  • Ajout de la prise en charge de la lecture en parallèle de plusieurs fichiers et des motifs génériques dans la clause FROM INFILE. #30135 (Filatenkov Artur).
  • Ajout de la prise en charge des paramètres de requête Identifier pour les tables et les bases de données. Closes #27226. #28668 (Nikolay Degterinsky).
  • TLDR : améliorations majeures de l’exhaustivité et de la cohérence des formats texte. Refactorisation des formats TSV, TSVRaw, CSV, JSONCompactEachRow et JSONCompactStringsEachRow, suppression des duplications de code, ajout d’une interface de base pour les formats avec les suffixes -WithNames et -WithNamesAndTypes. Ajout des formats CSVWithNamesAndTypes, TSVRawWithNames, TSVRawWithNamesAndTypes, JSONCompactEachRowWIthNames, JSONCompactStringsEachRowWIthNames, RowBinaryWithNames. Prise en charge du parsing parallèle pour les formats TSVWithNamesAndTypes, TSVRaw(WithNames/WIthNamesAndTypes), CSVWithNamesAndTypes, JSONCompactEachRow(WithNames/WIthNamesAndTypes), JSONCompactStringsEachRow(WithNames/WIthNamesAndTypes). Prise en charge du mapping des colonnes et de la vérification des types pour le format RowBinaryWithNamesAndTypes. Ajout du paramètre input_format_with_types_use_header, qui indique s’il faut vérifier que les types écrits au format <format_name>WIthNamesAndTypes correspondent à la structure de la table. Ajout du paramètre input_format_csv_empty_as_default, utilisé dans le format CSV à la place de input_format_defaults_for_omitted_fields (car ce paramètre ne doit pas contrôler csv_empty_as_default). Correction de l’utilisation du paramètre input_format_defaults_for_omitted_fields (il n’était utilisé que comme csv_empty_as_default, alors qu’il doit contrôler le calcul des expressions par défaut pour les champs omis). Correction de l’entrée/sortie Nullable dans le format TSVRaw, ce qui rend ce format entièrement compatible avec l’insertion en TSV. Correction de l’insertion de NULL dans LowCardinality(Nullable) lorsque input_format_null_as_default est activé (auparavant, des valeurs par défaut étaient insérées à la place des véritables NULL). Correction de la désérialisation des chaînes dans les formats JSONStringsEachRow/JSONCompactStringsEachRow (les chaînes n’étaient analysées que jusqu’au premier ‘\n’ ou ‘\t’). Ajout de la possibilité d’utiliser la règle d’échappement Raw dans le format d’entrée Template. Ajout d’informations de diagnostic pour le format d’entrée JSONCompactEachRow(WithNames/WIthNamesAndTypes). Correction d’un bug de parsing parallèle des formats -WithNames lorsque le paramètre min_chunk_bytes_for_parallel_parsing est inférieur au nombre d’octets d’une seule ligne. #30178 (Kruglov Pavel). Possibilité d’imprimer/d’analyser les noms et les types des colonnes dans le format d’entrée/sortie CustomSeparated. Ajout des formats CustomSeparatedWithNames/WithNamesAndTypes, similaires à TSVWithNames/WithNamesAndTypes. #31434 (Kruglov Pavel).
  • Prise en charge d’Aliyun OSS Storage. #31286 (cfcz48).
  • Expose tous les paramètres du pool global de threads dans le fichier de configuration. #31285 (Tomáš Hromada).
  • Introduction des window functions exponentialTimeDecayedSum, exponentialTimeDecayedMax, exponentialTimeDecayedCount et exponentialTimeDecayedAvg, plus efficaces que exponentialMovingAverage pour de plus grandes fenêtres. Davantage de cas d’usage sont également couverts. #29799 (Vladimir Chebotarev).
  • Ajout d’une option pour compresser les logs avec LZ4 avant leur écriture dans un fichier. Ferme #23860. #29219 (Nikolay Degterinsky).
  • Prise en charge de JOIN ON 1 = 1, qui a la sémantique d’un CROSS JOIN. Cela ferme #25578. #25894 (Vladimir C).
  • Ajout du combinator Map pour le type Map. - Renommage de l’ancien sum-, min-, max- Map pour les tableaux mappés en sum-, min-, max- MappedArrays. #24539 (Ildus Kurbangaliev).
  • Permettre de relancer la lecture via HTTP en cas d’échec. Corrige #29696. #29894 (Kseniia Sumarokova).

Fonctionnalité expérimentale

  • WINDOW VIEW pour activer le stream processing dans ClickHouse. #8331 (vxider).
  • Suppression de la prise en charge de l’utilisation des bases de données Ordinary avec MaterializedMySQL. #31292 (Stig Bakken).
  • Implémentation des commandes BACKUP et RESTORE pour la famille Log. Cette fonctionnalité est en cours de développement. #30688 (Vitaly Baranov).

Amélioration des performances

  • Réduction de l’utilisation de la mémoire lors de la lecture des formats Parquet, ORC et Arrow via s3 / url / hdfs (contrôlée par le paramètre input_format_allow_seeks, activé par défaut). Ajout également du paramètre remote_read_min_bytes_for_seek pour contrôler les seeks. Clôt #10461. Clôt #16857. #30936 (Kseniia Sumarokova).
  • Ajout d’optimisations pour les conditions constantes dans JOIN ON, voir #26928. #27021 (Vladimir C).
  • Prise en charge du formatting parallèle pour tous les formats texte, sauf JSONEachRowWithProgress et PrettyCompactMonoBlock. #31489 (Kruglov Pavel).
  • Accélération de count sur les colonnes Nullable. #31806 (Raúl Marín).
  • Accélération des fonctions d’agrégation avg et sumCount. #31694 (Raúl Marín).
  • Amélioration des performances des formats de sortie JSON et XML. #31673 (alexey-milovidov).
  • Amélioration des performances de la synchronisation des données vers un périphérique de blocs. Cela clôt #31181. #31229 (zhanglistar).
  • Correction d’un problème de performances des requêtes dans les tables LiveView. Corrige #30831. #31006 (vzakaznikov).
  • Accélération de l’analyse des requêtes. #31949 (Raúl Marín).
  • Permet de scinder les règles de rollup de GraphiteMergeTree pour les métriques simples et celles avec tags (champ rule_type facultatif). #25122 (Michail Safronov).
  • Suppression des requêtes DESC TABLE superflues pour remote() (dans le cas de remote('127.1', system.one) (c.-à-d. lorsqu’un identifiant est utilisé comme db.table au lieu d’une chaîne), une requête DESC TABLE superflue était émise). #32019 (Azat Khuzhin).
  • Optimisation de la fonction tupleElement pour lire une sous-colonne lorsque le paramètre optimize_functions_to_subcolumns est activé. #31261 (Anton Popov).
  • Optimisation de la fonction mapContains pour lire la sous-colonne key lorsque le paramètre optimize_functions_to_subcolumns est activé. #31218 (Anton Popov).
  • Ajout des paramètres merge_tree_min_rows_for_concurrent_read_for_remote_filesystem et merge_tree_min_bytes_for_concurrent_read_for_remote_filesystem. #30970 (Kseniia Sumarokova).
  • Ignore les mutations de partitions différentes dans StorageMergeTree. #21326 (Vladimir Chebotarev).

Amélioration

  • Ne pas autoriser la suppression d’une table ou d’un dictionnaire si d’autres tables ou dictionnaires en dépendent. #30977 (tavplubix).
  • Autoriser le versionnement des états des fonctions d’agrégation. Il est désormais possible d’introduire des modifications rétrocompatibles dans le format de sérialisation des états des fonctions d’agrégation. Clôture #12552. #24820 (Kseniia Sumarokova).
  • Prise en charge de la syntaxe ALTER MODIFY COLUMN de type PostgreSQL. #32003 (SuperDJY).
  • Ajout de la prise en charge de update_field pour RangeHashedDictionary et ComplexKeyRangeHashedDictionary. #32185 (Maksim Kita).
  • Les fonctions murmurHash3_128 et sipHash128 acceptent désormais un nombre arbitraire d’arguments. Cela clôt #28774. #28965 (小路).
  • Prise en charge de l’expression par défaut pour le stockage HDFS et optimisation de la récupération lorsque la source est orientée colonnes. #32256 (李扬).
  • Amélioration du nom d’opération d’un span OpenTelemetry. #32234 (Frank Chen).
  • Utilisation de Content-Type: application/x-ndjson (http://ndjson.org/) pour le format de sortie JSONEachRow. #32223 (Dmitriy Dorofeev).
  • Amélioration de l’ignorance des champs inconnus avec la règle d’échappement entre guillemets dans les formats Template/CustomSeparated. Auparavant, seules les chaînes entre guillemets pouvaient être ignorées ; désormais, il est possible d’ignorer des valeurs de n’importe quel type. #32204 (Kruglov Pavel).
  • Désormais, clickhouse-keeper refuse de démarrer ou d’appliquer des modifications de configuration lorsqu’elles contiennent des ID ou des points de terminaison dupliqués. Corrige #31339. #32121 (alesapin).
  • Définir le Content-Type dans les paquets HTTP émis par URL engine. #32113 (Frank Chen).
  • Renvoyer le Content-Type ‘application/json’ pour le format JSONEachRow si output_format_json_array_of_rows est activé. #32112 (Frank Chen).
  • Autoriser l’analyse de + avant les valeurs Float32/Float64. #32079 (Kruglov Pavel).
  • Autoriser un paramètre hdfs_replication configuré par l’utilisateur pour DiskHDFS et StorageHDFS. Clôture #32039. #32049 (leosunli).
  • Ajout des champs ClickHouse exception et exception_code au journal des spans OpenTelemetry. #32040 (Frank Chen).
  • Amélioration de la durée dans le journal des spans OpenTelemetry : elle était nulle au niveau de la requête en cas d’exception de requête. #32038 (Frank Chen).
  • Corrige le problème qui empêchait la création de LowCardinality sur Int256. #31832 (alexey-milovidov).
  • Recrée les tables system.*_log en cas de différence de moteur/partition_by. #31824 (Azat Khuzhin).
  • MaterializedMySQL : corrige le problème avec une table nommée ‘table’. #31781 (Håvard Kvålen).
  • Source de dictionnaire ClickHouse : prise en charge des connexions prédéfinies. Ferme #31705. #31749 (Kseniia Sumarokova).
  • Permet d’utiliser une configuration de connexions prédéfinies pour les engines Kafka et RabbitMQ (de la même manière que pour les autres table engines d’intégration). #31691 (Kseniia Sumarokova).
  • Réaffiche toujours l’invite lors de la navigation dans l’historique de clickhouse-client. Cela améliore l’utilisation lors de la manipulation de queries très longues qui ne tiennent pas à l’écran. #31675 (alexey-milovidov) (auteur : Amos Bird).
  • Ajoute des raccourcis clavier pour naviguer dans l’historique (au lieu des lignes/dans l’historique). #31641 (Azat Khuzhin).
  • Améliore les vérifications de max_execution_time. Corrige certains cas où les vérifications de timeout ne s’exécutaient pas et où la query pouvait durer trop longtemps. #31636 (Raúl Marín).
  • Message d’exception amélioré lorsque users.xml ne peut pas être chargé en raison d’un hash de mot de passe incorrect. Cela ferme #24126. #31557 (Vitaly Baranov).
  • Utilise les noms du shard et de la replica à partir des arguments de la base de données Replicated lors de l’expansion des macros dans les arguments ReplicatedMergeTree si ces macros ne sont pas définies dans la config. Ferme #31471. #31488 (tavplubix).
  • Meilleure analyse pour la projection min/max/count. Désormais, avec allow_experimental_projection_optimization activé, la projection virtuelle min/max/count peut être utilisée avec des colonnes de la partition key. #31474 (Amos Bird).
  • Ajoute la prise en charge de --pager pour clickhouse-local. #31457 (Azat Khuzhin).
  • Corrige l’attente de l’éditeur pendant l’édition interactive d’une query (waitpid() renvoie -1 sur SIGWINCH et EDITOR ainsi que clickhouse-local/clickhouse-client fonctionnent en concurrence). #31456 (Azat Khuzhin).
  • Déclenche une exception s’il y a des données parasites après un field dans le format JSONCompactStrings(EachRow). #31455 (Kruglov Pavel).
  • La valeur par défaut des settings http_send_timeout et http_receive_timeout est passée de 1800 (30 minutes) à 180 (3 minutes). #31450 (tavplubix).
  • MaterializedMySQL gère désormais les requêtes DDL CREATE TABLE ... LIKE .... #31410 (Stig Bakken).
  • Renvoie une requête create artificielle lors de l’exécution de show create table sur les tables système. #31391 (SuperDJY).
  • Auparavant, la progression n’était affichée que pour la table function numbers. Désormais, elle l’est aussi pour numbers_mt. #31318 (Kseniia Sumarokova).
  • Les rôles initiaux de l’utilisateur sont désormais utilisés pour déterminer les row policies, voir #31080. #31262 (Vitaly Baranov).
  • Si un obsolete setting est modifié, un avertissement est affiché dans system.warnings. #31252 (tavplubix).
  • Amélioration du backoff pour les tasks de nettoyage en arrière-plan dans MergeTree. Les Settings merge_tree_clear_old_temporary_directories_interval_seconds et merge_tree_clear_old_parts_interval_seconds ont été déplacés des paramètres utilisateur vers les paramètres de MergeTree. #31180 (tavplubix).
  • Désormais, chaque replica n’enverra au client que des informations incrémentales sur les compteurs de profile events. #31155 (Dmitry Novik). Cela rend l’option --hardware_utilization de clickhouse-client utilisable.
  • L’édition multiligne est désormais activée par défaut dans clickhouse-client. Cela corrige #31121. #31123 (Amos Bird).
  • Normalisation des noms de fonctions pour les requêtes ALTER. Cela permet d’éviter les incohérences de métadonnées entre la création de tables avec index/projections et l’ajout d’index/projections via des commandes alter. Il s’agit d’une PR de suivi de https://github.com/ClickHouse/ClickHouse/pull/20174. À classer parmi les améliorations, car aucun bogue n’a été signalé et le scénario reste assez rare. #31095 (Amos Bird).
  • Prise en charge du modifier IF EXISTS pour la requête RENAME DATABASE/TABLE/DICTIONARY. Si cette directive est utilisée, aucune erreur ne sera renvoyée si le DATABASE/TABLE/DICTIONARY à renommer n’existe pas. #31081 (victorgao).
  • Annuler les vertical merges lorsqu’une partition est supprimée. Il s’agit d’un suivi de https://github.com/ClickHouse/ClickHouse/pull/25684 et de https://github.com/ClickHouse/ClickHouse/pull/30996. #31057 (Amos Bird).
  • La session locale au sein d’une dictionary source ClickHouse n’enverra plus ses événements au session log. Cela corrige un interblocage possible (alerte tsan) lors de l’arrêt. Cette PR corrige également l’instabilité de test_dictionaries_dependency_xml/. #31013 (Vitaly Baranov).
  • Réduction des verrous dans la commande ALTER. #31010 (Amos Bird).
  • Correction de l’option --verbose dans le mode interactif de clickhouse-local et ajout de la possibilité de journaliser dans un fichier. #30881 (Kseniia Sumarokova).
  • Ajout des commandes \l, \d, \c dans clickhouse-client, comme dans MySQL et PostgreSQL. #30876 (Pavel Medvedev).
  • Pour clickhouse-local ou clickhouse-client : si l’option --interactive est utilisée avec --query ou --queries-file, celles-ci sont d’abord exécutées comme en mode non interactif, puis le mode interactif est lancé. #30851 (Kseniia Sumarokova).
  • Correction de l’erreur possible “The local set of parts of X doesn’t look like the set of parts in ZooKeeper” (si DROP échoue lors de la suppression de znodes dans ZooKeeper). #30826 (Azat Khuzhin).
  • Le format Avro fonctionne avec Kafka. Ajout du paramètre output_format_avro_rows_in_file. #30351 (Ilya Golshtein).
  • Possibilité de spécifier un ou plusieurs schémas PostgreSQL pour une base de données MaterializedPostgreSQL. Clôt #28901. Clôt #29324. #28933 (Kseniia Sumarokova).
  • Remplacement des ports par défaut de communication interne de clickhouse-keeper, de 44444 à 9234. Corrige #30879. #31799 (alesapin).
  • Implémentation de la fonction transform avec des arguments Decimal. #31839 (李帅).
  • Correction d’un arrêt brutal sur le serveur de débogage et de l’erreur DB::Exception: std::out_of_range: basic_string sur le serveur de release en cas d’URL HDFS invalide, grâce à une vérification supplémentaire de la structure de l’URL HDFS. #31042 (Kruglov Pavel).
  • Correction d’une assertion possible dans la table function / le moteur hdfs, avec ajout d’un test. #31036 (Kruglov Pavel).

Corrections de bugs

  • Corrige les alias de group by / order by / limit by lorsque les arguments positionnels sont activés. Clôt #31173. #31741 (Kseniia Sumarokova).
  • Corrige l’utilisation du table engine Buffer avec le type Map. Corrige #30546. #31742 (Anton Popov).
  • Corrige la lecture des tables MergeTree lorsque use_uncompressed_cache est activé. #31826 (Anton Popov).
  • Corrige le comportement lorsque des mutations sans travail à effectuer restent bloquées (avec le paramètre empty_result_for_aggregation_by_empty_set activé). #32358 (Nikita Mikhaylov).
  • Corrige le saut de colonnes lors de l’écriture en Protobuf. Cette PR corrige #31160, voir le commentaire #31160#issuecomment-980595318. #31988 (Vitaly Baranov).
  • Corrige un bug lors de la suppression de colonnes inutiles dans une sous-requête. S’il y a une fonction d’agrégation dans une requête sans group by, ne pas la supprimer même si elle est inutile. #32289 (dongyifeng).
  • La limite de quota n’était pas atteinte, mais elle était tout de même considérée comme dépassée. Cette PR corrige #31174. #31337 (sunny).
  • Corrige SHOW GRANTS lorsque des révocations partielles sont utilisées. Cette PR corrige #31138. #31249 (Vitaly Baranov).
  • La quantité de mémoire était mal estimée lorsque ClickHouse s’exécutait dans des conteneurs avec des limites cgroup. #31157 (Pavel Medvedev).
  • Corrige les requêtes ALTER ... MATERIALIZE COLUMN ... lorsque le type de données de l’expression par défaut n’est pas le même que celui de la colonne. #32348 (Anton Popov).
  • Corrige un crash avec SIGFPE dans la fonction d’agrégation avgWeighted avec un argument Decimal. Corrige #32053. #32303 (tavplubix).
  • Le serveur pouvait ne pas démarrer avec l’erreur Cannot attach 1 tables due to cyclic dependencies si la table Dictionary pointait vers un dictionnaire XML du même nom. C’est corrigé. Corrige #31315. #32288 (tavplubix).
  • Corrige une erreur d’analyse lors de la désérialisation de NaN pour Nullable(Float) avec la règle d’échappement Quoted. #32190 (Kruglov Pavel).
  • Dictionnaires XML : les identifiants utilisés dans la requête CREATE de la table peuvent être qualifiés avec default_database lors d’une mise à niveau vers une version plus récente. Clôt #31963. #32187 (Maksim Kita).
  • Le nombre de répliques actives pouvait être déterminé de manière incorrecte lors d’une insertion avec quorum si le paramètre replicated_can_become_leader était désactivé sur certaines répliques. C’est corrigé. #32157 (tavplubix).
  • Dictionaries : correction des cas où {condition} ne fonctionne pas pour des requêtes de base de données personnalisées. #32117 (Maksim Kita).
  • Correction de CAST depuis Nullable avec cast_keep_nullable (erreur PARAMETER_OUT_OF_BOUND auparavant, par exemple avec toUInt32OrDefault(toNullable(toUInt32(1)))). #32080 (Azat Khuzhin).
  • Correction de CREATE TABLE pour Join Storage dans certains cas rares. Ferme #31680. #32066 (SuperDJY).
  • Correction de l’erreur Directory ... already exists and is not empty lors du détachement d’une part. #32063 (tavplubix).
  • MaterializedMySQL (fonctionnalité expérimentale) : correction d’une mauvaise interprétation des données DECIMAL provenant de MySQL. #31990 (Håvard Kvålen).
  • Le moteur FileLog (fonctionnalité expérimentale) créait inutilement un répertoire de métadonnées lorsque la création de la table échouait. Corrige #31962. #31967 (flynn).
  • Certaines entrées GET_PART pouvaient rester bloquées dans la file de réplication si une part était perdue sur toutes les répliques et qu’il n’y avait pas d’autres parts dans la même partition. C’est corrigé dans les cas où la clé de partition ne contient que des colonnes de types entiers ou Date[Time]. Corrige #31485. #31887 (tavplubix).
  • Correction des fonctions empty et notEmpty avec des arguments de type UUID. Corrige #31819. #31883 (Anton Popov).
  • Le chemin de configuration a été changé de keeper_server.session_timeout_ms à keeper_server.coordination_settings.session_timeout_ms lors de la construction d’un KeeperTCPHandler. Même chose pour operation_timeout. #31859 (JackyWoo).
  • Correction d’un cast invalide du type Nullable lorsqu’une clé primaire nullable est utilisée. (La clé primaire nullable est une fonctionnalité déconseillée : veuillez ne pas l’utiliser.) Corrige #31075. #31823 (Amos Bird).
  • Correction d’un crash dans un UDF récursif en SQL. Ferme #30856. #31820 (Maksim Kita).
  • Correction d’un crash lorsque la fonction dictGet avec type est utilisée pour un attribut de dictionnaire dont le type est Nullable. Corrige #30980. #31800 (Maksim Kita).
  • Corrige un crash en cas de résultat vide d’une requête ODBC (avec certains pilotes ODBC). Résout #31465. #31766 (Kseniia Sumarokova).
  • Corrige la désactivation du query profiler (dans le cas de query_profiler_real_time_period_ns>0/query_profiler_cpu_time_period_ns>0, le query profiler pouvait rester activé même après la fin de la requête). #31740 (Azat Khuzhin).
  • Corrige un rare segfault sur des requêtes ATTACH PARTITION concurrentes. #31738 (tavplubix).
  • Corrige une condition de concurrence dans le format de sortie JSONEachRowWithProgress lorsque des données et des lignes de progression sont mélangées dans la sortie. #31736 (Kruglov Pavel).
  • Corrige l’erreur there are no such cluster here lors de l’exécution d’une requête ON CLUSTER si le nom de cluster spécifié est celui d’une base de données Replicated. #31723 (tavplubix).
  • Corrige une exception dans certains cas d’utilisation de la fonction decrypt sur des colonnes Nullable. Cela résout #31662. Cela résout #31426. #31707 (alexey-milovidov).
  • Corrige la fonction ngrams lorsque la chaîne contient des caractères UTF-8. #31706 (yandd).
  • Les Settings input_format_allow_errors_num et input_format_allow_errors_ratio ne fonctionnaient pas pour l’analyse des types de domaine, tels que IPv4 ; c’est corrigé. Corrige #31686. #31697 (tavplubix).
  • Corrige une exception de pointeur nul dans MATERIALIZE COLUMN. #31679 (Nikolai Kochetov).
  • La requête RENAME TABLE fonctionnait incorrectement lors d’une tentative de renommage d’un dictionnaire DDL dans une base de données Ordinary ; c’est corrigé. #31638 (tavplubix).
  • Implémente la fonction d’agrégation sparkbar comme prévu, voir : #26175#issuecomment-960353867, commentaire. #31624 (小路).
  • Corrige la génération d’un JSON invalide lorsque seuls les noms de colonnes contiennent des séquences UTF-8 invalides. #31534 (Kevin Michel).
  • Désactive partial_merge_join_left_table_buffer_bytes tant que le bug dans cette optimisation n’est pas corrigé. Voir #31009). Supprime l’option redondante partial_merge_join_optimizations. #31528 (Vladimir C).
  • Corrige la progression pour les requêtes INSERT SELECT courtes. #31510 (Azat Khuzhin).
  • Corrige un comportement incorrect avec group by et les arguments positionnels. Clôt #31280#issuecomment-968696186. #31420 (Kseniia Sumarokova).
  • Résout nullptr dans le fournisseur d’identifiants STS pour S3. #31409 (Vladimir Chebotarev).
  • Supprime la fonction notLike de l’analyse d’index, car elle était incorrecte. #31169 (sundyli).
  • Corrige un bug dans Keeper pouvant empêcher le démarrage lorsque certains logs de coordination ont été perdus et qu’un snapshot plus récent que le dernier log est présent. #31150 (alesapin).
  • Réécrit correctement la table distribuée de droite dans une jointure locale. Résout #25809. #31105 (abel-cheng).
  • Corrige la table Merge avec des alias et WHERE (cela ne fonctionnait pas du tout auparavant). Clôt #28802. #31044 (Kseniia Sumarokova).
  • Corrige JSON_VALUE/JSON_QUERY avec des identifiants entre guillemets. Cela permet d’avoir des espaces dans le chemin JSON. Clôt #30971. #31003 (Kseniia Sumarokova).
  • L’utilisation de la fonction formatRow avec des formats non orientés lignes provoquait un segfault. Cette fonction n’est plus autorisée avec de tels formats (car cela n’a pas de sens). #31001 (Kruglov Pavel).
  • Corrige un bug qui cassait les requêtes SELECT lorsqu’elles survenaient après la suppression d’une vue matérialisée. Trouvé dans #30691. #30997 (Kseniia Sumarokova).
  • Ignore la vérification max_partition_size_to_drop dans le cas de ATTACH PARTITION … FROM et MOVE PARTITION … #30995 (Amr Alaa).
  • Corrige certains cas limites avec les opérateurs INTERSECT et EXCEPT. Clôt #30803. #30965 (Kseniia Sumarokova).

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

  • Correction d’un résultat de filtrage erroné sur les builds non x86. Cela clôt #31417. Cela clôt #31524. #31574 (alexey-milovidov).
  • Rendre le build de ClickHouse entièrement reproductible (identique octet pour octet sur différentes machines). Cela clôt #22113. #31899 (alexey-milovidov). Supprimer des binaires le chemin du filesystem vers le répertoire de build afin de permettre des builds reproductibles. Cela était nécessaire pour #22113. #31838 (alexey-milovidov).
  • Utiliser nos propres CMakeLists pour zlib-ng, cassandra, mariadb-connector-c, ainsi que xz, re2, sentry, gsasl, arrow, protobuf. Cela est nécessaire pour #20151. Fait partie de #9226. Une petite étape vers la suppression des éléments pénibles du système de build. #30599 (alexey-milovidov).
  • Builds hermétiques : utiliser une version fixe de libc et s’assurer qu’aucun fichier source ou binaire du système d’exploitation hôte n’est utilisé pendant la compilation. Cela clôt #27133. Cela clôt #21435. Cela clôt #30462. #30011 (alexey-milovidov).
  • Ajout de la fonction getFuzzerData() pour faciliter le fuzzing de fonctions spécifiques. Cela clôt #23227. #27526 (Alexey Boykov).
  • Configuration plus appropriée des capabilities dans Docker. #31802 (Constantine Peresypkin).
  • Activer les options de compilation clang -fstrict-vtable-pointers, -fwhole-program-vtables. #20151 (Maksim Kita).
  • Éviter le téléchargement d’archives de toolchain pour la compilation croisée vers FreeBSD. #31672 (alexey-milovidov).
  • Support initial de risc-v. Voir development/build-cross-riscv pour les particularités et la commande de compilation testée. #31309 (Vladimir Smirnov).
  • Prise en charge de la compilation sur une machine arm avec le paramètre “-DENABLE_TESTS=OFF”. #31007 (zhanghuajie).

Version de ClickHouse v21.11, 2021-11-09. Présentation, Vidéo

Changement rétro-incompatible

  • Modification de l’ordre des arguments json_path et json dans les fonctions SQL/JSON (pour rester cohérent avec la norme). Ferme #30449. #30474 (Kseniia Sumarokova).
  • Suppression du paramètre de table MergeTree write_final_mark. Il sera désormais toujours à true. #30455 (Kseniia Sumarokova). Aucune action n’est requise, toutes les tables sont compatibles avec la nouvelle version.
  • La fonction bayesAB a été supprimée. Merci de nous aider à réintroduire cette fonction, actualisée. Cela ferme #26233. #29934 (alexey-milovidov).
  • Ceci n’est pertinent que si vous avez déjà commencé à utiliser la prise en charge expérimentale de clickhouse-keeper. Désormais, les snapshots de ClickHouse Keeper sont compressés avec le codec ZSTD par défaut, au lieu de la compression par blocs LZ4 personnalisée de ClickHouse. Ce comportement peut être désactivé avec le paramètre de coordination compress_snapshots_with_zstd_format (il doit être identique sur toutes les répliques du quorum). Cette rétro-incompatibilité est assez rare et ne peut se produire que lorsqu’un nouveau nœud envoie un snapshot (ce qui arrive en cas de recovery) à un ancien nœud qui n’est pas capable de lire les snapshots au format ZSTD. #29417 (alesapin).

Nouvelle fonctionnalité

  • Le nouveau mode INSERT asynchrone permet d’accumuler les données insérées et de les stocker en arrière-plan en un seul batch. Côté client, il peut être activé en définissant async_insert pour les requêtes INSERT avec des données intégrées à la requête ou dans un buffer séparé (par exemple pour les requêtes INSERT via le protocole HTTP). Si wait_for_async_insert vaut true (par défaut), le client attendra que les données soient écrites dans la table. Côté serveur, il est contrôlé par les settings async_insert_threads, async_insert_max_data_size et async_insert_busy_timeout_ms. Implémente #18282. #27537 (Anton Popov). #20557 (Ivan). Remarques sur les performances : avec les inserts asynchrones, vous pouvez effectuer jusqu’à environ 10 000 requêtes INSERT individuelles par seconde. Il reste donc recommandé d’insérer par batchs si vous souhaitez atteindre des performances de plusieurs millions de lignes insérées par seconde.
  • Ajout d’un mode interactif pour clickhouse-local. Vous pouvez ainsi simplement exécuter clickhouse-local pour obtenir une interface ClickHouse en ligne de commande sans vous connecter à un serveur, et traiter des données provenant de fichiers et de sources de données externes. Fusion du code de clickhouse-client et de clickhouse-local. Closes #7203. Closes #25516. Closes #22401. #26231 (Kseniia Sumarokova).
  • Ajout de la prise en charge des user defined functions exécutables (scriptables). Il s’agit d’UDFs pouvant être écrites dans n’importe quel langage de programmation. #28803 (Maksim Kita).
  • Autorise des connexions prédéfinies à des sources de données externes. Cela permet d’éviter d’avoir à spécifier des credentials ou des adresses lors de l’utilisation de sources de données externes, celles-ci pouvant être référencées par leur nom à la place. Closes #28367. #28577 (Kseniia Sumarokova).
  • Ajout de la database INFORMATION_SCHEMA avec les vues SCHEMATA, TABLES, VIEWS et COLUMNS, correspondant aux tables de la database system. Closes #9770. #28691 (tavplubix).
  • Prise en charge de EXISTS (subquery). Closes #6852. #29731 (Kseniia Sumarokova).
  • Logging de session pour l’audit. Enregistrement de tous les événements de connexion et de déconnexion, réussis comme échoués, dans une nouvelle table system.session_log. #22415 (Vasily Nemkov) (Vitaly Baranov).
  • Prise en charge des fonctions multidimensionnelles de cosine distance et d’euclidean distance, ainsi que des distances et normes L1, L2, Lp et Linf. Produit scalaire sur les tuples et divers operators arithmétiques sur les tuples. Cela clôt entièrement #4509, et même plus encore. #27933 (Alexey Boykov).
  • Ajout de la prise en charge de la compression et de la décompression pour INTO OUTFILE et FROM INFILE (avec autodétection ou avec un paramètre optionnel supplémentaire). #27135 (Filatenkov Artur).
  • Ajout de la prise en charge de CORS (Cross Origin Resource Sharing) avec la requête HTTP OPTIONS. Cela signifie que Grafana fonctionnera désormais avec des requêtes serverless sans contournements. Clôture #18693. #29155 (Filatenkov Artur).
  • Les requêtes avec JOIN ON prennent désormais en charge les disjonctions (OR). #21320 (Ilya Golshtein).
  • Ajout de la fonction tokens. Elle permet de découper une chaîne en tokens en utilisant des caractères ASCII non alphanumériques comme séparateurs. #29981 (Maksim Kita). Ajout de la fonction ngrams pour extraire des ngrams du texte. Clôture #29699. #29738 (Maksim Kita).
  • Ajout de fonctions de normalisation Unicode : normalizeUTF8NFC, normalizeUTF8NFD, normalizeUTF8NFKC, normalizeUTF8NFKD. #28633 (darkkeks).
  • Consommation en streaming des fichiers de logs applicatifs dans ClickHouse avec le moteur de table FileLog. C’est comme le moteur Kafka ou RabbitMQ, mais pour les logs en ajout seul et avec rotation dans le système de fichiers local. Clôture #6953. #25969 (flynn) (Kseniia Sumarokova).
  • Ajout du format de sortie CapnProto, refactorisation du format d’entrée CapnProto. #29291 (Kruglov Pavel).
  • Autorise l’écriture d’un nombre dans une requête sous forme de littéral binaire. Exemple : SELECT 0b001;. #29304 (Maksim Kita).
  • Ajout du type de dictionnaire hashed_array. Il permet d’économiser de la mémoire lors de l’utilisation de dictionnaires avec plusieurs attributs. Clôture #30236. #30242 (Maksim Kita).
  • Ajout de la fonction JSONExtractKeys. #30056 (Vitaly).
  • Ajout d’une fonction getOSKernelVersion : elle renvoie une chaîne contenant la version du noyau de l’OS. #29755 (Memo).
  • Ajout des fonctions MD4 et SHA384. MD4 est une fonction de hachage obsolète et non sécurisée ; elle ne peut être utilisée que dans les rares cas où MD4 est déjà utilisée dans un ancien système et où vous devez obtenir exactement le même résultat. #29602 (Nikita Tikhomirov).
  • HSTS peut être activé pour le serveur HTTP de ClickHouse en définissant hsts_max_age dans le fichier de configuration avec une valeur positive. #29516 (凌涛).
  • Prise en charge de Huawei OBS Storage. Clôture #24294. #29511 (kevin wan).
  • Nouvelle fonction mapContainsKeyLike pour obtenir la map dont la clé correspond à une expression régulière simple. #29471 (凌涛). Nouvelle fonction mapExtractKeyLike pour obtenir la map en ne conservant que les éléments correspondant au motif spécifié. #30793 (凌涛).
  • Implémentation de ALTER TABLE x MODIFY COMMENT. #29264 (Vasily Nemkov).
  • Ajoute des fonctions d’inspection H3 absentes de ClickHouse mais disponibles via l’API H3 : https://h3geo.org/docs/api/inspection. #29209 (Bharat Nallan).
  • Autorise ALTER TABLE FETCH et ATTACH non répliqués dans les bases de données Replicated. #29202 (Kevin Michel).
  • Ajoute le paramètre output_format_csv_null_representation : identique à output_format_tsv_null_representation, mais pour la sortie CSV. #29123 (PHO).
  • Ajoute la fonction zookeeperSessionUptime(), qui renvoie la durée de la session ZooKeeper actuelle en secondes. #28983 (tavplubix).
  • Implémente la fonction h3ToGeoBoundary. #28952 (Ivan Veselov).
  • Ajoute la fonction d’agrégation exponentialMovingAverage, qui peut être utilisée comme fonction de fenêtre. Clôt #27511. #28914 (alexey-milovidov).
  • Autorise l’inclusion des sous-colonnes des colonnes de table dans le résultat de la requête DESCRIBE (activable avec le paramètre describe_include_subcolumns). #28905 (Anton Popov).
  • Executable et ExecutablePool ajoutent l’option send_chunk_header. Si cette option est activée, le nombre de lignes du chunk rows&#95;count, suivi d’un saut de ligne, est envoyé au client avant le chunk. #28833 (Maksim Kita).
  • tokenbf_v1 et ngram prennent en charge le type Map avec une clé de type String ou FixedSring. Cela améliore le data skipping dans les requêtes avec filtre sur une clé de map. sql CREATE TABLE map_tokenbf ( row_id UInt32, map Map(String, String), INDEX map_tokenbf map TYPE ngrambf_v1(4,256,2,0) GRANULARITY 1 ) Engine=MergeTree() Order by id Avec la table ci-dessus, la requête select * from map_tokebf where map['K']='V' ignorera le granule qui ne contient pas la clé A. Bien sûr, le nombre de lignes ignorées dépend de la granularity et de index_granularity définies. #28511 (凌涛).
  • Envoie les profile events du serveur au client. Un nouveau packet type ProfileEvents a été introduit. Clôt #26177. #28364 (Dmitry Novik).
  • Ajoute des opérations de décalage de bits pour les types de données FixedString et String. Clôt #27763. #28325 (小路).
  • Prise en charge de l’ajout et de la suppression dynamiques de tables à répliquer depuis PostgreSQL dans le moteur de base de données MaterializedPostgreSQL. Prise en charge d’ALTER pour les paramètres de la base de données. Résout #27573. #28301 (Kseniia Sumarokova).
  • Ajout de la fonction accurateCastOrDefault(x, T). Résout #21330. Auteur : @taiyang-li. #23028 (Maksim Kita).
  • Ajout des fonctions toUUIDOrDefault, toUInt8/16/32/64/256OrDefault, toInt8/16/32/64/128/256OrDefault, qui permettent à l’utilisateur de définir une valeur par défaut (non NULL) en cas d’échec de l’analyse de chaîne. #21330 (taiyang-li).

Amélioration des performances

  • Les background merges peuvent désormais se préempter entre eux et sont planifiés avec des priorités appropriées. Les merges de longue durée n’empêcheront donc plus les merges courts de s’exécuter. Cela permet de mieux planifier et contrôler l’exécution des merges. Cela réduit le risque d’obtenir l’erreur “too many parts”. #22381. #25165 (Nikita Mikhaylov). Ajout de la possibilité d’exécuter plus de merges et de mutations que le nombre de threads dans le background pool. Les merges et les mutations seront exécutés étape par étape en fonction de leur taille (les plus petites étant prioritaires). Le ratio entre le nombre de tâches et de threads d’exécution est contrôlé par le paramètre background_merges_mutations_concurrency_ratio, défini sur 2 par défaut. #29140 (Nikita Mikhaylov).
  • Autorise l’utilisation de reads asynchrones pour les remote filesystems. Réduit le nombre d’opérations seek lors de la lecture depuis des remote filesystems. Cela améliore considérablement les performances et permet aux disks expérimentaux web et s3 d’être plus rapides qu’EBS dans certaines conditions. #29205 (Kseniia Sumarokova). Par ailleurs, le type de disk web (dataset statique hébergé sur un serveur web) passe du statut expérimental à un statut prêt pour la production.
  • Les queries avec INTO OUTFILE dans clickhouse-client utiliseront plusieurs threads. Correction du problème de clignotement de la barre de progression lors de l’utilisation de INTO OUTFILE. Ceci clôt #30873. Ceci clôt #30872. #30886 (alexey-milovidov).
  • Réduit la quantité de données compressed redondantes lues depuis le disk pour certains types de queries SELECT (uniquement pour la famille d’engines MergeTree). #30111 (alesapin).
  • Supprime certains appels seek redondants lors de la lecture de blocks compressed dans la famille des table engines MergeTree. #29766 (alesapin).
  • Permet à la table function url de traiter plusieurs URL en parallèle. Ceci clôt #29670 et clôt #29671. #29673 (alexey-milovidov).
  • Améliore les performances de l’aggregation dans l’ordre de la primary key (avec le paramètre optimize_aggregation_in_order activé). #30266 (Anton Popov).
  • Désormais, ClickHouse utilise le DNS cache lors de la communication avec S3 externe. #29999 (alesapin).
  • Ajoute la prise en charge du pushdown de IS NULL/IS NOT NULL vers des databases externes (par ex. MySQL). #29463 (Azat Khuzhin). Transforme isNull/isNotNull en IS NULL/IS NOT NULL (pour les dbs externes, par ex. MySQL). #29446 (Azat Khuzhin).
  • Les queries SELECT sur des tables Dictionary utiliseront plusieurs threads. #30500 (Maksim Kita).
  • Améliore les performances du filtrage (opération WHERE) des columns Decimal. #30431 (Jun Jin).
  • Supprime le code à branchements dans l’opération de filtre grâce à une meilleure implémentation avec popcnt/ctz, plus performante. #29881 (Jun Jin).
  • Améliore la fonction tout-en-un de génération du masque d’octets du filtre (utilisée pour l’opérateur WHERE) à l’aide des instructions SSE/AVX2/AVX512. Notez que, par défaut, ClickHouse utilise uniquement SSE ; cela n’est donc pertinent que pour les builds personnalisés. #30014 (jasperzhu). #30670 (jasperzhu).
  • Améliore les performances de la fonction d’agrégation SUM pour les nombres à virgule flottante Nullable. #28906 (Raúl Marín).
  • Accélère le processus de chargement des parts lorsque plusieurs disques sont utilisés. L’idée est similaire à https://github.com/ClickHouse/ClickHouse/pull/16423 . L’environnement de production montre une amélioration : 24 min -> 16 min . #28363 (Amos Bird).
  • Réduit la taille par défaut des parts pour les multipart uploads S3 afin de diminuer l’utilisation mémoire. #28679 (ianton-ru).
  • Accélère la fonction bitmapAnd. #28332 (dddounaiking).
  • Supprime les notifications de mutation sous-optimales dans StorageMergeTree lorsque des merges sont toujours en cours. #27552 (Vladimir Chebotarev).
  • Tente d’améliorer les performances de la comparaison de chaînes. #28767 (alexey-milovidov).
  • L’index de clé primaire et le filtre de partition peuvent fonctionner sur un tuple. #29281 (凌涛).
  • Si une requête contient plusieurs fonctions d’agrégation quantile avec les mêmes arguments mais un paramètre de niveau différent, elles seront fusionnées et exécutées en un seul passage si le setting optimize_syntax_fuse_functions est activé. #26657 (hexiaoting).
  • Désormais, l’agrégation min-max sur la première expression de la clé primaire est optimisée par projection. Cela concerne #329. #29918 (Amos Bird).

Fonctionnalité expérimentale

  • Ajout de la possibilité de modifier la configuration des nœuds (dans le fichier .xml) pour ClickHouse Keeper. #30372 (alesapin).
  • Ajout de la fonction d’agrégation sparkbar. Cela clôture #26175. #27481 (小路). Note : cette fonction présente un défaut et son comportement sera modifié dans les versions futures.

Amélioration

  • Permettre à l’utilisateur de modifier les niveaux de journalisation sans redémarrage. #29586 (Nikolay Degterinsky).
  • Plusieurs améliorations pour les SQL UDF. Les requêtes de manipulation des SQL User Defined Functions prennent désormais en charge la clause ON CLUSTER. Exemple : CREATE FUNCTION test_function ON CLUSTER 'cluster' AS x -> x + 1;. Corrige #30666. #30734 (Maksim Kita). Prise en charge des syntaxes CREATE OR REPLACE et CREATE IF NOT EXISTS. #30454 (Maksim Kita). Ajout de la prise en charge de DROP IF EXISTS. Exemple : DROP FUNCTION IF EXISTS test_function. #30437 (Maksim Kita). Prise en charge des lambdas. Exemple : CREATE FUNCTION lambda_function AS x -> arrayMap(element -> element * 2, x);. #30435 (Maksim Kita). Prise en charge des fonctions SQL définies par l’utilisateur pour clickhouse-local. #30179 (Maksim Kita).
  • Activer globalement le Profiler mémoire par query (avec memory_profiler_step = 4MiB). #29455 (Azat Khuzhin).
  • Ajout des columns data_compressed_bytes, data_uncompressed_bytes, marks_bytes dans system.data_skipping_indices. Ajout des columns secondary_indices_compressed_bytes, secondary_indices_uncompressed_bytes, secondary_indices_marks_bytes dans system.parts. Corrige #29697. #29896 (Maksim Kita).
  • Ajouter l’alias table à system.tables et l’alias database à system.databases #29677. #29882 (kevin wan).
  • Résoudre correctement les interdépendances entre les tables au démarrage du server. Corrige #8004, corrige #15170. #28373 (tavplubix).
  • Éviter l’error “Division by zero” lorsque le dénominateur est Nullable dans les fonctions divide, intDiv et modulo. Corrige #22621. #28352 (Kruglov Pavel).
  • Permettre d’analyser les values du Data type Date dans les text formats au format YYYYMMDD, en plus de YYYY-MM-DD. Cela corrige #30870. #30871 (alexey-milovidov).
  • Web UI : afficher des barres dans les cell de table. #29792 (alexey-milovidov).
  • L’utilisateur peut désormais créer des dictionnaires avec des commentaires : CREATE DICTIONARY ... COMMENT 'vaue'#29899 (Vasily Nemkov). Les utilisateurs peuvent désormais définir des commentaires sur une base de données dans l’instruction CREATE DATABASE#29429 (Vasily Nemkov).
  • Introduction du paramètre compiled_expression_cache_elements_size. Si jamais vous avez besoin d’utiliser ce paramètre, vous saurez déjà à quoi il sert. #30667 (Maksim Kita).
  • clickhouse-format prend désormais en charge l’option --query. Dans les versions précédentes, il fallait passer la requête via stdin. #29325 (凌涛).
  • Prise en charge de ALTER TABLE pour les tables des bases de données Memory. Les bases de données Memory sont utilisées dans clickhouse-local. #30866 (tavplubix).
  • Les arrays de tous les types sérialisables sont désormais pris en charge par arrayStringConcat. #30840 (Nickita Taranov).
  • ClickHouse tient désormais compte des limitations de docker/cgroups pour déterminer la quantité de mémoire système. Voir #25662. #30574 (Pavel Medvedev).
  • La structure de table récupérée pour la base de données PostgreSQL est désormais plus fiable. #30477 (Kseniia Sumarokova).
  • Prise en charge complète des arguments positionnels dans GROUP BY et ORDER BY. #30433 (Kseniia Sumarokova).
  • Autorise l’extraction sous forme de chaîne d’un élément qui n’est pas une chaîne avec JSONExtractString. Voir pull/25452#issuecomment-927123287. #30426 (Amos Bird).
  • Ajout de la possibilité d’utiliser la clause FINAL dans les requêtes SELECT sur GraphiteMergeTree. #30360 (Nikita Mikhaylov).
  • Améliorations mineures du clonage de replica et de la mise en file d’attente du fetch pour les parts corrompues, ce qui devrait éviter de très rares blocages des entrées GET_PART dans la replication queue. #30346 (tavplubix).
  • Autorise les liens symboliques vers des fichiers dans le répertoire user_files pour la table function file. #30309 (Kseniia Sumarokova).
  • Correction de la comparaison de Date32 avec Date, DateTime, DateTime64 et String. #30219 (liang.huang).
  • Autorise la suppression de l’expression SAMPLE BY des tables MergeTree (ALTER TABLE <table> REMOVE SAMPLE BY). #30180 (Anton Popov).
  • Désormais, Keeper (dans clickhouse-server) démarrera de manière asynchrone s’il peut se connecter à un autre nœud. #30170 (alesapin).
  • Désormais, clickhouse-client prend en charge l’édition multiligne native. #30143 (Amos Bird).
  • Dictionnaires polygon (géocodage inverse) : ajout de la prise en charge de la lecture du contenu du dictionnaire avec la méthode de requête SELECT si le paramètre store_polygon_key_column = true. Clôt #30090. #30142 (Maksim Kita).
  • Ajout du logo ClickHouse à l’interface Play. #29674 (alexey-milovidov).
  • Message d’exception amélioré lors de la lecture d’une colonne depuis des formats pris en charge par Arrow, comme Arrow, ArrowStream, Parquet et ORC. Clôt #29926. #29927 (alexey-milovidov).
  • Correction d’une situation de concurrence entre flush et le démarrage dans les tables Buffer. Cela peut se produire dans les tests. #29930 (Azat Khuzhin).
  • Correction d’une inversion de l’ordre des verrous entre DROP TABLE pour DatabaseMemory et LiveView. Live View est une fonctionnalité expérimentale. La base de données Memory est utilisée dans clickhouse-local. #29929 (Azat Khuzhin).
  • Correction d’une inversion de l’ordre des verrous entre le rechargement périodique du dictionnaire et celui de la config. #29928 (Azat Khuzhin).
  • Mise à jour des fichiers zoneinfo vers la version 2021c. #29925 (alexey-milovidov).
  • Ajout de la possibilité de configurer les tentatives de nouvelle exécution et les délais entre celles-ci pour clickhouse-copier. #29921 (Azat Khuzhin).
  • Ajout du paramètre serveur shutdown_wait_unfinished_queries pour permettre d’attendre la fin des requêtes en cours d’exécution jusqu’à la durée shutdown_wait_unfinished. Cela concerne #24451. #29914 (Amos Bird).
  • Ajout de la possibilité de tracer le pic d’utilisation de la mémoire (avec un nouveau trace_type dans system.trace_log : MemoryPeak). #29858 (Azat Khuzhin).
  • Tables externes PostgreSQL : ajout du préfixe de table partitionnée ‘p’ à la requête de récupération de l’index d’identité de réplica. #29828 (Shoh Jahon).
  • Application de max_untracked_memory/memory_profiler_step/memory_profiler_sample_probability pendant les opérations de mutation/fusion afin de profiler l’utilisation de la mémoire lors des fusions. #29681 (Azat Khuzhin).
  • Obfuscateur de requêtes : clickhouse-format --obfuscate fonctionne désormais avec davantage de types de requêtes. #29672 (alexey-milovidov).
  • Correction du problème suivant : clickhouse-format --obfuscate ne peut pas traiter les requêtes avec des dictionnaires intégrés (fonctions regionTo...). #29667 (alexey-milovidov).
  • Correction du traitement incorrect de Nullable dans les fonctions JSON. Cela corrige #29615. Marqué comme amélioration car https://github.com/ClickHouse/ClickHouse/pull/28012 n’est pas publié. #29659 (Amos Bird).
  • Augmentation de listen_backlog par défaut (pour l’aligner sur la valeur par défaut des versions plus récentes du noyau Linux). #29643 (Azat Khuzhin).
  • Rechargement des dictionnaires, des modèles et des fonctions exécutables définies par l’utilisateur si la config du serveur dictionaries_config, models_config, user_defined_executable_functions_config change. Clôt #28142. #29529 (Maksim Kita).
  • Suppression d’une restriction inutile sur le nom des projections. Désormais, le nom d’une projection peut commencer par tmp_. #29520 (Amos Bird).
  • Correction de l’erreur There is no query or query context has expired dans les mutations avec des sous-requêtes imbriquées. Les sous-requêtes ne sont pas autorisées dans une mutation si la table est répliquée et que le paramètre allow_nondeterministic_mutations est désactivé. #29495 (tavplubix).
  • Application des changements de config à max_concurrent_queries à chaud (sans redémarrage). #29414 (Raúl Marín).
  • Ajout du paramètre use_skip_indexes. #29405 (Maksim Kita).
  • Ajout de la prise en charge de FREEZE pour les parts en mémoire (pour les sauvegardes). #29376 (Mo Xuan).
  • Transmission de initial query&#95;id pour clickhouse-benchmark (auparavant, si vous exécutiez une requête distante via clickhouse-benchmark, les requêtes sur les shards n’étaient pas associées à la requête initiale via initial_query_id). #29364 (Azat Khuzhin).
  • Index de saut tokenbf_v1 et ngrambf_v1 : ajout de la prise en charge du type de données Array avec une clé de type String ou FixedString. #29280 (Maksim Kita). Les index de saut tokenbf_v1 et ngrambf_v1 prennent désormais en charge le type de données Map avec une clé de type String ou FixedString. Auteur : @lingtaolf. #29220 (Maksim Kita).
  • Fonction has : ajout de la prise en charge du type de données Map. #29267 (Maksim Kita).
  • Ajout du paramètre compress_logs pour ClickHouse Keeper, qui permet de compresser les logs de ClickHouse Keeper (pour la machine à états répliquée) en ZSTD. Implémente : #26977. #29223 (alesapin).
  • Ajout d’un paramètre external_table_strict_query - il force la transmission de l’intégralité de l’expression WHERE dans les requêtes vers des bases de données externes, même si elle est incompatible. #29206 (Azat Khuzhin).
  • Désactivation des projections lorsque ARRAY JOIN est utilisé. Dans les versions précédentes, l’analyse des projections pouvait casser les alias dans ARRAY JOIN. #29139 (Amos Bird).
  • Prise en charge d’un plus grand nombre de types dans le format d’entrée/sortie MsgPack. #29077 (Kruglov Pavel).
  • Autorise la lecture et l’écriture de colonnes LowCardinality au format d’entrée/sortie ORC. #29062 (Kruglov Pavel).
  • Un SELECT sur system.distributed_ddl_queue pouvait afficher des valeurs incorrectes ; c’est corrigé. #29061 (tavplubix).
  • Corrige le comportement en présence de méthodes inconnues pour les connexions HTTP. Résout #29050. #29057 (Filatenkov Artur).
  • clickhouse-keeper : corrige un bug dans clickhouse-keeper-converter qui pouvait entraîner une perte partielle de données lors d’une restauration à partir des logs ZooKeeper (et non d’un snapshot). #29030 (小路). Corrige un bug dans clickhouse-keeper-converter qui pouvait entraîner une désérialisation incorrecte des logs ZooKeeper. #29071 (小路).
  • Applique les paramètres des requêtes CREATE ... AS SELECT (corrige #28810). #28962 (Azat Khuzhin).
  • Respecte le paramètre de base de données par défaut pour ALTER TABLE … ON CLUSTER … REPLACE/MOVE PARTITION FROM/TO … #28955 (anneji-dev).
  • Protocole gRPC : permet de modifier la compression côté serveur depuis le client. #28953 (Vitaly Baranov).
  • Ignore l’exception “no data” lors de la lecture des capteurs thermiques pour les métriques asynchrones. Cela clôt #28852. #28882 (alexey-milovidov).
  • Corrige une rare condition de concurrence logique pouvant provoquer l’erreur Dictionary not found pour un dictionnaire existant. #28853 (tavplubix).
  • Assouplit la vérification des fonctions imbriquées pour le combinator If (mais interdit les combinators identiques imbriqués). #28828 (Azat Khuzhin).
  • Corrige une exception potentiellement non interceptée lors de l’arrêt du serveur. #28761 (Azat Khuzhin).
  • Interdit le nettoyage des répertoires tmp susceptibles d’être utilisés par une mutation/fusion active si la mutation/fusion est exceptionnellement longue. #28760 (Azat Khuzhin).
  • Autorise l’optimisation optimize_arithmetic_operations_in_aggregate_functions = 1 lorsqu’un alias est utilisé. #28746 (Amos Bird).
  • Implémente le paramètre detach_not_byte_identical_parts pour ReplicatedMergeTree, qui détache au lieu de supprimer les parts non identiques octet par octet (après fusion/mutation). #28708 (Azat Khuzhin).
  • Implémente le paramètre max_suspicious_broken_parts_bytes pour MergeTree (afin de limiter la taille totale de toutes les parts corrompues ; la valeur par défaut est 1GiB). #28707 (Azat Khuzhin).
  • Activer l’expansion des macros dans les paramètres de table RabbitMQ. #28683 (Vitaly Baranov).
  • Rétablir la possibilité de lire les données d’une table avec le moteur Log sur plusieurs threads. #28125 (Vitaly Baranov).
  • Corriger le comportement incorrect de la gestion des colonnes NULL dans les fonctions JSON. Cela corrige #27930. #28012 (Amos Bird).
  • Permettre de définir, indépendamment des colonnes, la taille du cache Mark/Uncompressed pour les indices de saut. #27961 (Amos Bird).
  • Permettre de combiner des JOIN avec USING avec d’autres types de JOIN. #23881 (darkkeks).
  • Mettre à jour le sous-module aws-sdk pour la limitation de débit dans Yandex Cloud S3. #30646 (ianton-ru).
  • Corriger la libération de l’ID de requête et de l’ID de session à la fin du traitement de la requête lors du traitement d’un appel gRPC. #29954 (Vitaly Baranov).
  • Corriger l’arrêt d’AccessControlManager afin de stabiliser un test instable. #29951 (Vitaly Baranov).
  • Corriger une assertion échouée lors de la lecture depuis HDFS. Mettre à jour la bibliothèque libhdfs3 pour permettre son exécution dans les tests en mode Débogage. Clôture #29251. Clôture #27814. #29276 (Kseniia Sumarokova).

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

  • Ajout de la prise en charge des builds FreeBSD pour les machines Aarch64. #29952 (MikaelUrankar).
  • Les sous-modules récursifs ne sont plus nécessaires pour ClickHouse. #30315 (alexey-milovidov).
  • ClickHouse peut désormais être compilé statiquement avec Musl. Cette fonctionnalité est ajoutée à titre expérimental et ne prend pas en charge la compilation de odbc-bridge, library-bridge, l’intégration avec CatBoost ni certaines bibliothèques. #30248 (alexey-milovidov).
  • Activation de Protobuf, Arrow, ORC, Parquet pour les builds AArch64 et Darwin (macOS). Cela clôt #29248. Cela clôt #28018. #30015 (alexey-milovidov).
  • Ajout de la cross-compilation pour PowerPC (powerpc64le). Cela clôt #9589. Activation de la prise en charge de l’interaction avec MySQL pour AArch64 et PowerPC. Cela clôt #26301. #30010 (alexey-milovidov).
  • Ne conserver que les fichiers requis dans les toolchains de cross-compilation. Les inclure comme sous-modules (ils étaient auparavant téléchargés sous forme de tarballs). #29974 (alexey-milovidov).
  • Mise en œuvre dans ClickHouse d’une approche de fuzzing tenant compte de la structure pour le parseur d’instructions SELECT. #30012 (Paul).
  • Activation de l’évaluateur expérimental d’expressions constexpr pour clang afin d’accélérer la compilation du code de Template. #29668 (myrrc).
  • Ajout de la possibilité de compiler avec une version plus récente de glibc sans utiliser de nouveaux symboles. #29594 (Azat Khuzhin).
  • Réduction de la taille du binaire de build Debug grâce à une option d’optimisation de clang. #28736 (flynn).
  • Désormais, toutes les images de la CI seront placées dans un dépôt Docker Hub distinct. #28656 (alesapin).
  • Amélioration de la prise en charge de la compilation avec clang-13. #28046 (Sergei Semin).
  • Ajout de la possibilité d’afficher les profile events bruts dans clickhouse-client (cela peut être utile pour le débogage et les tests). #30064 (Azat Khuzhin).
  • Ajout d’une dépendance temporelle pour l’unité clickhouse-server (initialisation systemd et sysvinit). #28891 (Azat Khuzhin).
  • Rechargement du cache de stacktrace lorsqu’un symbole est rechargé. #28137 (Amos Bird).

Correction de bugs

  • Les fonctions de recherche case-insensitive dans les chaînes UTF-8, comme positionCaseInsensitiveUTF8 et countSubstringsCaseInsensitiveUTF8, pouvaient dans de très rares cas trouver des sous-chaînes qui ne correspondaient pas réellement ; c’est corrigé. #30663 (tavplubix).
  • Correction de la lecture d’un fichier vide sur un disk chiffré. #30494 (Vitaly Baranov).
  • Correction de la transformation d’une chaîne de disjonctions en IN (contrôlée par le paramètre optimize_min_equality_disjunction_chain_length) dans les requêtes distribuées avec le paramètre legacy_column_name_of_tuple_literal = 0. #28658 (Anton Popov).
  • Autorise l’utilisation d’une colonne matérialisée comme clé de sharding dans une table distribuée, même si insert_allow_materialized_columns=0. #28637 (Vitaly Baranov).
  • Correction de ORDER BY ... WITH FILL lorsque TO et FROM sont définis et qu’aucune ligne n’est présente dans le jeu de résultats. #30888 (Anton Popov).
  • Correction du fait que l’index Set n’était pas utilisé dans les expressions AND/OR lorsqu’il y avait plus de deux opérandes. Cela corrige #30416. #30887 (Amos Bird).
  • Correction d’un plantage lorsqu’une projection avec fonction de hachage est matérialisée. Cela corrige #30861. Le problème est similaire à https://github.com/ClickHouse/ClickHouse/pull/28560 et provient d’une mauvaise compréhension de l’invariant de vacuité de l’en-tête. #30877 (Amos Bird).
  • Correction d’une ambiguïté lors de l’extraction du nom du ZooKeeper auxiliaire à partir du ZooKeeper path dans ReplicatedMergeTree. Auparavant, le server pouvait ne pas démarrer avec Unknown auxiliary ZooKeeper name si le ZooKeeper path contenait un deux-points. Corrige #29052. Il était également possible de spécifier un ZooKeeper path ne commençant pas par une barre oblique, mais cet usage est désormais obsolète et la création de nouvelles tables avec un tel path n’est plus autorisée. Les barres obliques et les deux-points dans les noms de ZooKeeper auxiliaires ne sont pas non plus autorisés. #30822 (tavplubix).
  • Nettoyage du répertoire temporaire lorsque localBackup échouait pour une raison quelconque. #30797 (ianton-ru).
  • Correction d’une condition de concurrence entre REPLACE/MOVE PARTITION et les fusions en arrière-plan dans MergeTree non répliqué, qui pouvait laisser une partie des données déplacées/remplacées dans la partition. Corrige #29327. #30717 (tavplubix).
  • Correction de PREWHERE avec WHERE dans le cas d’un PREWHERE toujours vrai. #30668 (Azat Khuzhin).
  • L’optimisation de push down de Limit pouvait provoquer une erreur Cannot find column. Corrige #30438. #30562 (Nikolai Kochetov).
  • Ajout des parenthèses manquantes pour les réécritures de isNotNull/isNull en IS [NOT] NULL (corrige les requêtes contenant quelque chose comme isNotNull(1)+isNotNull(2)). #30520 (Azat Khuzhin).
  • Correction d’un interblocage sur ALTER avec une sous-requête scalaire sur la même table, résout #30461. #30492 (Vladimir C).
  • Correction d’un segfault pouvant se produire si la session expirait pendant l’exécution de REPLACE PARTITION. #30432 (tavplubix).
  • Les requêtes avec une condition comme IN (subquery) pouvaient renvoyer un résultat incorrect lorsqu’une projection agrégée était appliquée. Correction de la création des ensembles pour les projections. #30310 (Amos Bird).
  • Correction de la résolution des alias de colonnes dans les requêtes JOIN lorsque la projection est activée. Cela corrige #30146. #30293 (Amos Bird).
  • Correction de certains problèmes dans la fonction replaceRegexpAll. #30292 (Memo).
  • Correction de l’analyse de l’option preallocate à partir de la configuration de layout pour ComplexKeyHashedDictionary et ComplexKeySparseHashedDictionary. #30246 (Maksim Kita).
  • Correction de la fonction [I]LIKE. Résout #28661. #30244 (Nikolay Degterinsky).
  • Correction d’un crash avec shortcircuit et lowcardinality dans multiIf. #30243 (Raúl Marín).
  • Correction du calcul de bytes_allocated dans FlatDictionary et HashedDictionary pour les attributs Nullable. #30238 (Maksim Kita).
  • Autorisation des identifiants commençant par des chiffres dans les JOIN multiples. #30230 (Vladimir C).
  • Correction de la lecture depuis MergeTree avec max_read_buffer_size = 0 (quand l’utilisateur veut se tirer une balle dans le pied) (cela peut entraîner les exceptions Can't adjust last granule, LOGICAL_ERROR, voire une perte de données). #30192 (Azat Khuzhin).
  • Correction de pread_fake_async/pread_threadpool avec min_bytes_to_use_direct_io. #30191 (Azat Khuzhin).
  • Correction du cas où INSERT SELECT remplissait incorrectement une colonne matérialisée à partir d’une colonne Nullable. #30189 (Azat Khuzhin).
  • Prise en charge des arguments Nullable dans la fonction initializeAggregation. #30177 (Anton Popov).
  • Correction de l’erreur Port is already connected pour les requêtes avec GLOBAL IN et WITH TOTALS. Uniquement pour 21.9 et 21.10. #30086 (Nikolai Kochetov).
  • Correction d’une condition de concurrence entre MOVE PARTITION et les merges/mutations pour MergeTree. #30074 (Azat Khuzhin).
  • Une base de données Memory supprimée pouvait réapparaître après le redémarrage du serveur ; c’est corrigé (#29795). Ajout également du paramètre force_remove_data_recursively_on_drop comme solution de contournement à l’erreur Directory not empty lors de la suppression d’une base de données Ordinary (car il n’est pas possible de supprimer manuellement les restes de données dans un environnement cloud). #30054 (tavplubix).
  • Correction d’un plantage de sample avec tuple(), clôt #30004. #30016 (flynn).
  • Tentative de clôture de l’issue : #29965. #29976 (hexiaoting).
  • Correction d’une possible condition de concurrence entre FileChecker et StorageLog/StorageStripeLog. #29959 (Azat Khuzhin).
  • Correction d’une condition de concurrence entre LogSink::writeMarks() et LogSource dans StorageLog. #29946 (Azat Khuzhin).
  • Correction d’une fuite potentielle de ressources liée à la limite de query concurrentes des tables MergeTree introduite dans https://github.com/ClickHouse/ClickHouse/pull/19544. #29879 (Amos Bird).
  • Correction de la vérification de recréation des system tables (elle ne détectait pas les changements dans les valeurs d’enum). #29857 (Azat Khuzhin).
  • MaterializedMySQL : correction d’un problème où, si la connexion à MySQL était perdue, seule une partie d’une transaction pouvait être traitée. #29837 (Håvard Kvålen).
  • Évite l’erreur Timeout exceeded: elapsed 18446744073.709553 seconds, qui pouvait survenir dans des cas extrêmement rares, probablement en raison d’un bug du kernel. Corrige #29154. #29811 (tavplubix).
  • Correction d’un cast incorrect dans la query ATTACH TABLE ... FROM 'path' lorsqu’un littéral non chaîne est utilisé à la place du path. Cela peut entraîner la lecture d’une mémoire non initialisée. #29790 (alexey-milovidov).
  • Correction de l’accès concurrent à LowCardinality pendant GROUP BY (en combinaison avec des tables Buffer, cela peut entraîner des problèmes). #29782 (Azat Khuzhin).
  • Correction d’un GROUP BY incorrect (plusieurs rows avec les mêmes keys dans le résultat) dans le cas d’une distributed query lorsque les shards avaient des versions mixtes <= 21.3 et >= 21.4, que la key de GROUP BY comportait plusieurs columns toutes de taille fixe, et que la two-level aggregation était activée (voir group_by_two_level_threshold et group_by_two_level_threshold_bytes). Corrige #29580. #29735 (Nikolai Kochetov).
  • Correction du comportement incorrect du paramètre materialized_postgresql_tables_list au redémarrage du serveur. Signalé dans #28529. #29686 (Kseniia Sumarokova).
  • La condition du prédicat de filtrage pouvait être perdue après l’optimisation de push-down. #29625 (Nikolai Kochetov).
  • Correction de la compilation JIT des expressions avec alias et de l’évaluation court-circuitée des expressions. Clôt #29403. #29574 (Maksim Kita).
  • Correction d’un segfault rare dans la query ALTER MODIFY lors de l’utilisation d’un identifiant de table incorrect dans une expression DEFAULT telle que x.y.z.... Corrige #29184. #29573 (alesapin).
  • Correction d’un déréférencement de pointeur nul pour GROUP BY WITH TOTALS HAVING (lorsque la colonne de HAVING n’était pas sélectionnée). #29553 (Azat Khuzhin).
  • Évite les deadlocks lors de lectures et d’écritures simultanées sur des tables utilisant le moteur de table Join. #29544 (Raúl Marín).
  • Correction d’un bug dans la vérification pathStartsWith, dû à un problème d’utilisation de std::mismatch : The behavior is undefined if the second range is shorter than the first range.. #29531 (Kseniia Sumarokova).
  • Dans ODBC bridge, ajout de retries pour l’erreur Invalid cursor state. Il s’agit d’une erreur sur laquelle une nouvelle tentative est possible. Clôt #29473. #29518 (Kseniia Sumarokova).
  • Correction de l’analyse incorrecte du nom de table lors du chargement de la base de données Lazy. Corrige #29456. #29476 (tavplubix).
  • Correction d’un possible Block structure mismatch pour des sous-requêtes avec prédicat HAVING poussé vers le bas. Corrige #29010. #29475 (Nikolai Kochetov).
  • Correction de l’erreur logique Cannot capture columns dans les fonctions greatest/least. Clôt #29334. #29454 (Kruglov Pavel).
  • Moteur de table RocksDB : correction d’une race condition lors de l’ouverture de plusieurs DB (et réactivation de certains tests qui déclenchent le problème en CI). #29393 (Azat Khuzhin).
  • Correction du fait que le stockage d’accès replicated ne s’arrêtait pas proprement en cas de mauvaise configuration. #29388 (Kevin Michel).
  • Suppression de la window function nth_value, car elle n’est pas sûre du point de vue mémoire. Cela clôt #29347. #29348 (alexey-milovidov).
  • Corrige les fusions verticales des parties de projection. Cela corrige #29253. Cette PR corrige également plusieurs problèmes de fusion/mutation de projections introduits dans https://github.com/ClickHouse/ClickHouse/pull/25165. #29337 (Amos Bird).
  • Corrige les requêtes DDL bloquées sur une base de données Replicated lors de l’ajout d’une nouvelle réplique. #29328 (Kevin Michel).
  • Corrige les délais d’expiration de connexion (send_timeout/receive_timeout). #29282 (Azat Khuzhin).
  • Corrige l’exception possible Table columns structure in ZooKeeper is different from local table structure lors de la recréation ou de la création de nouvelles répliques de ReplicatedMergeTree, lorsqu’une des colonnes de la table possède des expressions par défaut avec des fonctions insensibles à la casse. #29266 (Anton Popov).
  • Renvoie au client (via TCP) l’erreur standard Database doesn't exist error (UNKNOWN_DATABASE) au lieu de Attempt to read after eof (ATTEMPT_TO_READ_AFTER_EOF). #29229 (Azat Khuzhin).
  • Corrige un segfault lors d’une insertion dans une colonne de type LowCardinality(Nullable) au format d’entrée Avro. #29132 (Kruglov Pavel).
  • N’autorise plus la réutilisation d’informations d’authentification précédentes dans le cas d’un secret inter-serveur (auparavant, un INSERT via Buffer/Kafka vers une table Distributed avec un secret inter-serveur configuré pour ce cluster pouvait réutiliser l’utilisateur précédemment défini pour cette connexion). #29060 (Azat Khuzhin).
  • Gère any_join_distinct_right_table_keys lors d’une jointure avec un dictionnaire, résout #29007. #29014 (Vladimir C).
  • Corrige l’erreur “Not found column … in block” lors d’une jointure sur une colonne alias, résout #26980. #29008 (Vladimir C).
  • Corrige le nombre de threads utilisés dans la sous-requête GLOBAL IN (elle était exécutée sur un seul thread depuis le correctif du bug #19414). #28997 (Nikolai Kochetov).
  • Corrige de mauvaises optimisations de ORDER BY s’il contient WITH FILL. Cela résout #28908. Cela résout #26049. #28910 (alexey-milovidov).
  • Corrige les fonctions array d’ordre supérieur (SIGSEGV pour arrayCompact/ILLEGAL_COLUMN pour arrayDifference/arrayCumSumNonNegative) avec des constantes. #28904 (Azat Khuzhin).
  • Corrige l’attente d’une mutation avec mutations_sync=2. #28889 (Azat Khuzhin).
  • Corrige les requêtes vers des bases de données externes (c.-à-d. MySQL) avec plusieurs colonnes dans IN (c.-à-d. (k,v) IN ((1, 2))). #28888 (Azat Khuzhin).
  • Corrige un bug avec LowCardinality dans l’évaluation avec court-circuit des fonctions. Clôt #28884. #28887 (Kruglov Pavel).
  • Corrige la lecture des sous-colonnes à partir de parts compactes. #28873 (Anton Popov).
  • Corrige une condition de concurrence entre DROP PART et REPLACE/MOVE PARTITION qui pouvait, dans de rares cas, faire diverger les répliques. #28864 (tavplubix).
  • Corrige la compilation des expressions avec évaluation à court-circuit. #28821 (Azat Khuzhin).
  • Corrige un cas extrêmement rare où les répliques ReplicatedMergeTree peuvent diverger après un redémarrage brutal de toutes les répliques. L’erreur ressemble à Part ... intersects (previous|next) part .... #28817 (alesapin).
  • Améliore la vérification qu’une connexion est utilisable et intercepte également toute exception lors de l’arrêt de RabbitMQ, par précaution. #28797 (Kseniia Sumarokova).
  • Corrige une condition de concurrence bénigne dans ReplicatedMergeTreeQueue. Cela ne devrait pas être visible par l’utilisateur, mais peut entraîner des bugs subtils. #28734 (alesapin).
  • Corrige un possible crash pour SELECT avec une projection d’agrégation partiellement créée en cas d’exception. #28700 (Amos Bird).
  • Corrige le coredump lors de la création de tables distribuées lorsque les paramètres fournis sont incorrects. #28686 (Zhiyong Wang).
  • Ajoute les alias Settings.Names et Settings.Values pour la table system.processes. #28685 (Vitaly).
  • Prise en charge de la bibliothèque S2 Geometry : corrige le nombre d’arguments requis par les fonctions s2RectAdd et s2RectContains. #28663 (Bharat Nallan).
  • Corrige une conversion invalide de type constant lorsqu’une clé primaire Nullable ou LowCardinality est utilisée. #28636 (Amos Bird).
  • Corrige “Column is not under aggregate function and not in GROUP BY” avec PREWHERE (corrige #28461). #28502 (Azat Khuzhin).

Version de ClickHouse v21.10, 2021-10-16. Présentation, Vidéo

Changement rétro-incompatible

  • Désormais, les paramètres suivants au niveau de la table MergeTree : replicated_max_parallel_sends, replicated_max_parallel_sends_for_table, replicated_max_parallel_fetches, replicated_max_parallel_fetches_for_table n’ont plus aucun effet. Ils n’ont jamais vraiment bien fonctionné et ont été remplacés par max_replicated_fetches_network_bandwidth, max_replicated_sends_network_bandwidth et background_fetches_pool_size. #28404 (alesapin).

Nouvelle fonctionnalité

  • Ajout d’une fonctionnalité permettant de créer des fonctions définies par l’utilisateur (UDF) sous forme d’expressions lambda. Syntaxe CREATE FUNCTION {function_name} as ({parameters}) -> {function core}. Exemple CREATE FUNCTION plus_one as (a) -> a + 1. Auteurs @Realist007. #27796 (Maksim Kita) #23978 (Realist007).
  • Ajout du moteur de stockage Executable et de la fonction de table executable. Cela permet le traitement des données avec des scripts externes en continu. #28102 (Maksim Kita) (ruct).
  • Ajout du moteur de stockage ExecutablePool. Similaire à Executable, mais il utilise un pool de processus persistants. #28518 (Maksim Kita).
  • Ajout de la requête ALTER TABLE ... MATERIALIZE COLUMN. #27038 (Vladimir Chebotarev).
  • Prise en charge de l’écriture partitionnée dans la fonction de table s3. #23051 (Vladimir Chebotarev).
  • Prise en charge du format de compression lz4 (en plus de gz, bz2, xz, zstd) pour l’import/export de données. #25310 (Bharat Nallan).
  • Prise en charge des arguments positionnels avec le paramètre enable_positional_arguments. Résout #2592. #27530 (Kseniia Sumarokova).
  • Prise en charge des paramètres utilisateur liés aux formats de fichier dans la clause SETTINGS de la requête CREATE pour les tables s3. Cela résout #27580. #28037 (Nikita Mikhaylov).
  • Prise en charge de la connexion SSL pour le moteur RabbitMQ. #28365 (Kseniia Sumarokova).
  • Ajout de la fonction getServerPort pour obtenir le port du serveur. Si le port n’est pas utilisé par le serveur, la fonction lève une exception. #27900 (Amos Bird).
  • Ajout de fonctions de conversion entre « snowflake id » et DateTime, DateTime64. Voir #27058. #27704 (jasine).
  • Ajout de la fonction SHA512. #27830 (zhanglistar).
  • Ajout du paramètre log_queries_probability, qui permet à l’utilisateur de n’écrire dans query_log qu’un échantillon de requêtes. Résout #16609. #27527 (Nikolay Degterinsky).

Fonctionnalité expérimentale

  • Type de disque web permettant de stocker des tables en lecture seule sur un serveur web sous forme de fichiers statiques. Voir #23982. #25251 (Kseniia Sumarokova). Cela est surtout utile pour faciliter les tests sur un stockage partagé et l’importation de jeux de données. Son utilisation n’est pas recommandée avant la version 21.11.
  • Ajout des nouvelles commandes BACKUP et RESTORE. #21945 (Vitaly Baranov). Cette fonctionnalité est encore en développement et n’est pas destinée à être utilisée dans la version actuelle.

Amélioration des performances

  • Accélération des fonctions d’agrégation sumIf et countIf. #28272 (Raúl Marín).
  • Création d’une projection virtuelle pour les index minmax. Désormais, lorsque allow_experimental_projection_optimization est activé, les requêtes utilisent l’index minmax au lieu de lire les données lorsque c’est possible. #26286 (Amos Bird).
  • Ajout de deux vérifications dans sequenceMatch et sequenceCount, permettant une sortie anticipée lorsqu’une partie déterministe du motif de séquence est absente de la liste des événements. Cette modification débloque de nombreuses requêtes qui échouaient auparavant parce qu’elles atteignaient la limite d’opérations, et accélère globalement le pipeline. #27729 (Jakub Kuklis).
  • Amélioration de l’analyse de la clé primaire grâce à des informations de monotonie garanties sur les fonctions binaires, notamment la division par une constante non nulle. #28302 (Amos Bird).
  • La condition de filtre hasAll exploite désormais les index de saut de données de type bloom filter. #27984 (Braulio Valdivielso Martínez).
  • Accélération du chargement des data parts en différant le démarrage de la table. #28313 (Amos Bird).
  • Correction d’un nombre potentiellement excessif de conditions déplacées de WHERE vers PREWHERE (optimisation contrôlée par le paramètre optimize_move_to_prewhere). #28139 (lthaooo).
  • Activation par défaut de optimize_distributed_group_by_sharding_key. #28105 (Azat Khuzhin).

Amélioration

  • Vérifier le nom du cluster avant de créer une table Distributed et ne pas autoriser la création d’une table avec un nom de cluster incorrect. Corrige #27832. #27927 (tavplubix).
  • Ajouter la fonction d’agrégation quantileBFloat16Weighted, sur le modèle des autres fonctions quantile…Weighted. Résout #27745. #27758 (Ivan Novitskiy).
  • Autoriser la création de dictionnaires avec une liste d’attributs vide. #27905 (Maksim Kita).
  • Ajouter dans clickhouse-client une documentation interactive expliquant comment réinitialiser le mot de passe. C’est utile lorsque l’utilisateur a installé ClickHouse, configuré le mot de passe, puis l’oublie aussitôt. Voir #27750. #27903 (alexey-milovidov).
  • Prendre en charge le cas où les données sont encapsulées dans un tableau avec le format d’entrée JSONAsString. Résout #25517. #25633 (Kruglov Pavel).
  • Ajouter une nouvelle colonne last_queue_update_exception à la table system.replicas. #26843 (nvartolomei).
  • Prendre en charge les reconnexions en cas de basculement pour les tables MaterializedPostgreSQL. Résout #28529. #28614 (Kseniia Sumarokova).
  • Générer un UUID de serveur unique au premier démarrage du serveur. #20089 (Bharat Nallan).
  • Introduire le paramètre connection_wait_timeout (5 secondes par défaut, 0 pour ne pas attendre) pour le moteur MySQL. #28474 (Azat Khuzhin).
  • Ne pas autoriser la création de MaterializedPostgreSQL avec des arguments invalides. Résout #28423. #28430 (Kseniia Sumarokova).
  • Utiliser un véritable fichier tmp au lieu de “rows_sources” prédéfini pour les fusions verticales. Cela évite de générer des répertoires parasites sur les disques tmp. #28299 (Amos Bird).
  • Ajouter libhdfs3_conf à la config du serveur au lieu d’exporter la variable d’environnement LIBHDFS3_CONF dans clickhouse-server.service. Cela sert à configurer l’interaction avec HDFS. #28268 (Zhichang Yu).
  • Corriger la suppression de parts à l’état Temporary, qui peut entraîner une exception inattendue (Part %name% doesn't exist). Corrige #23661. #28221 #28221) (Azat Khuzhin).
  • Corrige zookeeper_log.address (avant le premier correctif de cette PR, l’adresse était toujours ::) et réduit le nombre d’appels à getpeername(2) pour cette colonne (comme getpeername() était appelé chaque fois qu’une entrée était ajoutée à zookeeper_log, cette adresse est désormais mise en cache dans le client zookeeper pour éviter cela). #28212 (Azat Khuzhin).
  • Prise en charge des conversions implicites entre l’index de l’opérateur [] et une clé de type Map (par ex. différents types Int, String et FixedString). #28096 (Anton Popov).
  • Prise en charge de la clause ON CONFLICT lors de l’insertion dans un PostgreSQL table engine ou une table function. Clôt #27727. #28081 (Kseniia Sumarokova).
  • Assouplit les restrictions sur le type de données Enum pour permettre l’attachement de données compatibles. Clôt #26672. #28028 (Dmitry Novik).
  • Ajoute un paramètre empty_result_for_aggregation_by_constant_keys_on_empty_set pour contrôler le comportement du regroupement par clés constantes sur un ensemble vide. Cela rétablit l’ancien comportement de #6842. #27932 (Amos Bird).
  • Ajout du paramètre replication_wait_for_inactive_replica_timeout. Il permet de spécifier combien de temps attendre que des répliques inactives exécutent la requête ALTER/OPTIMZE/TRUNCATE (la valeur par défaut est de 120 secondes). Si replication_alter_partitions_sync vaut 2 et que certaines répliques restent inactives plus de replication_wait_for_inactive_replica_timeout secondes, alors UNFINISHED sera levée. #27931 (tavplubix).
  • Prise en charge d’un argument lambda pour le transformateur de colonnes APPLY, permettant d’appliquer des fonctions avec plus d’un argument. Cela concerne #27877. #27901 (Amos Bird).
  • Active tcp_keep_alive_timeout par défaut. #27882 (Azat Khuzhin).
  • Améliore l’annulation des requêtes distantes (si le serveur distant s’est arrêté anormalement). #27881 (Azat Khuzhin).
  • Utilise l’upload par copie multipart pour les objets S3 volumineux. #27858 (ianton-ru).
  • Autorise le parcours des liens symboliques pour le chemin du dictionnaire de bibliothèque. #27815 (Kseniia Sumarokova).
  • Désormais, ALTER MODIFY COLUM T vers Nullable(T) ne nécessite plus de mutation. #27787 (victorgao).
  • N’ignore plus silencieusement les erreurs et ne comptabilise plus les délais dans ReadBufferFromS3. #27484 (Vladimir Chebotarev).
  • Améliore ALTER ... MATERIALIZE TTL en recalculant uniquement les métadonnées, sans exécuter d’action TTL réelle. #27019 (lthaooo).
  • Autorise la lecture de la liste des domaines de premier niveau personnalisés sans nouvelle ligne en fin de fichier. #28213 (Azat Khuzhin).

Corrections de bugs

  • Corrige les cas où la lecture de données compressées depuis carbon-clickhouse échoue avec ‘attempt to read after end of file’. Clôt #26149. #28150 (FArthur-cmd).
  • Corrige la vérification des grants d’accès lors de l’exécution de l’instruction GRANT WITH REPLACE avec la clause ON CLUSTER. Cette PR améliore le correctif #27001. #27983 (Vitaly Baranov).
  • Autorise la sélection avec extremes = 1 sur une colonne de type LowCardinality(UUID). #27918 (Vitaly Baranov).
  • Corrige le transtypage de style PostgreSQL (opérateur ::) avec des nombres négatifs. #27876 (Anton Popov).
  • Après #26864, corrige l’arrêt de NamedSessionStorage : les contextes de session stockés dans NamedSessionStorage sont désormais détruits avant le contexte global. #27875 (Vitaly Baranov).
  • Corrige un bug dans le mode “strict” de windowFunnel. Cela corrige #27469. #27563 (achimbab).
  • Corrige une boucle infinie lors de la lecture d’une archive bzip2 tronquée. #28543 (Azat Khuzhin).
  • Corrige un chevauchement d’UUID dans DROP TABLE pour le DDL interne de MaterializedMySQL. MaterializedMySQL est une fonctionnalité expérimentale. #28533 (Azat Khuzhin).
  • Corrige l’erreur There is no subcolumn lors d’un SELECT sur des tables qui comportent des colonnes Nested et des colonnes scalaires avec un point dans leur nom et le même préfixe que Nested (par exemple n.id UInt32, n.arr1 Array(UInt64), n.arr2 Array(UInt64)). #28531 (Anton Popov).
  • Corrige un bug pouvant entraîner l’erreur Existing table metadata in ZooKeeper differs in sorting key expression. après un ALTER de ReplicatedVersionedCollapsingMergeTree. Corrige #28515. #28528 (alesapin).
  • Corrige une possible fuite de watches ZooKeeper (problème mineur) lors du traitement en arrière-plan de la queue de DDL distribué. Clôt #26036. #28446 (tavplubix).
  • Corrige l’absence de guillemets autour des noms de table dans le moteur MaterializedPostgreSQL. Clôt #28316. #28433 (Kseniia Sumarokova).
  • Corrige le comportement incorrect des lignes non jointes issues d’une colonne Nullable. Clôt #27691. #28349 (vdimir).
  • Corrige l’optimisation de l’index NOT-IN lorsque toutes les colonnes de clé ne sont pas utilisées. Cela corrige #28120. #28315 (Amos Bird).
  • Corrige des parts qui se chevauchent, dues au remplacement d’une nouvelle part par une part vide. #28310 (Azat Khuzhin).
  • Corrige un résultat incohérent dans les requêtes avec ORDER BY et les tables Merge lorsque le paramètre optimize_read_in_order est activé. #28266 (Anton Popov).
  • Corrige une possible lecture de mémoire non initialisée pour les requêtes avec le type Nullable(LowCardinality) et le paramètre extremes défini sur 1. Corrige #28165. #28205 (Nikolai Kochetov).
  • Plusieurs petites corrections pour les projections. Voir la description détaillée dans la PR. #28178 (Amos Bird).
  • Corrige des segfault extrêmement rares à l’arrêt, dus à un ordre incorrect dans l’arrêt du rechargeur de contexte/configuration. #28088 (nvartolomei).
  • Corrige la gestion de la valeur NULL avec le type Nullable(String) dans la fonction JSONExtract. Cela corrige #27929 et #27930. Cela a été introduit dans https://github.com/ClickHouse/ClickHouse/pull/25452. #27939 (Amos Bird).
  • Plusieurs corrections pour le nouvel outil clickhouse-keeper. Corrige un bug rare dans clickhouse-keeper où le client peut recevoir une réponse de watch avant la réponse à la requête correspondante. #28197 (alesapin). Corrige un comportement incorrect dans clickhouse-keeper lorsque des watches de liste (getChildren) sont déclenchées par des requêtes set sur les enfants. #28190 (alesapin). Corrige un cas rare où des modifications des paramètres de clickhouse-keeper peuvent entraîner une perte de logs et le blocage du serveur. #28360 (alesapin). Corrige un bug dans clickhouse-keeper pouvant entraîner des logs sans fin lorsque rotate_logs_interval est réduit. #28152 (alesapin).

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

  • Activer Thread Fuzzer dans le test de stress. Thread Fuzzer est une fonctionnalité de ClickHouse qui permet de tester davantage de permutations d’ordonnancement des threads et de découvrir plus de problèmes potentiels. Cela clôt #9813. Cela clôt #9814. Cela clôt #9515. Cela clôt #9516. #27538 (alexey-milovidov).
  • Ajouter un nouveau niveau de log test pour les environnements de test. Il est encore plus verbeux que trace, qui est la valeur par défaut. #28559 (alesapin).
  • Afficher les informations d’état de Git lors de l’étape de configuration de CMake. #28047 (Braulio Valdivielso Martínez).
  • Basculer temporairement le dépôt apt d’Ubuntu vers le miroir ru.archive.ubuntu.com, car celui par défaut (archive.ubuntu.com) ne répond pas depuis notre CI. #28016 (Ilya Yatsishin).

Version de ClickHouse v21.9, 2021-09-09

Changement incompatible avec les versions précédentes

  • Ne plus afficher les zéros finaux dans la représentation textuelle des types Decimal. Exemple : 1.23 sera affiché au lieu de 1.230000 pour un décimal d’échelle 6. Cela clôt #15794. Cela peut introduire une légère incompatibilité si vos applications s’appuyaient d’une façon ou d’une autre sur ces zéros finaux. La sérialisation dans les formats de sortie peut être contrôlée avec le paramètre output_format_decimal_trailing_zeros. L’implémentation de toString et la conversion en String sont modifiées de manière inconditionnelle. #27680 (alexey-milovidov).
  • Ne pas autoriser l’application d’une aggregate function paramétrique avec le combinator -Merge à l’état d’une aggregate function si cet état a été produit par une aggregate function avec des paramètres différents. Par exemple, l’état de fooState(42)(x) ne peut pas être finalisé avec fooMerge(s) ni fooMerge(123)(s) ; les paramètres doivent être spécifiés explicitement comme dans fooMerge(42)(s) et doivent être identiques. Cela n’affecte pas certaines aggregate functions spéciales comme quantile et sequence*, qui utilisent des paramètres uniquement pour la finalisation. #26847 (tavplubix).
  • Dans clickhouse-local, toujours traiter les adresses locales avec un port comme distantes. #26736 (Raúl Marín).
  • Corrige le problème suivant : dans certaines query complexes avec des alias de column identiques aux noms des expressions, un mauvais CAST peut se produire. Cela corrige #25447. Cela corrige #26914. Ce correctif peut introduire une incompatibilité avec les versions précédentes : s’il existe différentes expressions portant le même nom, une exception sera levée. Cela peut casser certains cas rares lorsque enable_optimize_predicate_expression est défini. #26639 (alexey-milovidov).
  • Désormais, une scalar subquery renvoie toujours un résultat Nullable si son type peut être Nullable. Cela est nécessaire car, dans le cas d’une subquery vide, son résultat doit être Null. Auparavant, il était possible d’obtenir une error signalant des types incompatibles (la déduction de type n’exécute pas la scalar subquery et pouvait utiliser un type non nullable). Une scalar subquery avec un résultat vide qui ne peut pas être converti en Nullable (comme Array ou Tuple) génère désormais une error. Corrige #25411. #26423 (Nikolai Kochetov).
  • Introduction de la syntaxe des here documents. Exemple : SELECT $doc$ VALUE $doc$. #26671 (Maksim Kita). Ce changement est incompatible avec les versions précédentes si la query contient des identifiants comprenant $ #28768.
  • Désormais, les index peuvent gérer les types Nullable, y compris isNull et isNotNull. #12433 et #12455 (Amos Bird) et #27250 (Azat Khuzhin). Mais cela s’accompagne de modifications du format sur disque, et même si le nouveau server peut lire les anciennes données, l’ancien server ne le peut pas. De plus, si vous avez des data skipping indices MINMAX, vous pouvez obtenir l’error Data after mutation/merge is not byte-identical, puisque le nouvel index aura l’extension .idx2 alors qu’auparavant c’était .idx. En d’autres termes, dans ce cas, vous ne devez pas retarder la mise à jour de toutes les replicas existantes ; sinon, si une ancienne replica (<21.9) télécharge des données depuis une nouvelle replica en 21.9+, elle ne pourra pas appliquer l’index à la part téléchargée.

Nouvelle fonctionnalité

  • Implémentation de l’évaluation paresseuse des fonctions, corrige #12587. Ajout du paramètre short_circuit_function_evaluation pour configurer l’évaluation paresseuse des fonctions. #23367 (Kruglov Pavel).
  • Ajout de la prise en charge des opérateurs INTERSECT, EXCEPT, ANY et ALL. #24757 (Kirill Ershov). (Kseniia Sumarokova).
  • Ajout de la prise en charge du chiffrement au niveau du système de fichiers virtuel (chiffrement des données au repos) à l’aide de l’algorithme AES-CTR. #24206 (Latysheva Alexandra). (Vitaly Baranov) #26733 #26377 #26465.
  • Ajout de fonctions de traitement automatique du langage naturel (NLP) pour la tokenisation, la racinisation, la lemmatisation et la recherche dans les extensions de synonymes. #24997 (Nikolay Degterinsky).
  • Ajout de l’intégration avec la bibliothèque de géométrie S2. #24980 (Andr0901). (Nikita Mikhaylov).
  • Ajout du moteur de table, de la table function et du moteur de base de données SQLite. #24194 (Arslan Gumerov). (Kseniia Sumarokova).
  • Ajout de la prise en charge des requêtes personnalisées pour les dictionary sources MySQL, PostgreSQL, ClickHouse, JDBC et Cassandra. Corrige #1270. #26995 (Maksim Kita).
  • Ajout du stockage partagé (répliqué) des utilisateurs, rôles, politiques de lignes, quotas et profils de paramètres via ZooKeeper. #27426 (Kevin Michel).
  • Ajout de la compression pour INTO OUTFILE, avec sélection automatique de l’algorithme de compression. Corrige #3473. #27134 (Filatenkov Artur).
  • Ajout de INSERT ... FROM INFILE, sur le modèle de SELECT ... INTO OUTFILE. #27655 (Filatenkov Artur).
  • Ajout du dictionnaire complex_key_range_hashed. Corrige #22029. #27629 (Maksim Kita).
  • Prise en charge des expressions dans la clause JOIN ON. Corrige #21868. #24420 (Vladimir C).
  • Lorsqu’un client se connecte au serveur, il reçoit des informations sur tous les avertissements déjà collectés par le serveur. (Cela peut être désactivé avec l’option --no-warnings.) Ajout de la table system.warnings pour collecter les avertissements relatifs à la configuration du serveur. #26246 (Filatenkov Artur). #26282 (Filatenkov Artur).
  • Autorise l’utilisation d’expressions constantes issues de with et select dans les paramètres de fonction d’agrégation. Résout #10945. #27531 (abel-cheng).
  • Ajoute tupleToNameValuePairs, une fonction qui transforme un tuple nommé en tableau de paires. #27505 (Braulio Valdivielso Martínez).
  • Ajoute la prise en charge de la méthode de compression bzip2 pour l’import/export. Résout #22428. #27377 (Nikolay Degterinsky).
  • Ajout de la fonction bitmapSubsetOffsetLimit(bitmap, offset, cardinality_limit). Elle crée un sous-ensemble du bitmap en limitant les résultats à cardinality_limit avec un décalage de offset. #27234 (DHBin).
  • Ajoute la colonne default_database à system.users. #27054 (kevin wan).
  • Prise en charge des macros cluster dans les fonctions de table ‘cluster’ et ‘clusterAllReplicas’. #26913 (polyprogrammist).
  • Ajoute de nouvelles fonctions currentRoles(), enabledRoles(), defaultRoles(). #26780 (Vitaly Baranov).
  • Nouvelles fonctions currentProfiles(), enabledProfiles(), defaultProfiles(). #26714 (Vitaly Baranov).
  • Ajoute des fonctions qui renvoient le (initial_)query_id de la requête en cours. Cela résout #23682. #26410 (Alexey Boykov).
  • Ajoute la fonctionnalité REPLACE GRANT. #26384 (Caspian).
  • La requête EXPLAIN dispose maintenant du mode EXPLAIN ESTIMATE ..., qui affiche des informations sur les lignes lues, les marks et les parts des tables MergeTree. Résout #23941. #26131 (fastio).
  • Ajout de la table system.zookeeper_log. Toutes les actions du client ZooKeeper sont journalisées dans cette table. Implémente #25449. #26129 (tavplubix).
  • Réplication zero-copy pour ReplicatedMergeTree sur le stockage HDFS. #25918 (Zhichang Yu).
  • Autorise l’insertion du type Nested comme tableau de structs dans les formats d’entrée Arrow, ORC et Parquet. #25902 (Kruglov Pavel).
  • Ajoute un nouveau type de données Date32 (stocké sous forme de Int32), prenant en charge la même plage de dates que DateTime64, le chargement de Parquet date32 dans Date32 de ClickHouse, et une nouvelle fonction toDate32 similaire à toDate. #25774 (LiuNeng).
  • Permet de définir votre base de données par défaut. #25268. #25687 (kevin wan).
  • Ajoute un paramètre facultatif au moteur MongoDB pour accepter des options de chaîne de connexion et prendre en charge les connexions SSL. Résout #21189. Résout #21041. #22045 (Omar Bazaraa).

Fonctionnalité expérimentale

  • Ajout du codec de compression AES_128_GCM_SIV, qui chiffre les colonnes au lieu de les compresser. #19896 (PHO). Sera réécrit, ne pas utiliser.
  • Renommage de MaterializeMySQL en MaterializedMySQL. #26822 (tavplubix).

Amélioration des performances

  • Améliore les performances des requêtes rapides lorsque max_execution_time = 0 en réduisant le nombre d’appels système à clock_gettime. #27325 (filimonov).
  • Spécialise les comparaisons liées aux dates et heures afin d’améliorer les performances. Cela corrige #27083. #27122 (Amos Bird).
  • Partage les descripteurs de fichiers lors de lectures concurrentes des mêmes fichiers. Il n’y a pas de différence de performances notable sous Linux. En revanche, le nombre de fichiers ouverts sera nettement plus faible (de 10 à 100 fois) sur des serveurs typiques, ce qui facilite les opérations. Voir #26214. #26768 (alexey-milovidov).
  • Améliore la latence des requêtes courtes qui nécessitent la lecture de tables comportant un grand nombre de colonnes. #26371 (Anton Popov).
  • Ne construit pas de sets pour les index lors de l’analyse d’une requête. #26365 (Raúl Marín).
  • Vectorise SUM pour les types entiers Nullable avec une représentation native (David Manzanares, Raúl Marín). #26248 (Raúl Marín).
  • Compile les expressions faisant intervenir des colonnes de type Enum. #26237 (Maksim Kita).
  • Compile les fonctions d’agrégation groupBitOr, groupBitAnd, groupBitXor. #26161 (Maksim Kita).
  • Améliore l’utilisation mémoire grâce à une meilleure prédiction de la taille des blocs lors de la lecture de colonnes DEFAULT vides. Corrige #17317. #25917 (Vladimir Chebotarev).
  • Réduit l’utilisation mémoire et le nombre de lignes lues dans les requêtes avec ORDER BY primary_key. #25721 (Anton Popov).
  • Active distributed_push_down_limit par défaut. #27104 (Azat Khuzhin).
  • Rend toTimeZone monotone lorsque timeZone est une valeur constante afin de prendre en charge l’élagage des partitions lors de l’utilisation de requêtes SQL du type :. #26261 (huangzhaowei).

Amélioration

  • Marquer les fonctions de fenêtre comme prêtes pour un usage général. Supprimer le paramètre allow_experimental_window_functions. #27184 (Alexander Kuzmenkov).
  • Améliorer la compatibilité avec les décalages de fuseau horaire qui ne correspondent pas à un nombre entier de minutes. #27080 (Raúl Marín).
  • Si le descripteur de fichier de la table File est un fichier ordinaire, autoriser sa lecture multiple. Cela permet à clickhouse-local de lire plusieurs fois depuis stdin (avec plusieurs requêtes SELECT ou sous-requêtes) si stdin est un fichier ordinaire, par exemple clickhouse-local --query "SELECT * FROM table UNION ALL SELECT * FROM table" ... < file. Cela clôt #11124. Coécrit avec (alexey-milovidov). #25960 (BoloniniD).
  • Supprimer l’analyse d’index en double et éviter d’éventuelles vérifications de limite invalides lors de l’analyse des projections. #27742 (Amos Bird).
  • Autoriser le passage de paramètres de requête dans le corps des requêtes HTTP. #27706 (Hermano Lustosa).
  • Interdire arrayJoin dans les expressions de partition. #27648 (Raúl Marín).
  • Journaliser l’adresse IP du client en cas d’échec de l’authentification. #27514 (Misko Lee).
  • Utiliser des octets plutôt que des chaînes pour les données binaires dans le protocole GRPC. #27431 (Vitaly Baranov).
  • Envoyer une réponse avec un message d’erreur si le port HTTP n’est pas défini et qu’un utilisateur tente d’envoyer une requête HTTP vers le port TCP. #27385 (Braulio Valdivielso Martínez).
  • Ajouter la fonction _CAST pour un usage interne, qui ne préservera pas la nullabilité du type, tandis qu’un CAST non interne la préservera conformément au paramètre cast_keep_nullable. Clôt #12636. #27382 (Kseniia Sumarokova).
  • Ajouter le paramètre log_formatted_queries pour journaliser une requête formatée supplémentaire dans system.query_log. C’est utile pour l’analyse des requêtes normalisées, car des fonctions comme normalizeQuery et normalizeQueryKeepNames n’analysent ni ne formatent les requêtes afin d’obtenir de meilleures performances. #27380 (Amos Bird).
  • Ajouter deux paramètres, max_hyperscan_regexp_length et max_hyperscan_regexp_total_length, pour empêcher l’utilisation d’expressions régulières trop volumineuses dans les fonctions liées à Hyperscan, comme multiMatchAny. #27378 (Amos Bird).
  • La mémoire consommée par les fonctions d’agrégation bitmap est désormais prise en compte dans les limites de mémoire. Cela clôt #26555. #27252 (alexey-milovidov).
  • Ajouter un cache de 10 secondes pour le résolveur de proxy S3. #27216 (ianton-ru).
  • Scinder le mutex global en constructions individuelles d’expressions régulières. Cela permet d’éviter qu’une construction d’expression régulière trop volumineuse bloque les autres threads concernés. #27211 (Amos Bird).
  • Prise en charge des schémas pour le moteur de base de données PostgreSQL. Clôt #27166. #27198 (Kseniia Sumarokova).
  • Suivi de l’utilisation de la mémoire dans clickhouse-client. #27191 (Filatenkov Artur).
  • Tentative d’enregistrement de query_kind dans system.query_log même lorsque la requête ne parvient pas à démarrer. #27182 (Amos Bird).
  • Ajout de la colonne replica_is_active à la table system.replicas, qui associe le nom de la réplique à son état d’activité. Clôt #27138. #27180 (Maksim Kita).
  • Permet de transmettre les paramètres de requête via l’URI du serveur dans l’interface Web. #27177 (kolsys).
  • Ajout d’une nouvelle Metric appelée MaxPushedDDLEntryID, qui correspond à l’identifiant maximal d’entrée DDL que le nœud actuel envoie à ZooKeeper. #27174 (Fuwang Hu).
  • Amélioration de la vérification de la condition d’existence et des nœuds de chaîne vide lors de la création d’un znode par clickhouse-keeper. #27125 (小路).
  • Merge JOIN gère désormais correctement un ensemble vide à droite. #27078 (Vladimir C).
  • Les fonctions peuvent désormais être des constantes au niveau du shard, ce qui signifie que, si elles sont exécutées dans le contexte d’une table distribuée, elles génèrent une colonne normale ; sinon, elles produisent une valeur constante. Parmi elles : hostName(), tcpPort(), version(), buildId(), uptime(), etc. #27020 (Amos Bird).
  • Mise à jour de extractAllGroupsHorizontal : la limite supérieure du nombre de correspondances par ligne peut être définie via un troisième argument facultatif. #26961 (Vasily Nemkov).
  • Expose les statistiques RocksDB via la table system.rocksdb. Lit les options rocksdb depuis la config de ClickHouse (clés rocksdb...). REMARQUE : ClickHouse ne dépend pas de RocksDB, il s’agit simplement de l’un des moteurs de stockage d’intégration supplémentaires. #26821 (Azat Khuzhin).
  • Journaux internes de RocksDB moins verbeux. REMARQUE : ClickHouse ne dépend pas de RocksDB, il s’agit simplement de l’un des moteurs de stockage d’intégration supplémentaires. Cela clôt #26252. #26789 (alexey-milovidov).
  • La modification des rôles par défaut n’affecte que les nouvelles sessions. #26759 (Vitaly Baranov).
  • Watchdog est désactivé par défaut dans Docker. Correctif pour la non-prise en charge de Ctrl+C. #26757 (Mikhail f. Shiryaev).
  • SET PROFILE applique désormais aussi les contraintes si elles sont définies pour le profil transmis. #26730 (Vitaly Baranov).
  • Amélioration de la gestion des requêtes KILL QUERY. #26675 (Raúl Marín).
  • La fonction mapPopulatesSeries prend en charge le type Map. #26663 (Ildus Kurbangaliev).
  • Corrige les tentatives de connexion excessives (x2) avec skip_unavailable_shards. #26658 (Azat Khuzhin).
  • Évite que clickhouse-benchmark ne se bloque en cas d’échec de connexion (par ex. sur EMFILE). #26656 (Azat Khuzhin).
  • Permet au moteur Kafka d’utiliser davantage de threads. #26642 (feihengye).
  • Ajoute la prise en charge du round-robin pour clickhouse-benchmark (cela ne diffère pas d’une exécution multi-hôte/port classique, sauf pour le rapport de statistiques). #26607 (Azat Khuzhin).
  • Les dictionnaires exécutables (executable, executable_pool) peuvent désormais être créés avec une requête DDL via clickhouse-local. Clôt #22355. #26510 (Maksim Kita).
  • Définit le type de requête client pour les handlers du protocole de compatibilité mysql et postgresql. #26498 (anneji-dev).
  • Applique LIMIT au niveau des shards pour les requêtes comme SELECT * FROM dist ORDER BY key LIMIT 10 avec distributed_push_down_limit=1. Évite d’exécuter les étapes Distinct/LIMIT BY pour les requêtes comme SELECT DISTINCT shading_key FROM dist ORDER BY key. Désormais, distributed_push_down_limit est respecté par l’optimisation optimize_distributed_group_by_sharding_key. #26466 (Azat Khuzhin).
  • Protobuf a été mis à jour vers la version 3.17.3. Les changelogs sont disponibles sur https://github.com/protocolbuffers/protobuf/releases. #26424 (Ilya Yatsishin).
  • Active le paramètre use_hedged_requests, qui permet d’atténuer les latences de longue traîne sur les grands clusters. #26380 (alexey-milovidov).
  • Améliore le comportement en présence d’un hôte inexistant dans la liste des hôtes autorisés de l’utilisateur. #26368 (ianton-ru).
  • Ajoute la possibilité de définir les paramètres du moniteur de répertoire de Distributed via CREATE TABLE (par ex. CREATE TABLE dist (key Int) Engine=Distributed(cluster, db, table) SETTINGS monitor_batch_inserts=1 et autres variantes similaires). #26336 (Azat Khuzhin).
  • Enregistre l’adresse du serveur dans les URL de l’historique de l’interface web si elle diffère de l’origine de l’interface web. Clôt #26044. #26322 (alexey-milovidov).
  • Ajoute des événements au profilage des appels à sleep / sleepEachRow. #26320 (Raúl Marín).
  • Permet de réutiliser les connexions des shards entre différents clusters. Cela évite également de créer de nouvelles connexions lors de l’utilisation de la fonction de table cluster. #26318 (Amos Bird).
  • Contrôle de la période d’exécution du nettoyage des anciens répertoires temporaires via un paramètre doté d’une valeur par défaut. #26212. #26313 (fastio).
  • Ajout du paramètre function_range_max_elements_in_block pour ajuster le seuil de sécurité du volume de données généré par la fonction range. Cela clôt #26303. #26305 (alexey-milovidov).
  • Vérification de la fonction de hachage lors de la création de la table, et non lors de l’échantillonnage. Ajout de paramètres pour MergeTree afin que, si quelqu’un crée une table avec une colonne d’échantillonnage incorrecte mais que l’échantillonnage n’est jamais utilisé, il soit possible de désactiver ces paramètres pour démarrer le serveur sans exception. #26256 (zhaoyu).
  • Ajout du paramètre output_format_avro_string_column_pattern pour écrire les colonnes String spécifiées dans Avro sous forme de chaînes plutôt que sous forme d’octets par défaut. Implémente #22414. #26245 (Ilya Golshtein).
  • Ajout d’informations sur la taille des colonnes dans la table system.columns pour les tables Log et TinyLog. Cela clôt #9001. #26241 (Nikolay Degterinsky).
  • Ne pas lever d’exception lors de l’interrogation de la table system.detached_parts s’il existe une configuration de disque personnalisée et que le répertoire detached n’existe pas sur certains disques. Cela clôt #26078. #26236 (alexey-milovidov).
  • Vérification de la présence de fonctions non déterministes dans les clés, y compris dans des expressions constantes comme now() et today(). Cela clôt #25875. Cela clôt #11333. #26235 (alexey-milovidov).
  • Conversion des data types timestamp et timestamptz en DateTime64 dans le PostgreSQL table engine. #26234 (jasine).
  • Application d’une analyse agressive de l’index IN pour les projections afin de sélectionner un meilleur candidat de projection. #26218 (Amos Bird).
  • Suppression du keyword GLOBAL pour IN lorsqu’une fonction scalaire est transmise. Dans les versions précédentes, si l’utilisateur spécifiait GLOBAL IN f(x), une exception était levée. #26217 (Amos Bird).
  • Ajout de l’identifiant d’erreur (comme BAD_ARGUMENTS) dans les messages d’exception. Cela clôt #25862. #26172 (alexey-milovidov).
  • Correction d’une sortie incorrecte avec l’option —progress pour clickhouse-local. La barre de progression sera effacée une fois 100 % atteints, comme c’est déjà le cas pour clickhouse-client. Clôt #17484. #26128 (Kseniia Sumarokova).
  • Ajout du paramètre merge_selecting_sleep_ms. #26120 (lthaooo).
  • Supprime l’utilisation complexe de Linux AIO avec prélecture d’un bloc et la remplace par des E/S synchrones simples avec O_DIRECT. Dans les versions précédentes, le paramètre min_bytes_to_use_direct_io pouvait ne pas fonctionner correctement si max_threads était supérieur à un. La lecture avec des E/S directes (désactivées par défaut pour les requêtes et activées par défaut pour les merges volumineux) fonctionnera de manière moins efficace. Cela corrige #25997. #26003 (alexey-milovidov).
  • Effectue un flush de la table Distributed lors de la requête REPLACE TABLE. Résout #24566 - Ne pas remplacer (ni créer) la table avec la requête [CREATE OR] REPLACE TABLE ... AS SELECT si l’insertion dans la nouvelle table échoue. Résout #23175. #25895 (tavplubix).
  • Ajoute la colonne views à system.query_log, contenant les noms des vues (matérialisées ou live) exécutées par la requête. Ajoute une nouvelle table de logs (system.query_views_log) qui contient des informations sur chaque vue exécutée pendant une requête. Modifie l’exécution des vues : lorsqu’une exception est levée pendant l’exécution d’une vue, toute vue déjà démarrée continue à s’exécuter jusqu’à la fin. C’était auparavant le comportement avec parallel_view_processing=true, et c’est désormais toujours le cas. - Les vues dépendantes rapportent désormais la progression de lecture au contexte. #25714 (Raúl Marín).
  • Effectue le drainage des connexions de manière asynchrone à la fin de l’exécution des requêtes distribuées. Un nouveau paramètre serveur est ajouté, max_threads_for_connection_collector, qui spécifie le nombre de workers chargés de recycler les connexions en arrière-plan. Si le pool est plein, la connexion sera drainée de manière synchrone, mais un peu différemment d’auparavant : elle est drainée après l’envoi de EOS au client, la requête réussira dès réception d’assez de données, et toute exception sera consignée dans les logs au lieu d’être renvoyée au client. Ajout du paramètre drain_timeout (3 secondes par défaut). Le drainage des connexions déconnectera en cas de timeout. #25674 (Amos Bird).
  • Prise en charge de plusieurs inclusions dans la configuration. Il est possible d’inclure la configuration des utilisateurs et celle des serveurs distants depuis plusieurs sources. Placez simplement un élément <include /> avec l’attribut from_zk, from_env ou incl, et il sera remplacé par la substitution. #24404 (nvartolomei).
  • Corrige l’insertion de plusieurs blocs dans une table distribuée avec insert_distributed_one_random_shard = 1. Il s’agit d’une fonctionnalité marginale. À classer comme improvement. #23140 (Amos Bird).
  • Prise en charge des clés et valeurs LowCardinality et FixedString pour le type Map. #21543 (hexiaoting).
  • Active le rechargement de la configuration du disque local. #19526 (taiyang-li).

Correction de bugs

  • Corrige quelques bogues pouvant entraîner une divergence des répliques. #27808 (tavplubix).
  • Corrige un bogue rare dans DROP PART qui peut provoquer l’erreur Unexpected merged part intersects drop range. #27807 (alesapin).
  • Évite des plantages avec certains formats lors de la réception d’un message NULL (tombstone) provenant de Kafka. Clôt #19255. #27794 (filimonov).
  • Corrige le filtrage des colonnes avec UNION DISTINCT dans une sous-requête. Clôt #27578. #27689 (Kseniia Sumarokova).
  • Corrige une conversion de type incorrecte lorsque des fonctions comme arrayHas sont appliquées à des tableaux LowCardinality de Nullable de différents types non numériques, tels que DateTime et DateTime64. Dans les versions précédentes, une conversion incorrecte se produisait. Dans la nouvelle version, cela entraînera une exception. Cela clôt #26330. #27682 (alexey-milovidov).
  • Corrige la fonction de table PostgreSQL qui entraînait des connexions ne se fermant pas. Clôt #26088. #27662 (Kseniia Sumarokova).
  • Corrige un autre cas de l’erreur Unexpected merged part ... intersecting drop range .... #27656 (tavplubix).
  • Corrige une erreur liée à une colonne aliasée dans une table Distributed. #27652 (Vladimir C).
  • Après avoir défini max_memory_usage* sur une valeur non nulle, il n’était pas possible de le réinitialiser à 0 (illimité). C’est corrigé. #27638 (tavplubix).
  • Corrige un débordement inférieur de la valeur temporelle lors de sa construction à partir de composants. Clôt #27193. #27605 (Vasily Nemkov).
  • Corrige un plantage lors de la matérialisation des projections lorsque certaines parties contiennent des colonnes manquantes. Cela corrige #27512. #27528 (Amos Bird).
  • Corrige la métrique BackgroundMessageBrokerSchedulePoolTask, probablement mal nommée. #27452 (Ben).
  • Corrige les requêtes distribuées avec zéro shard et agrégation. #27427 (Azat Khuzhin).
  • Assure la compatibilité lorsque /proc/meminfo ne contient pas le suffixe KB. #27361 (Mike Kot).
  • Corrige un résultat incorrect pour une requête avec sécurité au niveau des lignes, PREWHERE et filtre LowCardinality. Corrige #27179. #27329 (Nikolai Kochetov).
  • Correction d’une validation incorrecte de l’ID de partition pour les tables MergeTree créées avec l’ancienne syntaxe. #27328 (tavplubix).
  • Correction du protocole MySQL lors de l’utilisation des formats parallèles (CSV / TSV). #27326 (Raúl Marín).
  • Correction de l’erreur Cannot find column pour les requêtes avec échantillonnage. Introduite dans #24574. Corrige #26522. #27301 (Nikolai Kochetov).
  • Correction d’erreurs telles que Expected ColumnLowCardinality, gotUInt8 ou Bad cast from type DB::ColumnVector<char8_t> to DB::ColumnLowCardinality pour certaines requêtes avec LowCardinality dans PREWHERE. Et surtout, correction de l’absence d’espace dans le message d’erreur. Corrige #23515. #27298 (Nikolai Kochetov).
  • Correction de distributed_group_by_no_merge = 2 avec distributed_push_down_limit = 1 ou optimize_distributed_group_by_sharding_key = 1 avec LIMIT BY et LIMIT OFFSET. #27249 (Azat Khuzhin). Il s’agit de combinaisons de settings obscures que personne n’utilise.
  • Correction d’une mutation bloquée sur des partitions invalides dans un MergeTree non répliqué. #27248 (Azat Khuzhin).
  • En cas d’ambiguïté, les fonctions lambda donnent la priorité à leurs arguments plutôt qu’aux autres alias ou identifiants. #27235 (Raúl Marín).
  • Correction de la structure des colonnes dans la jointure par fusion, clôt #27091. #27217 (Vladimir C).
  • Dans de rares cas, la table system.detached_parts pouvait contenir des informations incorrectes pour certaines parts ; c’est désormais corrigé. Corrige #27114. #27183 (tavplubix).
  • Correction d’un problème de mémoire non initialisée dans les fonctions multiSearch* avec un Array vide, clôt #27169. #27181 (Vladimir C).
  • Correction de la synchronisation dans GRPCServer. Cette PR corrige #27024. #27064 (Vitaly Baranov).
  • Correction de l’analyse de la configuration cache, complex_key_cache, ssd_cache, complex_key_ssd_cache. Les options allow_read_expired_keys, max_update_queue_size, update_queue_push_timeout_milliseconds, query_wait_timeout_milliseconds n’étaient pas prises en compte pour les dictionnaires d’un type autre que cache. #27032 (Maksim Kita).
  • Correction d’une possible accumulation de mutations due à une situation de concurrence avec DROP_RANGE. #27002 (Azat Khuzhin).
  • Désormais, l’ID de partition dans des requêtes comme ALTER TABLE ... PARTITION ID xxx est vérifié pour s’assurer de sa validité. Corrige #25718. #26963 (alesapin).
  • Corrige l’erreur “Nom de colonne inconnu” avec plusieurs JOIN dans certains cas, clôt #26899. #26957 (Vladimir C).
  • Corrige la lecture des TLD personnalisés (le traitement s’arrêtait avec un buffer plus petit ou un fichier plus volumineux). #26948 (Azat Khuzhin).
  • Corrige l’erreur Missing columns: 'xxx' lorsqu’une colonne DEFAULT référence une autre colonne non matérialisée sans expression DEFAULT. Corrige #26591. #26900 (alesapin).
  • Corrige le chargement des clés de dictionnaire dans library-bridge pour la dictionary source library. #26834 (Kseniia Sumarokova).
  • Les paramètres des fonctions d’agrégation pouvaient être perdus lors de l’application de certains combinators, provoquant des exceptions comme Conversion from AggregateFunction(topKArray, Array(String)) to AggregateFunction(topKArray(10), Array(String)) is not supported. C’est corrigé. Corrige #26196 et #26433. #26814 (tavplubix).
  • Ajoute la valeur event_time_microseconds pour REMOVE_PART dans system.part_log. Dans les versions précédentes, elle n’était pas définie. #26720 (Azat Khuzhin).
  • Ne supprime pas les données à l’arrêt d’une table ReplicatedMergeTree afin d’éviter de créer une incohérence entre les données et les métadonnées. #26716 (nvartolomei).
  • Il arrivait que SET ROLE fonctionne incorrectement ; cette PR corrige le problème. #26707 (Vitaly Baranov).
  • Quelques corrections pour le formatting parallèle (https://github.com/ClickHouse/ClickHouse/issues/26694). #26703 (Raúl Marín).
  • Corrige une possible déréférence de pointeur nul dans les window functions. Corrige #25276. #26668 (Alexander Kuzmenkov).
  • Corrige la conversion du fichier d’historique de clickhouse-client (lors d’une mise à niveau depuis le format d’une version de clickhouse-client vieille de 3 ans) lorsque le fichier est vide. #26589 (Azat Khuzhin).
  • Corrige les noms de fonctions incorrects de groupBitmapAnd/Or/Xor (qui peuvent s’afficher dans certains cas). #26557 (Amos Bird).
  • Met à jour la vérification de la commande chown dans l’entrypoint Docker de clickhouse-server. Corrige un bug qui faisait échouer le redémarrage d’un pod du cluster (ou provoquait un timeout) sur Kubernetes. #26545 (Ky Li).
  • Corrige un crash lors de l’arrêt de RabbitMQ lorsque l’initialisation de RabbitMQ n’avait pas été lancée. Clôt #26504. #26529 (Kseniia Sumarokova).
  • Corrige des problèmes avec la requête CREATE DICTIONARY lorsque le nom du dictionnaire ou de la base de données était entre guillemets. Clôt #26491. #26508 (Maksim Kita).
  • Corrige une résolution incorrecte des noms de colonnes après la réécriture des alias de colonnes. Cela corrige #26432. #26475 (Amos Bird).
  • Corrige certains crashs détectés par msan lors du fuzzing. Corrige #22517. #26428 (Nikolai Kochetov).
  • Corrige un flux infini de blocs non joints dans partial_merge_join, clôt #26325. #26374 (Vladimir C).
  • Corrige un crash possible lors de la connexion avec un utilisateur supprimé. Cette PR corrige #26073. #26363 (Vitaly Baranov).
  • Corrige optimize_distributed_group_by_sharding_key pour plusieurs colonnes (provoquait un résultat incorrect avec optimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1 et plusieurs colonnes dans l’expression de clé de sharding). #26353 (Azat Khuzhin).
  • Corrige un bug rare dans la récupération d’une réplique perdue pouvant entraîner une divergence entre les répliques. #26321 (tavplubix).
  • Corrige la décompression zstd (pour l’import/export au format d’encapsulation zstd, sans rapport avec les données des tables) lorsqu’il y a des séquences d’échappement à la fin du tampon interne. Clôt #26013. #26314 (Kseniia Sumarokova).
  • Corrige une erreur logique sur un join avec totals, clôt #26017. #26250 (Vladimir C).
  • Supprime un saut de ligne superflu dans la colonne thread_name de la table system.stack_trace. Cela corrige #24124. #26210 (alexey-milovidov).
  • Corrige un crash potentiel si plusieurs expressions untuple sont utilisées. #26179 (alexey-milovidov).
  • Ne lève pas d’exception dans toString pour Nullable Enum si Enum n’a pas de valeur pour zéro, clôt #25806. #26123 (Vladimir C).
  • Correction d’un sequence_id incorrect dans les paquets du protocole MySQL que ClickHouse envoie lorsqu’une exception survient pendant l’exécution d’une requête. Cela pouvait amener le client MySQL à réinitialiser la connexion au serveur ClickHouse. Corrige #21184. #26051 (tavplubix).
  • Correction du cas où cutToFirstSignificantSubdomainCustom()/cutToFirstSignificantSubdomainCustomWithWWW()/firstSignificantSubdomainCustom() renvoie un type incorrect pour les constantes, ce qui empêchait optimize_skip_unused_shards de fonctionner. #26041 (Azat Khuzhin).
  • Correction d’un en-tête potentiellement incohérent lors de l’utilisation d’une projection normale avec prewhere. Corrige #26020. #26038 (Amos Bird).
  • Correction de sharding&#95;key à partir d’une colonne sans fonction pour remote() (auparavant, select * from remote('127.1', system.one, dummy) provoquait l’erreur Unknown column: dummy, there are only columns .). #25824 (Azat Khuzhin).
  • Correction des erreurs Not found column ... et Missing column ... lors de la sélection depuis MaterializeMySQL. Corrige #23708, #24830, #25794. #25822 (tavplubix).
  • Correction de optimize_skip_unused_shards_rewrite_in pour les types non UInt64 (cela pouvait au final sélectionner des shards incorrects ou lever Cannot infer type of an empty tuple ou Function tuple requires at least one argument). #25798 (Azat Khuzhin).

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

  • Désormais, nous exécutons les tests Stateful et les stateless tests dans des fuseaux horaires aléatoires. Corrige #12439. La lecture de String comme DateTime et l’écriture de DateTime en String au format Protobuf respectent désormais le fuseau horaire. La lecture de UInt16 comme DateTime dans les formats Arrow et Parquet le traite désormais comme Date, puis le convertit en DateTime en respectant le fuseau horaire de DateTime, car Date est sérialisé en UInt16 dans Arrow et Parquet. GraphiteMergeTree respecte désormais le fuseau horaire pour l’arrondi des heures. Corrige #5098. Auteur : @alexey-milovidov. #15408 (alesapin).
  • clickhouse-test prend en charge les tests SQL avec des templates Jinja2. #26579 (Vladimir C).
  • Ajout de la prise en charge de la compilation avec clang-13. Cela clôt #27705. #27714 (alexey-milovidov). #27777 (Sergei Semin)
  • Ajout d’options CMake pour compiler avec ou sans jeu d’instructions CPU spécifique. Cela concerne #17469 et #27509. #27508 (alexey-milovidov).
  • Correction de l’édition de liens des programmes auxiliaires lors de l’utilisation de bibliothèques dynamiques. #26958 (Raúl Marín).
  • Mise à jour de RocksDB vers la branche master du 2021-07-16. #26411 (alexey-milovidov).

Version de ClickHouse v21.8, 2021-08-12

Notes de mise à niveau

  • La nouvelle version utilise le type de données Map pour les tables de logs système (system.query_log, system.query_thread_log, system.processes, system.opentelemetry_span_log). Ces tables seront créées automatiquement avec les nouveaux types de données. Des colonnes virtuelles sont créées pour assurer la compatibilité avec les anciennes requêtes. Clôt #18698. #23934, #25773 (hexiaoting, sundy-li, Maksim Kita). Si vous souhaitez rétrograder de la version 21.8 vers des versions antérieures, vous devrez nettoyer manuellement les tables système contenant des logs. Consultez /var/lib/clickhouse/data/system/*_log.

Nouvelles fonctionnalités

  • Ajout de la prise en charge d’une partie de la norme SQL/JSON. #24148 (l1tsolaiki, Kseniia Sumarokova).
  • Collecte des métriques système courantes (dans system.asynchronous_metrics et system.asynchronous_metric_log) concernant l’utilisation du CPU, l’utilisation du disque, l’utilisation de la mémoire, les E/S, le réseau, les fichiers, la charge moyenne, les fréquences du CPU, les capteurs thermiques, les compteurs EDAC, l’uptime du système ; ajout également de métriques sur la gigue d’ordonnancement et le temps passé à collecter ces métriques. Cela fonctionne de manière similaire à atop dans ClickHouse et permet d’accéder aux données de monitoring même si vous n’avez installé aucun outil supplémentaire. Ferme #9430. #24416 (alexey-milovidov, Yegor Levankov).
  • Ajout du table engine et du database engine MaterializedPostgreSQL. Ce database engine permet de répliquer une base de données entière ou n’importe quel sous-ensemble de ses tables. #20470 (Kseniia Sumarokova).
  • Ajout des nouvelles fonctions leftPad(), rightPad(), leftPadUTF8(), rightPadUTF8(). #26075 (Vitaly Baranov).
  • Ajout du mot-clé FIRST à la commande ADD INDEX afin de pouvoir ajouter l’index au début de la liste des index. #25904 (xjewer).
  • Introduction de la table system.data_skipping_indices, qui contient des informations sur les data skipping indices existants. Ferme #7659. #25693 (Dmitry Novik).
  • Ajout des fonctions bin/unbin. #25609 (zhaoyu).
  • Prise en charge des types Map, UInt128, Int128, UInt256 et Int256 dans les fonctions mapAdd et mapSubtract. #25596 (Ildus Kurbangaliev).
  • Prise en charge de l’expression DISTINCT ON (columns), ferme #25404. #25589 (Zijie Lu).
  • Ajout de la possibilité de réinitialiser un custom setting à sa valeur par défaut et de le supprimer des métadonnées de la table. Cela permet d’annuler la modification sans connaître la valeur par défaut du système/de la config. Ferme #14449. #17769 (xjewer).
  • Affichage des pipelines sous forme de graphes dans l’interface Web si la query EXPLAIN PIPELINE graph = 1 est soumise. #26067 (alexey-milovidov).

Améliorations des performances

  • Compilation des fonctions d’agrégation. Utilisez l’option compile_aggregate_expressions pour l’activer. #24789 (Maksim Kita).
  • Amélioration de la latence des requêtes courtes nécessitant la lecture de tables comportant de nombreuses colonnes. #26371 (Anton Popov).

Améliorations

  • Utiliser le type de données Map pour les tables de logs système (system.query_log, system.query_thread_log, system.processes, system.opentelemetry_span_log). Ces tables seront créées automatiquement avec les nouveaux types de données. Des colonnes virtuelles sont créées pour assurer la compatibilité avec les anciennes query. Résout #18698. #23934, #25773 (hexiaoting, sundy-li, Maksim Kita).
  • Pour un Dictionary avec une clé complexe ne contenant qu’un seul attribut, permettre de ne pas envelopper l’expression de clé dans un tuple pour les fonctions dictGet, dictHas. #26130 (Maksim Kita).
  • Implémenter la fonction bin/hex à partir des états AggregateFunction. #26094 (zhaoyu).
  • Prendre en charge les arguments de type UUID pour les fonctions empty et notEmpty. Un UUID est vide s’il est composé uniquement de zéros (UUID nil). Résout #3446. #25974 (zhaoyu).
  • Ajouter la prise en charge de SET SQL_SELECT_LIMIT dans le protocole MySQL. Résout #17115. #25972 (Kseniia Sumarokova).
  • Davantage d’instrumentation pour les interactions réseau : ajout de compteurs pour les octets reçus/envoyés ; ajout de gauges pour les réceptions/envois. Ajout de la documentation manquante. Résout #5897. #25962 (alexey-milovidov).
  • Ajouter le paramètre optimize_move_to_prewhere_if_final. Si une query contient FINAL, l’optimisation move_to_prewhere ne sera activée que si optimize_move_to_prewhere et optimize_move_to_prewhere_if_final sont tous deux activés. Résout #8684. #25940 (Kseniia Sumarokova).
  • Autoriser les identifiants complexes entre guillemets pour les tables jointes. Résout #17861. #25924 (alexey-milovidov).
  • Ajouter la prise en charge des composants Unicode (par ex. chinois, cyrillique) dans les types de données Nested. Résout #25594. #25923 (alexey-milovidov).
  • Autoriser les fonctions quantiles* à fonctionner avec aggregate_functions_null_for_empty. Résout #25892. #25919 (alexey-milovidov).
  • Autoriser les paramètres des fonctions d’agrégation paramétriques à être des expressions constantes arbitraires (par ex. 1 + 2), et pas seulement des littéraux. Cela permet également d’utiliser les query parameters (dans les query paramétrées comme {param:UInt8}) à l’intérieur des fonctions d’agrégation paramétriques. Résout #11607. #25910 (alexey-milovidov).
  • Déclenche désormais correctement une exception lors de la tentative d’analyse d’un Date invalide. Closes #6481. #25909 (alexey-milovidov).
  • Prise en charge de plusieurs inclusions dans la configuration. Il est possible d’inclure la configuration des utilisateurs et celle des serveurs distants depuis plusieurs sources. Il suffit de placer l’élément <include /> avec l’attribut from_zk, from_env ou incl, et il sera remplacé par la substitution. #24404 (nvartolomei).
  • Prise en charge des requêtes avec une colonne nommée "null" (elle doit être spécifiée entre accents graves ou entre guillemets doubles) et ON CLUSTER. Closes #24035. #25907 (alexey-milovidov).
  • Prise en charge de LowCardinality, Decimal et UUID pour JSONExtract. Closes #24606. #25900 (Kseniia Sumarokova).
  • Conversion du fichier d’historique du format readline au format replxx. #25888 (Azat Khuzhin).
  • Correction d’un problème pouvant entraîner des parties qui se chevauchent après DROP PART ou la suppression en arrière-plan d’une partie vide. #25884 (alesapin).
  • Meilleure gestion des parties perdues pour les tables ReplicatedMergeTree. Corrige de rares incohérences dans ReplicationQueue. Fixes #10368. #25820 (alesapin).
  • Autorise le démarrage de clickhouse-client depuis un répertoire de travail illisible. #25817 (ianton-ru).
  • Correction de l’erreur “No available columns” pour le moteur Merge. #25801 (Azat Khuzhin).
  • Le moteur MySQL prend désormais en charge l’échange des commentaires de colonnes entre MySQL et ClickHouse. #25795 (Storozhuk Kostiantyn).
  • Correction du comportement incohérent d’une constante dans GROUP BY sur un ensemble vide. Closes #6842. #25786 (Kseniia Sumarokova).
  • Annule les fusions déjà en cours dans une partition lors de DROP PARTITION et TRUNCATE pour ReplicatedMergeTree. Resolves #17151. #25684 (tavplubix).
  • Prise en charge du type de données ENUM&#96; pour MaterializeMySQL. #25676 (Storozhuk Kostiantyn).
  • Prise en charge des colonnes matérialisées et des alias dans JOIN, close #13274. #25634 (Vladimir C).
  • Corrige une possible race condition logique entre ALTER TABLE ... DETACH et les fusions en arrière-plan. #25605 (Azat Khuzhin).
  • Fait en sorte que la métrique NetworkReceiveElapsedMicroseconds inclue correctement le temps passé à attendre les données du client pour INSERT. Clôt #9958. #25602 (alexey-milovidov).
  • Prise en charge de TRUNCATE TABLE pour S3 et HDFS. Clôt #25530. #25550 (Kseniia Sumarokova).
  • Prise en charge du rechargement dynamique de la config pour modifier le nombre de threads dans le pool d’exécution des jobs en arrière-plan (merges, mutations, fetches). #25548 (Nikita Mikhaylov).
  • Permet d’extraire un élément non textuel sous forme de chaîne à l’aide de JSONExtract. Cela concerne #25414. #25452 (Amos Bird).
  • Prise en charge des expressions régulières dans l’argument Database de StorageMerge. Clôt #776. #25064 (flynn).
  • Web UI : si la valeur ressemble à une URL, génère automatiquement un lien. #25965 (alexey-milovidov).
  • Fait en sorte que sudo service clickhouse-server start fonctionne sur les systèmes avec systemd, comme CentOS 8. Clôt #14298. Clôt #17799. #25921 (alexey-milovidov).

Corrections de bugs

  • Correction de SET ROLE incorrect dans certains cas. #26707 (Vitaly Baranov).
  • Correction d’un déréférencement potentiel de nullptr dans les fonctions de fenêtre. Correction de #25276. #26668 (Alexander Kuzmenkov).
  • Correction de noms de fonction incorrects pour groupBitmapAnd/Or/Xor. Correction de #26557 (Amos Bird).
  • Correction d’un crash lors de l’arrêt de RabbitMQ si la configuration de RabbitMQ n’avait pas été démarrée. Clôt #26504. #26529 (Kseniia Sumarokova).
  • Correction de problèmes avec la requête CREATE DICTIONARY si le nom du dictionnaire ou de la base de données était entre guillemets. Clôt #26491. #26508 (Maksim Kita).
  • Correction d’une résolution de noms défaillante après la réécriture des alias de colonnes. Correction de #26432. #26475 (Amos Bird).
  • Correction d’un flux infini de blocs non joints dans partial_merge_join, clôt #26325. #26374 (Vladimir C).
  • Correction d’un crash possible lors de la connexion avec un utilisateur supprimé. Correction de #26073. #26363 (Vitaly Baranov).
  • Correction de optimize_distributed_group_by_sharding_key pour plusieurs colonnes (entraîne un résultat incorrect avec optimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1 et plusieurs colonnes dans l’expression de clé de sharding). #26353 (Azat Khuzhin).
  • CAST de Date vers DateTime (ou DateTime64) n’utilisait pas le fuseau horaire du type DateTime. Cela pouvait également affecter la comparaison entre Date et DateTime. L’inférence du type commun pour Date et DateTime n’utilisait pas non plus le fuseau horaire correspondant. Cela affectait les résultats de la fonction if et la construction des tableaux. Clôt #24128. #24129 (Maksim Kita).
  • Correction d’un bug rare dans la récupération d’une réplique perdue, qui pouvait entraîner une divergence entre répliques. #26321 (tavplubix).
  • Correction de la décompression zstd lorsqu’il y a des séquences d’échappement à la fin du tampon interne. Clôt #26013. #26314 (Kseniia Sumarokova).
  • Correction d’une erreur logique sur un join avec totals, clôt #26017. #26250 (Vladimir C).
  • Supprime le saut de ligne superflu dans la colonne thread_name de la table system.stack_trace. Corrige #24124. #26210 (alexey-milovidov).
  • Corrige joinGet avec les colonnes LowCarinality, ferme #25993. #26118 (Vladimir C).
  • Corrige un crash possible dans pointInPolygon si le paramètre validate_polygons est désactivé. #26113 (alexey-milovidov).
  • Corrige le déclenchement d’une exception lors de l’itération sur un répertoire distant inexistant. #26087 (ianton-ru).
  • Corrige un crash rare du serveur causé par abort dans le client ZooKeeper. Corrige #25813. #26079 (alesapin).
  • Corrige une estimation erronée du nombre de threads pour le join de sous-requête de droite dans certains cas. Ferme #24075. #26052 (Vladimir C).
  • Corrige un sequence_id incorrect dans les paquets du protocole MySQL que ClickHouse envoie lorsqu’une exception survient pendant l’exécution d’une requête. Cela pouvait amener le client MySQL à réinitialiser la connexion au serveur ClickHouse. Corrige #21184. #26051 (tavplubix).
  • Corrige un en-tête potentiellement incohérent lors de l’utilisation d’une projection normale avec PREWHERE. Corrige #26020. #26038 (Amos Bird).
  • Corrige le formatage du type Map avec des clés entières en JSON. #25982 (Anton Popov).
  • Corrige un interblocage possible lors du déroulement de pile du query profiler. Corrige #25968. #25970 (Maksim Kita).
  • Corrige un crash lors de l’appel à dictGet() avec des arguments invalides. #25913 (Vitaly Baranov).
  • Corrige l’authentification scram-sha-256 pour les moteurs PostgreSQL. Ferme #24516. #25906 (Kseniia Sumarokova).
  • Corrige un backoff extrêmement long pour les tâches d’arrière-plan lorsque le background pool est saturé. Corrige #25836. #25893 (alesapin).
  • Corrige la gestion des exceptions ARM avec une taille de page non standard. Corrige #25512, #25044, #24901, #23183, #20221, #19703, #19028, #18391, #18121, #17994, #12483. #25854 (Maksim Kita).
  • Corrige sharding&#95;key à partir d’une colonne sans fonction pour remote() (auparavant, select * from remote('127.1', system.one, dummy) provoquait l’erreur Unknown column: dummy, there are only columns .). #25824 (Azat Khuzhin).
  • Corrige les erreurs Not found column ... et Missing column ... lors d’une sélection depuis MaterializeMySQL. Corrige #23708, #24830, #25794. #25822 (tavplubix).
  • Corrige optimize_skip_unused_shards_rewrite_in pour les types autres que UInt64 (peut à terme sélectionner des shards incorrects ou renvoyer Cannot infer type of an empty tuple ou Function tuple requires at least one argument). #25798 (Azat Khuzhin).
  • Corrige un bug rare dans la requête DROP PART pour les tables ReplicatedMergeTree, qui peut entraîner le message d’erreur Unexpected merged part intersecting drop range. #25783 (alesapin).
  • Corrige un bug dans TTL avec l’expression GROUP BY qui empêche d’exécuter TTL après la première exécution dans une part. #25743 (alesapin).
  • Permet à StorageMerge d’accéder aux tables avec des alias. Clôt #6051. #25694 (Kseniia Sumarokova).
  • Corrige la lenteur d’un dict join dans certains cas. Clôt #24209. #25618 (Vladimir C).
  • Corrige ALTER MODIFY COLUMN sur les colonnes qui participent aux expressions TTL. #25554 (Anton Popov).
  • Corrige une assertion dans PREWHERE avec un type autre que UInt8. Clôt #19589. #25484 (Vladimir C).
  • Corrige un plantage msan détecté par fuzzing dans certains cas. Corrige #22517. #26428 (Nikolai Kochetov).
  • Mise à jour de la vérification de la commande chown dans le point d’entrée Docker de clickhouse-server. Cela corrige l’erreur ‘échec du redémarrage du pod du cluster (ou délai d’attente dépassé)’ sur Kubernetes. #26545 (Ky Li).

Version de ClickHouse v21.7, 2021-07-09

Changement incompatible avec les versions précédentes

  • Amélioration des performances des requêtes avec de grands ensembles définis explicitement. Ajout du paramètre de compatibilité legacy_column_name_of_tuple_literal. Il est recommandé de le définir sur true lors d’une rolling update du cluster depuis une version antérieure à 21.7 vers une version supérieure. Sinon, les requêtes distribuées avec des ensembles définis explicitement dans la clause IN risquent d’échouer pendant la mise à jour. #25371 (Anton Popov).
  • Modification incompatible avec les versions antérieures et ultérieures de la taille maximale du tampon dans ClickHouse Keeper (une alternative Experimental à ZooKeeper). Mieux vaut le faire maintenant (avant la mise en production) que plus tard. #25421 (alesapin).

Nouvelle fonctionnalité

  • Prise en charge de la configuration au format YAML en alternative à XML. Corrige #3607. #21858 (BoloniniD).
  • Ajoute un moyen de restaurer une table répliquée lorsque les données sont (potentiellement) présentes, mais que les métadonnées ZooKeeper ont été perdues. Résout #13458. #13652 (Mike Kot).
  • Prise en charge des structs et des maps dans Arrow/Parquet/ORC, ainsi que des dictionnaires dans les formats d’entrée/sortie Arrow. Introduit le nouveau paramètre output_format_arrow_low_cardinality_as_dictionary. #24341 (Kruglov Pavel).
  • Ajout de la prise en charge du type Array dans les dictionnaires. #25119 (Maksim Kita).
  • Ajout de la fonction bitPositionsToArray. Corrige #23792. Auteur : [Kevin Wan] (@MaxWk). #25394 (Maksim Kita).
  • Ajout de la fonction dateName pour renvoyer des noms tels que ‘Friday’ ou ‘April’. Auteur : [Daniil Kondratyev] (@dankondr). #25372 (Maksim Kita).
  • Ajout de la fonction toJSONString pour sérialiser les colonnes dans leur représentation JSON. #25164 (Amos Bird).
  • Désormais, query_log comporte deux nouvelles colonnes : initial_query_start_time et initial_query_start_time_microsecond, qui enregistrent l’heure de début d’une distributed query, le cas échéant. #25022 (Amos Bird).
  • Ajout de la fonction d’agrégation segmentLengthSum. #24250 (flynn).
  • Ajout d’un nouveau paramètre booléen prefer_global_in_and_join qui fait de tous les IN/JOIN des GLOBAL IN/JOIN par défaut. #23434 (Amos Bird).
  • Prise en charge des requêtes ALTER DELETE pour le table engine Join. #23260 (foolchi).
  • Ajout de la fonction d’agrégation quantileBFloat16, ainsi que des fonctions correspondantes quantilesBFloat16 et medianBFloat16. Il s’agit d’un estimateur de quantile très simple et rapide, avec une erreur relative ne dépassant pas 0.390625 %. Corrige #16641. #23204 (Ivan Novitskiy).
  • Implémentation de la fonction sequenceNextNode(), utile pour la flow analysis. #19766 (achimbab).

Fonctionnalité expérimentale

  • Prise en charge du système de fichiers virtuel sur HDFS. #11058 (overshov) (Kseniia Sumarokova).
  • Désormais, ClickHouse Keeper (une alternative expérimentale à ZooKeeper) prend en charge les ACL digest de type ZooKeeper. #24448 (alesapin).

Amélioration des performances

  • Ajout d’une optimisation qui transforme certaines fonctions en lecture de sous-colonnes afin de réduire la quantité de données lues. Par exemple, l’instruction col IS NULL est transformée en lecture de la sous-colonne col.null. L’optimisation peut être activée en définissant le paramètre optimize_functions_to_subcolumns, qui est actuellement désactivé par défaut. #24406 (Anton Popov).
  • Réécriture d’un plus grand nombre de colonnes en expressions d’alias possibles. Cela peut permettre de meilleures optimisations, comme les projections. #24405 (Amos Bird).
  • Un index de type bloom_filter peut être utilisé pour des expressions avec la fonction hasAny et des tableaux constants. Cela clôt : #24291. #24900 (Vasily Nemkov).
  • Ajout d’une temporisation exponentielle pour reprogrammer une tentative de lecture lorsque les files d’attente RabbitMQ sont vides. (ClickHouse prend en charge l’importation de données depuis RabbitMQ.) Clôt #24340. #24415 (Kseniia Sumarokova).

Amélioration

  • Permet de limiter la bande passante pour la réplication. Ajout de deux paramètres Replicated*MergeTree : max_replicated_fetches_network_bandwidth et max_replicated_sends_network_bandwidth, qui permettent de limiter la vitesse maximale des récupérations/envois répliqués pour une table. Ajout de deux paramètres à l’échelle du serveur (dans le profil utilisateur default) : max_replicated_fetches_network_bandwidth_for_server et max_replicated_sends_network_bandwidth_for_server, qui limitent la vitesse maximale de réplication pour toutes les tables. Ces paramètres ne sont pas appliqués avec une précision parfaite. Désactivés par défaut. Corrige #1821. #24573 (alesapin).
  • Contraintes de ressources et isolation pour les bridges ODBC et Library. Utilise un groupe et un utilisateur clickhouse-bridge distincts pour les processus de bridge. Définit oom&#95;score&#95;adj afin que les bridges soient les premières cibles de l’OOM killer. Définit la RSS maximale à 1 GiB. Clôt #23861. #25280 (Kseniia Sumarokova).
  • Ajout d’un lien symbolique autonome clickhouse-keeper vers le binaire principal clickhouse. Il est désormais possible d’exécuter la coordination sans le serveur ClickHouse principal. #24059 (alesapin).
  • Utilise les paramètres globaux pour les requêtes sur VIEW. Corrige le comportement lorsque les requêtes sur VIEW utilisent des paramètres locaux, ce qui entraîne des erreurs si les paramètres de CREATE VIEW et de SELECT sont différents. Pour l’instant, VIEW n’utilisera pas ces paramètres modifiés, mais vous pouvez toujours transmettre des paramètres supplémentaires dans la section SETTINGS de la requête CREATE VIEW. Clôt #20551. #24095 (Vladimir).
  • Au démarrage du serveur, les parts avec un ID de partition incorrect ne seraient jamais supprimées, mais toujours détachées. #25070. #25166 (Nikolai Kochetov).
  • Augmente la taille du background schedule pool à 128 (paramètre background_schedule_pool_size). Cela permet d’éviter le blocage de la replication queue en cas de connexion lente à ZooKeeper. #25072 (alesapin).
  • Ajout du paramètre MergeTree max_parts_to_merge_at_once, qui limite le nombre de parts pouvant être fusionnées simultanément en arrière-plan. N’affecte pas la requête OPTIMIZE FINAL. Corrige #1820. #24496 (alesapin).
  • Permet d’utiliser l’opérateur NOT IN pour le partition pruning. #24894 (Amos Bird).
  • Reconnaît comme locales les adresses IPv4 telles que 127.0.1.1. Ce changement est controversé et clôt #23504. Michael Filimonov testera cette fonctionnalité. #24316 (alexey-milovidov).
  • Une base de données ClickHouse créée avec MaterializeMySQL (il s’agit d’une fonctionnalité expérimentale) contient désormais tous les commentaires de colonnes de la base de données MySQL matérialisée. #25199 (Storozhuk Kostiantyn).
  • Ajout de paramètres (connection_auto_close/connection_max_tries/connection_pool_size) pour le moteur de stockage MySQL. #24146 (Azat Khuzhin).
  • Amélioration du temps de démarrage du moteur Distributed. #25663 (Azat Khuzhin).
  • Amélioration des tables Distributed. Suppression des répliques de dirname pour internal_replication=true (ce qui permet d’effectuer un INSERT dans Distributed avec un cluster comportant n’importe quel nombre de répliques ; auparavant, seules 15 répliques étaient prises en charge, et au-delà, la création du répertoire pour les blocs asynchrones échouait avec ENAMETOOLONG). #25513 (Azat Khuzhin).
  • Ajout de la prise en charge du type Interval pour LowCardinality. C’est nécessaire pour les valeurs intermédiaires de certaines expressions. Clôt #21730. #25410 (Vladimir).
  • Ajout de l’opérateur == dans les conditions temporelles pour les fonctions sequenceMatch et sequenceCount. Par exemple : sequenceMatch(’(?1)(?t==1)(?2)’)(time, data = 1, data = 2). #25299 (Christophe Kalenzaga).
  • Ajout des paramètres http_max_fields, http_max_field_name_size, http_max_field_value_size. #25296 (Ivan).
  • Ajout de la prise en charge de la fonction if avec des types Decimal et Int dans ses branches. Clôt #20549. Clôt #10142. #25283 (alexey-milovidov).
  • Mise à jour de l’invite dans clickhouse-client et affichage d’un message lors de la reconnexion. Clôt #10577. #25281 (alexey-milovidov).
  • Correction du suivi de la mémoire dans la fonction d’agrégation topK. Clôt #25259. #25260 (alexey-milovidov).
  • Correction de topLevelDomain pour les hôtes IDN (c.-à-d. example.рф) ; auparavant, la fonction renvoyait une chaîne vide pour ces hôtes. #25103 (Azat Khuzhin).
  • Détection de la version du noyau Linux à l’exécution (pour faire fonctionner epoll imbriqué, requis pour async_socket_for_remote/use_hedged_requests, faute de quoi les requêtes distantes peuvent rester bloquées). #25067 (Azat Khuzhin).
  • Pour les requêtes distribuées, lorsque optimize_skip_unused_shards=1, possibilité d’ignorer un shard avec une condition de type (sharding key) IN (one-element-tuple). (Les Tuples à plusieurs éléments étaient pris en charge. Le Tuple à un seul élément ne fonctionnait pas, car il est analysé comme un littéral.) #24930 (Amos Bird).
  • Amélioration des messages de journalisation des erreurs S3 : plus de doubles espaces lorsque les keys et les buckets sont vides. #24897 (Vladimir Chebotarev).
  • Certaines requêtes nécessitent une analyse sémantique en plusieurs passes. Tentative de réutilisation des sets construits pour IN dans ce cas. #24874 (Amos Bird).
  • Respect de max_distributed_connections pour insert_distributed_sync (sinon, sur de très grands clusters et avec une insertion synchrone, max_thread_pool_size peut être épuisé). #24754 (Azat Khuzhin).
  • Éviter de masquer des erreurs telles que Limit for rows or bytes to read exceeded pour les sous-requêtes scalaires. #24545 (nvartolomei).
  • Rendre le parseur de String vers Int plus strict afin que toInt64('+') lève une exception. #24475 (Amos Bird).
  • Si SSD_CACHE est créé à l’aide d’une requête DDL, il ne peut l’être que dans le répertoire user_files. #24466 (Maksim Kita).
  • PostgreSQL prend désormais en charge la spécification d’un schéma autre que le schéma par défaut pour les requêtes d’insertion. Clôt #24149. #24413 (Kseniia Sumarokova).
  • Correction de la résolution des adresses IPv6 (c.-à-d. corrige select * from remote('[::1]', system.one)). #24319 (Azat Khuzhin).
  • Correction des espaces de fin dans la clause FROM avec des sous-requêtes en mode multiligne, et légère amélioration du rendu des requêtes pour le rendre plus lisible. #24151 (Azat Khuzhin).
  • Amélioration des tables Distributed. Ajout de la possibilité de scinder un lot distribué en cas d’échec (par ex. en raison de limites mémoire ou de corruptions), via distributed_directory_monitor_split_batch_on_failure (désactivé par défaut). #23864 (Azat Khuzhin).
  • Gestion des conflits de noms de colonnes pour le moteur de table Join. Clôt #20309. #23769 (Vladimir).
  • Affichage de la progression pour le moteur de table File dans clickhouse-local et pour les requêtes INSERT dans clickhouse-client lorsque les données sont transmises via stdin. Clôt #18209. #23656 (Kseniia Sumarokova).
  • Corrections de bugs et améliorations de clickhouse-copier. Permet de copier des tables avec des schémas différents (mais compatibles). Clôt #9159. Ajout d’un test pour copier ReplacingMergeTree. Clôt #22711. Prise en charge de TTL sur les colonnes et des index de saut de données. Ceux-ci sont simplement supprimés lors de la création de la table Distributed interne (la table sous-jacente conservera le TTL et les index de saut). Clôt #19384. Permet de copier les colonnes MATERIALIZED et ALIAS. Cela peut être utile dans certains cas (par exemple, si cette colonne fait partie de la PRIMARY KEY). Cela peut désormais être autorisé en définissant la propriété allow_to_copy_alias_and_materialized_columns sur true dans la configuration de la tâche. Clôt #9177. Clôt [#11007] (https://github.com/ClickHouse/ClickHouse/issues/11007). Clôt #9514. Ajout de la propriété allow_to_drop_target_partitions dans la configuration de la tâche pour supprimer une partition dans la table d’origine avant de déplacer les tables auxiliaires. Clôt #20957. Suppression de la requête OPTIMIZE DEDUPLICATE. Ce contournement était nécessaire, car ALTER TABLE MOVE PARTITION était réessayé de nombreuses fois et les tables MergeTree simples n’ont pas de déduplication. Clôt #17966. Écrit la progression dans le nœud ZooKeeper au chemin task_path + /status au format JSON. Clôt #20955. Prise en charge de ReplicatedTables sans arguments. Clôt #24834 .#23518 (Nikita Mikhaylov).
  • Ajout d’un délai avec backoff entre les tentatives de relecture depuis S3. #23461 (Vladimir Chebotarev).
  • Respect de insert_allow_materialized_columns (autorise les colonnes matérialisées) pour INSERT dans une table Distributed. #23349 (Azat Khuzhin).
  • Ajout de la possibilité de push down LIMIT pour les requêtes distribuées. #23027 (Azat Khuzhin).
  • Correction de la réplication zero-copy avec plusieurs volumes S3 (corrige #22679). #22864 (ianton-ru).
  • Résolution du numéro de port réellement attribué lorsqu’un utilisateur demande au système d’exploitation un port disponible quelconque, afin de l’afficher dans le message de journalisation. #25569 (bnaecker).
  • Correction d’un cas où, parfois, la conversion des tableaux Postgres aboutissait au type de données String au lieu d’un tableau multidimensionnel, car attndims fonctionne incorrectement dans certains cas. Clôt #24804. #25538 (Kseniia Sumarokova).
  • Correction de la conversion de DateTime avec fuseau horaire pour MySQL, PostgreSQL et ODBC. Clôt #5057. #25528 (Kseniia Sumarokova).
  • Différencie KILL MUTATION selon les tables (corrige l’erreur inattendue Cancelled mutating parts). #25025 (Azat Khuzhin).
  • Permet de déclarer un disque S3 à la racine du bucket (le système de fichiers virtuel S3 est une fonctionnalité expérimentale en cours de développement). #24898 (Vladimir Chebotarev).
  • Active la lecture des sous-colonnes (par exemple, les composants de Tuples) pour les tables distribuées. #24472 (Anton Popov).
  • Amélioration du protocole de compatibilité MySQL : la fonction user renvoie désormais une sortie correcte. Résout #25697. #25697 (sundyli).

Correction de bugs

  • Amélioration de la rétrocompatibilité. Utilise l’ancienne version de la fonction modulo lorsqu’elle est employée dans la clé de partitionnement. Clôt #23508. #24157 (Kseniia Sumarokova).
  • Correction d’un bogue extrêmement rare sur des serveurs disposant de peu de mémoire, pouvant empêcher d’effectuer des merges sans redémarrage. Corrige peut-être #24603. #24872 (alesapin).
  • Correction de l’erreur extrêmement rare Tagging already tagged part dans la file de réplication lors d’un alter move/replace partition concurrent. Corrige peut-être #22142. #24961 (alesapin).
  • Correction d’un crash potentiel lors du calcul des états de fonctions d’agrégation, par agrégation des états de fonctions d’agrégation d’autres fonctions d’agrégation (pas un cas d’utilisation concret). Voir #24523. #25015 (alexey-milovidov).
  • Correction du comportement lorsque la requête SYSTEM RESTART REPLICA ou SYSTEM SYNC REPLICA ne se termine pas. Ce problème a été détecté sur un serveur disposant d’une quantité de RAM extrêmement faible. #24457 (Nikita Mikhaylov).
  • Correction d’un bogue pouvant bloquer le client ZooKeeper dans clickhouse-server. #24721 (alesapin).
  • Si la connexion à ZooKeeper était perdue et qu’une réplique était clonée après son rétablissement, sa file de réplication pouvait contenir des entrées obsolètes. Correction d’une assertion en échec lorsque la file de réplication contient des virtual parts qui se chevauchent. Cela peut rarement se produire si une data part a été perdue. Écrit désormais une erreur dans le journal au lieu d’interrompre le processus. #24777 (tavplubix).
  • Correction de la perte de la condition WHERE dans l’optimisation du plan de requête par expression push-down (paramètre query_plan_filter_push_down = 1 par défaut). Corrige #25368. #25370 (Nikolai Kochetov).
  • Correction d’un bogue pouvant entraîner des parts qui se chevauchent après des merges avec TTL : Part all_40_40_0 is covered by all_40_40_1 but should be merged into all_40_41_1. This shouldn't happen often.. #25549 (alesapin).
  • En cas de perte de connexion à ZooKeeper, une table ReplicatedMergeTree pouvait attendre la fin des opérations en arrière-plan avant d’essayer de se reconnecter. C’est corrigé : désormais, les opérations en arrière-plan sont arrêtées de force. #25306 (tavplubix).
  • Correction de l’erreur Key expression contains comparison between inconvertible types pour les requêtes avec ARRAY JOIN lorsqu’un Array est utilisé dans la clé primaire. Corrige #8247. #25546 (Anton Popov).
  • Correction de totaux erronés pour les requêtes WITH TOTALS et WITH FILL. Corrige #20872. #25539 (Anton Popov).
  • Correction d’une data race lors de l’interrogation de system.clusters pendant le rechargement simultané de la configuration du cluster. #25737 (Amos Bird).
  • Correction de l’erreur No such file or directory lors du déplacement d’une table Distributed entre des bases de données. Corrige #24971. #25667 (tavplubix).
  • REPLACE PARTITION pouvait être ignoré dans de rares cas si la partition source était vide. C’est corrigé. Corrige #24869. #25665 (tavplubix).
  • Correction d’un bug dans le moteur de base de données Replicated qui pouvait, dans de rares cas, amener une réplique à ignorer une requête DDL mise en file d’attente. #24805 (tavplubix).
  • Correction d’un déréférencement de pointeur nul dans EXPLAIN AST sans requête. #25631 (Nikolai Kochetov).
  • Correction de l’attente liée à la suppression automatique des parts vides. Cela pouvait entraîner le remplissage complet du pool d’arrière-plan et le blocage de la réplication. #23315 (Anton Popov).
  • Correction de la restauration d’une table stockée dans le système de fichiers virtuel S3 (il s’agit d’une fonctionnalité expérimentale non prête pour la production). #25601 (ianton-ru).
  • Correction d’un déréférencement de pointeur nul dans le format Arrow lors de l’utilisation de Decimal256. Ajout de la prise en charge de Decimal256 pour le format Arrow. #25531 (Kruglov Pavel).
  • Correction du caractère de soulignement superflu avant les noms des fichiers de configuration prétraités. #25431 (Vitaly Baranov).
  • Correctif pour l’outil clickhouse-copier : correction d’un segfault lorsque sharding_key est absent de la configuration de tâche du copier. #25419 (Nikita Mikhaylov).
  • Correction du transformateur de colonne REPLACE lorsqu’il est utilisé dans une DDL, en mettant correctement entre guillemets la requête formatée. Cela corrige #23925. #25391 (Amos Bird).
  • Correction de la possibilité d’un comportement non déterministe de la fonction quantileDeterministic et de fonctions similaires. Cela clôt #20480. #25313 (alexey-milovidov).
  • Prise en charge de SimpleAggregateFunction(LowCardinality) pour SummingMergeTree. Corrige #25134. #25300 (Nikolai Kochetov).
  • Correction d’une erreur logique avec le message d’exception “Cannot sum Array/Tuple in min/maxMap”. #25298 (Kruglov Pavel).
  • Correction de l’erreur Bad cast from type DB::ColumnLowCardinality to DB::ColumnVector<char8_t> pour les requêtes où l’argument LowCardinality était utilisé avec IN (ce bug est apparu en 21.6). Corrige #25187. #25290 (Nikolai Kochetov).
  • Corrige le comportement incorrect de joinGetOrNull avec des colonnes non nullables. Cela corrige #24261. #25288 (Amos Bird).
  • Corrige un comportement incorrect et un signalement UBSan sur les grands entiers. Dans les versions précédentes, CAST(1e19 AS UInt128) renvoyait zéro. #25279 (alexey-milovidov).
  • Corrige une erreur survenant lors de l’insertion d’un sous-ensemble de colonnes au format CSVWithNames. Corrige #25129. #25169 (Nikita Mikhaylov).
  • N’utilise pas la projection de la table pour SELECT avec FINAL. Ce n’est pas encore pris en charge. #25163 (Amos Bird).
  • Corrige une perte possible de parts après une mise à jour vers 21.5 si la table utilisait UUID dans la clé de partition. (Il n’est pas recommandé d’utiliser UUID dans la clé de partition.) Corrige #25070. #25127 (Nikolai Kochetov).
  • Corrige un crash dans une requête avec une jointure croisée et joined_subquery_requires_alias = 0. Corrige #24011. #25082 (Nikolai Kochetov).
  • Corrige un bug avec des maps constantes dans la fonction mapContains, qui provoquait l’erreur empty column was returned by function mapContains. Résout #25077. #25080 (Kruglov Pavel).
  • Supprime la possibilité de créer des tables avec des colonnes se référençant elles-mêmes, comme a UInt32 ALIAS a + 1 ou b UInt32 MATERIALIZED b. Corrige #24910, #24292. #25059 (alesapin).
  • Corrige un résultat erroné lors de l’utilisation d’une projection agrégée avec une clé GROUP BY non vide pour exécuter une requête avec une clé GROUP BY vide. #25055 (Amos Bird).
  • Corrige la sérialisation des messages imbriqués scindés au format Protobuf. Cette PR corrige #24647. #25000 (Vitaly Baranov).
  • Corrige les paramètres limit/offset pour les requêtes distribuées (ignorés sur les nœuds distants). #24940 (Azat Khuzhin).
  • Corrige un possible heap-buffer-overflow dans le format Arrow. #24922 (Kruglov Pavel).
  • Corrige l’erreur possible ‘Cannot read from istream at offset 0’ lors de la lecture d’un fichier depuis DiskS3 (le système de fichiers virtuel S3 est une fonctionnalité expérimentale en cours de développement qui ne doit pas être utilisée en production). #24885 (Pavel Kovalenko).
  • Corrige l’exception “Missing columns” lors d’une jointure sur une vue matérialisée distribuée. #24870 (Azat Khuzhin).
  • Autorisation des valeurs NULL dans le protocole de compatibilité PostgreSQL. Résout #22622. #24857 (Kseniia Sumarokova).
  • Correction d’un bug où l’exception Mutation was killed pouvait être renvoyée au client lors de l’attente d’une mutation, alors que celle-ci n’était pas encore chargée en mémoire. #24809 (alesapin).
  • Correction d’un bug dans la désérialisation de l’état du générateur aléatoire, qui pouvait entraîner un comportement non déterministe de certains types de données, comme AggregateFunction(groupArraySample(N), T)). #24538 (tavplubix).
  • Interdiction de construire des uniqXXXXStates à partir d’autres états d’agrégation. #24523 (Raúl Marín). Puis réactivation de cette possibilité après suppression effective de la cause racine du problème associé. (alexey-milovidov).
  • Correction de l’utilisation des tuples dans les requêtes CREATE .. AS SELECT. #24464 (Anton Popov).
  • Correction du calcul du nombre total d’octets dans la table Buffer. Dans la version actuelle de ClickHouse, le compteur total_writes.bytes diminue excessivement pendant le flush du buffer. Cela entraîne un dépassement de capacité du compteur, et totalBytes renvoie une valeur d’environ 17.44 EB quelque temps après le flush. #24450 (DimasKovas).
  • Correction d’informations erronées sur la monotonie de la fonction toWeek. Cela corrige #24422. Ce bug a été introduit dans https://github.com/ClickHouse/ClickHouse/pull/5212, puis révélé plus tard par un élagueur de partitions plus intelligent. #24446 (Amos Bird).
  • Lorsque l’authentification des utilisateurs est gérée par LDAP, correction d’un interblocage potentiel pouvant se produire pendant le (re)mappage des rôles LDAP, lorsqu’un groupe LDAP est mappé à un rôle local inexistant. #24431 (Denis Glazachev).
  • Dans le message “multipart/form-data”, prise en compte du CRLF précédant une frontière comme faisant partie de celle-ci. Corrige #23905. #24399 (Ivan).
  • Correction de drop partition avec de fausses parts intersect. Dans de rares cas, il peut exister des parts dont la version de mutation est supérieure au numéro de bloc actuel. #24321 (Amos Bird).
  • Correction d’un bug lors du déplacement d’une materialized view d’une base de données Ordinary vers une base Atomic (requête RENAME TABLE). Désormais, la table interne est déplacée vers la nouvelle base de données en même temps que la materialized view. Corrige #23926. #24309 (tavplubix).
  • Autorisation des HTTP headers vides. Corrige #23901. #24285 (Ivan).
  • Correction du traitement des mutations (ALTER UPDATE/DELETE) dans les tables Memory. Résout #24274. #24275 (flynn).
  • Faire en sorte que la propriété LowCardinality de la colonne dans le résultat du JOIN soit la même qu’en entrée, close #23351, close #20315. #24061 (Vladimir).
  • Correctif pour les tables Kafka. Corrige un bug dans le comportement de failover : lorsque Engine = Kafka, la consommation ne pouvait pas démarrer si le même consumer avait auparavant une affectation vide. Closes #21118. #21267 (filimonov).

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

  • Ajout des builds darwin-aarch64 (Mac M1 / Apple Silicon) dans la CI #25560 (Ivan) et des liens vers la documentation et le site web (alexey-milovidov).
  • Ajout de l’intégration multiplateforme de ressources binaires dans les exécutables. Fonctionne sur Illumos. #25146 (bnaecker).
  • Ajout d’options liées aux jointures dans les tests de stress afin d’améliorer le fuzzing. #25200 (Vladimir).
  • Activation de la compilation avec le module S3 sur OSX #25217. #25218 (kevin wan).
  • Ajout de cas de test d’intégration pour couvrir le pont JDBC. #25047 (Zhichun Wu).
  • La configuration des tests d’intégration bénéficie d’un traitement spécial pour les dictionnaires. Suppression de la configuration manuelle restante des dictionnaires. #24728 (Ilya Yatsishin).
  • Ajout de tests libfuzzer pour la classe YAMLParser. #24480 (BoloniniD).
  • Ubuntu 20.04 est désormais utilisé pour exécuter les tests d’intégration, et la version de docker-compose utilisée à cette fin a été mise à jour vers 1.28.2. Les variables d’environnement sont désormais prises en compte par docker-compose. Refonte de test_dictionaries_all_layouts_separate_sources pour permettre une exécution en parallèle. #20393 (Ilya Yatsishin).
  • Correction d’une erreur TOCTOU dans le script d’installation. #25277 (alexey-milovidov).

Version 21.6 de ClickHouse, 2021-06-05

Changement incompatible avec les versions précédentes

  • uniqState / uniqHLL12State / uniqCombinedState / uniqCombined64State produisent des états incompatibles avec le type UUID. #33607.

Notes de mise à niveau

  • La bibliothèque de compression zstd a été mise à jour vers la version 1.5.0. Il se peut que des messages « checksum does not match » s’affichent lors de la réplication. Ces messages sont attendus en raison de la mise à jour de l’algorithme de compression et vous pouvez les ignorer. Ils sont purement informatifs et n’indiquent aucun comportement indésirable.
  • Le paramètre compile_expressions est activé par défaut. Bien qu’il ait été largement testé dans divers scénarios, si vous constatez un comportement indésirable sur vos serveurs, vous pouvez essayer de désactiver ce paramètre.
  • Les valeurs de type UUID ne peuvent pas être comparées à un entier. Par exemple, au lieu d’écrire uuid != 0, utilisez uuid != '00000000-0000-0000-0000-000000000000'.

Nouvelle fonctionnalité

  • Ajout de l’opérateur de cast de type Postgres (::). Par ex. : [1, 2]::Array(UInt8), 0.1::Decimal(4, 4), number::UInt16. #23871 (Anton Popov).
  • Les grands entiers sont désormais prêts pour la production. Ajout de la prise en charge du type de données UInt128. Correction des problèmes connus liés au type de données Decimal256. Prise en charge des grands entiers dans les dictionnaires. Prise en charge des fonctions gcd/lcm pour les grands entiers. Prise en charge des grands entiers dans les fonctions conditionnelles et de recherche dans les tableaux. Prise en charge de LowCardinality(UUID). Prise en charge des grands entiers dans la table function generateRandom et dans clickhouse-obfuscator. Correction d’une erreur lors du renvoi de UUID depuis des sous-requêtes scalaires. Cela corrige #7834. Cela corrige #23936. Cela corrige #4176. Cela corrige #24018. Changement incompatible avec les versions précédentes : les valeurs de type UUID ne peuvent pas être comparées à des entiers. Par exemple, au lieu d’écrire uuid != 0, écrivez uuid != '00000000-0000-0000-0000-000000000000'. #23631 (alexey-milovidov).
  • Prise en charge du type de données Array pour l’insertion et la sélection de données aux formats Arrow, Parquet et ORC. #21770 (taylor12805).
  • Implémentation des commentaires de table. Ferme #23225. #23548 (flynn).
  • Prise en charge de la création de dictionnaires avec des requêtes DDL dans clickhouse-local. Ferme #22354. Ajout de la prise en charge de DETACH DICTIONARY PERMANENTLY. Ajout de la prise en charge de EXCHANGE DICTIONARIES pour le database engine Atomic. Ajout de la prise en charge du déplacement de dictionnaires entre bases de données à l’aide de RENAME DICTIONARY. #23436 (Maksim Kita).
  • Ajout de la fonction d’agrégation uniqTheta pour prendre en charge Theta Sketch dans ClickHouse. #23894. #22609 (Ping Yu).
  • Ajout de la fonction splitByRegexp. #24077 (abel-cheng).
  • Ajout de la fonction arrayProduct, qui accepte un tableau comme paramètre et renvoie le produit de tous les éléments du tableau. Ferme #21613. #23782 (Maksim Kita).
  • Ajout de la colonne thread_name à system.stack_trace. Cela ferme #23256. #24124 (abel-cheng).
  • Si insert_null_as_default = 1, insère les valeurs par défaut au lieu de NULL dans les requêtes INSERT ... SELECT et INSERT ... SELECT ... UNION ALL .... Ferme #22832. #23524 (Kseniia Sumarokova).
  • Ajout de la prise en charge de l’indication de progression dans clickhouse-local avec l’option --progress. #23196 (Egor Savin).
  • Ajout de la prise en charge de la compression HTTP (déterminée par l’en-tête HTTP Content-Encoding) dans la source de dictionnaire http. Cela corrige #8912. #23946 (FArthur-cmd).
  • Ajout de SYSTEM QUERY RELOAD MODEL, SYSTEM QUERY RELOAD MODELS. Clôt #18722. #23182 (Maksim Kita).
  • Ajout du paramètre json (booléen, 0 par défaut) pour la requête EXPLAIN PLAN. Lorsqu’il est activé, la sortie de la requête est une unique ligne JSON. Il est recommandé d’utiliser le format TSVRaw pour éviter les échappements inutiles. #23082 (Nikolai Kochetov).
  • Ajout du paramètre indexes (booléen, désactivé par défaut) à la requête EXPLAIN PIPELINE. Lorsqu’il est activé, il affiche les indexes utilisés, le nombre de parts et de granules filtrés pour chaque index appliqué. Pris en charge pour les tables MergeTree*. #22352 (Nikolai Kochetov).
  • LDAP : implémentation d’une fonctionnalité de détection du user DN à utiliser lors du mapping des groupes Active Directory vers les rôles ClickHouse. #22228 (Denis Glazachev).
  • Nouvelle fonction d’agrégation deltaSumTimestamp pour sommer la différence entre des lignes consécutives tout en préservant l’ordre lors du merge grâce au stockage des timestamps. #21888 (Russ Frank).
  • Ajout d’un provider d’informations d’authentification IMDS, moins sécurisé, pour S3, qui fonctionne correctement avec docker. #21852 (Vladimir Chebotarev).
  • Réintroduction de la fonction indexHint. Cela concerne #21238. Cela annule #9542. Cela corrige #9540. #21304 (Amos Bird).

Fonctionnalité expérimentale

  • Prise en charge de PROJECTION pour les tables MergeTree*. #20202 (Amos Bird).

Amélioration des performances

  • Le paramètre compile_expressions est désormais activé par défaut. Lorsque ce paramètre est activé, les compositions de fonctions simples et d’opérateurs sont compilées en code natif avec LLVM à l’exécution. #8482 (Maksim Kita, alexey-milovidov). Remarque : si cela vous pose des problèmes, désactivez cette option.
  • Mise à jour de la bibliothèque re2. Les performances de correspondance des expressions régulières sont améliorées. Cette PR ajoute également la compatibilité avec gcc-11. #24196 (Raúl Marín).
  • Lecture du format d’entrée ORC par stripe, au lieu de charger toute la table en mémoire en une seule fois, ce qui réduit la consommation de mémoire lorsque le fichier est très volumineux. #23102 (Chao Ma).
  • Fusion des fonctions d’agrégation sum, count et avg dans une requête en une seule fonction d’agrégation. L’optimisation est contrôlée par le paramètre optimize_fuse_sum_count_avg. Cela est implémenté au moyen d’une nouvelle fonction d’agrégation, sumCount. Cette fonction renvoie un tuple de deux champs : sum et count. #21337 (hexiaoting).
  • Mise à jour de zstd vers la version 1.5.0. Les performances de la compression sont améliorées de quelques points de pourcentage. #24135 (Raúl Marín). Remarque : vous pouvez recevoir des messages indiquant que « checksum does not match » dans la réplication. Ces messages sont attendus en raison de la mise à jour de l’algorithme de compression et vous pouvez les ignorer.
  • Performances améliorées des tables Buffer : aucun verrou n’est pris pour total_bytes/total_rows avec le moteur Buffer. #24066 (Azat Khuzhin).
  • La prise en charge de la préallocation pour les dictionnaires hashed/sparse_hashed est rétablie. #23979 (Azat Khuzhin).
  • async_socket_for_remote est désormais activé par défaut (ce qui réduit le nombre de threads lors des requêtes sur les tables Distributed avec un fanout important). #23683 (Nikolai Kochetov).

Amélioration

  • Ajout de la colonne virtuelle _partition_value à la famille de tables MergeTree. Elle peut être utilisée pour filtrer les partitions de manière déterministe. Elle est nécessaire pour implémenter le sélecteur de partition pour les mutations. #23673 (Amos Bird).
  • Ajout du paramètre region pour le stockage S3 et le disque. #23846 (Vladimir Chebotarev).
  • Possibilité de configurer différents niveaux de log pour différents canaux de journalisation. Clôt #19569. #23857 (filimonov).
  • Conserve le fuseau horaire par défaut pour les opérations sur DateTime s’il n’est pas fourni explicitement. Par exemple, si vous ajoutez une seconde à une valeur de type DateTime sans fuseau horaire, elle restera un DateTime sans fuseau horaire. Dans les versions précédentes, la valeur du fuseau horaire par défaut était explicitement ajoutée au type de données renvoyé, qui devenait alors DateTime(‘something’). Cela clôt #4854. #23392 (alexey-milovidov).
  • Autorise l’utilisateur à spécifier une chaîne vide à la place du nom de la base de données pour le moteur MySQL. La base de données par défaut sera utilisée pour les requêtes. Dans les versions précédentes, cela fonctionnait pour les requêtes SELECT et la prise en charge d’INSERT a également été ajoutée. Cela clôt #19281. Cela peut être utile pour travailler avec Sphinx ou d’autres bases de données externes compatibles MySQL. #23319 (alexey-milovidov).
  • Correction de quantile(s)TDigest. Ajout d’une gestion spéciale des centroïdes singleton conformément à tdunning/t-digest 3.2+. Un bug de sur-compression des centroïdes dans l’implémentation d’une version antérieure de l’algorithme a également été corrigé. #23314 (Vladimir Chebotarev).
  • La fonction now64 prend désormais en charge un argument de fuseau horaire facultatif. #24091 (Vasily Nemkov).
  • Corrige le cas où une barre de progression en mode interactif dans clickhouse-client, apparaissant au milieu des données, peut réécrire certaines parties des données affichées dans le terminal. Cela clôt #19283. #23050 (alexey-milovidov).
  • Corrige un crash lorsque l’allocation de mémoire échoue dans simdjson. https://github.com/simdjson/simdjson/pull/1567 . Classé comme amélioration, car il s’agit d’un bug très rare. #24147 (Amos Bird).
  • Préserve les dictionnaires jusqu’à l’arrêt du stockage (cela évitera d’éventuelles erreurs external dictionary 'DICT' not found lors de l’arrêt du serveur pendant le flush final du moteur Buffer). #24068 (Azat Khuzhin).
  • Flush les tables Buffer avant d’arrêter les tables (au sein d’une même base de données), afin d’éviter de rejeter des blocks parce que l’underlying table avait déjà été detached (et l’erreur Destination table default.a_data_01870 doesn't exist. Block of data is discarded dans le log). #24067 (Azat Khuzhin).
  • Désormais, prefer_column_name_to_alias = 1 privilégiera également les noms de colonne pour group by, having et order by. Cela corrige #23882. #24022 (Amos Bird).
  • Ajout de la prise en charge de ORDER BY WITH FILL avec DateTime64. #24016 (kevin wan).
  • DateTime64 peut désormais être utilisé comme version column dans ReplacingMergeTree. #23992 (kevin wan).
  • Journalisation d’informations sur le nom du système d’exploitation, la version du noyau et l’architecture du CPU au démarrage du server. #23988 (Azat Khuzhin).
  • Prise en charge de la spécification du schéma de table pour la dictionary source postgresql. Closes #23958. #23980 (Kseniia Sumarokova).
  • Ajout d’indications pour les noms des éléments Enum (proposition de noms en cas de faute de frappe). Closes #17112. #23919 (flynn).
  • Mesure du taux de correspondance trouvé (le pourcentage de cas où la Value a été trouvée) pour les Dictionaries (voir found_rate dans system.dictionaries). #23916 (Azat Khuzhin).
  • Possibilité d’ajouter des paramètres spécifiques pour les queues via le paramètre de table rabbitmq_queue_settings_list. (Closes #23737 and #23918). L’utilisateur peut désormais contrôler toute la configuration RabbitMQ : si le paramètre de table rabbitmq_queue_consume est défini sur 1, le table engine RabbitMQ se connectera uniquement à la queue spécifiée et n’effectuera aucune configuration côté consumer RabbitMQ, comme la déclaration d’exchange, de queues ou de bindings. (Closes #21757). Ajout d’un nettoyage approprié lors du drop d’une table RabbitMQ : suppression des queues déclarées par la table ainsi que de tous les exchanges liés, s’ils ont été créés par la table. #23887 (Kseniia Sumarokova).
  • Ajout de broken_data_files/broken_data_compressed_bytes dans system.distribution_queue. Ajout d’une métrique pour le nombre de fichiers d’asynchronous insertion dans les Distributed tables marqués comme corrompus (BrokenDistributedFilesToInsert). #23885 (Azat Khuzhin).
  • Les query sur system.tables ne passent plus par ZooKeeper. #23793 (Fuwang Hu).
  • Respect de lock_acquire_timeout_for_background_operations pour les query OPTIMIZE. #23623 (Azat Khuzhin).
  • Possibilité de modifier les Settings du disk S3 à l’exécution via la nouvelle commande SQL SYSTEM RESTART DISK. #23429 (Pavel Kovalenko).
  • Si l’utilisateur appliquait une mauvaise configuration en définissant par erreur max_distributed_connections à zéro, chaque query vers une table Distributed levait une exception avec un message contenant “logical error”. Mais il s’agit en réalité d’un comportement attendu, et non d’une logical error ; le message d’exception était donc légèrement incorrect. Cela déclenchait également des checks dans notre environnement CI, qui garantit qu’aucune logical error ne se produit jamais. Désormais, max_distributed_connections configuré à zéro sera traité comme la valeur minimum possible (un). #23348 (Azat Khuzhin).
  • min_bytes_to_use_mmap_io est désormais désactivé par défaut. #23322 (Azat Khuzhin).
  • Prise en charge de la nullabilité de LowCardinality avec join_use_nulls, corrige #15101. #23237 (vdimir).
  • Ajout de la possibilité de restaurer des parts MergeTree dans le répertoire detached pour le disque S3. #23112 (Pavel Kovalenko).
  • Nouvelle tentative en cas d’interruption de connexion HTTP sur S3. #22988 (Vladimir Chebotarev).
  • Ajout des paramètres external_storage_max_read_rows et external_storage_max_read_rows pour le moteur de table MySQL, la source de dictionnaire et les récupérations mineures de données de MaterializeMySQL. #22697 (TCeason).
  • MaterializeMySQL (fonctionnalité expérimentale) : auparavant, MySQL 5.7.9 n’était pas pris en charge en raison d’une incompatibilité SQL. La vérification des paramètres MySQL est désormais laissée à MaterializeMySQL. #23413 (TCeason).
  • Prise en charge de la lecture des sous-colonnes pour les tables distribuées. #24472 (Anton Popov).
  • Correction de l’utilisation des tuples dans les requêtes CREATE .. AS SELECT. #24464 (Anton Popov).
  • Prise en charge du format Parquet dans les tables Kafka. #23412 (Chao Ma).

Correction de bugs

  • Utilisation de l’ancienne version de la fonction modulo lorsqu’elle est utilisée dans la clé de partition et la clé primaire. Ferme #23508. #24157 (Kseniia Sumarokova). C’était une source d’incompatibilité rétroactive dans les versions précédentes.
  • Correction du comportement lorsque la requête SYSTEM RESTART REPLICA ou SYSTEM SYNC REPLICA était traitée indéfiniment. Cela a été détecté sur un serveur avec une quantité de RAM extrêmement faible. #24457 (Nikita Mikhaylov).
  • Correction de la monotonie incorrecte de la fonction toWeek. Cela corrige #24422. Ce bug a été introduit dans #5212, puis révélé plus tard par un élagueur de partitions plus intelligent. #24446 (Amos Bird).
  • Correction d’un DROP PARTITION incorrect avec de fausses parts intersectées. Dans de rares cas, il peut y avoir des parts avec une version de mutation supérieure au numéro de block actuel. #24321 (Amos Bird).
  • Correction d’un bug lors du déplacement d’une vue matérialisée d’une base de données Ordinary vers Atomic (requête RENAME TABLE). Désormais, la table interne est déplacée vers la nouvelle base de données en même temps que la vue matérialisée. Corrige #23926. #24309 (tavplubix).
  • Autorisation des en-têtes HTTP vides dans les requêtes client. Corrige #23901. #24285 (Ivan).
  • Définition de max_threads = 1 pour corriger l’échec des mutations sur les tables Memory. Ferme #24274. #24275 (flynn).
  • Correction d’une faute de frappe dans l’implémentation des tables Memory, bug introduit dans #15127. Ferme #24192. #24193 (张中南).
  • Correction d’un arrêt anormal du serveur dû au fait que HDFS devenait inaccessible pendant l’exécution d’une requête. Ferme #24117. #24191 (Kseniia Sumarokova).
  • Correction d’un crash lors de la mise à jour d’une colonne Nested avec une condition constante. #24183 (hexiaoting).
  • Correction d’une condition de concurrence qui pouvait se produire dans RBAC sous forte charge. Cette PR corrige #24090, #24134. #24176 (Vitaly Baranov).
  • Correction d’un bug rare pouvant conduire à une table partiellement initialisée capable de traiter des write requests (insert/alter/etc.). Désormais, ces tables seront en mode readonly. #24122 (alesapin).
  • Correction d’un problème : EXPLAIN PIPELINE avec SELECT xxx FINAL affichait un pipeline incorrect. (hexiaoting).
  • Correction de l’utilisation d’une valeur constante DateTime par rapport à une colonne DateTime64 dans WHERE. #24100 (Vasily Nemkov).
  • Correction d’un crash dans merge JOIN, corrige #24010. #24013 (vdimir).
  • Certaines requêtes ALTER PARTITION pouvaient provoquer les erreurs Part A intersects previous part B et Unexpected merged part C intersecting drop range D dans la replication queue. C’est corrigé. Corrige #23296. #23997 (tavplubix).
  • Correction d’un SIGSEGV pour GROUP BY externe et ligne de débordement (c.-à-d. des requêtes comme SELECT FROM GROUP BY WITH TOTALS SETTINGS max_bytes_before_external_group_by>0, max_rows_to_group_by>0, group_by_overflow_mode='any', totals_mode='before_having'). #23962 (Azat Khuzhin).
  • Correction du comptage des métriques de clés pour le dictionnaire CACHE avec des doublons dans la source (ce qui entraîne des débordements DictCacheKeysRequestedMiss). #23929 (Azat Khuzhin).
  • Correction de l’implémentation du pool de connexions du moteur PostgreSQL. Corrige #23897. #23909 (Kseniia Sumarokova).
  • Correction de distributed_group_by_no_merge = 2 avec GROUP BY et une fonction d’agrégation encapsulée dans une fonction classique (cassé dans #23546). Déclenche désormais une exception si quelqu’un essaie d’utiliser distributed_group_by_no_merge = 2 avec des window functions. Désactive optimize_distributed_group_by_sharding_key pour les requêtes avec des window functions. #23906 (Azat Khuzhin).
  • Correctif pour la fonction de table s3 : meilleure gestion des erreurs HTTP. Les corps de réponse des erreurs HTTP étaient auparavant ignorés. #23844 (Vladimir Chebotarev).
  • Correctif pour la fonction de table s3 : meilleure gestion des URI. Correction d’une incompatibilité avec les URL contenant le symbole + ; les données avec de telles clés ne pouvaient pas être lues auparavant. #23822 (Vladimir Chebotarev).
  • Correction de l’erreur Can't initialize pipeline with empty pipe pour les requêtes avec GLOBAL IN/JOIN et use_hedged_requests. Corrige #23431. #23805 (Nikolai Kochetov).
  • Correction de CLEAR COLUMN, qui ne fonctionne pas lorsqu’il est référencé par une materialized view. Corrige #23764. #23781 (flynn).
  • Correction d’une utilisation de mémoire après libération lors de la lecture depuis HDFS si le format Values est utilisé. #23761 (Kseniia Sumarokova).
  • Évite une éventuelle erreur “Cannot schedule a task” (si une exception s’était produite) lors d’un INSERT dans Distributed. #23744 (Azat Khuzhin).
  • Correction d’un bug dans la récupération d’une réplique ReplicatedMergeTree obsolète. Certaines mises à jour de métadonnées pouvaient être ignorées par une réplique obsolète si une requête ALTER était exécutée pendant l’indisponibilité de la réplique. #23742 (tavplubix).
  • Correction d’un bug avec Join et WITH TOTALS, corrige #17718. #23549 (vdimir).
  • Correction d’une possible erreur Block structure mismatch pour les requêtes avec UNION, qui pouvait se produire après une optimisation de pushdown du filtre. Corrige #23029. #23359 (Nikolai Kochetov).
  • Ajout d’une conversion de type lorsque le paramètre optimize_skip_unused_shards_rewrite_in est activé. Cela corrige le rapport MSan. #23219 (Azat Khuzhin).
  • Ajout d’une vérification manquante lors de la mise à jour de sous-colonnes imbriquées, corrige l’issue : #22353. #22503 (hexiaoting).

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

  • Prise en charge de la compilation sur Illumos. #24144. Ajoute la prise en charge de la compilation sur les systèmes d’exploitation dérivés de Solaris. #23746 (bnaecker).
  • Ajout de benchmarks supplémentaires pour les tables de hachage, y compris la Swiss Table de Google (qui semblait plus lente que la table de hachage de ClickHouse dans notre cas d’usage spécifique). #24111 (Maksim Kita).
  • Mise à jour de librdkafka de la version 1.6.0-RC3 vers la version 1.6.1. #23874 (filimonov).
  • Toujours activer explicitement asynchronous-unwind-tables. Cela peut corriger le profiler de requêtes sur AArch64. #23602 (alexey-milovidov).
  • Éviter une dépendance potentielle de la compilation aux paramètres régionaux et à l’ordre du système de fichiers. Cela permet d’obtenir des builds reproductibles. #23600 (alexey-milovidov).
  • Suppression d’une cause de non-déterminisme dans la compilation. Désormais, des builds effectués à des moments différents produiront des binaires identiques octet pour octet. Correction partielle de #22113. #23559 (alexey-milovidov).
  • Ajout d’un outil simple pour mesurer les performances de (Zoo)Keeper. #23038 (alesapin).

Version de ClickHouse 21.5, 2021-05-20

Changement rétro-incompatible

  • Modification de la comparaison entre les entiers et les nombres à virgule flottante lorsque l’entier n’est pas représentable exactement dans le type de données à virgule flottante. Dans la nouvelle version, la comparaison renverra false, car une erreur d’arrondi se produira. Exemple : 9223372036854775808.0 != 9223372036854775808, car le nombre 9223372036854775808 n’est pas représentable exactement en nombre à virgule flottante (et 9223372036854775808.0 est arrondi à 9223372036854776000.0). Mais dans la version précédente, la comparaison indiquait que les nombres étaient égaux, car si le nombre à virgule flottante 9223372036854776000.0 est reconverti en UInt64, il donne 9223372036854775808. À titre de référence, le langage Python considère également ces nombres comme égaux. Mais ce comportement dépendait du modèle de CPU (avec des résultats différents sur AMD64 et AArch64 pour certains nombres hors plage), nous rendons donc la comparaison plus précise. Elle ne considérera les entiers et les nombres à virgule flottante comme égaux que si l’entier est représenté exactement dans le type à virgule flottante. #22595 (alexey-milovidov).
  • Suppression de la prise en charge de argMin et argMax pour un unique argument Tuple. Le code n’était pas sûr du point de vue de la gestion mémoire. Cette fonctionnalité a été ajoutée par erreur et prête à confusion. Ces fonctions pourront être réintroduites plus tard sous d’autres noms. Cela corrige #22384 et annule #17359. #23393 (alexey-milovidov).

Nouvelle fonctionnalité

  • Ajout des fonctions dictGetChildren(dictionary, key), dictGetDescendants(dictionary, key, level). La fonction dictGetChildren renvoie tous les enfants sous la forme d’un tableau d’indices. Il s’agit de la transformation inverse de dictGetHierarchy. La fonction dictGetDescendants renvoie tous les descendants comme si dictGetChildren était appliquée récursivement level fois. Une valeur level égale à zéro équivaut à l’infini. Amélioration des performances des fonctions dictGetHierarchy et dictIsIn. Clôt #14656. #22096 (Maksim Kita).
  • Ajout de la fonction dictGetOrNull. Elle fonctionne comme dictGet, mais renvoie NULL si la clé est introuvable dans le dictionnaire. Clôt #22375. #22413 (Maksim Kita).
  • Ajout d’une fonction de table s3Cluster, qui permet de traiter en parallèle des fichiers depuis s3 sur chaque nœud d’un cluster spécifié. #22012 (Nikita Mikhaylov).
  • Ajout de la prise en charge des répliques et des shards dans le moteur de table / la fonction de table MySQL/PostgreSQL. Vous pouvez écrire SELECT * FROM mysql('host{1,2}-{1|2}', ...). Clôt #20969. #22217 (Kseniia Sumarokova).
  • Ajout de la requête ALTER TABLE ... FETCH PART .... Elle est similaire à FETCH PARTITION, mais ne récupère qu’une seule part. #22706 (turbo jason).
  • Ajout d’un paramètre max_distributed_depth qui limite la profondeur des requêtes récursives vers les tables Distributed. Clôt #20229. #21942 (flynn).

Amélioration des performances

  • Performances de intDiv améliorées grâce au dispatch dynamique pour AVX2. Cela résout #22314. #23000 (alexey-milovidov).
  • Performances de lecture du format d’entrée ArrowStream améliorées pour les sources autres qu’un fichier local (par ex. une URL). #22673 (nvartolomei).
  • Compression désactivée par défaut lors des interactions avec localhost (avec clickhouse-client ou de serveur à serveur pour les requêtes distribuées) via le protocole natif. Cela peut améliorer les performances de certaines opérations d’import/export. Cela résout #22234. #22237 (alexey-milovidov).
  • Exclusion, de la partie droite de la clause IN, des valeurs qui n’appartiennent pas au shard pour les requêtes distribuées (avec optimize_skip_unused_shards_rewrite_in, activé par défaut, puisqu’il requiert toujours optimize_skip_unused_shards). #21511 (Azat Khuzhin).
  • Performances améliorées pour la lecture d’un sous-ensemble de colonnes avec un moteur de table de type File et un format orienté colonnes comme Parquet, Arrow ou ORC. Cela résout #issue:20129. #21302 (keenwolf).
  • Autorise le déplacement de davantage de conditions vers PREWHERE, comme avant la version 21.1 (ajustement des heuristiques internes). Un nombre insuffisant de conditions déplacées pouvait entraîner une baisse des performances. #23397 (Anton Popov).
  • Performances des connexions ODBC améliorées et tous les problèmes restants du backlog corrigés. Utilisation de la bibliothèque nanodbc au lieu de Poco::ODBC. Résout #9678. Ajout de la prise en charge de DateTime64 et Decimal* pour le moteur de table ODBC. Résout #21961. Correction d’un problème de troncature du texte cyrillique. Résout #16246. Ajout de pools de connexions pour odbc bridge. #21972 (Kseniia Sumarokova).

Amélioration

  • Augmente max_uri_size (la taille maximale de l’URL dans l’interface HTTP) à 1 MiB par défaut. Cela clôt #21197. #22997 (alexey-milovidov).
  • Définit background_fetches_pool_size à 8, ce qui est mieux adapté à une utilisation en production avec des insertions fréquentes de petite taille ou un cluster ZooKeeper lent. #22945 (alexey-milovidov).
  • FlatDictionary ajoute les options initial_array_size, max_array_size. #22521 (Maksim Kita).
  • Ajoute le nouveau paramètre non_replicated_deduplication_window pour la déduplication des insertions dans MergeTree non répliqué. #22514 (alesapin).
  • Met à jour les chemins vers les configurations du modèle CatBoost lors du rechargement de la configuration. #22434 (Kruglov Pavel).
  • Ajout de la prise en charge du type Decimal256 dans les dictionnaires. Decimal256 est une fonctionnalité expérimentale. Clôt #20979. #22960 (Maksim Kita).
  • async_socket_for_remote est activé par défaut (utilise moins de threads du système d’exploitation pour les requêtes distribuées). #23683 (Nikolai Kochetov).
  • Correction de quantile(s)TDigest. Ajout d’un traitement spécial des centroïdes singleton conformément à tdunning/t-digest 3.2+. Un bug provoquant une surcompression des centroïdes dans l’implémentation d’une version antérieure de l’algorithme a également été corrigé. #23314 (Vladimir Chebotarev).
  • Rend le nom de fonction unhex insensible à la casse pour assurer la compatibilité avec MySQL. #23229 (alexey-milovidov).
  • Implémente les fonctions arrayHasAny, arrayHasAll, has, indexOf, countEqual pour le cas générique où les types des éléments du Array diffèrent. Dans les versions précédentes, les fonctions arrayHasAny et arrayHasAll renvoyaient false, tandis que has, indexOf et countEqual levaient une exception. Ajoute également la prise en charge de Decimal et des types entiers de grande taille dans les fonctions has et similaires. Cela clôt #20272. #23044 (alexey-milovidov).
  • Augmente le seuil du nombre maximal de correspondances dans le résultat de la fonction extractAllGroupsHorizontal. #23036 (Vasily Nemkov).
  • N’exécute pas optimize_skip_unused_shards pour un cluster à un seul nœud. #22999 (Azat Khuzhin).
  • Ajout de la possibilité d’exécuter ClickHouse Keeper (remplacement expérimental compatible avec ZooKeeper) avec SSL. Le paramètre de configuration keeper_server.tcp_port_secure peut être utilisé pour une interaction sécurisée entre le client et le keeper-server. keeper_server.raft_configuration.secure peut être utilisé pour activer la communication interne sécurisée entre les nœuds. #22992 (alesapin).
  • Ajout de la possibilité de vider le buffer uniquement en arrière-plan pour les tables Buffer. #22986 (Azat Khuzhin).
  • Lors de la sélection dans une table MergeTree avec NULL dans la condition WHERE, une exception pouvait être levée dans de rares cas. Cela corrige #20019. #22978 (alexey-milovidov).
  • Correction de la gestion des erreurs dans le client HTTP Poco pour AWS. #22973 (kreuzerkrieg).
  • Respect de max_part_removal_threads pour ReplicatedMergeTree. #22971 (Azat Khuzhin).
  • Correction d’un cas limite peu courant dans les paramètres MergeTree lorsque inactive_parts_to_throw_insert = 0 et inactive_parts_to_delay_insert > 0. #22947 (Azat Khuzhin).
  • dateDiff fonctionne désormais avec des arguments DateTime64 (même pour des valeurs hors de la plage de DateTime) #22931 (Vasily Nemkov).
  • MaterializeMySQL (fonctionnalité expérimentale) : ajout de la possibilité de répliquer des bases de données MySQL contenant des vues sans échouer. Pour cela, les vues sont ignorées. #22760 (Christian).
  • Autorise les ROW POLICY RBAC via le protocole PostgreSQL. Cela corrige #22658. Le protocole PostgreSQL est activé par défaut dans la configuration. #22755 (Kseniia Sumarokova).
  • Ajout d’une métrique pour suivre le temps passé à attendre le verrou de la Buffer layer. #22725 (Azat Khuzhin).
  • Autorise l’utilisation de CTE dans une définition de VIEW. Cela corrige #22491. #22657 (Amos Bird).
  • Efface le reste de l’écran et affiche le curseur dans clickhouse-client si le programme précédent a laissé des artefacts dans le terminal. Cela corrige #16518. #22634 (alexey-milovidov).
  • Rend le comportement de la fonction round cohérent sur les plateformes non x86_64. L’arrondi au pair le plus proche (arrondi bancaire) est utilisé. #22582 (alexey-milovidov).
  • Vérifie correctement la structure des blocks de données envoyés par les Distributed tables. #22325 (Azat Khuzhin).
  • Autorise la publication des erreurs Kafka dans une colonne virtuelle du Kafka engine, contrôlée par le paramètre kafka_handle_error_mode. #21850 (fastio).
  • Ajout des alias simpleJSONExtract/simpleJSONHas à visitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String}. Corrige #21383. #21519 (fastio).
  • Ajout de clickhouse-library-bridge pour les sources de dictionnaire de bibliothèque. Clôt #9502. #21509 (Kseniia Sumarokova).
  • Interdiction de supprimer une colonne si elle est référencée par une vue matérialisée. Clôt #21164. #21303 (flynn).
  • Prise en charge des informations d’authentification inter-serveurs dynamiques (rotation des informations d’authentification sans interruption de service). #14113 (johnskopis).
  • Ajout de la prise en charge du moteur Kafka avec des messages au format Arrow et ArrowStream. #23415 (Chao Ma).
  • Correction du point-virgule manquant dans le message d’exception. L’utilisateur pouvait trouver ce message d’exception désagréable à lire. #23208 (alexey-milovidov).
  • Correction des espaces manquants dans certains messages d’exception concernant le type LowCardinality. #23207 (alexey-milovidov).
  • Certaines valeurs étaient formatées avec un alignement centré dans les cellules de tableau au format Markdown. Ce n’est plus le cas. #23096 (alexey-milovidov).
  • Suppression des détails non essentiels dans les suggestions de clickhouse-client. Cela clôt #22158. #23040 (alexey-milovidov).
  • Correction du calcul du champ bytes_allocated dans system.dictionaries pour les dictionnaires sparse_hashed. #22867 (Azat Khuzhin).
  • Correction du comptage approximatif du nombre total de lignes lors de la lecture inversée depuis MergeTree. #22726 (Azat Khuzhin).
  • Correction du cas où il était possible de configurer un dictionnaire avec une source ClickHouse pointant vers lui-même, ce qui entraînait une boucle infinie. Clôt #14314. #22479 (Maksim Kita).

Correction de bugs

  • Plusieurs correctifs pour les requêtes hedged. Correction d’une erreur Can't initialize pipeline with empty pipe pour les requêtes avec GLOBAL IN/JOIN lorsque le paramètre use_hedged_requests est activé. Corrige #23431. #23805 (Nikolai Kochetov). Correction d’une race condition dans les connexions hedged provoquant un crash. Cela corrige #22161. #22443 (Kruglov Pavel). Correction d’un crash possible lorsqu’un unknown packet était reçu depuis une requête distante (avec async_socket_for_remote activé). Corrige #21167. #23309 (Nikolai Kochetov).
  • Correction du comportement où la désactivation du paramètre input_format_with_names_use_header faisait ignorer toute l’entrée au format CSVWithNames. Cela corrige #22406. #23202 (Nikita Mikhaylov).
  • Correction d’un problème de timeout de connexion du pont JDBC distant. Clôt #9609. #23771 (Maksim Kita, alexey-milovidov).
  • Correction de la logique du chargement initial de complex_key_hashed si update_field est spécifié. Clôt #23800. #23824 (Maksim Kita).
  • Correction d’un crash lorsque PREWHERE et le filtre de ROW POLICY étaient tous deux appliqués avec un résultat vide. #23763 (Amos Bird).
  • Évite l’erreur possible “Cannot schedule a task” (si une exception s’était produite) lors d’un INSERT dans Distributed. #23744 (Azat Khuzhin).
  • Ajout d’une exception lorsque les valeurs des deux échantillons sont strictement identiques dans la fonction d’agrégation mannWhitneyUTest. Cela corrige #23646. #23654 (Nikita Mikhaylov).
  • Correction d’une défaillance du serveur lorsqu’une insertion de données via HTTP provoquait une exception. Cela corrige #23512. #23643 (Nikita Mikhaylov).
  • Correction d’une mauvaise interprétation de certaines expressions LIKE avec des séquences d’échappement. #23610 (alexey-milovidov).
  • Correction du blocage des commandes de redémarrage / arrêt. Clôt #20214. #23552 (filimonov).
  • Correction du matcher COLUMNS dans le cas de plusieurs JOIN dans une requête SELECT. Clôt #22736. #23501 (Maksim Kita).
  • Correction d’un crash lors de la modification de la valeur par défaut d’une colonne lorsque cette colonne elle-même est utilisée comme paramètre de ReplacingMergeTree. #23483 (hexiaoting).
  • Correction de cas limites dans les fusions verticales avec ReplacingMergeTree. Dans de rares cas, ils pouvaient entraîner des échecs de fusion avec des exceptions comme Incomplete granules are not allowed while blocks are granules size. #23459 (Anton Popov).
  • Correction d’un bug qui empêchait le cast d’un littéral de tableau vide vers un tableau de dimension supérieure à 1, par exemple CAST([] AS Array(Array(String))). Clôt #14476. #23456 (Maksim Kita).
  • Correction d’un bug où la fonction d’agrégation deltaSum produisait un résultat incorrect après la réinitialisation du compteur. #23437 (Russ Frank).
  • Correction de l’erreur Cannot unlink file lors de l’échec de création d’une table ReplicatedMergeTree avec une configuration multidisque. Cela clôt #21755. #23433 (tavplubix).
  • Correction d’une génération incompatible d’expression constante lors du partition pruning basé sur des colonnes virtuelles. Cela corrige https://github.com/ClickHouse/ClickHouse/pull/21401#discussion&#95;r611888913. #23366 (Amos Bird).
  • Correction d’un crash lorsque join&#95;algorithm est défini sur ‘auto’ et qu’un join est effectué avec un Dictionary. Clôt #23002. #23312 (Vladimir).
  • Ne pas assouplir les conditions NOT lors du partition pruning. Cela corrige #23305 et #21539. #23310 (Amos Bird).
  • Correction d’une race condition très rare lors du nettoyage en arrière-plan des anciens blocks. Cela pouvait empêcher la déduplication d’un block s’il était trop proche de la fin de la fenêtre de déduplication. #23301 (tavplubix).
  • Correction d’une race condition (distributed) très rare entre la création et la suppression de tables ReplicatedMergeTree. Cela pouvait provoquer des exceptions comme node doesn't exist lors d’une tentative de création d’une table répliquée. Corrige #21419. #23294 (tavplubix).
  • Correction de la création via DDL d’un Dictionary à clé simple lorsque la primary key n’est pas le premier attribute. Corrige #23236. #23262 (Maksim Kita).
  • Correction de la lecture via ODBC lorsqu’une table contient un grand nombre de noms de colonnes longs. Clôt #8853. #23215 (Kseniia Sumarokova).
  • MaterializeMySQL (fonctionnalité expérimentale) : correction de l’erreur Not found column lors d’une sélection depuis MaterializeMySQL avec une condition sur la colonne clé. Corrige #22432. #23200 (tavplubix).
  • Correction de la gestion des alias lorsqu’une sous-requête était optimisée en constante. Corrige #22924. Corrige #10401. #23191 (Maksim Kita).
  • Le serveur pouvait ne pas démarrer si le paramètre data_type_default_nullable était activé dans le profil default ; c’est désormais corrigé. Corrige #22573. #23185 (tavplubix).
  • Correction d’un crash à l’arrêt dû à un comptage incorrect des connexions en cours. #23154 (Vitaly Baranov).
  • Correction de l’erreur Table .inner_id... doesn't exist lors d’une sélection depuis une vue matérialisée après l’avoir détachée d’une base de données Atomic puis rattachée. #23047 (tavplubix).
  • Correction de l’erreur Cannot find column in ActionsDAG result qui peut se produire si une sous-requête utilise untuple. Corrige #22290. #22991 (Nikolai Kochetov).
  • Correction de l’utilisation de colonnes constantes de type Map avec des valeurs nullables. #22939 (Anton Popov).
  • Correction de formatDateTime() sur DateTime64 et du spécificateur de format “%C” ; correction de toDateTime64() pour les grandes valeurs et une échelle non nulle. #22937 (Vasily Nemkov).
  • Correction d’un crash lors de l’utilisation de mannWhitneyUTest et rankCorr avec des fonctions de fenêtre. Cela corrige #22728. #22876 (Nikita Mikhaylov).
  • LIVE VIEW (fonctionnalité expérimentale) : correction d’un blocage possible lors d’opérations concurrentes DROP/CREATE de TEMPORARY LIVE VIEW dans TemporaryLiveViewCleaner, voir. #22858 (Vitaly Baranov).
  • Correction du pushdown de HAVING lorsque la colonne de filtre est utilisée dans l’agrégation. #22763 (Anton Popov).
  • Correction de blocages possibles dans les requêtes ZooKeeper en cas d’exception OOM. Corrige #22438. #22684 (Nikolai Kochetov).
  • Correction de l’attente des mutations sur plusieurs répliques pour les moteurs de table ReplicatedMergeTree. Auparavant, une requête de mutation/ALTER pouvait se terminer avant que la mutation ne soit réellement exécutée sur les autres répliques. #22669 (alesapin).
  • Correction d’une exception pour Log avec des types imbriqués sans colonnes dans la clause SELECT. #22654 (Azat Khuzhin).
  • Correction de l’attente illimitée pour les requêtes AWS auxiliaires. #22594 (Vladimir Chebotarev).
  • Correction d’un crash lorsque le client ferme la connexion trop tôt #22579. #22591 (nvartolomei).
  • Type de données Map (fonctionnalité expérimentale) : correction d’un formatage incorrect de la fonction map dans les requêtes distribuées. #22588 (foolchi).
  • Correction de la désérialisation d’une chaîne vide sans saut de ligne à la fin du format TSV. Cela clôt #20244. Contournement possible sans mise à jour de version : définir input_format_null_as_default sur zéro. Cette valeur était à zéro dans les anciennes versions. #22527 (alexey-milovidov).
  • Correction d’une conversion erronée d’une colonne de type LowCardinality dans l’algorithme Merge Join. Clôt #22386, clôt #22388. #22510 (Vladimir).
  • Un dépassement de buffer (en lecture) était possible dans l’index de texte intégral tokenbf_v1. Les octets excédentaires ne sont pas utilisés, mais l’opération de lecture peut entraîner un crash dans de rares cas. Cela clôt #19233. #22421 (alexey-milovidov).
  • Ne pas limiter la taille des chunks HTTP. Corrige #21907. #22322 (Ivan).
  • Correction d’un bug entraînant une sous-agrégation des données lorsque optimize_aggregation_in_order est activé et qu’il y a beaucoup de parts dans la table. Améliore légèrement les performances de l’agrégation lorsque optimize_aggregation_in_order est activé. #21889 (Anton Popov).
  • Vérifie si la table function view est utilisée comme colonne. Ceci complète #20350. #21465 (Amos Bird).
  • Correction de l’erreur “colonne inconnue” pour les tables avec le moteur Merge dans les requêtes avec JOIN et agrégation. Clôt #18368, clôt #22226. #21370 (Vladimir).
  • Correction des collisions de noms dans l’optimisation de pushdown. Cela provoquait un filtrage WHERE incorrect après FULL JOIN. Clôt #20497. #20622 (Vladimir).
  • Correction d’un bug très rare où un insert avec quorum avec quorum_parallel=1 n’est pas réellement “quorum” en raison de la déduplication. #18215 (filimonov - signalé, alesapin - corrigé).

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

  • Exécution des tests stateless en parallèle dans la CI. #22300 (alesapin).
  • Simplification des paquets Debian. Cela corrige #21698. #22976 (alexey-milovidov).
  • Ajout de la prise en charge de la compilation de ClickHouse sur Apple M1. #21639 (changvvb).
  • Correction de la compilation de ClickHouse Keeper pour macOS. #22860 (alesapin).
  • Correction de certains tests sur la plateforme AArch64. #22596 (alexey-milovidov).
  • Ajout de l’alignement des fonctions afin d’améliorer potentiellement les performances. #21431 (Danila Kutenin).
  • Ajustement de certains tests pour produire des résultats identiques sur amd64 et aarch64 (qemu). Le résultat dépendait d’un comportement du CPU spécifique à l’implémentation. #22590 (alexey-milovidov).
  • Autorisation du profilage des requêtes uniquement sur x86_64. Voir #15174 et #15638. Cela clôt #15638. #22580 (alexey-milovidov).
  • Autorisation de la compilation avec une version non bundle de xz (lzma) en utilisant l’option CMake USE_INTERNAL_XZ_LIBRARY=OFF. #22571 (Kfir Itzhak).
  • Activation de openldap inclus dans le bundle sur ppc64le #22487 (Kfir Itzhak).
  • Désactivation des bibliothèques incompatibles (généralement spécifiques à la plateforme) sur ppc64le #22475 (Kfir Itzhak).
  • Ajout du test Jepsen dans la CI pour ClickHouse Keeper. #22373 (alesapin).
  • Compilation de jemalloc avec prise en charge du profilage du tas. #22834 (nvartolomei).
  • Évitement d’un UB dans les engines *Log lors de la libération du rwlock, due à une libération depuis un autre thread. #22583 (Azat Khuzhin).
  • Correction d’un UB en libérant le rwlock de TinyLog depuis le même thread. #22560 (Azat Khuzhin).

Version 21.4 de ClickHouse

Version ClickHouse 21.4.1 2021-04-12

Changement rétro-incompatible

  • toStartOfIntervalFunction alignera les intervalles horaires sur minuit (dans les versions précédentes, ils étaient alignés sur le début de l’époque Unix). Par exemple, toStartOfInterval(x, INTERVAL 11 HOUR) divisera chaque journée en trois intervalles : 00:00:00..10:59:59, 11:00:00..21:59:59 et 22:00:00..23:59:59. Ce comportement est plus adapté aux usages pratiques. Cela corrige #9510. #22060 (alexey-milovidov).
  • Age et Precision dans les configurations de rollup Graphite doivent augmenter d’une rétention à l’autre. Cette contrainte est désormais vérifiée, et une configuration incorrecte lève une exception. #21496 (Mikhail f. Shiryaev).
  • Correction de cutToFirstSignificantSubdomainCustom()/firstSignificantSubdomainCustom(), qui renvoyaient un résultat incorrect pour les domaines à 3 niveaux ou plus présents dans la liste personnalisée des domaines de premier niveau. Pour les domaines en entrée correspondant à ces domaines de premier niveau personnalisés, le domaine de troisième niveau était considéré comme le premier domaine significatif. Ce problème est désormais corrigé. Ce changement peut introduire une incompatibilité si la fonction est utilisée, par exemple, dans la clé de sharding. #21946 (Azat Khuzhin).
  • La colonne keys de la table system.dictionaries a été remplacée par les colonnes key.names et key.types. Les colonnes key.names, key.types, attribute.names, attribute.types de la table system.dictionaries ne nécessitent pas que le dictionnaire soit chargé. #21884 (Maksim Kita).
  • Désormais, les répliques qui traitent la commande ALTER TABLE ATTACH PART[ITION] recherchent dans leurs dossiers detached/ avant de récupérer les données depuis d’autres répliques. Comme détail d’implémentation, une nouvelle commande ATTACH_PART est introduite dans le journal répliqué. Les parts sont recherchées et comparées à l’aide de leurs sommes de contrôle. #18978 (Mike Kot). Remarque :
    • Les requêtes ATTACH PART[ITION] peuvent ne pas fonctionner pendant la mise à niveau du cluster.
    • Il n’est pas possible de revenir à une ancienne version de ClickHouse après l’exécution d’une requête ALTER ... ATTACH dans la nouvelle version, car les anciens serveurs ne pourraient pas traiter l’entrée ATTACH_PART dans le journal répliqué.
  • Dans cette version, un élément vide <remote_url_allow_hosts></remote_url_allow_hosts> bloquera tout accès aux hôtes distants, alors que dans les versions précédentes il ne faisait rien. Si vous souhaitez conserver l’ancien comportement et que vous avez un élément remote_url_allow_hosts vide dans le fichier de configuration, supprimez-le. #20058 (Vladimir Chebotarev).

Nouvelle fonctionnalité

  • Extension de la plage de DateTime64 pour prendre en charge les dates de 1925 à 2283. Prise en charge améliorée de DateTime autour de la date zéro (1970-01-01). #9404 (alexey-milovidov, Vasily Nemkov). Toutes les fonctions de date et d’heure ne fonctionnent pas encore sur cette plage de dates étendue.
  • Ajout de la prise en charge de l’authentification Kerberos pour les utilisateurs préconfigurés et les requêtes HTTP (GSS-SPNEGO). #14995 (Denis Glazachev).
  • Ajout du paramètre prefer_column_name_to_alias pour utiliser les noms de colonnes d’origine au lieu des alias. Cela est nécessaire pour mieux respecter les règles d’alias courantes des bases de données. Cela concerne #9715 et #9887. #22044 (Amos Bird).
  • Ajout des fonctions dictGetChildren(dictionary, key), dictGetDescendants(dictionary, key, level). La fonction dictGetChildren renvoie tous les enfants sous la forme d’un tableau d’index. Il s’agit d’une transformation inverse de dictGetHierarchy. La fonction dictGetDescendants renvoie tous les descendants comme si dictGetChildren avait été appliquée récursivement level fois. Une valeur level égale à zéro est équivalente à l’infini. Closes #14656. #22096 (Maksim Kita).
  • Ajout de la source de dictionnaire executable_pool. Close #14528. #21321 (Maksim Kita).
  • Ajout de la fonction de table dictionary. Elle fonctionne de la même manière que le moteur Dictionary. Closes #21560. #21910 (Maksim Kita).
  • Prise en charge du type Nullable pour l’attribut PolygonDictionary. #21890 (Maksim Kita).
  • Les fonctions dictGet, dictHas utilisent le nom de la base de données courante s’il n’est pas spécifié pour les dictionnaires créés avec DDL. Closes #21632. #21859 (Maksim Kita).
  • Ajout de la fonction dictGetOrNull. Elle fonctionne comme dictGet, mais renvoie Null si la clé n’a pas été trouvée dans le dictionnaire. Closes #22375. #22413 (Maksim Kita).
  • Ajout de la mise à jour asynchrone dans les dictionnaires ComplexKeyCache, SSDCache, SSDComplexKeyCache. Ajout de la prise en charge du type Nullable dans les dictionnaires Cache, ComplexKeyCache, SSDCache, SSDComplexKeyCache. Ajout de la prise en charge de la récupération de plusieurs attributs avec les fonctions dictGet, dictGetOrDefault. Fixes #21517. #20595 (Maksim Kita).
  • Prise en charge de la fonction dictHas pour RangeHashedDictionary. Fixes #6680. #19816 (Maksim Kita).
  • Ajoute la fonction timezoneOf, qui renvoie le nom du fuseau horaire des types de données DateTime ou DateTime64. Cela ne résout pas #9959. Corrige les incohérences dans les noms de fonctions : ajoute les alias timezone et timeZone, ainsi que toTimezone et toTimeZone, et timezoneOf et timeZoneOf. #22001 (alexey-milovidov).
  • Ajoute la nouvelle clause optionnelle GRANTEES pour les commandes CREATE/ALTER USER. Elle spécifie les utilisateurs ou rôles autorisés à recevoir des grants de cet utilisateur, à condition que celui-ci dispose également de tous les droits d’accès requis avec l’option grant. Par défaut, GRANTEES ANY est utilisé, ce qui signifie qu’un utilisateur disposant de l’option grant peut accorder des droits à n’importe qui. Syntaxe : CREATE USER ... GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]. #21641 (Vitaly Baranov).
  • Ajoute la nouvelle colonne slowdowns_count à system.clusters. Lors de l’utilisation de requêtes hedged, elle indique combien de fois nous sommes passés à une autre replica parce que celle-ci répondait lentement. Affiche également la valeur réelle de errors_count dans system.clusters. #21480 (Kruglov Pavel).
  • Ajoute la colonne virtuelle _partition_id pour les engines MergeTree*. Permet d’élaguer les partitions par _partition_id. Ajoute la fonction partitionID() pour calculer la chaîne d’identifiant de partition. #21401 (Amos Bird).
  • Ajoute la fonction isIPAddressInRange pour tester si une adresse IPv4 ou IPv6 est contenue dans un préfixe réseau CIDR donné. #21329 (PHO).
  • Ajout de la nouvelle commande SQL ALTER TABLE 'table_name' UNFREEZE [PARTITION 'part_expr'] WITH NAME 'backup_name'. Cette commande est nécessaire pour supprimer correctement les partitions ‘gelées’ de tous les disks. #21142 (Pavel Kovalenko).
  • Prend en charge la conversion implicite du type de clé pour JOIN. #19885 (Vladimir).

Fonctionnalité expérimentale

  • Prise en charge de la frame RANGE OFFSET (pour les window functions) pour les types à virgule flottante. Ajout des window functions lagInFrame/leadInFrame, analogues à lag/lead, mais qui respectent la frame de la window. Elles sont identiques lorsque la frame est between unbounded preceding and unbounded following. Cela résout #5485. #21895 (Alexander Kuzmenkov).
  • Réplication zero-copy pour ReplicatedMergeTree sur stockage S3. #16240 (ianton-ru).
  • Ajout de la possibilité de migrer un S3 disk existant vers le schéma prenant en charge la sauvegarde et la restauration. #22070 (Pavel Kovalenko).

Amélioration des performances

  • Prise en charge du formatage en parallèle dans clickhouse-local et partout ailleurs. #21630 (Nikita Mikhaylov).
  • Prise en charge de l’analyse en parallèle pour les formats CSVWithNames et TSVWithNames. Cela corrige #21085. #21149 (Nikita Mikhaylov).
  • Activation de la lecture via mmap IO pour les plages de fichiers à partir de 64 MiB (paramètre min_bytes_to_use_mmap_io). Cela peut entraîner une amélioration modérée des performances. #22326 (alexey-milovidov).
  • Ajout d’un cache pour les fichiers lus avec le paramètre min_bytes_to_use_mmap_io. Cela améliore significativement les performances (2x ou plus) lorsque la valeur du paramètre est faible, en évitant les appels fréquents à mmap/munmap et les défauts de page qui en résultent. Notez que mmap IO présente des inconvénients majeurs qui le rendent moins fiable en production (par exemple, blocage ou SIGBUS sur des disques défectueux ; utilisation mémoire moins maîtrisable). Néanmoins, il donne de bons résultats dans les benchmarks. #22206 (alexey-milovidov).
  • Évite les copies de données inutiles lors de l’utilisation du codec NONE. Veuillez noter que le codec NONE est globalement peu utile - il est recommandé de toujours utiliser la compression (LZ4 est utilisé par défaut). Contrairement à une idée répandue, désactiver la compression n’améliore pas forcément les performances (l’effet inverse est possible). Le codec NONE est utile dans certains cas : - lorsque les données ne sont pas compressibles ; - pour des benchmarks synthétiques. #22145 (alexey-milovidov).
  • GROUP BY plus rapide avec une faible valeur de max_rows_to_group_by et group_by_overflow_mode='any'. #21856 (Nikolai Kochetov).
  • Optimisation des performances des requêtes du type SELECT ... FINAL ... WHERE. Désormais, dans les requêtes avec FINAL, il est possible de déplacer vers PREWHERE les colonnes appartenant à la clé de tri. #21830 (foolchi).
  • Amélioration des performances grâce au remplacement de memcpy par une autre implémentation. Cela corrige #18583. #21520 (alexey-milovidov).
  • Amélioration des performances de l’agrégation dans l’ordre de la clé de tri (avec le paramètre optimize_aggregation_in_order activé). #19401 (Anton Popov).

Amélioration

  • Ajout d’un pool de connexions pour le moteur de table/base de données PostgreSQL et la source de dictionnaire. Devrait corriger #21444. #21839 (Kseniia Sumarokova).
  • Prise en charge d’un schéma de table non par défaut pour le moteur de stockage/la fonction de table postgres. Clôt #21701. #21711 (Kseniia Sumarokova).
  • Prise en charge de la priorité des répliques pour la source de dictionnaire postgres. #21710 (Kseniia Sumarokova).
  • Introduction d’un nouveau paramètre MergeTree, min_bytes_to_rebalance_partition_over_jbod, qui permet d’attribuer les nouvelles parts aux différents disques d’un volume JBOD de manière équilibrée. #16481 (Amos Bird).
  • Ajout des valeurs Grant, Revoke et System dans la colonne query_kind pour les queries correspondantes dans system.query_log. #21102 (Vasily Nemkov).
  • Permet de personnaliser les timeouts des connexions HTTP utilisées pour la réplication indépendamment des autres timeouts HTTP. #20088 (nvartolomei).
  • Message d’exception amélioré côté client en cas d’exception pendant que le server écrit des blocks. Dans les versions précédentes, le client pouvait recevoir un message trompeur comme Data compressed with different methods. #22427 (alexey-milovidov).
  • Correction de l’error Directory tmp_fetch_XXX already exists, qui pouvait se produire après l’échec de la récupération d’une part. Supprime le répertoire temporaire de fetch s’il existe déjà. Corrige #14197. #22411 (nvartolomei).
  • Correction d’un rapport MSan pour la fonction range avec un argument UInt256 (la prise en charge des grands entiers est Experimental). Cela clôt #22157. #22387 (alexey-milovidov).
  • Ajout de la colonne current_database à la table system.processes. Elle contient la base de données courante de la query. #22365 (Alexander Kuzmenkov).
  • Ajout de fonctionnalités de recherche/navigation dans l’historique insensibles à la casse, ainsi que de déplacement par sous-mots, à clickhouse-client. #22105 (Amos Bird).
  • Si un tuple de NULL, par exemple (NULL, NULL), se trouve à gauche de l’opérateur IN, avec des tuples de valeurs non-NULL à droite, par exemple SELECT (NULL, NULL) IN ((0, 0), (3, 1)), retourne 0 au lieu de lever une exception pour types incompatibles. L’expression peut aussi apparaître en raison de l’optimisation de quelque chose comme SELECT (NULL, NULL) = (8, 0) OR (NULL, NULL) = (3, 2) OR (NULL, NULL) = (0, 0) OR (NULL, NULL) = (3, 1). Cela clôt #22017. #22063 (alexey-milovidov).
  • Mise à jour de la version utilisée de simdjson vers 0.9.1. Cela corrige #21984. #22057 (Vitaly Baranov).
  • Ajout d’alias insensibles à la casse pour les fonctions CONNECTION_ID() et VERSION(). Cela corrige #22028. #22042 (Eugene Klimov).
  • Ajout de l’option strict_increase à la fonction windowFunnel pour ne calculer chaque événement qu’une seule fois (résout #21835). #22025 (Vladimir).
  • Si la clé de partition d’une table MergeTree n’inclut pas de colonnes Date ou DateTime, mais inclut exactement une colonne DateTime64, exposition de ses valeurs dans les colonnes min_time et max_time des tables system.parts et system.parts_columns. Ajout des colonnes min_time et max_time à la table system.parts_columns (il y avait une incohérence avec la table system.parts). Cela clôt #18244. #22011 (alexey-milovidov).
  • Prise en charge du paramètre replication_alter_partitions_sync=1 dans clickhouse-copier pour déplacer des partitions d’une table auxiliaire vers la destination. Réduction des délais d’expiration par défaut. Corrige #21911. #21912 (turbo jason).
  • Affichage du chemin vers le répertoire de données des tables EmbeddedRocksDB dans les tables système. #21903 (tavplubix).
  • Ajout de l’événement de profil HedgedRequestsChangeReplica, avec passage du délai d’expiration de lecture des données de la seconde à la milliseconde. #21886 (Kruglov Pavel).
  • DiskS3 (fonctionnalité expérimentale en cours de développement). Correction d’un bug qui empêchait de déplacer un répertoire si la destination n’était pas vide et qu’un disque de cache était utilisé. #21837 (Pavel Kovalenko).
  • Amélioration du formatage des types de données Array et Map dans l’interface web. #21798 (alexey-milovidov).
  • Mise à jour des clusters uniquement si leur configuration a été modifiée. #21685 (Kruglov Pavel).
  • Propagation des paramètres de requête et de session pour les requêtes DDL distribuées. Définissez distributed_ddl_entry_format_version sur 2 pour l’activer. Ajout du paramètre distributed_ddl_output_mode. Modes pris en charge : none, throw (par défaut), null_status_on_timeout et never_throw. Corrections et améliorations diverses pour le moteur de base de données Replicated. #21535 (tavplubix).
  • Si PODArray était instancié avec une taille d’élément qui n’était ni une fraction ni un multiple de 16, un dépassement de tampon était possible. Aucun bug de ce type n’existe dans les versions actuelles. #21533 (alexey-milovidov).
  • Ajout des colonnes last_error_time/last_error_message/last_error_stacktrace/remote dans system.errors. #21529 (Azat Khuzhin).
  • Ajout des alias simpleJSONExtract/simpleJSONHas pour visitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String}. Corrige #21383. #21519 (fastio).
  • Ajout du paramètre optimize_skip_unused_shards_limit pour limiter le nombre de valeurs de clé de sharding pour optimize_skip_unused_shards. #21512 (Azat Khuzhin).
  • Amélioration de clickhouse-format pour ne pas lever d’exception lorsqu’il y a des espaces en trop ou un commentaire après la dernière requête, et pour lever plus tôt une exception accompagnée d’un message explicite lors du formatage de ASTInsertQuery avec des données. #21311 (flynn).
  • Amélioration de la prise en charge des clés entières dans le type de données Map. #21157 (Anton Popov).
  • MaterializeMySQL : tentative de reconnexion à MySQL si la connexion est perdue. #20961 (Håvard Kvålen).
  • Prise en charge d’un plus grand nombre de cas de réécriture de CROSS JOIN en INNER JOIN. #20392 (Vladimir).
  • Ne crée plus de parts vides lors d’un INSERT lorsque le paramètre optimize_on_insert est activé. Correction de #20304. #20387 (Kruglov Pavel).
  • MaterializeMySQL : ajout d’un index minmax de skipping pour la colonne _version. #20382 (Stig Bakken).
  • Ajout de l’option --backslash à clickhouse-format, qui permet d’ajouter une barre oblique inverse à la fin de chaque ligne de la requête formatée. #21494 (flynn).
  • Désormais, ClickHouse ne lèvera plus d’exception LOGICAL_ERROR lorsqu’on essaie d’appliquer une mutation à une part déjà couverte. Correction de #22013. #22291 (alesapin).

Correction de bugs

  • Supprime le socket de l’epoll avant d’annuler le récepteur de paquets dans HedgedConnections afin d’éviter une possible condition de concurrence. Corrige #22161. #22443 (Kruglov Pavel).
  • Ajoute la comptabilisation mémoire (manquante) dans les procédures d’analyse syntaxique en parallèle. Dans les versions précédentes, un OOM était possible lorsque le jeu de résultats contenait de très gros blocs de données. Cela clôt #22008. #22425 (alexey-milovidov).
  • Corrige une exception pouvant se produire lorsque SELECT a une condition WHERE constante et que la table source a des colonnes dont le nom est un chiffre. #22270 (LiuNeng).
  • Corrige l’annulation de requête avec use_hedged_requests=0 et async_socket_for_remote=1. #22183 (Azat Khuzhin).
  • Corrige une exception non interceptée dans InterserverIOHTTPHandler. #22146 (Azat Khuzhin).
  • Corrige le point d’entrée Docker lorsque http_port n’est pas présent dans la configuration. #22132 (Ewout).
  • Corrige l’erreur Invalid number of rows in Chunk dans JOIN avec TOTALS et arrayJoin. Clôt #19303. #22129 (Vladimir).
  • Corrige le nom du pool de threads d’arrière-plan utilisé pour récupérer les messages de Kafka. Le moteur Kafka avec ce pool de threads défectueux ne consommait pas les messages de la file. #22122 (fastio).
  • Corrige l’attente des requêtes OPTIMIZE et ALTER pour les moteurs de table ReplicatedMergeTree. Désormais, la requête ne restera pas bloquée lorsque la table a été détachée ou redémarrée. #22118 (alesapin).
  • Désactive async_socket_for_remote/use_hedged_requests pour les noyaux Linux bogués. #22109 (Azat Khuzhin).
  • Point d’entrée Docker : évite le chown de . lorsque LOG_PATH est vide. Clôt #22100. #22102 (filimonov).
  • La fonction decrypt ne vérifiait pas la taille minimale des données chiffrées en mode AEAD. Cela clôt #21897. #22064 (alexey-milovidov).
  • Dans de rares cas, une fusion pour CollapsingMergeTree peut créer un granule avec index_granularity + 1 lignes. De ce fait, la vérification interne, ajoutée dans #18928 (affecte 21.2 et 21.3), peut échouer avec l’erreur Incomplete granules are not allowed while blocks are granules size. Cette erreur empêchait la fusion des parties. #21976 (Nikolai Kochetov).
  • Retour de #15454, qui pouvait entraîner une augmentation significative de l’utilisation de la mémoire lors du chargement de dictionnaires externes de type haché. Cela clôt #21935. #21948 (Maksim Kita).
  • Empêche les chevauchements de connexions hedged (erreur Unknown packet 9 from server). #21941 (Azat Khuzhin).
  • Corrige, dans certains cas, la lecture des requêtes HTTP POST avec le type de contenu “multipart/form-data”. #21936 (Ivan).
  • Corrige des résultats ORDER BY incorrects lorsqu’une requête contient des window functions et que l’optimisation de lecture dans l’ordre de la primary key est appliquée. Corrige #21828. #21915 (Alexander Kuzmenkov).
  • Corrige un interblocage lors de la première exécution d’un modèle catboost. Clôt #13832. #21844 (Kruglov Pavel).
  • Corrige un résultat de requête incorrect (et un crash possible) pouvant survenir lorsqu’une condition WHERE ou HAVING est poussée avant GROUP BY. Corrige #21773. #21841 (Nikolai Kochetov).
  • Améliore la gestion des erreurs et la journalisation dans WriteBufferFromS3. #21836 (Pavel Kovalenko).
  • Corrige des crashs possibles dans les aggregate functions avec le combinator Distinct, lors de l’utilisation de la two-level aggregation. Il s’agit d’un correctif complémentaire à #18365. Ne peut être reproduit qu’en environnement de production. #21818 (Amos Bird).
  • Corrige l’index analysis des scalar subquery. Cela corrige #21717, introduit dans #18896. #21766 (Amos Bird).
  • Corrige un bug dans les table engines ReplicatedMerge lorsque la requête ALTER MODIFY COLUMN ne modifie pas le type d’une column Decimal si sa taille (32 bits ou 64 bits) reste inchangée. #21728 (alesapin).
  • Corrige une attente infinie possible lorsque OPTIMIZE et DROP sont exécutés concurremment sur ReplicatedMergeTree. #21716 (Azat Khuzhin).
  • Corrige la fonction arrayElement avec le type Map pour les arguments entiers constants. #21699 (Anton Popov).
  • Corrige un SIGSEGV sur des attributes inexistants de ip_trie avec access_to_key_from_attributes. #21692 (Azat Khuzhin).
  • Le server n’accepte désormais les connections qu’après l’initialisation de DDLWorker et des dictionnaires. #21676 (Azat Khuzhin).
  • Ajout de la conversion de type pour les clés des tables de type Join (cela provoquait auparavant un SIGSEGV). #21646 (Azat Khuzhin).
  • Correction de l’annulation des requêtes distribuées (par exemple, un simple select sur plusieurs shards avec limit, c.-à-d. select * from remote('127.{2,3}', system.numbers) limit 100) avec async_socket_for_remote=1. #21643 (Azat Khuzhin).
  • Correction de fsync_part_directory pour la fusion horizontale. #21642 (Azat Khuzhin).
  • Suppression des colonnes inconnues de la table jointe dans WHERE pour les requêtes vers des moteurs de base de données externes (MySQL, PostgreSQL). ferme #14614, ferme #19288 (dup), ferme #19645 (dup). #21640 (Vladimir).
  • std::terminate était appelé en cas d’erreur lors de l’écriture de données dans S3. #21624 (Vladimir).
  • Correction de l’erreur possible Cannot find column lorsque optimize_skip_unused_shards est activé et qu’aucun shard n’est utilisé. #21579 (Azat Khuzhin).
  • Si une query comporte une condition WHERE constante et que le paramètre optimize_skip_unused_shards est activé, tous les shards peuvent être ignorés et la query peut renvoyer à tort un résultat vide. #21550 (Amos Bird).
  • Correction du fait que la fonction de table clusterAllReplicas renvoyait une valeur _shard_num incorrecte. ferme #21481. #21498 (flynn).
  • Correction du fait que la table S3 conservait d’anciens identifiants après une mise à jour de la configuration. #21457 (Grigory Pervakov).
  • Correction d’une condition de concurrence sur l’objet SSL dans SecureSocket de Poco. #21456 (Nikita Mikhaylov).
  • Correction de l’analyse du format Avro pour Kafka. Corrige #21437. #21438 (Ilya Golshtein).
  • Correction des timeouts de réception et d’envoi, ainsi que de la lecture non bloquante sur le socket sécurisé. #21429 (Kruglov Pavel).
  • Le flag force_drop_table ne fonctionnait pas pour MATERIALIZED VIEW ; c’est corrigé. Corrige #18943. #20626 (tavplubix).
  • Correction des collisions de noms dans PredicateRewriteVisitor. Cela provoquait un filtrage WHERE incorrect après une jointure complète. Ferme #20497. #20622 (Vladimir).

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

  • Ajout de tests Jepsen pour ClickHouse Keeper. #21677 (alesapin).
  • Exécution des tests stateless en parallèle dans la CI. Dépend de #22181. #22300 (alesapin).
  • Activation de la vérification de statut pour l’exécution CI de SQLancer. #22015 (Ilya Yatsishin).
  • Divers préparatifs pour les builds PowerPC : activation d’OpenLDAP embarqué sur ppc64le. #22487 (Kfir Itzhak). Activation de la compilation sur ppc64le avec Clang. #22476 (Kfir Itzhak). Correction de la compilation de Boost sur ppc64le. #22474 (Kfir Itzhak). Correction de l’erreur CMake liée à la variable interne CMAKE_ASM_COMPILE_OBJECT, non définie sur ppc64le. #22469 (Kfir Itzhak). Correction du problème empêchant Fedora/RHEL/CentOS de trouver libclang_rt.builtins sur ppc64le. #22458 (Kfir Itzhak). Activation de la compilation avec jemalloc sur ppc64le. #22447 (Kfir Itzhak). Correction de l’intégration de la config de ClickHouse et du fuseau horaire de cctz sur ppc64le. #22445 (Kfir Itzhak). Correction de la compilation sur ppc64le et utilisation du bon registre de pointeur d’instruction sur ppc64le. #22430 (Kfir Itzhak).
  • Réactivation de la bibliothèque S3 (AWS) sur aarch64. #22484 (Kfir Itzhak).
  • Ajout de tzdata aux conteneurs Docker, car la lecture des formats ORC l’exige. Cela clôt #14156. #22000 (alexey-milovidov).
  • Introduction de 2 arguments pour le Dockerfile de l’image clickhouse-server : deb_location & single_binary_location. #21977 (filimonov).
  • Autorisation de l’utilisation de clang-tidy avec les builds de release en activant les assertions lorsqu’il est utilisé. #21914 (alexey-milovidov).
  • Ajout du nom des binaires llvm-12 à rechercher dans les scripts CMake. Conversions implicites de constantes pour supprimer les avertissements de clang. Mise à jour des sous-modules pour compiler avec CMake 3.19. Suppression des avertissements de récursion dans l’expansion de macro de la bibliothèque readpassphrase. L’option obsolète -fuse-ld a été remplacée par --ld-path pour clang. #21597 (Ilya Yatsishin).
  • Mise à jour de docker/test/testflows/runner/dockerd-entrypoint.sh pour utiliser le proxy Docker Hub de Yandex, car Docker Hub a mis en place des limites de débit très restrictives #21551 (vzakaznikov).
  • Correction de la compilation de la bibliothèque partagée sous macOS. #20184 (nvartolomei).
  • Ajout de l’option ctime à zookeeper-dump-tree. Elle permet d’exporter la date de création du nœud. #21842 (Ilya).

Version 21.3 de ClickHouse (LTS)

Version de ClickHouse v21.3, 2021-03-12

Changement rétro-incompatible

  • Il n’est désormais plus possible de créer des tables MergeTree avec l’ancienne syntaxe et un table TTL, car celui-ci est simplement ignoré. L’Attach des anciennes tables reste possible. #20282 (alesapin).
  • Désormais, tous les noms de fonction insensibles à la casse seront réécrits sous leur forme canonique. Cela est nécessaire pour le routage des requêtes de projection (fonctionnalité à venir). #20174 (Amos Bird).
  • Correction de la création de TTL lorsque son expression est une fonction et qu’elle coïncide avec la clé ORDER BY. Il est désormais possible de définir une agrégation personnalisée pour les colonnes de clé primaire dans TTL avec GROUP BY. Changement non rétrocompatible : pour les colonnes de clé primaire qui ne figurent pas dans GROUP BY et ne sont pas définies explicitement, la fonction any est désormais appliquée à la place de max à l’expiration du TTL. De plus, si vous utilisez TTL avec WHERE ou GROUP BY, vous pouvez voir des exceptions lors des merges pendant un rolling update. #15450 (Anton Popov).

Nouvelle fonctionnalité

  • Ajout des paramètres du moteur File : engine_file_empty_if_not_exists et engine_file_truncate_on_insert. #20620 (M0r64n).
  • Ajout de la fonction d’agrégation deltaSum pour additionner les différences entre lignes consécutives. #20057 (Russ Frank).
  • Nouvelle colonne event_time_microseconds dans la table system.part_log. #20027 (Bharat Nallan).
  • Ajout de la fonction timezoneOffset(datetime), qui renvoie le décalage par rapport à l’UTC en secondes. Cela clôt #issue:19850. #19962 (keenwolf).
  • Ajout du paramètre insert_shard_id pour prendre en charge l’insertion de données dans un shard spécifique depuis une table distribuée. #19961 (flynn).
  • La fonction reinterpretAs a été mise à jour pour prendre en charge les entiers de grande taille. Corrige #19691. #19858 (Maksim Kita).
  • Ajout de la prise en charge des clés client pour le chiffrement côté serveur (l’en-tête x-amz-server-side-encryption-customer-(key/md5)) dans le client S3. Voir ce lien. Clôt #19428. #19748 (Vladimir Chebotarev).
  • Ajout de l’option implicit_key pour la source de dictionnaire executable. Elle permet d’éviter d’afficher la clé pour chaque enregistrement si les enregistrements arrivent dans le même ordre que les clés d’entrée. Implémente #14527. #19677 (Maksim Kita).
  • Ajout des types de quotas query_selects et query_inserts. #19603 (JackyWoo).
  • Ajout de la fonction extractTextFromHTML #19600 (zlx19950903), (alexey-milovidov).
  • Les tables avec le moteur MergeTree* disposent désormais de deux nouveaux paramètres au niveau de la table pour contrôler la concurrence des requêtes. Le paramètre max_concurrent_queries limite le nombre de requêtes exécutées simultanément liées à cette table. Le paramètre min_marks_to_honor_max_concurrent_queries indique d’appliquer le paramètre précédent uniquement si la requête lit au moins ce nombre de marks. #19544 (Amos Bird).
  • Ajout de la fonction file pour lire un fichier du répertoire user_files en tant que String. Elle est différente de la fonction de table file. Cela implémente #issue:18851. #19204 (keenwolf).

Fonctionnalité expérimentale

  • Ajout du moteur de base de données expérimental Replicated. Il réplique les requêtes DDL entre plusieurs hôtes. #16193 (tavplubix).
  • Ajout d’une prise en charge expérimentale des fonctions de fenêtre, activable avec allow_experimental_window_functions = 1. Il s’agit d’une implémentation préliminaire, de qualité alpha, qui ne convient pas à une utilisation en production et évoluera de manière non rétrocompatible dans les prochaines versions. Veuillez consulter la documentation pour obtenir la liste des fonctionnalités prises en charge. #20337 (Alexander Kuzmenkov).
  • Ajout de la possibilité de sauvegarder/restaurer les fichiers de métadonnées de DiskS3. #18377 (Pavel Kovalenko).

Amélioration des performances

  • Requêtes hedgées pour les requêtes distantes. Lorsque le paramètre use_hedged_requests est activé (désactivé par défaut), il permet d’établir plusieurs connexions à différentes répliques pour une requête. Une nouvelle connexion est établie si la ou les connexions existantes à la ou aux répliques n’ont pas pu être établies dans le délai hedged_connection_timeout ou si aucune donnée n’a été reçue dans le délai receive_data_timeout. La requête utilise la première connexion qui envoie un paquet de progression non vide (ou un paquet de données, si allow_changing_replica_until_first_data_packet) ; les autres connexions sont annulées. Les requêtes avec max_parallel_replicas > 1 sont prises en charge. #19291 (Kruglov Pavel). Cela permet de réduire significativement les latences en fin de distribution sur de très grands clusters.
  • Ajout de la prise en charge de PREWHERE (avec activation de l’optimisation correspondante) lorsque des expressions de sécurité au niveau des lignes sont définies pour les tables. #19576 (Denis Glazachev).
  • Le paramètre distributed_aggregation_memory_efficient est activé par défaut. Il réduit l’utilisation de la mémoire et améliore les performances des requêtes distribuées. #20599 (alexey-milovidov).
  • Amélioration des performances de GROUP BY avec plusieurs clés de taille fixe. #20472 (alexey-milovidov).
  • Amélioration des performances des fonctions d’agrégation grâce à un aliasing plus strict. #19946 (alexey-milovidov).
  • Accélération de la lecture depuis les tables Memory dans des cas extrêmes (lorsque la vitesse de lecture est de l’ordre de 50 GB/sec) grâce à la simplification du pipeline et, par conséquent, à une réduction de la contention sur les verrous lors de l’ordonnancement du pipeline. #20468 (alexey-milovidov).
  • Réimplémentation partielle du serveur HTTP afin de réduire le nombre de copies des données entrantes et sortantes. Cela apporte jusqu’à 1,5× d’amélioration des performances lors de l’insertion de longs enregistrements via HTTP. #19516 (Ivan).
  • Ajout du paramètre compress pour les tables Memory. S’il est activé, la table utilisera moins de RAM. Sur certaines machines et certains jeux de données, cela peut aussi accélérer les requêtes SELECT, mais ce n’est pas toujours le cas. Ceci clôt #20093. Remarque : il existe plusieurs raisons pour lesquelles les tables Memory peuvent être plus lentes que MergeTree : (1) absence de compression (2) taille statique des blocs (3) absence d’index et de prewhere… #20168 (alexey-milovidov).
  • Légère amélioration du code d’agrégation. #20978 (alexey-milovidov).
  • Réintroduction des spécialisations intDiv/modulo pour de meilleures performances. Cela corrige #21293 . La régression a été introduite dans https://github.com/ClickHouse/ClickHouse/pull/18145 . #21307 (Amos Bird).
  • Ne plus trop regrouper les blocs sur INSERT SELECT lors d’une insertion dans une table Memory. Dans les versions précédentes, une représentation inefficace des données était créée dans la table Memory après INSERT SELECT. Ceci clôt #13052. #20169 (alexey-milovidov).
  • Correction d’au moins un cas où l’analyseur DataType pouvait avoir une complexité exponentielle (détecté par le fuzzer). Ceci clôt #20096. #20132 (alexey-milovidov).
  • Paralléliser SELECT avec FINAL pour une part unique de niveau > 0 lorsque le paramètre do_not_merge_across_partitions_select_final est défini sur 1. #19375 (Kruglov Pavel).
  • Ne remplir que les colonnes demandées lors des requêtes sur system.parts et system.parts_columns. Corrige #19570. #21035 (Anmol Arora).
  • Effectuer des optimisations algébriques sur les expressions arithmétiques dans la fonction d’agrégation avg. Corrige #20092. #20183 (flynn).

Amélioration

  • Méthodes de compression insensibles à la casse pour les fonctions de table. Correction également de la méthode de compression LZMA, qui était vérifiée en majuscules. #21416 (Vladimir Chebotarev).
  • Ajout de deux paramètres pour retarder l’insertion ou renvoyer une erreur lorsqu’il y a trop de parts inactives. Cela est utile lorsque le serveur ne parvient pas à nettoyer les parts assez rapidement. #20178 (Amos Bird).
  • Meilleure compatibilité avec les clients MySQL : 1. mysql jdbc 2. mycli. #21367 (Amos Bird).
  • Interdiction de supprimer une colonne si elle est référencée par une vue matérialisée. Closes #21164. #21303 (flynn).
  • La source de dictionnaire MySQL va désormais réessayer en cas d’échecs de connexion inattendus (Lost connection to MySQL server during query), qui se produisent parfois sur des connexions SSL/TLS. #21237 (Alexander Kazakov).
  • Amélioration de l’ergonomie : parsing plus cohérent de DateTime64 : reconnaissance du cas où un Unix timestamp avec une résolution inférieure à la seconde est spécifié sous forme d’entier mis à l’échelle (comme 1111111111222 au lieu de 1111111111.222). Cela clôt #13194. #21053 (alexey-milovidov).
  • Effectuer uniquement la fusion de blocks triés sur l’initiateur avec distributed_group_by_no_merge. #20882 (Azat Khuzhin).
  • Lors du chargement de la config de la source MySQL, ClickHouse va désormais mélanger aléatoirement la liste des répliques ayant la même priorité afin de garantir la logique round-robin de sélection de l’endpoint MySQL. Cela clôt #20629. #20632 (Alexander Kazakov).
  • La fonction ‘reinterpretAs(x, Type)’ a été renommée en ‘reinterpret(x, Type)’. #20611 (Maksim Kita).
  • Prise en charge de vhost pour le moteur RabbitMQ #20576. #20596 (Kseniia Sumarokova).
  • Sérialisation améliorée pour les types de données combinant Arrays et Tuples. Meilleure correspondance des types de données enum avec le type enum Protobuf. Correction de la sérialisation du type de données Map. Les valeurs omises sont désormais définies par défaut. #20506 (Vitaly Baranov).
  • Correction d’une condition de concurrence entre l’exécution des tâches de distributed DDL et le nettoyage de la DDL queue. Désormais, une tâche DDL ne peut pas être supprimée de ZooKeeper s’il y a des workers actifs. Corrige #20016. #20448 (tavplubix).
  • Correction du fonctionnement de FQDN et des autres fonctions liées au DNS dans les images alpine. #20336 (filimonov).
  • Ne pas autoriser le constant folding précoce des fonctions explicitement interdites. #20303 (Azat Khuzhin).
  • La conversion implicite d’un entier vers le type Decimal pouvait réussir même si la valeur entière ne tenait pas dans le type Decimal. Désormais, elle renvoie ARGUMENT_OUT_OF_BOUND. #20232 (tavplubix).
  • SYSTEM FLUSH DISTRIBUTED sans verrouillage. #20215 (Azat Khuzhin).
  • Normalisation de count(constant) et sum(1) en count(). Cela est nécessaire pour le routage des requêtes de projection. #20175 (Amos Bird).
  • Prise en charge de tous les types d’entiers natifs dans les fonctions bitmap. #20171 (Amos Bird).
  • Mise à jour de CacheDictionary, ComplexCacheDictionary, SSDCacheDictionary et SSDComplexKeyDictionary pour utiliser LRUHashMap comme index sous-jacent. #20164 (Maksim Kita).
  • Le paramètre access_management peut désormais être configuré au démarrage via CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT. La valeur par défaut reste désactivée (0), comme auparavant. #20139 (Marquitos).
  • Correction de toDateTime64(toDate()/toDateTime()) pour DateTime64 - mise en œuvre du bornage de DateTime64 pour l’aligner sur le comportement de DateTime. #20131 (Azat Khuzhin).
  • Améliorations des quotas : SHOW TABLES est désormais compté comme une seule query dans les calculs de quota, et non plus deux. Les querys SYSTEM consomment désormais du quota. Correction du calcul de la fin de l’intervalle dans la consommation du quota. #20106 (Vitaly Baranov).
  • Prise en charge des expressions path IN (set) pour la table system.zookeeper. #20105 (小路).
  • Affichage des détails complets des tables MaterializeMySQL dans system.tables. #20051 (Stig Bakken).
  • Correction d’une data race dans un dictionnaire exécutable, possible uniquement en cas de mauvaise utilisation (lorsque le script renvoie des données en ignorant son entrée). #20045 (alexey-milovidov).
  • La valeur de l’option MYSQL_OPT_RECONNECT peut désormais être contrôlée par le paramètre “opt_reconnect” dans la section config de la replica MySQL. #19998 (Alexander Kazakov).
  • Si l’utilisateur appelle la fonction JSONExtract en demandant le type Float32, une conversion imprécise vers le type de résultat est désormais autorisée. Par exemple, le nombre 0.1 en JSON est en double précision et n’est pas représentable en Float32, mais l’utilisateur souhaite tout de même pouvoir l’obtenir. Dans les versions précédentes, la fonction renvoyait 0 pour le type non-Nullable et NULL pour le type Nullable afin d’indiquer que la conversion était imprécise. Cette logique était correcte à 100 %, mais elle surprenait les utilisateurs et suscitait des questions. Cela clôt #13962. #19960 (alexey-milovidov).
  • Ajout de la conversion de la structure du block pour INSERT dans des tables Distributed lorsqu’elle ne correspond pas. #19947 (Azat Khuzhin).
  • Amélioration de la table system.distributed_ddl_queue. Initialiser MaxDDLEntryID avec la dernière valeur après redémarrage. Avant cette PR, MaxDDLEntryID restait à zéro jusqu’au traitement d’une nouvelle DDLTask. #19924 (Amos Bird).
  • Afficher les tables MaterializeMySQL dans system.parts. #19770 (Stig Bakken).
  • Ajouter une directive de configuration distincte pour le profil Buffer. #19721 (Azat Khuzhin).
  • Déplacer dans la clause WHERE les conditions non liées à JOIN. #18720. #19685 (hexiaoting).
  • Ajouter la possibilité de limiter INSERT dans Distributed en fonction du volume d’octets en attente d’envoi asynchrone (les paramètres bytes_to_delay_insert/max_delay_to_insert et bytes_to_throw_insert pour le moteur Distributed ont été ajoutés). #19673 (Azat Khuzhin).
  • Corriger quelques rares cas où des erreurs d’écriture pouvaient être ignorées dans les destructeurs. #19451 (Azat Khuzhin).
  • Afficher les frames inline dans les traces de pile en cas d’erreurs fatales. #19317 (Ivan).

Correction de bugs

  • Correction des reconnexions redondantes à ZooKeeper et de la possibilité d’avoir deux sessions actives pour un même serveur ClickHouse. Les deux problèmes ont été introduits dans #14678. #21264 (alesapin).
  • Correction de l’erreur Bad cast from type ... to DB::ColumnLowCardinality lors de l’insertion dans une table comportant une colonne LowCardinality depuis le format Values. Corrige #21140 #21357 (Nikolai Kochetov).
  • Correction d’un interblocage dans les mutations ALTER DELETE pour les moteurs de table MergeTree non replicated lorsque le prédicat contient la table elle-même. Corrige #20558. #21477 (alesapin).
  • Correction d’un SIGSEGV pour les requêtes distribuées en cas de défaillance. #21434 (Azat Khuzhin).
  • Désormais, les requêtes ALTER MODIFY COLUMN prendront correctement en compte les modifications de clé de partitionnement, des index de saut, des TTL, etc. Corrige #13675. #21334 (alesapin).
  • Correction d’un bug avec join_use_nulls et la jointure de TOTALS à partir de sous-requêtes. Cela clôt #19362 et #21137. #21248 (vdimir).
  • Correction d’un crash dans EXPLAIN pour une requête avec UNION. Corrige #20876, #21170. #21246 (flynn).
  • Désormais, les mutations ne sont autorisées que pour les moteurs de table qui les prennent en charge (famille MergeTree, Memory, MaterializedView). Les autres moteurs renverront une erreur plus claire. Corrige #21168. #21183 (alesapin).
  • Corrige #21112. Correction d’un bug pouvant provoquer des doublons avec une requête d’insertion (si l’un des callbacks arrivait un peu trop tard). #21138 (Kseniia Sumarokova).
  • Correction de la prise en compte effective de input_format_null_as_default lorsque les types sont Nullable. Corrige #21116. #21121 (Amos Bird).
  • Correction d’un bug lié au cast de Tuple vers Map. Clôt #21029. #21120 (hexiaoting).
  • Correction d’une fuite de métadonnées lors du drop d’un Replicated*MergeTree avec un cluster ZooKeeper personnalisé (non default). #21119 (fastio).
  • Correction d’un problème d’incompatibilité de type lors de l’utilisation de clés LowCardinality dans joinGet. Cela corrige #21114. #21117 (Amos Bird).
  • Correction : les valeurs default_replica_path et default_replica_name sont inutiles avec le moteur Replicated(*)MergeTree lorsque celui-ci doit spécifier d’autres paramètres. #21060 (mxzlxy).
  • Un accès mémoire hors limites était possible lors du formatage d’une valeur de type DateTime64 spécialement conçue pour être hors plage. Cela clôt #20494. Cela clôt #20543. #21023 (alexey-milovidov).
  • Blocage des insertions parallèles dans StorageJoin. #21009 (vdimir).
  • Correction du comportement lorsque ALTER MODIFY COLUMN créait une mutation vouée à échouer. #21007 (Anton Popov).
  • Clôt #9969. Correction d’une erreur de compression HTTP Brotli qui se produisait avec de grands volumes de données, une structure légèrement complexe et le format de sortie JSON. Mise à jour de Brotli vers la dernière version afin d’inclure le correctif pour « rare access to uninitialized data in ring-buffer ». #20991 (Kseniia Sumarokova).
  • Correction de ‘Empty task was returned from async task queue’ lors de l’annulation d’une requête. #20881 (Azat Khuzhin).
  • La requête USE database; ne fonctionnait pas lors de l’utilisation du client MySQL 5.7 pour se connecter au serveur ClickHouse ; c’est corrigé. Corrige #18926. #20878 (tavplubix).
  • Correction de l’utilisation du combinator -Distinct avec le combinator -State dans les aggregate functions. #20866 (Anton Popov).
  • Correction d’une subquery avec union distinct et clause LIMIT. Clôt #20597. #20610 (flynn).
  • Correction du comportement incohérent du Dictionary dans le cas de requêtes recherchant des keys absentes dans le Dictionary. #20578 (Nikita Mikhaylov).
  • Correction du nombre de threads pour les scalar subqueries et les subqueries utilisées pour l’index (après #19007, un seul thread était toujours utilisé). Corrige #20457, #20512. #20550 (Nikolai Kochetov).
  • Correction d’un crash pouvant se produire si un paquet inconnu était reçu depuis une requête remove (introduit dans #17868). #20547 (Azat Khuzhin).
  • Ajout de vérifications appropriées lors de l’analyse des noms de répertoires pour async INSERT (corrige SIGSEGV). #20498 (Azat Khuzhin).
  • Correction : la fonction transform ne fonctionne pas correctement avec des clés en virgule flottante. Clôt #20460. #20479 (flynn).
  • Correction d’une boucle infinie lors de la propagation des alias WITH vers les sous-requêtes. Corrige #20388. #20476 (Amos Bird).
  • Correction d’un arrêt anormal du serveur lorsque le client HTTP se déconnecte. #20464 (Azat Khuzhin).
  • Correction de LOGICAL_ERROR avec join_use_nulls=1 lorsque JOIN contient une constante issue de SELECT. #20461 (Azat Khuzhin).
  • Vérifie si la fonction de table view est utilisée dans la liste d’expressions et génère une erreur dans ce cas. Corrige #20342. #20350 (Amos Bird).
  • Évite un déréférencement invalide dans le dictionnaire RANGE_HASHED(). #20345 (Azat Khuzhin).
  • Correction d’un déréférencement nul avec join_use_nulls=1. #20344 (Azat Khuzhin).
  • Correction d’un résultat incorrect pour les opérations binaires entre deux nombres Decimal constants d’échelles différentes. Corrige #20283. #20339 (Maksim Kita).
  • Correction de tentatives répétées trop fréquentes pour les tâches d’arrière-plan ayant échoué dans la famille de moteurs de table ReplicatedMergeTree. Cela pouvait entraîner une journalisation trop verbeuse et une charge CPU accrue. Corrige #20203. #20335 (alesapin).
  • Restriction de la colonne de version aux opérations DROP ou RENAME pour les moteurs de table *CollapsingMergeTree et ReplacingMergeTree. #20300 (alesapin).
  • Correction du comportement dans le cas où, avec un JSON corrompu, nous tentions de lire le fichier entier en mémoire, ce qui provoquait une exception de l’allocateur. Corrige #19719. #20286 (Nikita Mikhaylov).
  • Correction d’une exception lors d’une fusion verticale pour la famille de moteurs de table MergeTree qui n’autorise pas les fusions verticales. Corrige #20259. #20279 (alesapin).
  • Correction d’un plantage rare du serveur lors du rechargement de la config pendant l’arrêt. Corrige #19689. #20224 (alesapin).
  • Correction des CTE lors de leur utilisation dans INSERT SELECT. Corrige #20187, corrige #20195. #20211 (Amos Bird).
  • Corrige #19314. #20156 (Ivan).
  • Corrige la fonction toMinute pour gérer correctement les fuseaux horaires spéciaux. #20149 (keenwolf).
  • Corrige un plantage du serveur après une query utilisant la fonction if, lorsque le résultat des branches then/else est de type Tuple. Le type Tuple doit contenir un Array ou un autre type complexe. Corrige #18356. #20133 (alesapin).
  • Le table engine MongoDB n’établit désormais une connexion qu’au moment de lire des données. ATTACH TABLE n’essaiera plus de se connecter. #20110 (Vitaly Baranov).
  • Correction d’un bug dans StorageJoin. #20079 (vdimir).
  • Corrige le cas où, lors du calcul du modulo de la division d’un nombre négatif par un petit diviseur, le type de données résultant n’était pas assez grand pour contenir le résultat négatif. Ceci clôt #20052. #20067 (alexey-milovidov).
  • MaterializeMySQL : corrige la réplication pour les statements qui mettent à jour plusieurs tables. #20066 (Håvard Kvålen).
  • Empêche “Connection refused” dans Docker pendant l’exécution du script d’initialisation. #20012 (filimonov).
  • EmbeddedRocksDB est un stockage experimental. Corrige le problème lié à l’absence de type checking approprié. Code simplifié. Ceci clôt #19967. #19972 (alexey-milovidov).
  • Corrige un segfault dans la fonction fromModifiedJulianDay lorsque le type de l’argument est Nullable(T) pour tous les types intégraux autres que Int32. #19959 (PHO).
  • Correction d’un crash de l’index BloomFilter. Corrige #19757. #19884 (Maksim Kita).
  • Un interblocage était possible si system.text_log est activé. Ceci corrige #19874. #19875 (alexey-milovidov).
  • Corrige le démarrage du serveur avec des tables ayant des expressions par défaut contenant dictGet(). Permet d’obtenir le return type de dictGet() sans charger le Dictionary. #19805 (Vitaly Baranov).
  • Corrige une exception d’abandon de clickhouse-client lors de l’exécution d’un simple select. #19790 (taiyang-li).
  • Corrige un bug où le déplacement de morceaux vers la destination table pouvait échouer lors du lancement de plusieurs clickhouse-copiers. #19743 (madianjun).
  • Le thread d’arrière-plan qui exécute les requêtes ON CLUSTER pouvait rester bloqué en attendant qu’une table répliquée supprimée effectue une opération. Ce problème est corrigé. #19684 (yiguolei).

Amélioration de la compilation, des tests et du packaging

  • Permet de compiler ClickHouse avec AVX-2 activé globalement. Cela apporte de légers gains de performance sur les CPU modernes. Non recommandé en production et ne sera pas pris en charge comme build officiel pour le moment. #20180 (alexey-milovidov).
  • Corrige certains problèmes détectés par Coverity. Voir #19964. #20010 (alexey-milovidov).
  • Permet le démarrage avec un binaire modifié sous gdb. Dans la version précédente, si vous définissiez un point d’arrêt dans gdb avant le démarrage, le serveur refusait de démarrer en raison d’un échec du contrôle d’intégrité. #21258 (alexey-milovidov).
  • Ajoute un test pour différentes méthodes de compression dans Kafka. #21111 (filimonov).
  • Corrige un conflit de ports dans le test test_storage_kerberized_hdfs. #19974 (Ilya Yatsishin).
  • Affiche stdout et stderr dans le log lorsque le démarrage de docker échoue dans les tests d’intégration. Avant cette PR, le message d’erreur était très court dans ce cas et n’aidait pas à analyser les problèmes. #20631 (Vitaly Baranov).

Version de ClickHouse 21.2

Version de ClickHouse v21.2.2.8-stable, 2021-02-07

changement incompatible avec les versions précédentes

  • Les fonctions bit à bit (bitAnd, bitOr, etc.) sont interdites avec des arguments à virgule flottante. Vous devez désormais effectuer une conversion explicite en entier. #19853 (Azat Khuzhin).
  • Interdiction de lcm/gcd pour les flottants. #19532 (Azat Khuzhin).
  • Corrige le suivi de la mémoire pour OPTIMIZE TABLE/les fusions ; prend en compte les limites de mémoire des requêtes et l’échantillonnage pour OPTIMIZE TABLE/les fusions. #18772 (Azat Khuzhin).
  • Interdit l’utilisation d’une colonne à virgule flottante comme clé de partitionnement, voir #18421. #18464 (hexiaoting).
  • Les parenthèses superflues dans les définitions de type ne sont plus prises en charge, par exemple : Array((UInt8)).

Nouvelle fonctionnalité

  • Ajout du moteur de table PostgreSQL (à la fois pour select/insert, avec prise en charge des tableaux multidimensionnels), également disponible comme fonction de table. Ajout de la source de dictionnaire PostgreSQL. Ajout du moteur de base de données PostgreSQL. #18554 (Kseniia Sumarokova).
  • Le type de données Nested prend désormais en charge des niveaux d’imbrication arbitraires. Introduction des sous-colonnes de types complexes, telles que size0 dans Array, null dans Nullable et les noms des éléments de Tuple, qui peuvent être lues sans lire la colonne entière. #17310 (Anton Popov).
  • Ajout de la prise en charge de Nullable pour FlatDictionary, HashedDictionary, ComplexKeyHashedDictionary, DirectDictionary, ComplexKeyDirectDictionary, RangeHashedDictionary. #18236 (Maksim Kita).
  • Ajout d’une nouvelle table appelée system.distributed_ddl_queue, qui affiche les requêtes dans la file d’attente du worker DDL. #17656 (Bharat Nallan).
  • Ajout de la prise en charge du mappage des noms de groupes LDAP, et plus généralement des valeurs d’attribut, vers des rôles locaux pour les utilisateurs issus des répertoires d’utilisateurs LDAP. #17211 (Denis Glazachev).
  • Prise en charge de insert dans la fonction de table cluster et, pour les deux fonctions de table remote et cluster, prise en charge de la distribution des données entre les nœuds en spécifiant une clé de sharding. Ferme #16752. #18264 (flynn).
  • Ajout de la fonction decodeXMLComponent pour décoder les caractères XML. Exemple : SELECT decodeXMLComponent('Hello,&quot;world&quot;!') #17659. #18542 (nauta).
  • Ajout des fonctions parseDateTimeBestEffortUSOrZero, parseDateTimeBestEffortUSOrNull. #19712 (Maksim Kita).
  • Ajout de la fonction mathématique sign. #19527 (flynn).
  • Ajout d’informations sur les fonctionnalités utilisées (fonctions, moteurs de table, etc.) dans system.query_log. #18495. #19371 (Kseniia Sumarokova).
  • La fonction formatDateTime prend en charge le modificateur %Q pour formater la date en trimestre. #19224 (Jianmei Zhang).
  • Prise en charge du raccourci clavier MetaKey+Enter dans l’interface play. #19012 (sundyli).
  • Ajout de trois fonctions pour le type de données map : 1. mapContains(map, key) pour vérifier si map.keys inclut la clé fournie en second paramètre. 2. mapKeys(map) renvoie toutes les clés au format Array 3. mapValues(map) renvoie toutes les valeurs au format Array. #18788 (hexiaoting).
  • Ajout du paramètre log_comment, en lien avec #18494. #18549 (Zijie Lu).
  • Ajout de la prise en charge d’un argument de type tuple pour les fonctions argMin et argMax. #17359 (Ildus Kurbangaliev).
  • Prise en charge de la syntaxe EXISTS VIEW. #18552 (Du Chuan).
  • Ajout de la syntaxe SELECT ALL. Clôt l’issue #18706. #18723 (flynn).

Amélioration des performances

  • Suppression plus rapide des parts grâce à une réduction du nombre d’appels système stat. Cela rétablit une optimisation qui existait auparavant. Interface IDisk plus sûre. Cela clôt #19065. #19086 (alexey-milovidov).
  • Les alias déclarés dans l’instruction WITH sont correctement utilisés dans l’analyse des index. Les requêtes du type WITH column AS alias SELECT ... WHERE alias = ... peuvent désormais utiliser un index. #18896 (Amos Bird).
  • Ajout de optimize_alias_column_prediction (activé par défaut), qui permet de : - prendre en compte les colonnes avec alias dans WHERE lors du partition pruning et du skipping des données à l’aide d’index secondaires ; - prendre en compte les colonnes avec alias dans WHERE pour les requêtes de comptage triviales avec optimize_trivial_count ; - prendre en compte les colonnes avec alias dans GROUP BY/ORDER BY pour optimize_aggregation_in_order/optimize_read_in_order. #16995 (sundyli).
  • Accélération de la fonction d’agrégation sum. L’amélioration n’est visible que sur des benchmarks synthétiques et reste peu utile en pratique. #19216 (alexey-milovidov).
  • Mise à jour de libc++ et utilisation d’une autre ABI pour améliorer les performances. #18914 (Danila Kutenin).
  • Réécriture des fonctions sumIf() et sum(if()) en fonction countIf() lorsqu’elles sont logiquement équivalentes. #17041 (flynn).
  • Utilisation d’un pool de connexions pour les connexions S3, contrôlé par le paramètre s3_max_connections. #13405 (Vladimir Chebotarev).
  • Ajout de la prise en charge de l’option long de zstd pour améliorer la compression des colonnes de type chaîne et économiser de l’espace. #17184 (ygrek).
  • Légère amélioration de la latence du serveur grâce à la suppression de l’accès à la configuration à chaque connexion. #19863 (alexey-milovidov).
  • Réduction de la contention sur les verrous pour plusieurs couches de l’engine Buffer. #19379 (Azat Khuzhin).
  • Prise en charge de la division de l’étape Filter du query plan en une paire Expression + Filter. Avec l’optimisation de fusion Expression + Expression (#17458), cela peut retarder l’exécution de certaines expressions après l’étape Filter. #19253 (Nikolai Kochetov).

Amélioration

  • SELECT count() FROM table peut désormais être exécuté s’il est possible de sélectionner au moins une colonne quelconque de la table. Cette PR corrige #10639. #18233 (Vitaly Baranov).
  • Le jeu de caractères est désormais défini sur utf8mb4 lors des interactions avec des serveurs MySQL distants. Corrige #19795. #19800 (alexey-milovidov).
  • La table function S3 prend désormais en charge le mode de compression auto (détection automatique). Cela clôt #18754. #19793 (Vladimir Chebotarev).
  • La fonction formatReadableTimeDelta affiche désormais correctement les arguments infinis. Dans les versions précédentes, une conversion implicite vers une valeur entière propre à l’implémentation avait lieu. #19791 (alexey-milovidov).
  • La table function S3 utilisera la Region globale si la région ne peut pas être déterminée avec précision. Cela clôt #10998. #19750 (Vladimir Chebotarev).
  • Dans les requêtes distribuées, si le paramètre async_socket_for_remote est activé, un dépassement de pile pouvait se produire, au moins dans une configuration de build de débogage, lorsqu’un type de données très profondément imbriqué est utilisé dans une table (par ex. Array(Array(Array(...more...)))). Cela corrige #19108. Ce changement introduit une légère incompatibilité ascendante : les parenthèses superflues dans les définitions de type ne sont plus prises en charge, par exemple : Array((UInt8)). #19736 (alexey-milovidov).
  • Ajout d’un pool distinct pour les brokers de messages (RabbitMQ et Kafka). #19722 (Azat Khuzhin).
  • Correction d’un rare dépassement de la limite max_number_of_merges_with_ttl_in_pool (davantage de merges avec TTL pouvaient être attribués) pour les MergeTree non répliqués. #19708 (alesapin).
  • Dictionary : amélioration du message d’erreur lors de l’analyse des attributs. #19678 (Maksim Kita).
  • Ajout d’une option permettant de désactiver la validation des checksums à la lecture. Ne doit jamais être utilisée en production. N’attendez aucun bénéfice de sa désactivation. Elle ne doit servir qu’à des expériences et des benchmarks. Ce paramètre s’applique uniquement aux tables de la famille MergeTree. Les checksums sont toujours validés pour les autres table engines et lors de la réception de données sur le réseau. D’après mes observations, il n’y a aucune différence de performance, ou elle est inférieure à 0,5 %. #19588 (alexey-milovidov).
  • Prise en charge d’un résultat constant dans la fonction multiIf. #19533 (Maksim Kita).
  • Prise en charge des fonctions length/empty/notEmpty pour le type de données Map, qui renvoient le nombre de clés dans Map. #19530 (taiyang-li).
  • Ajout de l’option --reconnect à clickhouse-benchmark. Lorsque cette option est spécifiée, une reconnexion est effectuée avant chaque requête. Cela est nécessaire pour les tests. #19872 (alexey-milovidov).
  • Prise en charge du nouvel emplacement du fichier .debug. Cela corrige #19348. #19520 (Amos Bird).
  • La fonction toIPv6 parse les adresses IPv4. #19518 (Bharat Nallan).
  • Ajout du champ http_referer à system.query_log, system.processes, etc. Cela résout #19389. #19390 (alexey-milovidov).
  • Compatibilité MySQL améliorée grâce à la prise en charge d’un plus grand nombre de fonctions insensibles à la casse et à l’ajout d’aliases. #19387 (Daniil Kondratyev).
  • Ajout de métriques pour les types de parts MergeTree (Wide/Compact/InMemory). #19381 (Azat Khuzhin).
  • Autorise l’exécution de docker avec un uid arbitraire. #19374 (filimonov).
  • Correction de l’alignement incorrect des valeurs du type de données IPv4 dans les formats Pretty. Elles étaient alignées à droite au lieu de l’être à gauche. Cela résout #19184. #19339 (alexey-milovidov).
  • Autorise la modification de max_server_memory_usage sans redémarrage. Cela résout #18154. #19186 (alexey-milovidov).
  • L’Exception levée lorsque la fonction bar est appelée avec certains arguments NaN peut être légèrement trompeuse dans les versions précédentes. Cela corrige #19088. #19107 (alexey-milovidov).
  • Définition explicite de l’uid / gid de l’utilisateur et du groupe clickhouse sur des valeurs fixes (101) dans les images clickhouse-server. #19096 (filimonov).
  • Correction de l’erreur PeekableReadBuffer: Memory limit exceed lors de l’insert de données contenant de très longues chaînes. Corrige #18690. #18979 (tavplubix).
  • Image Docker : plusieurs améliorations apportées à l’entrypoint de clickhouse-server. #18954 (filimonov).
  • Ajout de normalizeQueryKeepNames et normalizedQueryHashKeepNames pour normaliser les queries sans masquer les noms longs par ?. Cela facilite l’analyse des query logs complexes. #18910 (Amos Bird).
  • Vérification du checksum par block du batch distribué côté expéditeur avant l’envoi (sans relire le fichier deux fois : les checksums sont vérifiés pendant la lecture), ce qui évite le blocage de l’INSERT côté receiver (en cas de fichier .bin tronqué côté expéditeur). Évite également de lire deux fois les fichiers .bin pour les INSERT par batch (c’était nécessaire pour calculer le nombre de rows/octet afin de tenir compte du squashing ; désormais, ces informations sont incluses dans le header, et la rétrocompatibilité est préservée). #18853 (Azat Khuzhin).
  • Corrige des problèmes avec les RIGHT et FULL JOIN de tables contenant des états de fonctions d’agrégation. Dans les versions précédentes, une exception liée à la méthode cloneResized était levée. #18818 (templarzq).
  • Ajout de paramètres d’endpoint S3 basés sur des préfixes. #18812 (Vladimir Chebotarev).
  • Ajout de la prise en charge des types d’argument [UInt8, UInt16, UInt32, UInt64] pour les fonctions bitmapTransform, bitmapSubsetInRange, bitmapSubsetLimit et bitmapContains. Cela clôt #18713. #18791 (sundyli).
  • Autorise l’ajout d’un alias supplémentaire aux CTE (Common Table Expressions). Propage la CSE (Common Subexpressions Elimination) aux sous-requêtes du même niveau lorsque enable_global_with_statement = 1. Cela corrige #17378. Cela corrige https://github.com/ClickHouse/ClickHouse/pull/16575#issuecomment-753416235. #18684 (Amos Bird).
  • Mise à jour de librdkafka vers la version v1.6.0-RC2. Corrige #18668. #18671 (filimonov).
  • En cas d’exception inattendue, redémarre automatiquement le thread d’arrière-plan chargé d’exécuter les requêtes DDL distribuées. Corrige #17991. #18285 (徐炘).
  • Mise à jour du SDK AWS C++ afin d’utiliser des régions globales dans S3. #17870 (Vladimir Chebotarev).
  • Ajout de la prise en charge de la clause WITH ... [AND] [PERIODIC] REFRESH [interval_in_sec] lors de la création de tables LIVE VIEW. #14822 (vzakaznikov).
  • Restreint les requêtes MODIFY TTL sur les tables MergeTree créées avec l’ancienne syntaxe. Auparavant, la requête aboutissait, mais n’avait en réalité aucun effet. #19064 (Anton Popov).

Correction de bugs

  • Corrige l’analyse des index pour les fonctions binaires avec argument constant, qui entraînait des résultats de requête erronés. Cela corrige #18364. #18373 (Amos Bird).
  • Corrige le démarrage du serveur en présence de tables avec des expressions par défaut contenant dictGet(). Permet d’obtenir le type de retour de dictGet() sans charger le dictionnaire. #19805 (Vitaly Baranov).
  • Corrige un crash du serveur après une requête utilisant la fonction if dont le résultat des branches then/else est de type Tuple. Le type Tuple doit contenir Array ou un autre type complexe. Corrige #18356. #20133 (alesapin).
  • MaterializeMySQL (fonctionnalité expérimentale) : corrige la réplication pour les instructions qui mettent à jour plusieurs tables. #20066 (Håvard Kvålen).
  • Empêche l’erreur “Connection refused” dans Docker pendant l’exécution du script d’initialisation. #20012 (filimonov).
  • EmbeddedRocksDB est un moteur de stockage expérimental. Corrige le problème lié à l’absence d’une vérification correcte des types. Code simplifié. Cela clôt #19967. #19972 (alexey-milovidov).
  • Corrige un segfault dans la fonction fromModifiedJulianDay lorsque le type de l’argument est Nullable(T) pour tout type entier autre que Int32. #19959 (PHO).
  • La fonction greatCircleAngle renvoyait des résultats inexacts dans les versions précédentes. Cela clôt #19769. #19789 (alexey-milovidov).
  • Corrige un bug rare où certaines opérations sur des tables répliquées (comme une mutation) ne peuvent pas traiter certaines parts après une corruption de données. Corrige #19593. #19702 (alesapin).
  • Le thread d’arrière-plan qui exécute les requêtes ON CLUSTER pouvait se bloquer en attendant qu’une table répliquée supprimée termine une opération. C’est corrigé. #19684 (yiguolei).
  • Corrige une mauvaise désérialisation de la description des colonnes. Cela empêchait d’exécuter un INSERT dans une table avec une colonne nommée \. #19479 (alexey-milovidov).
  • Marque le batch distribué comme défectueux en cas de data block vide dans l’un des fichiers. #19449 (Azat Khuzhin).
  • Corrige un bug très rare qui pouvait bloquer une mutation après DROP/DETACH/REPLACE/MOVE PARTITION. Il avait été partiellement corrigé par #15537 dans la plupart des cas. #19443 (tavplubix).
  • Corrige une erreur possible Extremes transform was already added to pipeline. Corrige #14100. #19430 (Nikolai Kochetov).
  • Correction de la valeur par défaut dans les types de JOIN avec une valeur par défaut non nulle (par ex. certains Enums). Clôt #18197. #19360 (vdimir).
  • Ne pas marquer le fichier de marques pour l’envoi distribué comme défectueux à la réception d’un EOF. #19290 (Azat Khuzhin).
  • Correction d’une fuite de descripteur de fichier de pipe pour async_socket_for_remote. #19153 (Azat Khuzhin).
  • Correction d’une lecture infinie depuis un fichier au format ORC (introduite dans #10580). Corrige #19095. #19134 (Nikolai Kochetov).
  • Correction d’un problème dans le writer de données MergeTree pouvant entraîner des marks d’une taille supérieure à celle de la granularité fixe. Corrige #18913. #19123 (alesapin).
  • Correction d’un bug au démarrage lorsque ClickHouse n’était pas capable de lire le codec de compression depuis LowCardinality(Nullable(...)) et levait l’exception Attempt to read after EOF. Corrige #18340. #19101 (alesapin).
  • Simplification de l’implémentation de tupleHammingDistance. Prise en charge des tuples de n’importe quelle longueur, à condition qu’elle soit identique. Corrige #19029. #19084 (Nikolai Kochetov).
  • S’assurer que groupUniqArray renvoie le type correct pour un argument de type Enum. Cela clôt #17875. #19019 (alexey-milovidov).
  • Correction de l’erreur possible Expected single dictionary argument for function lors de l’utilisation de la fonction ignore avec un argument LowCardinality. Corrige #14275. #19016 (Nikolai Kochetov).
  • Correction de l’insertion d’une colonne LowCardinality dans une table avec le moteur TinyLog. Corrige #18629. #19010 (Nikolai Kochetov).
  • Correction d’un problème mineur dans JOIN : JOIN tente de matérialiser des colonnes constantes, alors que notre code les attend ailleurs. #18982 (Nikita Mikhaylov).
  • Désactivation de optimize_move_functions_out_of_any, car l’optimisation n’est pas toujours correcte. Cela clôt #18051. Cela clôt #18973. #18981 (alexey-milovidov).
  • Corrige une exception possible QueryPipeline stream: different number of columns causée par la fusion des étapes Expression du query plan. Corrige #18190. #18980 (Nikolai Kochetov).
  • Corrige un interblocage très rare à l’arrêt. #18977 (tavplubix).
  • Corrige de rares plantages lorsque le server n’a plus de mémoire disponible. #18976 (tavplubix).
  • Corrige un comportement incorrect lorsque la query ALTER TABLE ... DROP PART 'part_name' supprime tous les blocs de déduplication de l’ensemble de la partition. Corrige #18874. #18969 (alesapin).
  • Corrige le problème #18894. Ajoute une vérification pour éviter une exception lorsqu’un alias de column long (de type ‘table.column’, généralement généré automatiquement par des outils BI comme Looker) est identique à un nom de table long. #18968 (Daniel Qin).
  • Corrige l’erreur Task was not found in task queue (possible uniquement pour les queries distantes, avec async_socket_for_remote = 1). #18964 (Nikolai Kochetov).
  • Corrige un bug où une mutation contenant du texte échappé (comme ALTER ... UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1')) était sérialisée incorrectement. Corrige #18878. #18944 (alesapin).
  • ATTACH PARTITION réinitialisera les mutations. #18804. #18935 (fastio).
  • Corrige un problème avec bitmapOrCardinality qui pouvait entraîner un déréférencement de pointeur nul. Cela clôt #18911. #18912 (sundyli).
  • Corrige l’erreur Attempt to read after eof lors d’une tentative de CAST de NULL depuis Nullable(String) vers Nullable(Decimal(P, S)). Désormais, la fonction CAST renvoie NULL lorsqu’elle ne peut pas analyser une valeur décimale à partir d’une chaîne nullable. Corrige #7690. #18718 (Winter Zhang).
  • Corrige un problème de conversion de type de données pour le engine MySQL. #18124 (bo zeng).
  • Corrige une exception d’abandon de clickhouse-client lors de l’exécution d’un simple select. #19790 (taiyang-li).

Amélioration de la compilation, des tests et du packaging

  • Exécution de SQLancer (fuzzer SQL logique) dans la CI. #19006 (Ilya Yatsishin).
  • Query Fuzzer soumettra les nouveaux tests à un fuzzing plus approfondi. Cela clôt #18916. #19185 (alexey-milovidov).
  • Intégration de Big List of Naughty Strings pour améliorer le fuzzing. #19480 (alexey-milovidov).
  • Ajout de tests d’intégration exécutés avec MSan. #18974 (alesapin).
  • Correction d’erreurs MemorySanitizer dans cyrus-sasl et musl. #19821 (Ilya Yatsishin).
  • La vérification d’un nombre insuffisant d’arguments dans la fonction positionCaseInsensitiveUTF8 a déclenché AddressSanitizer. #19720 (alexey-milovidov).
  • Suppression de --project-directory pour docker-compose dans le test d’intégration. Correction du formatage des logs du conteneur Docker. #19706 (Ilya Yatsishin).
  • Simplification de la génération de macros.xml pour les tests d’intégration. Suppression des logs excessifs de dicttoxml. Le projet dicttoxml n’est plus actif depuis plus de 5 ans. #19697 (Ilya Yatsishin).
  • Possibilité d’activer ou de désactiver explicitement le watchdog via la variable d’environnement CLICKHOUSE_WATCHDOG_ENABLE. Par défaut, il est activé si le serveur n’est pas connecté à un terminal. #19522 (alexey-milovidov).
  • Possibilité de compiler ClickHouse avec la prise en charge de Kafka sur arm64. #19369 (filimonov).
  • Possibilité de compiler librdkafka sans SSL. #19337 (filimonov).
  • Restauration de l’entrée Kafka dans les builds FreeBSD. #18924 (Alexandre Snarskii).
  • Correction d’un déréférencement potentiel de nullptr dans la fonction de table VALUES. #19357 (alexey-milovidov).
  • Élimination des signalements UBSan dans la fonction arrayElement, substring et arraySum. Corrige #19305. Corrige #19287. Cela clôt #19336. #19347 (alexey-milovidov).

Version de ClickHouse 21.1

version de ClickHouse v21.1.3.32-stable, 2021-02-03

Correction de bugs

  • Correction d’un crash de l’index BloomFilter. Corrige #19757. #19884 (Maksim Kita).
  • Correction d’un crash lors du pushdown de prédicats dans une sous-requête UNION DISTINCT. Corrige #19855. #19861 (Amos Bird).
  • Correction du filtrage sur un UInt8 supérieur à 127. #19799 (Anton Popov).
  • Dans les versions précédentes, des arguments inhabituels pour la fonction arrayEnumerateUniq pouvaient provoquer un crash ou une boucle infinie. Cela clôt #19787. #19788 (alexey-milovidov).
  • Correction d’un dépassement de pile lors de l’utilisation d’une comparaison précise entre un type arithmétique et un type String. #19773 (tavplubix).
  • Correction d’un crash lorsque le nom d’une colonne Nested était utilisé dans WHERE ou PREWHERE. Corrige #19755. #19763 (Nikolai Kochetov).
  • Correction d’une erreur de segmentation dans la fonction bitmapAndnot. Corrige #19668. #19713 (Maksim Kita).
  • Certaines fonctions utilisant de grands entiers peuvent provoquer un segfault. Les grands entiers sont une fonctionnalité expérimentale. Cela clôt #19667. #19672 (alexey-milovidov).
  • Correction d’un résultat incorrect de la fonction neighbor pour l’argument LowCardinality. Corrige #10333. #19617 (Nikolai Kochetov).
  • Correction d’un use-after-free de CompressedWriteBuffer dans Connection après une déconnexion. #19599 (Azat Khuzhin).
  • La requête DROP/DETACH TABLE table ON CLUSTER cluster SYNC pouvait se bloquer ; c’est corrigé. Corrige #19568. #19572 (tavplubix).
  • Correction de l’expression id dans une requête CREATE DICTIONARY. #19571 (Maksim Kita).
  • Correction d’un SIGSEGV avec merge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read=0/UINT64_MAX. #19528 (Azat Khuzhin).
  • Un dépassement de tampon (lors d’une lecture en mémoire) était possible si la fonction addMonth était appelée avec des arguments spécialement conçus. Cela corrige #19441. Cela corrige #19413. #19472 (alexey-milovidov).
  • Une lecture de mémoire non initialisée était possible dans les fonctions de chiffrement/déchiffrement si une chaîne vide était passée comme IV. Cela clôt #19391. #19397 (alexey-milovidov).
  • Correction d’un possible dépassement de tampon dans la bibliothèque Uber H3. Voir https://github.com/uber/h3/issues/392. Cela clôt #19219. #19383 (alexey-milovidov).
  • Correction de la colonne system.parts _state (LOGICAL_ERROR lors d’une requête sur cette colonne, en raison d’un ordre incorrect). #19346 (Azat Khuzhin).
  • Correction d’un possible résultat erroné ou d’un segfault lors de l’agrégation lorsqu’une vue matérialisée et sa table cible ont une structure différente. Corrige #18063. #19322 (tavplubix).
  • Correction de l’erreur Cannot convert column now64() because it is constant but values of constants are different in source and result. Suite de #7156. #19316 (Nikolai Kochetov).
  • Correction d’un bug où des requêtes ALTER et DROP concurrentes pouvaient se bloquer pendant le traitement d’une table ReplicatedMergeTree. #19237 (alesapin).
  • Correction de l’erreur There is no checkpoint lors de l’insertion de données via l’interface HTTP en utilisant le format Template ou CustomSeparated. Corrige #19021. #19072 (tavplubix).
  • Désactivation du constant folding pour les sous-requêtes à l’étape d’analyse, lorsque le résultat ne peut pas être calculé. #18446 (Azat Khuzhin).
  • Une mutation pouvait rester bloquée en attendant une part inexistante après MOVE ou REPLACE PARTITION ou, dans de rares cas, après DETACH ou DROP PARTITION. C’est corrigé. #15537 (tavplubix).

Version de ClickHouse v21.1.2.15-stable 2021-01-18

Changement incompatible avec les versions précédentes

  • Le paramètre input_format_null_as_default est activé par défaut. #17525 (alexey-milovidov).
  • Vérifie les contraintes des paramètres de profil issus de la config. Le serveur ne démarrera pas si users.xml contient des paramètres qui ne respectent pas les contraintes correspondantes. #18486 (tavplubix).
  • Restreint ALTER MODIFY SETTING afin d’empêcher la modification des paramètres de stockage qui affectent les data parts (write_final_mark et enable_mixed_granularity_parts). #18306 (Amos Bird).
  • Définit insert_quorum_parallel à 1 par défaut. Il est nettement plus pratique à utiliser que les quorum inserts « séquentiels ». Mais si vous dépendez de la cohérence séquentielle, vous devez remettre ce paramètre à zéro. #17567 (alexey-milovidov).
  • Supprime la fonction sumburConsistentHash. Cela clôt #18120. #18656 (alexey-milovidov).
  • Suppression des fonctions d’agrégation timeSeriesGroupSum, timeSeriesGroupRateSum, parce qu’un de mes amis a dit qu’elles n’avaient jamais fonctionné. Cela corrige #16869. Si vous avez réussi à utiliser ces fonctions, envoyez un e-mail à feedback@clickhouse.com. #17423 (alexey-milovidov).
  • Interdit toUnixTimestamp(Date()) (auparavant, cela renvoyait simplement la représentation UInt16 de Date). #17376 (Azat Khuzhin).
  • Autorise l’utilisation des types entiers étendus (Int128, Int256, UInt256) dans les fonctions avg et avgWeighted. Autorise également l’utilisation de types différents (entier, décimal, virgule flottante) pour la valeur et le poids dans la fonction avgWeighted. Il s’agit d’un changement incompatible avec les versions précédentes : désormais, les fonctions avg et avgWeighted renvoient toujours Float64 (comme indiqué dans la documentation). Avant ce changement, le return type des arguments Decimal était aussi Decimal. #15419 (Mike).
  • L’expression toUUID(N) ne fonctionne plus. Remplacez-la par toUUID('00000000-0000-0000-0000-000000000000'). Ce changement est motivé par les résultats peu intuitifs de toUUID(N) lorsque N est différent de zéro.
  • Les certificats SSL avec un « key usage » incorrect sont rejetés. Dans les versions précédentes, ils fonctionnaient. Voir #19262.
  • Les références incl vers le fichier de substitutions (/etc/metrika.xml) ont été supprimées de la config par défaut (<remote_servers>, <zookeeper>, <macros>, <compression>, <networks>). Si vous utilisiez le fichier de substitutions et que vous vous appuyiez sur ces références implicites, vous devez les rétablir manuellement et explicitement en ajoutant les sections correspondantes avec les attributs incl="..." avant la mise à jour. Voir #18740 (alexey-milovidov).

Nouvelle fonctionnalité

  • Prise en charge du protocole gRPC dans ClickHouse. #15111 (Vitaly Baranov).
  • Prise en charge de plusieurs clusters ZooKeeper. #17070 (fastio).
  • Ajout des requêtes REPLACE TABLE et CREATE OR REPLACE TABLE. #18521 (tavplubix).
  • Implémentation de UNION DISTINCT et traitement de la clause UNION simple comme UNION DISTINCT par défaut. Ajout d’un paramètre union_default_mode qui permet de le traiter comme UNION ALL ou d’exiger une spécification explicite du mode. #16338 (flynn).
  • Ajout de la fonction accurateCastOrNull. Cela corrige #10290. Ajout de conversions de types dans les expressions x IN (subquery). Cela corrige #10266. #16724 (Maksim Kita).
  • IP Dictionary prend directement en charge les types IPv4 / IPv6. #17571 (vdimir).
  • IP Dictionary prend en charge la récupération par clé. Résout #18241. #18480 (vdimir).
  • Ajout de la prise en charge de la compression/décompression *.zst pour l’import et l’export de données. Cela permet d’utiliser *.zst dans la fonction file() et Content-encoding: zstd dans le client HTTP. Cela corrige #16791 . #17144 (Abi Palagashvili).
  • Ajout des fonctions d’agrégation mannWitneyUTest, studentTTest et welchTTest. Légère refactorisation de rankCorr. #16883 (Nikita Mikhaylov).
  • Ajout des fonctions countMatches/countMatchesCaseInsensitive. #17459 (Azat Khuzhin).
  • Implémentation de countSubstrings()/countSubstringsCaseInsensitive()/countSubstringsCaseInsensitiveUTF8() (compte le nombre d’occurrences de sous-chaînes). #17347 (Azat Khuzhin).
  • Ajout d’informations sur les bases de données, tables et colonnes utilisées dans system.query_log. Ajout des champs query_kind et normalized_query_hash. #17726 (Amos Bird).
  • Ajout d’un paramètre optimize_on_insert. Lorsqu’il est activé, il applique au bloc de données INSERTé la même transformation que si une fusion avait été effectuée sur ce bloc (par ex. Replacing, Collapsing, Aggregating…). Ce paramètre est activé par défaut. Cela peut influencer le comportement des vues matérialisées et de MaterializeMySQL (voir la description détaillée). Cela corrige #10683. #16954 (Kruglov Pavel).
  • Authentification Kerberos pour HDFS. #16621 (Ilya Golshtein).
  • Prise en charge de l’instruction SHOW SETTINGS pour afficher les paramètres dans system.settings. L’instruction SHOW CHANGED SETTINGS et la clause LIKE/ILIKE sont également prises en charge. #18056 (Jianmei Zhang).
  • La fonction position prend désormais en charge la syntaxe POSITION(needle IN haystack) pour assurer la compatibilité SQL. Cela clôt #18701. … #18779 (Jianmei Zhang).
  • Un nouveau paramètre de stockage, max_partitions_to_read, est désormais disponible pour les tables de la famille MergeTree. Il limite le nombre maximal de partitions accessibles dans une requête. Un paramètre utilisateur, force_max_partition_limit, a également été ajouté pour appliquer cette contrainte. #18712 (Amos Bird).
  • Ajout de la colonne query_id à system.part_log pour les parties insérées. Clôt #10097. #18644 (flynn).
  • Autorise CREATE TABLE AS SELECT avec spécification des colonnes. Exemple : CREATE TABLE t1 (x String) ENGINE = Memory AS SELECT 1;. #18060 (Maksim Kita).
  • Ajout des fonctions d’agrégation arrayMin, arrayMax, arrayAvg. #18032 (Maksim Kita).
  • Implémentation de la requête ATTACH TABLE name FROM 'path/to/data/' (col1 Type1, .... Elle crée une nouvelle table avec la structure fournie et y rattache les données de table depuis le répertoire indiqué dans user_files. #17903 (tavplubix).
  • Ajout de la prise en charge des mutations pour StorageMemory. Cela clôt #9117. #15127 (flynn).
  • Prise en charge de la syntaxe EXISTS DATABASE name. #18458 (Du Chuan).
  • Prise en charge des fonctions intégrées isIPv4String && isIPv6String, comme dans MySQL. #18349 (Du Chuan).
  • Ajout d’un nouveau paramètre, insert_distributed_one_random_shard = 1, pour autoriser l’insertion dans une table distribuée à plusieurs shards sans clé de distribution. #18294 (Amos Bird).
  • Ajout des paramètres min_compress_block_size et max_compress_block_size à MergeTreeSettings, qui ont une priorité supérieure à celle des paramètres globaux et prennent effet lorsqu’ils sont définis. Clôt 13890. #17867 (flynn).
  • Ajout de la prise en charge des bitmaps roaring 64 bits. #17858 (Andy Yang).
  • Extension de la syntaxe OPTIMIZE ... DEDUPLICATE pour autoriser une liste explicite (ou implicite avec astérisque/transformateurs de colonnes) des colonnes à vérifier pour la déduplication. … #17846 (Vasily Nemkov).
  • Ajout des fonctions toModifiedJulianDay, fromModifiedJulianDay, toModifiedJulianDayOrNull et fromModifiedJulianDayOrNull. Ces fonctions convertissent une date du calendrier grégorien proleptique en nombre de jours juliens modifiés, et inversement. #17750 (PHO).
  • Ajout de la possibilité d’utiliser une liste TLD personnalisée : fonctions firstSignificantSubdomainCustom et cutToFirstSignificantSubdomainCustom. #17748 (Azat Khuzhin).
  • Ajout de la prise en charge du protocole PROXYv1 pour encapsuler l’interface TCP native. Permet d’utiliser l’adresse IP transmise par le proxy comme clé de quota (pour l’adresse PROXYv1 comme pour X-Forwarded-For de l’interface HTTP). C’est utile lorsque vous donnez accès à ClickHouse uniquement via un proxy de confiance (par ex. CloudFlare), tout en souhaitant comptabiliser les ressources utilisateur selon leur adresse IP d’origine. Cela corrige #17268. #17707 (alexey-milovidov).
  • Désormais, clickhouse-client permet d’ouvrir EDITOR pour modifier les commandes. Alt-Shift-E. #17665 (Amos Bird).
  • Ajout de la fonction encodeXMLComponent pour échapper les caractères afin d’insérer une chaîne dans un nœud de texte XML ou un attribut. #17659 (nauta).
  • Introduction de la syntaxe DETACH TABLE/VIEW ... PERMANENTLY, afin qu’après redémarrage la table ne réapparaisse pas automatiquement (uniquement sur demande explicite). La table peut toujours être rattachée à l’aide de la syntaxe courte ATTACH TABLE. Implémente #5555. Corrige #13850. #17642 (filimonov).
  • Ajout de métriques asynchrones sur le nombre total de lignes, d’octets et de parts dans les tables MergeTree. Cela corrige #11714. #17639 (flynn).
  • Ajout des paramètres limit et offset pour la pagination hors SQL : #16176 Ils sont utiles pour créer des API. Ces deux paramètres affecteront une requête SELECT comme s’ils y étaient ajoutés ainsi : select * from (your_original_select_query) t limit xxx offset xxx;. #17633 (hexiaoting).
  • Ajout d’un nouveau combinator d’agrégation : -SimpleState, pour construire des types SimpleAggregateFunction via une requête. C’est utile pour définir une MaterializedView du moteur AggregatingMergeTree, et profitera également aux projections. #16853 (Amos Bird).
  • Ajout du paramètre queries-file pour clickhouse-client et clickhouse-local. #15930 (Maksim Kita).
  • Ajout du paramètre query pour clickhouse-benchmark. #17832 (Maksim Kita).
  • EXPLAIN AST prend désormais en charge des requêtes autres que SELECT. #18136 (taiyang-li).

Fonctionnalité expérimentale

  • Ajout de fonctions de calcul de minHash et simHash pour les n-grammes de texte et les shingles. Elles sont destinées à la recherche de quasi-doublons. Les fonctions bitHammingDistance et tupleHammingDistance ont également été ajoutées. #7649 (flynn).
  • Ajout d’un nouveau type de données Map. Voir #1841. La première version de Map ne prend en charge que le type String pour les clés et les valeurs. #15806 (hexiaoting).
  • Implémentation d’un analyseur SQL alternatif basé sur le runtime ANTLR4 et généré à partir d’une grammaire EBNF. #11298 (Ivan).

Amélioration des performances

  • Nouvelle implémentation du Dictionary IP avec une consommation mémoire réduite, de meilleures performances dans certains cas et des corrections de bugs. #16804 (vdimir).
  • Formatage parallèle pour l’export de données. #11617 (Nikita Mikhaylov).
  • Intégration LDAP : ajout du paramètre verification_cooldown à la configuration de connexion au serveur LDAP pour permettre la mise en cache des tentatives de “bind” réussies pendant une durée configurable. #15988 (Denis Glazachev).
  • Ajout de l’option --no-system-table à clickhouse-local pour l’exécuter sans tables système. Cela évite l’initialisation de DateLUT, qui peut prendre un temps notable (des dizaines de millisecondes) au démarrage. #18899 (alexey-milovidov).
  • Remplacement de PODArray par PODArrayWithStackMemory dans AggregateFunctionWindowFunnelData pour améliorer les performances de la fonction windowFunnel. #18817 (flynn).
  • N’envoie plus de blocs vides aux shards lors d’un INSERT synchrone dans une table Distributed. Cela résout #14571. #18775 (alexey-milovidov).
  • Lecture optimisée pour StorageMemory. #18052 (Maksim Kita).
  • Utilisation de l’algorithme Dragonbox pour la conversion de float en String au lieu de ryu. Cela améliore significativement les performances de cette conversion. #17831 (Maksim Kita).
  • Accélération de l’implémentation de IPv6CIDRToRange. #17569 (vdimir).
  • Ajout du paramètre remerge_sort_lowered_memory_bytes_ratio (si l’utilisation de la mémoire après remerge n’est pas réduite selon ce ratio, remerge sera désactivé). #17539 (Azat Khuzhin).
  • Amélioration des performances d’AggregatingMergeTree avec SimpleAggregateFunction(String) dans la clé primaire. #17109 (Azat Khuzhin).
  • Le combinator -If est maintenant dévirtualisé, et count est correctement vectorisé. Voir cette PR. #17043 (Amos Bird).
  • Correction des performances de lecture depuis des tables Merge sur un très grand nombre de tables MergeTree. Résout #7748. #16988 (Anton Popov).
  • Amélioration des performances de la fonction repeat. #16937 (satanson).
  • Légère amélioration des performances de l’analyse des float. #16809 (Maksim Kita).
  • Ajout de la possibilité d’ignorer les partitions fusionnées pour OPTIMIZE TABLE ... FINAL. #15939 (Kruglov Pavel).
  • Intégration de fast_float de Daniel Lemire pour analyser les nombres à virgule flottante. #16787 (Maksim Kita). Cette fonctionnalité n’est pas activée, car ses performances restent inférieures à celles de l’analyseur de nombres à virgule flottante approximatif de ClickHouse.
  • Correction de max_distributed_connections (affecte prefer_localhost_replica = 1 et max_threads != max_distributed_connections). #17848 (Azat Khuzhin).
  • Choix adaptatif entre un envoi en une seule part et un envoi en plusieurs parts lors de l’envoi de données vers S3. L’envoi en une seule part est contrôlé par un nouveau paramètre max_single_part_upload_size. #17934 (Pavel Kovalenko).
  • Prise en charge des tâches asynchrones dans PipelineExecutor. Prise en charge initiale des sockets asynchrones pour les requêtes distantes. #17868 (Nikolai Kochetov).
  • Possibilité d’utiliser l’optimisation optimize_move_to_prewhere avec des parts compactes lorsque la taille des colonnes est inconnue. #17330 (Anton Popov).

Amélioration

  • Évite les interblocages lors de l’exécution d’un INSERT SELECT dans la même table avec les moteurs de table TinyLog ou Log. Cela clôt #6802. Cela clôt #18691. Cela clôt #16812. Cela clôt #14570. #15260 (alexey-milovidov).
  • Prise en charge de la syntaxe SHOW CREATE VIEW name, comme dans MySQL. #18095 (Du Chuan).
  • Toutes les requêtes de type Decimal * Float ou inversement sont autorisées, y compris les requêtes d’agrégation (par ex. SELECT sum(decimal_field * 1.1) ou SELECT dec_col * float_col) ; le type de résultat est Float32 ou Float64. #18145 (Mike).
  • Amélioration de la web UI minimale : ajout de l’historique ; ajout de la prise en charge du partage ; prévention des race conditions entre différentes requêtes ; ajout d’indicateurs de requête en cours et prête ; ajout d’une favicon ; détection de Ctrl+Enter si la zone de texte n’a pas le focus. #17293 #17770 (alexey-milovidov).
  • clickhouse-server n’envoyait pas de requête close au serveur ZooKeeper. #16837 (alesapin).
  • Évite l’arrêt anormal du serveur en cas de limites mémoire trop faibles (max_memory_usage = 1 / max_untracked_memory = 1). #17453 (Azat Khuzhin).
  • Corrige le résultat non déterministe de la fonction windowFunnel lorsque différents événements ont le même horodatage. #18884 (Fuwang Hu).
  • Docker : définit explicitement l’uid / gid de l’utilisateur et du groupe clickhouse sur des valeurs fixes (101) dans les Docker images de clickhouse-server. #19096 (filimonov).
  • INSERT asynchrones dans les tables Distributed : deux nouveaux settings (par analogie avec la famille MergeTree) ont été ajoutés : - fsync_after_insert - Effectue un fsync pour chaque élément inséré. Cela réduira les performances des inserts. - fsync_directories - Effectue un fsync pour le répertoire temporaire (utilisé uniquement pour les INSERT asynchrones) après toutes les opérations (écritures, renommages, etc.). #18864 (Azat Khuzhin).
  • La commande SYSTEM KILL fonctionne désormais dans Docker. Cela clôt #18847. #18848 (alexey-milovidov).
  • Développe les macros dans le path zk lors de l’exécution de FETCH PARTITION. #18839 (fastio).
  • Applique ALTER TABLE <replicated_table> ON CLUSTER MODIFY SETTING ... à toutes les répliques, car nous ne répliquons pas ce type de commandes ALTER. #18789 (Amos Bird).
  • Autoriser le transformateur de colonnes EXCEPT à accepter une chaîne comme motif d’expression régulière. Cela corrige #18685 . #18699 (Amos Bird).
  • Correction de SimpleAggregateFunction dans SummingMergeTree. Désormais, il fonctionne comme AggregateFunction. Dans les versions précédentes, les valeurs étaient additionnées quelle que soit la fonction d’agrégation. Cela corrige #18564 . #8052. #18637 (Amos Bird). Autre correction de l’utilisation de SimpleAggregateFunction dans SummingMergeTree. Cela corrige #18676 . #18677 (Amos Bird).
  • Correction d’une erreur d’assertion dans l’allocator lorsque le dernier argument de la fonction bar est NaN. Désormais, une exception ClickHouse standard est levée. Cela corrige #17876. #18520 (Nikita Mikhaylov).
  • Correction d’un problème d’ergonomie : absence de retour à la ligne après le message d’exception dans certains outils. #18444 (alexey-milovidov).
  • Ajout de la possibilité de modifier le type des colonnes de clé primaire et de clé de partition de LowCardinality(Type) en Type et inversement. Ajout également de la possibilité de modifier le type d’une colonne de clé primaire de EnumX en IntX. Corrige #5604. #18362 (alesapin).
  • Implémentation de l’accès aux champs via untuple. #18133. #18309 (hexiaoting).
  • Autoriser l’analyse des champs Array à partir de CSV lorsqu’ils sont représentés sous forme de chaîne contenant un tableau sérialisé comme un CSV imbriqué. Exemple : "[""Hello"", ""world"", ""42"""" TV""]" sera analysé comme ['Hello', 'world', '42" TV']. Autoriser également l’analyse d’un tableau dans CSV sous forme de chaîne sans crochets englobants. Exemple : "'Hello', 'world', '42"" TV'" sera analysé comme ['Hello', 'world', '42" TV']. #18271 (alexey-milovidov).
  • Amélioration du calcul de la granularité adaptative pour les wide parts de MergeTree. #18223 (alesapin).
  • Désormais, clickhouse install peut fonctionner sur macOS. Le problème venait de l’absence de procfs sur cette plateforme. #18201 (Nikita Mikhaylov).
  • Meilleures indications pour la syntaxe des requêtes SHOW .... #18183 (Du Chuan).
  • Prise en charge de Int128, Int256 et UInt256 pour l’agrégation de tableaux arrayMin, arrayMax, arraySum, arrayAvg. #18147 (Maksim Kita).
  • Ajout de disk aux paramètres de stockage de Set et Join. #18112 (Grigory Pervakov).
  • Contrôle d’accès : désormais, la fonction de table merge() exige que l’utilisateur courant dispose du privilège SELECT sur chaque table dont elle lit les données. Cette PR corrige #16964. #18104 #17983 (Vitaly Baranov).
  • Les tables temporaires ne sont désormais visibles dans les tables système system.tables et system.columns que dans les sessions où elles ont été créées. La base de données interne _temporary_and_external_tables est désormais masquée dans ces tables système ; à la place, les tables temporaires sont affichées comme des tables avec une base de données vide et l’indicateur is_temporary activé. #18014 (Vitaly Baranov).
  • Correction d’un problème d’affichage de clickhouse-client lorsque la taille de la fenêtre du terminal change. #18009 (Amos Bird).
  • Réduction de la verbosité des événements journalisés lorsque le client coupe la connexion, de Warning à Information. #18005 (filimonov).
  • Suppression forcée des fichiers de métadonnées vides ou corrompus du système de fichiers pour DiskS3. S3 est une fonctionnalité expérimentale. #17935 (Pavel Kovalenko).
  • Contrôle d’accès : allow_introspection_functions=0 interdit l’utilisation des fonctions d’introspection, mais n’empêche plus l’attribution de privilèges les concernant (le bénéficiaire devra définir allow_introspection_functions=1 pour lui-même afin de pouvoir utiliser ce privilège). De même, allow_ddl=0 interdit l’utilisation des commandes DDL, mais n’empêche plus l’attribution de privilèges les concernant. #17908 (Vitaly Baranov).
  • Amélioration de l’ergonomie : suggestions pour les noms de colonnes. #17112. #17857 (fastio).
  • Ajout d’informations de diagnostic lorsque deux tables Merge tentent de lire les données l’une de l’autre. #17854 (徐炘).
  • Possibilité désormais de redéfinir la valeur du timeout pour un script en cours d’exécution utilisant l’image Docker ClickHouse. #17818 (Guillaume Tassery).
  • Vérification de la grammaire de définition du moteur des tables de logs système afin d’éviter certaines erreurs de configuration. À noter que cette vérification grammaticale n’est pas sémantique, ce qui signifie que des erreurs telles que des colonnes inexistantes ou des fonctions dans les expressions ne seront détectées qu’au moment de la création de la table. #17739 (Du Chuan).
  • Ne lève plus d’exception lors de l’initialisation de la table RabbitMQ s’il n’y a pas de connexion (elle se reconnectera en arrière-plan). #17709 (Kseniia Sumarokova).
  • Ne pas ignorer les limites de mémoire du serveur lors du flush de Buffer. #17646 (Azat Khuzhin).
  • Passage à une version corrigée de RocksDB (issue de ClickHouse-Extras) pour corriger une erreur de type use-after-free. #17643 (Nikita Mikhaylov).
  • Ajout d’un décalage au message d’exception pour l’analyse syntaxique parallèle. Cela corrige #17457. #17641 (Nikita Mikhaylov).
  • Ne pas renvoyer l’erreur “Too many parts” au milieu d’une requête INSERT. #17566 (alexey-milovidov).
  • Autoriser les paramètres de requête dans l’instruction UPDATE d’une requête ALTER. Corrige #10976. #17563 (alexey-milovidov).
  • Obfuscateur de requêtes : éviter d’utiliser certains mots-clés SQL comme noms d’identifiants. #17526 (alexey-milovidov).
  • Exporter la DDL entry maximale actuellement exécutée par DDLWorker via une métrique du serveur. C’est utile pour vérifier si DDLWorker est bloqué quelque part. #17464 (Amos Bird).
  • Exporter les métriques asynchrones des threads actuels de tous les serveurs. C’est utile pour diagnostiquer des problèmes comme celui-ci. #17463 (Amos Bird).
  • Inclure les colonnes dynamiques comme MATERIALIZED / ALIAS dans les wildcard queries lorsque les paramètres asterisk_include_materialized_columns et asterisk_include_alias_columns sont activés. #17462 (Ken Chen).
  • Autoriser la définition de TTL pour supprimer les anciennes entrées des tables de logs système, à l’aide de l’attribut <ttl> dans config.xml. #17438 (Du Chuan).
  • Désormais, les requêtes arrivant au serveur via les protocoles MySQL et PostgreSQL ont des types d’interface distincts (visibles dans la colonne interface de la table system.query_log) : 4 pour MySQL et 5 pour PostgreSQL, au lieu de 1, utilisé auparavant et désormais réservé au protocole natif. #17437 (Vitaly Baranov).
  • Corriger l’analyse de la clause SETTINGS de la requête INSERT ... SELECT ... SETTINGS. #17414 (Azat Khuzhin).
  • Comptabiliser correctement la mémoire dans RadixSort. #17412 (Nikita Mikhaylov).
  • Ajouter une vérification EOF dans receiveHello côté serveur pour éviter l’exception Attempt to read after eof. #17365 (Kruglov Pavel).
  • Éviter un possible dépassement de pile lors de la conversion de bigint. Les grands entiers sont Experimental. #17269 (flynn).
  • Désormais, les index set fonctionneront avec GLOBAL IN. Cela corrige #17232, #5576. #17253 (Amos Bird).
  • Ajouter une limite au nombre de redirections HTTP dans les requêtes vers le stockage S3 (s3_max_redirects). #17220 (ianton-ru).
  • Lorsque le combinateur -OrNull est combiné avec les combinateurs -If, -Merge, -MergeState, -State, il faut placer -OrNull en premier. #16935 (flynn).
  • Prise en charge de la configuration d’un proxy HTTP et d’un endpoint S3 HTTPS. #16861 (Pavel Kovalenko).
  • Ajout d’une authentification correcte via l’environnement, ~/.aws et AssumeRole pour le client S3. #16856 (Vladimir Chebotarev).
  • Ajout de spans OpenTelemetry supplémentaires. Ajout d’un exemple montrant comment exporter les données de span vers Zipkin. #16535 (Alexander Kuzmenkov).
  • Dictionnaires cache : suppression complète des callbacks et des verrous nécessaires à leur acquisition. Les clés ne sont pas séparées entre “not found” et “expired”, mais stockées dans la même map pendant la requête. #14958 (Nikita Mikhaylov).
  • Correction de fsync_part_directory/fsync_after_insert/in_memory_parts_insert_sync, qui n’ont en réalité jamais fonctionné (fonctionnalité expérimentale). #18845 (Azat Khuzhin).
  • Autorisation de l’utilisation du moteur Atomic pour la base de données imbriquée du moteur MaterializeMySQL. #14849 (tavplubix).

Corrections de bugs

  • Corrige le problème où le serveur peut, dans de très rares cas, cesser d’accepter les connexions. #17542 (Amos Bird, alexey-milovidov).
  • Corrige l’analyse des index pour les fonctions binaires avec un argument constant, qui entraînait des résultats de requête incorrects. Corrige #18364. #18373 (Amos Bird).
  • Corrige une analyse des index potentiellement incorrecte lorsque les types utilisés dans la comparaison d’index sont différents. Corrige #17122. #17145 (Amos Bird).
  • Désactive l’écriture avec AIO pendant les merges, car cela peut entraîner, dans des cas extrêmement rares, une corruption des données des colonnes de clé primaire pendant le merge. #18481 (alesapin).
  • Restreint les merges de parts wide vers des parts compactes. Dans le cas d’un vertical merge, cela entraînait une part de résultat corrompue. #18381 (Anton Popov).
  • Corrige un résultat de requête potentiellement incomplet lors de la lecture depuis MergeTree* en cas de backoff de lecture (message <Debug> MergeTreeReadPool: Will lower number of threads dans les logs). Introduit dans #16423. Corrige #18137. #18216 (Nikolai Kochetov).
  • Corrige un bug de use-after-free dans la bibliothèque rocksdb. #18862 (sundyli).
  • Corrige une lecture infinie depuis un fichier au format ORC (introduite dans #10580). Corrige #19095. #19134 (Nikolai Kochetov).
  • Corrige un bug dans le writer de données MergeTree, qui peut entraîner des marks d’une taille supérieure à celle de la granularity fixe. Corrige #18913. #19123 (alesapin).
  • Corrige un bug au démarrage lorsque ClickHouse ne parvenait pas à lire le compression codec depuis LowCardinality(Nullable(...)) et levait l’exception Attempt to read after EOF. Corrige #18340. #19101 (alesapin).
  • Restreint les requêtes MODIFY TTL pour les tables MergeTree créées avec l’ancienne syntaxe. Auparavant, la requête réussissait, mais n’avait en réalité aucun effet. #19064 (Anton Popov).
  • S’assure que groupUniqArray renvoie le type correct pour un argument de type Enum. Cela clôt #17875. #19019 (alexey-milovidov).
  • Corrige l’erreur possible Expected single dictionary argument for function lors de l’utilisation de la fonction ignore avec un argument LowCardinality. Corrige #14275. #19016 (Nikolai Kochetov).
  • Correction de l’insertion d’une colonne LowCardinality dans une table utilisant le moteur TinyLog. Corrige #18629. #19010 (Nikolai Kochetov).
  • Join tente de matérialiser les colonnes constantes, mais notre code les attend ailleurs. #18982 (Nikita Mikhaylov).
  • Désactivation de optimize_move_functions_out_of_any, car cette optimisation n’est pas toujours correcte. Cela résout #18051. Cela résout #18973. #18981 (alexey-milovidov).
  • Correction d’une exception possible, QueryPipeline stream: different number of columns, causée par la fusion des étapes Expression du plan de requête. Corrige #18190. #18980 (Nikolai Kochetov).
  • Correction d’un interblocage très rare à l’arrêt. #18977 (tavplubix).
  • Correction d’un comportement incorrect lorsque la requête ALTER TABLE ... DROP PART 'part_name' supprime tous les blocs de déduplication de l’ensemble de la partition. Corrige #18874. #18969 (alesapin).
  • Attach partition doit réinitialiser la mutation. #18804. #18935 (fastio).
  • Correction d’un problème avec bitmapOrCardinality pouvant entraîner un déréférencement de pointeur nul. Cela résout #18911. #18912 (sundyli).
  • Correction d’un blocage possible à l’arrêt dans clickhouse-local. Cela corrige #18891. #18893 (alexey-milovidov).
  • Les requêtes vers des bases de données externes (MySQL, ODBC, JDBC) étaient réécrites de manière incorrecte lorsqu’il y avait une expression de la forme x IN table. Cela corrige #9756. #18876 (alexey-milovidov).
  • Correction du combinateur *If avec une fonction unaire et des types Nullable. #18806 (Azat Khuzhin).
  • Correction du problème où les INSERT distribués asynchrones peuvent être rejetés par le serveur si le paramètre network_compression_method est défini globalement sur une valeur autre que default. Cela corrige #18741. #18776 (alexey-milovidov).
  • Correction de l’erreur Attempt to read after eof lors d’une tentative de CAST de NULL depuis Nullable(String) vers Nullable(Decimal(P, S)). La fonction CAST renvoie désormais NULL lorsqu’elle ne parvient pas à analyser une valeur décimale à partir d’une chaîne nullable. Corrige #7690. #18718 (Winter Zhang).
  • Correction d’un problème mineur de logging. #18717 (sundyli).
  • Correction de la suppression des parts vides dans les tables ReplicatedMergeTree créées avec l’ancienne syntaxe. Corrige #18582. #18614 (Anton Popov).
  • Correction d’un bug antérieur en cas de dépassement de capacité sur des dates avec différentes valeurs. La limite stricte de la valeur Date est fixée à “2106-02-07” ; les dates > “2106-02-07” sont converties en valeur 0. #18565 (hexiaoting).
  • Ajout de la prise en charge du type de données FixedString pour la réplication depuis MySQL. La réplication depuis MySQL est une fonctionnalité expérimentale. Ce correctif corrige #18450. Corrige également #6556. #18553 (awesomeleo).
  • Correction d’une possible erreur Pipeline stuck lors de l’utilisation de ORDER BY après une sous-requête avec une jointure RIGHT ou FULL. #18550 (Nikolai Kochetov).
  • Correction d’un bug pouvant entraîner le blocage de requêtes ALTER après l’arrêt de la mutation correspondante. Détecté par le thread fuzzer. #18518 (alesapin).
  • Prise en charge correcte de 12AM dans la fonction parseDateTimeBestEffort. Corrige #18402. #18449 (vladimir-golovchenko).
  • Correction de l’erreur value is too short lors de l’exécution des fonctions toType(...) (toDate, toUInt32, etc.) avec un argument de type Nullable(String). Désormais, ces fonctions renvoient NULL en cas d’erreur de parsing au lieu de lever une exception. Corrige #7673. #18445 (tavplubix).
  • Correction du comportement inattendu de SHOW TABLES. #18431 (fastio).
  • Correction : le combinator -SimpleState génère un type d’argument et un type de retour incompatibles. #18404 (Amos Bird).
  • Correction d’une possible condition de concurrence lors de l’utilisation simultanée de tables Set ou Join et de selects depuis system.tables. #18385 (alexey-milovidov).
  • Correction du remplissage de la table system.settings_profile_elements. Cette PR corrige #18231. #18379 (Vitaly Baranov).
  • Correction de plantages possibles dans les fonctions d’agrégation avec le combinator Distinct, lors de l’utilisation de l’agrégation à deux niveaux. Corrige #17682. #18365 (Anton Popov).
  • Correction d’un problème lorsque le processus clickhouse-odbc-bridge est inaccessible par le serveur sur des machines avec une double pile IPv4/IPv6 ; correction d’un problème lorsque les mises à jour des dictionnaires ODBC sont effectuées à l’aide de requêtes mal formées et/ou provoquent des plantages du processus odbc-bridge ; clôt potentiellement #14489. #18278 (Denis Glazachev).
  • Contrôle d’accès : SELECT count() FROM table peut désormais être exécuté si l’utilisateur a accès à au moins une colonne de la table. Cette PR corrige #10639. #18233 (Vitaly Baranov).
  • Contrôle d’accès : SELECT JOIN requiert désormais le privilège SELECT sur chacune des tables jointes. Cette PR corrige #17654. #18232 (Vitaly Baranov).
  • Correction de la comparaison des clés entre les types Enum et Int. Ceci corrige #17989. #18214 (Amos Bird).
  • Réplication depuis MySQL (fonctionnalité expérimentale). Corrige #18186 Corrige #16372 Correction d’un problème de conversion de clé unique dans le moteur de base de données MaterializeMySQL. #18211 (Winter Zhang).
  • Correction d’une incohérence pour les requêtes utilisant à la fois WITH FILL et WITH TIES #17466. #18188 (hexiaoting).
  • Correction de l’insertion d’une ligne avec une valeur par défaut en cas d’erreur d’analyse dans la dernière colonne. Corrige #17712. #18182 (Jianmei Zhang).
  • Correction de l’erreur Unknown setting profile lors d’une tentative de définition d’un profil de paramètres. #18167 (tavplubix).
  • Correction d’une erreur lorsque la requête MODIFY COLUMN ... REMOVE TTL ne supprime pas réellement le TTL de la colonne. #18130 (alesapin).
  • Correction de std::out_of_range: basic_string lors de l’analyse des URL S3. #18059 (Vladimir Chebotarev).
  • Correction de la comparaison entre DateTime64 et Date. Corrige #13804 et #11222. … #18050 (Vasily Nemkov).
  • Réplication depuis MySQL (fonctionnalité expérimentale) : corrige #15187 corrige #17912 prise en charge de la conversion des index de préfixe MySQL pour MaterializeMySQL. #17944 (Winter Zhang).
  • Lorsque la rotation du journal du serveur était configurée à l’aide du paramètre logger.size avec une valeur numérique supérieure à 2^32, les logs n’étaient pas correctement rotés. Ce problème a été corrigé. #17905 (Alexander Kuzmenkov).
  • L’optimisation triviale des requêtes produisait un résultat erroné si la requête contenait ARRAY JOIN (la requête n’est donc en réalité pas triviale). #17887 (sundyli).
  • Correction d’un segfault possible dans la fonction d’agrégation topK. Cela corrige #17404. #17845 (Maksim Kita).
  • WAL (fonctionnalité expérimentale) : ne pas restaurer les parts depuis le WAL si in_memory_parts_enable_wal est désactivé. #17802 (detailyang).
  • Le message d’Exception concernant la taille maximale de table pouvant être supprimée était affiché de manière incorrecte. #17764 (alexey-milovidov).
  • Correction d’un segfault possible lorsqu’il n’y a pas assez d’espace lors d’un insert dans une table Distributed. #17737 (tavplubix).
  • Correction d’un problème empêchant ClickHouse de rétablir la connexion aux serveurs MySQL. #17681 (Alexander Kazakov).
  • Windows : correction de l’erreur Function not implemented lors de l’exécution d’une requête RENAME dans une base de données Atomic, avec ClickHouse exécuté sur Windows Subsystem for Linux. Corrige #17661. #17664 (tavplubix).
  • Il pouvait être déterminé de manière incorrecte si le cluster était répliqué de façon circulaire (croisée) ou non lors de l’exécution d’une requête ON CLUSTER, en raison d’une race condition lorsque pool_size > 1. Ce problème a été corrigé. #17640 (tavplubix).
  • Correction du problème de table system.stack_trace vide lorsque le serveur s’exécute en mode daemon. #17630 (Amos Bird).
  • L’Exception fmt::v7::format_error pouvait être journalisée en arrière-plan pour les tables MergeTree. Cela corrige #17613. #17615 (alexey-milovidov).
  • Lorsque clickhouse-client est utilisé en mode interactif avec des requêtes multiligne, un commentaire sur une seule ligne était prolongé par erreur jusqu’à la fin de la requête. Cela corrige #13654. #17565 (alexey-milovidov).
  • Correction du blocage d’une requête ALTER lorsque la mutation correspondante avait été arrêtée sur une autre replica. Corrige #16953. #17499 (alesapin).
  • Correction d’un problème de comptabilisation de la mémoire lorsque la taille du mark cache était sous-estimée par ClickHouse. Cela peut se produire lorsqu’il y a beaucoup de petits fichiers de marks. #17496 (alesapin).
  • Correction de ORDER BY avec le paramètre optimize_redundant_functions_in_order_by activé. #17471 (Anton Popov).
  • Corrige les doublons après DISTINCT, rendus possibles par une optimisation incorrecte. Corrige #17294. #17296 (li chengxiang). #17439 (Nikolai Kochetov).
  • Corrige une forte utilisation du CPU dans les tâches en arrière-plan des tables *MergeTree. #17416 (tavplubix).
  • Corrige un crash possible lors de la lecture depuis une table JOIN avec des types LowCardinality. Corrige #17228. #17397 (Nikolai Kochetov).
  • Réplication depuis MySQL (fonctionnalité expérimentale) : corrige #16835, en tentant de corriger une incompatibilité d’en-tête avec l’instruction MySQL SHOW. #17366 (Winter Zhang).
  • Corrige les fonctions non déterministes avec l’optimiseur de prédicats. Cela corrige #17244. #17273 (Winter Zhang).
  • Corrige l’erreur possible Unexpected packet Data received from client pour les requêtes distribuées avec LIMIT. #17254 (Azat Khuzhin).
  • Corrige l’invalidation de l’index Set lorsqu’il y a des colonnes constantes dans la sous-requête. Cela corrige #17246. #17249 (Amos Bird).
  • clickhouse-copier : correctif pour les tables non partitionnées #15235. #17248 (Qi Chen).
  • Corrige des mutations potentiellement défaillantes pour les parts stockées sur un S3 disk (fonctionnalité expérimentale). #17227 (Pavel Kovalenko).
  • Correctif pour la fonction fuzzBits, problème associé : #16980. #17051 (hexiaoting).
  • Corrige optimize_distributed_group_by_sharding_key pour une requête avec OFFSET uniquement. #16996 (Azat Khuzhin).
  • Corrige les requêtes issues de tables Merge sur des tables Distributed avec des JOIN. #16993 (Azat Khuzhin).
  • Corrige l’optimisation de l’ordre de tri avec les fonctions monotones. Corrige #16107. #16956 (Anton Popov).
  • Corrige la comparaison incorrecte des types DateTime64 avec différentes précisions décimales. Corrige #16655#16952 (Vasily Nemkov).
  • Corrige l’optimisation de GROUP BY avec le paramètre optimize_aggregators_of_group_by_keys activé et les jointures. Corrige #12604. #16951 (Anton Popov).
  • Correction mineure de la requête SHOW ACCESS. #16866 (tavplubix).
  • Corrige le comportement lorsque le paramètre optimize_trivial_count_query est activé avec un prédicat de partition. #16767 (Azat Khuzhin).
  • Renvoie le nombre de lignes affectées pour les requêtes INSERT via le MySQL wire protocol. Auparavant, ClickHouse renvoyait toujours 0 ; c’est désormais corrigé. Corrige #16605. #16715 (Winter Zhang).
  • Corrige le comportement incohérent causé par select_sequential_consistency pour la requête trivial count optimisée et les tables système. #16309 (Hao Chen).
  • Déclenche une erreur lorsque le transformateur de colonne REPLACE s’applique à une colonne inexistante. #16183 (hexiaoting).
  • Déclenche une exception en cas d’expression ON de jointure non équi dans RIGH|FULL JOIN. #15162 (Artem Zuikov).

Amélioration de la compilation, des tests et du packaging

  • Ajout d’une vérification d’intégrité simple pour le binaire ClickHouse. Elle permet de détecter les corruptions dues à un matériel défectueux (bit rot sur les supports de stockage ou inversions de bits en RAM). #18811 (alexey-milovidov).
  • Remplacement de OpenSSL par BoringSSL. Cela permet d’éviter des problèmes avec les sanitizers. Corrige #12490. Corrige #17502. Corrige #12952. #18129 (alexey-milovidov).
  • Simplification du script d’initialisation Sys/V. Il ne fonctionnait pas sur Ubuntu 12.04 ni sur les versions antérieures. #17428 (alexey-milovidov).
  • Plusieurs améliorations du script ./clickhouse install. #17421 (alexey-milovidov).
  • Désormais, ClickHouse peut se faire passer pour un faux ZooKeeper. Pour l’instant, l’implémentation du stockage repose simplement sur une table de hachage en mémoire, et le serveur prend partiellement en charge le protocole ZooKeeper. #16877 (alesapin).
  • Correction de la suppression des watches de listes mortes pour TestKeeperStorage (un mock de ZooKeeper). #18065 (alesapin).
  • Ajout de la commande SYSTEM SUSPEND pour l’injection de fautes. Elle peut être utilisée pour faciliter les tests de failover. Clôt #15979. #18850 (alexey-milovidov).
  • Génération d’un identifiant de build lorsque ClickHouse est lié avec lld. Il s’est avéré que lld ne le génère pas par défaut sur ma machine. L’identifiant de build est utilisé pour les rapports de crash et l’introspection. #18808 (alexey-milovidov).
  • Correction des erreurs shellcheck dans la vérification de style. #18566 (Ilya Yatsishin).
  • Mise à jour des informations sur les fuseaux horaires vers 2020e. #18531 (alesapin).
  • Correction des avertissements codespell. Scission des vérifications de style en parties distinctes. Mise à jour de l’image Docker des vérifications de style. #18463 (Ilya Yatsishin).
  • Vérification automatisée de la présence résiduelle de marqueurs de conflit dans la documentation. #18332 (alexey-milovidov).
  • Activation de Thread Fuzzer pour la vérification de stabilité des tests stateless. #18299 (alesapin).
  • Ne plus utiliser la fonction non thread-safe strerror. #18204 (alexey-milovidov).
  • Mise à jour de l’action de workflow anchore/scan-action@main (déplacée de master vers main). #18192 (Stig Bakken).
  • Désormais, clickhouse-test exécute DROP/CREATE des bases de données avec un timeout. #18098 (alesapin).
  • Ajout de la prise en charge expérimentale du framework Pytest pour les tests sans état. #17902 (Ivan).
  • Utilisation désormais de la dernière version du démon Docker dans les tests d’intégration. #17671 (alesapin).
  • Envoi à Sentry d’informations sur la build officielle, la mémoire, le CPU et l’espace disque libre lorsqu’il est activé. Sentry est une fonctionnalité optionnelle destinée à aider les développeurs de ClickHouse. Cela clôt #17279. #17543 (alexey-milovidov).
  • Présence d’une variable non initialisée dans le code de clickhouse-copier. #17363 (Nikita Mikhaylov).
  • Correction d’un rapport MSan de #17309. #17344 (Nikita Mikhaylov).
  • Correction d’un problème avec IPv6 dans la bibliothèque Arrow Flight. Voir les commentaires pour plus de détails. #16664 (Zhanna).
  • Ajout d’une bibliothèque qui remplace certaines fonctions libc par des traps provoquant l’arrêt du processus. #16366 (alexey-milovidov).
  • Ajout de diagnostics dans les logs du serveur en cas de dépassement de pile, avec envoi d’un message d’erreur à clickhouse-client. Cela clôt #14840. #16346 (alexey-milovidov).
  • Il est désormais possible d’exécuter presque tous les tests fonctionnels sans état en parallèle. #15236 (alesapin).
  • Correction d’une corruption dans la décompression Snappy de librdkafka (le problème ne concernait que les builds gcc10, mais les builds officielles utilisent déjà clang ; au moins les versions officielles récentes ne sont donc pas affectées). #18053 (Azat Khuzhin).
  • Si le serveur a été arrêté par l’OOM killer, un message est affiché dans le log. #13516 (alexey-milovidov).
  • PODArray : évite l’appel à memcpy avec des arguments (nullptr, 0) (correction d’un rapport UBSan). Cela corrige #18525. #18526 (alexey-milovidov).
  • Amélioration mineure de la concaténation des chemins ZooKeeper dans DDLWorker. #17767 (Bharat Nallan).
  • Permet de recharger les symboles depuis le fichier de Débogage. Cette PR corrige également un problème de build-id. #17637 (Amos Bird).
Dernière modification le 25 juin 2026