Version 18.16 de ClickHouse
Version de ClickHouse 18.16.1, 2018-12-21
Correction de bug :
- Correction d’une erreur à l’origine de problèmes lors de la mise à jour de dictionnaires à partir d’une source ODBC. #3825, #3829
- La compilation JIT des fonctions d’agrégation fonctionne désormais avec les colonnes LowCardinality. #3838
Améliorations :
- Ajout du paramètre
low_cardinality_allow_in_native_format(activé par défaut). Lorsqu’il est désactivé, les colonnes LowCardinality sont converties en colonnes ordinaires pour les requêtes SELECT, et des colonnes ordinaires sont attendues pour les requêtes INSERT. #3879
Améliorations de la compilation :
- Correctifs pour la compilation sur macOS et ARM.
Version de ClickHouse 18.16.0, 2018-12-14
Nouvelles fonctionnalités :
- Les expressions
DEFAULTsont évaluées pour les champs manquants lors du chargement des données dans des formats d’entrée semi-structurés (JSONEachRow,TSKV). Cette fonctionnalité est activée via le paramètreinsert_sample_with_metadata. #3555 - La requête
ALTER TABLEprend désormais en charge l’actionMODIFY ORDER BYpour modifier la clé de tri lors de l’ajout ou de la suppression d’une colonne d’une table. Cela est utile pour les tables de la familleMergeTreequi effectuent des opérations supplémentaires lors de la fusion en fonction de cette clé de tri, commeSummingMergeTree,AggregatingMergeTree, etc. #3581 #3755 - Pour les tables de la famille
MergeTree, vous pouvez désormais spécifier une clé de tri (ORDER BY) et un index (PRIMARY KEY) distincts. La clé de tri peut être plus longue que l’index. #3581 - Ajout de la fonction de table
hdfset du moteur de tableHDFSpour l’import et l’export de données vers HDFS. chenxing-xc - Ajout de fonctions pour travailler avec le base64 :
base64Encode,base64Decode,tryBase64Decode. Alexander Krasheninnikov - Vous pouvez désormais utiliser un paramètre pour configurer la précision de la fonction d’agrégation
uniqCombined(sélection du nombre de cellules HyperLogLog). #3406 - Ajout de la table
system.contributors, qui contient les noms de tous les contributeurs ayant effectué des commits dans ClickHouse. #3452 - Ajout de la possibilité d’omettre la partition dans la requête
ALTER TABLE ... FREEZEafin de sauvegarder toutes les partitions en une seule fois. #3514 - Ajout des fonctions
dictGetetdictGetOrDefault, qui ne nécessitent pas de spécifier le type de la valeur de retour. Le type est déterminé automatiquement à partir de la description du dictionnaire. Amos Bird - Vous pouvez désormais spécifier des commentaires pour une colonne dans la description de la table et les modifier avec
ALTER. #3377 - La lecture est désormais prise en charge pour les tables de type
Joinavec des clés simples. Amos Bird - Vous pouvez désormais spécifier les options
join_use_nulls,max_rows_in_join,max_bytes_in_joinetjoin_overflow_modelors de la création d’une table de typeJoin. Amos Bird - Ajout de la fonction
joinGet, qui permet d’utiliser une table de typeJoincomme un dictionnaire. Amos Bird - Ajout des colonnes
partition_key,sorting_key,primary_keyetsampling_keyà la tablesystem.tablesafin de fournir des informations sur les clés de la table. #3609 - Ajout des colonnes
is_in_partition_key,is_in_sorting_key,is_in_primary_keyetis_in_sampling_keyà la tablesystem.columns. #3609 - Ajout des colonnes
min_timeetmax_timeà la tablesystem.parts. Ces colonnes sont renseignées lorsque la clé de partitionnement est une expression composée de colonnesDateTime. Emmanuel Donin de Rosière
Corrections de bugs :
- Corrections et améliorations des performances pour le type de données
LowCardinality.GROUP BYavecLowCardinality(Nullable(...)). Récupération des valeurs deextremes. Traitement des fonctions d’ordre supérieur.LEFT ARRAY JOIN.GROUP BYdistribué. Fonctions qui renvoientArray. Exécution deORDER BY. Écriture dans des tablesDistributed(nicelulu). Rétrocompatibilité pour les requêtesINSERTd’anciens clients qui implémentent le protocoleNative. Prise en charge deLowCardinalitypourJOIN. Performances améliorées en mode flux unique. #3823 #3803 #3799 #3769 #3744 #3681 #3651 #3649 #3641 #3632 #3568 #3523 #3518 - Correction du fonctionnement de l’option
select_sequential_consistency. Auparavant, lorsque ce paramètre était activé, un résultat incomplet était parfois renvoyé après le début de l’écriture dans une nouvelle partition. #2863 - Les bases de données sont désormais correctement spécifiées lors de l’exécution des requêtes DDL
ON CLUSTERet deALTER UPDATE/DELETE. #3772 #3460 - Les bases de données sont désormais correctement spécifiées pour les sous-requêtes à l’intérieur d’une
VIEW. #3521 - Correction d’un bug dans
PREWHEREavecFINALpourVersionedCollapsingMergeTree. 7167bfd7 - Vous pouvez désormais utiliser
KILL QUERYpour annuler des requêtes qui n’ont pas encore démarré parce qu’elles attendent le verrouillage de la table. #3517 - Correction des calculs de date et d’heure lorsque les horloges étaient reculées à minuit (cela se produit en Iran et s’est produit à Moscou de 1981 à 1983). Auparavant, cela entraînait le recul de l’heure d’un jour de plus que nécessaire et provoquait également un formatage incorrect de la date et de l’heure au format texte. #3819
- Correction de bugs dans certains cas de
VIEWet de sous-requêtes qui omettent la base de données. Winter Zhang - Correction d’une condition de concurrence lors de la lecture simultanée depuis une
MATERIALIZED VIEWet de la suppression d’uneMATERIALIZED VIEW, en raison de l’absence de verrouillage de laMATERIALIZED VIEWinterne. #3404 #3694 - Correction de l’erreur
Lock handler cannot be nullptr.#3689 - Correction du traitement des requêtes lorsque l’option
compile_expressionsest activée (elle l’est par défaut). Les expressions constantes non déterministes comme la fonctionnowne sont plus développées. #3457 - Correction d’un plantage lors de la spécification d’un argument d’échelle non constant dans les fonctions
toDecimal32/64/128. - Correction d’une erreur lors de l’insertion d’un tableau contenant des éléments
NULLau formatValuesdans une colonne de typeArraysansNullable(siinput_format_values_interpret_expressions= 1). #3487 #3503 - Correction de la journalisation continue d’erreurs dans
DDLWorkerlorsque ZooKeeper n’est pas disponible. 8f50c620 - Correction du type de retour des fonctions
quantile*pour les arguments de typeDateetDateTime. #3580 - Correction de la clause
WITHlorsqu’elle spécifie un alias simple sans expression. #3570 - Correction du traitement des requêtes avec des sous-requêtes nommées et des noms de colonnes qualifiés lorsque
enable_optimize_predicate_expressionest activé. Winter Zhang - Correction de l’erreur
Attempt to attach to nullptr thread grouplors de l’utilisation de vues matérialisées. Marek Vavruša - Correction d’un plantage lors du passage de certains arguments incorrects à la fonction
arrayReverse. 73e3a7b6 - Correction d’un dépassement de tampon dans la fonction
extractURLParameter. Performances améliorées. Ajout de la prise en charge correcte des chaînes contenant des octets nuls. 141e9799 - Correction d’un dépassement de tampon dans les fonctions
lowerUTF8etupperUTF8. Suppression de la possibilité d’exécuter ces fonctions sur des arguments de typeFixedString. #3662 - Correction d’une rare situation de concurrence lors de la suppression de tables
MergeTree. #3680 - Correction d’une situation de concurrence lors de la lecture depuis des tables
Bufferet de l’exécution simultanée deALTERouDROPsur les tables cibles. #3719 - Correction d’un segfault si la limite
max_temporary_non_const_columnsétait dépassée. #3788
Améliorations :
- Le serveur n’écrit pas les fichiers de configuration prétraités dans le répertoire
/etc/clickhouse-server/. Il les enregistre à la place dans le répertoirepreprocessed_configssouspath. Cela signifie que le répertoire/etc/clickhouse-server/n’est pas accessible en écriture à l’utilisateurclickhouse, ce qui améliore la sécurité. #2443 - L’option
min_merge_bytes_to_use_direct_ioest définie par défaut sur 10 GiB. Une fusion qui crée de grandes parts de tables de la famille MergeTree sera effectuée en modeO_DIRECT, ce qui évite une éviction excessive du cache de pages. #3504 - Démarrage du serveur accéléré en présence d’un très grand nombre de tables. #3398
- Ajout d’un pool de connexions et de
Keep-AliveHTTP pour les connexions entre répliques. #3594 - Si la syntaxe de la requête est invalide, le code
400 Bad Requestest renvoyé par l’interfaceHTTP(500était renvoyé auparavant). 31bc680a - L’option
join_default_strictnessest définie par défaut surALLpour des raisons de compatibilité. 120e2cbe - Suppression de la journalisation vers
stderrdepuis la bibliothèquere2pour les expressions régulières invalides ou complexes. #3723 - Ajout, pour le moteur de table
Kafka, de vérifications des abonnements avant de commencer la lecture depuis Kafka, ainsi que du paramètre kafka_max_block_size pour la table. Marek Vavruša - Les fonctions
cityHash64,farmHash64,metroHash64,sipHash64,halfMD5,murmurHash2_32,murmurHash2_64,murmurHash3_32etmurmurHash3_64fonctionnent désormais avec n’importe quel nombre d’arguments et avec des arguments sous forme de tuples. #3451 #3519 - La fonction
arrayReversefonctionne désormais avec tous les types de tableaux. 73e3a7b6 - Ajout d’un paramètre facultatif : la taille du créneau pour la fonction
timeSlots. Kirill Shvakov - Pour
FULLetRIGHT JOIN, le paramètremax_block_sizeest utilisé pour un flux de données non jointes provenant de la table de droite. Amos Bird - Ajout du paramètre de ligne de commande
--securedansclickhouse-benchmarketclickhouse-performance-testpour activer TLS. #3688 #3690 - Conversion de type lorsque la structure d’une table de type
Bufferne correspond pas à celle de la table de destination. Vitaly Baranov - Ajout de l’option
tcp_keep_alive_timeoutpour activer les paquets keep-alive après la période d’inactivité spécifiée. #3441 - Suppression des guillemets inutiles autour des valeurs de la clé de partition dans la table
system.partssi elle se compose d’une seule colonne. #3652 - La fonction modulo fonctionne avec les types de données
DateetDateTime. #3385 - Ajout de synonymes pour les fonctions
POWER,LN,LCASE,UCASE,REPLACE,LOCATE,SUBSTRetMID. #3774 #3763 Certains noms de fonctions sont insensibles à la casse afin d’assurer la compatibilité avec le standard SQL. Ajout également du sucre syntaxiqueSUBSTRING(expr FROM start FOR length)pour la compatibilité avec SQL. #3804 - Ajout de la possibilité d’utiliser
mlocksur les pages mémoire correspondant au code exécutable declickhouse-serverafin d’éviter qu’il ne soit expulsé de la mémoire. Cette fonctionnalité est désactivée par défaut. #3553 - Amélioration des performances lors de la lecture avec
O_DIRECT(lorsque l’optionmin_bytes_to_use_direct_ioest activée). #3405 - Amélioration des performances de la fonction
dictGet...OrDefaultavec un argument de clé constant et un argument par défaut non constant. Amos Bird - La fonction
firstSignificantSubdomaintraite désormais les domainesgov,miletedu. Igor Hatarist Performances améliorées. #3628 - Possibilité de spécifier des variables d’environnement personnalisées pour démarrer
clickhouse-serverà l’aide du scriptSYS-V init.den définissantCLICKHOUSE_PROGRAM_ENVdans/etc/default/clickhouse. Pavlo Bashynskyi - Correction du code de retour du script d’initialisation de clickhouse-server. #3516
- La table
system.metricsinclut désormais la métriqueVersionInteger, etsystem.build_optionsinclut la ligneVERSION_INTEGER, qui contient la forme numérique de la version de ClickHouse, par exemple18016000. #3644 - Suppression de la possibilité de comparer le type
Dateà un nombre afin d’éviter des erreurs potentielles commedate = 2018-12-17, où les guillemets autour de la date sont omis par erreur. #3687 - Correction du comportement des fonctions avec état comme
rowNumberInAllBlocks. Elles renvoyaient auparavant un résultat supérieur d’une unité, car elles démarraient pendant l’analyse de la requête. Amos Bird - Si le fichier
force_restore_datane peut pas être supprimé, un message d’erreur s’affiche. Amos Bird
Améliorations de la compilation :
- Mise à jour de la bibliothèque
jemalloc, ce qui corrige une fuite de mémoire potentielle. Amos Bird - Le profilage avec
jemallocest activé par défaut dans les builds de débogage. 2cc82f5c - Ajout de la possibilité d’exécuter des tests d’intégration lorsque seul
Dockerest installé sur le système. #3650 - Ajout d’un test fuzz des expressions dans les requêtes SELECT. #3442
- Ajout d’un test de stress pour les commits, qui exécute des tests fonctionnels en parallèle et dans un ordre aléatoire afin de détecter davantage de situations de concurrence. #3438
- Amélioration de la méthode de démarrage de clickhouse-server dans une image Docker. Elghazal Ahmed
- Pour les images Docker, ajout de la prise en charge de l’initialisation des bases de données à l’aide de fichiers dans le répertoire
/docker-entrypoint-initdb.d. Konstantin Lebedev - Corrections pour les builds sur ARM. #3709
Changements incompatibles avec les versions précédentes :
- Possibilité de comparer le type
Dateavec un nombre supprimée. Au lieu detoDate('2018-12-18') = 17883, vous devez utiliser une conversion de type explicite= toDate(17883)#3687
Version 18.14 de ClickHouse
Version de ClickHouse 18.14.19, 2018-12-19
Corrections de bugs :
- Correction d’une erreur qui provoquait des problèmes lors de la mise à jour des dictionnaires avec la source ODBC. #3825, #3829
- Les bases de données sont désormais correctement spécifiées lors de l’exécution de requêtes DDL
ON CLUSTER. #3460 - Correction d’un segfault lorsque la limite
max_temporary_non_const_columnsétait dépassée. #3788
Amélioration de la compilation :
- Corrections apportées aux builds sur ARM.
Version de ClickHouse 18.14.18, 2018-12-04
Corrections de bugs :
- Correction d’une erreur dans la fonction
dictGet...pour les dictionnaires de typerange, lorsqu’un des arguments est constant et l’autre non. #3751 - Correction d’une erreur qui entraînait l’affichage de messages
netlink: '...': attribute type 1 has an invalid lengthdans le journal du noyau Linux, uniquement sur des versions suffisamment récentes du noyau. #3749 - Correction d’un segfault dans la fonction
emptypour un argument de typeFixedString. Daniel, Dao Quang Minh - Correction d’une allocation mémoire excessive lors de l’utilisation d’une valeur élevée du paramètre
max_query_size(un bloc mémoire demax_query_sizeoctets était préalloué en une seule fois). #3720
Modifications du build :
- Correction du build avec les bibliothèques LLVM/Clang version 7 provenant des paquets du système d’exploitation (ces bibliothèques sont utilisées pour la compilation des requêtes à l’exécution). #3582
Version 18.14.17 de ClickHouse, 2018-11-30
Corrections de bugs :
- Correction des cas où le processus ODBC bridge ne s’arrêtait pas en même temps que le processus principal du serveur. #3642
- Correction de l’insertion synchrone dans une table
Distributedavec une liste de colonnes différente de celle de la table distante. #3673 - Correction d’une rare condition de concurrence pouvant entraîner un crash lors de la suppression d’une table MergeTree. #3643
- Correction d’un interblocage de requête lorsque la création d’un thread de requête échoue avec l’erreur
Resource temporarily unavailable. #3643 - Correction de l’analyse syntaxique de la clause
ENGINElorsque la syntaxeCREATE AS tableétait utilisée et que la clauseENGINEétait spécifiée avantAS table(l’erreur faisait que le moteur spécifié était ignoré). #3692
Version 18.14.15 de ClickHouse, 2018-11-21
Correction de bug :
- La taille du bloc mémoire a été surestimée lors de la désérialisation de la colonne de type
Array(String), ce qui a provoqué des erreurs « Memory limit exceeded ». Le problème est apparu dans la version 18.12.13. #3589
Version de ClickHouse 18.14.14, 2018-11-20
Corrections de bugs :
- Correction des requêtes
ON CLUSTERlorsque le cluster est configuré en mode sécurisé (flag<secure>). #3599
Modifications du build :
- Correction de problèmes (llvm-7 du système, MacOS) #3582
Version de ClickHouse 18.14.13, 2018-11-08
Corrections de bugs :
- Correction de l’erreur
Block structure mismatch in MergingSorted stream. #3162 - Correction des requêtes
ON CLUSTERlorsque les connexions sécurisées étaient activées dans la configuration du cluster (l’option<secure>). #3465 - Correction d’une erreur dans les requêtes utilisant
SAMPLE,PREWHEREet des colonnes d’alias. #3543 - Correction d’une rare erreur
unknown compression methodlorsque le paramètremin_bytes_to_use_direct_ioétait activé. 3544
Améliorations des performances :
- Correction d’une régression des performances des requêtes avec
GROUP BYsur des colonnes de type UInt16 ou Date lors de l’exécution sur des processeurs AMD EPYC. Igor Lapko - Correction d’une régression des performances des requêtes qui traitent de longues chaînes de caractères. #3530
Amélioration de la compilation :
Version de ClickHouse 18.14.12, 2018-11-02
Corrections de bugs :
- Correction d’un plantage lors d’une jointure entre deux sous-requêtes non nommées. #3505
- Correction de la génération de requêtes incorrectes (avec une clause
WHEREvide) lors de l’interrogation de bases de données externes. hotid - Correction de l’utilisation d’un délai d’expiration incorrect dans les dictionnaires ODBC. Marek Vavruša
Version de ClickHouse 18.14.11, 2018-10-29
Corrections de bugs :
- Correction de l’erreur
Block structure mismatch in UNION stream: different number of columnsdans les requêtes LIMIT. #2156 - Correction d’erreurs lors de la fusion de données dans des tables contenant des tableaux au sein de structures Nested. #3397
- Correction de résultats de requête erronés si le paramètre
merge_tree_uniform_read_distributionest désactivé (il est activé par défaut). #3429 - Correction d’une erreur lors d’insertions dans une table Distributed au format Native. #3411
Version de ClickHouse 18.14.10, 2018-10-23
- Le paramètre
compile_expressions(compilation JIT des expressions) est désactivé par défaut. #3410 - Le paramètre
enable_optimize_predicate_expressionest désactivé par défaut.
Version 18.14.9 de ClickHouse, 2018-10-16
Nouvelles fonctionnalités :
- Le modificateur
WITH CUBEpourGROUP BY(la syntaxe alternativeGROUP BY CUBE(...)est également disponible). #3172 - Ajout de la fonction
formatDateTime. Alexandr Krasheninnikov - Ajout du moteur de table
JDBCet de la fonction de tablejdbc(nécessite l’installation de clickhouse-jdbc-bridge). Alexandr Krasheninnikov - Ajout de fonctions pour manipuler le numéro de semaine ISO :
toISOWeek,toISOYear,toStartOfISOYearettoDayOfYear. #3146 - Vous pouvez désormais utiliser des colonnes
Nullablepour les tablesMySQLetODBC. #3362 - Les structures de données imbriquées peuvent être lues sous forme d’objets imbriqués au format
JSONEachRow. Ajout du paramètreinput_format_import_nested_json. Veloman Yunkan - Le traitement en parallèle est disponible pour de nombreuses
MATERIALIZED VIEWlors de l’insertion de données. Voir le paramètreparallel_view_processing. Marek Vavruša - Ajout de la requête
SYSTEM FLUSH LOGS(vidage forcé des logs vers les tables système telles quequery_log) #3321 - Vous pouvez désormais utiliser les macros prédéfinies
databaseettablelors de la déclaration de tablesReplicated. #3251 - Ajout de la possibilité de lire des valeurs de type
Decimalen notation technique (indiquant des puissances de dix). #3153
Fonctionnalités expérimentales :
- Optimisation de la clause GROUP BY pour les
types de données LowCardinality.#3138 - Optimisation du calcul des expressions pour les
types de données LowCardinality.#3200
Améliorations :
- Réduction significative de la consommation de mémoire pour les requêtes avec
ORDER BYetLIMIT. Voir le paramètremax_bytes_before_remerge_sort. #3205 - En l’absence de
JOIN(LEFT,INNER, …),INNER JOINest utilisé par défaut. #3147 - Les astérisques qualifiés fonctionnent correctement dans les requêtes avec
JOIN. Winter Zhang - Le table engine
ODBCchoisit correctement la méthode de mise entre guillemets des identifiants dans le dialecte SQL d’une base de données distante. Alexandr Krasheninnikov - Le paramètre
compile_expressions(compilation JIT des expressions) est activé par défaut. - Correction du comportement lors d’opérations simultanées DROP DATABASE/TABLE IF EXISTS et CREATE DATABASE/TABLE IF NOT EXISTS. Auparavant, une requête
CREATE DATABASE ... IF NOT EXISTSpouvait renvoyer le message d’erreur “File … already exists”, et les requêtesCREATE TABLE ... IF NOT EXISTSetDROP TABLE IF EXISTSpouvaient renvoyerTable ... is creating or attaching right now. #3101 - Les expressions LIKE et IN dont la partie droite est constante sont transmises au serveur distant lors des requêtes sur des tables MySQL ou ODBC. #3182
- Les comparaisons avec des expressions constantes dans une clause WHERE sont transmises au serveur distant lors des requêtes sur des tables MySQL et ODBC. Auparavant, seules les comparaisons avec des constantes étaient transmises. #3182
- Calcul correct de la largeur des lignes dans le terminal pour les formats
Pretty, y compris pour les chaînes contenant des hiéroglyphes. Amos Bird. ON CLUSTERpeut être spécifié pour les requêtesALTER UPDATE.- Performances améliorées pour la lecture des données au format
JSONEachRow. #3332 - Ajout de synonymes pour les fonctions
LENGTHetCHARACTER_LENGTHà des fins de compatibilité. La fonctionCONCATn’est plus sensible à la casse. #3306 - Ajout du synonyme
TIMESTAMPpour le typeDateTime. #3390 - Un espace est désormais toujours réservé à query_id dans les journaux du serveur, même si la ligne de journal n’est pas liée à une requête. Cela facilite l’analyse des journaux texte du serveur avec des outils tiers.
- La consommation de mémoire d’une requête est consignée lorsqu’elle dépasse le palier suivant d’un nombre entier de gigaoctets. #3205
- Ajout d’un mode de compatibilité pour le cas où la bibliothèque cliente utilisant le protocole natif envoie par erreur moins de colonnes que ce que le serveur attend pour la requête INSERT. Ce scénario était possible lors de l’utilisation de la bibliothèque clickhouse-cpp. Auparavant, il provoquait le plantage du serveur. #3171
- Dans une expression WHERE définie par l’utilisateur dans
clickhouse-copier, vous pouvez désormais utiliser un aliaspartition_key(pour un filtrage supplémentaire par partition de la table source). Cela est utile si le schéma de partitionnement change pendant la copie, mais seulement légèrement. #3166 - Le fonctionnement de l’engine
Kafkaa été déplacé vers un thread pool d’arrière-plan afin de réduire automatiquement la vitesse de lecture des données en cas de forte charge. Marek Vavruša. - Prise en charge de la lecture des valeurs
TupleetNestedde structures commestructdans le formatCap'n'Proto. Marek Vavruša - La liste des top-level domains pour la fonction
firstSignificantSubdomaininclut désormais le domainebiz. decaseal - Dans la configuration des external dictionaries,
null_valueest interprété comme la valeur du data type par défaut. #3330 - Prise en charge des fonctions
intDivetintDivOrZeropourDecimal. b48402e8 - Prise en charge des types
Date,DateTime,UUIDetDecimalcomme clé pour la fonction d’agrégationsumMap. #3281 - Prise en charge du type de données
Decimaldans les dictionnaires externes. #3324 - Prise en charge du type de données
Decimaldans les tablesSummingMergeTree. #3348 - Ajout de spécialisations pour
UUIDdansif. #3366 - Réduction du nombre d’appels système
openetcloselors de la lecture d’une tableMergeTree. #3283 - Une requête
TRUNCATE TABLEpeut être exécutée sur n’importe quelle réplique (la requête est transmise à la réplique leader). Kirill Shvakov
Corrections de bugs :
- Correction d’un problème affectant les tables
Dictionarypour les dictionnairesrange_hashed. Cette erreur est apparue dans la version 18.12.17. #1702 - Correction d’une erreur lors du chargement des dictionnaires
range_hashed(messageUnsupported type Nullable (...)). Cette erreur est apparue dans la version 18.12.17. #3362 - Correction d’erreurs dans la fonction
pointInPolygondues à l’accumulation d’imprécisions de calcul pour des polygones comportant un grand nombre de sommets très proches les uns des autres. #3331 #3341 - Si, après la fusion de data parts, la somme de contrôle de la part résultante diffère de celle obtenue par la même fusion sur une autre réplique, le résultat de la fusion est supprimé et la data part est téléchargée depuis l’autre réplique (ce qui est le comportement correct). Mais après le téléchargement, elle ne pouvait pas être ajoutée à l’ensemble de travail en raison d’une erreur indiquant que la part existait déjà (car la data part n’était supprimée qu’avec un certain délai après la fusion). Cela entraînait des tentatives cycliques de téléchargement des mêmes données. #3194
- Correction d’un calcul erroné de la consommation mémoire totale des requêtes (en raison de ce calcul erroné, le paramètre
max_memory_usage_for_all_queriesne fonctionnait pas correctement et la métriqueMemoryTrackingavait une valeur incorrecte). Cette erreur est apparue dans la version 18.12.13. Marek Vavruša - Correction du fonctionnement de
CREATE TABLE ... ON CLUSTER ... AS SELECT ...Cette erreur est apparue dans la version 18.12.13. #3247 - Correction de la préparation inutile de structures de données pour les
JOINsur le serveur qui initie la query lorsque leJOINest exécuté uniquement sur des serveurs distants. #3340 - Correction de bogues dans le moteur
Kafka: deadlocks après des exceptions au démarrage de la lecture des données, et verrouillages à la fin Marek Vavruša. - Pour les tables
Kafka, le paramètre facultatifscheman’était pas transmis (le schéma du formatCap'n'Proto). Vojtech Splichal - Si l’ensemble des serveurs ZooKeeper contient des serveurs qui acceptent la connexion mais la ferment immédiatement au lieu de répondre au handshake, ClickHouse choisit de se connecter à un autre serveur. Auparavant, cela produisait l’erreur
Cannot read all data. Bytes read: 0. Bytes expected: 4.et le serveur ne pouvait pas démarrer. 8218cf3a - Si l’ensemble des serveurs ZooKeeper contient des serveurs pour lesquels la requête DNS renvoie une erreur, ces serveurs sont ignorés. 17b8e209
- Correction de la conversion de type entre
DateetDateTimelors de l’insertion de données au formatVALUES(siinput_format_values_interpret_expressions = 1). Auparavant, la conversion était effectuée entre la valeur numérique du nombre de jours depuis l’epoch Unix et le timestamp Unix, ce qui entraînait des résultats inattendus. #3229 - Correction de la conversion de type entre
Decimalet les nombres entiers. #3211 - Correction d’erreurs dans le paramètre
enable_optimize_predicate_expression. Winter Zhang - Correction d’une erreur de parsing au format CSV avec des nombres à virgule flottante lorsqu’un séparateur CSV non standard est utilisé, par exemple
;#3155 - Correction de la fonction
arrayCumSumNonNegative(elle n’accumule pas de valeurs négatives si l’accumulateur est inférieur à zéro). Aleksey Studnev - Correction du fonctionnement des tables
Mergesur des tablesDistributedlors de l’utilisation dePREWHERE. #3165 - Corrections de bugs dans la requête
ALTER UPDATE. - Correction de bugs dans la fonction de table
odbcapparus dans la version 18.12. #3197 - Correction du fonctionnement des fonctions d’agrégation avec les combinateurs
StateArray. #3188 - Correction d’un crash lors de la division d’une valeur
Decimalpar zéro. 69dd6609 - Correction de l’affichage des types pour les opérations utilisant des arguments
Decimalet des entiers. #3224 - Correction du segfault pendant un
GROUP BYsurDecimal128. 3359ba06 - Le paramètre
log_query_threads(journalisation d’informations sur chaque thread d’exécution d’une requête) ne prend désormais effet que si l’optionlog_queries(journalisation d’informations sur les requêtes) est définie sur 1. Comme l’optionlog_query_threadsest activée par défaut, les informations sur les threads étaient auparavant journalisées même si la journalisation des requêtes était désactivée. #3241 - Correction d’une erreur dans l’exécution distribuée de la fonction d’agrégation quantiles (message d’erreur
Not found column quantile...). 292a8855 - Correction d’un problème de compatibilité lors de l’utilisation simultanée d’un cluster de serveurs version 18.12.17 et de serveurs plus anciens. Pour les requêtes distribuées avec des clés
GROUP BYde longueur fixe et variable, s’il y avait une grande quantité de données à agréger, les données renvoyées n’étaient pas toujours entièrement agrégées (deux lignes différentes contenaient les mêmes clés d’agrégation). #3254 - Correction de la gestion des substitutions dans
clickhouse-performance-testsi la requête ne contient qu’une partie des substitutions déclarées dans le test. #3263 - Correction d’une erreur lors de l’utilisation de
FINALavecPREWHERE. #3298 - Correction d’une erreur lors de l’utilisation de
PREWHEREsur des colonnes ajoutées pendantALTER. #3298 - Ajout d’une vérification de l’absence de
arrayJoinpour les expressionsDEFAULTetMATERIALIZED. Auparavant,arrayJoinprovoquait une erreur lors de l’insertion de données. #3337 - Ajout d’une vérification de l’absence de
arrayJoindans une clausePREWHERE. Auparavant, cela entraînait des messages tels queSize ... does not matchouUnknown compression methodlors de l’exécution des requêtes. #3357 - Correction d’un segfault pouvant survenir dans de rares cas après une optimisation remplaçant des chaînes de AND issues d’évaluations d’égalité par l’expression IN correspondante. liuyimin-bytedance
- Corrections mineures de
clickhouse-benchmark: auparavant, les informations du client n’étaient pas envoyées au serveur ; désormais, le nombre de requêtes exécutées est calculé plus précisément lors de l’arrêt et pour limiter le nombre d’itérations. #3351 #3352
Changements incompatibles avec les versions précédentes :
- Suppression de l’option
allow_experimental_decimal_type. Le type de donnéesDecimalest désormais disponible par défaut. #3329
Version 18.12 de ClickHouse
Version de ClickHouse 18.12.17, 2018-09-16
Nouvelles fonctionnalités :
invalidate_query(possibilité de spécifier une requête pour vérifier si un dictionnaire externe doit être mis à jour) est désormais implémenté pour la sourceclickhouse. #3126- Ajout de la prise en charge des types de données
UInt*,Int*etDateTime(ainsi que du typeDate) comme clé de dictionnaire externerange_hasheddéfinissant les bornes des plages.NULLpeut désormais être utilisé pour désigner une plage ouverte. Vasily Nemkov - Le type
Decimalprend désormais en charge les fonctions d’agrégationvar*etstddev*. #3129 - Le type
Decimalprend désormais en charge les fonctions mathématiques (exp,sin, etc.). #3129 - La table
system.part_logcomporte désormais la colonnepartition_id. #3089
Correction de bug :
Mergefonctionne désormais correctement sur les tablesDistributed. Winter Zhang- Correction d’une incompatibilité (dépendance inutile à la version de
glibc) qui empêchait l’exécution de ClickHouse surUbuntu Preciseet les versions antérieures. Cette incompatibilité est apparue dans la version 18.12.13. #3130 - Correction d’erreurs dans le paramètre
enable_optimize_predicate_expression. Winter Zhang - Correction d’un léger problème de rétrocompatibilité qui survenait lors de l’utilisation d’un cluster de répliques sur des versions antérieures à 18.12.13 et de la création simultanée d’une nouvelle réplique d’une table sur un serveur exécutant une version plus récente (indiqué par le message
Can not clone replica, because the ... updated to new ClickHouse version, ce qui est logique, mais ne devrait pas se produire). #3122
Changements incompatibles avec les versions précédentes :
- L’option
enable_optimize_predicate_expressionest activée par défaut (ce qui est plutôt optimiste). Si des erreurs d’analyse de requêtes liées à la recherche de noms de colonnes se produisent, définissezenable_optimize_predicate_expressionsur 0. Winter Zhang
Version de ClickHouse 18.12.14, 2018-09-13
Nouvelles fonctionnalités :
- Ajout de la prise en charge des requêtes
ALTER UPDATE. #3035 - Ajout de l’option
allow_ddl, qui restreint l’accès de l’utilisateur aux requêtes DDL. #3104 - Ajout de l’option
min_merge_bytes_to_use_direct_iopour les moteursMergeTree, qui permet de définir un seuil pour la taille totale de la fusion (au-delà de ce seuil, les fichiers des parties de données seront gérés avec O_DIRECT). #3117 - La table système
system.mergescontient désormais la colonnepartition_id. #3099
Améliorations
- Si une partie de données reste inchangée pendant une mutation, les répliques ne la téléchargent pas. #3103
- La saisie semi-automatique des noms de paramètres est disponible dans
clickhouse-client. #3106
Corrections de bugs :
- Ajout d’une vérification de la taille des tableaux servant d’éléments dans les champs de type
Nestedlors de l’insertion. #3118 - Correction d’une erreur lors de la mise à jour de dictionnaires externes avec la source
ODBCet le stockagehashed. Cette erreur se produisait dans la version 18.12.13. - Correction d’un plantage lors de la création d’une table temporaire à partir d’une requête comportant une condition
IN. Winter Zhang - Correction d’une erreur dans les fonctions d’agrégation pour les tableaux pouvant contenir des éléments
NULL. Winter Zhang
Version 18.12.13 de ClickHouse, 2018-09-10
Nouvelles fonctionnalités :
- Ajout du type de données
DECIMAL(digits, scale)(Decimal32(scale),Decimal64(scale),Decimal128(scale)). Pour l’activer, utilisez le paramètreallow_experimental_decimal_type. #2846 #2970 #3008 #3047 - Nouveau modificateur
WITH ROLLUPpourGROUP BY(syntaxe alternative :GROUP BY ROLLUP(...)). #2948 - Dans les requêtes avec JOIN, l’astérisque est développé en liste de colonnes de toutes les tables, conformément au standard SQL. Vous pouvez restaurer l’ancien comportement en définissant
asterisk_left_columns_onlysur 1 au niveau de la configuration utilisateur. Winter Zhang - Ajout de la prise en charge de JOIN avec les fonctions de table. Winter Zhang
- Autocomplétion en appuyant sur Tab dans clickhouse-client. Sergey Shcherbin
- Ctrl+C dans clickhouse-client efface une requête saisie. #2877
- Ajout du paramètre
join_default_strictness(valeurs :",'any','all'). Cela permet de ne pas spécifierANYouALLpourJOIN. #2982 - Chaque ligne du journal du serveur liée au traitement des requêtes affiche l’ID de la requête. #2482
- Il est désormais possible d’obtenir les journaux d’exécution des requêtes dans clickhouse-client (utilisez le paramètre
send_logs_level). Avec le traitement distribué des requêtes, les journaux sont propagés en cascade depuis tous les serveurs. #2482 - Les tables
system.query_logetsystem.processes(SHOW PROCESSLIST) contiennent désormais des informations sur tous les paramètres modifiés lors de l’exécution d’une requête (la structure imbriquée des donnéesSettings). Ajout du paramètrelog_query_settings. #2482 - Les tables
system.query_logetsystem.processesaffichent désormais des informations sur le nombre de threads participant à l’exécution des requêtes (voir la colonnethread_numbers). #2482 - Ajout des compteurs
ProfileEventsqui mesurent le temps passé à lire et écrire sur le réseau et sur le disque, le nombre d’erreurs réseau, ainsi que le temps d’attente lorsque la bande passante réseau est limitée. #2482 - Ajout de compteurs
ProfileEventscontenant les métriques système issues de rusage (vous pouvez les utiliser pour obtenir des informations sur l’utilisation du CPU en userspace et dans le noyau, les défauts de page et les changements de contexte), ainsi que des métriques taskstats (pour obtenir des informations sur le temps d’attente des E/S, le temps d’attente CPU et la quantité de données lues et écrites, avec et sans page cache). #2482 - Les compteurs
ProfileEventss’appliquent globalement, à chaque requête, ainsi qu’à chaque thread d’exécution de requête, ce qui permet de profiler en détail la consommation de ressources par requête. #2482 - Ajout de la table
system.query_thread_log, qui contient des informations sur chaque thread d’exécution de requête. Ajout du paramètrelog_query_threads. #2482 - Les tables
system.metricsetsystem.eventsdisposent désormais d’une documentation intégrée. #3016 - Ajout de la fonction
arrayEnumerateDense. Amos Bird - Ajout des fonctions
arrayCumSumNonNegativeetarrayDifference. Aleksey Studnev - Ajout de la fonction d’agrégation
retention. Sundy Li - Vous pouvez désormais additionner (fusionner) les états des fonctions d’agrégation à l’aide de l’opérateur plus, et multiplier les états des fonctions d’agrégation par une constante non négative. #3062 #3034
- Les tables de la famille MergeTree disposent désormais de la colonne virtuelle
_partition_id. #3089
Fonctionnalités expérimentales :
- Ajout du type de données
LowCardinality(T). Ce type de données crée automatiquement un dictionnaire local de valeurs et permet de traiter les données sans avoir à décompacter le dictionnaire. #2830 - Ajout d’un cache de fonctions compilées en JIT et d’un compteur du nombre d’utilisations avant leur compilation. Pour compiler des expressions en JIT, activez le paramètre
compile_expressions. #2990 #3077
Améliorations :
- Correction du problème d’accumulation illimitée du journal de réplication en présence de répliques abandonnées. Ajout d’un mode de récupération efficace pour les répliques très en retard.
- Amélioration des performances de
GROUP BYavec plusieurs champs d’agrégation lorsque l’un d’eux est de type chaîne et que les autres sont de longueur fixe. - Amélioration des performances lors de l’utilisation de
PREWHERE, ainsi qu’avec le transfert implicite d’expressions versPREWHERE. - Amélioration des performances d’analyse des formats texte (
CSV,TSV). Amos Bird #2980 - Amélioration des performances de lecture des chaînes et des tableaux dans les formats binaires. Amos Bird
- Performances accrues et consommation mémoire réduite pour les requêtes sur
system.tablesetsystem.columnslorsqu’un très grand nombre de tables est présent sur un même serveur. #2953 - Correction d’un problème de performances en cas de flux important de requêtes se terminant par une erreur (la fonction
_dl_addrest visible dansperf top, mais le serveur n’utilise pas beaucoup de CPU). #2938 - Les conditions sont propagées vers la vue (lorsque
enable_optimize_predicate_expressionest activé). Winter Zhang - Améliorations apportées au type de données
UUID. #3074 #2985 - Le type de données
UUIDest pris en charge dans les dictionnaires The-Alchemist. #2822 - La fonction
visitParamExtractRawfonctionne correctement avec les structures imbriquées. Winter Zhang - Lorsque le paramètre
input_format_skip_unknown_fieldsest activé, les champs d’objet du formatJSONEachRowsont correctement ignorés. BlahGeek - Pour une expression
CASEavec conditions, vous pouvez désormais omettreELSE, ce qui équivaut àELSE NULL. #2920 - Le délai d’expiration des opérations peut désormais être configuré lors de l’utilisation de ZooKeeper. urykhy
- Vous pouvez spécifier un offset pour
LIMIT n, msous la formeLIMIT n OFFSET m. #2840 - Vous pouvez utiliser la syntaxe
SELECT TOP ncomme alternative àLIMIT. #2840 - Augmentation de la taille de la file d’attente d’écriture dans les system tables, afin que l’erreur
SystemLog parameter queue is fullse produise moins souvent. - La fonction d’agrégation
windowFunnelprend désormais en charge les événements qui satisfont plusieurs conditions. Amos Bird - Des colonnes dupliquées peuvent être utilisées dans une clause
USINGpourJOIN. #3006 - Les formats
Prettyont désormais une limite de largeur pour l’alignement des colonnes. Utilisez le paramètreoutput_format_pretty_max_column_pad_width. Si une valeur est plus large, elle sera toujours affichée en entier, mais les autres cellules du tableau ne deviendront pas trop larges. #3003 - La table function
odbcpermet désormais de spécifier le nom de la base de données/du schéma. Amos Bird - Ajout de la possibilité d’utiliser un nom d’utilisateur spécifié dans le fichier de configuration
clickhouse-client. Vladimir Kozbin - Le compteur
ZooKeeperExceptionsa été scindé en trois compteurs :ZooKeeperUserExceptions,ZooKeeperHardwareExceptionsetZooKeeperOtherExceptions. - Les requêtes
ALTER DELETEfonctionnent pour les vues matérialisées. - Ajout d’une randomisation lors de l’exécution périodique du thread de nettoyage pour les tables
ReplicatedMergeTree, afin d’éviter des pics de charge périodiques lorsqu’il existe un très grand nombre de tablesReplicatedMergeTree. - Prise en charge des requêtes
ATTACH TABLE ... ON CLUSTER. #3025
Corrections de bugs :
- Correction d’un problème affectant les tables
Dictionary(levée de l’exceptionSize of offsets does not match size of columnouUnknown compression method). Ce bug est apparu dans la version 18.10.3. #2913 - Correction d’un bug lors de la fusion de tables
CollapsingMergeTreelorsqu’une des data parts est vide (ces parts sont créées lors d’une fusion ou d’unALTER DELETEsi toutes les données ont été supprimées), et que l’algorithmeverticalétait utilisé pour la fusion. #3049 - Correction d’une race condition pendant
DROPouTRUNCATEsur des tablesMemoryavec unSELECTsimultané, pouvant provoquer des crashs du serveur. Ce bug est apparu dans la version 1.1.54388. #3038 - Correction d’un risque de perte de données lors de l’insertion dans des tables
Replicatedsi l’erreurSession is expiredest renvoyée (la perte de données peut être détectée par la métriqueReplicatedDataLoss). Cette erreur s’est produite dans la version 1.1.54378. #2939 #2949 #2964 - Correction d’un segfault pendant
JOIN ... ON. #3000 - Correction d’une erreur dans la recherche des noms de colonnes lorsque l’expression
WHEREest entièrement constituée d’un nom de colonne qualifié, commeWHERE table.column. #2994 - Correction de l’erreur “Not found column” qui se produisait lors de l’exécution de requêtes distribuées lorsqu’une seule colonne composée d’une expression IN avec une sous-requête est demandée à un serveur distant. #3087
- Correction de l’erreur
Block structure mismatch in UNION stream: different number of columnsqui survenait dans les requêtes distribuées si l’un des shards est local et l’autre ne l’est pas, et que l’optimisation du déplacement versPREWHEREest déclenchée. #2226 #3037 #3055 #3065 #3073 #3090 #3093 - Correction de la fonction
pointInPolygondans certains cas de polygones non convexes. #2910 - Correction d’un résultat incorrect lors de la comparaison de
nanavec des entiers. #3024 - Correction d’une erreur dans la bibliothèque
zlib-ngqui pouvait entraîner un segfault dans de rares cas. #2854 - Correction d’une fuite mémoire lors de l’insertion dans une table contenant des colonnes
AggregateFunction, si l’état de la fonction d’agrégation n’est pas simple (allocation mémoire séparée) et si une seule requête d’insertion produit plusieurs petits blocks. #3084 - Correction d’une race condition lors de la création et de la suppression simultanées d’une même table
BufferouMergeTree. - Correction d’un risque de segfault lors de la comparaison de tuples composés de certains types non triviaux, comme des tuples. #2989
- Correction d’un risque de segfault lors de l’exécution de certaines requêtes
ON CLUSTER. Winter Zhang - Correction d’une erreur dans la fonction
arrayDistinctpour les éléments de tableauNullable. #2845 #2937 - L’option
enable_optimize_predicate_expressionprend désormais correctement en charge les cas avecSELECT *. Winter Zhang - Correction d’un segfault lors de la réinitialisation de la session ZooKeeper. #2917
- Correction d’un risque de blocage lors de l’utilisation de ZooKeeper.
- Correction d’une erreur dans le code d’ajout de structures de données imbriquées dans un
SummingMergeTree. - Lors de l’allocation de mémoire pour les états des fonctions d’agrégation, l’alignement est désormais correctement pris en compte, ce qui permet d’utiliser, pour leur implémentation, des opérations nécessitant un alignement. chenxing-xc
Correctif de sécurité :
- Utilisation sécurisée des sources de données ODBC. Les interactions avec les pilotes ODBC passent par un processus
clickhouse-odbc-bridgedistinct. Les erreurs dans des pilotes ODBC tiers ne provoquent plus de problèmes de stabilité du serveur ni de vulnérabilités. #2828 #2879 #2886 #2893 #2921 - Correction d’une validation incorrecte du chemin d’accès au fichier dans la fonction de table
catBoostPool. #2894 - Le contenu des tables système (
tables,databases,parts,columns,parts_columns,merges,mutations,replicasetreplication_queue) est filtré en fonction des accès aux bases de données configurés pour l’utilisateur (allow_databases). Winter Zhang
Changements incompatibles avec les versions précédentes :
- Dans les requêtes avec JOIN, le caractère astérisque s’étend à une liste de colonnes de toutes les tables, conformément à la norme SQL. Vous pouvez restaurer l’ancien comportement en définissant
asterisk_left_columns_onlysur 1 au niveau de la configuration utilisateur.
Modifications du build :
- La plupart des tests d’intégration peuvent désormais être exécutés à chaque commit.
- Les vérifications de style du code peuvent également être exécutées à chaque commit.
- L’implémentation de
memcpyest désormais correctement sélectionnée lors du build sur CentOS7/Fedora. Etienne Champetier - Lors de l’utilisation de clang pour le build, certains avertissements de
-Weverythingont été ajoutés en plus des habituels-Wall-Wextra -Werror. #2957 - Le débogage du build utilise l’option de débogage de
jemalloc. - L’interface de la bibliothèque permettant d’interagir avec ZooKeeper est déclarée abstraite. #2950
Version de ClickHouse 18.10
Version de ClickHouse 18.10.3, 2018-08-13
Nouvelles fonctionnalités :
- Le protocole HTTPS peut être utilisé pour la réplication. #2760
- Ajout des fonctions
murmurHash2_64,murmurHash3_32,murmurHash3_64etmurmurHash3_128, en plus demurmurHash2_32déjà existante. #2791 - Prise en charge des types Nullable dans le ClickHouse ODBC driver (format de sortie
ODBCDriver2). #2834 - Prise en charge de
UUIDdans les colonnes clés.
Améliorations :
- Les clusters peuvent être supprimés sans redémarrer le serveur lorsqu’ils sont supprimés des fichiers de configuration. #2777
- Les dictionnaires externes peuvent être supprimés sans redémarrer le serveur lorsqu’ils sont retirés des fichiers de configuration. #2779
- Ajout de la prise en charge de
SETTINGSpour le moteur de tableKafka. Alexander Marshalov - Améliorations du type de données
UUID(pas encore finalisées). #2618 - Prise en charge des parties vides après les fusions dans les moteurs
SummingMergeTree,CollapsingMergeTreeetVersionedCollapsingMergeTree. #2815 - Les anciens enregistrements des mutations terminées sont supprimés (
ALTER DELETE). #2784 - Ajout de la table
system.merge_tree_settings. Kirill Shvakov - La table
system.tablesdispose désormais de colonnes de dépendance :dependencies_databaseetdependencies_table. Winter Zhang - Ajout de l’option de configuration
max_partition_size_to_drop. #2782 - Ajout de l’option
output_format_json_escape_forward_slashes. Alexander Bocharov - Ajout du paramètre
max_fetch_partition_retries_count. #2831 - Ajout du paramètre
prefer_localhost_replicapour désactiver la préférence pour une réplique locale et utiliser une réplique locale sans interaction interprocessus. #2832 - La fonction d’agrégation
quantileExactrenvoienanen cas d’agrégation sur un ensembleFloat32ouFloat64vide. Sundy Li
Corrections de bugs :
- Suppression de l’échappement inutile des paramètres de la chaîne de connexion ODBC, qui empêchait d’établir la connexion. Cette erreur est apparue dans la version 18.6.0.
- Correction de la logique de traitement des commandes
REPLACE PARTITIONdans la file de réplication. S’il y a deux commandesREPLACEpour la même partition, cette logique incorrecte pouvait faire que l’une d’elles reste dans la file de réplication sans être exécutée. #2814 - Correction d’un bug de fusion lorsque toutes les parties de données étaient vides (parties issues d’une fusion ou de
ALTER DELETEsi toutes les données avaient été supprimées). Ce bug est apparu dans la version 18.1.0. #2930 - Correction d’une erreur avec
SetouJoinen accès concurrent. Amos Bird - Correction de l’erreur
Block structure mismatch in UNION stream: different number of columns, qui survenait pour des requêtesUNION ALLà l’intérieur d’une sous-requête si l’une des requêtesSELECTcontenait des noms de colonnes dupliqués. Winter Zhang - Correction d’une fuite de mémoire si une exception survenait lors de la connexion à un serveur MySQL.
- Correction d’un code de réponse incorrect de clickhouse-client en cas d’erreur de requête.
- Correction du comportement incorrect des vues matérialisées contenant DISTINCT. #2795
Changements incompatibles avec les versions précédentes
- Suppression de la prise en charge des requêtes CHECK TABLE sur les tables Distributed.
Modifications du build :
- L’allocateur a été remplacé :
jemallocest désormais utilisé à la place detcmalloc. Dans certains scénarios, cela peut améliorer les performances jusqu’à 20 %. Cependant, certaines requêtes ont ralenti jusqu’à 20 %. La consommation de mémoire a été réduite d’environ 10 % dans certains scénarios, avec une meilleure stabilité. Sous des charges fortement concurrentes, l’utilisation du CPU en userspace et en mode système n’augmente que légèrement. #2773 - Utilisation de libressl via un sous-module. #1983 #2807
- Utilisation de unixodbc via un sous-module. #2789
- Utilisation de mariadb-connector-c via un sous-module. #2785
- Ajout au dépôt de fichiers de tests fonctionnels qui dépendent de la disponibilité des données de test (pour le moment, sans les données de test elles-mêmes).
Version 18.6 de ClickHouse
Version de ClickHouse 18.6.0, 2018-08-02
Nouvelles fonctionnalités :
- Ajout de la prise en charge des expressions ON dans la syntaxe JOIN ON :
JOIN ON Expr([table.]column ...) = Expr([table.]column, ...) [AND Expr([table.]column, ...) = Expr([table.]column, ...) ...]L’expression doit être une chaîne d’égalités reliées par l’opérateur AND. Chaque côté de l’égalité peut être une expression arbitraire portant sur les colonnes de l’une des tables. L’utilisation de noms de colonnes entièrement qualifiés est prise en charge (table.name,database.table.name,table_alias.name,subquery_alias.name) pour la table de droite. #2742 - HTTPS peut être activé pour la réplication. #2760
Améliorations :
- Le serveur transmet au client le numéro de correctif de sa version. Les informations sur ce numéro de correctif sont disponibles dans
system.processesetquery_log. #2646
Version 18.5 de ClickHouse
Version de ClickHouse 18.5.1, 2018-07-31
Nouvelles fonctionnalités :
- Ajout de la fonction de hachage
murmurHash2_32#2756.
Améliorations :
- Vous pouvez désormais utiliser l’attribut
from_env#2741 pour définir des valeurs dans les fichiers de configuration à partir de variables d’environnement. - Ajout de versions ne tenant pas compte de la casse pour les fonctions
coalesce,ifNulletnullIf#2752.
Corrections de bugs :
- Correction d’un possible bug lors du démarrage d’une replica #2759.
Version de ClickHouse 18.4
Version ClickHouse 18.4.0, 2018-07-28
Nouvelles fonctionnalités :
- Ajout des tables système :
formats,data_type_families,aggregate_function_combinators,table_functions,table_engines,collations#2721. - Ajout de la possibilité d’utiliser une fonction de table à la place d’une table comme argument d’une fonction de table
remoteoucluster#2708. - Prise en charge de l’authentification
HTTP Basicdans le protocole de réplication #2727. - La fonction
haspermet désormais de rechercher une valeur numérique dans un tableau de valeursEnumMaxim Khrisanfov. - Prise en charge de l’ajout de séparateurs de messages personnalisés lors de la lecture depuis
KafkaAmos Bird.
Améliorations :
- La requête
ALTER TABLE t DELETE WHEREne réécrit pas les parties de données qui ne sont pas affectées par la conditionWHERE#2694. - L’option
use_minimalistic_checksums_in_zookeeperpour les tablesReplicatedMergeTreeest activée par défaut. Ce paramètre a été ajouté dans la version 1.1.54378, le 16/04/2018. Les versions antérieures à 1.1.54378 ne peuvent plus être installées. - Prise en charge de l’exécution des requêtes
KILLetOPTIMIZEavecON CLUSTERWinter Zhang.
Corrections de bugs :
- Correction de l’erreur
Column ... is not under an aggregate function and not in GROUP BYlors d’une agrégation avec une expression IN. Ce bug est apparu dans la version 18.1.0. (bbdd780b) - Correction d’un bug dans la fonction d’agrégation
windowFunnelWinter Zhang. - Correction d’un bug dans la fonction d’agrégation
anyHeavy(a2101df2) - Correction d’un plantage du serveur lors de l’utilisation de la fonction d’agrégation
countArray().
Changements non rétrocompatibles :
- Les paramètres du moteur
Kafkasont passés deKafka(kafka_broker_list, kafka_topic_list, kafka_group_name, kafka_format[, kafka_schema, kafka_num_consumers])àKafka(kafka_broker_list, kafka_topic_list, kafka_group_name, kafka_format[, kafka_row_delimiter, kafka_schema, kafka_num_consumers]). Si vos tables utilisent les paramètreskafka_schemaoukafka_num_consumers, vous devez modifier manuellement les fichiers de métadonnéespath/metadata/database/table.sqlet ajouter le paramètrekafka_row_delimiteravec la valeur''.
Version 18.1 de ClickHouse
Version 18.1.0 de ClickHouse, 2018-07-23
Nouvelles fonctionnalités :
- Prise en charge de la requête
ALTER TABLE t DELETE WHEREpour les tables MergeTree non répliquées (#2634). - Prise en charge de types arbitraires pour la famille de fonctions d’agrégation
uniq*(#2010). - Prise en charge de types arbitraires dans les opérateurs de comparaison (#2026).
- Le fichier
users.xmlpermet de définir un masque de sous-réseau au format10.0.0.1/255.255.255.0. Cela est nécessaire pour utiliser des masques avec des réseaux IPv6 contenant des zéros au milieu (#2637). - Ajout de la fonction
arrayDistinct(#2670). - Le moteur SummingMergeTree peut désormais fonctionner avec des colonnes de type AggregateFunction (Constantin S. Pan).
Améliorations :
- Le schéma de numérotation des versions de release a été modifié. Désormais, la première partie indique l’année de release (ap. J.-C., fuseau horaire de Moscou, moins 2000), la deuxième partie indique le numéro des changements majeurs (il augmente pour la plupart des releases) et la troisième partie correspond à la version du correctif. Les releases restent rétrocompatibles, sauf indication contraire dans le changelog.
- Conversion plus rapide des nombres à virgule flottante en chaîne (Amos Bird).
- Si certaines lignes ont été ignorées lors d’une insertion en raison d’erreurs d’analyse (ce qui est possible lorsque les paramètres
input_allow_errors_numetinput_allow_errors_ratiosont activés), le nombre de lignes ignorées est désormais consigné dans le journal du serveur (Leonardo Cecchi).
Corrections de bugs :
- Correction de la commande TRUNCATE pour les tables temporaires (Amos Bird).
- Correction d’un rare interblocage dans la bibliothèque client ZooKeeper, qui se produisait en cas d’erreur réseau lors de la lecture de la réponse (c315200).
- Correction d’une erreur lors d’un CAST vers des types Nullable (#1322).
- Correction du résultat erroné de la fonction
maxIntersection()lorsque les bornes des intervalles coïncidaient (Michael Furmur). - Correction d’une transformation incorrecte de la chaîne d’expressions OR dans un argument de fonction (chenxing-xc).
- Correction d’une baisse de performances pour les requêtes contenant des expressions
IN (subquery)à l’intérieur d’une autre sous-requête (#2571). - Correction d’une incompatibilité entre des serveurs de versions différentes dans les requêtes distribuées utilisant une fonction
CASTqui n’est pas écrite en majuscules (fe8c4d6). - Ajout des guillemets manquants autour des identifiants dans les requêtes vers un SGBD externe (#2635).
Changements non rétrocompatibles :
- La conversion en DateTime d’une chaîne contenant la valeur zéro ne fonctionne pas. Exemple :
SELECT toDateTime('0'). C’est aussi pourquoiDateTime DEFAULT '0'ne fonctionne pas dans les tables, pas plus que<null_value>0</null_value>dans les dictionnaires. Solution : remplacez0par0000-00-00 00:00:00.
Version de ClickHouse 1.1
Version 1.1.54394 de ClickHouse, 2018-07-12
Nouvelles fonctionnalités :
- Ajout de la fonction d’agrégation
histogram(Mikhail Surin). - Désormais,
OPTIMIZE TABLE ... FINALpeut être utilisé sans avoir à préciser de partition pourReplicatedMergeTree(Amos Bird).
Corrections de bugs :
- Correction d’un problème de délai d’expiration très court pour les sockets (une seconde) en lecture et en écriture lors de l’envoi et du téléchargement de données répliquées, ce qui empêchait de télécharger des parties de données plus volumineuses en cas de charge sur le réseau ou le disque (cela entraînait des tentatives cycliques de téléchargement des parties). Cette erreur se produisait dans la version 1.1.54388.
- Correction de problèmes lors de l’utilisation de chroot dans ZooKeeper en cas d’insertion de blocs de données en double dans la table.
- La fonction
hasfonctionne désormais correctement pour un tableau contenant des éléments Nullable (#2115). - La table
system.tablesfonctionne désormais correctement lorsqu’elle est utilisée dans des requêtes distribuées. Les colonnesmetadata_modification_timeetengine_fullne sont désormais plus virtuelles. Correction d’une erreur qui se produisait lorsque seules ces colonnes étaient interrogées dans la table. - Correction du fonctionnement d’une table
TinyLogvide après l’insertion d’un bloc de données vide (#2563). - La table
system.zookeeperfonctionne si la valeur du nœud dans ZooKeeper est NULL.
Version de ClickHouse 1.1.54390, 2018-07-06
Nouvelles fonctionnalités :
- Les requêtes peuvent être envoyées au format
multipart/form-data(dans le champquery), ce qui est utile si des données externes sont également envoyées pour le traitement de la requête (Olga Hvostikova). - Possibilité ajoutée d’activer ou de désactiver la prise en charge des guillemets simples ou doubles lors de la lecture de données au format CSV. Vous pouvez la configurer dans les paramètres
format_csv_allow_single_quotesetformat_csv_allow_double_quotes(Amos Bird). - Désormais,
OPTIMIZE TABLE ... FINALpeut être utilisé sans spécifier la partition pour les variantes non répliquées deMergeTree(Amos Bird).
Améliorations :
- Performances améliorées, consommation de mémoire réduite et suivi correct de la consommation de mémoire lors de l’utilisation de l’opérateur IN lorsqu’un index de table peut être utilisé (#2584).
- Suppression de la vérification redondante des sommes de contrôle lors de l’ajout d’une part de données. C’est important lorsqu’il existe un grand nombre de répliques, car dans ce cas, le nombre total de vérifications était égal à N^2.
- Ajout de la prise en charge des arguments
Array(Tuple(...))pour la fonctionarrayEnumerateUniq(#2573). - Ajout de la prise en charge de
Nullablepour la fonctionrunningDifference(#2594). - Amélioration des performances de l’analyse des requêtes lorsqu’il existe un très grand nombre d’expressions (#2572).
- Sélection plus rapide des parts de données à fusionner dans les tables
ReplicatedMergeTree. Récupération plus rapide de la session ZooKeeper (#2597). - Le fichier
format_version.txtdes tablesMergeTreeest recréé s’il est manquant, ce qui est logique si ClickHouse est lancé après la copie de la structure du répertoire sans les fichiers (Ciprian Hacman).
Corrections de bugs :
- Correction d’un bug lors de l’utilisation de ZooKeeper qui pouvait rendre impossible la restauration des états de session et
readonlydes tables avant le redémarrage du serveur. - Correction d’un bug lors de l’utilisation de ZooKeeper qui pouvait empêcher la suppression des anciens nœuds si la session était interrompue.
- Correction d’une erreur dans la fonction
quantileTDigestpour les arguments Float (ce bug a été introduit dans la version 1.1.54388) (Mikhail Surin). - Correction d’un bug dans l’index des tables MergeTree si la colonne de clé primaire se trouvait à l’intérieur de la fonction de conversion de types entre entiers signés et non signés de même taille (#2603).
- Correction d’un segfault si des
macrossont utilisées alors qu’elles ne figurent pas dans le fichier de configuration (#2570). - Correction d’un problème provoquant le basculement vers la base de données
defaultlors de la reconnexion du client (#2583). - Correction d’un bug qui se produisait lorsque le paramètre
use_index_for_in_with_subqueriesétait désactivé.
Correctif de sécurité :
- L’envoi de fichiers n’est plus possible lors d’une connexion à MySQL (
LOAD DATA LOCAL INFILE).
Version de ClickHouse 1.1.54388, 2018-06-28
Nouvelles fonctionnalités :
- Prise en charge de la requête
ALTER TABLE t DELETE WHEREpour les tables répliquées. Ajout de la tablesystem.mutationspour suivre l’avancement de ce type de requêtes. - Prise en charge de la requête
ALTER TABLE t [REPLACE|ATTACH] PARTITIONpour les tables *MergeTree. - Prise en charge de la requête
TRUNCATE TABLE(Winter Zhang) - Plusieurs nouvelles requêtes
SYSTEMpour les tables répliquées (RESTART REPLICAS,SYNC REPLICA,[STOP|START] [MERGES|FETCHES|SENDS REPLICATED|REPLICATION QUEUES]). - Ajout de la possibilité d’écrire dans une table utilisant le moteur MySQL, ainsi que dans la fonction de table correspondante (sundy-li).
- Ajout de la fonction de table
url()et du moteur de tableURL(Alexander Sapin). - Ajout de la fonction d’agrégation
windowFunnel(sundy-li). - Ajout des fonctions
startsWithetendsWithpour les chaînes de caractères (Vadim Plakhtinsky). - La fonction de table
numbers()permet désormais de spécifier l’offset (Winter Zhang). - Le mot de passe de
clickhouse-clientpeut désormais être saisi de manière interactive. - Les logs du serveur peuvent désormais être envoyés à syslog (Alexander Krasheninnikov).
- Prise en charge de la journalisation dans les dictionnaires avec une source de bibliothèque partagée (Alexander Sapin).
- Prise en charge de délimiteurs CSV personnalisés (Ivan Zhukov)
- Ajout du paramètre
date_time_input_format. Si vous définissez ce paramètre sur'best_effort', les valeursDateTimepourront être lues dans une large gamme de formats. - Ajout de l’utilitaire
clickhouse-obfuscatorpour l’obfuscation des données. Exemple d’utilisation : publication de données utilisées dans le cadre de tests de performance.
Fonctionnalités expérimentales :
- Ajout de la possibilité de n’évaluer les arguments de
andque lorsqu’ils sont nécessaires (Anastasia Tsarkova) - La compilation JIT en code natif est désormais disponible pour certaines expressions (pyos).
Correctifs de bugs :
- Les doublons n’apparaissent plus dans les requêtes avec
DISTINCTetORDER BY. - Les requêtes avec
ARRAY JOINetarrayFilterne renvoient plus de résultats incorrects. - Correction d’une erreur lors de la lecture d’un colonne de tableau dans une structure Nested (#2066).
- Correction d’une erreur lors de l’analyse de requêtes avec une clause HAVING du type
HAVING tuple IN (...). - Correction d’une erreur lors de l’analyse de requêtes avec des alias récursifs.
- Correction d’une erreur lors de la lecture depuis ReplacingMergeTree avec une condition dans PREWHERE qui filtre toutes les lignes (#2525).
- Les paramètres du profil utilisateur n’étaient pas appliqués lors de l’utilisation de sessions dans l’interface HTTP.
- Correction de l’application des paramètres issus des options de ligne de commande dans clickhouse-local.
- La bibliothèque cliente ZooKeeper utilise désormais le délai d’expiration de session reçu du serveur.
- Correction d’un bug dans la bibliothèque cliente ZooKeeper lorsque le client attendait la réponse du serveur plus longtemps que le délai d’expiration.
- Correction de l’élagage des parts pour les requêtes avec des conditions sur les colonnes de clé de partition (#2342).
- Les merges sont désormais possibles après
CLEAR COLUMN IN PARTITION(#2315). - Correction de la correspondance des types dans la fonction de table ODBC (sundy-li).
- Les comparaisons de types ont été corrigées pour
DateTimeavec et sans fuseau horaire (Alexander Bocharov). - Correction de l’analyse syntaxique et du formatage de l’opérateur
CAST. - Correction de l’insertion dans une vue matérialisée pour le moteur de table Distributed (Babacar Diassé).
- Correction d’une situation de concurrence lors de l’écriture de données depuis le moteur
Kafkavers des vues matérialisées (Yangkuan Liu). - Correction d’une vulnérabilité SSRF dans la fonction de table remote().
- Correction du comportement de sortie de
clickhouse-clienten mode multiligne (#2510).
Améliorations :
- Les tâches en arrière-plan dans les tables répliquées sont désormais exécutées dans un pool de threads, au lieu de l’être dans des threads distincts (Silviu Caragea).
- Amélioration des performances de compression LZ4.
- Analyse plus rapide pour les requêtes comportant un grand nombre de JOIN et de sous-requêtes.
- Le cache DNS est désormais mis à jour automatiquement en cas de trop grand nombre d’erreurs réseau.
- Les insertions dans la table ne sont plus effectuées s’il est impossible d’insérer dans l’une des vues matérialisées parce qu’elle comporte trop de parts.
- Correction de l’écart dans les compteurs d’événements
Query,SelectQueryetInsertQuery. - Les expressions comme
tuple IN (SELECT tuple)sont autorisées si les types de tuple correspondent. - Un serveur avec des tables répliquées peut démarrer même si ZooKeeper n’est pas configuré.
- Lors du calcul du nombre de cœurs CPU disponibles, les limites des cgroups sont désormais prises en compte (Atri Sharma).
- Ajout de
chownpour les répertoires de configuration dans le fichier de configuration systemd (Mikhail Shiryaev).
Modifications du build :
- Le compilateur gcc8 peut être utilisé pour les compilations.
- Ajout de la possibilité de compiler llvm à partir du sous-module.
- La version de la bibliothèque librdkafka a été mise à jour vers la v0.11.4.
- Ajout de la possibilité d’utiliser la bibliothèque système libcpuid. La version de la bibliothèque a été mise à jour vers la 0.4.0.
- Correction de la compilation avec la bibliothèque vectorclass (Babacar Diassé).
- Cmake génère désormais par défaut les fichiers pour ninja (comme avec
-G Ninja). - Ajout de la possibilité d’utiliser la bibliothèque libtinfo à la place de libtermcap (Georgy Kondratiev).
- Correction d’un conflit de fichier d’en-tête dans Fedora Rawhide (#2520).
Changements non rétrocompatibles :
- Suppression de l’échappement dans les formats
VerticaletPretty*, et suppression du formatVerticalRaw. - Si des serveurs en version 1.1.54388 (ou ultérieure) et des serveurs d’une version plus ancienne sont utilisés simultanément dans une requête distribuée, et que la requête contient l’expression
cast(x, 'Type')sans le mot-cléASet sans que le motcastsoit en majuscules, une exception sera levée avec un message du typeNot found column cast(0, 'UInt8') in block. Solution : mettez à jour les serveurs sur l’ensemble du cluster.
Version de ClickHouse 1.1.54385, 2018-06-01
Corrections de bugs :
- Correction d’une erreur qui, dans certains cas, provoquait le blocage des opérations ZooKeeper.
Version de ClickHouse 1.1.54383, 2018-05-22
Corrections de bugs :
- Correction d’un ralentissement de la file d’attente de réplication lorsqu’une table comporte de nombreuses répliques.
Version de ClickHouse 1.1.54381, 2018-05-14
Corrections de bugs :
- Correction d’une fuite de nœuds dans ZooKeeper lorsque ClickHouse perd sa connexion au serveur ZooKeeper.
Version 1.1.54380 de ClickHouse, 2018-04-21
Nouvelles fonctionnalités :
- Ajout de la fonction de table
file(path, format, structure). Exemple de lecture d’octets depuis/dev/urandom:ln -s /dev/urandom /var/lib/clickhouse/user_files/random``clickhouse-client -q "SELECT * FROM file('random', 'RowBinary', 'd UInt8') LIMIT 10".
Améliorations :
- Les sous-requêtes peuvent être encadrées par des parenthèses
()pour améliorer la lisibilité des requêtes. Par exemple :(SELECT 1) UNION ALL (SELECT 1). - Les requêtes
SELECTsimples sur la tablesystem.processesne sont pas comptabilisées dans la limitemax_concurrent_queries.
Corrections de bugs :
- Correction du comportement incorrect de l’opérateur
INlors d’unSELECTdepuis uneMATERIALIZED VIEW. - Correction du filtrage incorrect par l’index de partition dans des expressions comme
partition_key_column IN (...). - Correction de l’impossibilité d’exécuter la requête
OPTIMIZEsur une réplique non leader siREANAMEavait été effectué sur la table. - Correction de l’erreur d’autorisation lors de l’exécution des requêtes
OPTIMIZEouALTERsur une réplique non leader. - Correction du blocage de
KILL QUERY. - Correction d’une erreur dans la bibliothèque cliente ZooKeeper qui entraînait la perte des watches, le blocage de la file de DDL distribuée et des ralentissements dans la file de réplication lorsqu’un préfixe
chrootnon vide est utilisé dans la configuration ZooKeeper.
Changements non rétrocompatibles :
- La prise en charge des expressions telles que
(a, b) IN (SELECT (a, b))a été supprimée (vous pouvez utiliser l’expression équivalente(a, b) IN (SELECT a, b)). Dans les versions précédentes, ces expressions entraînaient un filtrageWHEREindéterminé ou provoquaient des erreurs.
Version de ClickHouse 1.1.54378, 2018-04-16
Nouvelles fonctionnalités :
- Le niveau de journalisation peut être modifié sans redémarrer le serveur.
- Ajout de la requête
SHOW CREATE DATABASE. - Le
query_idpeut être transmis àclickhouse-client(elBroom). - Nouveau paramètre :
max_network_bandwidth_for_all_users. - Ajout de la prise en charge de
ALTER TABLE ... PARTITION ...pourMATERIALIZED VIEW. - Ajout d’informations sur la taille des parties de données sous forme non compressée dans la table système.
- Prise en charge du chiffrement de serveur à serveur pour les tables distribuées (
<secure>1</secure>dans la configuration de la réplique de<remote_servers>). - Configuration au niveau de la table pour la famille
ReplicatedMergeTreeafin de minimiser la quantité de données stockées dans ZooKeeper :use_minimalistic_checksums_in_zookeeper = 1 - Configuration de l’invite de
clickhouse-client. Par défaut, les noms de serveur sont désormais affichés dans l’invite. Le nom d’affichage du serveur peut être modifié. Il est également envoyé dans l’en-tête HTTPX-ClickHouse-Display-Name(Kirill Shvakov). - Plusieurs
topicsséparés par des virgules peuvent être spécifiés pour le moteurKafka(Tobias Adamson) - Lorsqu’une requête est arrêtée par
KILL QUERYoureplace_running_query, le client reçoit l’exceptionQuery was canceledau lieu d’un résultat incomplet.
Améliorations :
- Les requêtes
ALTER TABLE ... DROP/DETACH PARTITIONsont exécutées en tête de la file de réplication. SELECT ... FINALetOPTIMIZE ... FINALpeuvent être utilisés même lorsque la table ne comporte qu’une seule partie de données.- Une table
query_logest recréée à la volée si elle a été supprimée manuellement (Kirill Shvakov). - La fonction
lengthUTF8s’exécute plus rapidement (zhang2014). - Performances améliorées des insertions synchrones dans les tables
Distributed(insert_distributed_sync = 1) lorsqu’il y a un très grand nombre de shards. - Le serveur accepte les paramètres
send_timeoutetreceive_timeoutdu client et les applique lors de la connexion au client (ils sont appliqués dans l’ordre inverse : lesend_timeoutdu socket du serveur est défini sur la valeur dereceive_timeoutreçue du client, et inversement). - Récupération après panne plus robuste pour l’insertion asynchrone dans les tables
Distributed. - Le type de retour de la fonction
countEqualest passé deUInt32àUInt64(谢磊).
Correction de bugs :
- Correction d’une erreur avec
INlorsque le côté gauche de l’expression estNullable. - Des résultats corrects sont désormais renvoyés lors de l’utilisation de tuples avec
INlorsque certains éléments du tuple se trouvent dans l’index de la table. - La limite
max_execution_timefonctionne désormais correctement avec les requêtes distribuées. - Correction d’erreurs lors du calcul de la taille des colonnes composites dans la table
system.columns. - Correction d’une erreur lors de la création d’une table temporaire
CREATE TEMPORARY TABLE IF NOT EXISTS. - Correction d’erreurs dans
StorageKafka(##2075) - Correction de plantages du serveur dus à des arguments invalides de certaines fonctions d’agrégation.
- Correction de l’erreur qui empêchait la requête
DETACH DATABASEd’arrêter les tâches en arrière-plan pour les tablesReplicatedMergeTree. - L’état
Too many partsest désormais moins susceptible de se produire lors de l’insertion dans des vues matérialisées agrégées (##2084). - Correction de la gestion récursive des substitutions dans la configuration lorsqu’une substitution doit être suivie d’une autre substitution au même niveau.
- Correction de la syntaxe dans le fichier de métadonnées lors de la création d’une
VIEWutilisant une requête avecUNION ALL. SummingMergeTreefonctionne désormais correctement pour la sommation de structures de données imbriquées avec une clé composite.- Correction de la possibilité d’une condition de concurrence lors du choix du leader pour les tables
ReplicatedMergeTree.
Modifications du build :
- Le build prend en charge
ninjaà la place demakeet utiliseninjapar défaut pour compiler les releases. - Paquets renommés :
clickhouse-server-basedevientclickhouse-common-static;clickhouse-server-commondevientclickhouse-server;clickhouse-common-dbgdevientclickhouse-common-static-dbg. Pour l’installation, utilisezclickhouse-server clickhouse-client. Les paquets portant les anciens noms resteront disponibles dans les dépôts pour assurer la rétrocompatibilité.
Changement non rétrocompatible :
- Suppression de l’interprétation spéciale d’une expression IN lorsqu’un tableau est spécifié dans la partie gauche. Auparavant, l’expression
arr IN (set)était interprétée comme « au moins un élément dearrappartient àset». Pour obtenir le même comportement dans la nouvelle version, écrivezarrayExists(x -> x IN (set), arr). - Désactivation de l’utilisation incorrecte de l’option de socket
SO_REUSEPORT, qui était activée par défaut à tort dans la bibliothèque Poco. Notez que sous Linux, il n’y a désormais plus aucune raison de spécifier simultanément les adresses::et0.0.0.0pour l’écoute : utilisez simplement::, qui permet d’écouter les connexions à la fois en IPv4 et en IPv6 (avec les paramètres par défaut de la config du noyau). Vous pouvez également revenir au comportement des versions précédentes en spécifiant<listen_reuse_port>1</listen_reuse_port>dans la config.
Version de ClickHouse 1.1.54370, 2018-03-16
Nouvelles fonctionnalités :
- Ajout de la table
system.macroset de la mise à jour automatique des macros lors de la modification du fichier de configuration. - Ajout de la requête
SYSTEM RELOAD CONFIG. - Ajout de la fonction d’agrégation
maxIntersections(left_col, right_col), qui renvoie le nombre maximal d’intervalles[left; right]se chevauchant simultanément. La fonctionmaxIntersectionsPosition(left, right)renvoie le début de l’intervalle « maximal ». (Michael Furmur).
Améliorations :
- Lors de l’insertion de données dans une table
Replicated, moins de requêtes sont envoyées àZooKeeper(et la plupart des erreurs côté utilisateur ont disparu du journalZooKeeper). - Possibilité ajoutée de créer des alias pour des jeux de données. Exemple :
WITH (1, 2, 3) AS set SELECT number IN set FROM system.numbers LIMIT 10.
Corrections de bugs :
- Correction de l’erreur
Illegal PREWHERElors de la lecture de tables Merge pour des tablesDistributed. - Ajout de correctifs permettant de démarrer clickhouse-server dans des conteneurs Docker en IPv4 uniquement.
- Correction d’une condition de concurrence lors de la lecture des tables système
system.parts_columns tables. - Suppression de la double mise en mémoire tampon lors d’un insert synchrone dans une table
Distributed, ce qui pouvait entraîner un dépassement du délai d’attente de la connexion. - Correction d’un bug qui entraînait des attentes excessivement longues sur une réplique indisponible avant le démarrage d’une requête
SELECT. - Correction de dates incorrectes dans la table
system.parts. - Correction d’un bug qui empêchait l’insert de données dans une table
Replicatedsichrootn’était pas vide dans la configuration du clusterZooKeeper. - Correction de l’algorithme de fusion verticale pour une table avec un
ORDER BYvide. - Rétablissement de la possibilité d’utiliser des dictionnaires dans des requêtes sur des tables distantes, même si ces dictionnaires ne sont pas présents sur le serveur demandeur. Cette fonctionnalité avait été perdue dans la version 1.1.54362.
- Rétablissement du comportement pour des requêtes comme
SELECT * FROM remote('server2', default.table) WHERE col IN (SELECT col2 FROM default.table)lorsque la partie droite deINdoit utiliser une table distantedefault.tableau lieu d’une table locale. Ce comportement était cassé dans la version 1.1.54358. - Suppression de la journalisation superflue au niveau erreur de
Not found column ... in block.
Version de ClickHouse 1.1.54362, 2018-03-11
Nouvelles fonctionnalités :
- L’agrégation sans
GROUP BYsur un ensemble vide (tel queSELECT count(*) FROM table WHERE 0) renvoie désormais un résultat d’une ligne contenant des valeurs nulles pour les fonctions d’agrégation, conformément à la norme SQL. Pour rétablir l’ancien comportement (renvoyer un résultat vide), définissezempty_result_for_aggregation_by_empty_setsur 1. - Ajout de la conversion de type pour
UNION ALL. Des noms d’alias différents sont autorisés dans les positionsSELECTdeUNION ALL, conformément à la norme SQL. - Les expressions arbitraires sont prises en charge dans les clauses
LIMIT BY. Auparavant, il était seulement possible d’utiliser les colonnes résultant deSELECT. - Un index des tables
MergeTreeest utilisé lorsqueINest appliqué à un tuple d’expressions issu des colonnes de la clé primaire. Exemple :WHERE (UserID, EventDate) IN ((123, '2000-01-01'), ...)(Anastasiya Tsarkova). - Ajout de l’outil
clickhouse-copierpour la copie entre clusters et le repartitionnement des données (bêta). - Ajout de fonctions de hachage cohérent :
yandexConsistentHash,jumpConsistentHash,sumburConsistentHash. Elles peuvent être utilisées comme clé de sharding afin de réduire la quantité de trafic réseau lors des repartitionnements ultérieurs. - Fonctions ajoutées :
arrayAny,arrayAll,hasAny,hasAll,arrayIntersect,arrayResize. - Ajout de la fonction
arrayCumSum(Javi Santana). - Ajout des fonctions
parseDateTimeBestEffort,parseDateTimeBestEffortOrZeroetparseDateTimeBestEffortOrNullpour lire des valeursDateTimeà partir d’une chaîne contenant du texte dans un très large éventail de formats possibles. - Les données peuvent être rechargées partiellement à partir de dictionnaires externes pendant la mise à jour (chargement uniquement des enregistrements pour lesquels la valeur du champ spécifié est supérieure à celle du téléchargement précédent) (Arsen Hakobyan).
- Ajout de la fonction de table
cluster. Exemple :cluster(cluster_name, db, table). La fonction de tableremotepeut accepter le nom du cluster comme premier argument, s’il est spécifié comme identifiant. - Les fonctions de table
remoteetclusterpeuvent être utilisées dans les requêtesINSERT. - Ajout des colonnes virtuelles
create_table_queryetengine_fullà la tablesystem.tables. La colonnemetadata_modification_timeest virtuelle. - Ajout des colonnes
data_pathetmetadata_pathaux tablessystem.tablesetsystem.databases, ainsi que de la colonnepathaux tablessystem.partsetsystem.parts_columns. - Ajout d’informations supplémentaires sur les fusions dans la table
system.part_log. - Une clé de partitionnement arbitraire peut être utilisée pour la table
system.query_log(Kirill Shvakov). - La requête
SHOW TABLESaffiche désormais également les tables temporaires. Ajout des tables temporaires et de la colonneis_temporaryàsystem.tables(zhang2014). - Ajout des requêtes
DROP TEMPORARY TABLEetEXISTS TEMPORARY TABLE(zhang2014). - Prise en charge de
SHOW CREATE TABLEpour les tables temporaires (zhang2014). - Ajout du paramètre de configuration
system_profilepour les paramètres utilisés par les processus internes. - Prise en charge du chargement de
object_idcomme attribut dans les dictionnairesMongoDB(Pavel Litvinenko). - Lecture de
nullcomme valeur par défaut lors du chargement de données pour un dictionnaire externe avec la sourceMongoDB(Pavel Litvinenko). - Lecture des valeurs
DateTimeau formatValuesà partir d’un Unix timestamp sans guillemets simples. - Le basculement est pris en charge dans les fonctions de table
remotelorsque certaines répliques ne disposent pas de la table demandée. - Les paramètres de configuration peuvent être surchargés en ligne de commande lors de l’exécution de
clickhouse-server. Exemple :clickhouse-server -- --logger.level=information. - Implémentation de la fonction
emptypour un argumentFixedString: la fonction renvoie 1 si la chaîne est entièrement composée d’octets nuls (zhang2014). - Ajout du paramètre de configuration
listen_trypour écouter sur au moins une des adresses d’écoute sans quitter, si l’écoute sur certaines adresses échoue (utile pour les systèmes dont la prise en charge d’IPv4 ou d’IPv6 est désactivée). - Ajout du moteur de table
VersionedCollapsingMergeTree. - Prise en charge des lignes et des types numériques arbitraires avec la source de dictionnaire
library. - Les tables
MergeTreepeuvent être utilisées sans clé primaire (vous devez spécifierORDER BY tuple()). - Un type
Nullablepeut êtreCASTvers un type non-Nullablesi l’argument n’est pasNULL. RENAME TABLEpeut être exécuté surVIEW.- Ajout de la fonction
throwIf. - Ajout de l’option
odbc_default_field_size, qui permet d’augmenter la taille maximale de la valeur chargée depuis une source ODBC (par défaut, elle est de 1024). - La table
system.processesetSHOW PROCESSLISTincluent désormais les colonnesis_cancelledetpeak_memory_usage.
Améliorations :
- Les limites et quotas appliqués au résultat ne s’appliquent plus aux données intermédiaires des requêtes
INSERT SELECTni aux sous-requêtesSELECT. - Moins de déclenchements intempestifs de
force_restore_datalors de la vérification de l’état des tablesReplicatedau démarrage du serveur. - Ajout de l’option
allow_distributed_ddl. - Les fonctions non déterministes ne sont pas autorisées dans les expressions des clés de table
MergeTree. - Les fichiers contenant des substitutions dans les répertoires
config.dsont chargés par ordre alphabétique. - Amélioration des performances de la fonction
arrayElementdans le cas d’un tableau multidimensionnel constant contenant un tableau vide parmi ses éléments. Exemple :[[1], []][x]. - Le serveur démarre désormais plus rapidement lors de l’utilisation de fichiers de configuration contenant de très grandes substitutions (par exemple, de très grandes listes de réseaux IP).
- Lors de l’exécution d’une requête, les fonctions de table sont exécutées une seule fois. Auparavant, les fonctions de table
remoteetmysqlexécutaient la même requête deux fois pour récupérer la structure de la table depuis un serveur distant. - Le générateur de documentation
MkDocsest utilisé. - Lorsque vous essayez de supprimer une colonne de table dont dépendent les expressions
DEFAULT/MATERIALIZEDd’autres colonnes, une exception est levée (zhang2014). - Ajout de la possibilité d’interpréter une ligne vide dans les formats texte comme le nombre 0 pour les types de données
Float. Cette fonctionnalité était auparavant disponible, mais a été perdue dans la version 1.1.54342. - Les valeurs
Enumpeuvent être utilisées dansmin,max,sumet certaines autres fonctions. Dans ces cas, les valeurs numériques correspondantes sont utilisées. Cette fonctionnalité était auparavant disponible, mais a été perdue dans la version 1.1.54337. - Ajout de
max_expanded_ast_elementspour limiter la taille de l’AST après expansion récursive des alias.
Corrections de bugs :
- Correction des cas où des colonnes inutiles étaient supprimées par erreur des sous-requêtes, ou n’étaient pas supprimées des sous-requêtes contenant
UNION ALL. - Correction d’un bug dans les fusions des tables
ReplacingMergeTree. - Correction des insertions synchrones dans les tables
Distributed(insert_distributed_sync = 1). - Correction d’un segfault dans certains cas d’utilisation de
FULLetRIGHT JOINavec des colonnes dupliquées dans les sous-requêtes. - Correction d’un segfault dans certains cas d’utilisation de
replace_running_queryetKILL QUERY. - Correction de l’ordre des colonnes
sourceetlast_exceptiondans la tablesystem.dictionaries. - Correction d’un bug où la requête
DROP DATABASEne supprimait pas le fichier de métadonnées. - Correction de la requête
DROP DATABASEpour les bases de donnéesDictionary. - Correction du manque de précision des fonctions
uniqHLL12etuniqCombinedpour des cardinalités supérieures à 100 millions d’éléments (Alex Bocharov). - Correction du calcul des valeurs par défaut implicites lorsqu’il fallait calculer simultanément des expressions par défaut explicites dans les requêtes
INSERT(zhang2014). - Correction d’un cas rare où une requête sur une table
MergeTreene pouvait pas se terminer (chenxing-xc). - Correction d’un crash qui se produisait lors de l’exécution d’une requête
CHECKsur des tablesDistributedsi tous les shards étaient locaux (chenxing.xc). - Correction d’une légère régression des performances des fonctions utilisant des expressions régulières.
- Correction d’une régression des performances lors de la création de tableaux multidimensionnels à partir d’expressions complexes.
- Correction d’un bug qui pouvait faire apparaître une section
FORMATsupplémentaire dans un fichier.sqlde métadonnées. - Correction d’un bug qui faisait que la limite
max_table_size_to_drops’appliquait lors d’une tentative de suppression d’uneMATERIALIZED VIEWpointant vers une table explicitement spécifiée. - Correction de l’incompatibilité avec les anciens clients (des données du type
DateTime('timezone'), qu’ils ne comprennent pas, leur étaient parfois envoyées). - Correction d’un bug lors de la lecture des éléments de colonne
Nestedde structures ajoutées avecALTER, mais vides dans les anciennes partitions, lorsque les conditions sur ces colonnes étaient déplacées versPREWHERE. - Correction d’un bug lors du filtrage des tables par les colonnes virtuelles
_tabledans les requêtes sur des tablesMerge. - Correction d’un bug lors de l’utilisation de colonnes
ALIASdans des tablesDistributed. - Correction d’un bug qui empêchait la compilation dynamique des requêtes avec des fonctions d’agrégation de la famille
quantile. - Correction d’une race condition dans le pipeline d’exécution des requêtes, qui se produisait dans de très rares cas lors de l’utilisation de tables
Mergeavec un grand nombre de tables, ainsi que lors de l’utilisation de sous-requêtesGLOBAL. - Correction d’un crash lors du passage de tableaux de tailles différentes à une fonction
arrayReducelors de l’utilisation de fonctions d’agrégation à plusieurs arguments. - Interdiction des requêtes avec
UNION ALLdans uneMATERIALIZED VIEW. - Correction d’une erreur lors de l’initialisation de la table système
part_logau démarrage du serveur (par défaut,part_logest désactivée).
Changement non rétrocompatible :
- Suppression de l’option
distributed_ddl_allow_replicated_alter. Ce comportement est activé par défaut. - Suppression du paramètre
strict_insert_defaults. Si vous utilisiez cette fonctionnalité, contactezfeedback@clickhouse.com. - Suppression du moteur
UnsortedMergeTree.
Version de ClickHouse 1.1.54343, 2018-02-05
- Ajout de la prise en charge des macros pour définir les noms de cluster dans les requêtes DDL distribuées et les constructeurs de tables Distributed :
CREATE TABLE distr ON CLUSTER '{cluster}' (...) ENGINE = Distributed('{cluster}', 'db', 'table'). - Désormais, les requêtes comme
SELECT ... FROM table WHERE expr IN (subquery)sont traitées à l’aide de l’indextable. - Amélioration de la gestion des doublons lors des insertions dans des tables Replicated, afin qu’ils ne ralentissent plus l’exécution de la file de réplication.
Version de ClickHouse 1.1.54342, 2018-01-22
- Correction d’une régression dans la version 1.1.54337 : si l’utilisateur
defaultdispose d’un accès en lecture seule, le serveur refuse de démarrer avec le messageCannot create database in readonly mode. - Correction d’une régression dans la version 1.1.54337 : sur les systèmes utilisant systemd, les logs sont toujours écrits dans syslog, quelle que soit la configuration ; le script watchdog utilise toujours init.d.
- Correction d’une régression dans la version 1.1.54337 : configuration par défaut incorrecte dans l’image Docker.
- Correction du comportement non déterministe de GraphiteMergeTree (vous pouvez l’observer dans les messages de log
Data after merge is not byte-identical to the data on another replicas). - Correction d’un bug pouvant entraîner des fusions incohérentes après une requête OPTIMIZE sur des tables répliquées (vous pouvez l’observer dans les messages de log
Part ... intersects the previous part). - Les tables Buffer fonctionnent désormais correctement lorsque des colonnes MATERIALIZED sont présentes dans la table de destination (par zhang2014).
- Correction d’un bug dans l’implémentation de NULL.
Version de ClickHouse 1.1.54337, 2018-01-18
Nouvelles fonctionnalités :
- Ajout de la prise en charge du stockage de tableaux multidimensionnels et de tuples (type de données
Tuple) dans les tables. - Prise en charge des fonctions de table pour les requêtes
DESCRIBEetINSERT. Ajout de la prise en charge des sous-requêtes dansDESCRIBE. Exemples :DESC TABLE remote('host', default.hits);DESC TABLE (SELECT 1);INSERT INTO TABLE FUNCTION remote('host', default.hits). Prise en charge deINSERT INTO TABLEen plus deINSERT INTO. - Amélioration de la prise en charge des fuseaux horaires. Le type de données
DateTimepeut être annoté avec le fuseau horaire utilisé pour l’analyse et le formatage dans les formats texte. Exemple :DateTime('Asia/Istanbul'). Lorsque des fuseaux horaires sont spécifiés dans des fonctions pour des argumentsDateTime, le type de retour conserve le fuseau horaire, et la valeur s’affiche comme prévu. - Ajout des fonctions
toTimeZone,timeDiff,toQuarter,toRelativeQuarterNum. Les fonctionstoRelativeHour/Minute/Secondpeuvent accepter une valeur de typeDatecomme argument. Le nom de la fonctionnowest sensible à la casse. - Ajout de la fonction
toStartOfFifteenMinutes(Kirill Shvakov). - Ajout de l’outil
clickhouse formatpour le formatage des requêtes. - Ajout du paramètre de configuration
format_schema_path(Marek Vavruša). Il sert à spécifier un schéma au formatCap'n Proto. Les fichiers de schéma ne peuvent se trouver que dans le répertoire spécifié. - Ajout de la prise en charge des substitutions de configuration (
incletconf.d) pour la configuration des dictionnaires externes et des modèles (Pavel Yakunin). - Ajout d’une colonne de documentation à la table
system.settings(Kirill Shvakov). - Ajout de la table
system.parts_columns, qui contient des informations sur la taille des colonnes dans chaque partie de données des tablesMergeTree. - Ajout de la table
system.models, qui contient des informations sur les modèles de machine learningCatBoostchargés. - Ajout des fonctions de table
mysqletodbc, ainsi que des table engines correspondantsMySQLetODBC, pour accéder à des bases de données distantes. Cette fonctionnalité est au stade bêta. - Ajout de la possibilité de passer un argument de type
AggregateFunctionà la fonction d’agrégationgroupArray(afin de pouvoir créer un tableau d’états d’une fonction d’agrégation). - Suppression des restrictions sur diverses combinaisons de combinators de fonctions d’agrégation. Par exemple, vous pouvez utiliser les fonctions d’agrégation
avgForEachIfetavgIfForEach, qui ont des comportements différents. - Le combinator de fonction d’agrégation
-ForEachest étendu au cas des fonctions d’agrégation à plusieurs arguments. - Ajout de la prise en charge des fonctions d’agrégation avec des arguments
Nullable, même dans les cas où la fonction retourne un résultat nonNullable(ajouté avec la contribution de Silviu Caragea). Exemple :groupArray,groupUniqArray,topK. - Ajout de
max_client_network_bandwidthpourclickhouse-client(Kirill Shvakov). - Les utilisateurs avec le paramètre
readonly = 2sont autorisés à travailler avec des tables TEMPORARY (CREATE, DROP, INSERT…) (Kirill Shvakov). - Ajout de la prise en charge de l’utilisation de plusieurs consumers avec le moteur
Kafka. Extension des options de configuration pourKafka(Marek Vavruša). - Ajout des fonctions
intExp3etintExp4. - Ajout de la fonction d’agrégation
sumKahan. - Ajout des fonctions to * Number* OrNull, où * Number* est un type numérique.
- Ajout de la prise en charge des clauses
WITHpour une requêteINSERT SELECT(auteur : zhang2014). - Ajout des settings :
http_connection_timeout,http_send_timeout,http_receive_timeout. En particulier, ces settings sont utilisés pour télécharger des parties de données pour la réplication. La modification de ces settings permet un basculement plus rapide si le réseau est surchargé. - Ajout de la prise en charge de
ALTERpour les tables de typeNull(Anastasiya Tsarkova). - La fonction
reinterpretAsStringest étendue à tous les types de données stockés de manière contiguë en mémoire. - Ajout de l’option
--silentpour l’outilclickhouse-local. Elle supprime l’affichage des informations d’exécution des requêtes dans stderr. - Ajout de la prise en charge de la lecture de valeurs de type
Dateà partir de texte dans un format où le mois et/ou le jour du mois est indiqué avec un seul chiffre au lieu de deux chiffres (Amos Bird).
Optimisations des performances :
- Amélioration des performances des fonctions d’agrégation
min,max,any,anyLast,anyHeavy,argMin,argMaxavec des arguments de type chaîne. - Amélioration des performances des fonctions
isInfinite,isFinite,isNaN,roundToExp2. - Amélioration des performances de l’analyse et du formatage des valeurs de type
DateetDateTimeau format texte. - Amélioration des performances et de la précision de l’analyse des nombres à virgule flottante.
- Réduction de l’utilisation mémoire pour
JOINlorsque les côtés gauche et droit comportent des colonnes portant des noms identiques qui ne figurent pas dansUSING. - Amélioration des performances des fonctions d’agrégation
varSamp,varPop,stddevSamp,stddevPop,covarSamp,covarPop,corren réduisant la stabilité des calculs. Les anciennes fonctions restent disponibles sous les nomsvarSampStable,varPopStable,stddevSampStable,stddevPopStable,covarSampStable,covarPopStable,corrStable.
Corrections de bugs :
- Correction de la déduplication des données après l’exécution d’une requête
DROPouDETACH PARTITION. Dans la version précédente, supprimer une partition puis réinsérer les mêmes données ne fonctionnait pas, car les blocs insérés étaient considérés comme des doublons. - Correction d’un bug pouvant entraîner une interprétation incorrecte de la clause
WHEREpour les requêtesCREATE MATERIALIZED VIEWavecPOPULATE. - Correction d’un bug dans l’utilisation du paramètre
root_pathdans la configurationzookeeper_servers. - Correction de résultats inattendus lors du passage de l’argument
DateàtoStartOfDay. - Correction des fonctions
addMonthsetsubtractMonths, ainsi que de l’arithmétique deINTERVAL n MONTHdans les cas où le résultat retombe sur l’année précédente. - Ajout de la prise en charge manquante du type de données
UUIDpourDISTINCT,JOINet les fonctions d’agrégationuniq, ainsi que pour les dictionnaires externes (Evgeniy Ivanov). La prise en charge deUUIDreste incomplète. - Correction du comportement de
SummingMergeTreedans les cas où la somme des lignes donnait zéro. - Divers correctifs pour le moteur
Kafka(Marek Vavruša). - Correction du comportement incorrect du moteur de table
Join(Amos Bird). - Correction du comportement incorrect de l’allocateur sous FreeBSD et OS X.
- La fonction
extractAllprend désormais en charge les correspondances vides. - Correction d’une erreur qui bloquait l’utilisation de
libresslà la place deopenssl. - Correction de la requête
CREATE TABLE AS SELECTà partir de tables temporaires. - Correction de la non-atomicité de la mise à jour de la file de réplication. Cela pouvait entraîner une désynchronisation des répliques jusqu’au redémarrage du serveur.
- Correction d’un possible dépassement de capacité dans
gcd,lcmetmodulo(opérateur%) (Maks Skorokhod). - Les fichiers
-preprocessedsont désormais créés après modification deumask(umaskpeut être modifié dans la configuration). - Correction d’un bug dans la vérification en arrière-plan des parties (
MergeTreePartChecker) lors de l’utilisation d’une clé de partition personnalisée. - Correction de l’analyse des tuples (valeurs du type de données
Tuple) dans les formats texte. - Amélioration des messages d’erreur concernant les types incompatibles passés à
multiIf,arrayet à certaines autres fonctions. - Refonte de la prise en charge des types
Nullable. Correction de bugs pouvant provoquer un crash du serveur. Correction de presque tous les autres bugs liés à la prise en charge deNULL: conversions de types incorrectes dans INSERT SELECT, prise en charge insuffisante de Nullable dans HAVING et PREWHERE, modejoin_use_nulls, types Nullable comme arguments de l’opérateurOR, etc. - Correction de divers bugs liés à la sémantique interne des types de données. Exemples : sommation inutile des champs de type
EnumdansSummingMergeTree; alignement des typesEnumdans les formatsPretty, etc. - Vérifications plus strictes des combinaisons autorisées de colonnes composites.
- Correction du dépassement de capacité lors de la spécification d’un très grand paramètre pour le type de données
FixedString. - Correction d’un bug dans la fonction d’agrégation
topKdans un cas générique. - Ajout de la vérification manquante de l’égalité des tailles de tableau dans les arguments des variantes n-aires de fonctions d’agrégation avec le combinator
-Array. - Correction d’un bug dans
--pagerpourclickhouse-client(auteur : ks1322). - Correction de la précision de la fonction
exp10. - Correction du comportement de la fonction
visitParamExtractpour une meilleure conformité avec la documentation. - Correction du crash lorsque des types de données incorrects sont spécifiés.
- Correction du comportement de
DISTINCTdans le cas où toutes les colonnes sont des constantes. - Correction du formatage des requêtes dans le cas d’utilisation de la fonction
tupleElementavec une expression constante complexe comme index de l’élément du tuple. - Correction d’un bug dans les tables
Dictionarypour les dictionnairesrange_hashed. - Correction d’un bug entraînant un nombre excessif de lignes dans le résultat de
FULLetRIGHT JOIN(Amos Bird). - Correction d’un crash du serveur lors de la création et de la suppression de fichiers temporaires dans les répertoires
config.dpendant le rechargement de la configuration. - Correction de la requête
SYSTEM DROP DNS CACHE: le cache était vidé, mais les adresses des nœuds du cluster n’étaient pas mises à jour. - Correction du comportement de
MATERIALIZED VIEWaprès l’exécution deDETACH TABLEsur la table sous-jacente à la vue (Marek Vavruša).
Améliorations du build :
- L’outil
pbuilderest utilisé pour les builds. Le processus de build est presque entièrement indépendant de l’environnement de l’hôte de build. - Un seul build est utilisé pour différentes versions d’OS. Les paquets et les binaires ont été rendus compatibles avec un large éventail de systèmes Linux.
- Ajout du paquet
clickhouse-test. Il peut être utilisé pour exécuter des tests fonctionnels. - L’archive source peut désormais être publiée dans le dépôt. Elle peut être utilisée pour reproduire le build sans passer par GitHub.
- Ajout d’une intégration limitée avec Travis CI. En raison des limites de temps de build dans Travis, seul le build de débogage est testé et seul un sous-ensemble limité de tests est exécuté.
- Ajout de la prise en charge de
Cap'n'Protodans le build par défaut. - Changement du format des sources de la documentation, de
Restricted TextàMarkdown. - Ajout de la prise en charge de
systemd(Vladimir Smirnov). Elle est désactivée par défaut en raison d’une incompatibilité avec certaines images d’OS et peut être activée manuellement. - Pour la génération dynamique de code,
clangetlldsont intégrés au binaireclickhouse. Ils peuvent également être invoqués viaclickhouse clangetclickhouse lld. - Suppression de l’utilisation des extensions GNU dans le code. Activation de l’option
-Wextra. Lors d’un build avecclang, la bibliothèque par défaut estlibc++au lieu delibstdc++. - Extraction des bibliothèques
clickhouse_parsersetclickhouse_common_iopour accélérer les builds de divers outils.
Changements non rétrocompatibles :
- Le format des marks dans les tables de type
Logcontenant des colonnesNullablea été modifié de façon non rétrocompatible. Si vous avez de telles tables, vous devez les convertir au typeTinyLogavant de démarrer la nouvelle version du serveur. Pour ce faire, remplacezENGINE = LogparENGINE = TinyLogdans le fichier.sqlcorrespondant du répertoiremetadata. Si votre table ne comporte pas de colonnesNullableou si son type n’est pasLog, vous n’avez rien à faire. - Le paramètre
experimental_allow_extended_storage_definition_syntaxa été supprimé. Cette fonctionnalité est désormais activée par défaut. - La fonction
runningIncomea été renommée enrunningDifferenceStartingWithFirstvalueafin d’éviter toute confusion. - La syntaxe
FROM ARRAY JOIN arra été supprimée lorsque ARRAY JOIN est indiqué directement après FROM sans table (Amos Bird). - Le format
BlockTabSeparated, utilisé uniquement à des fins de démonstration, a été supprimé. - Le format d’état des fonctions d’agrégation
varSamp,varPop,stddevSamp,stddevPop,covarSamp,covarPop,corra été modifié. Si vous avez stocké les états de ces fonctions d’agrégation dans des tables (à l’aide du type de donnéesAggregateFunctionou de vues matérialisées avec les états correspondants), veuillez écrire à feedback@clickhouse.com. - Dans les versions précédentes du serveur, il existait une fonctionnalité non documentée : si une fonction d’agrégation dépend de paramètres, vous pouviez quand même la spécifier sans paramètres dans le type de données AggregateFunction. Exemple :
AggregateFunction(quantiles, UInt64)au lieu deAggregateFunction(quantiles(0.5, 0.9), UInt64). Cette fonctionnalité a disparu. Bien qu’elle n’ait pas été documentée, nous prévoyons de la prendre à nouveau en charge dans de futures versions. - Les types de données Enum ne peuvent pas être utilisés dans les fonctions d’agrégation min/max. Cette possibilité sera rétablie dans la prochaine version.
Veuillez noter lors de la mise à niveau :
- Lors d’une rolling update sur un cluster, lorsqu’une partie des répliques exécute encore l’ancienne version de ClickHouse et l’autre la nouvelle, la réplication s’interrompt temporairement et le message
unknown parameter 'shard'apparaît dans le journal. La réplication reprendra une fois que toutes les répliques du cluster auront été mises à jour. - Si différentes versions de ClickHouse s’exécutent sur les serveurs du cluster, il est possible que les requêtes distribuées utilisant les fonctions suivantes produisent des résultats incorrects :
varSamp,varPop,stddevSamp,stddevPop,covarSamp,covarPop,corr. Vous devez mettre à jour tous les nœuds du cluster.