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 stockagekafka{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_representationetoutput_format_tsv_null_representationenformat_csv_null_representationetformat_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-keeperest complet sur le plan fonctionnel. - Prise en charge du type de données
Bool. #31072 (kevin wan). - Prise en charge de
PARTITION BYdans les stockages File, URL et HDFS, ainsi qu’avec la fonction de tableINSERT INTO. Closes #30273. #30690 (Kseniia Sumarokova). - Ajout de
CONSTRAINT ... ASSUME ...(sans vérification lors deINSERT). 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
INTERVALdans la clauseSTEPpour le modificateurWITH 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
Identifierpour 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,JSONCompactEachRowetJSONCompactStringsEachRow, suppression des duplications de code, ajout d’une interface de base pour les formats avec les suffixes-WithNameset-WithNamesAndTypes. Ajout des formatsCSVWithNamesAndTypes,TSVRawWithNames,TSVRawWithNamesAndTypes,JSONCompactEachRowWIthNames,JSONCompactStringsEachRowWIthNames,RowBinaryWithNames. Prise en charge du parsing parallèle pour les formatsTSVWithNamesAndTypes,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 formatRowBinaryWithNamesAndTypes. Ajout du paramètreinput_format_with_types_use_header, qui indique s’il faut vérifier que les types écrits au format<format_name>WIthNamesAndTypescorrespondent à la structure de la table. Ajout du paramètreinput_format_csv_empty_as_default, utilisé dans le format CSV à la place deinput_format_defaults_for_omitted_fields(car ce paramètre ne doit pas contrôlercsv_empty_as_default). Correction de l’utilisation du paramètreinput_format_defaults_for_omitted_fields(il n’était utilisé que commecsv_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 formatTSVRaw, ce qui rend ce format entièrement compatible avec l’insertion en TSV. Correction de l’insertion de NULL dansLowCardinality(Nullable)lorsqueinput_format_null_as_defaultest 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 formatsJSONStringsEachRow/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’échappementRawdans le format d’entrée Template. Ajout d’informations de diagnostic pour le format d’entréeJSONCompactEachRow(WithNames/WIthNamesAndTypes). Correction d’un bug de parsing parallèle des formats-WithNameslorsque le paramètremin_chunk_bytes_for_parallel_parsingest 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/sortieCustomSeparated. Ajout des formatsCustomSeparatedWithNames/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,exponentialTimeDecayedCountetexponentialTimeDecayedAvg, plus efficaces queexponentialMovingAveragepour 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’anciensum-, min-, max- Mappour les tableaux mappés ensum-, 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 VIEWpour 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,ORCetArrowvias3/url/hdfs(contrôlée par le paramètreinput_format_allow_seeks, activé par défaut). Ajout également du paramètreremote_read_min_bytes_for_seekpour 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
JSONEachRowWithProgressetPrettyCompactMonoBlock. #31489 (Kruglov Pavel). - Accélération de
countsur les colonnes Nullable. #31806 (Raúl Marín). - Accélération des fonctions d’agrégation
avgetsumCount. #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
GraphiteMergeTreepour les métriques simples et celles avec tags (champrule_typefacultatif). #25122 (Michail Safronov). - Suppression des requêtes
DESC TABLEsuperflues pourremote()(dans le cas deremote('127.1', system.one)(c.-à-d. lorsqu’un identifiant est utilisé comme db.table au lieu d’une chaîne), une requêteDESC TABLEsuperflue était émise). #32019 (Azat Khuzhin). - Optimisation de la fonction
tupleElementpour lire une sous-colonne lorsque le paramètreoptimize_functions_to_subcolumnsest activé. #31261 (Anton Popov). - Optimisation de la fonction
mapContainspour lire la sous-colonnekeylorsque le paramètreoptimize_functions_to_subcolumnsest activé. #31218 (Anton Popov). - Ajout des paramètres
merge_tree_min_rows_for_concurrent_read_for_remote_filesystemetmerge_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 COLUMNde type PostgreSQL. #32003 (SuperDJY). - Ajout de la prise en charge de
update_fieldpourRangeHashedDictionaryetComplexKeyRangeHashedDictionary. #32185 (Maksim Kita). - Les fonctions
murmurHash3_128etsipHash128acceptent désormais un nombre arbitraire d’arguments. Cela clôt #28774. #28965 (小路). - Prise en charge de l’expression par défaut pour le stockage
HDFSet 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 sortieJSONEachRow. #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-keeperrefuse 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
JSONEachRowsioutput_format_json_array_of_rowsest activé. #32112 (Frank Chen). - Autoriser l’analyse de
+avant les valeursFloat32/Float64. #32079 (Kruglov Pavel). - Autoriser un paramètre
hdfs_replicationconfiguré par l’utilisateur pourDiskHDFSetStorageHDFS. Clôture #32039. #32049 (leosunli). - Ajout des champs ClickHouse
exceptionetexception_codeau 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
LowCardinalitysurInt256. #31832 (alexey-milovidov). - Recrée les tables
system.*_logen 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.xmlne 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
Replicatedlors de l’expansion des macros dans les argumentsReplicatedMergeTreesi ces macros ne sont pas définies dans la config. Ferme #31471. #31488 (tavplubix). - Meilleure analyse pour la projection
min/max/count. Désormais, avecallow_experimental_projection_optimizationactivé, la projection virtuellemin/max/countpeut être utilisée avec des colonnes de la partition key. #31474 (Amos Bird). - Ajoute la prise en charge de
--pagerpourclickhouse-local. #31457 (Azat Khuzhin). - Corrige l’attente de l’éditeur pendant l’édition interactive d’une query (
waitpid()renvoie -1 surSIGWINCHetEDITORainsi queclickhouse-local/clickhouse-clientfonctionnent 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_timeoutethttp_receive_timeoutest passée de 1800 (30 minutes) à 180 (3 minutes). #31450 (tavplubix). MaterializedMySQLgère désormais les requêtes DDLCREATE TABLE ... LIKE .... #31410 (Stig Bakken).- Renvoie une requête create artificielle lors de l’exécution de
show create tablesur 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 pournumbers_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 Settingsmerge_tree_clear_old_temporary_directories_interval_secondsetmerge_tree_clear_old_parts_interval_secondsont é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_utilizationdeclickhouse-clientutilisable. - 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 EXISTSpour la requêteRENAME 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
--verbosedans le mode interactif declickhouse-localet ajout de la possibilité de journaliser dans un fichier. #30881 (Kseniia Sumarokova). - Ajout des commandes
\l,\d,\cdansclickhouse-client, comme dans MySQL et PostgreSQL. #30876 (Pavel Medvedev). - Pour clickhouse-local ou clickhouse-client : si l’option
--interactiveest utilisée avec--queryou--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_stringsur 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
Bufferavec le typeMap. Corrige #30546. #31742 (Anton Popov). - Corrige la lecture des tables
MergeTreelorsqueuse_uncompressed_cacheest 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_setactivé). #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
avgWeightedavec un argumentDecimal. Corrige #32053. #32303 (tavplubix). - Le serveur pouvait ne pas démarrer avec l’erreur
Cannot attach 1 tables due to cyclic dependenciessi la tableDictionarypointait 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’échappementQuoted. #32190 (Kruglov Pavel). - Dictionnaires XML : les identifiants utilisés dans la requête CREATE de la table peuvent être qualifiés avec
default_databaselors 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
CASTdepuisNullableaveccast_keep_nullable(erreurPARAMETER_OUT_OF_BOUNDauparavant, par exemple avectoUInt32OrDefault(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 emptylors du détachement d’une part. #32063 (tavplubix). MaterializedMySQL(fonctionnalité expérimentale) : correction d’une mauvaise interprétation des donnéesDECIMALprovenant 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_PARTpouvaient 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 ouDate[Time]. Corrige #31485. #31887 (tavplubix). - Correction des fonctions
emptyetnotEmptyavec des arguments de typeUUID. Corrige #31819. #31883 (Anton Popov). - Le chemin de configuration a été changé de
keeper_server.session_timeout_msàkeeper_server.coordination_settings.session_timeout_mslors de la construction d’unKeeperTCPHandler. Même chose pouroperation_timeout. #31859 (JackyWoo). - Correction d’un cast invalide du type
Nullablelorsqu’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
dictGetavec type est utilisée pour un attribut de dictionnaire dont le type estNullable. 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 PARTITIONconcurrentes. #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 herelors de l’exécution d’une requêteON CLUSTERsi le nom de cluster spécifié est celui d’une base de donnéesReplicated. #31723 (tavplubix). - Corrige une exception dans certains cas d’utilisation de la fonction
decryptsur des colonnes Nullable. Cela résout #31662. Cela résout #31426. #31707 (alexey-milovidov). - Corrige la fonction
ngramslorsque la chaîne contient des caractères UTF-8. #31706 (yandd). - Les Settings
input_format_allow_errors_numetinput_format_allow_errors_ratione fonctionnaient pas pour l’analyse des types de domaine, tels queIPv4; c’est corrigé. Corrige #31686. #31697 (tavplubix). - Corrige une exception de pointeur nul dans
MATERIALIZE COLUMN. #31679 (Nikolai Kochetov). - La requête
RENAME TABLEfonctionnait incorrectement lors d’une tentative de renommage d’un dictionnaire DDL dans une base de donnéesOrdinary; c’est corrigé. #31638 (tavplubix). - Implémente la fonction d’agrégation
sparkbarcomme 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_bytestant que le bug dans cette optimisation n’est pas corrigé. Voir #31009). Supprime l’option redondantepartial_merge_join_optimizations. #31528 (Vladimir C). - Corrige la progression pour les requêtes
INSERT SELECTcourtes. #31510 (Azat Khuzhin). - Corrige un comportement incorrect avec
group byet les arguments positionnels. Clôt #31280#issuecomment-968696186. #31420 (Kseniia Sumarokova). - Résout
nullptrdans le fournisseur d’identifiants STS pour S3. #31409 (Vladimir Chebotarev). - Supprime la fonction
notLikede 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
Mergeavec des alias etWHERE(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
formatRowavec 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
SELECTlorsqu’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_dropdans le cas de ATTACH PARTITION … FROM et MOVE PARTITION … #30995 (Amr Alaa). - Corrige certains cas limites avec les opérateurs
INTERSECTetEXCEPT. 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 quexz,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
MergeTreewrite_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
bayesABa é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 codecZSTDpar 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 coordinationcompress_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
INSERTasynchrone 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éfinissantasync_insertpour les requêtesINSERTavec des données intégrées à la requête ou dans un buffer séparé (par exemple pour les requêtesINSERTvia le protocole HTTP). Siwait_for_async_insertvaut 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 settingsasync_insert_threads,async_insert_max_data_sizeetasync_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êtesINSERTindividuelles 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écuterclickhouse-localpour 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 declickhouse-clientet declickhouse-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_SCHEMAavec les vuesSCHEMATA,TABLES,VIEWSetCOLUMNS, correspondant aux tables de la databasesystem. 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 OUTFILEetFROM 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 fonctionngramspour 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 moteurKafkaouRabbitMQ, 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éeCapnProto. #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
MD4etSHA384. 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_agedans le fichier de configuration avec une valeur positive. #29516 (凌涛). - Prise en charge de Huawei OBS Storage. Clôture #24294. #29511 (kevin wan).
- Nouvelle fonction
mapContainsKeyLikepour obtenir la map dont la clé correspond à une expression régulière simple. #29471 (凌涛). Nouvelle fonctionmapExtractKeyLikepour 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 FETCHetATTACHnon 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ètredescribe_include_subcolumns). #28905 (Anton Popov). ExecutableetExecutablePoolajoutent l’optionsend_chunk_header. Si cette option est activée, le nombre de lignes du chunkrows_count, suivi d’un saut de ligne, est envoyé au client avant le chunk. #28833 (Maksim Kita).tokenbf_v1etngramprennent 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 idAvec la table ci-dessus, la requêteselect * 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 lagranularityet deindex_granularitydéfinies. #28511 (凌涛).- Envoie les profile events du serveur au client. Un nouveau packet type
ProfileEventsa été introduit. Clôt #26177. #28364 (Dmitry Novik). - Ajoute des opérations de décalage de bits pour les types de données
FixedStringetString. 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
seeklors de la lecture depuis des remote filesystems. Cela améliore considérablement les performances et permet aux disks expérimentauxwebets3d’être plus rapides qu’EBS dans certaines conditions. #29205 (Kseniia Sumarokova). Par ailleurs, le type de diskweb(dataset statique hébergé sur un serveur web) passe du statut expérimental à un statut prêt pour la production. - Les queries avec
INTO OUTFILEdansclickhouse-clientutiliseront plusieurs threads. Correction du problème de clignotement de la barre de progression lors de l’utilisation deINTO 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’enginesMergeTree). #30111 (alesapin). - Supprime certains appels
seekredondants lors de la lecture de blocks compressed dans la famille des table engines MergeTree. #29766 (alesapin). - Permet à la table function
urlde 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_orderactivé). #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 NULLvers des databases externes (par ex. MySQL). #29463 (Azat Khuzhin). TransformeisNull/isNotNullenIS NULL/IS NOT NULL(pour les dbs externes, par ex. MySQL). #29446 (Azat Khuzhin). - Les queries
SELECTsur 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
StorageMergeTreelorsque 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_functionsest 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 syntaxesCREATE OR REPLACEetCREATE IF NOT EXISTS. #30454 (Maksim Kita). Ajout de la prise en charge deDROP 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 pourclickhouse-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_bytesdanssystem.data_skipping_indices. Ajout des columnssecondary_indices_compressed_bytes,secondary_indices_uncompressed_bytes,secondary_indices_marks_bytesdanssystem.parts. Corrige #29697. #29896 (Maksim Kita). - Ajouter l’alias
tableàsystem.tableset l’aliasdatabaseà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,intDivetmodulo. Corrige #22621. #28352 (Kruglov Pavel). - Permettre d’analyser les values du Data type
Datedans les text formats au formatYYYYMMDD, en plus deYYYY-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’instructionCREATE 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 TABLEpour les tables des bases de donnéesMemory. Les bases de donnéesMemorysont utilisées dansclickhouse-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_PARTdans la replication queue. #30346 (tavplubix). - Autorise les liens symboliques vers des fichiers dans le répertoire
user_filespour la table function file. #30309 (Kseniia Sumarokova). - Correction de la comparaison de
Date32avecDate,DateTime,DateTime64etString. #30219 (liang.huang). - Autorise la suppression de l’expression
SAMPLE BYdes tablesMergeTree(ALTER TABLE <table> REMOVE SAMPLE BY). #30180 (Anton Popov). - Désormais,
Keeper(dansclickhouse-server) démarrera de manière asynchrone s’il peut se connecter à un autre nœud. #30170 (alesapin). - Désormais,
clickhouse-clientprend 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ètrestore_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,ParquetetORC. 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 TABLEpourDatabaseMemoryetLiveView. 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_queriespour permettre d’attendre la fin des requêtes en cours d’exécution jusqu’à la duréeshutdown_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_probabilitypendant 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 --obfuscatefonctionne désormais avec davantage de types de requêtes. #29672 (alexey-milovidov). - Correction du problème suivant :
clickhouse-format --obfuscatene peut pas traiter les requêtes avec des dictionnaires intégrés (fonctionsregionTo...). #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_backlogpar 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_configchange. 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 expireddans 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ètreallow_nondeterministic_mutationsest 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
FREEZEpour les parts en mémoire (pour les sauvegardes). #29376 (Mo Xuan). - Transmission de
initial query_idpourclickhouse-benchmark(auparavant, si vous exécutiez une requête distante viaclickhouse-benchmark, les requêtes sur les shards n’étaient pas associées à la requête initiale viainitial_query_id). #29364 (Azat Khuzhin). - Index de saut
tokenbf_v1etngrambf_v1: ajout de la prise en charge du type de donnéesArrayavec une clé de typeStringouFixedString. #29280 (Maksim Kita). Les index de sauttokenbf_v1etngrambf_v1prennent désormais en charge le type de donnéesMapavec une clé de typeStringouFixedString. Auteur : @lingtaolf. #29220 (Maksim Kita). - Fonction
has: ajout de la prise en charge du type de donnéesMap. #29267 (Maksim Kita). - Ajout du paramètre
compress_logspour ClickHouse Keeper, qui permet de compresser les logs de ClickHouse Keeper (pour la machine à états répliquée) enZSTD. 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 JOINest utilisé. Dans les versions précédentes, l’analyse des projections pouvait casser les alias dansARRAY 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
LowCardinalityau format d’entrée/sortieORC. #29062 (Kruglov Pavel). - Un
SELECTsursystem.distributed_ddl_queuepouvait 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 dansclickhouse-keeper-converterqui 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 dansclickhouse-keeper-converterqui 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 foundpour 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 = 1lorsqu’un alias est utilisé. #28746 (Amos Bird). - Implémente le paramètre
detach_not_byte_identical_partspourReplicatedMergeTree, 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_bytespourMergeTree(afin de limiter la taille totale de toutes les parts corrompues ; la valeur par défaut est1GiB). #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
Logsur 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
USINGavec 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’
AccessControlManagerafin 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,Parquetpour les buildsAArch64etDarwin(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
positionCaseInsensitiveUTF8etcountSubstringsCaseInsensitiveUTF8, 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ètreoptimize_min_equality_disjunction_chain_length) dans les requêtes distribuées avec le paramètrelegacy_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 FILLlorsqueTOetFROMsont 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 avecUnknown auxiliary ZooKeeper namesi 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 PARTITIONet les fusions en arrière-plan dansMergeTreenon 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/isNullenIS [NOT] NULL(corrige les requêtes contenant quelque chose commeisNotNull(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
MergeTreeavecmax_read_buffer_size = 0(quand l’utilisateur veut se tirer une balle dans le pied) (cela peut entraîner les exceptionsCan't adjust last granule,LOGICAL_ERROR, voire une perte de données). #30192 (Azat Khuzhin). - Correction de
pread_fake_async/pread_threadpoolavecmin_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 connectedpour les requêtes avecGLOBAL INetWITH 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
Memorysupprimée pouvait réapparaître après le redémarrage du serveur ; c’est corrigé (#29795). Ajout également du paramètreforce_remove_data_recursively_on_dropcomme solution de contournement à l’erreurDirectory not emptylors de la suppression d’une base de donnéesOrdinary(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
FileCheckeretStorageLog/StorageStripeLog. #29959 (Azat Khuzhin). - Correction d’une condition de concurrence entre
LogSink::writeMarks()etLogSourcedansStorageLog. #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 à
LowCardinalitypendantGROUP BY(en combinaison avec des tablesBuffer, cela peut entraîner des problèmes). #29782 (Azat Khuzhin). - Correction d’un
GROUP BYincorrect (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.3et>= 21.4, que la key deGROUP BYcomportait plusieurs columns toutes de taille fixe, et que la two-level aggregation était activée (voirgroup_by_two_level_thresholdetgroup_by_two_level_threshold_bytes). Corrige #29580. #29735 (Nikolai Kochetov). - Correction du comportement incorrect du paramètre
materialized_postgresql_tables_listau 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 MODIFYlors de l’utilisation d’un identifiant de table incorrect dans une expressionDEFAULTtelle quex.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 deHAVINGn’é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 destd::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 mismatchpour des sous-requêtes avec prédicatHAVINGpoussé vers le bas. Corrige #29010. #29475 (Nikolai Kochetov). - Correction de l’erreur logique
Cannot capture columnsdans 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 structurelors de la recréation ou de la création de nouvelles répliques deReplicatedMergeTree, 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 deAttempt 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_keyslors 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 (
SIGSEGVpourarrayCompact/ILLEGAL_COLUMNpourarrayDifference/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
LowCardinalitydans 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 PARTetREPLACE/MOVE PARTITIONqui 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
SELECTavec 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
s2RectAddets2RectContains. #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_tablen’ont plus aucun effet. Ils n’ont jamais vraiment bien fonctionné et ont été remplacés parmax_replicated_fetches_network_bandwidth,max_replicated_sends_network_bandwidthetbackground_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}. ExempleCREATE FUNCTION plus_one as (a) -> a + 1. Auteurs @Realist007. #27796 (Maksim Kita) #23978 (Realist007). - Ajout du moteur de stockage
Executableet de la fonction de tableexecutable. 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 degz,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
SETTINGSde la requêteCREATEpour les tabless3. 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
getServerPortpour 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
webpermettant 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
BACKUPetRESTORE. #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
sumIfetcountIf. #28272 (Raúl Marín). - Création d’une projection virtuelle pour les index
minmax. Désormais, lorsqueallow_experimental_projection_optimizationest 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
sequenceMatchetsequenceCount, 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
hasAllexploite 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 partsen différant le démarrage de la table. #28313 (Amos Bird). - Correction d’un nombre potentiellement excessif de conditions déplacées de
WHEREversPREWHERE(optimisation contrôlée par le paramètreoptimize_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
Distributedet 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-clientune 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 tablesystem.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 moteurMySQL. #28474 (Azat Khuzhin). - Ne pas autoriser la création de
MaterializedPostgreSQLavec 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’environnementLIBHDFS3_CONFdans 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 (commegetpeername()é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 typeMap(par ex. différents typesInt,StringetFixedString). #28096 (Anton Popov). - Prise en charge de la clause
ON CONFLICTlors 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
Enumpour 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_setpour 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êteALTER/OPTIMZE/TRUNCATE(la valeur par défaut est de 120 secondes). Sireplication_alter_partitions_syncvaut 2 et que certaines répliques restent inactives plus dereplication_wait_for_inactive_replica_timeoutsecondes, alorsUNFINISHEDsera 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_timeoutpar 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 COLUMTversNullable(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 TTLen 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 REPLACEavec la clauseON CLUSTER. Cette PR améliore le correctif #27001. #27983 (Vitaly Baranov). - Autorise la sélection avec
extremes = 1sur une colonne de typeLowCardinality(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 dansNamedSessionStoragesont 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
bzip2tronquée. #28543 (Azat Khuzhin). - Corrige un chevauchement d’UUID dans
DROP TABLEpour le DDL interne deMaterializedMySQL. MaterializedMySQL est une fonctionnalité expérimentale. #28533 (Azat Khuzhin). - Corrige l’erreur
There is no subcolumnlors d’un SELECT sur des tables qui comportent des colonnesNestedet des colonnes scalaires avec un point dans leur nom et le même préfixe queNested(par exemplen.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 deReplicatedVersionedCollapsingMergeTree. 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 BYet les tablesMergelorsque le paramètreoptimize_read_in_orderest 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ètreextremesdé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
segfaultextrê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 fonctionJSONExtract. 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 dansclickhouse-keeperoù le client peut recevoir une réponse de watch avant la réponse à la requête correspondante. #28197 (alesapin). Corrige un comportement incorrect dansclickhouse-keeperlorsque des watches de liste (getChildren) sont déclenchées par des requêtessetsur les enfants. #28190 (alesapin). Corrige un cas rare où des modifications des paramètres declickhouse-keeperpeuvent entraîner une perte de logs et le blocage du serveur. #28360 (alesapin). Corrige un bug dansclickhouse-keeperpouvant entraîner des logs sans fin lorsquerotate_logs_intervalest 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
testpour les environnements de test. Il est encore plus verbeux quetrace, 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.23sera affiché au lieu de1.230000pour 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ètreoutput_format_decimal_trailing_zeros. L’implémentation detoStringet 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 defooState(42)(x)ne peut pas être finalisé avecfooMerge(s)nifooMerge(123)(s); les paramètres doivent être spécifiés explicitement comme dansfooMerge(42)(s)et doivent être identiques. Cela n’affecte pas certaines aggregate functions spéciales commequantileetsequence*, 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_expressionest défini. #26639 (alexey-milovidov). - Désormais, une scalar subquery renvoie toujours un résultat
Nullablesi son type peut êtreNullable. Cela est nécessaire car, dans le cas d’une subquery vide, son résultat doit êtreNull. 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 enNullable(commeArrayouTuple) 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
isNulletisNotNull. #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 indicesMINMAX, vous pouvez obtenir l’errorData after mutation/merge is not byte-identical, puisque le nouvel index aura l’extension.idx2alors 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_evaluationpour 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,JDBCetCassandra. 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 deSELECT ... 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 tablesystem.warningspour 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
bzip2pour 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_limitavec un décalage deoffset. #27234 (DHBin). - Ajoute la colonne
default_databaseàsystem.users. #27054 (kevin wan). - Prise en charge des macros
clusterdans 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
EXPLAINdispose maintenant du modeEXPLAIN 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
ReplicatedMergeTreesur le stockageHDFS. #25918 (Zhichang Yu). - Autorise l’insertion du type Nested comme tableau de structs dans les formats d’entrée
Arrow,ORCetParquet. #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 queDateTime64, le chargement de Parquet date32 dansDate32de ClickHouse, et une nouvelle fonctiontoDate32similaire à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
MongoDBpour 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
MaterializeMySQLenMaterializedMySQL. #26822 (tavplubix).
Amélioration des performances
- Améliore les performances des requêtes rapides lorsque
max_execution_time = 0en 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_limitpar défaut. #27104 (Azat Khuzhin). - Rend
toTimeZonemonotone lorsquetimeZoneest 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
Fileest un fichier ordinaire, autoriser sa lecture multiple. Cela permet àclickhouse-localde lire plusieurs fois depuis stdin (avec plusieurs requêtes SELECT ou sous-requêtes) si stdin est un fichier ordinaire, par exempleclickhouse-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
arrayJoindans 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
_CASTpour 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ètrecast_keep_nullable. Clôt #12636. #27382 (Kseniia Sumarokova). - Ajouter le paramètre
log_formatted_queriespour journaliser une requête formatée supplémentaire danssystem.query_log. C’est utile pour l’analyse des requêtes normalisées, car des fonctions commenormalizeQueryetnormalizeQueryKeepNamesn’analysent ni ne formatent les requêtes afin d’obtenir de meilleures performances. #27380 (Amos Bird). - Ajouter deux paramètres,
max_hyperscan_regexp_lengthetmax_hyperscan_regexp_total_length, pour empêcher l’utilisation d’expressions régulières trop volumineuses dans les fonctions liées à Hyperscan, commemultiMatchAny. #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_kinddanssystem.query_logmême lorsque la requête ne parvient pas à démarrer. #27182 (Amos Bird). - Ajout de la colonne
replica_is_activeà la tablesystem.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
RocksDBvia la tablesystem.rocksdb. Lit les options rocksdb depuis la config de ClickHouse (clésrocksdb...). 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 PROFILEapplique 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
mapPopulatesSeriesprend en charge le typeMap. #26663 (Ildus Kurbangaliev). - Corrige les tentatives de connexion excessives (x2) avec
skip_unavailable_shards. #26658 (Azat Khuzhin). - Évite que
clickhouse-benchmarkne 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 viaclickhouse-local. Clôt #22355. #26510 (Maksim Kita). - Définit le type de requête client pour les handlers du protocole de compatibilité
mysqletpostgresql. #26498 (anneji-dev). - Applique
LIMITau niveau des shards pour les requêtes commeSELECT * FROM dist ORDER BY key LIMIT 10avecdistributed_push_down_limit=1. Évite d’exécuter les étapesDistinct/LIMIT BYpour les requêtes commeSELECT DISTINCT shading_key FROM dist ORDER BY key. Désormais,distributed_push_down_limitest respecté par l’optimisationoptimize_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
Distributedvia CREATE TABLE (par ex.CREATE TABLE dist (key Int) Engine=Distributed(cluster, db, table) SETTINGS monitor_batch_inserts=1et 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_blockpour ajuster le seuil de sécurité du volume de données généré par la fonctionrange. 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_patternpour é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.columnspour les tablesLogetTinyLog. Cela clôt #9001. #26241 (Nikolay Degterinsky). - Ne pas lever d’exception lors de l’interrogation de la table
system.detached_partss’il existe une configuration de disque personnalisée et que le répertoiredetachedn’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()ettoday(). Cela clôt #25875. Cela clôt #11333. #26235 (alexey-milovidov). - Conversion des data types
timestampettimestamptzenDateTime64dans 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_iopouvait ne pas fonctionner correctement simax_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
Distributedlors de la requêteREPLACE TABLE. Résout #24566 - Ne pas remplacer (ni créer) la table avec la requête[CREATE OR] REPLACE TABLE ... AS SELECTsi 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ètredrain_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’attributfrom_zk,from_envouincl, 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
LowCardinalityetFixedStringpour le typeMap. #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 PARTqui peut provoquer l’erreurUnexpected 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
arrayHassont appliquées à des tableaux LowCardinality de Nullable de différents types non numériques, tels queDateTimeetDateTime64. 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/meminfone 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 columnpour les requêtes avec échantillonnage. Introduite dans #24574. Corrige #26522. #27301 (Nikolai Kochetov). - Correction d’erreurs telles que
Expected ColumnLowCardinality, gotUInt8ouBad cast from type DB::ColumnVector<char8_t> to DB::ColumnLowCardinalitypour certaines requêtes avecLowCardinalitydansPREWHERE. 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 = 2avecdistributed_push_down_limit = 1ouoptimize_distributed_group_by_sharding_key = 1avecLIMIT BYetLIMIT 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_partspouvait 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 optionsallow_read_expired_keys,max_update_queue_size,update_queue_push_timeout_milliseconds,query_wait_timeout_millisecondsn’étaient pas prises en compte pour les dictionnaires d’un type autre quecache. #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 xxxest 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 colonneDEFAULTréférence une autre colonne non matérialisée sans expressionDEFAULT. Corrige #26591. #26900 (alesapin). - Corrige le chargement des clés de dictionnaire dans
library-bridgepour la dictionary sourcelibrary. #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_microsecondspourREMOVE_PARTdanssystem.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 ROLEfonctionne 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
chowndans 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
RabbitMQlorsque l’initialisation deRabbitMQn’avait pas été lancée. Clôt #26504. #26529 (Kseniia Sumarokova). - Corrige des problèmes avec la requête
CREATE DICTIONARYlorsque 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_keypour plusieurs colonnes (provoquait un résultat incorrect avecoptimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1et 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_namede la tablesystem.stack_trace. Cela corrige #24124. #26210 (alexey-milovidov). - Corrige un crash potentiel si plusieurs expressions
untuplesont utilisées. #26179 (alexey-milovidov). - Ne lève pas d’exception dans
toStringpour Nullable Enum si Enum n’a pas de valeur pour zéro, clôt #25806. #26123 (Vladimir C). - Correction d’un
sequence_idincorrect 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êchaitoptimize_skip_unused_shardsde 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_keyà partir d’une colonne sans fonction pourremote()(auparavant,select * from remote('127.1', system.one, dummy)provoquait l’erreurUnknown column: dummy, there are only columns .). #25824 (Azat Khuzhin). - Correction des erreurs
Not found column ...etMissing column ...lors de la sélection depuisMaterializeMySQL. Corrige #23708, #24830, #25794. #25822 (tavplubix). - Correction de
optimize_skip_unused_shards_rewrite_inpour les types nonUInt64(cela pouvait au final sélectionner des shards incorrects ou leverCannot infer type of an empty tupleouFunction 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-testprend 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
Mappour 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_metricsetsystem.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 àatopdans 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 commandeADD INDEXafin 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,UInt256etInt256dans les fonctionsmapAddetmapSubtract. #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 = 1est soumise. #26067 (alexey-milovidov).
Améliorations des performances
- Compilation des fonctions d’agrégation. Utilisez l’option
compile_aggregate_expressionspour 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
Mappour 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 étatsAggregateFunction. #26094 (zhaoyu). - Prendre en charge les arguments de type
UUIDpour les fonctionsemptyetnotEmpty. UnUUIDest 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_LIMITdans 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 contientFINAL, l’optimisationmove_to_prewherene sera activée que sioptimize_move_to_prewhereetoptimize_move_to_prewhere_if_finalsont 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 avecaggregate_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
Dateinvalide. 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’attributfrom_zk,from_envouincl, 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) etON CLUSTER. Closes #24035. #25907 (alexey-milovidov). - Prise en charge de
LowCardinality,DecimaletUUIDpourJSONExtract. Closes #24606. #25900 (Kseniia Sumarokova). - Conversion du fichier d’historique du format
readlineau formatreplxx. #25888 (Azat Khuzhin). - Correction d’un problème pouvant entraîner des parties qui se chevauchent après
DROP PARTou 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 dansReplicationQueue. 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 BYsur un ensemble vide. Closes #6842. #25786 (Kseniia Sumarokova). - Annule les fusions déjà en cours dans une partition lors de
DROP PARTITIONetTRUNCATEpourReplicatedMergeTree. Resolves #17151. #25684 (tavplubix). - Prise en charge du type de données
ENUM`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 ... DETACHet les fusions en arrière-plan. #25605 (Azat Khuzhin). - Fait en sorte que la métrique
NetworkReceiveElapsedMicrosecondsinclue correctement le temps passé à attendre les données du client pourINSERT. Clôt #9958. #25602 (alexey-milovidov). - Prise en charge de
TRUNCATE TABLEpour 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
DatabasedeStorageMerge. 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 startfonctionne sur les systèmes avecsystemd, comme CentOS 8. Clôt #14298. Clôt #17799. #25921 (alexey-milovidov).
Corrections de bugs
- Correction de
SET ROLEincorrect dans certains cas. #26707 (Vitaly Baranov). - Correction d’un déréférencement potentiel de
nullptrdans 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 DICTIONARYsi 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_keypour plusieurs colonnes (entraîne un résultat incorrect avecoptimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1et plusieurs colonnes dans l’expression de clé de sharding). #26353 (Azat Khuzhin). CASTdeDateversDateTime(ouDateTime64) n’utilisait pas le fuseau horaire du typeDateTime. Cela pouvait également affecter la comparaison entreDateetDateTime. L’inférence du type commun pourDateetDateTimen’utilisait pas non plus le fuseau horaire correspondant. Cela affectait les résultats de la fonctionifet 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_namede la tablesystem.stack_trace. Corrige #24124. #26210 (alexey-milovidov). - Corrige
joinGetavec les colonnesLowCarinality, ferme #25993. #26118 (Vladimir C). - Corrige un crash possible dans
pointInPolygonsi le paramètrevalidate_polygonsest 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
abortdans 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_idincorrect 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
Mapavec des clés entières enJSON. #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-256pour 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_keyà partir d’une colonne sans fonction pourremote()(auparavant,select * from remote('127.1', system.one, dummy)provoquait l’erreurUnknown column: dummy, there are only columns .). #25824 (Azat Khuzhin). - Corrige les erreurs
Not found column ...etMissing column ...lors d’une sélection depuisMaterializeMySQL. Corrige #23708, #24830, #25794. #25822 (tavplubix). - Corrige
optimize_skip_unused_shards_rewrite_inpour les types autres que UInt64 (peut à terme sélectionner des shards incorrects ou renvoyerCannot infer type of an empty tupleouFunction tuple requires at least one argument). #25798 (Azat Khuzhin). - Corrige un bug rare dans la requête
DROP PARTpour les tablesReplicatedMergeTree, qui peut entraîner le message d’erreurUnexpected merged part intersecting drop range. #25783 (alesapin). - Corrige un bug dans
TTLavec l’expressionGROUP BYqui empêche d’exécuterTTLaprè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 COLUMNsur les colonnes qui participent aux expressions TTL. #25554 (Anton Popov). - Corrige une assertion dans
PREWHEREavec 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
chowndans le point d’entrée Docker declickhouse-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 surtruelors 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 clauseINrisquent 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
Arraydans les dictionnaires. #25119 (Maksim Kita). - Ajout de la fonction
bitPositionsToArray. Corrige #23792. Auteur : [Kevin Wan] (@MaxWk). #25394 (Maksim Kita). - Ajout de la fonction
dateNamepour renvoyer des noms tels que ‘Friday’ ou ‘April’. Auteur : [Daniil Kondratyev] (@dankondr). #25372 (Maksim Kita). - Ajout de la fonction
toJSONStringpour sérialiser les colonnes dans leur représentation JSON. #25164 (Amos Bird). - Désormais,
query_logcomporte deux nouvelles colonnes :initial_query_start_timeetinitial_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_joinqui fait de tous les IN/JOIN des GLOBAL IN/JOIN par défaut. #23434 (Amos Bird). - Prise en charge des requêtes
ALTER DELETEpour le table engineJoin. #23260 (foolchi). - Ajout de la fonction d’agrégation
quantileBFloat16, ainsi que des fonctions correspondantesquantilesBFloat16etmedianBFloat16. 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 laflow 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
digestde 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 NULLest transformée en lecture de la sous-colonnecol.null. L’optimisation peut être activée en définissant le paramètreoptimize_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_filterpeut être utilisé pour des expressions avec la fonctionhasAnyet 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_bandwidthetmax_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 utilisateurdefault) :max_replicated_fetches_network_bandwidth_for_serveretmax_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-bridgedistincts pour les processus de bridge. Définitoom_score_adjafin 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-keepervers le binaire principalclickhouse. 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 surVIEWutilisent des paramètres locaux, ce qui entraîne des erreurs si les paramètres deCREATE VIEWet deSELECTsont différents. Pour l’instant,VIEWn’utilisera pas ces paramètres modifiés, mais vous pouvez toujours transmettre des paramètres supplémentaires dans la sectionSETTINGSde la requêteCREATE 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êteOPTIMIZE FINAL. Corrige #1820. #24496 (alesapin). - Permet d’utiliser l’opérateur
NOT INpour 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
INSERTdans 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
IntervalpourLowCardinality. 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 fonctionssequenceMatchetsequenceCount. 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
ifavec des typesDecimaletIntdans ses branches. Clôt #20549. Clôt #10142. #25283 (alexey-milovidov). - Mise à jour de l’invite dans
clickhouse-clientet 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
topLevelDomainpour 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
INdans ce cas. #24874 (Amos Bird). - Respect de
max_distributed_connectionspourinsert_distributed_sync(sinon, sur de très grands clusters et avec une insertion synchrone,max_thread_pool_sizepeut être épuisé). #24754 (Azat Khuzhin). - Éviter de masquer des erreurs telles que
Limit for rows or bytes to read exceededpour 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_CACHEest créé à l’aide d’une requête DDL, il ne peut l’être que dans le répertoireuser_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
Filedansclickhouse-localet pour les requêtes INSERT dansclickhouse-clientlorsque 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 tableDistributedinterne (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_columnssur 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_partitionsdans 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êteOPTIMIZE DEDUPLICATE. Ce contournement était nécessaire, carALTER 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 chemintask_path + /statusau 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 tableDistributed. #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
attndimsfonctionne 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
userrenvoie 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 partdans la file de réplication lors d’unalter move/replace partitionconcurrent. 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 REPLICAouSYSTEM SYNC REPLICAne 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
WHEREdans l’optimisation du plan de requête par expression push-down (paramètrequery_plan_filter_push_down = 1par 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
ReplicatedMergeTreepouvait 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 typespour les requêtes avecARRAY JOINlorsqu’un Array est utilisé dans la clé primaire. Corrige #8247. #25546 (Anton Popov). - Correction de totaux erronés pour les requêtes
WITH TOTALSetWITH FILL. Corrige #20872. #25539 (Anton Popov). - Correction d’une data race lors de l’interrogation de
system.clusterspendant le rechargement simultané de la configuration du cluster. #25737 (Amos Bird). - Correction de l’erreur
No such file or directorylors du déplacement d’une tableDistributedentre des bases de données. Corrige #24971. #25667 (tavplubix). REPLACE PARTITIONpouvait ê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
Replicatedqui 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 ASTsans 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
Arrowlors de l’utilisation deDecimal256. Ajout de la prise en charge deDecimal256pour le formatArrow. #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
REPLACElorsqu’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
quantileDeterministicet de fonctions similaires. Cela clôt #20480. #25313 (alexey-milovidov). - Prise en charge de
SimpleAggregateFunction(LowCardinality)pourSummingMergeTree. 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’argumentLowCardinalityétait utilisé avec IN (ce bug est apparu en 21.6). Corrige #25187. #25290 (Nikolai Kochetov). - Corrige le comportement incorrect de
joinGetOrNullavec 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
SELECTavecFINAL. 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
UUIDdans la clé de partition. (Il n’est pas recommandé d’utiliserUUIDdans 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 + 1oub 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 BYnon vide pour exécuter une requête avec une cléGROUP BYvide. #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
NULLdans le protocole de compatibilité PostgreSQL. Résout #22622. #24857 (Kseniia Sumarokova). - Correction d’un bug où l’exception
Mutation was killedpouvait ê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
zstda é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_expressionsest 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
UUIDne peuvent pas être comparées à un entier. Par exemple, au lieu d’écrireuuid != 0, utilisezuuid != '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éesDecimal256. Prise en charge des grands entiers dans les dictionnaires. Prise en charge des fonctionsgcd/lcmpour les grands entiers. Prise en charge des grands entiers dans les fonctions conditionnelles et de recherche dans les tableaux. Prise en charge deLowCardinality(UUID). Prise en charge des grands entiers dans la table functiongenerateRandomet dansclickhouse-obfuscator. Correction d’une erreur lors du renvoi deUUIDdepuis 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 typeUUIDne peuvent pas être comparées à des entiers. Par exemple, au lieu d’écrireuuid != 0, écrivezuuid != '00000000-0000-0000-0000-000000000000'. #23631 (alexey-milovidov). - Prise en charge du type de données
Arraypour l’insertion et la sélection de données aux formatsArrow,ParquetetORC. #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 deDETACH DICTIONARY PERMANENTLY. Ajout de la prise en charge deEXCHANGE DICTIONARIESpour le database engineAtomic. Ajout de la prise en charge du déplacement de dictionnaires entre bases de données à l’aide deRENAME DICTIONARY. #23436 (Maksim Kita). - Ajout de la fonction d’agrégation
uniqThetapour 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êtesINSERT ... SELECTetINSERT ... SELECT ... UNION ALL .... Ferme #22832. #23524 (Kseniia Sumarokova). - Ajout de la prise en charge de l’indication de progression dans
clickhouse-localavec 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 dictionnairehttp. 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êteEXPLAIN PLAN. Lorsqu’il est activé, la sortie de la requête est une unique ligneJSON. Il est recommandé d’utiliser le formatTSVRawpour éviter les échappements inutiles. #23082 (Nikolai Kochetov). - Ajout du paramètre
indexes(booléen, désactivé par défaut) à la requêteEXPLAIN 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 tablesMergeTree*. #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
deltaSumTimestamppour 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
Amélioration des performances
- Le paramètre
compile_expressionsest 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,countetavgdans une requête en une seule fonction d’agrégation. L’optimisation est contrôlée par le paramètreoptimize_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 :sumetcount. #21337 (hexiaoting). - Mise à jour de
zstdvers 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 moteurBuffer. #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_remoteest 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
regionpour 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
DateTimes’il n’est pas fourni explicitement. Par exemple, si vous ajoutez une seconde à une valeur de typeDateTimesans fuseau horaire, elle restera unDateTimesans 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 avecSphinxou 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
now64prend 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 foundlors de l’arrêt du serveur pendant le flush final du moteurBuffer). #24068 (Azat Khuzhin). - Flush les tables
Bufferavant 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’erreurDestination table default.a_data_01870 doesn't exist. Block of data is discardeddans le log). #24067 (Azat Khuzhin). - Désormais,
prefer_column_name_to_alias = 1privilégiera également les noms de colonne pourgroup by,havingetorder by. Cela corrige #23882. #24022 (Amos Bird). - Ajout de la prise en charge de
ORDER BY WITH FILLavecDateTime64. #24016 (kevin wan). DateTime64peut désormais être utilisé comme version column dansReplacingMergeTree. #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_ratedanssystem.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 tablerabbitmq_queue_consumeest défini sur1, 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_bytesdanssystem.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.tablesne passent plus par ZooKeeper. #23793 (Fuwang Hu). - Respect de
lock_acquire_timeout_for_background_operationspour les queryOPTIMIZE. #23623 (Azat Khuzhin). - Possibilité de modifier les Settings du disk
S3à l’exécution via la nouvelle commande SQLSYSTEM 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 tableDistributedlevait 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_connectionsconfiguré à zéro sera traité comme la valeur minimum possible (un). #23348 (Azat Khuzhin). min_bytes_to_use_mmap_ioest désormais désactivé par défaut. #23322 (Azat Khuzhin).- Prise en charge de la nullabilité de
LowCardinalityavecjoin_use_nulls, corrige #15101. #23237 (vdimir). - Ajout de la possibilité de restaurer des parts
MergeTreedans le répertoiredetachedpour le disqueS3. #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_rowsetexternal_storage_max_read_rowspour 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
Parquetdans les tablesKafka. #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 REPLICAouSYSTEM 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 = 1pour corriger l’échec des mutations sur les tablesMemory. 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
HDFSdevenait 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
Nestedavec 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 PIPELINEavecSELECT xxx FINALaffichait un pipeline incorrect. (hexiaoting). - Correction de l’utilisation d’une valeur constante
DateTimepar rapport à une colonneDateTime64dansWHERE. #24100 (Vasily Nemkov). - Correction d’un crash dans merge JOIN, corrige #24010. #24013 (vdimir).
- Certaines requêtes
ALTER PARTITIONpouvaient provoquer les erreursPart A intersects previous part BetUnexpected merged part C intersecting drop range Ddans 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
CACHEavec des doublons dans la source (ce qui entraîne des débordementsDictCacheKeysRequestedMiss). #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 = 2avecGROUP BYet 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’utiliserdistributed_group_by_no_merge = 2avec des window functions. Désactiveoptimize_distributed_group_by_sharding_keypour 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 pipepour les requêtes avecGLOBAL IN/JOINetuse_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
Valuesest 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
ReplicatedMergeTreeobsolète. Certaines mises à jour de métadonnées pouvaient être ignorées par une réplique obsolète si une requêteALTERétait exécutée pendant l’indisponibilité de la réplique. #23742 (tavplubix). - Correction d’un bug avec
JoinetWITH TOTALS, corrige #17718. #23549 (vdimir). - Correction d’une possible erreur
Block structure mismatchpour les requêtes avecUNION, 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_inest 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 nombre9223372036854775808n’est pas représentable exactement en nombre à virgule flottante (et9223372036854775808.0est arrondi à9223372036854776000.0). Mais dans la version précédente, la comparaison indiquait que les nombres étaient égaux, car si le nombre à virgule flottante9223372036854776000.0est reconverti en UInt64, il donne9223372036854775808. À 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
argMinetargMaxpour un unique argumentTuple. 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 fonctiondictGetChildrenrenvoie tous les enfants sous la forme d’un tableau d’indices. Il s’agit de la transformation inverse dedictGetHierarchy. La fonctiondictGetDescendantsrenvoie tous les descendants comme sidictGetChildrenétait appliquée récursivementlevelfois. Une valeurlevelégale à zéro équivaut à l’infini. Amélioration des performances des fonctionsdictGetHierarchyetdictIsIn. Clôt #14656. #22096 (Maksim Kita). - Ajout de la fonction
dictGetOrNull. Elle fonctionne commedictGet, mais renvoieNULLsi 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 depuiss3sur 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_depthqui limite la profondeur des requêtes récursives vers les tablesDistributed. Clôt #20229. #21942 (flynn).
Amélioration des performances
- Performances de
intDivaméliorées grâce au dispatch dynamique pour AVX2. Cela résout #22314. #23000 (alexey-milovidov). - Performances de lecture du format d’entrée
ArrowStreamamé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 toujoursoptimize_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
nanodbcau lieu dePoco::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_windowpour la déduplication des insertions dans MergeTree non répliqué. #22514 (alesapin). - Met à jour les chemins vers les configurations du modèle
CatBoostlors du rechargement de la configuration. #22434 (Kruglov Pavel). - Ajout de la prise en charge du type
Decimal256dans les dictionnaires.Decimal256est une fonctionnalité expérimentale. Clôt #20979. #22960 (Maksim Kita). async_socket_for_remoteest 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
unhexinsensible à la casse pour assurer la compatibilité avec MySQL. #23229 (alexey-milovidov). - Implémente les fonctions
arrayHasAny,arrayHasAll,has,indexOf,countEqualpour le cas générique où les types des éléments du Array diffèrent. Dans les versions précédentes, les fonctionsarrayHasAnyetarrayHasAllrenvoyaient false, tandis quehas,indexOfetcountEquallevaient une exception. Ajoute également la prise en charge deDecimalet des types entiers de grande taille dans les fonctionshaset 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_shardspour 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_securepeut être utilisé pour une interaction sécurisée entre le client et le keeper-server.keeper_server.raft_configuration.securepeut ê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_threadspourReplicatedMergeTree. #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).
dateDifffonctionne désormais avec des argumentsDateTime64(même pour des valeurs hors de la plage deDateTime) #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-clientsi le programme précédent a laissé des artefacts dans le terminal. Cela corrige #16518. #22634 (alexey-milovidov). - Rend le comportement de la fonction
roundcohé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-bridgepour 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
ArrowetArrowStream. #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_allocateddans 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 pipepour les requêtes avecGLOBAL IN/JOINlorsque le paramètreuse_hedged_requestsest 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’ununknown packetétait reçu depuis une requête distante (avecasync_socket_for_remoteactivé). Corrige #21167. #23309 (Nikolai Kochetov). - Correction du comportement où la désactivation du paramètre
input_format_with_names_use_headerfaisait 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_hashedsiupdate_fieldest spécifié. Clôt #23800. #23824 (Maksim Kita). - Correction d’un crash lorsque
PREWHEREet 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
LIKEavec 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
COLUMNSdans 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 commeIncomplete 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
deltaSumproduisait un résultat incorrect après la réinitialisation du compteur. #23437 (Russ Frank). - Correction de l’erreur
Cannot unlink filelors 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_r611888913. #23366 (Amos Bird).
- Correction d’un crash lorsque
join_algorithmest 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 existlors 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 columnlors d’une sélection depuisMaterializeMySQLavec 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 profildefault; 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 existlors 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 resultqui peut se produire si une sous-requête utiliseuntuple. Corrige #22290. #22991 (Nikolai Kochetov). - Correction de l’utilisation de colonnes constantes de type
Mapavec des valeurs nullables. #22939 (Anton Popov). - Correction de
formatDateTime()surDateTime64et du spécificateur de format “%C” ; correction detoDateTime64()pour les grandes valeurs et une échelle non nulle. #22937 (Vasily Nemkov). - Correction d’un crash lors de l’utilisation de
mannWhitneyUTestetrankCorravec 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
HAVINGlorsque 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 fonctionmapdans 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_defaultsur 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
LowCardinalitydans 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_orderest activé et qu’il y a beaucoup de parts dans la table. Améliore légèrement les performances de l’agrégation lorsqueoptimize_aggregation_in_orderest 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
Mergedans les requêtes avecJOINet agrégation. Clôt #18368, clôt #22226. #21370 (Vladimir). - Correction des collisions de noms dans l’optimisation de pushdown. Cela provoquait un filtrage
WHEREincorrect après FULL JOIN. Clôt #20497. #20622 (Vladimir). - Correction d’un bug très rare où un insert avec quorum avec
quorum_parallel=1n’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
openldapinclus dans le bundle surppc64le#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
jemallocavec prise en charge du profilage du tas. #22834 (nvartolomei). - Évitement d’un UB dans les engines
*Loglors 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
toStartOfIntervalFunctionalignera 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:59et22:00:00..23:59:59. Ce comportement est plus adapté aux usages pratiques. Cela corrige #9510. #22060 (alexey-milovidov).AgeetPrecisiondans 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
keysde la tablesystem.dictionariesa été remplacée par les colonneskey.namesetkey.types. Les colonneskey.names,key.types,attribute.names,attribute.typesde la tablesystem.dictionariesne 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 dossiersdetached/avant de récupérer les données depuis d’autres répliques. Comme détail d’implémentation, une nouvelle commandeATTACH_PARTest 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 ... ATTACHdans la nouvelle version, car les anciens serveurs ne pourraient pas traiter l’entréeATTACH_PARTdans le journal répliqué.
- Les requêtes
- 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émentremote_url_allow_hostsvide dans le fichier de configuration, supprimez-le. #20058 (Vladimir Chebotarev).
Nouvelle fonctionnalité
- Extension de la plage de
DateTime64pour prendre en charge les dates de 1925 à 2283. Prise en charge améliorée deDateTimeautour 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_aliaspour 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 fonctiondictGetChildrenrenvoie tous les enfants sous la forme d’un tableau d’index. Il s’agit d’une transformation inverse dedictGetHierarchy. La fonctiondictGetDescendantsrenvoie tous les descendants comme sidictGetChildrenavait été appliquée récursivementlevelfois. Une valeurlevelé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 moteurDictionary. Closes #21560. #21910 (Maksim Kita). - Prise en charge du type
Nullablepour l’attributPolygonDictionary. #21890 (Maksim Kita). - Les fonctions
dictGet,dictHasutilisent 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 commedictGet, mais renvoieNullsi 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 typeNullabledans les dictionnairesCache,ComplexKeyCache,SSDCache,SSDComplexKeyCache. Ajout de la prise en charge de la récupération de plusieurs attributs avec les fonctionsdictGet,dictGetOrDefault. Fixes #21517. #20595 (Maksim Kita). - Prise en charge de la fonction
dictHaspourRangeHashedDictionary. Fixes #6680. #19816 (Maksim Kita). - Ajoute la fonction
timezoneOf, qui renvoie le nom du fuseau horaire des types de donnéesDateTimeouDateTime64. Cela ne résout pas #9959. Corrige les incohérences dans les noms de fonctions : ajoute les aliastimezoneettimeZone, ainsi quetoTimezoneettoTimeZone, ettimezoneOfettimeZoneOf. #22001 (alexey-milovidov). - Ajoute la nouvelle clause optionnelle
GRANTEESpour les commandesCREATE/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 ANYest 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 deerrors_countdanssystem.clusters. #21480 (Kruglov Pavel). - Ajoute la colonne virtuelle
_partition_idpour les enginesMergeTree*. Permet d’élaguer les partitions par_partition_id. Ajoute la fonctionpartitionID()pour calculer la chaîne d’identifiant de partition. #21401 (Amos Bird). - Ajoute la fonction
isIPAddressInRangepour 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 functionslagInFrame/leadInFrame, analogues àlag/lead, mais qui respectent la frame de la window. Elles sont identiques lorsque la frame estbetween unbounded preceding and unbounded following. Cela résout #5485. #21895 (Alexander Kuzmenkov). - Réplication zero-copy pour
ReplicatedMergeTreesur 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-localet partout ailleurs. #21630 (Nikita Mikhaylov). - Prise en charge de l’analyse en parallèle pour les formats
CSVWithNamesetTSVWithNames. 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 codecNONEest globalement peu utile - il est recommandé de toujours utiliser la compression (LZ4est 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 codecNONEest utile dans certains cas : - lorsque les données ne sont pas compressibles ; - pour des benchmarks synthétiques. #22145 (alexey-milovidov). GROUP BYplus rapide avec une faible valeur demax_rows_to_group_byetgroup_by_overflow_mode='any'. #21856 (Nikolai Kochetov).- Optimisation des performances des requêtes du type
SELECT ... FINAL ... WHERE. Désormais, dans les requêtes avecFINAL, il est possible de déplacer versPREWHEREles colonnes appartenant à la clé de tri. #21830 (foolchi). - Amélioration des performances grâce au remplacement de
memcpypar 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_orderactivé). #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,RevokeetSystemdans la colonnequery_kindpour les queries correspondantes danssystem.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
rangeavec un argumentUInt256(la prise en charge des grands entiers est Experimental). Cela clôt #22157. #22387 (alexey-milovidov). - Ajout de la colonne
current_databaseà la tablesystem.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érateurIN, avec des tuples de valeurs non-NULL à droite, par exempleSELECT (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 commeSELECT (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()etVERSION(). Cela corrige #22028. #22042 (Eugene Klimov). - Ajout de l’option
strict_increaseà la fonctionwindowFunnelpour ne calculer chaque événement qu’une seule fois (résout #21835). #22025 (Vladimir). - Si la clé de partition d’une table
MergeTreen’inclut pas de colonnesDateouDateTime, mais inclut exactement une colonneDateTime64, exposition de ses valeurs dans les colonnesmin_timeetmax_timedes tablessystem.partsetsystem.parts_columns. Ajout des colonnesmin_timeetmax_timeà la tablesystem.parts_columns(il y avait une incohérence avec la tablesystem.parts). Cela clôt #18244. #22011 (alexey-milovidov). - Prise en charge du paramètre
replication_alter_partitions_sync=1dansclickhouse-copierpour 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
EmbeddedRocksDBdans 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
ArrayetMapdans 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_versionsur 2 pour l’activer. Ajout du paramètredistributed_ddl_output_mode. Modes pris en charge :none,throw(par défaut),null_status_on_timeoutetnever_throw. Corrections et améliorations diverses pour le moteur de base de donnéesReplicated. #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/remotedanssystem.errors. #21529 (Azat Khuzhin). - Ajout des alias
simpleJSONExtract/simpleJSONHaspourvisitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String}. Corrige #21383. #21519 (fastio). - Ajout du paramètre
optimize_skip_unused_shards_limitpour limiter le nombre de valeurs de clé de sharding pouroptimize_skip_unused_shards. #21512 (Azat Khuzhin). - Amélioration de
clickhouse-formatpour 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 deASTInsertQueryavec 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 JOINenINNER JOIN. #20392 (Vladimir). - Ne crée plus de parts vides lors d’un INSERT lorsque le paramètre
optimize_on_insertest 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_ERRORlorsqu’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
HedgedConnectionsafin 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
SELECTa une conditionWHEREconstante 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=0etasync_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_portn’est pas présent dans la configuration. #22132 (Ewout). - Corrige l’erreur
Invalid number of rows in ChunkdansJOINavecTOTALSetarrayJoin. 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
OPTIMIZEetALTERpour les moteurs de tableReplicatedMergeTree. 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_requestspour les noyaux Linux bogués. #22109 (Azat Khuzhin). - Point d’entrée Docker : évite le
chownde.lorsqueLOG_PATHest vide. Clôt #22100. #22102 (filimonov). - La fonction
decryptne vérifiait pas la taille minimale des données chiffrées en modeAEAD. Cela clôt #21897. #22064 (alexey-milovidov). - Dans de rares cas, une fusion pour
CollapsingMergeTreepeut créer un granule avecindex_granularity + 1lignes. De ce fait, la vérification interne, ajoutée dans #18928 (affecte 21.2 et 21.3), peut échouer avec l’erreurIncomplete 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 BYincorrects 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
WHEREouHAVINGest poussée avantGROUP 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
ReplicatedMergelorsque la requêteALTER MODIFY COLUMNne modifie pas le type d’une columnDecimalsi sa taille (32 bits ou 64 bits) reste inchangée. #21728 (alesapin). - Corrige une attente infinie possible lorsque
OPTIMIZEetDROPsont exécutés concurremment surReplicatedMergeTree. #21716 (Azat Khuzhin). - Corrige la fonction
arrayElementavec le typeMappour les arguments entiers constants. #21699 (Anton Popov). - Corrige un SIGSEGV sur des attributes inexistants de
ip_trieavecaccess_to_key_from_attributes. #21692 (Azat Khuzhin). - Le server n’accepte désormais les connections qu’après l’initialisation de
DDLWorkeret 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) avecasync_socket_for_remote=1. #21643 (Azat Khuzhin). - Correction de
fsync_part_directorypour la fusion horizontale. #21642 (Azat Khuzhin). - Suppression des colonnes inconnues de la table jointe dans
WHEREpour 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 columnlorsqueoptimize_skip_unused_shardsest activé et qu’aucun shard n’est utilisé. #21579 (Azat Khuzhin). - Si une query comporte une condition
WHEREconstante et que le paramètreoptimize_skip_unused_shardsest 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
clusterAllReplicasrenvoyait une valeur_shard_numincorrecte. 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
SecureSocketde Poco. #21456 (Nikita Mikhaylov). - Correction de l’analyse du format
AvropourKafka. 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_tablene fonctionnait pas pourMATERIALIZED VIEW; c’est corrigé. Corrige #18943. #20626 (tavplubix). - Correction des collisions de noms dans
PredicateRewriteVisitor. Cela provoquait un filtrageWHEREincorrect 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 surppc64leavec Clang. #22476 (Kfir Itzhak). Correction de la compilation de Boost surppc64le. #22474 (Kfir Itzhak). Correction de l’erreur CMake liée à la variable interneCMAKE_ASM_COMPILE_OBJECT, non définie surppc64le. #22469 (Kfir Itzhak). Correction du problème empêchant Fedora/RHEL/CentOS de trouverlibclang_rt.builtinssurppc64le. #22458 (Kfir Itzhak). Activation de la compilation avecjemallocsurppc64le. #22447 (Kfir Itzhak). Correction de l’intégration de la config de ClickHouse et du fuseau horaire de cctz surppc64le. #22445 (Kfir Itzhak). Correction de la compilation surppc64leet utilisation du bon registre de pointeur d’instruction surppc64le. #22430 (Kfir Itzhak). - Réactivation de la bibliothèque S3 (AWS) sur
aarch64. #22484 (Kfir Itzhak). - Ajout de
tzdataaux conteneurs Docker, car la lecture des formatsORCl’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-lda été remplacée par--ld-pathpour clang. #21597 (Ilya Yatsishin). - Mise à jour de
docker/test/testflows/runner/dockerd-entrypoint.shpour 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
TTLlorsque 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 dansTTLavecGROUP BY. Changement non rétrocompatible : pour les colonnes de clé primaire qui ne figurent pas dansGROUP BYet ne sont pas définies explicitement, la fonctionanyest désormais appliquée à la place demaxà l’expiration du TTL. De plus, si vous utilisez TTL avecWHEREouGROUP 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_existsetengine_file_truncate_on_insert. #20620 (M0r64n). - Ajout de la fonction d’agrégation
deltaSumpour additionner les différences entre lignes consécutives. #20057 (Russ Frank). - Nouvelle colonne
event_time_microsecondsdans la tablesystem.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_idpour prendre en charge l’insertion de données dans un shard spécifique depuis une table distribuée. #19961 (flynn). - La fonction
reinterpretAsa é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_keypour la source de dictionnaireexecutable. 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_selectsetquery_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ètremax_concurrent_querieslimite le nombre de requêtes exécutées simultanément liées à cette table. Le paramètremin_marks_to_honor_max_concurrent_queriesindique 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
filepour lire un fichier du répertoire user_files en tant que String. Elle est différente de la fonction de tablefile. 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_requestsest 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élaihedged_connection_timeoutou si aucune donnée n’a été reçue dans le délaireceive_data_timeout. La requête utilise la première connexion qui envoie un paquet de progression non vide (ou un paquet de données, siallow_changing_replica_until_first_data_packet) ; les autres connexions sont annulées. Les requêtes avecmax_parallel_replicas > 1sont 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_efficientest 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
Memorydans 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
compresspour les tablesMemory. 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/modulopour 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_finalest défini sur 1. #19375 (Kruglov Pavel). - Ne remplir que les colonnes demandées lors des requêtes sur
system.partsetsystem.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 (comme1111111111222au lieu de1111111111.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 DISTRIBUTEDsans 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,SSDCacheDictionaryetSSDComplexKeyDictionarypour utiliser LRUHashMap comme index sous-jacent. #20164 (Maksim Kita). - Le paramètre
access_managementpeut désormais être configuré au démarrage viaCLICKHOUSE_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 tablesystem.zookeeper. #20105 (小路). - Affichage des détails complets des tables
MaterializeMySQLdanssystem.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
JSONExtracten demandant le typeFloat32, une conversion imprécise vers le type de résultat est désormais autorisée. Par exemple, le nombre0.1en 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
MaterializeMySQLdanssystem.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_insertetbytes_to_throw_insertpour le moteurDistributedont é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::ColumnLowCardinalitylors de l’insertion dans une table comportant une colonneLowCardinalitydepuis le formatValues. Corrige #21140 #21357 (Nikolai Kochetov). - Correction d’un interblocage dans les mutations
ALTER DELETEpour 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 COLUMNprendront 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_nullset la jointure deTOTALSà partir de sous-requêtes. Cela clôt #19362 et #21137. #21248 (vdimir). - Correction d’un crash dans
EXPLAINpour une requête avecUNION. 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_defaultlorsque 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
DateTime64spé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 COLUMNcré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
-Distinctavec le combinator-Statedans 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
transformne 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_ERRORavecjoin_use_nulls=1lorsque JOIN contient une constante issue de SELECT. #20461 (Azat Khuzhin). - Vérifie si la fonction de table
viewest 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
DROPouRENAMEpour les moteurs de table*CollapsingMergeTreeetReplacingMergeTree. #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
MergeTreequi 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 typeTuple. Le typeTupledoit contenir unArrayou un autre type complexe. Corrige #18356. #20133 (alesapin). - Le table engine
MongoDBn’établit désormais une connexion qu’au moment de lire des données.ATTACH TABLEn’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).
EmbeddedRocksDBest 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
fromModifiedJulianDaylorsque le type de l’argument estNullable(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 CLUSTERpouvait 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
stdoutetstderrdans 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/gcdpour 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 pourOPTIMIZE 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 dictionnairePostgreSQL. Ajout du moteur de base de donnéesPostgreSQL. #18554 (Kseniia Sumarokova). - Le type de données
Nestedprend désormais en charge des niveaux d’imbrication arbitraires. Introduction des sous-colonnes de types complexes, telles quesize0dansArray,nulldansNullableet les noms des éléments deTuple, qui peuvent être lues sans lire la colonne entière. #17310 (Anton Popov). - Ajout de la prise en charge de
NullablepourFlatDictionary,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
clusteret, pour les deux fonctions de tableremoteetcluster, 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
decodeXMLComponentpour décoder les caractères XML. Exemple :SELECT decodeXMLComponent('Hello,"world"!')#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
formatDateTimeprend en charge le modificateur%Qpour 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 simap.keysinclut la clé fournie en second paramètre. 2.mapKeys(map)renvoie toutes les clés au formatArray3.mapValues(map)renvoie toutes les valeurs au formatArray. #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
argMinetargMax. #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. InterfaceIDiskplus sûre. Cela clôt #19065. #19086 (alexey-milovidov). - Les alias déclarés dans l’instruction
WITHsont correctement utilisés dans l’analyse des index. Les requêtes du typeWITH 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()etsum(if())en fonctioncountIf()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
longde 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
Filterdu query plan en une paireExpression + Filter. Avec l’optimisation de fusionExpression + Expression(#17458), cela peut retarder l’exécution de certaines expressions après l’étapeFilter. #19253 (Nikolai Kochetov).
Amélioration
SELECT count() FROM tablepeut désormais être exécuté s’il est possible de sélectionner au moins une colonne quelconque de latable. Cette PR corrige #10639. #18233 (Vitaly Baranov).- Le jeu de caractères est désormais défini sur
utf8mb4lors des interactions avec des serveurs MySQL distants. Corrige #19795. #19800 (alexey-milovidov). - La table function
S3prend désormais en charge le mode de compressionauto(détection automatique). Cela clôt #18754. #19793 (Vladimir Chebotarev). - La fonction
formatReadableTimeDeltaaffiche 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
S3utilisera 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_remoteest 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
toIPv6parse les adressesIPv4. #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
IPv4dans 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_usagesans redémarrage. Cela résout #18154. #19186 (alexey-milovidov). - L’Exception levée lorsque la fonction
barest 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 exceedlors 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
normalizeQueryKeepNamesetnormalizedQueryHashKeepNamespour 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
RIGHTetFULL JOINde tables contenant des états de fonctions d’agrégation. Dans les versions précédentes, une exception liée à la méthodecloneResizedé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 tablesLIVE VIEW. #14822 (vzakaznikov). - Restreint les requêtes
MODIFY TTLsur les tablesMergeTreecréé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
ifdont le résultat des branches then/else est de typeTuple. Le typeTupledoit contenirArrayou 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).
EmbeddedRocksDBest 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
fromModifiedJulianDaylorsque le type de l’argument estNullable(T)pour tout type entier autre que Int32. #19959 (PHO). - La fonction
greatCircleAnglerenvoyait 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 CLUSTERpouvait 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’exceptionAttempt 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
groupUniqArrayrenvoie 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 functionlors de l’utilisation de la fonctionignoreavec un argumentLowCardinality. Corrige #14275. #19016 (Nikolai Kochetov). - Correction de l’insertion d’une colonne
LowCardinalitydans une table avec le moteurTinyLog. 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 columnscausée par la fusion des étapesExpressiondu 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, avecasync_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
bitmapOrCardinalityqui pouvait entraîner un déréférencement de pointeur nul. Cela clôt #18911. #18912 (sundyli). - Corrige l’erreur
Attempt to read after eoflors d’une tentative deCASTdeNULLdepuisNullable(String)versNullable(Decimal(P, S)). Désormais, la fonctionCASTrenvoieNULLlorsqu’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
positionCaseInsensitiveUTF8a déclenché AddressSanitizer. #19720 (alexey-milovidov). - Suppression de
--project-directorypour 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,substringetarraySum. 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
WHEREouPREWHERE. 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
neighborpour l’argumentLowCardinality. 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 SYNCpouvait 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
ALTERetDROPconcurrentes pouvaient se bloquer pendant le traitement d’une table ReplicatedMergeTree. #19237 (alesapin). - Correction de l’erreur
There is no checkpointlors de l’insertion de données via l’interface HTTP en utilisant le formatTemplateouCustomSeparated. 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
MOVEouREPLACE PARTITIONou, dans de rares cas, aprèsDETACHouDROP 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_defaultest 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 SETTINGafin d’empêcher la modification des paramètres de stockage qui affectent les data parts (write_final_marketenable_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 fonctionsavgetavgWeighted. Autorise également l’utilisation de types différents (entier, décimal, virgule flottante) pour la valeur et le poids dans la fonctionavgWeighted. Il s’agit d’un changement incompatible avec les versions précédentes : désormais, les fonctionsavgetavgWeightedrenvoient toujoursFloat64(comme indiqué dans la documentation). Avant ce changement, le return type des argumentsDecimalétait aussiDecimal. #15419 (Mike). - L’expression
toUUID(N)ne fonctionne plus. Remplacez-la partoUUID('00000000-0000-0000-0000-000000000000'). Ce changement est motivé par les résultats peu intuitifs detoUUID(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
inclvers 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 attributsincl="..."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 TABLEetCREATE OR REPLACE TABLE. #18521 (tavplubix). - Implémentation de
UNION DISTINCTet traitement de la clauseUNIONsimple commeUNION DISTINCTpar défaut. Ajout d’un paramètreunion_default_modequi permet de le traiter commeUNION ALLou 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 expressionsx 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
*.zstpour l’import et l’export de données. Cela permet d’utiliser*.zstdans la fonctionfile()etContent-encoding: zstddans le client HTTP. Cela corrige #16791 . #17144 (Abi Palagashvili). - Ajout des fonctions d’agrégation
mannWitneyUTest,studentTTestetwelchTTest. Légère refactorisation derankCorr. #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_kindetnormalized_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 SETTINGSpour afficher les paramètres dans system.settings. L’instructionSHOW CHANGED SETTINGSet la clauseLIKE/ILIKEsont également prises en charge. #18056 (Jianmei Zhang). - La fonction
positionprend désormais en charge la syntaxePOSITION(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_logpour les parties insérées. Clôt #10097. #18644 (flynn). - Autorise
CREATE TABLE AS SELECTavec 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é dansuser_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_sizeetmax_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 ... DEDUPLICATEpour 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,toModifiedJulianDayOrNulletfromModifiedJulianDayOrNull. 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
firstSignificantSubdomainCustometcutToFirstSignificantSubdomainCustom. #17748 (Azat Khuzhin). - Ajout de la prise en charge du protocole
PROXYv1pour encapsuler l’interface TCP native. Permet d’utiliser l’adresse IP transmise par le proxy comme clé de quota (pour l’adressePROXYv1comme pourX-Forwarded-Forde 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-clientpermet d’ouvrirEDITORpour modifier les commandes.Alt-Shift-E. #17665 (Amos Bird). - Ajout de la fonction
encodeXMLComponentpour é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
limitetoffsetpour 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 typesSimpleAggregateFunctionvia 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-filepourclickhouse-clientetclickhouse-local. #15930 (Maksim Kita). - Ajout du paramètre
querypourclickhouse-benchmark. #17832 (Maksim Kita). EXPLAIN ASTprend désormais en charge des requêtes autres queSELECT. #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
bitHammingDistanceettupleHammingDistanceont également été ajoutées. #7649 (flynn). - Ajout d’un nouveau type de données
Map. Voir #1841. La première version deMapne prend en charge que le typeStringpour 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-localpour l’exécuter sans tables système. Cela évite l’initialisation deDateLUT, qui peut prendre un temps notable (des dizaines de millisecondes) au démarrage. #18899 (alexey-milovidov). - Remplacement de
PODArrayparPODArrayWithStackMemorydansAggregateFunctionWindowFunnelDatapour améliorer les performances de la fonctionwindowFunnel. #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
-Ifest maintenant dévirtualisé, etcountest correctement vectorisé. Voir cette PR. #17043 (Amos Bird). - Correction des performances de lecture depuis des tables
Mergesur un très grand nombre de tablesMergeTree. 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 = 1etmax_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_prewhereavec 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 SELECTdans la même table avec les moteurs de tableTinyLogouLog. 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 * Floatou inversement sont autorisées, y compris les requêtes d’agrégation (par ex.SELECT sum(decimal_field * 1.1)ouSELECT 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
closeau 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
windowFunnellorsque 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 KILLfonctionne 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
SimpleAggregateFunctiondansSummingMergeTree. 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)enTypeet inversement. Ajout également de la possibilité de modifier le type d’une colonne de clé primaire deEnumXenIntX. 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 installpeut 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,Int256etUInt256pour l’agrégation de tableauxarrayMin,arrayMax,arraySum,arrayAvg. #18147 (Maksim Kita). - Ajout de
diskaux 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ègeSELECTsur 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.tablesetsystem.columnsque dans les sessions où elles ont été créées. La base de données interne_temporary_and_external_tablesest 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’indicateuris_temporaryactivé. #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=0interdit l’utilisation des fonctions d’introspection, mais n’empêche plus l’attribution de privilèges les concernant (le bénéficiaire devra définirallow_introspection_functions=1pour lui-même afin de pouvoir utiliser ce privilège). De même,allow_ddl=0interdit 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
RabbitMQs’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_columnsetasterisk_include_alias_columnssont 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>dansconfig.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
interfacede la tablesystem.query_log) :4pour MySQL et5pour PostgreSQL, au lieu de1, 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
receiveHellocôté serveur pour éviter l’exceptionAttempt 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
setfonctionneront avecGLOBAL 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
-OrNullest combiné avec les combinateurs-If,-Merge,-MergeState,-State, il faut placer-OrNullen 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,
~/.awsetAssumeRolepour 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
Atomicpour la base de données imbriquée du moteurMaterializeMySQL. #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 threadsdans 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’exceptionAttempt to read after EOF. Corrige #18340. #19101 (alesapin). - Restreint les requêtes
MODIFY TTLpour les tablesMergeTreecréé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
groupUniqArrayrenvoie 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 functionlors de l’utilisation de la fonctionignoreavec un argumentLowCardinality. Corrige #14275. #19016 (Nikolai Kochetov). - Correction de l’insertion d’une colonne
LowCardinalitydans une table utilisant le moteurTinyLog. 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 étapesExpressiondu 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
bitmapOrCardinalitypouvant 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
*Ifavec 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_methodest défini globalement sur une valeur autre quedefault. Cela corrige #18741. #18776 (alexey-milovidov). - Correction de l’erreur
Attempt to read after eoflors d’une tentative deCASTdeNULLdepuisNullable(String)versNullable(Decimal(P, S)). La fonctionCASTrenvoie désormaisNULLlorsqu’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
ReplicatedMergeTreecréé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
Dateest 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 stucklors de l’utilisation deORDER BYaprès une sous-requête avec une jointureRIGHTouFULL. #18550 (Nikolai Kochetov). - Correction d’un bug pouvant entraîner le blocage de requêtes
ALTERaprè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 shortlors de l’exécution des fonctionstoType(...)(toDate,toUInt32, etc.) avec un argument de typeNullable(String). Désormais, ces fonctions renvoientNULLen 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
-SimpleStategé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
SetouJoinet de selects depuissystem.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-bridgeest 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 tablepeut 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 JOINrequiert désormais le privilègeSELECTsur 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 FILLetWITH 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 profilelors 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 TTLne supprime pas réellement le TTL de la colonne. #18130 (alesapin). - Correction de
std::out_of_range: basic_stringlors de l’analyse des URL S3. #18059 (Vladimir Chebotarev). - Correction de la comparaison entre
DateTime64etDate. 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.sizeavec 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_walest 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 implementedlors de l’exécution d’une requêteRENAMEdans une base de donnéesAtomic, 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 lorsquepool_size> 1. Ce problème a été corrigé. #17640 (tavplubix). - Correction du problème de table
system.stack_tracevide lorsque le serveur s’exécute en mode daemon. #17630 (Amos Bird). - L’Exception
fmt::v7::format_errorpouvait ê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 BYavec le paramètreoptimize_redundant_functions_in_order_byactivé. #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
JOINavec des typesLowCardinality. 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 clientpour les requêtes distribuées avecLIMIT. #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_keypour une requête avecOFFSETuniquement. #16996 (Azat Khuzhin). - Corrige les requêtes issues de tables
Mergesur des tablesDistributedavec 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
DateTime64avec 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_keysactivé 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_queryest 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_consistencypour la requête trivial count optimisée et les tables système. #16309 (Hao Chen). - Déclenche une erreur lorsque le transformateur de colonne
REPLACEs’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
OpenSSLparBoringSSL. 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 SUSPENDpour 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é quelldne 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 demasterversmain). #18192 (Stig Bakken). - Désormais,
clickhouse-testexé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
libcpar 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).