mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-18 04:12:19 +00:00
[docs] draft of fr version (#9942)
This commit is contained in:
parent
700c27a99d
commit
197033dceb
265
docs/fr/changelog/2017.md
Normal file
265
docs/fr/changelog/2017.md
Normal file
@ -0,0 +1,265 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
### Clickhouse version 1.1.54327, 2017-12-21 {#clickhouse-release-1-1-54327-2017-12-21}
|
||||||
|
|
||||||
|
Cette version contient des corrections de bugs pour la version précédente 1.1.54318:
|
||||||
|
|
||||||
|
- Correction d'un bug avec condition de concurrence possible dans la réplication qui pourrait conduire à la perte de données. Ce problème affecte les versions 1.1.54310 et 1.1.54318. Si vous utilisez l'une de ces versions avec des tables répliquées, la mise à jour est fortement recommandée. Ce problème apparaît dans les journaux dans les messages d'avertissement comme `Part ... from own log doesn't exist.` Le problème est pertinent même si vous ne voyez pas ces messages dans les journaux.
|
||||||
|
|
||||||
|
### Clickhouse version 1.1.54318, 2017-11-30 {#clickhouse-release-1-1-54318-2017-11-30}
|
||||||
|
|
||||||
|
Cette version contient des corrections de bugs pour la version précédente 1.1.54310:
|
||||||
|
|
||||||
|
- Correction de suppressions de ligne incorrectes lors des fusions dans le moteur SummingMergeTree
|
||||||
|
- Correction d'une fuite de mémoire dans les moteurs mergetree non compliqués
|
||||||
|
- Correction de la dégradation des performances avec des inserts fréquents dans les moteurs MergeTree
|
||||||
|
- Correction d'un problème qui causait la file d'attente de réplication pour arrêter l'exécution
|
||||||
|
- Rotation fixe et archivage des journaux du serveur
|
||||||
|
|
||||||
|
### Clickhouse version 1.1.54310, 2017-11-01 {#clickhouse-release-1-1-54310-2017-11-01}
|
||||||
|
|
||||||
|
#### Nouveauté: {#new-features}
|
||||||
|
|
||||||
|
- Clé de partitionnement personnalisée pour la famille MergeTree des moteurs de table.
|
||||||
|
- [Kafka](https://clickhouse.yandex/docs/en/operations/table_engines/kafka/) tableau moteur.
|
||||||
|
- Ajout du support pour le chargement [CatBoost](https://catboost.yandex/) modèles et les appliquer aux données stockées dans ClickHouse.
|
||||||
|
- Ajout du support pour les fuseaux horaires avec des décalages non entiers de UTC.
|
||||||
|
- Ajout du support pour les opérations arithmétiques avec des intervalles de temps.
|
||||||
|
- La plage de valeurs pour les types Date et DateTime est étendue à l'année 2105.
|
||||||
|
- Ajouté le `CREATE MATERIALIZED VIEW x TO y` requête (spécifie une table pour stocker les données d'une vue matérialisée).
|
||||||
|
- Ajouté le `ATTACH TABLE` requête sans arguments.
|
||||||
|
- La logique de traitement des colonnes imbriquées avec des noms se terminant par-Map dans une table SummingMergeTree a été extraite dans la fonction d'agrégat sumMap. Vous pouvez maintenant spécifier ces colonnes explicitement.
|
||||||
|
- La taille maximale du dictionnaire IP trie est augmentée à 128M entrées.
|
||||||
|
- Ajout de la fonction getSizeOfEnumType.
|
||||||
|
- Ajout de la fonction d'agrégat sumWithOverflow.
|
||||||
|
- Ajout du support pour le format D'entrée Cap'n Proto.
|
||||||
|
- Vous pouvez maintenant personnaliser le niveau de compression lors de l'utilisation de l'algorithme zstd.
|
||||||
|
|
||||||
|
#### Modifications incompatibles en arrière: {#backward-incompatible-changes}
|
||||||
|
|
||||||
|
- Création de tables temporaires avec un moteur autre que la Mémoire n'est pas autorisé.
|
||||||
|
- La création explicite de tables avec le moteur View ou MaterializedView n'est pas autorisée.
|
||||||
|
- Lors de la création de la table, une nouvelle vérification vérifie que l'expression de clé d'échantillonnage est incluse dans la clé primaire.
|
||||||
|
|
||||||
|
#### Corrections de bugs: {#bug-fixes}
|
||||||
|
|
||||||
|
- Correction des accrochages lors de l'insertion synchrone dans une table distribuée.
|
||||||
|
- Ajout et retrait non atomiques fixes de pièces dans des tables répliquées.
|
||||||
|
- Les données insérées dans une vue matérialisée ne sont pas soumises à une déduplication inutile.
|
||||||
|
- L'exécution d'une requête vers une table distribuée pour laquelle le réplica local est en retard et les réplicas distants ne sont pas disponibles n'entraîne plus d'erreur.
|
||||||
|
- Les utilisateurs n'ont pas besoin d'autorisations d'accès au `default` base de données pour créer des tables temporaires plus.
|
||||||
|
- Correction d'un plantage lors de la spécification du type de tableau sans arguments.
|
||||||
|
- Correction des interruptions lorsque le volume du disque contenant les journaux du serveur est plein.
|
||||||
|
- Correction d'un débordement dans la fonction toRelativeWeekNum pour la première semaine de L'époque Unix.
|
||||||
|
|
||||||
|
#### Construire des améliorations: {#build-improvements}
|
||||||
|
|
||||||
|
- Plusieurs bibliothèques tierces (notamment Poco) ont été mises à jour et converties en sous-modules git.
|
||||||
|
|
||||||
|
### Clickhouse version 1.1.54304, 2017-10-19 {#clickhouse-release-1-1-54304-2017-10-19}
|
||||||
|
|
||||||
|
#### Nouveauté: {#new-features-1}
|
||||||
|
|
||||||
|
- Prise en charge TLS dans le protocole natif (pour activer, définir `tcp_ssl_port` dans `config.xml` ).
|
||||||
|
|
||||||
|
#### Corrections de bugs: {#bug-fixes-1}
|
||||||
|
|
||||||
|
- `ALTER` pour les tables répliquées essaie maintenant de commencer à s'exécuter dès que possible.
|
||||||
|
- Fixe plante lors de la lecture des données avec le paramètre `preferred_block_size_bytes=0.`
|
||||||
|
- Plantages fixes de `clickhouse-client` lorsque vous appuyez sur `Page Down`
|
||||||
|
- L'interprétation correcte de certaines requêtes complexes avec `GLOBAL IN` et `UNION ALL`
|
||||||
|
- `FREEZE PARTITION` fonctionne toujours atomiquement maintenant.
|
||||||
|
- Les requêtes POST vides renvoient maintenant une réponse avec le code 411.
|
||||||
|
- Correction d'erreurs d'interprétation pour des expressions comme `CAST(1 AS Nullable(UInt8)).`
|
||||||
|
- Correction d'une erreur lors de la lecture `Array(Nullable(String))` les colonnes de `MergeTree` table.
|
||||||
|
- Fixe s'écraser lors de l'analyse des requêtes comme `SELECT dummy AS dummy, dummy AS b`
|
||||||
|
- Les utilisateurs sont mis à jour correctement avec invalide `users.xml`
|
||||||
|
- Manipulation correcte lorsqu'un dictionnaire exécutable renvoie un code de réponse différent de zéro.
|
||||||
|
|
||||||
|
### Clickhouse version 1.1.54292, 2017-09-20 {#clickhouse-release-1-1-54292-2017-09-20}
|
||||||
|
|
||||||
|
#### Nouveauté: {#new-features-2}
|
||||||
|
|
||||||
|
- Ajouté le `pointInPolygon` fonction pour travailler avec des coordonnées sur un plan de coordonnées.
|
||||||
|
- Ajouté le `sumMap` fonction d'agrégation pour calculer la somme des tableaux, similaire à `SummingMergeTree`.
|
||||||
|
- Ajouté le `trunc` fonction. Amélioration des performances des fonctions d'arrondi (`round`, `floor`, `ceil`, `roundToExp2`) et corrigé la logique de la façon dont ils fonctionnent. Changé la logique de la `roundToExp2` fonction pour les fractions et les nombres négatifs.
|
||||||
|
- Le fichier exécutable ClickHouse dépend maintenant moins de la version libc. Le même fichier exécutable ClickHouse peut fonctionner sur une grande variété de systèmes Linux. Il existe toujours une dépendance lors de l'utilisation de requêtes compilées (avec le paramètre `compile = 1` qui n'est pas utilisé par défaut).
|
||||||
|
- Réduit le temps nécessaire à la compilation dynamique des requêtes.
|
||||||
|
|
||||||
|
#### Corrections de bugs: {#bug-fixes-2}
|
||||||
|
|
||||||
|
- Correction d'une erreur qui produisait parfois `part ... intersects previous part` messages et cohérence des répliques affaiblies.
|
||||||
|
- Correction d'une erreur qui a provoqué le verrouillage du serveur si ZooKeeper n'était pas disponible pendant l'arrêt.
|
||||||
|
- Suppression de la journalisation excessive lors de la restauration des répliques.
|
||||||
|
- Correction d'une erreur dans L'Union toute la mise en œuvre.
|
||||||
|
- Correction d'une erreur dans la fonction concat qui s'est produite si la première colonne d'un bloc a le type de tableau.
|
||||||
|
- La progression est maintenant affichée correctement dans le système.fusionne table.
|
||||||
|
|
||||||
|
### Clickhouse version 1.1.54289, 2017-09-13 {#clickhouse-release-1-1-54289-2017-09-13}
|
||||||
|
|
||||||
|
#### Nouveauté: {#new-features-3}
|
||||||
|
|
||||||
|
- `SYSTEM` les requêtes pour l'administration du serveur: `SYSTEM RELOAD DICTIONARY`, `SYSTEM RELOAD DICTIONARIES`, `SYSTEM DROP DNS CACHE`, `SYSTEM SHUTDOWN`, `SYSTEM KILL`.
|
||||||
|
- Ajout de fonctions pour travailler avec des tableaux: `concat`, `arraySlice`, `arrayPushBack`, `arrayPushFront`, `arrayPopBack`, `arrayPopFront`.
|
||||||
|
- Ajouter `root` et `identity` paramètres pour la configuration de ZooKeeper. Cela vous permet d'isoler des utilisateurs individuels sur le même cluster ZooKeeper.
|
||||||
|
- Fonctions d'agrégation ajoutées `groupBitAnd`, `groupBitOr`, et `groupBitXor` (pour la compatibilité, ils sont également disponibles sous les noms de `BIT_AND`, `BIT_OR`, et `BIT_XOR`).
|
||||||
|
- Les dictionnaires externes peuvent être chargés à partir de MySQL en spécifiant un socket dans le système de fichiers.
|
||||||
|
- Les dictionnaires externes peuvent être chargés à partir de MySQL sur SSL (`ssl_cert`, `ssl_key`, `ssl_ca` paramètre).
|
||||||
|
- Ajouté le `max_network_bandwidth_for_user` paramètre pour limiter l'utilisation globale de la bande passante pour les requêtes par utilisateur.
|
||||||
|
- Soutien pour `DROP TABLE` pour les tables temporaires.
|
||||||
|
- Support pour la lecture `DateTime` valeurs au format d'horodatage Unix de `CSV` et `JSONEachRow` format.
|
||||||
|
- Les répliques en retard dans les requêtes distribuées sont maintenant exclues par défaut (le seuil par défaut est de 5 minutes).
|
||||||
|
- Le verrouillage FIFO est utilisé pendant ALTER: une requête ALTER n'est pas bloquée indéfiniment pour les requêtes en cours d'exécution en continu.
|
||||||
|
- Option à définir `umask` dans le fichier de configuration.
|
||||||
|
- Amélioration des performances pour les requêtes avec `DISTINCT` .
|
||||||
|
|
||||||
|
#### Corrections de bugs: {#bug-fixes-3}
|
||||||
|
|
||||||
|
- Amélioration du processus de suppression des anciens nœuds dans ZooKeeper. Auparavant, les anciens nœuds n'étaient parfois pas supprimés s'il y avait des insertions très fréquentes, ce qui faisait que le serveur était lent à s'arrêter, entre autres choses.
|
||||||
|
- Correction de la randomisation lors du choix des hôtes pour la connexion à ZooKeeper.
|
||||||
|
- Correction de l'exclusion des répliques en retard dans les requêtes distribuées si la réplique est localhost.
|
||||||
|
- Correction d'une erreur où une partie des données dans un `ReplicatedMergeTree` table pourrait être cassé après l'exécution `ALTER MODIFY` sur un élément dans un `Nested` structure.
|
||||||
|
- Correction d'une erreur qui pourrait provoquer des requêtes SELECT “hang”.
|
||||||
|
- Améliorations apportées aux requêtes DDL distribuées.
|
||||||
|
- Correction de la requête `CREATE TABLE ... AS <materialized view>`.
|
||||||
|
- Résolu à l'impasse dans l' `ALTER ... CLEAR COLUMN IN PARTITION` requête pour `Buffer` table.
|
||||||
|
- Correction de la valeur par défaut invalide pour `Enum` s (0 au lieu du minimum) lors de l'utilisation du `JSONEachRow` et `TSKV` format.
|
||||||
|
- Résolu l'apparition de processus zombies lors de l'utilisation d'un dictionnaire avec un `executable` source.
|
||||||
|
- Correction de segfault pour la requête HEAD.
|
||||||
|
|
||||||
|
#### Workflow amélioré pour développer et assembler ClickHouse: {#improved-workflow-for-developing-and-assembling-clickhouse}
|
||||||
|
|
||||||
|
- Vous pouvez utiliser `pbuilder` pour construire ClickHouse.
|
||||||
|
- Vous pouvez utiliser `libc++` plutôt `libstdc++` pour construit sur Linux.
|
||||||
|
- Ajout d'instructions pour l'utilisation d'outils d'analyse de code statique: `Coverage`, `clang-tidy`, `cppcheck`.
|
||||||
|
|
||||||
|
#### Veuillez noter lors de la mise à niveau: {#please-note-when-upgrading}
|
||||||
|
|
||||||
|
- Il y a maintenant une valeur par défaut plus élevée pour le paramètre MergeTree `max_bytes_to_merge_at_max_space_in_pool` (la taille totale maximale des parties de données à fusionner, en octets): elle est passée de 100 GiB à 150 GiB. Cela peut entraîner de grandes fusions s'exécutant après la mise à niveau du serveur, ce qui pourrait entraîner une charge accrue sur le sous-système de disque. Si l'espace libre disponible sur le serveur est inférieur au double de la quantité totale des fusions en cours d'exécution, toutes les autres fusions s'arrêteront, y compris les fusions de petites parties de données. Par conséquent, les requêtes D'insertion échoueront avec le message “Merges are processing significantly slower than inserts.” L'utilisation de la `SELECT * FROM system.merges` requête pour surveiller la situation. Vous pouvez également vérifier le `DiskSpaceReservedForMerge` métrique dans l' `system.metrics` table, ou en Graphite. Vous n'avez rien à faire pour résoudre ce problème, car le problème se résoudra une fois les grandes fusions terminées. Si vous trouvez cela inacceptable, vous pouvez restaurer la valeur précédente pour le `max_bytes_to_merge_at_max_space_in_pool` paramètre. Pour ce faire, allez à l' <merge_tree> section dans config.xml, ensemble ``` <merge_tree>``<max_bytes_to_merge_at_max_space_in_pool>107374182400</max_bytes_to_merge_at_max_space_in_pool> ``` et redémarrer le serveur.
|
||||||
|
|
||||||
|
### Clickhouse version 1.1.54284, 2017-08-29 {#clickhouse-release-1-1-54284-2017-08-29}
|
||||||
|
|
||||||
|
- C'est une version de correction de la précédente 1.1.54282 libération. Il corrige les fuites dans le répertoire des pièces dans ZooKeeper.
|
||||||
|
|
||||||
|
### Clickhouse version 1.1.54282, 2017-08-23 {#clickhouse-release-1-1-54282-2017-08-23}
|
||||||
|
|
||||||
|
Cette version contient des corrections de bugs pour la version précédente 1.1.54276:
|
||||||
|
|
||||||
|
- Fixe `DB::Exception: Assertion violation: !_path.empty()` lors de l'insertion dans une table distribuée.
|
||||||
|
- Correction de l'analyse lors de l'insertion au format RowBinary si les données d'entrée commencent par';'.
|
||||||
|
- Errors during runtime compilation of certain aggregate functions (e.g. `groupArray()`).
|
||||||
|
|
||||||
|
### Clickhouse Version 1.1.54276, 2017-08-16 {#clickhouse-release-1-1-54276-2017-08-16}
|
||||||
|
|
||||||
|
#### Nouveauté: {#new-features-4}
|
||||||
|
|
||||||
|
- Ajout d'une section facultative avec pour une requête SELECT. Exemple de requête: `WITH 1+1 AS a SELECT a, a*a`
|
||||||
|
- INSERT peut être effectué de manière synchrone dans une table distribuée: OK n'est retourné qu'une fois toutes les données enregistrées sur tous les fragments. Ceci est activé par le paramètre insert\_distributed\_sync = 1.
|
||||||
|
- Ajout du type de données UUID pour travailler avec des identifiants de 16 octets.
|
||||||
|
- Ajout D'alias de CHAR, FLOAT et d'autres types pour la compatibilité avec Tableau.
|
||||||
|
- Ajout des fonctions toYYYYMM, toYYYYMMDD et toYYYYMMDDhhmmss pour convertir le temps en nombres.
|
||||||
|
- Vous pouvez utiliser les adresses IP (avec le nom d'hôte) pour identifier les serveurs pour les requêtes DDL en cluster.
|
||||||
|
- Ajout du support pour les arguments non constants et les décalages négatifs dans la fonction `substring(str, pos, len).`
|
||||||
|
- Ajout du paramètre max\_size pour `groupArray(max_size)(column)` fonction d'agrégation, et optimisé ses performances.
|
||||||
|
|
||||||
|
#### Les principaux changements: {#main-changes}
|
||||||
|
|
||||||
|
- Améliorations de la sécurité: tous les fichiers du serveur sont créés avec des autorisations 0640 (peuvent être modifiés via <umask> paramètre de configuration).
|
||||||
|
- Amélioration des messages d'erreur pour les requêtes avec une syntaxe invalide.
|
||||||
|
- Réduction significative de la consommation de mémoire et amélioration des performances lors de la fusion de grandes sections de données MergeTree.
|
||||||
|
- Augmentation significative des performances des fusions de données pour le Remplacementmergetree engine.
|
||||||
|
- Amélioration des performances pour les insertions asynchrones à partir d'une table distribuée en combinant plusieurs insertions sources. Pour activer cette fonctionnalité, utilisez le paramètre distributed\_directory\_monitor\_batch\_inserts=1.
|
||||||
|
|
||||||
|
#### Modifications incompatibles en arrière: {#backward-incompatible-changes-1}
|
||||||
|
|
||||||
|
- Modification du format binaire des états agrégés de `groupArray(array_column)` fonctions pour les tableaux.
|
||||||
|
|
||||||
|
#### Liste complète des modifications: {#complete-list-of-changes}
|
||||||
|
|
||||||
|
- Ajouté le `output_format_json_quote_denormals` paramètre, qui permet la sortie des valeurs NaN et inf au format JSON.
|
||||||
|
- Allocation de flux optimisée lors de la lecture à partir d'une table distribuée.
|
||||||
|
- Les paramètres peuvent être configurés en mode Lecture seule si la valeur ne change pas.
|
||||||
|
- Ajout de la possibilité de récupérer des granules non entiers du moteur MergeTree afin de respecter les restrictions sur la taille de bloc spécifiée dans le paramètre preferred\_block\_size\_bytes. Le but est de réduire la consommation de RAM et d'augmenter la localisation du cache lors du traitement des requêtes à partir de tables avec de grandes colonnes.
|
||||||
|
- Utilisation efficace des index qui contiennent des expressions comme `toStartOfHour(x)` pour des conditions comme `toStartOfHour(x) op сonstexpr.`
|
||||||
|
- Ajout de nouveaux paramètres pour les moteurs MergeTree (la section merge\_tree dans config.XML):
|
||||||
|
- replicated\_deduplication\_window\_seconds définit le nombre de secondes autorisé pour la déduplication des insertions dans les tables répliquées.
|
||||||
|
- cleanup\_delay\_period définit la fréquence de démarrage du nettoyage pour supprimer les données obsolètes.
|
||||||
|
- replicated\_can\_become\_leader peut empêcher une réplique de devenir le leader (et d'affecter des fusions).
|
||||||
|
- Nettoyage accéléré pour supprimer les données obsolètes de ZooKeeper.
|
||||||
|
- Plusieurs améliorations et corrections pour les requêtes ddl en cluster. Un intérêt particulier est le nouveau paramètre distributed\_ddl\_task\_timeout, qui limite le temps d'attente d'une réponse des serveurs du cluster. Si une requête ddl n'a pas été effectuée sur tous les hôtes, une réponse contiendra une erreur de délai d'attente et une requête sera exécutée en mode asynchrone.
|
||||||
|
- Amélioration de l'affichage des traces de pile dans les journaux du serveur.
|
||||||
|
- Ajouté le “none” valeur pour la méthode de compression.
|
||||||
|
- Vous pouvez utiliser plusieurs sections dictionaries\_config dans config.XML.
|
||||||
|
- Il est possible de se connecter à MySQL via un socket dans le système de fichiers.
|
||||||
|
- Système.table de pièces a une nouvelle colonne avec des informations sur la taille des marques, en octets.
|
||||||
|
|
||||||
|
#### Corrections de bugs: {#bug-fixes-4}
|
||||||
|
|
||||||
|
- Les tables distribuées utilisant une table de fusion fonctionnent maintenant correctement pour une requête SELECT avec une condition sur le `_table` champ.
|
||||||
|
- Correction d'une condition de course rare dans ReplicatedMergeTree lors de la vérification des pièces de données.
|
||||||
|
- Fixe le gel sur “leader election” lors du démarrage d'un serveur.
|
||||||
|
- Le paramètre max\_replica\_delay\_for\_distributed\_queries a été ignoré lors de l'utilisation d'une réplique locale de la source de données. Ce problème a été corrigé.
|
||||||
|
- Correction d'un comportement incorrect de `ALTER TABLE CLEAR COLUMN IN PARTITION` lorsque vous tentez de nettoyer une colonne non existante.
|
||||||
|
- Correction d'une exception dans la fonction multiIf lors de l'utilisation de tableaux ou de chaînes vides.
|
||||||
|
- Correction d'allocations de mémoire excessives lors de la désérialisation du format natif.
|
||||||
|
- Correction d'une mise à jour automatique incorrecte des dictionnaires Trie.
|
||||||
|
- Correction d'une exception lors de l'exécution de requêtes avec une clause GROUP BY à partir d'une table de fusion lors de l'utilisation D'un exemple.
|
||||||
|
- Correction d'un plantage de GROUP BY lors de l'utilisation de distributed\_aggregation\_memory\_efficient=1.
|
||||||
|
- Vous pouvez maintenant spécifier la base de données.table dans le côté droit de IN et JOIN.
|
||||||
|
- Trop de threads ont été utilisés pour l'agrégation parallèle. Ce problème a été corrigé.
|
||||||
|
- Correction de la façon dont le “if” fonction fonctionne avec des arguments FixedString.
|
||||||
|
- SELECT a mal fonctionné à partir d'une table distribuée pour les fragments avec un poids de 0. Ce problème a été corrigé.
|
||||||
|
- Exécuter `CREATE VIEW IF EXISTS no longer causes crashes.`
|
||||||
|
- Correction d'un comportement incorrect lorsque input\_format\_skip\_unknown\_fields = 1 est défini et qu'il existe des nombres négatifs.
|
||||||
|
- Correction d'une boucle infinie dans le `dictGetHierarchy()` fonction s'il y a des données non valides dans le dictionnaire.
|
||||||
|
- Fixe `Syntax error: unexpected (...)` erreurs lors de l'exécution de requêtes distribuées avec des sous-requêtes dans une clause IN ou JOIN et des tables de fusion.
|
||||||
|
- Correction d'une interprétation incorrecte D'une requête SELECT à partir de tables de dictionnaire.
|
||||||
|
- Correction de l' “Cannot mremap” erreur lors de l'utilisation de tableaux dans In et JOIN clauses avec plus de 2 milliards d'éléments.
|
||||||
|
- Correction du basculement pour les dictionnaires avec MySQL comme source.
|
||||||
|
|
||||||
|
#### Workflow amélioré pour développer et assembler ClickHouse: {#improved-workflow-for-developing-and-assembling-clickhouse-1}
|
||||||
|
|
||||||
|
- Construit peuvent être assemblés en Arcadie.
|
||||||
|
- Vous pouvez utiliser gcc 7 pour compiler ClickHouse.
|
||||||
|
- Les builds parallèles utilisant ccache + distcc sont plus rapides maintenant.
|
||||||
|
|
||||||
|
### Clickhouse version 1.1.54245, 2017-07-04 {#clickhouse-release-1-1-54245-2017-07-04}
|
||||||
|
|
||||||
|
#### Nouveauté: {#new-features-5}
|
||||||
|
|
||||||
|
- DDL distribué (par exemple, `CREATE TABLE ON CLUSTER`)
|
||||||
|
- La réplication de la requête `ALTER TABLE CLEAR COLUMN IN PARTITION.`
|
||||||
|
- Le moteur pour les tables de dictionnaire (accès aux données du dictionnaire sous la forme d'une table).
|
||||||
|
- Moteur de base de données de dictionnaire (ce type de base de données a automatiquement des tables de dictionnaire disponibles pour tous les dictionnaires externes connectés).
|
||||||
|
- Vous pouvez vérifier les mises à jour du dictionnaire en envoyant une demande à la source.
|
||||||
|
- Noms de colonnes qualifiés
|
||||||
|
- Les identificateurs entre des guillemets doubles.
|
||||||
|
- Sessions dans L'interface HTTP.
|
||||||
|
- La requête OPTIMIZE pour une table répliquée peut s'exécuter non seulement sur le leader.
|
||||||
|
|
||||||
|
#### Modifications incompatibles en arrière: {#backward-incompatible-changes-2}
|
||||||
|
|
||||||
|
- Supprimé ensemble GLOBAL.
|
||||||
|
|
||||||
|
#### Des modifications mineures: {#minor-changes}
|
||||||
|
|
||||||
|
- Maintenant, après le déclenchement d'une alerte, le journal imprime la trace complète de la pile.
|
||||||
|
- Détendu la vérification du nombre de pièces de données endommagées/supplémentaires au démarrage (il y avait trop de faux positifs).
|
||||||
|
|
||||||
|
#### Corrections de bugs: {#bug-fixes-5}
|
||||||
|
|
||||||
|
- Correction d'une mauvaise connexion “sticking” lors de l'insertion dans une table distribuée.
|
||||||
|
- GLOBAL in fonctionne maintenant pour une requête à partir d'une table de fusion qui regarde une table distribuée.
|
||||||
|
- Le nombre incorrect de cœurs a été détecté sur une machine virtuelle Google Compute Engine. Ce problème a été corrigé.
|
||||||
|
- Changements dans le fonctionnement d'une source exécutable de dictionnaires externes mis en cache.
|
||||||
|
- Correction de la comparaison des chaînes contenant des caractères nuls.
|
||||||
|
- Correction de la comparaison des champs de clé primaire Float32 avec des constantes.
|
||||||
|
- Auparavant, une estimation incorrecte de la taille d'un champ pouvait entraîner des allocations trop importantes.
|
||||||
|
- Correction d'un plantage lors de l'interrogation d'une colonne Nullable ajoutée à une table en utilisant ALTER.
|
||||||
|
- Correction d'un plantage lors du tri par une colonne Nullable, si le nombre de lignes est inférieur à la limite.
|
||||||
|
- Correction d'une commande par sous-requête composée uniquement de valeurs constantes.
|
||||||
|
- Auparavant, une table répliquée pouvait rester dans l'état non valide après l'échec d'une table de suppression.
|
||||||
|
- Les alias des sous-requêtes scalaires avec des résultats vides ne sont plus perdus.
|
||||||
|
- Maintenant, une requête qui a utilisé la compilation n'échoue pas avec une erreur si le fichier. so est endommagé.
|
1060
docs/fr/changelog/2018.md
Normal file
1060
docs/fr/changelog/2018.md
Normal file
File diff suppressed because it is too large
Load Diff
1
docs/fr/changelog/2019.md
Symbolic link
1
docs/fr/changelog/2019.md
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../en/changelog/2019.md
|
664
docs/fr/changelog/index.md
Normal file
664
docs/fr/changelog/index.md
Normal file
@ -0,0 +1,664 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
## Clickhouse version v20. 3 {#clickhouse-release-v20-3}
|
||||||
|
|
||||||
|
### Clickhouse version v20. 3. 4. 10, 2020-03-20 {#clickhouse-release-v20-3-4-10-2020-03-20}
|
||||||
|
|
||||||
|
#### Bug Fix {#bug-fix}
|
||||||
|
|
||||||
|
- Cette version contient également toutes les corrections de bugs de 20.1.8.41
|
||||||
|
- Fixer manquant `rows_before_limit_at_least` pour les requêtes sur http (avec pipeline de processeurs). Cela corrige [\#9730](https://github.com/ClickHouse/ClickHouse/issues/9730). [\#9757](https://github.com/ClickHouse/ClickHouse/pull/9757) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
|
||||||
|
### Clickhouse version v20. 3. 3. 6, 2020-03-17 {#clickhouse-release-v20-3-3-6-2020-03-17}
|
||||||
|
|
||||||
|
#### Bug Fix {#bug-fix-1}
|
||||||
|
|
||||||
|
- Cette version contient également toutes les corrections de bugs de 20.1.7.38
|
||||||
|
- Correction d'un bug dans une réplication qui ne permet pas la réplication de fonctionner si l'Utilisateur a exécuté des mutations sur la version précédente. Cela corrige [\#9645](https://github.com/ClickHouse/ClickHouse/issues/9645). [\#9652](https://github.com/ClickHouse/ClickHouse/pull/9652) ([alésapine](https://github.com/alesapin)). Il rend la version 20.3 rétrocompatible à nouveau.
|
||||||
|
- Ajouter un paramètre `use_compact_format_in_distributed_parts_names` qui permet d'écrire des fichiers pour `INSERT` les requêtes en `Distributed` tableau avec un format plus compact. Cela corrige [\#9647](https://github.com/ClickHouse/ClickHouse/issues/9647). [\#9653](https://github.com/ClickHouse/ClickHouse/pull/9653) ([alésapine](https://github.com/alesapin)). Il rend la version 20.3 rétrocompatible à nouveau.
|
||||||
|
|
||||||
|
### Clickhouse version v20. 3. 2. 1, 2020-03-12 {#clickhouse-release-v20-3-2-1-2020-03-12}
|
||||||
|
|
||||||
|
#### Modification Incompatible En Arrière {#backward-incompatible-change}
|
||||||
|
|
||||||
|
- Correction du problème `file name too long` lors de l'envoi de données pour `Distributed` tables pour un grand nombre de répliques. Correction du problème que les informations d'identification de réplique étaient exposées dans le journal du serveur. Le format du nom du répertoire sur le disque a été changé en `[shard{shard_index}[_replica{replica_index}]]`. [\#8911](https://github.com/ClickHouse/ClickHouse/pull/8911) ([Mikhail Korotov](https://github.com/millb)) Après la mise à niveau vers la nouvelle version, vous ne pourrez pas rétrograder sans intervention manuelle, car l'ancienne version du serveur ne reconnaît pas le nouveau format de répertoire. Si vous souhaitez passer, vous devez renommer manuellement les répertoires correspondant à l'ancien format. Cette modification s'applique uniquement si vous avez utilisé asynchrone `INSERT`s `Distributed` table. Dans la version 20.3.3, nous allons introduire un paramètre qui vous permettra d'activer le nouveau format progressivement.
|
||||||
|
- Modification du format des entrées du journal de réplication pour les commandes de mutation. Vous devez attendre que les anciennes mutations soient traitées avant d'installer la nouvelle version.
|
||||||
|
- Implémentez un profileur de mémoire simple qui vide stacktraces vers `system.trace_log` chaque n octets au-dessus de la limite d'allocation douce [\#8765](https://github.com/ClickHouse/ClickHouse/pull/8765) ([Ivan](https://github.com/abyss7)) [\#9472](https://github.com/ClickHouse/ClickHouse/pull/9472) ([alexeï-milovidov](https://github.com/alexey-milovidov)) La colonne de `system.trace_log` a été renommé de `timer_type` de `trace_type`. Cela nécessitera des changements dans les outils d'analyse des performances et de traitement flamegraph de tiers.
|
||||||
|
- Utilisez L'id de thread du système d'exploitation partout au lieu du numéro de thread interne. Cela corrige [\#7477](https://github.com/ClickHouse/ClickHouse/issues/7477) Vieux `clickhouse-client` impossible de recevoir les journaux envoyés par le serveur lorsque le paramètre `send_logs_level` est activé, car les noms et les types des messages de journal structurés ont été modifiés. D'autre part, différentes versions de serveur peuvent envoyer des journaux avec différents types les uns aux autres. Lorsque vous n'utilisez pas l' `send_logs_level` réglage, vous ne devez pas soin. [\#8954](https://github.com/ClickHouse/ClickHouse/pull/8954) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Supprimer `indexHint` fonction [\#9542](https://github.com/ClickHouse/ClickHouse/pull/9542) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Supprimer `findClusterIndex`, `findClusterValue` fonction. Cela corrige [\#8641](https://github.com/ClickHouse/ClickHouse/issues/8641). Si vous utilisez ces fonctions, envoyez un courriel à `clickhouse-feedback@yandex-team.com` [\#9543](https://github.com/ClickHouse/ClickHouse/pull/9543) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Maintenant, il n'est pas permis de créer des colonnes ou ajouter des colonnes avec `SELECT` sous-requête comme expression par défaut. [\#9481](https://github.com/ClickHouse/ClickHouse/pull/9481) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Exiger des alias pour les sous-requêtes dans la JOINTURE. [\#9274](https://github.com/ClickHouse/ClickHouse/pull/9274) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Améliorer `ALTER MODIFY/ADD` les requêtes de la logique. Maintenant vous ne pouvez pas `ADD` colonne sans type, `MODIFY` l'expression par défaut ne change pas le type de colonne et `MODIFY` type ne perd pas la valeur d'expression par défaut. Fixer [\#8669](https://github.com/ClickHouse/ClickHouse/issues/8669). [\#9227](https://github.com/ClickHouse/ClickHouse/pull/9227) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Exiger que le serveur soit redémarré pour appliquer les modifications dans la configuration de journalisation. Il s'agit d'une solution de contournement temporaire pour éviter le bogue où le serveur se connecte à un fichier journal supprimé (voir [\#8696](https://github.com/ClickHouse/ClickHouse/issues/8696)). [\#8707](https://github.com/ClickHouse/ClickHouse/pull/8707) ([Alexander Kuzmenkov](https://github.com/akuzm))
|
||||||
|
- Paramètre `experimental_use_processors` est activé par défaut. Ce paramètre active l'utilisation du nouveau pipeline de requêtes. C'est un refactoring interne et nous n'attendons aucun changement visible. Si vous voyez des problèmes, réglez-le sur Retour à zéro. [\#8768](https://github.com/ClickHouse/ClickHouse/pull/8768) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
|
||||||
|
#### Nouveauté {#new-feature}
|
||||||
|
|
||||||
|
- Ajouter `Avro` et `AvroConfluent` d'entrée/sortie de formats [\#8571](https://github.com/ClickHouse/ClickHouse/pull/8571) ([Andrew Onyshchuk](https://github.com/oandrew)) [\#8957](https://github.com/ClickHouse/ClickHouse/pull/8957) ([Andrew Onyshchuk](https://github.com/oandrew)) [\#8717](https://github.com/ClickHouse/ClickHouse/pull/8717) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Mises à jour multithread et non bloquantes des clés expirées dans `cache` dictionnaires (avec autorisation facultative pour lire les anciens). [\#8303](https://github.com/ClickHouse/ClickHouse/pull/8303) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))
|
||||||
|
- Ajouter une requête `ALTER ... MATERIALIZE TTL`. Il exécute mutation qui force à supprimer les données expirées par TTL et recalcule les méta-informations sur TTL dans toutes les parties. [\#8775](https://github.com/ClickHouse/ClickHouse/pull/8775) ([Anton Popov](https://github.com/CurtizJ))
|
||||||
|
- Passez de HashJoin à MergeJoin (sur le disque) si nécessaire [\#9082](https://github.com/ClickHouse/ClickHouse/pull/9082) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Ajouter `MOVE PARTITION` commande pour `ALTER TABLE` [\#4729](https://github.com/ClickHouse/ClickHouse/issues/4729) [\#6168](https://github.com/ClickHouse/ClickHouse/pull/6168) ([Guillaume Tassery](https://github.com/YiuRULE))
|
||||||
|
- Le rechargement de la configuration de stockage du fichier de configuration à la volée. [\#8594](https://github.com/ClickHouse/ClickHouse/pull/8594) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Autorisé à changer `storage_policy` pas moins riche. [\#8107](https://github.com/ClickHouse/ClickHouse/pull/8107) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Ajout du support pour globs / jokers pour le stockage S3 et la fonction de table. [\#8851](https://github.com/ClickHouse/ClickHouse/pull/8851) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Mettre `bitAnd`, `bitOr`, `bitXor`, `bitNot` pour `FixedString(N)` type de données. [\#9091](https://github.com/ClickHouse/ClickHouse/pull/9091) ([Guillaume Tassery](https://github.com/YiuRULE))
|
||||||
|
- Ajout de la fonction `bitCount`. Cela corrige [\#8702](https://github.com/ClickHouse/ClickHouse/issues/8702). [\#8708](https://github.com/ClickHouse/ClickHouse/pull/8708) ([alexeï-milovidov](https://github.com/alexey-milovidov)) [\#8749](https://github.com/ClickHouse/ClickHouse/pull/8749) ([ikopylov](https://github.com/ikopylov))
|
||||||
|
- Ajouter `generateRandom` fonction de table pour générer des lignes aléatoires avec un schéma donné. Permet de remplir une table de test arbitraire avec des données. [\#8994](https://github.com/ClickHouse/ClickHouse/pull/8994) ([Ilya Yatsishin](https://github.com/qoega))
|
||||||
|
- `JSONEachRowFormat`: support cas particulier lorsque les objets enfermés dans un tableau de niveau supérieur. [\#8860](https://github.com/ClickHouse/ClickHouse/pull/8860) ([Kruglov Pavel](https://github.com/Avogar))
|
||||||
|
- Il est maintenant possible de créer une colonne avec `DEFAULT` expression qui dépend d'une colonne avec défaut `ALIAS` expression. [\#9489](https://github.com/ClickHouse/ClickHouse/pull/9489) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Autoriser à spécifier `--limit` plus que la taille des données source dans `clickhouse-obfuscator`. Les données se répéteront avec différentes graines aléatoires. [\#9155](https://github.com/ClickHouse/ClickHouse/pull/9155) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Ajouter `groupArraySample` fonction (similaire à `groupArray`) avec réservoir algorithme d'échantillonnage. [\#8286](https://github.com/ClickHouse/ClickHouse/pull/8286) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- Maintenant, vous pouvez surveiller la taille de la file d'attente de mise à jour dans `cache`/`complex_key_cache` dictionnaires via les métriques du système. [\#9413](https://github.com/ClickHouse/ClickHouse/pull/9413) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))
|
||||||
|
- Autoriser L'utilisation de CRLF comme séparateur de ligne au format de sortie CSV avec réglage `output_format_csv_crlf_end_of_line` est réglé sur 1 [\#8934](https://github.com/ClickHouse/ClickHouse/pull/8934) [\#8935](https://github.com/ClickHouse/ClickHouse/pull/8935) [\#8963](https://github.com/ClickHouse/ClickHouse/pull/8963) ([Mikhail Korotov](https://github.com/millb))
|
||||||
|
- Mettre en œuvre plus de fonctions de la [H3](https://github.com/uber/h3) API: `h3GetBaseCell`, `h3HexAreaM2`, `h3IndexesAreNeighbors`, `h3ToChildren`, `h3ToString` et `stringToH3` [\#8938](https://github.com/ClickHouse/ClickHouse/pull/8938) ([Nico Mandery](https://github.com/nmandery))
|
||||||
|
- Nouveau paramètre introduit: `max_parser_depth` pour contrôler la taille maximale de la pile et permettre de grandes requêtes complexes. Cela corrige [\#6681](https://github.com/ClickHouse/ClickHouse/issues/6681) et [\#7668](https://github.com/ClickHouse/ClickHouse/issues/7668). [\#8647](https://github.com/ClickHouse/ClickHouse/pull/8647) ([Maxim Smirnov](https://github.com/qMBQx8GH))
|
||||||
|
- Ajouter un paramètre `force_optimize_skip_unused_shards` réglage sur lancer si le saut d'éclats inutilisés n'est pas possible [\#8805](https://github.com/ClickHouse/ClickHouse/pull/8805) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
- Permet de configurer plusieurs disques / volumes pour stocker des données pour l'envoi `Distributed` moteur [\#8756](https://github.com/ClickHouse/ClickHouse/pull/8756) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
- Politique de stockage de soutien (`<tmp_policy>` pour le stockage temporaire des données. [\#8750](https://github.com/ClickHouse/ClickHouse/pull/8750) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
- Ajouter `X-ClickHouse-Exception-Code` En-tête HTTP défini si une exception a été levée avant l'envoi de données. Cela met en œuvre [\#4971](https://github.com/ClickHouse/ClickHouse/issues/4971). [\#8786](https://github.com/ClickHouse/ClickHouse/pull/8786) ([Mikhail Korotov](https://github.com/millb))
|
||||||
|
- Ajout de la fonction `ifNotFinite`. C'est juste un sucre syntaxique: `ifNotFinite(x, y) = isFinite(x) ? x : y`. [\#8710](https://github.com/ClickHouse/ClickHouse/pull/8710) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Ajouter `last_successful_update_time` colonne en `system.dictionaries` table [\#9394](https://github.com/ClickHouse/ClickHouse/pull/9394) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))
|
||||||
|
- Ajouter `blockSerializedSize` fonction (taille sur disque sans compression) [\#8952](https://github.com/ClickHouse/ClickHouse/pull/8952) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
- Ajouter une fonction `moduloOrZero` [\#9358](https://github.com/ClickHouse/ClickHouse/pull/9358) ([hcz](https://github.com/hczhcz))
|
||||||
|
- Tables système ajoutées `system.zeros` et `system.zeros_mt` ainsi que les fonctions de conte `zeros()` et `zeros_mt()`. Les Tables (et les fonctions de table) contiennent une seule colonne avec le nom `zero` et le type `UInt8`. Cette colonne contient des zéros. Il est nécessaire à des fins de test comme la méthode la plus rapide pour générer de nombreuses lignes. Cela corrige [\#6604](https://github.com/ClickHouse/ClickHouse/issues/6604) [\#9593](https://github.com/ClickHouse/ClickHouse/pull/9593) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
|
||||||
|
#### Caractéristique Expérimentale {#experimental-feature}
|
||||||
|
|
||||||
|
- Ajouter un nouveau format compact de pièces dans `MergeTree`-table de famille dont toutes les colonnes sont stockées dans un fichier. Il aide à augmenter les performances des inserts petits et fréquents. L'ancien format (un fichier par colonne) s'appelle maintenant wide. Le format de stockage des données est contrôlé par les paramètres `min_bytes_for_wide_part` et `min_rows_for_wide_part`. [\#8290](https://github.com/ClickHouse/ClickHouse/pull/8290) ([Anton Popov](https://github.com/CurtizJ))
|
||||||
|
- Prise en charge du stockage S3 pour `Log`, `TinyLog` et `StripeLog` table. [\#8862](https://github.com/ClickHouse/ClickHouse/pull/8862) ([Pavel Kovalenko](https://github.com/Jokser))
|
||||||
|
|
||||||
|
#### Bug Fix {#bug-fix-2}
|
||||||
|
|
||||||
|
- Correction d'espaces incohérents dans les messages de journal. [\#9322](https://github.com/ClickHouse/ClickHouse/pull/9322) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Correction d'un bug dans lequel les tableaux de tuples sans nom ont été aplatis en tant que structures imbriquées lors de la création de la table. [\#8866](https://github.com/ClickHouse/ClickHouse/pull/8866) ([achulkov2](https://github.com/achulkov2))
|
||||||
|
- Correction du problème lorsque “Too many open files” l'erreur peut se produire s'il y a trop de fichiers correspondant glob modèle dans `File` table ou `file` table de fonction. Maintenant, les fichiers sont ouverts paresseusement. Cela corrige [\#8857](https://github.com/ClickHouse/ClickHouse/issues/8857) [\#8861](https://github.com/ClickHouse/ClickHouse/pull/8861) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- DROP table temporaire ne supprime plus que la table temporaire. [\#8907](https://github.com/ClickHouse/ClickHouse/pull/8907) ([Vitaly Baranov](https://github.com/vitlibar))
|
||||||
|
- Supprimer la partition obsolète lorsque nous éteignons le serveur ou détacher/joindre une table. [\#8602](https://github.com/ClickHouse/ClickHouse/pull/8602) ([Guillaume Tassery](https://github.com/YiuRULE))
|
||||||
|
- Pour savoir comment le disque par défaut calcule l'espace libre à partir de `data` répertoire. Correction du problème lorsque la quantité d'espace libre n'est pas calculée correctement si l' `data` le répertoire est monté sur un appareil séparé (cas rare). Cela corrige [\#7441](https://github.com/ClickHouse/ClickHouse/issues/7441) [\#9257](https://github.com/ClickHouse/ClickHouse/pull/9257) ([Mikhail Korotov](https://github.com/millb))
|
||||||
|
- Permettre virgule (croix) joindre avec IN () à l'intérieur. [\#9251](https://github.com/ClickHouse/ClickHouse/pull/9251) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Permettre de réécrire CROSS to INNER JOIN s'il n'y a pas \[pas\] comme opérateur dans la section WHERE. [\#9229](https://github.com/ClickHouse/ClickHouse/pull/9229) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Correction d'un résultat incorrect possible après `GROUP BY` avec le paramètre activé `distributed_aggregation_memory_efficient`. Fixer [\#9134](https://github.com/ClickHouse/ClickHouse/issues/9134). [\#9289](https://github.com/ClickHouse/ClickHouse/pull/9289) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Les clés trouvées ont été comptées comme manquées dans les métriques des dictionnaires de cache. [\#9411](https://github.com/ClickHouse/ClickHouse/pull/9411) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))
|
||||||
|
- Correction du protocole de réplication incompatibilité introduit dans [\#8598](https://github.com/ClickHouse/ClickHouse/issues/8598). [\#9412](https://github.com/ClickHouse/ClickHouse/pull/9412) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Condition de course fixe sur `queue_task_handle` au démarrage de `ReplicatedMergeTree` table. [\#9552](https://github.com/ClickHouse/ClickHouse/pull/9552) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Jeton `NOT` ne fonctionne pas dans `SHOW TABLES NOT LIKE` requête [\#8727](https://github.com/ClickHouse/ClickHouse/issues/8727) [\#8940](https://github.com/ClickHouse/ClickHouse/pull/8940) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Vérification de plage ajoutée à la fonction `h3EdgeLengthM`. Sans cette vérification, un débordement de tampon est possible. [\#8945](https://github.com/ClickHouse/ClickHouse/pull/8945) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Correction d'un bug dans les calculs par lots des opérations logiques ternaires sur plusieurs arguments (plus de 10). [\#8718](https://github.com/ClickHouse/ClickHouse/pull/8718) ([Alexander Kazakov](https://github.com/Akazz))
|
||||||
|
- Correction d'une erreur D'optimisation de PREWHERE, qui pourrait conduire à des `Inconsistent number of columns got from MergeTreeRangeReader` exception. [\#9024](https://github.com/ClickHouse/ClickHouse/pull/9024) ([Anton Popov](https://github.com/CurtizJ))
|
||||||
|
- Fix inattendu `Timeout exceeded while reading from socket` exception, qui se produit aléatoirement sur une connexion sécurisée avant le délai d'expiration réellement dépassé et lorsque query profiler est activé. Également ajouter `connect_timeout_with_failover_secure_ms` paramètres (par défaut 100 ms), qui est similaire à `connect_timeout_with_failover_ms`, mais est utilisé pour les connexions sécurisées (parce que la liaison SSL est plus lente, que la connexion TCP ordinaire) [\#9026](https://github.com/ClickHouse/ClickHouse/pull/9026) ([tavplubix](https://github.com/tavplubix))
|
||||||
|
- Correction d'un bug avec la finalisation des mutations, lorsque la mutation peut se bloquer dans l'état avec `parts_to_do=0` et `is_done=0`. [\#9022](https://github.com/ClickHouse/ClickHouse/pull/9022) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Utilisez une nouvelle logique de jointure avec `partial_merge_join` paramètre. Il est possible de faire `ANY|ALL|SEMI LEFT` et `ALL INNER` les jointures avec `partial_merge_join=1` maintenant. [\#8932](https://github.com/ClickHouse/ClickHouse/pull/8932) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Shard pince maintenant les paramètres obtenus de l'initiateur aux constaints de la partition au lieu de lancer une exception. Ce correctif permet d'envoyer des requêtes à un serveur avec un autre contraintes. [\#9447](https://github.com/ClickHouse/ClickHouse/pull/9447) ([Vitaly Baranov](https://github.com/vitlibar))
|
||||||
|
- Fixe, problème de gestion de mémoire dans `MergeTreeReadPool`. [\#8791](https://github.com/ClickHouse/ClickHouse/pull/8791) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Fixer `toDecimal*OrNull()` famille de fonctions lorsqu'elle est appelée avec une chaîne `e`. Fixer [\#8312](https://github.com/ClickHouse/ClickHouse/issues/8312) [\#8764](https://github.com/ClickHouse/ClickHouse/pull/8764) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Assurez-vous que `FORMAT Null` n'envoie pas de données au client. [\#8767](https://github.com/ClickHouse/ClickHouse/pull/8767) ([Alexander Kuzmenkov](https://github.com/akuzm))
|
||||||
|
- Correction d'un bug dans cet horodatage `LiveViewBlockInputStream` ne sera pas mis à jour. `LIVE VIEW` est une fonctionnalité expérimentale. [\#8644](https://github.com/ClickHouse/ClickHouse/pull/8644) ([vxider](https://github.com/Vxider)) [\#8625](https://github.com/ClickHouse/ClickHouse/pull/8625) ([vxider](https://github.com/Vxider))
|
||||||
|
- Fixe `ALTER MODIFY TTL` mauvais comportement qui n'a pas permis de supprimer les anciennes expressions TTL. [\#8422](https://github.com/ClickHouse/ClickHouse/pull/8422) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Rapport UBSan fixe dans MergeTreeIndexSet. Cela corrige [\#9250](https://github.com/ClickHouse/ClickHouse/issues/9250) [\#9365](https://github.com/ClickHouse/ClickHouse/pull/9365) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Correction du comportement de `match` et `extract` fonctions lorsque haystack a zéro octets. Le comportement était mauvais quand la botte de foin était constante. Cela corrige [\#9160](https://github.com/ClickHouse/ClickHouse/issues/9160) [\#9163](https://github.com/ClickHouse/ClickHouse/pull/9163) ([alexeï-milovidov](https://github.com/alexey-milovidov)) [\#9345](https://github.com/ClickHouse/ClickHouse/pull/9345) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Évitez de lancer de destructor dans la bibliothèque Apache Avro 3rd-party. [\#9066](https://github.com/ClickHouse/ClickHouse/pull/9066) ([Andrew Onyshchuk](https://github.com/oandrew))
|
||||||
|
- Ne commettez pas un lot interrogé à partir de `Kafka` partiellement, car il peut conduire à des trous dans les données. [\#8876](https://github.com/ClickHouse/ClickHouse/pull/8876) ([filimonov](https://github.com/filimonov))
|
||||||
|
- Fixer `joinGet` avec les types de retour nullable. https://github.com/ClickHouse/ClickHouse/issues/8919 [\#9014](https://github.com/ClickHouse/ClickHouse/pull/9014) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- Correction de l'incompatibilité des données lorsqu'elles sont compressées avec `T64` codec. [\#9016](https://github.com/ClickHouse/ClickHouse/pull/9016) ([Artem Zuikov](https://github.com/4ertus2)) Corriger les ID de type de données dans `T64` codec de compression qui conduit à une mauvaise (de)compression dans les versions affectées. [\#9033](https://github.com/ClickHouse/ClickHouse/pull/9033) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Ajouter un paramètre `enable_early_constant_folding` et le désactiver dans certains cas, cela conduit à des erreurs. [\#9010](https://github.com/ClickHouse/ClickHouse/pull/9010) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Fix Pushdown prédicat optimizer avec vue et activer le test [\#9011](https://github.com/ClickHouse/ClickHouse/pull/9011) ([L'Hiver Zhang](https://github.com/zhang2014))
|
||||||
|
- Fixer erreur de segmentation dans `Merge` tables, cela peut arriver lors de la lecture de `File` stockage [\#9387](https://github.com/ClickHouse/ClickHouse/pull/9387) ([tavplubix](https://github.com/tavplubix))
|
||||||
|
- Ajout d'une vérification de la stratégie de stockage dans `ATTACH PARTITION FROM`, `REPLACE PARTITION`, `MOVE TO TABLE`. Sinon, cela pourrait rendre les données de la partie inaccessibles après le redémarrage et empêcher ClickHouse de démarrer. [\#9383](https://github.com/ClickHouse/ClickHouse/pull/9383) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Fix modifie s'il y a TTL défini pour la table. [\#8800](https://github.com/ClickHouse/ClickHouse/pull/8800) ([Anton Popov](https://github.com/CurtizJ))
|
||||||
|
- Correction de la condition de course qui peut se produire lorsque `SYSTEM RELOAD ALL DICTIONARIES` est exécuté pendant que certains dictionnaires sont modifiés / ajoutés / supprimés. [\#8801](https://github.com/ClickHouse/ClickHouse/pull/8801) ([Vitaly Baranov](https://github.com/vitlibar))
|
||||||
|
- Dans les versions précédentes `Memory` le moteur de base de données utilise un chemin de données vide, de sorte que les tables sont créées dans `path` directory (e.g. `/var/lib/clickhouse/`), not in data directory of database (e.g. `/var/lib/clickhouse/db_name`). [\#8753](https://github.com/ClickHouse/ClickHouse/pull/8753) ([tavplubix](https://github.com/tavplubix))
|
||||||
|
- Correction de messages de journal erronés sur le disque ou la stratégie par défaut manquant. [\#9530](https://github.com/ClickHouse/ClickHouse/pull/9530) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Fix not (has ()) pour l'index bloom\_filter des types de tableau. [\#9407](https://github.com/ClickHouse/ClickHouse/pull/9407) ([achimbab](https://github.com/achimbab))
|
||||||
|
- Permettre à première colonne(s) dans un tableau avec `Log` moteur alias [\#9231](https://github.com/ClickHouse/ClickHouse/pull/9231) ([Ivan](https://github.com/abyss7))
|
||||||
|
- Fixer l'ordre des plages pendant la lecture d' `MergeTree` table dans un fil. Cela pourrait conduire à des exceptions `MergeTreeRangeReader` ou mauvais résultats de requête. [\#9050](https://github.com/ClickHouse/ClickHouse/pull/9050) ([Anton Popov](https://github.com/CurtizJ))
|
||||||
|
- Faire `reinterpretAsFixedString` retourner `FixedString` plutôt `String`. [\#9052](https://github.com/ClickHouse/ClickHouse/pull/9052) ([Andrew Onyshchuk](https://github.com/oandrew))
|
||||||
|
- Évitez les cas extrêmement rares où l'utilisateur peut se tromper message d'erreur (`Success` au lieu d'une description détaillée de l'erreur). [\#9457](https://github.com/ClickHouse/ClickHouse/pull/9457) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Ne pas planter lors de l'utilisation de `Template` format avec modèle de ligne vide. [\#8785](https://github.com/ClickHouse/ClickHouse/pull/8785) ([Alexander Kuzmenkov](https://github.com/akuzm))
|
||||||
|
- Les fichiers de métadonnées pour les tables système peuvent être créés au mauvais endroit [\#8653](https://github.com/ClickHouse/ClickHouse/pull/8653) ([tavplubix](https://github.com/tavplubix)) Fixer [\#8581](https://github.com/ClickHouse/ClickHouse/issues/8581).
|
||||||
|
- Correction de la course de données sur exception\_ptr dans le dictionnaire de cache [\#8303](https://github.com/ClickHouse/ClickHouse/issues/8303). [\#9379](https://github.com/ClickHouse/ClickHouse/pull/9379) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))
|
||||||
|
- Ne pas lancer une exception pour la requête `ATTACH TABLE IF NOT EXISTS`. Auparavant, il a été lancé si la table existe déjà, malgré le `IF NOT EXISTS` clause. [\#8967](https://github.com/ClickHouse/ClickHouse/pull/8967) ([Anton Popov](https://github.com/CurtizJ))
|
||||||
|
- Correction manquant fermeture paren dans le message d'exception. [\#8811](https://github.com/ClickHouse/ClickHouse/pull/8811) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Éviter de message `Possible deadlock avoided` au démarrage de clickhouse-client en mode interactif. [\#9455](https://github.com/ClickHouse/ClickHouse/pull/9455) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Correction du problème lorsque le remplissage à la fin de la valeur codée base64 peut être mal formé. Mettre à jour la bibliothèque base64. Cela corrige [\#9491](https://github.com/ClickHouse/ClickHouse/issues/9491), proche [\#9492](https://github.com/ClickHouse/ClickHouse/issues/9492) [\#9500](https://github.com/ClickHouse/ClickHouse/pull/9500) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Empêcher la perte de données dans `Kafka` dans de rares cas, lorsque l'exception se produit après la lecture du suffixe mais avant la validation. Fixer [\#9378](https://github.com/ClickHouse/ClickHouse/issues/9378) [\#9507](https://github.com/ClickHouse/ClickHouse/pull/9507) ([filimonov](https://github.com/filimonov))
|
||||||
|
- Correction d'une exception dans `DROP TABLE IF EXISTS` [\#8663](https://github.com/ClickHouse/ClickHouse/pull/8663) ([Nikita Vasilev](https://github.com/nikvas0))
|
||||||
|
- Correction de plantage lorsqu'un utilisateur essaie d' `ALTER MODIFY SETTING` pour Ancien formaté `MergeTree` famille de moteurs de table. [\#9435](https://github.com/ClickHouse/ClickHouse/pull/9435) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Prise en charge des numéros UInt64 qui ne correspondent pas à Int64 dans les fonctions liées à JSON. Mettre à jour SIMDJSON à maîtriser. Cela corrige [\#9209](https://github.com/ClickHouse/ClickHouse/issues/9209) [\#9344](https://github.com/ClickHouse/ClickHouse/pull/9344) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Exécution fixe de prédicats inversés lorsque l'index fonctionnel non strictement monotinique est utilisé. [\#9223](https://github.com/ClickHouse/ClickHouse/pull/9223) ([Alexander Kazakov](https://github.com/Akazz))
|
||||||
|
- N'essayez pas de plier `IN` constante dans `GROUP BY` [\#8868](https://github.com/ClickHouse/ClickHouse/pull/8868) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- Correction d'un bug dans `ALTER DELETE` mutations qui conduit à la corruption d'index. Cela corrige [\#9019](https://github.com/ClickHouse/ClickHouse/issues/9019) et [\#8982](https://github.com/ClickHouse/ClickHouse/issues/8982). En outre fixer des conditions de course extrêmement rares dans `ReplicatedMergeTree` `ALTER` requête. [\#9048](https://github.com/ClickHouse/ClickHouse/pull/9048) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Lorsque le réglage `compile_expressions` est activée, vous pouvez obtenir `unexpected column` dans `LLVMExecutableFunction` lorsque nous utilisons `Nullable` type [\#8910](https://github.com/ClickHouse/ClickHouse/pull/8910) ([Guillaume Tassery](https://github.com/YiuRULE))
|
||||||
|
- Plusieurs correctifs pour `Kafka` moteur: 1) Correction des doublons qui apparaissaient pendant le rééquilibrage du groupe de consommateurs. 2) Correction rare ‘holes’ apparu lorsque les données ont été interrogées à partir de plusieurs partitions avec un sondage et validées partiellement (maintenant, nous traitons / validons toujours l'ensemble du bloc de messages interrogé). 3) corriger les vidages par taille de bloc (avant que seul le rinçage par Délai d'attente fonctionnait correctement). 4) meilleure procédure d'abonnement (avec rétroaction d'affectation). 5) Faites fonctionner les tests plus rapidement (avec des intervalles et des délais d'attente par défaut). En raison du fait que les données n'étaient pas vidées par la taille du bloc auparavant (comme il se doit selon la documentation), Ce PR peut entraîner une dégradation des performances avec les paramètres par défaut (en raison de vidages plus fréquents et plus petits qui sont moins optimaux). Si vous rencontrez le problème de performance après ce changement - veuillez augmenter `kafka_max_block_size` dans le tableau de la plus grande valeur ( par exemple `CREATE TABLE ...Engine=Kafka ... SETTINGS ... kafka_max_block_size=524288`). Fixer [\#7259](https://github.com/ClickHouse/ClickHouse/issues/7259) [\#8917](https://github.com/ClickHouse/ClickHouse/pull/8917) ([filimonov](https://github.com/filimonov))
|
||||||
|
- Fixer `Parameter out of bound` exception dans certaines requêtes après les optimisations PREWHERE. [\#8914](https://github.com/ClickHouse/ClickHouse/pull/8914) ([Baudouin Giard](https://github.com/bgiard))
|
||||||
|
- Correction du cas de la consistance mixte des arguments de la fonction `arrayZip`. [\#8705](https://github.com/ClickHouse/ClickHouse/pull/8705) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Lors de l'exécution de `CREATE` requête, plier les expressions constantes dans les arguments du moteur de stockage. Remplacez le nom de base de données vide par la base de données actuelle. Fixer [\#6508](https://github.com/ClickHouse/ClickHouse/issues/6508), [\#3492](https://github.com/ClickHouse/ClickHouse/issues/3492) [\#9262](https://github.com/ClickHouse/ClickHouse/pull/9262) ([tavplubix](https://github.com/tavplubix))
|
||||||
|
- Maintenant il n'est pas possible de créer ou d'ajouter des colonnes avec des alias cycliques simples comme `a DEFAULT b, b DEFAULT a`. [\#9603](https://github.com/ClickHouse/ClickHouse/pull/9603) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Correction d'un bug avec double mouvement qui peut corrompre la partie originale. Ceci est pertinent si vous utilisez `ALTER TABLE MOVE` [\#8680](https://github.com/ClickHouse/ClickHouse/pull/8680) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Permettre `interval` identifiant pour analyser correctement sans backticks. Correction d'un problème lorsqu'une requête ne peut pas être exécutée même si le `interval` l'identifiant est entouré de backticks ou de guillemets doubles. Cela corrige [\#9124](https://github.com/ClickHouse/ClickHouse/issues/9124). [\#9142](https://github.com/ClickHouse/ClickHouse/pull/9142) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Test de fuzz fixe et comportement incorrect de `bitTestAll`/`bitTestAny` fonction. [\#9143](https://github.com/ClickHouse/ClickHouse/pull/9143) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Correction plantage possible/mauvais nombre de lignes dans `LIMIT n WITH TIES` quand il y a beaucoup de lignes égales à n'ème ligne. [\#9464](https://github.com/ClickHouse/ClickHouse/pull/9464) ([tavplubix](https://github.com/tavplubix))
|
||||||
|
- Correction de mutations avec des parties écrites avec activé `insert_quorum`. [\#9463](https://github.com/ClickHouse/ClickHouse/pull/9463) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Correction de la course de données à la destruction de `Poco::HTTPServer`. Cela peut se produire lorsque le serveur est démarré et immédiatement arrêté. [\#9468](https://github.com/ClickHouse/ClickHouse/pull/9468) ([Anton Popov](https://github.com/CurtizJ))
|
||||||
|
- Correction d'un bug dans lequel un message d'erreur trompeur a été affiché lors de l'exécution `SHOW CREATE TABLE a_table_that_does_not_exist`. [\#8899](https://github.com/ClickHouse/ClickHouse/pull/8899) ([achulkov2](https://github.com/achulkov2))
|
||||||
|
- Fixe `Parameters are out of bound` exception dans de rares cas où nous avons une constante dans le `SELECT` clause quand nous avons un `ORDER BY` et un `LIMIT` clause. [\#8892](https://github.com/ClickHouse/ClickHouse/pull/8892) ([Guillaume Tassery](https://github.com/YiuRULE))
|
||||||
|
- Fix finalisation des mutations, quand déjà fait mutation peut avoir le statut `is_done=0`. [\#9217](https://github.com/ClickHouse/ClickHouse/pull/9217) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Empêcher l'exécution de `ALTER ADD INDEX` pour les tables MergeTree avec une ancienne syntaxe, car cela ne fonctionne pas. [\#8822](https://github.com/ClickHouse/ClickHouse/pull/8822) ([Mikhail Korotov](https://github.com/millb))
|
||||||
|
- Pendant le démarrage du serveur, n'ACCÉDEZ PAS à la table, qui `LIVE VIEW` dépend de, donc le serveur sera en mesure de démarrer. Également supprimer `LIVE VIEW` dépendances lors du détachement `LIVE VIEW`. `LIVE VIEW` est une fonctionnalité expérimentale. [\#8824](https://github.com/ClickHouse/ClickHouse/pull/8824) ([tavplubix](https://github.com/tavplubix))
|
||||||
|
- Correction possible segfault dans `MergeTreeRangeReader`, lors de l'exécution `PREWHERE`. [\#9106](https://github.com/ClickHouse/ClickHouse/pull/9106) ([Anton Popov](https://github.com/CurtizJ))
|
||||||
|
- Correction d'éventuelles sommes de contrôle non appariées avec la colonne TTL. [\#9451](https://github.com/ClickHouse/ClickHouse/pull/9451) ([Anton Popov](https://github.com/CurtizJ))
|
||||||
|
- Correction d'un bug lorsque les pièces n'étaient pas déplacées en arrière-plan par les règles TTL dans le cas où il n'y avait qu'un seul volume. [\#8672](https://github.com/ClickHouse/ClickHouse/pull/8672) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Correction du problème `Method createColumn() is not implemented for data type Set`. Cela corrige [\#7799](https://github.com/ClickHouse/ClickHouse/issues/7799). [\#8674](https://github.com/ClickHouse/ClickHouse/pull/8674) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Maintenant, nous allons essayer de finaliser les mutations plus fréquemment. [\#9427](https://github.com/ClickHouse/ClickHouse/pull/9427) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Fixer `intDiv` par moins une constante [\#9351](https://github.com/ClickHouse/ClickHouse/pull/9351) ([hcz](https://github.com/hczhcz))
|
||||||
|
- Correction d'une condition de course possible dans `BlockIO`. [\#9356](https://github.com/ClickHouse/ClickHouse/pull/9356) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Correction d'un bug menant à la résiliation du serveur lorsque vous essayez d'utiliser / drop `Kafka` tableau créé avec de mauvais paramètres. [\#9513](https://github.com/ClickHouse/ClickHouse/pull/9513) ([filimonov](https://github.com/filimonov))
|
||||||
|
- Ajout d'une solution de contournement si le système d'exploitation renvoie un résultat erroné pour `timer_create` fonction. [\#8837](https://github.com/ClickHouse/ClickHouse/pull/8837) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Correction d'une erreur dans l'utilisation de `min_marks_for_seek` paramètre. Correction du message d'erreur lorsqu'il n'y a pas de clé de sharding dans la table distribuée et que nous essayons d'ignorer les fragments inutilisés. [\#8908](https://github.com/ClickHouse/ClickHouse/pull/8908) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
|
||||||
|
#### Amélioration {#improvement}
|
||||||
|
|
||||||
|
- Mettre `ALTER MODIFY/DROP` requêtes au-dessus des mutations pour `ReplicatedMergeTree*` les moteurs de la famille. Maintenant `ALTERS` bloque uniquement à l'étape de mise à jour des métadonnées, et ne bloque pas après cela. [\#8701](https://github.com/ClickHouse/ClickHouse/pull/8701) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Ajouter la possibilité de réécrire CROSS aux jointures internes avec `WHERE` section contenant des noms Non qialifiés. [\#9512](https://github.com/ClickHouse/ClickHouse/pull/9512) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Faire `SHOW TABLES` et `SHOW DATABASES` les requêtes prennent en charge le `WHERE` les expressions et les `FROM`/`IN` [\#9076](https://github.com/ClickHouse/ClickHouse/pull/9076) ([sundyli](https://github.com/sundy-li))
|
||||||
|
- Ajout d'un paramètre `deduplicate_blocks_in_dependent_materialized_views`. [\#9070](https://github.com/ClickHouse/ClickHouse/pull/9070) ([urykhy](https://github.com/urykhy))
|
||||||
|
- Après des changements récents Le client MySQL a commencé à imprimer des chaînes binaires en hexadécimal les rendant ainsi non lisibles ([\#9032](https://github.com/ClickHouse/ClickHouse/issues/9032)). La solution de contournement dans ClickHouse est de marquer les colonnes de chaîne comme UTF-8, ce qui n'est pas toujours le cas, mais généralement le cas. [\#9079](https://github.com/ClickHouse/ClickHouse/pull/9079) ([Yuriy Baranov](https://github.com/yurriy))
|
||||||
|
- Ajout du support des clés String et FixedString pour `sumMap` [\#8903](https://github.com/ClickHouse/ClickHouse/pull/8903) ([Baudouin Giard](https://github.com/bgiard))
|
||||||
|
- Clés de chaîne de soutien dans les cartes SummingMergeTree [\#8933](https://github.com/ClickHouse/ClickHouse/pull/8933) ([Baudouin Giard](https://github.com/bgiard))
|
||||||
|
- Signal terminaison du thread au pool de threads même si le thread a lancé une exception [\#8736](https://github.com/ClickHouse/ClickHouse/pull/8736) ([Ding Xiang Fei](https://github.com/dingxiangfei2009))
|
||||||
|
- Permettent de mettre en `query_id` dans `clickhouse-benchmark` [\#9416](https://github.com/ClickHouse/ClickHouse/pull/9416) ([Anton Popov](https://github.com/CurtizJ))
|
||||||
|
- N'autorisez pas les expressions étranges `ALTER TABLE ... PARTITION partition` requête. Cela répond à l' [\#7192](https://github.com/ClickHouse/ClickHouse/issues/7192) [\#8835](https://github.com/ClickHouse/ClickHouse/pull/8835) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Table `system.table_engines` fournit maintenant des informations sur le support des fonctionnalités (comme `supports_ttl` ou `supports_sort_order`). [\#8830](https://github.com/ClickHouse/ClickHouse/pull/8830) ([Max Akhmedov](https://github.com/zlobober))
|
||||||
|
- Permettre `system.metric_log` par défaut. Il contiendra des lignes avec des valeurs de ProfileEvents, CurrentMetrics collectées avec “collect\_interval\_milliseconds” intervalle (une seconde par défaut). La table est très petite (généralement par ordre de mégaoctets) et la collecte de ces données par défaut est raisonnable. [\#9225](https://github.com/ClickHouse/ClickHouse/pull/9225) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Initialize query profiler for all threads in a group, e.g. it allows to fully profile insert-queries. Fixes [\#6964](https://github.com/ClickHouse/ClickHouse/issues/6964) [\#8874](https://github.com/ClickHouse/ClickHouse/pull/8874) ([Ivan](https://github.com/abyss7))
|
||||||
|
- Maintenant temporaire `LIVE VIEW` est créé par `CREATE LIVE VIEW name WITH TIMEOUT [42] ...` plutôt `CREATE TEMPORARY LIVE VIEW ...` parce que la syntaxe précédente n'était pas conforme à `CREATE TEMPORARY TABLE ...` [\#9131](https://github.com/ClickHouse/ClickHouse/pull/9131) ([tavplubix](https://github.com/tavplubix))
|
||||||
|
- Ajouter text\_log.paramètre de configuration de niveau pour limiter les entrées `system.text_log` table [\#8809](https://github.com/ClickHouse/ClickHouse/pull/8809) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
- Permettre de mettre la partie téléchargée sur un disque / volume selon les règles TTL [\#8598](https://github.com/ClickHouse/ClickHouse/pull/8598) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Pour les dictionnaires MySQL externes, autorisez à mutualiser le pool de connexions MySQL pour “share” parmi les dictionnaires. Cette option réduit considérablement le nombre de connexions aux serveurs MySQL. [\#9409](https://github.com/ClickHouse/ClickHouse/pull/9409) ([Clément Rodriguez](https://github.com/clemrodriguez))
|
||||||
|
- Afficher le temps d'exécution de la requête le plus proche pour les quantiles dans `clickhouse-benchmark` sortie au lieu de valeurs interpolées. Il est préférable d'afficher les valeurs qui correspondent à l'exécution de certaines requêtes. [\#8712](https://github.com/ClickHouse/ClickHouse/pull/8712) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Possibilité d'ajouter une clé et un horodatage pour le message lors de l'insertion de données dans Kafka. Fixer [\#7198](https://github.com/ClickHouse/ClickHouse/issues/7198) [\#8969](https://github.com/ClickHouse/ClickHouse/pull/8969) ([filimonov](https://github.com/filimonov))
|
||||||
|
- Si le serveur est exécuté à partir du terminal, mettez en surbrillance le numéro de thread, l'id de requête et la priorité du journal par couleurs. Ceci permet d'améliorer la lisibilité des messages de journal corrélés pour les développeurs. [\#8961](https://github.com/ClickHouse/ClickHouse/pull/8961) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Meilleur message d'exception lors du chargement des tables pour `Ordinary` la base de données. [\#9527](https://github.com/ClickHouse/ClickHouse/pull/9527) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Mettre `arraySlice` pour les tableaux avec des états de fonction d'agrégat. Cela corrige [\#9388](https://github.com/ClickHouse/ClickHouse/issues/9388) [\#9391](https://github.com/ClickHouse/ClickHouse/pull/9391) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Autoriser les fonctions constantes et les tableaux constants à utiliser sur le côté droit de L'opérateur IN. [\#8813](https://github.com/ClickHouse/ClickHouse/pull/8813) ([Anton Popov](https://github.com/CurtizJ))
|
||||||
|
- Si l'exception zookeeper s'est produite lors de la récupération des données du système.les répliques, l'afficher dans une colonne séparée. Cela met en œuvre [\#9137](https://github.com/ClickHouse/ClickHouse/issues/9137) [\#9138](https://github.com/ClickHouse/ClickHouse/pull/9138) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Supprimer atomiquement les parties de données MergeTree sur destroy. [\#8402](https://github.com/ClickHouse/ClickHouse/pull/8402) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Prise en charge de la sécurité au niveau des lignes pour les tables distribuées. [\#8926](https://github.com/ClickHouse/ClickHouse/pull/8926) ([Ivan](https://github.com/abyss7))
|
||||||
|
- Now we recognize suffix (like KB, KiB…) in settings values. [\#8072](https://github.com/ClickHouse/ClickHouse/pull/8072) ([Mikhail Korotov](https://github.com/millb))
|
||||||
|
- Empêchez la mémoire lors de la construction du résultat d'une jointure importante. [\#8637](https://github.com/ClickHouse/ClickHouse/pull/8637) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Ajout de noms de clusters aux suggestions en mode interactif dans `clickhouse-client`. [\#8709](https://github.com/ClickHouse/ClickHouse/pull/8709) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Initialize query profiler for all threads in a group, e.g. it allows to fully profile insert-queries [\#8820](https://github.com/ClickHouse/ClickHouse/pull/8820) ([Ivan](https://github.com/abyss7))
|
||||||
|
- Ajout de la colonne `exception_code` dans `system.query_log` table. [\#8770](https://github.com/ClickHouse/ClickHouse/pull/8770) ([Mikhail Korotov](https://github.com/millb))
|
||||||
|
- Serveur de compatibilité MySQL activé sur le port `9004` par défaut dans le fichier de configuration du serveur. Fixe génération de mot de passe commande dans l'exemple de configuration. [\#8771](https://github.com/ClickHouse/ClickHouse/pull/8771) ([Yuriy Baranov](https://github.com/yurriy))
|
||||||
|
- Empêcher l'abandon à l'arrêt si le système de fichiers est en lecture seule. Cela corrige [\#9094](https://github.com/ClickHouse/ClickHouse/issues/9094) [\#9100](https://github.com/ClickHouse/ClickHouse/pull/9100) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Meilleur message d'exception lorsque la longueur est requise dans la requête HTTP POST. [\#9453](https://github.com/ClickHouse/ClickHouse/pull/9453) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Ajouter `_path` et `_file` les colonnes virtuelles à `HDFS` et `File` les moteurs et les `hdfs` et `file` les fonctions de table [\#8489](https://github.com/ClickHouse/ClickHouse/pull/8489) ([Olga Khvostikova](https://github.com/stavrolia))
|
||||||
|
- Correction d'erreur `Cannot find column` lors de l'insertion dans `MATERIALIZED VIEW` dans le cas où une nouvelle colonne a été ajoutée à la table interne de la vue. [\#8766](https://github.com/ClickHouse/ClickHouse/pull/8766) [\#8788](https://github.com/ClickHouse/ClickHouse/pull/8788) ([vzakaznikov](https://github.com/vzakaznikov)) [\#8788](https://github.com/ClickHouse/ClickHouse/issues/8788) [\#8806](https://github.com/ClickHouse/ClickHouse/pull/8806) ([Nikolai Kochetov](https://github.com/KochetovNicolai)) [\#8803](https://github.com/ClickHouse/ClickHouse/pull/8803) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Correction de la progression sur le protocole client-serveur natif, en envoyant la progression après la mise à jour finale (comme les journaux). Cela peut être pertinent uniquement pour certains outils tiers qui utilisent le protocole natif. [\#9495](https://github.com/ClickHouse/ClickHouse/pull/9495) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
- Ajouter une métrique système de suivi du nombre de connexions client à L'aide du protocole MySQL ([\#9013](https://github.com/ClickHouse/ClickHouse/issues/9013)). [\#9015](https://github.com/ClickHouse/ClickHouse/pull/9015) ([Eugene Klimov](https://github.com/Slach))
|
||||||
|
- A partir de Maintenant, les réponses HTTP auront `X-ClickHouse-Timezone` en-tête défini sur la même valeur de fuseau horaire que `SELECT timezone()` serait-rapport. [\#9493](https://github.com/ClickHouse/ClickHouse/pull/9493) ([Denis Glazachev](https://github.com/traceon))
|
||||||
|
|
||||||
|
#### Amélioration Des Performances {#performance-improvement}
|
||||||
|
|
||||||
|
- Améliorer les performances de l'analyse de l'indice DANS [\#9261](https://github.com/ClickHouse/ClickHouse/pull/9261) ([Anton Popov](https://github.com/CurtizJ))
|
||||||
|
- Code plus simple et plus efficace dans les fonctions logiques + nettoyage de code. Un suivi à [\#8718](https://github.com/ClickHouse/ClickHouse/issues/8718) [\#8728](https://github.com/ClickHouse/ClickHouse/pull/8728) ([Alexander Kazakov](https://github.com/Akazz))
|
||||||
|
- Amélioration globale de la performance (de l'ordre de 5%..200% pour les requêtes affectées) en assurant un aliasing encore plus strict avec les fonctionnalités c++20. [\#9304](https://github.com/ClickHouse/ClickHouse/pull/9304) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- Aliasing plus strict pour les boucles internes des fonctions de comparaison. [\#9327](https://github.com/ClickHouse/ClickHouse/pull/9327) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Aliasing plus strict pour les boucles internes des fonctions arithmétiques. [\#9325](https://github.com/ClickHouse/ClickHouse/pull/9325) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Une implémentation ~3 fois plus rapide pour ColumnVector::replicate (), via laquelle ColumnConst:: convertToFullColumn () est implémentée. Sera également utile dans les tests lors de la matérialisation des constantes. [\#9293](https://github.com/ClickHouse/ClickHouse/pull/9293) ([Alexander Kazakov](https://github.com/Akazz))
|
||||||
|
- Une autre amélioration mineure des performances à `ColumnVector::replicate()` (cela accélère le `materialize` fonction et des fonctions d'ordre supérieur) une amélioration encore plus [\#9293](https://github.com/ClickHouse/ClickHouse/issues/9293) [\#9442](https://github.com/ClickHouse/ClickHouse/pull/9442) ([Alexander Kazakov](https://github.com/Akazz))
|
||||||
|
- Amélioration des performances de `stochasticLinearRegression` fonction d'agrégation. Ce patch est fourni par Intel. [\#8652](https://github.com/ClickHouse/ClickHouse/pull/8652) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Améliorer les performances de `reinterpretAsFixedString` fonction. [\#9342](https://github.com/ClickHouse/ClickHouse/pull/9342) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- N'envoyez pas de blocs au client pour `Null` format dans le pipeline de processeurs. [\#8797](https://github.com/ClickHouse/ClickHouse/pull/8797) ([Nikolai Kochetov](https://github.com/KochetovNicolai)) [\#8767](https://github.com/ClickHouse/ClickHouse/pull/8767) ([Alexander Kuzmenkov](https://github.com/akuzm))
|
||||||
|
|
||||||
|
#### Construction / Test / Amélioration De L'Emballage {#buildtestingpackaging-improvement}
|
||||||
|
|
||||||
|
- La gestion des exceptions fonctionne maintenant correctement sur le sous-système Windows Pour Linux. Tu vois https://github.com/ClickHouse-Extras/libunwind/pull/3 cela corrige [\#6480](https://github.com/ClickHouse/ClickHouse/issues/6480) [\#9564](https://github.com/ClickHouse/ClickHouse/pull/9564) ([sobolevsv](https://github.com/sobolevsv))
|
||||||
|
- Remplacer `readline` avec `replxx` interactif, l'édition en ligne en `clickhouse-client` [\#8416](https://github.com/ClickHouse/ClickHouse/pull/8416) ([Ivan](https://github.com/abyss7))
|
||||||
|
- Meilleur temps de construction et moins d'instanciations de modèle dans FunctionsComparison. [\#9324](https://github.com/ClickHouse/ClickHouse/pull/9324) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Intégration ajoutée avec `clang-tidy` in CI. Voir aussi [\#6044](https://github.com/ClickHouse/ClickHouse/issues/6044) [\#9566](https://github.com/ClickHouse/ClickHouse/pull/9566) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Maintenant, nous lions ClickHouse dans CI en utilisant `lld` même pour `gcc`. [\#9049](https://github.com/ClickHouse/ClickHouse/pull/9049) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Permet de randomiser la planification des threads et d'insérer des problèmes lorsque `THREAD_FUZZER_*` variables d'environnement sont définies. Cela aide les tests. [\#9459](https://github.com/ClickHouse/ClickHouse/pull/9459) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Activer les sockets sécurisés dans les tests sans état [\#9288](https://github.com/ClickHouse/ClickHouse/pull/9288) ([tavplubix](https://github.com/tavplubix))
|
||||||
|
- Rendre SPLIT\_SHARED\_LIBRARIES = OFF plus robuste [\#9156](https://github.com/ClickHouse/ClickHouse/pull/9156) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
- Faire “performance\_introspection\_and\_logging” test fiable au serveur aléatoire bloqué. Cela peut se produire dans L'environnement CI. Voir aussi [\#9515](https://github.com/ClickHouse/ClickHouse/issues/9515) [\#9528](https://github.com/ClickHouse/ClickHouse/pull/9528) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Valider XML dans la vérification de style. [\#9550](https://github.com/ClickHouse/ClickHouse/pull/9550) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Condition de course fixe dans l'essai `00738_lock_for_inner_table`. Ce test reposait sur le sommeil. [\#9555](https://github.com/ClickHouse/ClickHouse/pull/9555) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Supprimer les tests de performance de type `once`. Ceci est nécessaire pour exécuter tous les tests de performance en mode de comparaison statistique (plus fiable). [\#9557](https://github.com/ClickHouse/ClickHouse/pull/9557) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Ajout d'un test de performance pour les fonctions arithmétiques. [\#9326](https://github.com/ClickHouse/ClickHouse/pull/9326) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Ajouté test de performance pour `sumMap` et `sumMapWithOverflow` les fonctions d'agrégation. Pour le suivi de la [\#8933](https://github.com/ClickHouse/ClickHouse/issues/8933) [\#8947](https://github.com/ClickHouse/ClickHouse/pull/8947) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Assurez le style des codes D'erreur en vérifiant le style. [\#9370](https://github.com/ClickHouse/ClickHouse/pull/9370) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Ajouter un script pour l'historique des tests. [\#8796](https://github.com/ClickHouse/ClickHouse/pull/8796) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Ajouter un avertissement GCC `-Wsuggest-override` pour localiser et réparer tous les endroits où `override` mot-clé doit être utilisé. [\#8760](https://github.com/ClickHouse/ClickHouse/pull/8760) ([kreuzerkrieg](https://github.com/kreuzerkrieg))
|
||||||
|
- Ignorer le symbole faible sous Mac OS X car il doit être défini [\#9538](https://github.com/ClickHouse/ClickHouse/pull/9538) ([Utilisateur supprimé](https://github.com/ghost))
|
||||||
|
- Normaliser le temps d'exécution de certaines requêtes dans les tests de performance. Ceci est fait en préparation pour exécuter tous les tests de performance en mode comparaison. [\#9565](https://github.com/ClickHouse/ClickHouse/pull/9565) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Correction de certains tests pour prendre en charge pytest avec des tests de requête [\#9062](https://github.com/ClickHouse/ClickHouse/pull/9062) ([Ivan](https://github.com/abyss7))
|
||||||
|
- Activez SSL dans build avec MSan, afin que le serveur n'échoue pas au démarrage lors de l'exécution de tests sans état [\#9531](https://github.com/ClickHouse/ClickHouse/pull/9531) ([tavplubix](https://github.com/tavplubix))
|
||||||
|
- Correction de la substitution de base de données dans les résultats des tests [\#9384](https://github.com/ClickHouse/ClickHouse/pull/9384) ([Ilya Yatsishin](https://github.com/qoega))
|
||||||
|
- Construire des correctifs pour diverses plates-formes [\#9381](https://github.com/ClickHouse/ClickHouse/pull/9381) ([proller](https://github.com/proller)) [\#8755](https://github.com/ClickHouse/ClickHouse/pull/8755) ([proller](https://github.com/proller)) [\#8631](https://github.com/ClickHouse/ClickHouse/pull/8631) ([proller](https://github.com/proller))
|
||||||
|
- Ajout de la section disques à l'image Docker test stateless-with-coverage [\#9213](https://github.com/ClickHouse/ClickHouse/pull/9213) ([Pavel Kovalenko](https://github.com/Jokser))
|
||||||
|
- Débarrassez-vous des fichiers in-source-tree lors de la construction avec GRPC [\#9588](https://github.com/ClickHouse/ClickHouse/pull/9588) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- Temps de construction légèrement plus rapide en supprimant SessionCleaner du contexte. Rendre le code de SessionCleaner plus simple. [\#9232](https://github.com/ClickHouse/ClickHouse/pull/9232) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Mise à jour de la vérification des requêtes suspendues dans le script clickhouse-test [\#8858](https://github.com/ClickHouse/ClickHouse/pull/8858) ([Alexander Kazakov](https://github.com/Akazz))
|
||||||
|
- Suppression de certains fichiers inutiles du référentiel. [\#8843](https://github.com/ClickHouse/ClickHouse/pull/8843) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Changement de type de math perftests de `once` de `loop`. [\#8783](https://github.com/ClickHouse/ClickHouse/pull/8783) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Ajouter une image docker qui permet de créer un rapport HTML interactif du navigateur de code pour notre base de code. [\#8781](https://github.com/ClickHouse/ClickHouse/pull/8781) ([alésapine](https://github.com/alesapin)) Voir [Navigateur De Code Woboq](https://clickhouse-test-reports.s3.yandex.net/codebrowser/html_report///ClickHouse/dbms/src/index.html)
|
||||||
|
- Supprimer certains échecs de test sous MSan. [\#8780](https://github.com/ClickHouse/ClickHouse/pull/8780) ([Alexander Kuzmenkov](https://github.com/akuzm))
|
||||||
|
- SpeedUp “exception while insert” test. Ce test expire souvent dans la construction debug-with-coverage. [\#8711](https://github.com/ClickHouse/ClickHouse/pull/8711) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Mettre `libcxx` et `libcxxabi` maîtriser. En préparation à [\#9304](https://github.com/ClickHouse/ClickHouse/issues/9304) [\#9308](https://github.com/ClickHouse/ClickHouse/pull/9308) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Correction du test flacky `00910_zookeeper_test_alter_compression_codecs`. [\#9525](https://github.com/ClickHouse/ClickHouse/pull/9525) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Nettoyer les drapeaux de l'éditeur de liens dupliqués. Assurez-vous que l'éditeur de liens ne pas rechercher un symbole inattendu. [\#9433](https://github.com/ClickHouse/ClickHouse/pull/9433) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- Ajouter `clickhouse-odbc` pilote dans les images de test. Cela permet de tester l'interaction de ClickHouse avec ClickHouse via son propre pilote ODBC. [\#9348](https://github.com/ClickHouse/ClickHouse/pull/9348) ([filimonov](https://github.com/filimonov))
|
||||||
|
- Correction de plusieurs bugs dans les tests unitaires. [\#9047](https://github.com/ClickHouse/ClickHouse/pull/9047) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Permettre `-Wmissing-include-dirs` Avertissement GCC pour éliminer toutes les inclusions non existantes-principalement à la suite D'erreurs de script CMake [\#8704](https://github.com/ClickHouse/ClickHouse/pull/8704) ([kreuzerkrieg](https://github.com/kreuzerkrieg))
|
||||||
|
- Décrivez les raisons si query profiler ne peut pas fonctionner. C'est prévu pour [\#9049](https://github.com/ClickHouse/ClickHouse/issues/9049) [\#9144](https://github.com/ClickHouse/ClickHouse/pull/9144) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Mettre à jour OpenSSL vers le maître en amont. Correction du problème lorsque les connexions TLS peuvent échouer avec le message `OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error` et `SSL Exception: error:2400006E:random number generator::error retrieving entropy`. Le problème était présent dans la version 20.1. [\#8956](https://github.com/ClickHouse/ClickHouse/pull/8956) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Mettre à jour Dockerfile pour le serveur [\#8893](https://github.com/ClickHouse/ClickHouse/pull/8893) ([Ilya Mazaev](https://github.com/ne-ray))
|
||||||
|
- Corrections mineures dans le script build-gcc-from-sources [\#8774](https://github.com/ClickHouse/ClickHouse/pull/8774) ([Michael Nacharov](https://github.com/mnach))
|
||||||
|
- Remplacer `numbers` de `zeros` dans perftests où `number` la colonne n'est pas utilisée. Cela conduira à des résultats de test plus propres. [\#9600](https://github.com/ClickHouse/ClickHouse/pull/9600) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Correction d'un problème de débordement de pile lors de l'utilisation de initializer\_list dans les constructeurs de colonnes. [\#9367](https://github.com/ClickHouse/ClickHouse/pull/9367) ([Utilisateur supprimé](https://github.com/ghost))
|
||||||
|
- Mise à niveau librdkafka à v1. 3. 0. Activer groupé `rdkafka` et `gsasl` bibliothèques sous Mac OS X. [\#9000](https://github.com/ClickHouse/ClickHouse/pull/9000) ([Andrew Onyshchuk](https://github.com/oandrew))
|
||||||
|
- correction de construction sur GCC 9.2.0 [\#9306](https://github.com/ClickHouse/ClickHouse/pull/9306) ([vxider](https://github.com/Vxider))
|
||||||
|
|
||||||
|
## Clickhouse version v20. 1 {#clickhouse-release-v20-1}
|
||||||
|
|
||||||
|
### Clickhouse version v20. 1. 8. 41, 2020-03-20 {#clickhouse-release-v20-1-8-41-2020-03-20}
|
||||||
|
|
||||||
|
#### Bug Fix {#bug-fix-3}
|
||||||
|
|
||||||
|
- Correction possible permanente `Cannot schedule a task` erreur (due à une exception non gérée dans `ParallelAggregatingBlockInputStream::Handler::onFinish/onFinishThread`). Cela corrige [\#6833](https://github.com/ClickHouse/ClickHouse/issues/6833). [\#9154](https://github.com/ClickHouse/ClickHouse/pull/9154) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
- Correction de la consommation excessive de mémoire dans `ALTER` les requêtes (mutations). Cela corrige [\#9533](https://github.com/ClickHouse/ClickHouse/issues/9533) et [\#9670](https://github.com/ClickHouse/ClickHouse/issues/9670). [\#9754](https://github.com/ClickHouse/ClickHouse/pull/9754) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Correction d'un bug dans backquoting dans les dictionnaires externes DDL. Cela corrige [\#9619](https://github.com/ClickHouse/ClickHouse/issues/9619). [\#9734](https://github.com/ClickHouse/ClickHouse/pull/9734) ([alésapine](https://github.com/alesapin))
|
||||||
|
|
||||||
|
### Clickhouse version v20. 1. 7. 38, 2020-03-18 {#clickhouse-release-v20-1-7-38-2020-03-18}
|
||||||
|
|
||||||
|
#### Bug Fix {#bug-fix-4}
|
||||||
|
|
||||||
|
- Correction de noms de fonctions internes incorrects pour `sumKahan` et `sumWithOverflow`. Je mène à l'exception en utilisant ces fonctions dans les requêtes distantes. [\#9636](https://github.com/ClickHouse/ClickHouse/pull/9636) ([Azat Khuzhin](https://github.com/azat)). Ce problème était dans toutes les versions de ClickHouse.
|
||||||
|
- Permettre `ALTER ON CLUSTER` de `Distributed` tables avec réplication interne. Cela corrige [\#3268](https://github.com/ClickHouse/ClickHouse/issues/3268). [\#9617](https://github.com/ClickHouse/ClickHouse/pull/9617) ([shinoi2](https://github.com/shinoi2)). Ce problème était dans toutes les versions de ClickHouse.
|
||||||
|
- Corriger les exceptions possibles `Size of filter doesn't match size of column` et `Invalid number of rows in Chunk` dans `MergeTreeRangeReader`. Ils pouvaient apparaître lors de l'exécution `PREWHERE` dans certains cas. Fixer [\#9132](https://github.com/ClickHouse/ClickHouse/issues/9132). [\#9612](https://github.com/ClickHouse/ClickHouse/pull/9612) ([Anton Popov](https://github.com/CurtizJ))
|
||||||
|
- Correction du problème: le fuseau horaire n'a pas été conservé si vous écrivez une expression arithmétique simple comme `time + 1` (contrairement à une expression comme `time + INTERVAL 1 SECOND`). Cela corrige [\#5743](https://github.com/ClickHouse/ClickHouse/issues/5743). [\#9323](https://github.com/ClickHouse/ClickHouse/pull/9323) ([alexeï-milovidov](https://github.com/alexey-milovidov)). Ce problème était dans toutes les versions de ClickHouse.
|
||||||
|
- Maintenant il n'est pas possible de créer ou d'ajouter des colonnes avec des alias cycliques simples comme `a DEFAULT b, b DEFAULT a`. [\#9603](https://github.com/ClickHouse/ClickHouse/pull/9603) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Correction du problème lorsque le remplissage à la fin de la valeur codée base64 peut être mal formé. Mettre à jour la bibliothèque base64. Cela corrige [\#9491](https://github.com/ClickHouse/ClickHouse/issues/9491), proche [\#9492](https://github.com/ClickHouse/ClickHouse/issues/9492) [\#9500](https://github.com/ClickHouse/ClickHouse/pull/9500) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Correction de la course de données à la destruction de `Poco::HTTPServer`. Cela peut se produire lorsque le serveur est démarré et immédiatement arrêté. [\#9468](https://github.com/ClickHouse/ClickHouse/pull/9468) ([Anton Popov](https://github.com/CurtizJ))
|
||||||
|
- Correction plantage possible/mauvais nombre de lignes dans `LIMIT n WITH TIES` quand il y a beaucoup de lignes égales à n'ème ligne. [\#9464](https://github.com/ClickHouse/ClickHouse/pull/9464) ([tavplubix](https://github.com/tavplubix))
|
||||||
|
- Correction d'éventuelles sommes de contrôle non appariées avec la colonne TTL. [\#9451](https://github.com/ClickHouse/ClickHouse/pull/9451) ([Anton Popov](https://github.com/CurtizJ))
|
||||||
|
- Correction de plantage lorsqu'un utilisateur essaie d' `ALTER MODIFY SETTING` pour Ancien formaté `MergeTree` famille de moteurs de table. [\#9435](https://github.com/ClickHouse/ClickHouse/pull/9435) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Maintenant, nous allons essayer de finaliser les mutations plus fréquemment. [\#9427](https://github.com/ClickHouse/ClickHouse/pull/9427) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Correction du protocole de réplication incompatibilité introduit dans [\#8598](https://github.com/ClickHouse/ClickHouse/issues/8598). [\#9412](https://github.com/ClickHouse/ClickHouse/pull/9412) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Fix not (has ()) pour l'index bloom\_filter des types de tableau. [\#9407](https://github.com/ClickHouse/ClickHouse/pull/9407) ([achimbab](https://github.com/achimbab))
|
||||||
|
- Correction du comportement de `match` et `extract` fonctions lorsque haystack a zéro octets. Le comportement était mauvais quand la botte de foin était constante. Cela corrige [\#9160](https://github.com/ClickHouse/ClickHouse/issues/9160) [\#9163](https://github.com/ClickHouse/ClickHouse/pull/9163) ([alexeï-milovidov](https://github.com/alexey-milovidov)) [\#9345](https://github.com/ClickHouse/ClickHouse/pull/9345) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
|
||||||
|
#### Construction / Test / Amélioration De L'Emballage {#buildtestingpackaging-improvement-1}
|
||||||
|
|
||||||
|
- La gestion des exceptions fonctionne maintenant correctement sur le sous-système Windows Pour Linux. Tu vois https://github.com/ClickHouse-Extras/libunwind/pull/3 cela corrige [\#6480](https://github.com/ClickHouse/ClickHouse/issues/6480) [\#9564](https://github.com/ClickHouse/ClickHouse/pull/9564) ([sobolevsv](https://github.com/sobolevsv))
|
||||||
|
|
||||||
|
### Clickhouse version v20. 1. 6. 30, 2020-03-05 {#clickhouse-release-v20-1-6-30-2020-03-05}
|
||||||
|
|
||||||
|
#### Bug Fix {#bug-fix-5}
|
||||||
|
|
||||||
|
- Correction de l'incompatibilité des données lorsqu'elles sont compressées avec `T64` codec.
|
||||||
|
[\#9039](https://github.com/ClickHouse/ClickHouse/pull/9039) [(abyss7)](https://github.com/abyss7)
|
||||||
|
- Correction de l'ordre des plages lors de la lecture de la table MergeTree dans un thread. Fixer [\#8964](https://github.com/ClickHouse/ClickHouse/issues/8964).
|
||||||
|
[\#9050](https://github.com/ClickHouse/ClickHouse/pull/9050) [(CurtizJ)](https://github.com/CurtizJ)
|
||||||
|
- Correction possible segfault dans `MergeTreeRangeReader`, lors de l'exécution `PREWHERE`. Fixer [\#9064](https://github.com/ClickHouse/ClickHouse/issues/9064).
|
||||||
|
[\#9106](https://github.com/ClickHouse/ClickHouse/pull/9106) [(CurtizJ)](https://github.com/CurtizJ)
|
||||||
|
- Fixer `reinterpretAsFixedString` retourner `FixedString` plutôt `String`.
|
||||||
|
[\#9052](https://github.com/ClickHouse/ClickHouse/pull/9052) [(oandrew)](https://github.com/oandrew)
|
||||||
|
- Fixer `joinGet` avec les types de retour nullable. Fixer [\#8919](https://github.com/ClickHouse/ClickHouse/issues/8919)
|
||||||
|
[\#9014](https://github.com/ClickHouse/ClickHouse/pull/9014) [(amosbird)](https://github.com/amosbird)
|
||||||
|
- Correction du test fuzz et du comportement incorrect des fonctions bitTestAll/bitTestAny.
|
||||||
|
[\#9143](https://github.com/ClickHouse/ClickHouse/pull/9143) [(alexey-milovidov)](https://github.com/alexey-milovidov)
|
||||||
|
- Corrigez le comportement des fonctions match et extract lorsque haystack a zéro octet. Le comportement était mauvais quand la botte de foin était constante. Fixer [\#9160](https://github.com/ClickHouse/ClickHouse/issues/9160)
|
||||||
|
[\#9163](https://github.com/ClickHouse/ClickHouse/pull/9163) [(alexey-milovidov)](https://github.com/alexey-milovidov)
|
||||||
|
- Exécution fixe de prédicats inversés lorsque l'index fonctionnel non strictement monotinique est utilisé. Fixer [\#9034](https://github.com/ClickHouse/ClickHouse/issues/9034)
|
||||||
|
[\#9223](https://github.com/ClickHouse/ClickHouse/pull/9223) [(Akazz)](https://github.com/Akazz)
|
||||||
|
- Permettre à réécrire `CROSS` de `INNER JOIN` si il y a `[NOT] LIKE` opérateur `WHERE` section. Fixer [\#9191](https://github.com/ClickHouse/ClickHouse/issues/9191)
|
||||||
|
[\#9229](https://github.com/ClickHouse/ClickHouse/pull/9229) [(4ertus2)](https://github.com/4ertus2)
|
||||||
|
- Autoriser la(Les) première (s) colonne (s) dans une table avec Log engine à être un alias.
|
||||||
|
[\#9231](https://github.com/ClickHouse/ClickHouse/pull/9231) [(abyss7)](https://github.com/abyss7)
|
||||||
|
- Autoriser la virgule rejoindre `IN()` à l'intérieur. Fixer [\#7314](https://github.com/ClickHouse/ClickHouse/issues/7314).
|
||||||
|
[\#9251](https://github.com/ClickHouse/ClickHouse/pull/9251) [(4ertus2)](https://github.com/4ertus2)
|
||||||
|
- Améliorer `ALTER MODIFY/ADD` les requêtes de la logique. Maintenant vous ne pouvez pas `ADD` colonne sans type, `MODIFY` l'expression par défaut ne change pas le type de colonne et `MODIFY` type ne perd pas la valeur d'expression par défaut. Fixer [\#8669](https://github.com/ClickHouse/ClickHouse/issues/8669).
|
||||||
|
[\#9227](https://github.com/ClickHouse/ClickHouse/pull/9227) [(alesapin)](https://github.com/alesapin)
|
||||||
|
- Fix finalisation des mutations, quand déjà fait mutation peut avoir le statut is\_done = 0.
|
||||||
|
[\#9217](https://github.com/ClickHouse/ClickHouse/pull/9217) [(alesapin)](https://github.com/alesapin)
|
||||||
|
- Soutien “Processors” pipeline pour le système.nombres et système.numbers\_mt. Cela corrige également le bug lorsque `max_execution_time` n'est pas respectée.
|
||||||
|
[\#7796](https://github.com/ClickHouse/ClickHouse/pull/7796) [(KochetovNicolai)](https://github.com/KochetovNicolai)
|
||||||
|
- Correction d'un mauvais comptage de `DictCacheKeysRequestedFound` métrique.
|
||||||
|
[\#9411](https://github.com/ClickHouse/ClickHouse/pull/9411) [(nikitamikhaylov)](https://github.com/nikitamikhaylov)
|
||||||
|
- Ajout d'une vérification de la stratégie de stockage dans `ATTACH PARTITION FROM`, `REPLACE PARTITION`, `MOVE TO TABLE` ce qui pourrait autrement rendre les données de la partie inaccessibles après le redémarrage et empêcher ClickHouse de démarrer.
|
||||||
|
[\#9383](https://github.com/ClickHouse/ClickHouse/pull/9383) [(excitoon)](https://github.com/excitoon)
|
||||||
|
- Rapport UBSan fixe dans `MergeTreeIndexSet`. Cela corrige [\#9250](https://github.com/ClickHouse/ClickHouse/issues/9250)
|
||||||
|
[\#9365](https://github.com/ClickHouse/ClickHouse/pull/9365) [(alexey-milovidov)](https://github.com/alexey-milovidov)
|
||||||
|
- Correction possible datarace dans BlockIO.
|
||||||
|
[\#9356](https://github.com/ClickHouse/ClickHouse/pull/9356) [(KochetovNicolai)](https://github.com/KochetovNicolai)
|
||||||
|
- Soutien pour `UInt64` nombres qui ne correspondent pas à Int64 dans les fonctions liées à JSON. Mettre `SIMDJSON` maîtriser. Cela corrige [\#9209](https://github.com/ClickHouse/ClickHouse/issues/9209)
|
||||||
|
[\#9344](https://github.com/ClickHouse/ClickHouse/pull/9344) [(alexey-milovidov)](https://github.com/alexey-milovidov)
|
||||||
|
- Résoudre le problème lorsque la quantité d'espace libre n'est pas calculée correctement si le répertoire de données est monté sur un appareil séparé. Pour le disque par défaut calculer l'espace libre à partir du sous-répertoire de données. Cela corrige [\#7441](https://github.com/ClickHouse/ClickHouse/issues/7441)
|
||||||
|
[\#9257](https://github.com/ClickHouse/ClickHouse/pull/9257) [(millb)](https://github.com/millb)
|
||||||
|
- Corrigez le problème lorsque les connexions TLS peuvent échouer avec le message `OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error and SSL Exception: error:2400006E:random number generator::error retrieving entropy.` Mettre à jour OpenSSL vers le maître en amont.
|
||||||
|
[\#8956](https://github.com/ClickHouse/ClickHouse/pull/8956) [(alexey-milovidov)](https://github.com/alexey-milovidov)
|
||||||
|
- Lors de l'exécution de `CREATE` requête, plier les expressions constantes dans les arguments du moteur de stockage. Remplacez le nom de base de données vide par la base de données actuelle. Fixer [\#6508](https://github.com/ClickHouse/ClickHouse/issues/6508), [\#3492](https://github.com/ClickHouse/ClickHouse/issues/3492). Corrigez également la vérification de l'adresse locale dans ClickHouseDictionarySource.
|
||||||
|
[\#9262](https://github.com/ClickHouse/ClickHouse/pull/9262) [(tabplubix)](https://github.com/tavplubix)
|
||||||
|
- Fixer erreur de segmentation dans `StorageMerge`, ce qui peut arriver lors de la lecture de StorageFile.
|
||||||
|
[\#9387](https://github.com/ClickHouse/ClickHouse/pull/9387) [(tabplubix)](https://github.com/tavplubix)
|
||||||
|
- Empêcher la perte de données dans `Kafka` dans de rares cas, lorsque l'exception se produit après la lecture du suffixe mais avant la validation. Fixer [\#9378](https://github.com/ClickHouse/ClickHouse/issues/9378). Concerner: [\#7175](https://github.com/ClickHouse/ClickHouse/issues/7175)
|
||||||
|
[\#9507](https://github.com/ClickHouse/ClickHouse/pull/9507) [(filimonov)](https://github.com/filimonov)
|
||||||
|
- Correction d'un bug menant à la résiliation du serveur lorsque vous essayez d'utiliser / drop `Kafka` tableau créé avec de mauvais paramètres. Fixer [\#9494](https://github.com/ClickHouse/ClickHouse/issues/9494). Incorporer [\#9507](https://github.com/ClickHouse/ClickHouse/issues/9507).
|
||||||
|
[\#9513](https://github.com/ClickHouse/ClickHouse/pull/9513) [(filimonov)](https://github.com/filimonov)
|
||||||
|
|
||||||
|
#### Nouveauté {#new-feature-1}
|
||||||
|
|
||||||
|
- Ajouter `deduplicate_blocks_in_dependent_materialized_views` option pour contrôler le comportement des insertions idempotent dans des tables avec des vues matérialisées. Cette nouvelle fonctionnalité a été ajoutée à la version de bugfix par une demande spéciale D'Altinity.
|
||||||
|
[\#9070](https://github.com/ClickHouse/ClickHouse/pull/9070) [(urykhy)](https://github.com/urykhy)
|
||||||
|
|
||||||
|
### Clickhouse version v20. 1. 2. 4, 2020-01-22 {#clickhouse-release-v20-1-2-4-2020-01-22}
|
||||||
|
|
||||||
|
#### Modification Incompatible En Arrière {#backward-incompatible-change-1}
|
||||||
|
|
||||||
|
- Effectuer le réglage `merge_tree_uniform_read_distribution` obsolète. Le serveur reconnaît toujours ce paramètre, mais il n'a pas d'effet. [\#8308](https://github.com/ClickHouse/ClickHouse/pull/8308) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Type de retour modifié de la fonction `greatCircleDistance` de `Float32` parce que maintenant, le résultat du calcul est `Float32`. [\#7993](https://github.com/ClickHouse/ClickHouse/pull/7993) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Maintenant, il est prévu que les paramètres de requête sont représentés dans “escaped” format. Par exemple, pour passer de la chaîne `a<tab>b` vous devez écrire `a\tb` ou `a\<tab>b` et, respectivement,, `a%5Ctb` ou `a%5C%09b` dans L'URL. Ceci est nécessaire pour ajouter la possibilité de passer NULL as `\N`. Cela corrige [\#7488](https://github.com/ClickHouse/ClickHouse/issues/7488). [\#8517](https://github.com/ClickHouse/ClickHouse/pull/8517) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Permettre `use_minimalistic_part_header_in_zookeeper` réglage pour `ReplicatedMergeTree` par défaut. Cela permettra de réduire considérablement la quantité de données stockées dans ZooKeeper. Ce paramètre est pris en charge depuis la version 19.1 et nous l'utilisons déjà en production dans plusieurs services sans aucun problème depuis plus d'une demi-année. Désactivez ce paramètre si vous avez la possibilité de passer à des versions antérieures à 19.1. [\#6850](https://github.com/ClickHouse/ClickHouse/pull/6850) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Les indices de saut de données sont prêts pour la production et activés par défaut. Paramètre `allow_experimental_data_skipping_indices`, `allow_experimental_cross_to_join_conversion` et `allow_experimental_multiple_joins_emulation` sont maintenant obsolètes et ne rien faire. [\#7974](https://github.com/ClickHouse/ClickHouse/pull/7974) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Ajouter de nouveaux `ANY JOIN` logique pour `StorageJoin` compatible avec `JOIN` opération. Pour mettre à niveau sans changement de comportement vous devez ajouter `SETTINGS any_join_distinct_right_table_keys = 1` pour engine Join tables metadata ou recréer ces tables après la mise à niveau. [\#8400](https://github.com/ClickHouse/ClickHouse/pull/8400) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Exiger que le serveur soit redémarré pour appliquer les modifications dans la configuration de journalisation. Il s'agit d'une solution de contournement temporaire pour éviter le bogue où le serveur se connecte à un fichier journal supprimé (voir [\#8696](https://github.com/ClickHouse/ClickHouse/issues/8696)). [\#8707](https://github.com/ClickHouse/ClickHouse/pull/8707) ([Alexander Kuzmenkov](https://github.com/akuzm))
|
||||||
|
|
||||||
|
#### Nouveauté {#new-feature-2}
|
||||||
|
|
||||||
|
- Ajout d'informations sur les chemins d'accès `system.merges`. [\#8043](https://github.com/ClickHouse/ClickHouse/pull/8043) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Ajouter la possibilité d'exécuter `SYSTEM RELOAD DICTIONARY` requête en `ON CLUSTER` mode. [\#8288](https://github.com/ClickHouse/ClickHouse/pull/8288) ([Guillaume Tassery](https://github.com/YiuRULE))
|
||||||
|
- Ajouter la possibilité d'exécuter `CREATE DICTIONARY` les requêtes en `ON CLUSTER` mode. [\#8163](https://github.com/ClickHouse/ClickHouse/pull/8163) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Maintenant, le profil de l'utilisateur dans `users.xml` peut hériter de plusieurs profils. [\#8343](https://github.com/ClickHouse/ClickHouse/pull/8343) ([Mikhail f. Shiryaev](https://github.com/Felixoid))
|
||||||
|
- Ajouter `system.stack_trace` table qui permet de regarder les traces de pile de tous les threads du serveur. Ceci est utile pour les développeurs d'introspecter l'état du serveur. Cela corrige [\#7576](https://github.com/ClickHouse/ClickHouse/issues/7576). [\#8344](https://github.com/ClickHouse/ClickHouse/pull/8344) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Ajouter `DateTime64` type de données configurables sous-précision de seconde. [\#7170](https://github.com/ClickHouse/ClickHouse/pull/7170) ([Vasily Nemkov](https://github.com/Enmk))
|
||||||
|
- Ajouter une fonction de table `clusterAllReplicas` ce qui permet d'interroger tous les nœuds dans le cluster. [\#8493](https://github.com/ClickHouse/ClickHouse/pull/8493) ([kiran sunkari](https://github.com/kiransunkari))
|
||||||
|
- Ajouter une fonction d'agrégat `categoricalInformationValue` qui calcule la valeur d'information d'une fonction discrète. [\#8117](https://github.com/ClickHouse/ClickHouse/pull/8117) ([hcz](https://github.com/hczhcz))
|
||||||
|
- Accélérer l'analyse des fichiers de données dans `CSV`, `TSV` et `JSONEachRow` formater en le faisant en parallèle. [\#7780](https://github.com/ClickHouse/ClickHouse/pull/7780) ([Alexander Kuzmenkov](https://github.com/akuzm))
|
||||||
|
- Ajouter une fonction `bankerRound` qui effectue l'arrondi. [\#8112](https://github.com/ClickHouse/ClickHouse/pull/8112) ([hcz](https://github.com/hczhcz))
|
||||||
|
- Soutenir plus de langues dans le dictionnaire intégré pour les noms de région: ‘ru’, ‘en’, ‘ua’, ‘uk’, ‘by’, ‘kz’, ‘tr’, ‘de’, ‘uz’, ‘lv’, ‘lt’, ‘et’, ‘pt’, ‘he’, ‘vi’. [\#8189](https://github.com/ClickHouse/ClickHouse/pull/8189) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Améliorer l'uniformité de `ANY JOIN` logique. Maintenant `t1 ANY LEFT JOIN t2` égal `t2 ANY RIGHT JOIN t1`. [\#7665](https://github.com/ClickHouse/ClickHouse/pull/7665) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Ajouter un paramètre `any_join_distinct_right_table_keys` ce qui permet un vieux comportement pour `ANY INNER JOIN`. [\#7665](https://github.com/ClickHouse/ClickHouse/pull/7665) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Ajouter de nouveaux `SEMI` et `ANTI JOIN`. Vieux `ANY INNER JOIN` comportement maintenant disponible en `SEMI LEFT JOIN`. [\#7665](https://github.com/ClickHouse/ClickHouse/pull/7665) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Ajouter `Distributed` format pour `File` moteur et `file` fonction de table qui permet de lire à partir `.bin` fichiers générés par des insertions asynchrones dans `Distributed` table. [\#8535](https://github.com/ClickHouse/ClickHouse/pull/8535) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Ajouter un argument de colonne de réinitialisation facultatif pour `runningAccumulate` ce qui permet de réinitialiser les résultats d'agrégation pour chaque nouvelle valeur de clé. [\#8326](https://github.com/ClickHouse/ClickHouse/pull/8326) ([Sergey Kononenko](https://github.com/kononencheg))
|
||||||
|
- Ajouter la possibilité d'utiliser ClickHouse comme point de terminaison Prometheus. [\#7900](https://github.com/ClickHouse/ClickHouse/pull/7900) ([vdimir](https://github.com/Vdimir))
|
||||||
|
- Ajouter une section `<remote_url_allow_hosts>` dans `config.xml` qui restreint les hôtes autorisés pour les moteurs de table distants et les fonctions de table `URL`, `S3`, `HDFS`. [\#7154](https://github.com/ClickHouse/ClickHouse/pull/7154) ([Mikhail Korotov](https://github.com/millb))
|
||||||
|
- Ajout de la fonction `greatCircleAngle` qui calcule la distance sur une sphère en degrés. [\#8105](https://github.com/ClickHouse/ClickHouse/pull/8105) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Rayon de la Terre modifié pour être cohérent avec la bibliothèque H3. [\#8105](https://github.com/ClickHouse/ClickHouse/pull/8105) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Ajouter `JSONCompactEachRow` et `JSONCompactEachRowWithNamesAndTypes` les formats d'entrée et de sortie. [\#7841](https://github.com/ClickHouse/ClickHouse/pull/7841) ([Mikhail Korotov](https://github.com/millb))
|
||||||
|
- Ajout d'une fonctionnalité pour les moteurs de table liés aux fichiers et les fonctions de table (`File`, `S3`, `URL`, `HDFS`) qui permet de lire et d'écrire `gzip` fichiers basés sur un paramètre de moteur supplémentaire ou une extension de fichier. [\#7840](https://github.com/ClickHouse/ClickHouse/pull/7840) ([Andrey Bodrov](https://github.com/apbodrov))
|
||||||
|
- Ajouté le `randomASCII(length)` fonction, générant une chaîne avec un ensemble aléatoire de [ASCII](https://en.wikipedia.org/wiki/ASCII#Printable_characters) caractères imprimables. [\#8401](https://github.com/ClickHouse/ClickHouse/pull/8401) ([Baïonnette](https://github.com/BayoNet))
|
||||||
|
- Ajout de la fonction `JSONExtractArrayRaw` qui renvoie un tableau sur des éléments de tableau JSON non analysés de `JSON` chaîne. [\#8081](https://github.com/ClickHouse/ClickHouse/pull/8081) ([Oleg Matrokhin](https://github.com/errx))
|
||||||
|
- Ajouter `arrayZip` fonction qui permet de combiner plusieurs tableaux de longueurs égales dans un tableau de n-uplets. [\#8149](https://github.com/ClickHouse/ClickHouse/pull/8149) ([L'Hiver Zhang](https://github.com/zhang2014))
|
||||||
|
- Ajouter la possibilité de déplacer des données entre les disques selon configuré `TTL`-expressions pour `*MergeTree` famille de moteurs de table. [\#8140](https://github.com/ClickHouse/ClickHouse/pull/8140) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Ajout d'une nouvelle fonction d'agrégat `avgWeighted` qui permet de calculer la moyenne pondérée. [\#7898](https://github.com/ClickHouse/ClickHouse/pull/7898) ([Andrey Bodrov](https://github.com/apbodrov))
|
||||||
|
- Maintenant, l'analyse parallèle est activée par défaut pour `TSV`, `TSKV`, `CSV` et `JSONEachRow` format. [\#7894](https://github.com/ClickHouse/ClickHouse/pull/7894) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))
|
||||||
|
- Ajouter plusieurs fonctions de géo `H3` bibliothèque: `h3GetResolution`, `h3EdgeAngle`, `h3EdgeLength`, `h3IsValid` et `h3kRing`. [\#8034](https://github.com/ClickHouse/ClickHouse/pull/8034) ([Konstantin Malanchev](https://github.com/hombit))
|
||||||
|
- Ajout du support pour brotli (`br`) compression dans les stockages liés aux fichiers et les fonctions de table. Cela corrige [\#8156](https://github.com/ClickHouse/ClickHouse/issues/8156). [\#8526](https://github.com/ClickHouse/ClickHouse/pull/8526) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Ajouter `groupBit*` fonctions pour l' `SimpleAggregationFunction` type. [\#8485](https://github.com/ClickHouse/ClickHouse/pull/8485) ([Guillaume Tassery](https://github.com/YiuRULE))
|
||||||
|
|
||||||
|
#### Bug Fix {#bug-fix-6}
|
||||||
|
|
||||||
|
- Correction du renommage des tables avec `Distributed` moteur. Correction problème [\#7868](https://github.com/ClickHouse/ClickHouse/issues/7868). [\#8306](https://github.com/ClickHouse/ClickHouse/pull/8306) ([tavplubix](https://github.com/tavplubix))
|
||||||
|
- Maintenant dictionnaires de soutien `EXPRESSION` pour les attributs dans une chaîne arbitraire en dialecte SQL non-ClickHouse. [\#8098](https://github.com/ClickHouse/ClickHouse/pull/8098) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Réparation de `INSERT SELECT FROM mysql(...)` requête. Cela corrige [\#8070](https://github.com/ClickHouse/ClickHouse/issues/8070) et [\#7960](https://github.com/ClickHouse/ClickHouse/issues/7960). [\#8234](https://github.com/ClickHouse/ClickHouse/pull/8234) ([tavplubix](https://github.com/tavplubix))
|
||||||
|
- Correction d'erreur “Mismatch column sizes” lors de l'insertion par défaut `Tuple` de `JSONEachRow`. Cela corrige [\#5653](https://github.com/ClickHouse/ClickHouse/issues/5653). [\#8606](https://github.com/ClickHouse/ClickHouse/pull/8606) ([tavplubix](https://github.com/tavplubix))
|
||||||
|
- Maintenant, une exception sera levée en cas d'utilisation `WITH TIES` parallèlement `LIMIT BY`. Ajoutez également la possibilité d'utiliser `TOP` avec `LIMIT BY`. Cela corrige [\#7472](https://github.com/ClickHouse/ClickHouse/issues/7472). [\#7637](https://github.com/ClickHouse/ClickHouse/pull/7637) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))
|
||||||
|
- Correction de la dépendance unintendent à partir de la nouvelle version de glibc dans `clickhouse-odbc-bridge` binaire. [\#8046](https://github.com/ClickHouse/ClickHouse/pull/8046) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- Correction d'un bug dans la fonction de contrôle de `*MergeTree` les moteurs de la famille. Maintenant, il n'échoue pas dans le cas où nous avons une quantité égale de lignes dans le dernier granule et la dernière marque (non finale). [\#8047](https://github.com/ClickHouse/ClickHouse/pull/8047) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Fixer l'insertion dans `Enum*` les colonnes après `ALTER` requête, lorsque le type numérique sous-jacent est égal au type spécifié par la table. Cela corrige [\#7836](https://github.com/ClickHouse/ClickHouse/issues/7836). [\#7908](https://github.com/ClickHouse/ClickHouse/pull/7908) ([Anton Popov](https://github.com/CurtizJ))
|
||||||
|
- Négatif non constant autorisé “size” argument pour la fonction `substring`. Il n'a pas été autorisé par erreur. Cela corrige [\#4832](https://github.com/ClickHouse/ClickHouse/issues/4832). [\#7703](https://github.com/ClickHouse/ClickHouse/pull/7703) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Correction d'un bogue d'analyse lorsque le nombre d'arguments transmis est erroné `(O|J)DBC` tableau moteur. [\#7709](https://github.com/ClickHouse/ClickHouse/pull/7709) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Utilisation du nom de commande du processus clickhouse en cours d'exécution lors de l'envoi de journaux à syslog. Dans les versions précédentes, la chaîne vide était utilisée à la place du nom de la commande. [\#8460](https://github.com/ClickHouse/ClickHouse/pull/8460) ([Michael Nacharov](https://github.com/mnach))
|
||||||
|
- Correction de la vérification des hôtes autorisés pour `localhost`. Ce PR corrige la solution fournie dans [\#8241](https://github.com/ClickHouse/ClickHouse/pull/8241). [\#8342](https://github.com/ClickHouse/ClickHouse/pull/8342) ([Vitaly Baranov](https://github.com/vitlibar))
|
||||||
|
- Correction plantage rare dans `argMin` et `argMax` fonctions pour les arguments de chaîne longue, lorsque result est utilisé dans `runningAccumulate` fonction. Cela corrige [\#8325](https://github.com/ClickHouse/ClickHouse/issues/8325) [\#8341](https://github.com/ClickHouse/ClickHouse/pull/8341) ([dinosaure](https://github.com/769344359))
|
||||||
|
- Correction de la surcommission de mémoire pour les tables avec `Buffer` moteur. [\#8345](https://github.com/ClickHouse/ClickHouse/pull/8345) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
- Correction d'un bug potentiel dans les fonctions qui peuvent prendre `NULL` comme l'un des arguments et retourner non-NULL. [\#8196](https://github.com/ClickHouse/ClickHouse/pull/8196) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Meilleurs calculs de métriques dans le pool de threads pour les processus `MergeTree` table des moteurs. [\#8194](https://github.com/ClickHouse/ClickHouse/pull/8194) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Fonction Fix `IN` à l'intérieur de `WHERE` instruction lorsque le filtre de table de niveau ligne est présent. Fixer [\#6687](https://github.com/ClickHouse/ClickHouse/issues/6687) [\#8357](https://github.com/ClickHouse/ClickHouse/pull/8357) ([Ivan](https://github.com/abyss7))
|
||||||
|
- Maintenant, une exception est levée si la valeur intégrale n'est pas complètement analysée pour les valeurs des paramètres. [\#7678](https://github.com/ClickHouse/ClickHouse/pull/7678) ([Mikhail Korotov](https://github.com/millb))
|
||||||
|
- Fix exception lorsque la fonction est utilisée dans la requête distribuée table avec plus de deux fragments. [\#8164](https://github.com/ClickHouse/ClickHouse/pull/8164) ([小路](https://github.com/nicelulu))
|
||||||
|
- Maintenant, bloom filter peut gérer des tableaux de longueur nulle et n'effectue pas de calculs redondants. [\#8242](https://github.com/ClickHouse/ClickHouse/pull/8242) ([achimbab](https://github.com/achimbab))
|
||||||
|
- Correction de la vérification si un hôte client est autorisé en faisant correspondre l'hôte client à `host_regexp` spécifié dans `users.xml`. [\#8241](https://github.com/ClickHouse/ClickHouse/pull/8241) ([Vitaly Baranov](https://github.com/vitlibar))
|
||||||
|
- Relax colonne ambiguë vérifier qui conduit à des faux positifs dans plusieurs `JOIN ON` section. [\#8385](https://github.com/ClickHouse/ClickHouse/pull/8385) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Correction possible plantage du serveur (`std::terminate`) lorsque le serveur ne peut pas envoyer ou écrire des données `JSON` ou `XML` format avec les valeurs de `String` type de données (qui nécessitent `UTF-8` validation) ou lors de la compression des données de résultat avec l'algorithme Brotli ou dans certains autres cas rares. Cela corrige [\#7603](https://github.com/ClickHouse/ClickHouse/issues/7603) [\#8384](https://github.com/ClickHouse/ClickHouse/pull/8384) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Correction de la condition de course dans `StorageDistributedDirectoryMonitor` trouvé par CI. Cela corrige [\#8364](https://github.com/ClickHouse/ClickHouse/issues/8364). [\#8383](https://github.com/ClickHouse/ClickHouse/pull/8383) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Maintenant fond fusionne dans `*MergeTree` la famille des moteurs de table préserve l'ordre de volume de la Politique de stockage avec plus de précision. [\#8549](https://github.com/ClickHouse/ClickHouse/pull/8549) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Maintenant moteur de table `Kafka` fonctionne correctement avec `Native` format. Cela corrige [\#6731](https://github.com/ClickHouse/ClickHouse/issues/6731) [\#7337](https://github.com/ClickHouse/ClickHouse/issues/7337) [\#8003](https://github.com/ClickHouse/ClickHouse/issues/8003). [\#8016](https://github.com/ClickHouse/ClickHouse/pull/8016) ([filimonov](https://github.com/filimonov))
|
||||||
|
- Formats fixes avec des en-têtes (comme `CSVWithNames`) qui lançaient une exception sur EOF pour le moteur de table `Kafka`. [\#8016](https://github.com/ClickHouse/ClickHouse/pull/8016) ([filimonov](https://github.com/filimonov))
|
||||||
|
- Correction d'un bug avec making set from subquery dans la partie droite de `IN` section. Cela corrige [\#5767](https://github.com/ClickHouse/ClickHouse/issues/5767) et [\#2542](https://github.com/ClickHouse/ClickHouse/issues/2542). [\#7755](https://github.com/ClickHouse/ClickHouse/pull/7755) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))
|
||||||
|
- Correction d'un crash possible lors de la lecture à partir du stockage `File`. [\#7756](https://github.com/ClickHouse/ClickHouse/pull/7756) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Correction de la lecture des fichiers en `Parquet` format contenant des colonnes de type `list`. [\#8334](https://github.com/ClickHouse/ClickHouse/pull/8334) ([maxulan](https://github.com/maxulan))
|
||||||
|
- Correction d'erreur `Not found column` pour les requêtes distribuées avec `PREWHERE` condition dépendant de la clé d'échantillonnage si `max_parallel_replicas > 1`. [\#7913](https://github.com/ClickHouse/ClickHouse/pull/7913) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Correction d'erreur `Not found column` si la requête utilisée `PREWHERE` dépendant de l'alias de la table et le jeu de résultats était vide en raison de la condition de clé primaire. [\#7911](https://github.com/ClickHouse/ClickHouse/pull/7911) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Type de retour fixe pour les fonctions `rand` et `randConstant` en cas de `Nullable` argument. Maintenant renvoient toujours `UInt32` et jamais `Nullable(UInt32)`. [\#8204](https://github.com/ClickHouse/ClickHouse/pull/8204) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Désactivé prédicat-poussoir vers le bas pour `WITH FILL` expression. Cela corrige [\#7784](https://github.com/ClickHouse/ClickHouse/issues/7784). [\#7789](https://github.com/ClickHouse/ClickHouse/pull/7789) ([L'Hiver Zhang](https://github.com/zhang2014))
|
||||||
|
- Fixe incorrect `count()` résultat `SummingMergeTree` lorsque `FINAL` la section est utilisée. [\#3280](https://github.com/ClickHouse/ClickHouse/issues/3280) [\#7786](https://github.com/ClickHouse/ClickHouse/pull/7786) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))
|
||||||
|
- Correction d'un résultat incorrect possible pour les fonctions constantes à partir de serveurs distants. C'est arrivé pour les requêtes avec des fonctions comme `version()`, `uptime()`, etc. qui renvoie différentes valeurs constantes pour différents serveurs. Cela corrige [\#7666](https://github.com/ClickHouse/ClickHouse/issues/7666). [\#7689](https://github.com/ClickHouse/ClickHouse/pull/7689) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Correction d'un bug compliqué dans l'optimisation des prédicats push-down qui conduit à de mauvais résultats. Cela résout beaucoup de problèmes sur l'optimisation des prédicats push-down. [\#8503](https://github.com/ClickHouse/ClickHouse/pull/8503) ([L'Hiver Zhang](https://github.com/zhang2014))
|
||||||
|
- Correction d'un crash dans l' `CREATE TABLE .. AS dictionary` requête. [\#8508](https://github.com/ClickHouse/ClickHouse/pull/8508) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
- Plusieurs améliorations grammaire ClickHouse dans `.g4` fichier. [\#8294](https://github.com/ClickHouse/ClickHouse/pull/8294) ([taiyang-li](https://github.com/taiyang-li))
|
||||||
|
- Correction d'un bug qui conduit à des plantages dans `JOIN`s avec tables avec moteur `Join`. Cela corrige [\#7556](https://github.com/ClickHouse/ClickHouse/issues/7556) [\#8254](https://github.com/ClickHouse/ClickHouse/issues/8254) [\#7915](https://github.com/ClickHouse/ClickHouse/issues/7915) [\#8100](https://github.com/ClickHouse/ClickHouse/issues/8100). [\#8298](https://github.com/ClickHouse/ClickHouse/pull/8298) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Corriger les dictionnaires redondants recharger sur `CREATE DATABASE`. [\#7916](https://github.com/ClickHouse/ClickHouse/pull/7916) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
- Limiter le nombre maximum de flux pour lire à partir `StorageFile` et `StorageHDFS`. Corrections https://github.com/ClickHouse/ClickHouse/issues/7650. [\#7981](https://github.com/ClickHouse/ClickHouse/pull/7981) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Correction d'un bug dans `ALTER ... MODIFY ... CODEC` requête, lorsque l'utilisateur spécifie à la fois l'expression par défaut et le codec. Fixer [8593](https://github.com/ClickHouse/ClickHouse/issues/8593). [\#8614](https://github.com/ClickHouse/ClickHouse/pull/8614) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Correction d'une erreur dans la fusion en arrière-plan des colonnes avec `SimpleAggregateFunction(LowCardinality)` type. [\#8613](https://github.com/ClickHouse/ClickHouse/pull/8613) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Fonction d'enregistrement de type fixe `toDateTime64`. [\#8375](https://github.com/ClickHouse/ClickHouse/pull/8375) ([Vasily Nemkov](https://github.com/Enmk))
|
||||||
|
- Maintenant le serveur ne plante pas `LEFT` ou `FULL JOIN` avec et Rejoindre moteur et non pris en charge `join_use_nulls` paramètre. [\#8479](https://github.com/ClickHouse/ClickHouse/pull/8479) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Maintenant `DROP DICTIONARY IF EXISTS db.dict` la requête ne lance pas d'exception si `db` n'existe pas. [\#8185](https://github.com/ClickHouse/ClickHouse/pull/8185) ([Vitaly Baranov](https://github.com/vitlibar))
|
||||||
|
- Correction des plantages possibles dans les fonctions de la table (`file`, `mysql`, `remote`) causés par l'utilisation de la référence à enlever `IStorage` objet. Correction d'une analyse incorrecte des colonnes spécifiées lors de l'insertion dans la fonction de table. [\#7762](https://github.com/ClickHouse/ClickHouse/pull/7762) ([tavplubix](https://github.com/tavplubix))
|
||||||
|
- S'assurer du réseau avant de démarrer `clickhouse-server`. Cela corrige [\#7507](https://github.com/ClickHouse/ClickHouse/issues/7507). [\#8570](https://github.com/ClickHouse/ClickHouse/pull/8570) ([Zhichang Yu](https://github.com/yuzhichang))
|
||||||
|
- Correction de la gestion des délais d'attente pour les connexions sécurisées, de sorte que les requêtes ne se bloquent pas indéfiniment. Cela corrige [\#8126](https://github.com/ClickHouse/ClickHouse/issues/8126). [\#8128](https://github.com/ClickHouse/ClickHouse/pull/8128) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Fixer `clickhouse-copier`conflit redondant entre les travailleurs concurrents. [\#7816](https://github.com/ClickHouse/ClickHouse/pull/7816) ([Ding Xiang Fei](https://github.com/dingxiangfei2009))
|
||||||
|
- Maintenant, les mutations ne sautent pas les parties attachées, même si leur version de mutation était plus grande que la version de mutation actuelle. [\#7812](https://github.com/ClickHouse/ClickHouse/pull/7812) ([Zhichang Yu](https://github.com/yuzhichang)) [\#8250](https://github.com/ClickHouse/ClickHouse/pull/8250) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Ignorer les copies redondantes de `*MergeTree` les parties de données après le déplacement vers un autre disque et le redémarrage du serveur. [\#7810](https://github.com/ClickHouse/ClickHouse/pull/7810) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Correction d'un crash dans l' `FULL JOIN` avec `LowCardinality` dans `JOIN` clé. [\#8252](https://github.com/ClickHouse/ClickHouse/pull/8252) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Interdit d'utiliser le nom de colonne plus d'une fois dans insert query comme `INSERT INTO tbl (x, y, x)`. Cela corrige [\#5465](https://github.com/ClickHouse/ClickHouse/issues/5465), [\#7681](https://github.com/ClickHouse/ClickHouse/issues/7681). [\#7685](https://github.com/ClickHouse/ClickHouse/pull/7685) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Ajout de secours pour la détection du nombre de cœurs de processeur physiques pour les processeurs inconnus (en utilisant le nombre de cœurs de processeur logiques). Cela corrige [\#5239](https://github.com/ClickHouse/ClickHouse/issues/5239). [\#7726](https://github.com/ClickHouse/ClickHouse/pull/7726) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Fixer `There's no column` erreur pour les colonnes matérialisées et alias. [\#8210](https://github.com/ClickHouse/ClickHouse/pull/8210) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Correction d'un crash sever lorsque `EXISTS` la requête a été utilisé sans `TABLE` ou `DICTIONARY` qualificatif. Tout comme `EXISTS t`. Cela corrige [\#8172](https://github.com/ClickHouse/ClickHouse/issues/8172). Ce bug a été introduit dans la version 19.17. [\#8213](https://github.com/ClickHouse/ClickHouse/pull/8213) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Correction d'un bug rare avec erreur `"Sizes of columns doesn't match"` qui pourraient apparaître lors de l'utilisation `SimpleAggregateFunction` colonne. [\#7790](https://github.com/ClickHouse/ClickHouse/pull/7790) ([Boris Granveaud](https://github.com/bgranvea))
|
||||||
|
- Correction d'un bug où l'utilisateur avec vide `allow_databases` vous avez accès à toutes les bases de données (et même pour `allow_dictionaries`). [\#7793](https://github.com/ClickHouse/ClickHouse/pull/7793) ([DeifyTheGod](https://github.com/DeifyTheGod))
|
||||||
|
- Correction du crash du client lorsque le serveur est déjà déconnecté du client. [\#8071](https://github.com/ClickHouse/ClickHouse/pull/8071) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
- Fixer `ORDER BY` comportement en cas de tri par préfixe de clé primaire et Suffixe de clé non primaire. [\#7759](https://github.com/ClickHouse/ClickHouse/pull/7759) ([Anton Popov](https://github.com/CurtizJ))
|
||||||
|
- Vérifiez si la colonne qualifiée est présente dans le tableau. Cela corrige [\#6836](https://github.com/ClickHouse/ClickHouse/issues/6836). [\#7758](https://github.com/ClickHouse/ClickHouse/pull/7758) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Correction du comportement avec `ALTER MOVE` exécuté immédiatement après la fin de la fusion se déplace superpart De spécifié. Fixer [\#8103](https://github.com/ClickHouse/ClickHouse/issues/8103). [\#8104](https://github.com/ClickHouse/ClickHouse/pull/8104) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Correction d'un crash possible du serveur lors de l'utilisation `UNION` avec un nombre différent de colonnes. Fixer [\#7279](https://github.com/ClickHouse/ClickHouse/issues/7279). [\#7929](https://github.com/ClickHouse/ClickHouse/pull/7929) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Fixer la taille de résultat pour la fonction substring `substr` avec une taille négative. [\#8589](https://github.com/ClickHouse/ClickHouse/pull/8589) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Maintenant le serveur n'exécute pas la mutation partielle dans `MergeTree` s'il n'y a pas assez de threads libres dans le pool d'arrière-plan. [\#8588](https://github.com/ClickHouse/ClickHouse/pull/8588) ([tavplubix](https://github.com/tavplubix))
|
||||||
|
- Correction d'une faute de frappe mineure sur le formatage `UNION ALL` AST. [\#7999](https://github.com/ClickHouse/ClickHouse/pull/7999) ([litao91](https://github.com/litao91))
|
||||||
|
- Correction des résultats incorrects du filtre bloom pour les nombres négatifs. Cela corrige [\#8317](https://github.com/ClickHouse/ClickHouse/issues/8317). [\#8566](https://github.com/ClickHouse/ClickHouse/pull/8566) ([L'Hiver Zhang](https://github.com/zhang2014))
|
||||||
|
- Dépassement de tampon potentiel fixe en décompression. Un utilisateur malveillant peut transmettre des données compressées fabriquées qui provoqueront une lecture après le tampon. Ce problème a été trouvé par Eldar Zaitov de l'équipe de sécurité de L'information Yandex. [\#8404](https://github.com/ClickHouse/ClickHouse/pull/8404) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Correction d'un résultat incorrect en raison du débordement d'entiers dans `arrayIntersect`. [\#7777](https://github.com/ClickHouse/ClickHouse/pull/7777) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Maintenant `OPTIMIZE TABLE` query n'attendra pas les répliques hors ligne pour effectuer l'opération. [\#8314](https://github.com/ClickHouse/ClickHouse/pull/8314) ([javi santana](https://github.com/javisantana))
|
||||||
|
- Fixe `ALTER TTL` analyseur pour `Replicated*MergeTree` table. [\#8318](https://github.com/ClickHouse/ClickHouse/pull/8318) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Correction de la communication entre le serveur et le client, afin que le serveur lise les informations des tables temporaires après l'échec de la requête. [\#8084](https://github.com/ClickHouse/ClickHouse/pull/8084) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
- Fixer `bitmapAnd` erreur de fonction lors de l'intersection d'un bitmap agrégé et d'un bitmap scalaire. [\#8082](https://github.com/ClickHouse/ClickHouse/pull/8082) ([Yue Huang](https://github.com/moon03432))
|
||||||
|
- Affiner la définition de `ZXid` selon le Guide du programmeur ZooKeeper qui corrige un bug dans `clickhouse-cluster-copier`. [\#8088](https://github.com/ClickHouse/ClickHouse/pull/8088) ([Ding Xiang Fei](https://github.com/dingxiangfei2009))
|
||||||
|
- `odbc` fonction de table respecte maintenant `external_table_functions_use_nulls` paramètre. [\#7506](https://github.com/ClickHouse/ClickHouse/pull/7506) ([Vasily Nemkov](https://github.com/Enmk))
|
||||||
|
- Correction d'un bug qui conduisait à une course de données rare. [\#8143](https://github.com/ClickHouse/ClickHouse/pull/8143) ([Alexander Kazakov](https://github.com/Akazz))
|
||||||
|
- Maintenant `SYSTEM RELOAD DICTIONARY` recharge complètement un dictionnaire, en ignorant `update_field`. Cela corrige [\#7440](https://github.com/ClickHouse/ClickHouse/issues/7440). [\#8037](https://github.com/ClickHouse/ClickHouse/pull/8037) ([Vitaly Baranov](https://github.com/vitlibar))
|
||||||
|
- Ajouter la possibilité de vérifier si le dictionnaire existe dans create query. [\#8032](https://github.com/ClickHouse/ClickHouse/pull/8032) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Fixer `Float*` l'analyse en `Values` format. Cela corrige [\#7817](https://github.com/ClickHouse/ClickHouse/issues/7817). [\#7870](https://github.com/ClickHouse/ClickHouse/pull/7870) ([tavplubix](https://github.com/tavplubix))
|
||||||
|
- Correction d'un crash lorsque nous ne pouvons pas réserver d'espace dans certaines opérations en arrière-plan de `*MergeTree` famille de moteurs de table. [\#7873](https://github.com/ClickHouse/ClickHouse/pull/7873) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Correction du crash de l'opération de fusion lorsque la table contient `SimpleAggregateFunction(LowCardinality)` colonne. Cela corrige [\#8515](https://github.com/ClickHouse/ClickHouse/issues/8515). [\#8522](https://github.com/ClickHouse/ClickHouse/pull/8522) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
- Restaurez la prise en charge de toutes les locales ICU et ajoutez la possibilité d'appliquer des collations pour les expressions constantes. Ajoutez également le nom de la langue à `system.collations` table. [\#8051](https://github.com/ClickHouse/ClickHouse/pull/8051) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Correction d'un bug lorsque les dictionnaires externes avec zéro durée de vie minimale (`LIFETIME(MIN 0 MAX N)`, `LIFETIME(N)`) ne pas mettre à jour en arrière-plan. [\#7983](https://github.com/ClickHouse/ClickHouse/pull/7983) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Correction d'un crash lorsque le dictionnaire externe avec la source de ClickHouse a une sous-requête dans la requête. [\#8351](https://github.com/ClickHouse/ClickHouse/pull/8351) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Correction d'une analyse incorrecte de l'extension de fichier dans la table avec le moteur `URL`. Cela corrige [\#8157](https://github.com/ClickHouse/ClickHouse/issues/8157). [\#8419](https://github.com/ClickHouse/ClickHouse/pull/8419) ([Andrey Bodrov](https://github.com/apbodrov))
|
||||||
|
- Fixer `CHECK TABLE` requête pour `*MergeTree` les tables sans clé. Fixer [\#7543](https://github.com/ClickHouse/ClickHouse/issues/7543). [\#7979](https://github.com/ClickHouse/ClickHouse/pull/7979) ([alésapine](https://github.com/alesapin))
|
||||||
|
- De conversion fixe de `Float64` au type MySQL. [\#8079](https://github.com/ClickHouse/ClickHouse/pull/8079) ([Yuriy Baranov](https://github.com/yurriy))
|
||||||
|
- Maintenant, si la table n'a pas été complètement abandonnée en raison d'un plantage du serveur, le serveur va essayer de la restaurer et de la charger. [\#8176](https://github.com/ClickHouse/ClickHouse/pull/8176) ([tavplubix](https://github.com/tavplubix))
|
||||||
|
- Correction d'un crash dans la fonction de table `file` lors de l'insertion dans le fichier qui n'existe pas. Maintenant, dans ce cas, le fichier sera créé et insérez seraient traités. [\#8177](https://github.com/ClickHouse/ClickHouse/pull/8177) ([Olga Khvostikova](https://github.com/stavrolia))
|
||||||
|
- Correction de l'impasse rare qui peut arriver quand `trace_log` est activé. [\#7838](https://github.com/ClickHouse/ClickHouse/pull/7838) ([filimonov](https://github.com/filimonov))
|
||||||
|
- Ajouter la possibilité de travailler avec différents types en outre `Date` dans `RangeHashed` dictionnaire externe créé à partir de la requête DDL. Fixer [7899](https://github.com/ClickHouse/ClickHouse/issues/7899). [\#8275](https://github.com/ClickHouse/ClickHouse/pull/8275) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Correction d'un crash lorsque `now64()` est appelé avec un résultat d'une autre fonction. [\#8270](https://github.com/ClickHouse/ClickHouse/pull/8270) ([Vasily Nemkov](https://github.com/Enmk))
|
||||||
|
- Correction d'un bug avec la détection de l'adresse IP du client pour les connexions via le protocole de fil mysql. [\#7743](https://github.com/ClickHouse/ClickHouse/pull/7743) ([Dmitry Muzyka](https://github.com/dmitriy-myz))
|
||||||
|
- Correction de la gestion du tableau vide dans `arraySplit` fonction. Cela corrige [\#7708](https://github.com/ClickHouse/ClickHouse/issues/7708). [\#7747](https://github.com/ClickHouse/ClickHouse/pull/7747) ([hcz](https://github.com/hczhcz))
|
||||||
|
- Correction du problème lorsque `pid-file` d'un autre cours d'exécution `clickhouse-server` peut être supprimée. [\#8487](https://github.com/ClickHouse/ClickHouse/pull/8487) ([Weiqing Xu](https://github.com/weiqxu))
|
||||||
|
- Correction du rechargement du dictionnaire s'il a `invalidate_query`, qui a arrêté les mises à jour et une exception sur les tentatives de mise à jour précédentes. [\#8029](https://github.com/ClickHouse/ClickHouse/pull/8029) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Correction d'une erreur dans la fonction `arrayReduce` qui peut conduire à “double free” et erreur dans le combinateur de fonction d'agrégat `Resample` que peut provoquer la fuite de mémoire. Fonction agrégée ajoutée `aggThrow`. Cette fonction peut être utilisée à des fins de test. [\#8446](https://github.com/ClickHouse/ClickHouse/pull/8446) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
|
||||||
|
#### Amélioration {#improvement-1}
|
||||||
|
|
||||||
|
- Amélioration de la journalisation lorsque vous travaillez avec `S3` tableau moteur. [\#8251](https://github.com/ClickHouse/ClickHouse/pull/8251) ([Grigory Pervakov](https://github.com/GrigoryPervakov))
|
||||||
|
- Imprimé message d'aide quand aucun argument n'est passé lors de l'appel `clickhouse-local`. Cela corrige [\#5335](https://github.com/ClickHouse/ClickHouse/issues/5335). [\#8230](https://github.com/ClickHouse/ClickHouse/pull/8230) ([Andrey Nagorny](https://github.com/Melancholic))
|
||||||
|
- Ajouter un paramètre `mutations_sync` ce qui permet d'attendre `ALTER UPDATE/DELETE` les requêtes de manière synchrone. [\#8237](https://github.com/ClickHouse/ClickHouse/pull/8237) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Autoriser à configurer relative `user_files_path` dans `config.xml` (de la manière similaire à `format_schema_path`). [\#7632](https://github.com/ClickHouse/ClickHouse/pull/7632) ([hcz](https://github.com/hczhcz))
|
||||||
|
- Ajouter une exception pour les types illégaux pour les fonctions de conversion avec `-OrZero` postfix. [\#7880](https://github.com/ClickHouse/ClickHouse/pull/7880) ([Andrey Konyaev](https://github.com/akonyaev90))
|
||||||
|
- Simplifier le format de l'en-tête de l'envoi des données à un serveur dans une requête distribuée. [\#8044](https://github.com/ClickHouse/ClickHouse/pull/8044) ([Vitaly Baranov](https://github.com/vitlibar))
|
||||||
|
- `Live View` refactoring du moteur de table. [\#8519](https://github.com/ClickHouse/ClickHouse/pull/8519) ([vzakaznikov](https://github.com/vzakaznikov))
|
||||||
|
- Ajoutez des vérifications supplémentaires pour les dictionnaires externes créés à partir de requêtes DDL. [\#8127](https://github.com/ClickHouse/ClickHouse/pull/8127) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Correction d'erreur `Column ... already exists` lors de l'utilisation `FINAL` et `SAMPLE` together, e.g. `select count() from table final sample 1/2`. Fixer [\#5186](https://github.com/ClickHouse/ClickHouse/issues/5186). [\#7907](https://github.com/ClickHouse/ClickHouse/pull/7907) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Table maintenant le premier argument de `joinGet` la fonction peut être tableau identifiant. [\#7707](https://github.com/ClickHouse/ClickHouse/pull/7707) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- Autoriser l'utilisation des `MaterializedView` avec les sous-requêtes ci-dessus `Kafka` table. [\#8197](https://github.com/ClickHouse/ClickHouse/pull/8197) ([filimonov](https://github.com/filimonov))
|
||||||
|
- Maintenant, l'arrière-plan se déplace entre les disques, exécutez le pool de threads seprate. [\#7670](https://github.com/ClickHouse/ClickHouse/pull/7670) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- `SYSTEM RELOAD DICTIONARY` s'exécute maintenant de manière synchrone. [\#8240](https://github.com/ClickHouse/ClickHouse/pull/8240) ([Vitaly Baranov](https://github.com/vitlibar))
|
||||||
|
- Les traces de pile affichent désormais des adresses physiques (décalages dans le fichier objet) au lieu des adresses de mémoire virtuelle (où le fichier objet a été chargé). Qui permet l'utilisation de `addr2line` lorsque binaire est indépendant de la position et ASLR est actif. Cela corrige [\#8360](https://github.com/ClickHouse/ClickHouse/issues/8360). [\#8387](https://github.com/ClickHouse/ClickHouse/pull/8387) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Appuyer une nouvelle syntaxe pour la sécurité de niveau ligne filtres: `<table name='table_name'>…</table>`. Fixer [\#5779](https://github.com/ClickHouse/ClickHouse/issues/5779). [\#8381](https://github.com/ClickHouse/ClickHouse/pull/8381) ([Ivan](https://github.com/abyss7))
|
||||||
|
- Maintenant `cityHash` fonction peut travailler avec `Decimal` et `UUID` type. Fixer [\#5184](https://github.com/ClickHouse/ClickHouse/issues/5184). [\#7693](https://github.com/ClickHouse/ClickHouse/pull/7693) ([Mikhail Korotov](https://github.com/millb))
|
||||||
|
- Suppression de la granularité à index fixe (c'était 1024) des journaux système car elle est obsolète après l'implémentation de la granularité adaptative. [\#7698](https://github.com/ClickHouse/ClickHouse/pull/7698) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Serveur de compatibilité MySQL activé lorsque ClickHouse est compilé sans SSL. [\#7852](https://github.com/ClickHouse/ClickHouse/pull/7852) ([Yuriy Baranov](https://github.com/yurriy))
|
||||||
|
- Maintenant, les sommes de contrôle du serveur ont distribué des lots, ce qui donne des erreurs plus verbeuses en cas de données corrompues dans le lot. [\#7914](https://github.com/ClickHouse/ClickHouse/pull/7914) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
- Soutien `DROP DATABASE`, `DETACH TABLE`, `DROP TABLE` et `ATTACH TABLE` pour `MySQL` moteur de base de données. [\#8202](https://github.com/ClickHouse/ClickHouse/pull/8202) ([L'Hiver Zhang](https://github.com/zhang2014))
|
||||||
|
- Ajouter l'authentification dans la fonction de table S3 et le moteur de table. [\#7623](https://github.com/ClickHouse/ClickHouse/pull/7623) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Ajout de vérifier les pièces supplémentaires de `MergeTree` sur différents disques, afin de ne pas permettre de manquer des parties de données sur des disques indéfinis. [\#8118](https://github.com/ClickHouse/ClickHouse/pull/8118) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Activez la prise en charge SSL pour le client et le serveur Mac. [\#8297](https://github.com/ClickHouse/ClickHouse/pull/8297) ([Ivan](https://github.com/abyss7))
|
||||||
|
- Maintenant, ClickHouse peut fonctionner en tant que serveur fédéré MySQL (voir https://dev.mysql.com/doc/refman/5.7/en/federated-create-server.html). [\#7717](https://github.com/ClickHouse/ClickHouse/pull/7717) ([Maxim Fedotov](https://github.com/MaxFedotov))
|
||||||
|
- `clickhouse-client` maintenant seulement activer `bracketed-paste` lorsque multiquery est activé et multiline est désactivé. Cette correction (\#7757)\[https://github.com/ClickHouse/ClickHouse/issues/7757\]. [\#7761](https://github.com/ClickHouse/ClickHouse/pull/7761) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- Soutien `Array(Decimal)` dans `if` fonction. [\#7721](https://github.com/ClickHouse/ClickHouse/pull/7721) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Soutien Décimales `arrayDifference`, `arrayCumSum` et `arrayCumSumNegative` fonction. [\#7724](https://github.com/ClickHouse/ClickHouse/pull/7724) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Ajouter `lifetime` colonne de `system.dictionaries` table. [\#6820](https://github.com/ClickHouse/ClickHouse/issues/6820) [\#7727](https://github.com/ClickHouse/ClickHouse/pull/7727) ([kekekekule](https://github.com/kekekekule))
|
||||||
|
- Vérification améliorée des pièces existantes sur différents disques pour `*MergeTree` table des moteurs. Adresse [\#7660](https://github.com/ClickHouse/ClickHouse/issues/7660). [\#8440](https://github.com/ClickHouse/ClickHouse/pull/8440) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- L'intégration avec `AWS SDK` pour `S3` interactions qui permet d'utiliser toutes les fonctionnalités S3 hors de la boîte. [\#8011](https://github.com/ClickHouse/ClickHouse/pull/8011) ([Pavel Kovalenko](https://github.com/Jokser))
|
||||||
|
- Ajout du support pour les sous-requêtes dans `Live View` table. [\#7792](https://github.com/ClickHouse/ClickHouse/pull/7792) ([vzakaznikov](https://github.com/vzakaznikov))
|
||||||
|
- Vérifier à l'aide de `Date` ou `DateTime` colonne de `TTL` des expressions a été supprimé. [\#7920](https://github.com/ClickHouse/ClickHouse/pull/7920) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Informations sur le disque ajouté `system.detached_parts` table. [\#7833](https://github.com/ClickHouse/ClickHouse/pull/7833) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Maintenant paramètres `max_(table|partition)_size_to_drop` peut être modifié sans redémarrage de l'ordinateur. [\#7779](https://github.com/ClickHouse/ClickHouse/pull/7779) ([Grigory Pervakov](https://github.com/GrigoryPervakov))
|
||||||
|
- Facilité d'utilisation légèrement meilleure des messages d'erreur. Demander à l'utilisateur de ne pas supprimer les lignes ci-dessous `Stack trace:`. [\#7897](https://github.com/ClickHouse/ClickHouse/pull/7897) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Mieux lire les messages de `Kafka` moteur dans différents formats après [\#7935](https://github.com/ClickHouse/ClickHouse/issues/7935). [\#8035](https://github.com/ClickHouse/ClickHouse/pull/8035) ([Ivan](https://github.com/abyss7))
|
||||||
|
- Meilleure compatibilité avec les clients MySQL qui ne prennent pas en charge `sha2_password` greffon auth. [\#8036](https://github.com/ClickHouse/ClickHouse/pull/8036) ([Yuriy Baranov](https://github.com/yurriy))
|
||||||
|
- Supporte plus de types de colonnes dans le serveur de compatibilité MySQL. [\#7975](https://github.com/ClickHouse/ClickHouse/pull/7975) ([Yuriy Baranov](https://github.com/yurriy))
|
||||||
|
- Mettre `ORDER BY` optimisation pour les `Merge`, `Buffer` et `Materilized View` stockages avec sous-jacent `MergeTree` table. [\#8130](https://github.com/ClickHouse/ClickHouse/pull/8130) ([Anton Popov](https://github.com/CurtizJ))
|
||||||
|
- Maintenant, nous utilisons toujours L'implémentation POSIX de `getrandom` pour avoir une meilleure compatibilité avec les anciens noyaux (\< 3.17). [\#7940](https://github.com/ClickHouse/ClickHouse/pull/7940) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- Mieux vaut vérifier la destination valide dans une règle de déplacement TTL. [\#8410](https://github.com/ClickHouse/ClickHouse/pull/8410) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Mieux vérifie cassé insérer des lots pour `Distributed` tableau moteur. [\#7933](https://github.com/ClickHouse/ClickHouse/pull/7933) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
- Ajouter une colonne avec un tableau de nom de pièces que les mutations doivent traiter à l'avenir `system.mutations` table. [\#8179](https://github.com/ClickHouse/ClickHouse/pull/8179) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Optimisation de tri de fusion parallèle pour les processeurs. [\#8552](https://github.com/ClickHouse/ClickHouse/pull/8552) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Paramètre `mark_cache_min_lifetime` est maintenant obsolète et ne fait rien. Dans les versions précédentes, mark cache peut croître en mémoire supérieure à `mark_cache_size` pour accommoder les données dans `mark_cache_min_lifetime` deuxième. Cela conduisait à la confusion et à une utilisation de la mémoire plus élevée que prévu, ce qui est particulièrement mauvais sur les systèmes à contraintes de mémoire. Si vous constatez une dégradation des performances après l'installation de cette version, vous devez `mark_cache_size`. [\#8484](https://github.com/ClickHouse/ClickHouse/pull/8484) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Préparation à utiliser `tid` partout. Cela est nécessaire pour [\#7477](https://github.com/ClickHouse/ClickHouse/issues/7477). [\#8276](https://github.com/ClickHouse/ClickHouse/pull/8276) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
|
||||||
|
#### Amélioration Des Performances {#performance-improvement-1}
|
||||||
|
|
||||||
|
- Optimisations des performances dans le pipeline de processeurs. [\#7988](https://github.com/ClickHouse/ClickHouse/pull/7988) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Mises à jour non bloquantes des clés expirées dans les dictionnaires de cache (avec autorisation de lire les anciennes). [\#8303](https://github.com/ClickHouse/ClickHouse/pull/8303) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))
|
||||||
|
- Compiler ClickHouse sans `-fno-omit-frame-pointer` globalement pour épargner un registre de plus. [\#8097](https://github.com/ClickHouse/ClickHouse/pull/8097) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- SpeedUp `greatCircleDistance` fonction et ajouter des tests de performance pour elle. [\#7307](https://github.com/ClickHouse/ClickHouse/pull/7307) ([Olga Khvostikova](https://github.com/stavrolia))
|
||||||
|
- Amélioration des performances de la fonction `roundDown`. [\#8465](https://github.com/ClickHouse/ClickHouse/pull/8465) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Amélioration des performances de `max`, `min`, `argMin`, `argMax` pour `DateTime64` type de données. [\#8199](https://github.com/ClickHouse/ClickHouse/pull/8199) ([Vasily Nemkov](https://github.com/Enmk))
|
||||||
|
- Amélioration des performances de tri sans limite ou avec une grande limite et le tri externe. [\#8545](https://github.com/ClickHouse/ClickHouse/pull/8545) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Amélioration des performances du formatage des nombres à virgule flottante jusqu'à 6 fois. [\#8542](https://github.com/ClickHouse/ClickHouse/pull/8542) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Amélioration des performances de `modulo` fonction. [\#7750](https://github.com/ClickHouse/ClickHouse/pull/7750) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- Optimisé `ORDER BY` et la fusion avec une seule clé de colonne. [\#8335](https://github.com/ClickHouse/ClickHouse/pull/8335) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Meilleure mise en œuvre pour `arrayReduce`, `-Array` et `-State` combinators. [\#7710](https://github.com/ClickHouse/ClickHouse/pull/7710) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- Maintenant `PREWHERE` doit être optimisé pour être au moins aussi efficace que l' `WHERE`. [\#7769](https://github.com/ClickHouse/ClickHouse/pull/7769) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- Améliorer la façon dont `round` et `roundBankers` manipulation des nombres négatifs. [\#8229](https://github.com/ClickHouse/ClickHouse/pull/8229) ([hcz](https://github.com/hczhcz))
|
||||||
|
- Amélioration des performances de décodage `DoubleDelta` et `Gorilla` les codecs par environ de 30 à 40%. Cela corrige [\#7082](https://github.com/ClickHouse/ClickHouse/issues/7082). [\#8019](https://github.com/ClickHouse/ClickHouse/pull/8019) ([Vasily Nemkov](https://github.com/Enmk))
|
||||||
|
- Amélioration des performances de `base64` les fonctions connexes. [\#8444](https://github.com/ClickHouse/ClickHouse/pull/8444) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Ajout d'une fonction `geoDistance`. Il est similaire à `greatCircleDistance` mais utilise l'approximation au modèle ellipsoïde WGS-84. Les performances des deux fonctions sont presque les mêmes. [\#8086](https://github.com/ClickHouse/ClickHouse/pull/8086) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Plus rapide `min` et `max` fonctions d'agrégation pour les `Decimal` type de données. [\#8144](https://github.com/ClickHouse/ClickHouse/pull/8144) ([Artem Zuikov](https://github.com/4ertus2))
|
||||||
|
- Vectoriser le traitement `arrayReduce`. [\#7608](https://github.com/ClickHouse/ClickHouse/pull/7608) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- `if` les chaînes sont maintenant optimisés `multiIf`. [\#8355](https://github.com/ClickHouse/ClickHouse/pull/8355) ([kamalov-ruslan](https://github.com/kamalov-ruslan))
|
||||||
|
- Correction de la régression des performances de `Kafka` moteur de table introduit en 19.15. Cela corrige [\#7261](https://github.com/ClickHouse/ClickHouse/issues/7261). [\#7935](https://github.com/ClickHouse/ClickHouse/pull/7935) ([filimonov](https://github.com/filimonov))
|
||||||
|
- Retiré “pie” génération de code qui `gcc` de paquets Debian apporte parfois par défaut. [\#8483](https://github.com/ClickHouse/ClickHouse/pull/8483) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Formats de données d'analyse parallèle [\#6553](https://github.com/ClickHouse/ClickHouse/pull/6553) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))
|
||||||
|
- Activer l'analyseur optimisé de `Values` avec des expressions par défaut (`input_format_values_deduce_templates_of_expressions=1`). [\#8231](https://github.com/ClickHouse/ClickHouse/pull/8231) ([tavplubix](https://github.com/tavplubix))
|
||||||
|
|
||||||
|
#### Construction / Test / Amélioration De L'Emballage {#buildtestingpackaging-improvement-2}
|
||||||
|
|
||||||
|
- Construire des correctifs pour `ARM` et en un minimum de mode. [\#8304](https://github.com/ClickHouse/ClickHouse/pull/8304) ([proller](https://github.com/proller))
|
||||||
|
- Ajouter le fichier de couverture flush pour `clickhouse-server` lorsque std::atexit n'est pas appelé. Également légèrement amélioré la journalisation dans les tests sans état avec la couverture. [\#8267](https://github.com/ClickHouse/ClickHouse/pull/8267) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Mettre à jour la bibliothèque LLVM dans contrib. Évitez D'utiliser LLVM à partir de paquets OS. [\#8258](https://github.com/ClickHouse/ClickHouse/pull/8258) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Faire empaqueté `curl` construire entièrement calme. [\#8232](https://github.com/ClickHouse/ClickHouse/pull/8232) [\#8203](https://github.com/ClickHouse/ClickHouse/pull/8203) ([Pavel Kovalenko](https://github.com/Jokser))
|
||||||
|
- Correction de quelques `MemorySanitizer` avertissement. [\#8235](https://github.com/ClickHouse/ClickHouse/pull/8235) ([Alexander Kuzmenkov](https://github.com/akuzm))
|
||||||
|
- Utiliser `add_warning` et `no_warning` les macros dans `CMakeLists.txt`. [\#8604](https://github.com/ClickHouse/ClickHouse/pull/8604) ([Ivan](https://github.com/abyss7))
|
||||||
|
- Ajout du support de l'objet compatible Minio S3 (https://min.io/) pour de meilleurs tests d'intégration. [\#7863](https://github.com/ClickHouse/ClickHouse/pull/7863) [\#7875](https://github.com/ClickHouse/ClickHouse/pull/7875) ([Pavel Kovalenko](https://github.com/Jokser))
|
||||||
|
- Importer `libc` en-têtes à contrib. Il permet de rendre les builds plus cohérents sur différents systèmes (uniquement pour `x86_64-linux-gnu`). [\#5773](https://github.com/ClickHouse/ClickHouse/pull/5773) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Supprimer `-fPIC` à partir de certaines bibliothèques. [\#8464](https://github.com/ClickHouse/ClickHouse/pull/8464) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Propre `CMakeLists.txt` pour le roulage. Tu vois https://github.com/ClickHouse/ClickHouse/pull/8011\#issuecomment-569478910 [\#8459](https://github.com/ClickHouse/ClickHouse/pull/8459) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Avertissements silencieux dans `CapNProto` bibliothèque. [\#8220](https://github.com/ClickHouse/ClickHouse/pull/8220) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Ajouter des tests de performance pour les tables de hachage optimisées par chaîne courte. [\#7679](https://github.com/ClickHouse/ClickHouse/pull/7679) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- Maintenant ClickHouse va construire sur `AArch64` même si `MADV_FREE` n'est pas disponible. Cela corrige [\#8027](https://github.com/ClickHouse/ClickHouse/issues/8027). [\#8243](https://github.com/ClickHouse/ClickHouse/pull/8243) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- Mettre `zlib-ng` pour résoudre les problèmes de désinfectant de mémoire. [\#7182](https://github.com/ClickHouse/ClickHouse/pull/7182) [\#8206](https://github.com/ClickHouse/ClickHouse/pull/8206) ([Alexander Kuzmenkov](https://github.com/akuzm))
|
||||||
|
- Activez la bibliothèque MySQL interne sur un système non Linux, car l'utilisation des paquets du système D'exploitation est très fragile et ne fonctionne généralement pas du tout. Cela corrige [\#5765](https://github.com/ClickHouse/ClickHouse/issues/5765). [\#8426](https://github.com/ClickHouse/ClickHouse/pull/8426) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Correction de la construction sur certains systèmes après activation `libc++`. Cela annule et remplace [\#8374](https://github.com/ClickHouse/ClickHouse/issues/8374). [\#8380](https://github.com/ClickHouse/ClickHouse/pull/8380) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Faire `Field` méthodes plus de type-sûr pour trouver plus d'erreurs. [\#7386](https://github.com/ClickHouse/ClickHouse/pull/7386) [\#8209](https://github.com/ClickHouse/ClickHouse/pull/8209) ([Alexander Kuzmenkov](https://github.com/akuzm))
|
||||||
|
- Ajout de fichiers manquants à la `libc-headers` sous-module. [\#8507](https://github.com/ClickHouse/ClickHouse/pull/8507) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Corrigé de mal `JSON` citation dans la sortie de test de performance. [\#8497](https://github.com/ClickHouse/ClickHouse/pull/8497) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Maintenant, la trace de pile est affichée pour `std::exception` et `Poco::Exception`. Dans les versions précédentes, il était disponible uniquement pour `DB::Exception`. Cela améliore le diagnostic. [\#8501](https://github.com/ClickHouse/ClickHouse/pull/8501) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Le portage `clock_gettime` et `clock_nanosleep` pour les nouvelles versions glibc. [\#8054](https://github.com/ClickHouse/ClickHouse/pull/8054) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- Permettre `part_log` dans l'exemple config pour les développeurs. [\#8609](https://github.com/ClickHouse/ClickHouse/pull/8609) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Correction de la nature asynchrone du rechargement dans `01036_no_superfluous_dict_reload_on_create_database*`. [\#8111](https://github.com/ClickHouse/ClickHouse/pull/8111) ([Azat Khuzhin](https://github.com/azat))
|
||||||
|
- Tests de performance codec fixe. [\#8615](https://github.com/ClickHouse/ClickHouse/pull/8615) ([Vasily Nemkov](https://github.com/Enmk))
|
||||||
|
- Ajouter des scripts d'installation pour `.tgz` construire et documentation pour eux. [\#8612](https://github.com/ClickHouse/ClickHouse/pull/8612) [\#8591](https://github.com/ClickHouse/ClickHouse/pull/8591) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Supprimé Vieux `ZSTD` test (il a été créé en 2016 pour reproduire le bug que la version pré 1.0 de ZSTD a eu). Cela corrige [\#8618](https://github.com/ClickHouse/ClickHouse/issues/8618). [\#8619](https://github.com/ClickHouse/ClickHouse/pull/8619) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Correction de la construction sur Mac OS Catalina. [\#8600](https://github.com/ClickHouse/ClickHouse/pull/8600) ([meo](https://github.com/meob))
|
||||||
|
- Augmentation du nombre de lignes dans les tests de performance du codec pour rendre les résultats visibles. [\#8574](https://github.com/ClickHouse/ClickHouse/pull/8574) ([Vasily Nemkov](https://github.com/Enmk))
|
||||||
|
- Dans les versions debug, traiter `LOGICAL_ERROR` exceptions comme Échecs d'assertion, de sorte qu'ils sont plus faciles à remarquer. [\#8475](https://github.com/ClickHouse/ClickHouse/pull/8475) ([Alexander Kuzmenkov](https://github.com/akuzm))
|
||||||
|
- Rendre le test de performance lié aux formats plus déterministe. [\#8477](https://github.com/ClickHouse/ClickHouse/pull/8477) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Mettre `lz4` pour corriger un échec MemorySanitizer. [\#8181](https://github.com/ClickHouse/ClickHouse/pull/8181) ([Alexander Kuzmenkov](https://github.com/akuzm))
|
||||||
|
- Supprimer un faux positif MemorySanitizer connu dans la gestion des exceptions. [\#8182](https://github.com/ClickHouse/ClickHouse/pull/8182) ([Alexander Kuzmenkov](https://github.com/akuzm))
|
||||||
|
- Mettre `gcc` et `g++` à la version 9 dans `build/docker/build.sh` [\#7766](https://github.com/ClickHouse/ClickHouse/pull/7766) ([TLightSky](https://github.com/tlightsky))
|
||||||
|
- Ajoutez un cas de test de performance pour tester cela `PREWHERE` est pire que `WHERE`. [\#7768](https://github.com/ClickHouse/ClickHouse/pull/7768) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- Progrès vers la fixation d'un test flacky. [\#8621](https://github.com/ClickHouse/ClickHouse/pull/8621) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Évitez le rapport MemorySanitizer pour les données de `libunwind`. [\#8539](https://github.com/ClickHouse/ClickHouse/pull/8539) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Mettre `libc++` la dernière version. [\#8324](https://github.com/ClickHouse/ClickHouse/pull/8324) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Construire la bibliothèque ICU à partir de sources. Cela corrige [\#6460](https://github.com/ClickHouse/ClickHouse/issues/6460). [\#8219](https://github.com/ClickHouse/ClickHouse/pull/8219) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Commutation de `libressl` de `openssl`. ClickHouse devrait prendre en charge TLS 1.3 et SNI après ce changement. Cela corrige [\#8171](https://github.com/ClickHouse/ClickHouse/issues/8171). [\#8218](https://github.com/ClickHouse/ClickHouse/pull/8218) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Rapport UBSan fixe lors de l'utilisation `chacha20_poly1305` de SSL (se produit sur la connexion à https://yandex.ru/). [\#8214](https://github.com/ClickHouse/ClickHouse/pull/8214) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Correction du mode de fichier de mot de passe par défaut pour `.deb` des distributions linux. [\#8075](https://github.com/ClickHouse/ClickHouse/pull/8075) ([proller](https://github.com/proller))
|
||||||
|
- Expression améliorée pour obtenir `clickhouse-server` PID dans `clickhouse-test`. [\#8063](https://github.com/ClickHouse/ClickHouse/pull/8063) ([Alexander Kazakov](https://github.com/Akazz))
|
||||||
|
- Mise à jour contrib / googletest à v1. 10. 0. [\#8587](https://github.com/ClickHouse/ClickHouse/pull/8587) ([Alexander Burmak](https://github.com/Alex-Burmak))
|
||||||
|
- Rapport ThreadSaninitizer fixe dans `base64` bibliothèque. Aussi mis à jour cette bibliothèque à la dernière version, mais cela n'a pas d'importance. Cela corrige [\#8397](https://github.com/ClickHouse/ClickHouse/issues/8397). [\#8403](https://github.com/ClickHouse/ClickHouse/pull/8403) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Fixer `00600_replace_running_query` pour les transformateurs. [\#8272](https://github.com/ClickHouse/ClickHouse/pull/8272) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Supprimer le support pour `tcmalloc` faire `CMakeLists.txt` plus simple. [\#8310](https://github.com/ClickHouse/ClickHouse/pull/8310) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Libérer gcc construit maintenant utiliser `libc++` plutôt `libstdc++`. Récemment `libc++` a été utilisé uniquement avec clang. Cela améliorera la cohérence des configurations de construction et la portabilité. [\#8311](https://github.com/ClickHouse/ClickHouse/pull/8311) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Activer la bibliothèque ICU pour construire avec MemorySanitizer. [\#8222](https://github.com/ClickHouse/ClickHouse/pull/8222) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Supprimer les avertissements de `CapNProto` bibliothèque. [\#8224](https://github.com/ClickHouse/ClickHouse/pull/8224) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Suppression de cas spéciaux de code pour `tcmalloc` parce que c'est plus pris en charge. [\#8225](https://github.com/ClickHouse/ClickHouse/pull/8225) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Dans la tâche de couverture CI, tuez le serveur gracieusement pour lui permettre d'enregistrer le rapport de couverture. Cela corrige les rapports de couverture incomplets que nous avons vus récemment. [\#8142](https://github.com/ClickHouse/ClickHouse/pull/8142) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Tests de Performance pour tous les codecs contre `Float64` et `UInt64` valeur. [\#8349](https://github.com/ClickHouse/ClickHouse/pull/8349) ([Vasily Nemkov](https://github.com/Enmk))
|
||||||
|
- `termcap` est très obsolète et conduit à divers problèmes (F. G. manquant “up” cap et en écho `^J` au lieu de multi-ligne) . Faveur `terminfo` ou groupés `ncurses`. [\#7737](https://github.com/ClickHouse/ClickHouse/pull/7737) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- Fixer `test_storage_s3` test d'intégration. [\#7734](https://github.com/ClickHouse/ClickHouse/pull/7734) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Soutien `StorageFile(<format>, null)` pour insérer un bloc dans un fichier de format donné sans écrire sur le disque. Ceci est requis pour les tests de performance. [\#8455](https://github.com/ClickHouse/ClickHouse/pull/8455) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
- Argument supplémentaire en `--print-time` aux tests fonctionnels qui imprime le temps d'exécution par test. [\#8001](https://github.com/ClickHouse/ClickHouse/pull/8001) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Ajouté assertions à `KeyCondition` lors de L'évaluation RPN. Cela corrigera l'avertissement de gcc-9. [\#8279](https://github.com/ClickHouse/ClickHouse/pull/8279) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Vider les options cmake dans les builds CI. [\#8273](https://github.com/ClickHouse/ClickHouse/pull/8273) ([Alexander Kuzmenkov](https://github.com/akuzm))
|
||||||
|
- Ne générez pas d'informations de débogage pour certaines bibliothèques fat. [\#8271](https://github.com/ClickHouse/ClickHouse/pull/8271) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Faire `log_to_console.xml` connectez-vous toujours à stderr, que ce soit interactif ou non. [\#8395](https://github.com/ClickHouse/ClickHouse/pull/8395) ([Alexander Kuzmenkov](https://github.com/akuzm))
|
||||||
|
- Suppression de certaines fonctionnalités inutilisées de `clickhouse-performance-test` outil. [\#8555](https://github.com/ClickHouse/ClickHouse/pull/8555) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Maintenant, nous allons également rechercher `lld-X` avec correspondant `clang-X` version. [\#8092](https://github.com/ClickHouse/ClickHouse/pull/8092) ([alésapine](https://github.com/alesapin))
|
||||||
|
- Amélioration de construction de Parquet. [\#8421](https://github.com/ClickHouse/ClickHouse/pull/8421) ([maxulan](https://github.com/maxulan))
|
||||||
|
- Plus D'Avertissements GCC [\#8221](https://github.com/ClickHouse/ClickHouse/pull/8221) ([kreuzerkrieg](https://github.com/kreuzerkrieg))
|
||||||
|
- Package pour Arch Linux permet maintenant d'exécuter le serveur ClickHouse, et pas seulement le client. [\#8534](https://github.com/ClickHouse/ClickHouse/pull/8534) ([Vladimir Chebotarev](https://github.com/excitoon))
|
||||||
|
- Fixer le test avec les processeurs. Corrections de performances minuscules. [\#7672](https://github.com/ClickHouse/ClickHouse/pull/7672) ([Nikolai Kochetov](https://github.com/KochetovNicolai))
|
||||||
|
- Mise à jour contrib/protobuf. [\#8256](https://github.com/ClickHouse/ClickHouse/pull/8256) ([Matwey V. Kornilov](https://github.com/matwey))
|
||||||
|
- En préparation du passage à c++20 comme une célébration du Nouvel An. “May the C++ force be with ClickHouse.” [\#8447](https://github.com/ClickHouse/ClickHouse/pull/8447) ([Amos Oiseau](https://github.com/amosbird))
|
||||||
|
|
||||||
|
#### Caractéristique Expérimentale {#experimental-feature-1}
|
||||||
|
|
||||||
|
- Ajouté cadre expérimental `min_bytes_to_use_mmap_io`. Il permet de lire de gros fichiers sans copier les données du noyau vers l'espace utilisateur. Le paramètre est désactivé par défaut. Le seuil recommandé est d'environ 64 Mo, car mmap / munmap est lent. [\#8520](https://github.com/ClickHouse/ClickHouse/pull/8520) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
- Quotas retravaillés dans le cadre du système de contrôle d'accès. Ajouté nouveau tableau `system.quotas` de nouvelles fonctions `currentQuota`, `currentQuotaKey`, nouvelle syntaxe SQL `CREATE QUOTA`, `ALTER QUOTA`, `DROP QUOTA`, `SHOW QUOTA`. [\#7257](https://github.com/ClickHouse/ClickHouse/pull/7257) ([Vitaly Baranov](https://github.com/vitlibar))
|
||||||
|
- Autoriser à sauter des paramètres inconnus avec des avertissements au lieu de lancer des exceptions. [\#7653](https://github.com/ClickHouse/ClickHouse/pull/7653) ([Vitaly Baranov](https://github.com/vitlibar))
|
||||||
|
- Stratégies de ligne retravaillées dans le cadre du système de contrôle d'accès. Ajouté nouveau tableau `system.row_policies`, nouvelle fonction `currentRowPolicies()`, nouvelle syntaxe SQL `CREATE POLICY`, `ALTER POLICY`, `DROP POLICY`, `SHOW CREATE POLICY`, `SHOW POLICIES`. [\#7808](https://github.com/ClickHouse/ClickHouse/pull/7808) ([Vitaly Baranov](https://github.com/vitlibar))
|
||||||
|
|
||||||
|
#### Correction De Sécurité {#security-fix}
|
||||||
|
|
||||||
|
- Correction de la possibilité de lire la structure des répertoires dans les tables avec `File` tableau moteur. Cela corrige [\#8536](https://github.com/ClickHouse/ClickHouse/issues/8536). [\#8537](https://github.com/ClickHouse/ClickHouse/pull/8537) ([alexeï-milovidov](https://github.com/alexey-milovidov))
|
||||||
|
|
||||||
|
## [Changelog pour 2019](https://github.com/ClickHouse/ClickHouse/blob/master/docs/en/changelog/2019.md) {#changelog-for-2019}
|
20
docs/fr/commercial/cloud.md
Normal file
20
docs/fr/commercial/cloud.md
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Fournisseurs De Services Cloud ClickHouse {#clickhouse-cloud-service-providers}
|
||||||
|
|
||||||
|
!!! info "Info"
|
||||||
|
Si vous avez lancé un cloud public avec un service clickhouse géré, n'hésitez pas à [ouvrir une demande d'extraction](https://github.com/ClickHouse/ClickHouse/edit/master/docs/en/commercial/cloud.md) ajouter à la liste suivante.
|
||||||
|
|
||||||
|
## Yandex Cloud {#yandex-cloud}
|
||||||
|
|
||||||
|
[Service géré Yandex pour ClickHouse](https://cloud.yandex.com/services/managed-clickhouse?utm_source=referrals&utm_medium=clickhouseofficialsite&utm_campaign=link3) offre les fonctionnalités suivantes:
|
||||||
|
|
||||||
|
- Service ZooKeeper entièrement géré pour [Réplication de ClickHouse](../operations/table_engines/replication.md)
|
||||||
|
- Choix multiples de type de stockage
|
||||||
|
- Répliques dans différentes zones de disponibilité
|
||||||
|
- Le chiffrement et l'isolement
|
||||||
|
- Automatisation de la maintenance
|
||||||
|
|
||||||
|
{## [Article Original](https://clickhouse.tech/docs/en/commercial/cloud/) ##}
|
74
docs/fr/data_types/array.md
Normal file
74
docs/fr/data_types/array.md
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Array(T) {#data-type-array}
|
||||||
|
|
||||||
|
Un tableau de `T`les éléments de type. `T` peut être n'importe quel type de données, y compris un tableau.
|
||||||
|
|
||||||
|
## La création d'un tableau {#creating-an-array}
|
||||||
|
|
||||||
|
Vous pouvez utiliser une fonction pour créer un tableau:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
array(T)
|
||||||
|
```
|
||||||
|
|
||||||
|
Vous pouvez également utiliser des crochets.
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
[]
|
||||||
|
```
|
||||||
|
|
||||||
|
Exemple de création d'un tableau:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT array(1, 2) AS x, toTypeName(x)
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─x─────┬─toTypeName(array(1, 2))─┐
|
||||||
|
│ [1,2] │ Array(UInt8) │
|
||||||
|
└───────┴─────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT [1, 2] AS x, toTypeName(x)
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─x─────┬─toTypeName([1, 2])─┐
|
||||||
|
│ [1,2] │ Array(UInt8) │
|
||||||
|
└───────┴────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## Utilisation de Types de données {#working-with-data-types}
|
||||||
|
|
||||||
|
Lors de la création d'un tableau à la volée, ClickHouse définit automatiquement le type d'argument comme le type de données le plus étroit pouvant stocker tous les arguments listés. S'il y a des [Nullable](nullable.md#data_type-nullable) ou littéral [NULL](../query_language/syntax.md#null-literal) les valeurs, le type d'un élément de tableau devient également [Nullable](nullable.md).
|
||||||
|
|
||||||
|
Si ClickHouse n'a pas pu déterminer le type de données, il génère une exception. Par exemple, cela se produit lorsque vous essayez de créer un tableau avec des chaînes et des nombres simultanément (`SELECT array(1, 'a')`).
|
||||||
|
|
||||||
|
Exemples de détection automatique de type de données:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT array(1, 2, NULL) AS x, toTypeName(x)
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─x──────────┬─toTypeName(array(1, 2, NULL))─┐
|
||||||
|
│ [1,2,NULL] │ Array(Nullable(UInt8)) │
|
||||||
|
└────────────┴───────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Si vous essayez de créer un tableau de types de données incompatibles, ClickHouse lève une exception:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT array(1, 'a')
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
Received exception from server (version 1.1.54388):
|
||||||
|
Code: 386. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: There is no supertype for types UInt8, String because some of them are String/FixedString and some of them are not.
|
||||||
|
```
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/array/) <!--hide-->
|
9
docs/fr/data_types/boolean.md
Normal file
9
docs/fr/data_types/boolean.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Les Valeurs Booléennes {#boolean-values}
|
||||||
|
|
||||||
|
Il n'y a pas de type distinct pour les valeurs booléennes. Utilisez le type UInt8, limité aux valeurs 0 ou 1.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/boolean/) <!--hide-->
|
12
docs/fr/data_types/date.md
Normal file
12
docs/fr/data_types/date.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Date {#date}
|
||||||
|
|
||||||
|
Date. Stocké en deux octets comme le nombre de jours depuis 1970-01-01 (non signé). Permet de stocker des valeurs juste après le début de L'époque Unix jusqu'au seuil supérieur défini par une constante au stade de la compilation (actuellement, c'est jusqu'à l'année 2106, mais l'année finale entièrement prise en charge est 2105).
|
||||||
|
La valeur minimale est sortie comme 0000-00-00.
|
||||||
|
|
||||||
|
La valeur de date est stockée sans le fuseau horaire.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/date/) <!--hide-->
|
126
docs/fr/data_types/datetime.md
Normal file
126
docs/fr/data_types/datetime.md
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# DateTime {#data_type-datetime}
|
||||||
|
|
||||||
|
Permet de stocker un instant dans le temps, qui peut être exprimé comme une date de calendrier et une heure d'une journée.
|
||||||
|
|
||||||
|
Syntaxe:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
DateTime([timezone])
|
||||||
|
```
|
||||||
|
|
||||||
|
Plage de valeurs prise en charge: \[1970-01-01 00:00:00, 2105-12-31 23:59:59\].
|
||||||
|
|
||||||
|
Résolution: 1 seconde.
|
||||||
|
|
||||||
|
## Utilisation Remarques {#usage-remarks}
|
||||||
|
|
||||||
|
Le point dans le temps est enregistré en tant que [Le timestamp Unix](https://en.wikipedia.org/wiki/Unix_time), quel que soit le fuseau horaire ou l'heure d'été. En outre, l' `DateTime` type peut stocker le fuseau horaire qui est le même pour la colonne entière, qui affecte la façon dont les valeurs de la `DateTime` les valeurs de type sont affichées au format texte et comment les valeurs spécifiées en tant que chaînes sont analysées (‘2020-01-01 05:00:01’). Le fuseau horaire n'est pas stocké dans les lignes de la table (ou dans resultset), mais est stocké dans les métadonnées de la colonne.
|
||||||
|
Une liste des fuseaux horaires pris en charge peut être trouvée dans le [Base de données de fuseau horaire IANA](https://www.iana.org/time-zones).
|
||||||
|
Le `tzdata` paquet, contenant [Base de données de fuseau horaire IANA](https://www.iana.org/time-zones), doit être installé dans le système. L'utilisation de la `timedatectl list-timezones` commande pour lister les fuseaux horaires connus par un système local.
|
||||||
|
|
||||||
|
Vous pouvez définir explicitement un fuseau horaire `DateTime`- tapez des colonnes lors de la création d'une table. Si le fuseau horaire n'est pas défini, ClickHouse utilise la valeur [fuseau](../operations/server_settings/settings.md#server_settings-timezone) paramètre dans les paramètres du serveur ou les paramètres du système d'exploitation au moment du démarrage du serveur ClickHouse.
|
||||||
|
|
||||||
|
Le [clickhouse-client](../interfaces/cli.md) applique le fuseau horaire du serveur par défaut si un fuseau horaire n'est pas explicitement défini lors de l'initialisation du type de données. Pour utiliser le fuseau horaire du client, exécutez `clickhouse-client` avec l' `--use_client_time_zone` paramètre.
|
||||||
|
|
||||||
|
Clickhouse affiche les valeurs dans `YYYY-MM-DD hh:mm:ss` format de texte par défaut. Vous pouvez modifier la sortie avec le [formatDateTime](../query_language/functions/date_time_functions.md#formatdatetime) fonction.
|
||||||
|
|
||||||
|
Lorsque vous insérez des données dans ClickHouse, vous pouvez utiliser différents formats de chaînes de date et d'heure, en fonction de la valeur du [date\_time\_input\_format](../operations/settings/settings.md#settings-date_time_input_format) paramètre.
|
||||||
|
|
||||||
|
## Exemple {#examples}
|
||||||
|
|
||||||
|
**1.** Création d'une table avec un `DateTime`- tapez la colonne et insérez des données dedans:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE dt
|
||||||
|
(
|
||||||
|
`timestamp` DateTime('Europe/Moscow'),
|
||||||
|
`event_id` UInt8
|
||||||
|
)
|
||||||
|
ENGINE = TinyLog;
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
INSERT INTO dt Values (1546300800, 1), ('2019-01-01 00:00:00', 2);
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT * FROM dt;
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌───────────timestamp─┬─event_id─┐
|
||||||
|
│ 2019-01-01 03:00:00 │ 1 │
|
||||||
|
│ 2019-01-01 00:00:00 │ 2 │
|
||||||
|
└─────────────────────┴──────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
- Lors de l'insertion de datetime en tant qu'entier, il est traité comme un horodatage Unix (UTC). `1546300800` représenter `'2019-01-01 00:00:00'` L'UTC. Cependant, comme `timestamp` la colonne a `Europe/Moscow` (UTC+3) fuseau horaire spécifié, lors de la sortie en tant que chaîne, la valeur sera affichée comme `'2019-01-01 03:00:00'`
|
||||||
|
- Lors de l'insertion d'une valeur de chaîne en tant que datetime, elle est traitée comme étant dans le fuseau horaire de la colonne. `'2019-01-01 00:00:00'` sera considérée comme étant en `Europe/Moscow` fuseau horaire et enregistré sous `1546290000`.
|
||||||
|
|
||||||
|
**2.** Le filtrage sur `DateTime` valeur
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT * FROM dt WHERE timestamp = toDateTime('2019-01-01 00:00:00', 'Europe/Moscow')
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌───────────timestamp─┬─event_id─┐
|
||||||
|
│ 2019-01-01 00:00:00 │ 2 │
|
||||||
|
└─────────────────────┴──────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
`DateTime` les valeurs de colonne peuvent être filtrées à l'aide d'une `WHERE` prédicat. Elle sera convertie `DateTime` automatiquement:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT * FROM dt WHERE timestamp = '2019-01-01 00:00:00'
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌───────────timestamp─┬─event_id─┐
|
||||||
|
│ 2019-01-01 03:00:00 │ 1 │
|
||||||
|
└─────────────────────┴──────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
**3.** Obtenir un fuseau horaire pour un `DateTime`colonne de type:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT toDateTime(now(), 'Europe/Moscow') AS column, toTypeName(column) AS x
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌──────────────column─┬─x─────────────────────────┐
|
||||||
|
│ 2019-10-16 04:12:04 │ DateTime('Europe/Moscow') │
|
||||||
|
└─────────────────────┴───────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
**4.** Conversion de fuseau horaire
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT
|
||||||
|
toDateTime(timestamp, 'Europe/London') as lon_time,
|
||||||
|
toDateTime(timestamp, 'Europe/Moscow') as mos_time
|
||||||
|
FROM dt
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌───────────lon_time──┬────────────mos_time─┐
|
||||||
|
│ 2019-01-01 00:00:00 │ 2019-01-01 03:00:00 │
|
||||||
|
│ 2018-12-31 21:00:00 │ 2019-01-01 00:00:00 │
|
||||||
|
└─────────────────────┴─────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## Voir Aussi {#see-also}
|
||||||
|
|
||||||
|
- [Fonctions de conversion de Type](../query_language/functions/type_conversion_functions.md)
|
||||||
|
- [Fonctions pour travailler avec des dates et des heures](../query_language/functions/date_time_functions.md)
|
||||||
|
- [Fonctions pour travailler avec des tableaux](../query_language/functions/array_functions.md)
|
||||||
|
- [Le `date_time_input_format` paramètre](../operations/settings/settings.md#settings-date_time_input_format)
|
||||||
|
- [Le `timezone` paramètre de configuration du serveur](../operations/server_settings/settings.md#server_settings-timezone)
|
||||||
|
- [Opérateurs pour travailler avec des dates et des heures](../query_language/operators.md#operators-datetime)
|
||||||
|
- [Le `Date` type de données](date.md)
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/datetime/) <!--hide-->
|
101
docs/fr/data_types/datetime64.md
Normal file
101
docs/fr/data_types/datetime64.md
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# DateTime64 {#data_type-datetime64}
|
||||||
|
|
||||||
|
Permet de stocker un instant dans le temps, qui peut être exprimé comme une date de calendrier et une heure d'un jour, avec une précision de sous-seconde définie
|
||||||
|
|
||||||
|
Tick taille (précision): 10<sup>-précision</sup> deuxième
|
||||||
|
|
||||||
|
Syntaxe:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
DateTime64(precision, [timezone])
|
||||||
|
```
|
||||||
|
|
||||||
|
En interne, stocke les données comme un certain nombre de ‘ticks’ depuis le début de l'époque (1970-01-01 00: 00: 00 UTC) comme Int64. La résolution des tiques est déterminée par le paramètre de précision. En outre, l' `DateTime64` type peut stocker le fuseau horaire qui est le même pour la colonne entière, qui affecte la façon dont les valeurs de la `DateTime64` les valeurs de type sont affichées au format texte et comment les valeurs spécifiées en tant que chaînes sont analysées (‘2020-01-01 05:00:01.000’). Le fuseau horaire n'est pas stocké dans les lignes de la table (ou dans resultset), mais est stocké dans les métadonnées de la colonne. Voir les détails dans [DateTime](datetime.md).
|
||||||
|
|
||||||
|
## Exemple {#examples}
|
||||||
|
|
||||||
|
**1.** Création d'une table avec `DateTime64`- tapez la colonne et insérez des données dedans:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE dt
|
||||||
|
(
|
||||||
|
`timestamp` DateTime64(3, 'Europe/Moscow'),
|
||||||
|
`event_id` UInt8
|
||||||
|
)
|
||||||
|
ENGINE = TinyLog
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
INSERT INTO dt Values (1546300800000, 1), ('2019-01-01 00:00:00', 2)
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT * FROM dt
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌───────────────timestamp─┬─event_id─┐
|
||||||
|
│ 2019-01-01 03:00:00.000 │ 1 │
|
||||||
|
│ 2019-01-01 00:00:00.000 │ 2 │
|
||||||
|
└─────────────────────────┴──────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
- Lors de l'insertion de datetime en tant qu'entier, il est traité comme un horodatage Unix (UTC) mis à l'échelle de manière appropriée. `1546300800000` (avec précision 3) représente `'2019-01-01 00:00:00'` L'UTC. Cependant, comme `timestamp` la colonne a `Europe/Moscow` (UTC+3) fuseau horaire spécifié, lors de la sortie sous forme de chaîne, la valeur sera affichée comme `'2019-01-01 03:00:00'`
|
||||||
|
- Lors de l'insertion d'une valeur de chaîne en tant que datetime, elle est traitée comme étant dans le fuseau horaire de la colonne. `'2019-01-01 00:00:00'` sera considérée comme étant en `Europe/Moscow` fuseau horaire et stocké comme `1546290000000`.
|
||||||
|
|
||||||
|
**2.** Le filtrage sur `DateTime64` valeur
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT * FROM dt WHERE timestamp = toDateTime64('2019-01-01 00:00:00', 3, 'Europe/Moscow')
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌───────────────timestamp─┬─event_id─┐
|
||||||
|
│ 2019-01-01 00:00:00.000 │ 2 │
|
||||||
|
└─────────────────────────┴──────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Contrairement `DateTime`, `DateTime64` les valeurs ne sont pas converties depuis `String` automatiquement
|
||||||
|
|
||||||
|
**3.** Obtenir un fuseau horaire pour un `DateTime64`-le type de la valeur:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT toDateTime64(now(), 3, 'Europe/Moscow') AS column, toTypeName(column) AS x
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌──────────────────column─┬─x──────────────────────────────┐
|
||||||
|
│ 2019-10-16 04:12:04.000 │ DateTime64(3, 'Europe/Moscow') │
|
||||||
|
└─────────────────────────┴────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
**4.** Conversion de fuseau horaire
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT
|
||||||
|
toDateTime64(timestamp, 3, 'Europe/London') as lon_time,
|
||||||
|
toDateTime64(timestamp, 3, 'Europe/Moscow') as mos_time
|
||||||
|
FROM dt
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌───────────────lon_time──┬────────────────mos_time─┐
|
||||||
|
│ 2019-01-01 00:00:00.000 │ 2019-01-01 03:00:00.000 │
|
||||||
|
│ 2018-12-31 21:00:00.000 │ 2019-01-01 00:00:00.000 │
|
||||||
|
└─────────────────────────┴─────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## Voir Aussi {#see-also}
|
||||||
|
|
||||||
|
- [Fonctions de conversion de Type](../query_language/functions/type_conversion_functions.md)
|
||||||
|
- [Fonctions pour travailler avec des dates et des heures](../query_language/functions/date_time_functions.md)
|
||||||
|
- [Fonctions pour travailler avec des tableaux](../query_language/functions/array_functions.md)
|
||||||
|
- [Le `date_time_input_format` paramètre](../operations/settings/settings.md#settings-date_time_input_format)
|
||||||
|
- [Le `timezone` paramètre de configuration du serveur](../operations/server_settings/settings.md#server_settings-timezone)
|
||||||
|
- [Opérateurs pour travailler avec des dates et des heures](../query_language/operators.md#operators-datetime)
|
||||||
|
- [`Date` type de données](date.md)
|
||||||
|
- [`DateTime` type de données](datetime.md)
|
106
docs/fr/data_types/decimal.md
Normal file
106
docs/fr/data_types/decimal.md
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Décimal (P, S), Décimal32 (S), Décimal64 (S), Décimal128 (S) {#decimalp-s-decimal32s-decimal64s-decimal128s}
|
||||||
|
|
||||||
|
Nombres à points fixes signés qui conservent la précision pendant les opérations d'addition, de soustraction et de multiplication. Pour la division, les chiffres les moins significatifs sont ignorés (non arrondis).
|
||||||
|
|
||||||
|
## Paramètre {#parameters}
|
||||||
|
|
||||||
|
- P-précision. Plage valide: \[1: 38 \]. Détermine le nombre de chiffres décimaux nombre peut avoir (fraction y compris).
|
||||||
|
- S - échelle. Plage valide: \[0: P \]. Détermine le nombre de chiffres décimaux fraction peut avoir.
|
||||||
|
|
||||||
|
En fonction de P Paramètre Valeur décimal (P, S) est un synonyme de:
|
||||||
|
- P à partir de \[ 1: 9\] - Pour Décimal32 (S)
|
||||||
|
- P à partir de \[10: 18\] - pour Décimal64 (S)
|
||||||
|
- P à partir de \[19: 38\] - pour Décimal128 (S)
|
||||||
|
|
||||||
|
## Plages de valeurs décimales {#decimal-value-ranges}
|
||||||
|
|
||||||
|
- Décimal32 (S) - ( -1 \* 10^(9 - S), 1 \* 10^(9-S) )
|
||||||
|
- Décimal64 (S) - ( -1 \* 10^(18 - S), 1 \* 10^(18-S) )
|
||||||
|
- Décimal128 (S) - ( -1 \* 10^(38 - S), 1 \* 10^(38-S) )
|
||||||
|
|
||||||
|
Par exemple, Decimal32(4) peut contenir des nombres de -99999.9999 à 99999.9999 avec 0,0001 étape.
|
||||||
|
|
||||||
|
## Représentation interne {#internal-representation}
|
||||||
|
|
||||||
|
En interne, les données sont représentées comme des entiers signés normaux avec une largeur de bit respective. Les plages de valeurs réelles qui peuvent être stockées en mémoire sont un peu plus grandes que celles spécifiées ci-dessus, qui sont vérifiées uniquement lors de la conversion à partir d'une chaîne.
|
||||||
|
|
||||||
|
Parce que les processeurs modernes ne prennent pas en charge les entiers 128 bits nativement, les opérations sur Decimal128 sont émulées. Pour cette raison, Decimal128 fonctionne significativement plus lentement que Decimal32 / Decimal64.
|
||||||
|
|
||||||
|
## Opérations et type de résultat {#operations-and-result-type}
|
||||||
|
|
||||||
|
Les opérations binaires sur le résultat décimal dans le type de résultat plus large (avec n'importe quel ordre d'arguments).
|
||||||
|
|
||||||
|
- Décimal64 (S1) <op> Decimal32 (S2) - \> Decimal64 (S)
|
||||||
|
- Décimal128 (S1) <op> Decimal32 (S2) - \> Decimal128 (S)
|
||||||
|
- Décimal128 (S1) <op> Decimal64 (S2) - \> Decimal128 (S)
|
||||||
|
|
||||||
|
Règles pour l'échelle:
|
||||||
|
|
||||||
|
- ajouter, soustraire: S = max (S1, S2).
|
||||||
|
- multuply: S = S1 + S2.
|
||||||
|
- diviser: S = S1.
|
||||||
|
|
||||||
|
Pour des opérations similaires entre décimal et entier, le résultat est Décimal de la même taille qu'un argument.
|
||||||
|
|
||||||
|
Les opérations entre Decimal et Float32 / Float64 ne sont pas définies. Si vous en avez besoin, vous pouvez explicitement lancer l'un des arguments en utilisant les builtins toDecimal32, toDecimal64, toDecimal128 ou toFloat32, toFloat64. Gardez à l'esprit que le résultat perdra de la précision et que la conversion de type est une opération coûteuse en calcul.
|
||||||
|
|
||||||
|
Certaines fonctions sur le résultat de retour décimal comme Float64 (par exemple, var ou stddev). Les calculs intermédiaires peuvent toujours être effectués en décimal, ce qui peut conduire à des résultats différents entre les entrées Float64 et Decimal avec les mêmes valeurs.
|
||||||
|
|
||||||
|
## Contrôles de débordement {#overflow-checks}
|
||||||
|
|
||||||
|
Pendant les calculs sur Décimal, des débordements entiers peuvent se produire. Les chiffres excessifs dans une fraction sont éliminés (non arrondis). Les chiffres excessifs dans la partie entière conduiront à une exception.
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT toDecimal32(2, 4) AS x, x / 3
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌──────x─┬─divide(toDecimal32(2, 4), 3)─┐
|
||||||
|
│ 2.0000 │ 0.6666 │
|
||||||
|
└────────┴──────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT toDecimal32(4.2, 8) AS x, x * x
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
DB::Exception: Scale is out of bounds.
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT toDecimal32(4.2, 8) AS x, 6 * x
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
DB::Exception: Decimal math overflow.
|
||||||
|
```
|
||||||
|
|
||||||
|
Les contrôles de débordement entraînent un ralentissement des opérations. S'il est connu que les débordements ne sont pas possibles, il est logique de désactiver les contrôles en utilisant `decimal_check_overflow` paramètre. Lorsque des contrôles sont désactivés et le débordement se produit, le résultat sera faux:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SET decimal_check_overflow = 0;
|
||||||
|
SELECT toDecimal32(4.2, 8) AS x, 6 * x
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌──────────x─┬─multiply(6, toDecimal32(4.2, 8))─┐
|
||||||
|
│ 4.20000000 │ -17.74967296 │
|
||||||
|
└────────────┴──────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Les contrôles de débordement se produisent non seulement sur les opérations arithmétiques mais aussi sur la comparaison de valeurs:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT toDecimal32(1, 8) < 100
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
DB::Exception: Can't compare.
|
||||||
|
```
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/decimal/) <!--hide-->
|
81
docs/fr/data_types/domains/ipv4.md
Normal file
81
docs/fr/data_types/domains/ipv4.md
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
## IPv4 {#ipv4}
|
||||||
|
|
||||||
|
`IPv4` est un domaine basé sur `UInt32` tapez et sert de remplacement typé pour stocker des valeurs IPv4. Il fournit un stockage compact avec le format d'entrée-sortie convivial et les informations de type de colonne sur l'inspection.
|
||||||
|
|
||||||
|
### Utilisation De Base {#basic-usage}
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE hits (url String, from IPv4) ENGINE = MergeTree() ORDER BY url;
|
||||||
|
|
||||||
|
DESCRIBE TABLE hits;
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─name─┬─type───┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┐
|
||||||
|
│ url │ String │ │ │ │ │
|
||||||
|
│ from │ IPv4 │ │ │ │ │
|
||||||
|
└──────┴────────┴──────────────┴────────────────────┴─────────┴──────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Ou vous pouvez utiliser le domaine IPv4 comme clé:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE hits (url String, from IPv4) ENGINE = MergeTree() ORDER BY from;
|
||||||
|
```
|
||||||
|
|
||||||
|
`IPv4` le domaine prend en charge le format d'entrée personnalisé en tant que chaînes IPv4:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
INSERT INTO hits (url, from) VALUES ('https://wikipedia.org', '116.253.40.133')('https://clickhouse.tech', '183.247.232.58')('https://clickhouse.yandex/docs/en/', '116.106.34.242');
|
||||||
|
|
||||||
|
SELECT * FROM hits;
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─url────────────────────────────────┬───────────from─┐
|
||||||
|
│ https://clickhouse.tech/docs/en/ │ 116.106.34.242 │
|
||||||
|
│ https://wikipedia.org │ 116.253.40.133 │
|
||||||
|
│ https://clickhouse.tech │ 183.247.232.58 │
|
||||||
|
└────────────────────────────────────┴────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Les valeurs sont stockées sous forme binaire compacte:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT toTypeName(from), hex(from) FROM hits LIMIT 1;
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─toTypeName(from)─┬─hex(from)─┐
|
||||||
|
│ IPv4 │ B7F7E83A │
|
||||||
|
└──────────────────┴───────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Les valeurs de domaine ne sont pas implicitement convertibles en types autres que `UInt32`.
|
||||||
|
Si vous voulez convertir `IPv4` valeur à une chaîne, vous devez le faire explicitement avec `IPv4NumToString()` fonction:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT toTypeName(s), IPv4NumToString(from) as s FROM hits LIMIT 1;
|
||||||
|
```
|
||||||
|
|
||||||
|
┌─toTypeName(IPv4NumToString(from))─┬─s──────────────┐
|
||||||
|
│ String │ 183.247.232.58 │
|
||||||
|
└───────────────────────────────────┴────────────────┘
|
||||||
|
|
||||||
|
Ou coulé à un `UInt32` valeur:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT toTypeName(i), CAST(from as UInt32) as i FROM hits LIMIT 1;
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─toTypeName(CAST(from, 'UInt32'))─┬──────────i─┐
|
||||||
|
│ UInt32 │ 3086477370 │
|
||||||
|
└──────────────────────────────────┴────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/domains/ipv4) <!--hide-->
|
83
docs/fr/data_types/domains/ipv6.md
Normal file
83
docs/fr/data_types/domains/ipv6.md
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
## IPv6 {#ipv6}
|
||||||
|
|
||||||
|
`IPv6` est un domaine basé sur `FixedString(16)` tapez et sert de remplacement typé pour stocker des valeurs IPv6. Il fournit un stockage compact avec le format d'entrée-sortie convivial et les informations de type de colonne sur l'inspection.
|
||||||
|
|
||||||
|
### Utilisation De Base {#basic-usage}
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE hits (url String, from IPv6) ENGINE = MergeTree() ORDER BY url;
|
||||||
|
|
||||||
|
DESCRIBE TABLE hits;
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─name─┬─type───┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┐
|
||||||
|
│ url │ String │ │ │ │ │
|
||||||
|
│ from │ IPv6 │ │ │ │ │
|
||||||
|
└──────┴────────┴──────────────┴────────────────────┴─────────┴──────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Ou vous pouvez utiliser `IPv6` domaine comme l'un des principaux:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE hits (url String, from IPv6) ENGINE = MergeTree() ORDER BY from;
|
||||||
|
```
|
||||||
|
|
||||||
|
`IPv6` le domaine prend en charge l'entrée personnalisée en tant que chaînes IPv6:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
INSERT INTO hits (url, from) VALUES ('https://wikipedia.org', '2a02:aa08:e000:3100::2')('https://clickhouse.tech', '2001:44c8:129:2632:33:0:252:2')('https://clickhouse.yandex/docs/en/', '2a02:e980:1e::1');
|
||||||
|
|
||||||
|
SELECT * FROM hits;
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─url────────────────────────────────┬─from──────────────────────────┐
|
||||||
|
│ https://clickhouse.tech │ 2001:44c8:129:2632:33:0:252:2 │
|
||||||
|
│ https://clickhouse.tech/docs/en/ │ 2a02:e980:1e::1 │
|
||||||
|
│ https://wikipedia.org │ 2a02:aa08:e000:3100::2 │
|
||||||
|
└────────────────────────────────────┴───────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Les valeurs sont stockées sous forme binaire compacte:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT toTypeName(from), hex(from) FROM hits LIMIT 1;
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─toTypeName(from)─┬─hex(from)────────────────────────┐
|
||||||
|
│ IPv6 │ 200144C8012926320033000002520002 │
|
||||||
|
└──────────────────┴──────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Les valeurs de domaine ne sont pas implicitement convertibles en types autres que `FixedString(16)`.
|
||||||
|
Si vous voulez convertir `IPv6` valeur à une chaîne, vous devez le faire explicitement avec `IPv6NumToString()` fonction:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT toTypeName(s), IPv6NumToString(from) as s FROM hits LIMIT 1;
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─toTypeName(IPv6NumToString(from))─┬─s─────────────────────────────┐
|
||||||
|
│ String │ 2001:44c8:129:2632:33:0:252:2 │
|
||||||
|
└───────────────────────────────────┴───────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Ou coulé à un `FixedString(16)` valeur:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT toTypeName(i), CAST(from as FixedString(16)) as i FROM hits LIMIT 1;
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─toTypeName(CAST(from, 'FixedString(16)'))─┬─i───────┐
|
||||||
|
│ FixedString(16) │ <20><><EFBFBD> │
|
||||||
|
└───────────────────────────────────────────┴─────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/domains/ipv6) <!--hide-->
|
29
docs/fr/data_types/domains/overview.md
Normal file
29
docs/fr/data_types/domains/overview.md
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Domaine {#domains}
|
||||||
|
|
||||||
|
Les domaines sont des types spéciaux qui ajoutent des fonctionnalités supplémentaires au sommet du type de base existant, mais en laissant le format on-wire et on-disc du type de données sous-jacent intact. À l'heure actuelle, ClickHouse ne prend pas en charge les domaines définis par l'utilisateur.
|
||||||
|
|
||||||
|
Vous pouvez utiliser des domaines partout type de base correspondant peut être utilisé, par exemple:
|
||||||
|
|
||||||
|
- Créer une colonne d'un type de domaine
|
||||||
|
- Valeurs de lecture / écriture depuis / vers la colonne de domaine
|
||||||
|
- L'utiliser comme un indice si un type de base peut être utilisée comme un indice
|
||||||
|
- Fonctions d'appel avec des valeurs de colonne de domaine
|
||||||
|
|
||||||
|
### Fonctionnalités supplémentaires des domaines {#extra-features-of-domains}
|
||||||
|
|
||||||
|
- Nom de type de colonne explicite dans `SHOW CREATE TABLE` ou `DESCRIBE TABLE`
|
||||||
|
- Entrée du format convivial avec `INSERT INTO domain_table(domain_column) VALUES(...)`
|
||||||
|
- Sortie au format convivial pour `SELECT domain_column FROM domain_table`
|
||||||
|
- Chargement de données à partir d'une source externe dans un format convivial: `INSERT INTO domain_table FORMAT CSV ...`
|
||||||
|
|
||||||
|
### Limitation {#limitations}
|
||||||
|
|
||||||
|
- Impossible de convertir la colonne d'index du type de base en type de domaine via `ALTER TABLE`.
|
||||||
|
- Impossible de convertir implicitement des valeurs de chaîne en valeurs de domaine lors de l'insertion de données d'une autre colonne ou table.
|
||||||
|
- Le domaine n'ajoute aucune contrainte sur les valeurs stockées.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/domains/overview) <!--hide-->
|
129
docs/fr/data_types/enum.md
Normal file
129
docs/fr/data_types/enum.md
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Enum {#enum}
|
||||||
|
|
||||||
|
Type énuméré composé de valeurs nommées.
|
||||||
|
|
||||||
|
Les valeurs nommées doivent être déclarées comme `'string' = integer` pair. ClickHouse ne stocke que des nombres, mais prend en charge les opérations avec les valeurs à travers leurs noms.
|
||||||
|
|
||||||
|
Supports ClickHouse:
|
||||||
|
|
||||||
|
- 8-bit `Enum`. Il peut contenir jusqu'à 256 valeurs énumérées dans le `[-128, 127]` gamme.
|
||||||
|
- 16 bits `Enum`. Il peut contenir jusqu'à 65 536 valeurs énumérées dans le `[-32768, 32767]` gamme.
|
||||||
|
|
||||||
|
Clickhouse choisit automatiquement le type de `Enum` lorsque les données sont insérées. Vous pouvez également utiliser `Enum8` ou `Enum16` types pour être sûr de la taille de stockage.
|
||||||
|
|
||||||
|
## Exemples d'utilisation {#usage-examples}
|
||||||
|
|
||||||
|
Ici, nous créons une table avec une `Enum8('hello' = 1, 'world' = 2)` type de colonne:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE t_enum
|
||||||
|
(
|
||||||
|
x Enum('hello' = 1, 'world' = 2)
|
||||||
|
)
|
||||||
|
ENGINE = TinyLog
|
||||||
|
```
|
||||||
|
|
||||||
|
Colonne `x` ne peut stocker que les valeurs répertoriées dans la définition de type: `'hello'` ou `'world'`. Si vous essayez d'enregistrer une autre valeur, ClickHouse déclenchera une exception. Taille 8 bits pour cela `Enum` est choisi automatiquement.
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello')
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
Ok.
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
INSERT INTO t_enum values('a')
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
Exception on client:
|
||||||
|
Code: 49. DB::Exception: Unknown element 'a' for type Enum('hello' = 1, 'world' = 2)
|
||||||
|
```
|
||||||
|
|
||||||
|
Lorsque vous interrogez des données de la table, ClickHouse affiche les valeurs de chaîne de `Enum`.
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT * FROM t_enum
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─x─────┐
|
||||||
|
│ hello │
|
||||||
|
│ world │
|
||||||
|
│ hello │
|
||||||
|
└───────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Si vous avez besoin de voir les équivalents numériques des lignes, vous devez `Enum` valeur en type entier.
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT CAST(x, 'Int8') FROM t_enum
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─CAST(x, 'Int8')─┐
|
||||||
|
│ 1 │
|
||||||
|
│ 2 │
|
||||||
|
│ 1 │
|
||||||
|
└─────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour créer une valeur d'Enum dans une requête, vous devez également utiliser `CAST`.
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT toTypeName(CAST('a', 'Enum(\'a\' = 1, \'b\' = 2)'))
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─toTypeName(CAST('a', 'Enum(\'a\' = 1, \'b\' = 2)'))─┐
|
||||||
|
│ Enum8('a' = 1, 'b' = 2) │
|
||||||
|
└─────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## Règles générales et utilisation {#general-rules-and-usage}
|
||||||
|
|
||||||
|
Chacune des valeurs se voit attribuer un nombre dans la plage `-128 ... 127` pour `Enum8` ou dans la gamme `-32768 ... 32767` pour `Enum16`. Toutes les chaînes et les nombres doivent être différents. Une chaîne vide est autorisé. Si ce type est spécifié (dans une définition de table), les nombres peuvent être dans un ordre arbitraire. Toutefois, l'ordre n'a pas d'importance.
|
||||||
|
|
||||||
|
Ni la chaîne ni la valeur numérique dans un `Enum` peut être [NULL](../query_language/syntax.md).
|
||||||
|
|
||||||
|
Un `Enum` peut être contenue dans [Nullable](nullable.md) type. Donc, si vous créez une table en utilisant la requête
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE t_enum_nullable
|
||||||
|
(
|
||||||
|
x Nullable( Enum8('hello' = 1, 'world' = 2) )
|
||||||
|
)
|
||||||
|
ENGINE = TinyLog
|
||||||
|
```
|
||||||
|
|
||||||
|
il peut stocker non seulement des `'hello'` et `'world'`, mais `NULL`, ainsi.
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
INSERT INTO t_enum_nullable Values('hello'),('world'),(NULL)
|
||||||
|
```
|
||||||
|
|
||||||
|
Dans la mémoire RAM, un `Enum` la colonne est stockée dans la même manière que `Int8` ou `Int16` des valeurs numériques correspondantes.
|
||||||
|
|
||||||
|
Lors de la lecture sous forme de texte, ClickHouse analyse la valeur sous forme de chaîne et recherche la chaîne correspondante à partir de l'ensemble des valeurs Enum. Si elle n'est pas trouvée, une exception est levée. Lors de la lecture au format texte, la chaîne est lue et la valeur numérique correspondante est recherchée. Une exception sera levée si il n'est pas trouvé.
|
||||||
|
Lors de l'écriture sous forme de texte, il écrit la valeur correspondante de la chaîne. Si les données de colonne contiennent des déchets (nombres qui ne proviennent pas de l'ensemble valide), une exception est levée. Lors de la lecture et de l'écriture sous forme binaire, cela fonctionne de la même manière que pour les types de données Int8 et Int16.
|
||||||
|
La valeur implicite par défaut est la valeur avec le numéro le plus bas.
|
||||||
|
|
||||||
|
Lors `ORDER BY`, `GROUP BY`, `IN`, `DISTINCT` et ainsi de suite, les Énumérations se comportent de la même façon que les nombres correspondants. Par exemple, ORDER BY les trie numériquement. Les opérateurs d'égalité et de comparaison fonctionnent de la même manière sur les énumérations que sur les valeurs numériques sous-jacentes.
|
||||||
|
|
||||||
|
Les valeurs Enum ne peuvent pas être comparées aux nombres. Les Enums peuvent être comparés à une chaîne constante. Si la chaîne comparée à n'est pas une valeur valide pour L'énumération, une exception sera levée. L'opérateur est pris en charge avec l'Enum sur le côté gauche, et un ensemble de chaînes sur le côté droit. Les chaînes sont les valeurs de L'énumération correspondante.
|
||||||
|
|
||||||
|
Most numeric and string operations are not defined for Enum values, e.g. adding a number to an Enum or concatenating a string to an Enum.
|
||||||
|
Cependant, L'énumération a un naturel `toString` fonction qui renvoie sa valeur de chaîne.
|
||||||
|
|
||||||
|
Les valeurs Enum sont également convertibles en types numériques en utilisant `toT` fonction, où T est un type numérique. Lorsque T correspond au type numérique sous-jacent de l'énumération, cette conversion est à coût nul.
|
||||||
|
Le type Enum peut être modifié sans coût en utilisant ALTER, si seulement l'ensemble des valeurs est modifié. Il est possible d'ajouter et de supprimer des membres de L'énumération en utilisant ALTER (la suppression n'est sûre que si la valeur supprimée n'a jamais été utilisée dans la table). À titre de sauvegarde, la modification de la valeur numérique d'un membre Enum précédemment défini lancera une exception.
|
||||||
|
|
||||||
|
En utilisant ALTER, il est possible de changer un Enum8 en Enum16 ou vice versa, tout comme changer un Int8 en Int16.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/enum/) <!--hide-->
|
60
docs/fr/data_types/fixedstring.md
Normal file
60
docs/fr/data_types/fixedstring.md
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# FixedString {#fixedstring}
|
||||||
|
|
||||||
|
Une chaîne de longueur fixe de `N` octets (ni caractères ni points de code).
|
||||||
|
|
||||||
|
Pour déclarer une colonne de `FixedString` tapez, utilisez la syntaxe suivante:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
<column_name> FixedString(N)
|
||||||
|
```
|
||||||
|
|
||||||
|
Où `N` est un nombre naturel.
|
||||||
|
|
||||||
|
Le `FixedString` type est efficace lorsque les données ont la longueur de précisément `N` octet. Dans tous les autres cas, il est susceptible de réduire l'efficacité.
|
||||||
|
|
||||||
|
Exemples de valeurs qui peuvent être stockées efficacement dans `FixedString`-tapé colonnes:
|
||||||
|
|
||||||
|
- La représentation binaire des adresses IP (`FixedString(16)` pour IPv6).
|
||||||
|
- Language codes (ru\_RU, en\_US … ).
|
||||||
|
- Currency codes (USD, RUB … ).
|
||||||
|
- Représentation binaire des hachages (`FixedString(16)` pour MD5, `FixedString(32)` pour SHA256).
|
||||||
|
|
||||||
|
Pour stocker les valeurs UUID, utilisez [UUID](uuid.md) type de données.
|
||||||
|
|
||||||
|
Lors de l'insertion des données, ClickHouse:
|
||||||
|
|
||||||
|
- Complète une chaîne avec des octets null si la chaîne contient moins de `N` octet.
|
||||||
|
- Jette le `Too large value for FixedString(N)` exception si la chaîne contient plus de `N` octet.
|
||||||
|
|
||||||
|
Lors de la sélection des données, ClickHouse ne supprime pas les octets nuls à la fin de la chaîne. Si vous utilisez le `WHERE` clause, vous devez ajouter des octets null manuellement pour `FixedString` valeur. L'exemple suivant illustre l'utilisation de l' `WHERE` la clause de `FixedString`.
|
||||||
|
|
||||||
|
Considérons le tableau suivant avec le seul `FixedString(2)` colonne:
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─name──┐
|
||||||
|
│ b │
|
||||||
|
└───────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Requête `SELECT * FROM FixedStringTable WHERE a = 'b'` ne renvoie aucune donnée en conséquence. Nous devrions compléter le modèle de filtre avec des octets nuls.
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT * FROM FixedStringTable
|
||||||
|
WHERE a = 'b\0'
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─a─┐
|
||||||
|
│ b │
|
||||||
|
└───┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Ce comportement diffère de MySQL pour le `CHAR` type (où les chaînes sont remplies d'espaces et les espaces sont supprimés pour la sortie).
|
||||||
|
|
||||||
|
À noter que la longueur de la `FixedString(N)` la valeur est constante. Le [longueur](../query_language/functions/array_functions.md#array_functions-length) la fonction renvoie `N` même si l' `FixedString(N)` la valeur est remplie uniquement avec des octets [vide](../query_language/functions/string_functions.md#empty) la fonction renvoie `1` dans ce cas.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/fixedstring/) <!--hide-->
|
84
docs/fr/data_types/float.md
Normal file
84
docs/fr/data_types/float.md
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Float32, Float64 {#float32-float64}
|
||||||
|
|
||||||
|
[Les nombres à virgule flottante](https://en.wikipedia.org/wiki/IEEE_754).
|
||||||
|
|
||||||
|
Les Types sont équivalents aux types de C:
|
||||||
|
|
||||||
|
- `Float32` - `float`
|
||||||
|
- `Float64` - `double`
|
||||||
|
|
||||||
|
Nous vous recommandons de stocker les données sous forme entière chaque fois que possible. Par exemple, convertissez des nombres de précision fixes en valeurs entières, telles que des montants monétaires ou des temps de chargement de page en millisecondes.
|
||||||
|
|
||||||
|
## Utilisation de nombres à virgule flottante {#using-floating-point-numbers}
|
||||||
|
|
||||||
|
- Calculs avec des nombres à virgule flottante peut produire une erreur d'arrondi.
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT 1 - 0.9
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌───────minus(1, 0.9)─┐
|
||||||
|
│ 0.09999999999999998 │
|
||||||
|
└─────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
- Le résultat du calcul dépend de la méthode de calcul (le type de processeur et de l'architecture du système informatique).
|
||||||
|
- Les calculs à virgule flottante peuvent entraîner des nombres tels que l'infini (`Inf`) et “not-a-number” (`NaN`). Cela doit être pris en compte lors du traitement des résultats de calculs.
|
||||||
|
- Lors de l'analyse de nombres à virgule flottante à partir de texte, le résultat peut ne pas être le nombre représentable par machine le plus proche.
|
||||||
|
|
||||||
|
## NaN et Inf {#data_type-float-nan-inf}
|
||||||
|
|
||||||
|
Contrairement à SQL standard, ClickHouse prend en charge les catégories suivantes de nombres à virgule flottante:
|
||||||
|
|
||||||
|
- `Inf` – Infinity.
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT 0.5 / 0
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─divide(0.5, 0)─┐
|
||||||
|
│ inf │
|
||||||
|
└────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
- `-Inf` – Negative infinity.
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT -0.5 / 0
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─divide(-0.5, 0)─┐
|
||||||
|
│ -inf │
|
||||||
|
└─────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
- `NaN` – Not a number.
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT 0 / 0
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─divide(0, 0)─┐
|
||||||
|
│ nan │
|
||||||
|
└──────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
See the rules for `NaN` sorting in the section [ORDER BY clause](../query_language/select.md).
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/float/) <!--hide-->
|
11
docs/fr/data_types/index.md
Normal file
11
docs/fr/data_types/index.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Types De Données {#data_types}
|
||||||
|
|
||||||
|
ClickHouse peut stocker différents types de données dans des cellules de table.
|
||||||
|
|
||||||
|
Cette section décrit les types de données pris en charge et les considérations spéciales pour les utiliser et/ou les implémenter le cas échéant.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/) <!--hide-->
|
23
docs/fr/data_types/int_uint.md
Normal file
23
docs/fr/data_types/int_uint.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64 {#uint8-uint16-uint32-uint64-int8-int16-int32-int64}
|
||||||
|
|
||||||
|
Entiers de longueur fixe, avec ou sans signe.
|
||||||
|
|
||||||
|
## Plages Int {#int-ranges}
|
||||||
|
|
||||||
|
- Int8 - \[-128: 127\]
|
||||||
|
- Int16 - \[-32768: 32767\]
|
||||||
|
- Int32 - \[-2147483648: 2147483647\]
|
||||||
|
- Int64 - \[-9223372036854775808: 9223372036854775807\]
|
||||||
|
|
||||||
|
## Plages Uint {#uint-ranges}
|
||||||
|
|
||||||
|
- UInt8 - \[0: 255\]
|
||||||
|
- UInt16 - \[0: 65535\]
|
||||||
|
- UInt32- \[0: 4294967295\]
|
||||||
|
- UInt64- \[0: 18446744073709551615\]
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/int_uint/) <!--hide-->
|
@ -0,0 +1,67 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# AggregateFunction(name, types\_of\_arguments…) {#data-type-aggregatefunction}
|
||||||
|
|
||||||
|
Aggregate functions can have an implementation-defined intermediate state that can be serialized to an AggregateFunction(…) data type and stored in a table, usually, by means of [une vue matérialisée](../../query_language/select.md#create-view). La manière courante de produire un État de fonction d'agrégat est d'appeler la fonction d'agrégat avec le `-State` suffixe. Pour obtenir le résultat final de l'agrégation dans l'avenir, vous devez utiliser la même fonction d'agrégation avec la `-Merge`suffixe.
|
||||||
|
|
||||||
|
`AggregateFunction` — parametric data type.
|
||||||
|
|
||||||
|
**Paramètre**
|
||||||
|
|
||||||
|
- Nom de la fonction d'agrégation.
|
||||||
|
|
||||||
|
If the function is parametric, specify its parameters too.
|
||||||
|
|
||||||
|
- Types des arguments de la fonction d'agrégation.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE t
|
||||||
|
(
|
||||||
|
column1 AggregateFunction(uniq, UInt64),
|
||||||
|
column2 AggregateFunction(anyIf, String, UInt8),
|
||||||
|
column3 AggregateFunction(quantiles(0.5, 0.9), UInt64)
|
||||||
|
) ENGINE = ...
|
||||||
|
```
|
||||||
|
|
||||||
|
[uniq](../../query_language/agg_functions/reference.md#agg_function-uniq), anyIf ([tout](../../query_language/agg_functions/reference.md#agg_function-any)+[Si](../../query_language/agg_functions/combinators.md#agg-functions-combinator-if)) et [les quantiles](../../query_language/agg_functions/reference.md) les fonctions d'agrégation sont-elles prises en charge dans ClickHouse.
|
||||||
|
|
||||||
|
## Utilisation {#usage}
|
||||||
|
|
||||||
|
### Insertion De Données {#data-insertion}
|
||||||
|
|
||||||
|
Pour insérer des données, utilisez `INSERT SELECT` avec le regroupement d' `-State`- fonction.
|
||||||
|
|
||||||
|
**Exemples de fonction**
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
uniqState(UserID)
|
||||||
|
quantilesState(0.5, 0.9)(SendTiming)
|
||||||
|
```
|
||||||
|
|
||||||
|
Contrairement aux fonctions correspondantes `uniq` et `quantiles`, `-State`- les fonctions renvoient l'état, au lieu de la valeur finale. En d'autres termes, ils renvoient une valeur de `AggregateFunction` type.
|
||||||
|
|
||||||
|
Dans les résultats de `SELECT` requête, les valeurs de `AggregateFunction` type ont une représentation binaire spécifique à l'implémentation pour tous les formats de sortie ClickHouse. Si les données de vidage dans, par exemple, `TabSeparated` format avec `SELECT` requête, puis ce vidage peut être chargé en utilisant `INSERT` requête.
|
||||||
|
|
||||||
|
### Sélection De Données {#data-selection}
|
||||||
|
|
||||||
|
Lors de la sélection des données `AggregatingMergeTree` table, utilisez `GROUP BY` et les mêmes fonctions d'agrégat que lors de l'insertion de données, mais en utilisant `-Merge`suffixe.
|
||||||
|
|
||||||
|
Une fonction d'agrégation avec `-Merge` suffixe prend un ensemble d'états, les combine, et renvoie le résultat complet de l'agrégation de données.
|
||||||
|
|
||||||
|
Par exemple, les deux requêtes suivantes retournent le même résultat:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT uniq(UserID) FROM table
|
||||||
|
|
||||||
|
SELECT uniqMerge(state) FROM (SELECT uniqState(UserID) AS state FROM table GROUP BY RegionID)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Exemple D'Utilisation {#usage-example}
|
||||||
|
|
||||||
|
Voir [AggregatingMergeTree](../../operations/table_engines/aggregatingmergetree.md) Description du moteur.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/nested_data_structures/aggregatefunction/) <!--hide-->
|
7
docs/fr/data_types/nested_data_structures/index.md
Normal file
7
docs/fr/data_types/nested_data_structures/index.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Structures De Données Imbriquées {#nested-data-structures}
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/nested_data_structures/) <!--hide-->
|
103
docs/fr/data_types/nested_data_structures/nested.md
Normal file
103
docs/fr/data_types/nested_data_structures/nested.md
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Nested(Name1 Type1, Name2 Type2, …) {#nestedname1-type1-name2-type2}
|
||||||
|
|
||||||
|
A nested data structure is like a table inside a cell. The parameters of a nested data structure – the column names and types – are specified the same way as in a [CREATE TABLE](../../query_language/create.md) requête. Chaque ligne de table peut correspondre à n'importe quel nombre de lignes dans une structure de données imbriquée.
|
||||||
|
|
||||||
|
Exemple:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE test.visits
|
||||||
|
(
|
||||||
|
CounterID UInt32,
|
||||||
|
StartDate Date,
|
||||||
|
Sign Int8,
|
||||||
|
IsNew UInt8,
|
||||||
|
VisitID UInt64,
|
||||||
|
UserID UInt64,
|
||||||
|
...
|
||||||
|
Goals Nested
|
||||||
|
(
|
||||||
|
ID UInt32,
|
||||||
|
Serial UInt32,
|
||||||
|
EventTime DateTime,
|
||||||
|
Price Int64,
|
||||||
|
OrderID String,
|
||||||
|
CurrencyID UInt32
|
||||||
|
),
|
||||||
|
...
|
||||||
|
) ENGINE = CollapsingMergeTree(StartDate, intHash32(UserID), (CounterID, StartDate, intHash32(UserID), VisitID), 8192, Sign)
|
||||||
|
```
|
||||||
|
|
||||||
|
Cet exemple déclare le `Goals` structure de données imbriquée, qui contient des données sur les conversions (objectifs atteints). Chaque ligne de la ‘visits’ table peut correspondre à zéro ou n'importe quel nombre de conversions.
|
||||||
|
|
||||||
|
Un seul niveau d'imbrication est pris en charge. Les colonnes de structures imbriquées contenant des tableaux sont équivalentes à des tableaux multidimensionnels, elles ont donc un support limité (il n'y a pas de support pour stocker ces colonnes dans des tables avec le moteur MergeTree).
|
||||||
|
|
||||||
|
Dans la plupart des cas, lorsque vous travaillez avec une structure de données imbriquée, ses colonnes sont spécifiées avec des noms de colonnes séparés par un point. Ces colonnes constituent un tableau de types correspondants. Tous les tableaux de colonnes d'une structure de données imbriquée unique ont la même longueur.
|
||||||
|
|
||||||
|
Exemple:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT
|
||||||
|
Goals.ID,
|
||||||
|
Goals.EventTime
|
||||||
|
FROM test.visits
|
||||||
|
WHERE CounterID = 101500 AND length(Goals.ID) < 5
|
||||||
|
LIMIT 10
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─Goals.ID───────────────────────┬─Goals.EventTime───────────────────────────────────────────────────────────────────────────┐
|
||||||
|
│ [1073752,591325,591325] │ ['2014-03-17 16:38:10','2014-03-17 16:38:48','2014-03-17 16:42:27'] │
|
||||||
|
│ [1073752] │ ['2014-03-17 00:28:25'] │
|
||||||
|
│ [1073752] │ ['2014-03-17 10:46:20'] │
|
||||||
|
│ [1073752,591325,591325,591325] │ ['2014-03-17 13:59:20','2014-03-17 22:17:55','2014-03-17 22:18:07','2014-03-17 22:18:51'] │
|
||||||
|
│ [] │ [] │
|
||||||
|
│ [1073752,591325,591325] │ ['2014-03-17 11:37:06','2014-03-17 14:07:47','2014-03-17 14:36:21'] │
|
||||||
|
│ [] │ [] │
|
||||||
|
│ [] │ [] │
|
||||||
|
│ [591325,1073752] │ ['2014-03-17 00:46:05','2014-03-17 00:46:05'] │
|
||||||
|
│ [1073752,591325,591325,591325] │ ['2014-03-17 13:28:33','2014-03-17 13:30:26','2014-03-17 18:51:21','2014-03-17 18:51:45'] │
|
||||||
|
└────────────────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Il est plus facile de penser à une structure de données imbriquée comme un ensemble de plusieurs tableaux de colonnes de la même longueur.
|
||||||
|
|
||||||
|
Le seul endroit où une requête SELECT peut spécifier le nom d'une structure de données imbriquée entière au lieu de colonnes individuelles est la clause de jointure de tableau. Pour plus d'informations, voir “ARRAY JOIN clause”. Exemple:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT
|
||||||
|
Goal.ID,
|
||||||
|
Goal.EventTime
|
||||||
|
FROM test.visits
|
||||||
|
ARRAY JOIN Goals AS Goal
|
||||||
|
WHERE CounterID = 101500 AND length(Goals.ID) < 5
|
||||||
|
LIMIT 10
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─Goal.ID─┬──────Goal.EventTime─┐
|
||||||
|
│ 1073752 │ 2014-03-17 16:38:10 │
|
||||||
|
│ 591325 │ 2014-03-17 16:38:48 │
|
||||||
|
│ 591325 │ 2014-03-17 16:42:27 │
|
||||||
|
│ 1073752 │ 2014-03-17 00:28:25 │
|
||||||
|
│ 1073752 │ 2014-03-17 10:46:20 │
|
||||||
|
│ 1073752 │ 2014-03-17 13:59:20 │
|
||||||
|
│ 591325 │ 2014-03-17 22:17:55 │
|
||||||
|
│ 591325 │ 2014-03-17 22:18:07 │
|
||||||
|
│ 591325 │ 2014-03-17 22:18:51 │
|
||||||
|
│ 1073752 │ 2014-03-17 11:37:06 │
|
||||||
|
└─────────┴─────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Vous ne pouvez pas effectuer SELECT pour une structure de données imbriquée entière. Vous ne pouvez lister explicitement que les colonnes individuelles qui en font partie.
|
||||||
|
|
||||||
|
Pour une requête INSERT, vous devez passer tous les tableaux de colonnes composant d'une structure de données imbriquée séparément (comme s'il s'agissait de tableaux de colonnes individuels). Au cours de l'insertion, le système vérifie qu'ils ont la même longueur.
|
||||||
|
|
||||||
|
Pour une requête DESCRIBE, les colonnes d'une structure de données imbriquée sont répertoriées séparément de la même manière.
|
||||||
|
|
||||||
|
La requête ALTER pour les éléments d'une structure de données imbriquée a des limites.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/nested_data_structures/nested/) <!--hide-->
|
43
docs/fr/data_types/nullable.md
Normal file
43
docs/fr/data_types/nullable.md
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Nullable(TypeName) {#data_type-nullable}
|
||||||
|
|
||||||
|
Permet de stocker marqueur spécial ([NULL](../query_language/syntax.md)) qui dénote “missing value” aux valeurs normales autorisées par `TypeName`. Par exemple, un `Nullable(Int8)` type colonne peut stocker `Int8` type de valeurs, et les lignes qui n'ont pas de valeur magasin `NULL`.
|
||||||
|
|
||||||
|
Pour un `TypeName` vous ne pouvez pas utiliser les types de données composites [Tableau](array.md) et [Tuple](tuple.md). Les types de données composites peuvent contenir `Nullable` valeurs de type, telles que `Array(Nullable(Int8))`.
|
||||||
|
|
||||||
|
A `Nullable` le champ type ne peut pas être inclus dans les index de table.
|
||||||
|
|
||||||
|
`NULL` est la valeur par défaut pour tout `Nullable` type, sauf indication contraire dans la configuration du serveur ClickHouse.
|
||||||
|
|
||||||
|
## Caractéristiques de stockage {#storage-features}
|
||||||
|
|
||||||
|
Stocker `Nullable` valeurs de type dans une colonne de table, ClickHouse utilise un fichier séparé avec `NULL` masques en plus du fichier normal avec des valeurs. Les entrées du fichier masks permettent à ClickHouse de faire la distinction entre `NULL` et une valeur par défaut du type de données correspondant pour chaque ligne de table. En raison d'un fichier supplémentaire, `Nullable` colonne consomme de l'espace de stockage supplémentaire par rapport à une normale similaire.
|
||||||
|
|
||||||
|
!!! info "Note"
|
||||||
|
Utiliser `Nullable` affecte presque toujours négativement les performances, gardez cela à l'esprit lors de la conception de vos bases de données.
|
||||||
|
|
||||||
|
## Exemple d'utilisation {#usage-example}
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE t_null(x Int8, y Nullable(Int8)) ENGINE TinyLog
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
INSERT INTO t_null VALUES (1, NULL), (2, 3)
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT x + y FROM t_null
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─plus(x, y)─┐
|
||||||
|
│ ᴺᵁᴸᴸ │
|
||||||
|
│ 5 │
|
||||||
|
└────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/nullable/) <!--hide-->
|
9
docs/fr/data_types/special_data_types/expression.md
Normal file
9
docs/fr/data_types/special_data_types/expression.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Expression {#expression}
|
||||||
|
|
||||||
|
Les Expressions sont utilisées pour représenter des lambdas dans des fonctions d'ordre Élevé.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/special_data_types/expression/) <!--hide-->
|
9
docs/fr/data_types/special_data_types/index.md
Normal file
9
docs/fr/data_types/special_data_types/index.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Types De Données Spéciaux {#special-data-types}
|
||||||
|
|
||||||
|
Les valeurs de type de données spéciales ne peuvent pas être sérialisées pour l'enregistrement dans une table ou la sortie dans les résultats de la requête, mais peuvent être utilisées comme résultat intermédiaire lors de l'exécution de la requête.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/special_data_types/) <!--hide-->
|
82
docs/fr/data_types/special_data_types/interval.md
Normal file
82
docs/fr/data_types/special_data_types/interval.md
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Intervalle {#data-type-interval}
|
||||||
|
|
||||||
|
Famille de types de données représentant des intervalles d'heure et de date. Les types de la [INTERVAL](../../query_language/operators.md#operator-interval) opérateur.
|
||||||
|
|
||||||
|
!!! warning "Avertissement"
|
||||||
|
`Interval` les valeurs de type de données ne peuvent pas être stockées dans les tables.
|
||||||
|
|
||||||
|
Structure:
|
||||||
|
|
||||||
|
- Intervalle de temps en tant que valeur entière non signée.
|
||||||
|
- Type de l'intervalle.
|
||||||
|
|
||||||
|
Types d'intervalles pris en charge:
|
||||||
|
|
||||||
|
- `SECOND`
|
||||||
|
- `MINUTE`
|
||||||
|
- `HOUR`
|
||||||
|
- `DAY`
|
||||||
|
- `WEEK`
|
||||||
|
- `MONTH`
|
||||||
|
- `QUARTER`
|
||||||
|
- `YEAR`
|
||||||
|
|
||||||
|
Pour chaque type d'intervalle, il existe un type de données distinct. Par exemple, l' `DAY` l'intervalle correspond au `IntervalDay` type de données:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT toTypeName(INTERVAL 4 DAY)
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─toTypeName(toIntervalDay(4))─┐
|
||||||
|
│ IntervalDay │
|
||||||
|
└──────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## Utilisation Remarques {#data-type-interval-usage-remarks}
|
||||||
|
|
||||||
|
Vous pouvez utiliser `Interval`-tapez des valeurs dans des opérations arithmétiques avec [Date](../../data_types/date.md) et [DateTime](../../data_types/datetime.md)-type de valeurs. Par exemple, vous pouvez ajouter 4 jours à l'heure actuelle:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT now() as current_date_time, current_date_time + INTERVAL 4 DAY
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌───current_date_time─┬─plus(now(), toIntervalDay(4))─┐
|
||||||
|
│ 2019-10-23 10:58:45 │ 2019-10-27 10:58:45 │
|
||||||
|
└─────────────────────┴───────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Les intervalles avec différents types ne peuvent pas être combinés. Vous ne pouvez pas utiliser des intervalles comme `4 DAY 1 HOUR`. Spécifiez des intervalles en unités inférieures ou égales à la plus petite unité de l'intervalle, par exemple, l'intervalle `1 day and an hour` l'intervalle peut être exprimée comme `25 HOUR` ou `90000 SECOND`.
|
||||||
|
|
||||||
|
Vous ne pouvez pas effectuer d'opérations arithmétiques avec `Interval`- tapez des valeurs, mais vous pouvez ajouter des intervalles de différents types par conséquent aux valeurs dans `Date` ou `DateTime` types de données. Exemple:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT now() AS current_date_time, current_date_time + INTERVAL 4 DAY + INTERVAL 3 HOUR
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌───current_date_time─┬─plus(plus(now(), toIntervalDay(4)), toIntervalHour(3))─┐
|
||||||
|
│ 2019-10-23 11:16:28 │ 2019-10-27 14:16:28 │
|
||||||
|
└─────────────────────┴────────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
La requête suivante provoque une exception:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
select now() AS current_date_time, current_date_time + (INTERVAL 4 DAY + INTERVAL 3 HOUR)
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
Received exception from server (version 19.14.1):
|
||||||
|
Code: 43. DB::Exception: Received from localhost:9000. DB::Exception: Wrong argument types for function plus: if one argument is Interval, then another must be Date or DateTime..
|
||||||
|
```
|
||||||
|
|
||||||
|
## Voir Aussi {#see-also}
|
||||||
|
|
||||||
|
- [INTERVAL](../../query_language/operators.md#operator-interval) opérateur
|
||||||
|
- [toInterval](../../query_language/functions/type_conversion_functions.md#function-tointerval) type fonctions de conversion
|
23
docs/fr/data_types/special_data_types/nothing.md
Normal file
23
docs/fr/data_types/special_data_types/nothing.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Rien {#nothing}
|
||||||
|
|
||||||
|
Le seul but de ce type de données est de représenter les cas où une valeur n'est pas prévu. Donc vous ne pouvez pas créer un `Nothing` type de valeur.
|
||||||
|
|
||||||
|
Par exemple, littéral [NULL](../../query_language/syntax.md#null-literal) a type de `Nullable(Nothing)`. Voir plus sur [Nullable](../../data_types/nullable.md).
|
||||||
|
|
||||||
|
Le `Nothing` type peut également être utilisé pour désigner des tableaux vides:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT toTypeName(array())
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─toTypeName(array())─┐
|
||||||
|
│ Array(Nothing) │
|
||||||
|
└─────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/special_data_types/nothing/) <!--hide-->
|
9
docs/fr/data_types/special_data_types/set.md
Normal file
9
docs/fr/data_types/special_data_types/set.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Définir {#set}
|
||||||
|
|
||||||
|
Utilisé pour la moitié droite d'un [IN](../../query_language/select.md#select-in-operators) expression.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/special_data_types/set/) <!--hide-->
|
17
docs/fr/data_types/string.md
Normal file
17
docs/fr/data_types/string.md
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Chaîne {#string}
|
||||||
|
|
||||||
|
Les chaînes d'une longueur arbitraire. La longueur n'est pas limitée. La valeur peut contenir un ensemble arbitraire d'octets, y compris des octets nuls.
|
||||||
|
Le type de chaîne remplace les types VARCHAR, BLOB, CLOB et autres provenant d'autres SGBD.
|
||||||
|
|
||||||
|
## Encodage {#encodings}
|
||||||
|
|
||||||
|
ClickHouse n'a pas le concept d'encodages. Les chaînes peuvent contenir un ensemble arbitraire d'octets, qui sont stockés et sortis tels quels.
|
||||||
|
Si vous avez besoin de stocker des textes, nous vous recommandons d'utiliser L'encodage UTF-8. À tout le moins, si votre terminal utilise UTF-8 (comme recommandé), vous pouvez lire et écrire vos valeurs sans effectuer de conversions.
|
||||||
|
De même, certaines fonctions pour travailler avec des chaînes ont des variations distinctes qui fonctionnent sous l'hypothèse que la chaîne contient un ensemble d'octets représentant un texte codé en UTF-8.
|
||||||
|
Par exemple, l' ‘length’ fonction calcule la longueur de la chaîne en octets, tandis que le ‘lengthUTF8’ la fonction calcule la longueur de la chaîne en points de code Unicode, en supposant que la valeur est encodée en UTF-8.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/string/) <!--hide-->
|
49
docs/fr/data_types/tuple.md
Normal file
49
docs/fr/data_types/tuple.md
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Tuple(T1, T2, …) {#tuplet1-t2}
|
||||||
|
|
||||||
|
Un n-uplet d'éléments, chacun ayant une personne [type](index.md#data_types).
|
||||||
|
|
||||||
|
Les Tuples sont utilisés pour le regroupement temporaire de colonnes. Les colonnes peuvent être regroupées lorsqu'une expression IN est utilisée dans une requête et pour spécifier certains paramètres formels des fonctions lambda. Pour plus d'informations, voir les sections [Dans les opérateurs](../query_language/select.md) et [Des fonctions d'ordre supérieur](../query_language/functions/higher_order_functions.md).
|
||||||
|
|
||||||
|
Les Tuples peuvent être le résultat d'une requête. Dans ce cas, pour les formats de texte autres que JSON, les valeurs sont séparées par des virgules entre parenthèses. Dans les formats JSON, les tuples sont sortis sous forme de tableaux (entre crochets).
|
||||||
|
|
||||||
|
## La création d'un tuple {#creating-a-tuple}
|
||||||
|
|
||||||
|
Vous pouvez utiliser une fonction pour créer un tuple:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
tuple(T1, T2, ...)
|
||||||
|
```
|
||||||
|
|
||||||
|
Exemple de création d'un tuple:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT tuple(1,'a') AS x, toTypeName(x)
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─x───────┬─toTypeName(tuple(1, 'a'))─┐
|
||||||
|
│ (1,'a') │ Tuple(UInt8, String) │
|
||||||
|
└─────────┴───────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## Utilisation de types de données {#working-with-data-types}
|
||||||
|
|
||||||
|
Lors de la création d'un tuple à la volée, ClickHouse détecte automatiquement le type de chaque argument comme le minimum des types qui peuvent stocker la valeur de l'argument. Si l'argument est [NULL](../query_language/syntax.md#null-literal) le type de l'élément tuple est [Nullable](nullable.md).
|
||||||
|
|
||||||
|
Exemple de détection automatique de type de données:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT tuple(1, NULL) AS x, toTypeName(x)
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─x────────┬─toTypeName(tuple(1, NULL))──────┐
|
||||||
|
│ (1,NULL) │ Tuple(UInt8, Nullable(Nothing)) │
|
||||||
|
└──────────┴─────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/tuple/) <!--hide-->
|
74
docs/fr/data_types/uuid.md
Normal file
74
docs/fr/data_types/uuid.md
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# UUID {#uuid-data-type}
|
||||||
|
|
||||||
|
Un identifiant unique universel (UUID) est un numéro de 16 octets utilisé pour identifier les enregistrements. Pour plus d'informations sur L'UUID, voir [Wikipedia](https://en.wikipedia.org/wiki/Universally_unique_identifier).
|
||||||
|
|
||||||
|
L'exemple de valeur de type UUID est représenté ci-dessous:
|
||||||
|
|
||||||
|
``` text
|
||||||
|
61f0c404-5cb3-11e7-907b-a6006ad3dba0
|
||||||
|
```
|
||||||
|
|
||||||
|
Si vous ne spécifiez pas la valeur de la colonne UUID lors de l'insertion d'un nouvel enregistrement, la valeur UUID est remplie avec zéro:
|
||||||
|
|
||||||
|
``` text
|
||||||
|
00000000-0000-0000-0000-000000000000
|
||||||
|
```
|
||||||
|
|
||||||
|
## Comment générer {#how-to-generate}
|
||||||
|
|
||||||
|
Pour générer la valeur UUID, ClickHouse fournit [generateUUIDv4](../query_language/functions/uuid_functions.md) fonction.
|
||||||
|
|
||||||
|
## Exemple d'utilisation {#usage-example}
|
||||||
|
|
||||||
|
**Exemple 1**
|
||||||
|
|
||||||
|
Cet exemple montre la création d'une table avec la colonne de type UUID et l'insertion d'une valeur dans la table.
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE t_uuid (x UUID, y String) ENGINE=TinyLog
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
INSERT INTO t_uuid SELECT generateUUIDv4(), 'Example 1'
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT * FROM t_uuid
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌────────────────────────────────────x─┬─y─────────┐
|
||||||
|
│ 417ddc5d-e556-4d27-95dd-a34d84e46a50 │ Example 1 │
|
||||||
|
└──────────────────────────────────────┴───────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
**Exemple 2**
|
||||||
|
|
||||||
|
Dans cet exemple, la valeur de la colonne UUID n'est pas spécifiée lors de l'insertion d'un nouvel enregistrement.
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
INSERT INTO t_uuid (y) VALUES ('Example 2')
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT * FROM t_uuid
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌────────────────────────────────────x─┬─y─────────┐
|
||||||
|
│ 417ddc5d-e556-4d27-95dd-a34d84e46a50 │ Example 1 │
|
||||||
|
│ 00000000-0000-0000-0000-000000000000 │ Example 2 │
|
||||||
|
└──────────────────────────────────────┴───────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## Restriction {#restrictions}
|
||||||
|
|
||||||
|
Le type de données UUID ne prend en charge que les fonctions qui [Chaîne](string.md) type de données prend également en charge (par exemple, [min](../query_language/agg_functions/reference.md#agg_function-min), [Max](../query_language/agg_functions/reference.md#agg_function-max), et [compter](../query_language/agg_functions/reference.md#agg_function-count)).
|
||||||
|
|
||||||
|
Le type de données UUID n'est pas pris en charge par les opérations arithmétiques (par exemple, [ABS](../query_language/functions/arithmetic_functions.md#arithm_func-abs)) ou des fonctions d'agrégation, comme [somme](../query_language/agg_functions/reference.md#agg_function-sum) et [avg](../query_language/agg_functions/reference.md#agg_function-avg).
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/data_types/uuid/) <!--hide-->
|
17
docs/fr/database_engines/index.md
Normal file
17
docs/fr/database_engines/index.md
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Moteurs De Base De Données {#database-engines}
|
||||||
|
|
||||||
|
Moteurs de base de données vous permettent de travailler avec des tables.
|
||||||
|
|
||||||
|
Par défaut, ClickHouse utilise son moteur de base de données natif, qui fournit [moteurs de table](../operations/table_engines/index.md) et un [Dialecte SQL](../query_language/syntax.md).
|
||||||
|
|
||||||
|
Vous pouvez également utiliser les moteurs de base de données suivants:
|
||||||
|
|
||||||
|
- [MySQL](mysql.md)
|
||||||
|
|
||||||
|
- [Paresseux](lazy.md)
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/database_engines/) <!--hide-->
|
15
docs/fr/database_engines/lazy.md
Normal file
15
docs/fr/database_engines/lazy.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Paresseux {#lazy}
|
||||||
|
|
||||||
|
Conserve les tables en RAM uniquement `expiration_time_in_seconds` secondes après le dernier accès. Peut être utilisé uniquement avec les tables \* Log.
|
||||||
|
|
||||||
|
Il est optimisé pour stocker de nombreuses petites tables \*Log, pour lesquelles il y a un long intervalle de temps entre les accès.
|
||||||
|
|
||||||
|
## La création d'une Base de données {#creating-a-database}
|
||||||
|
|
||||||
|
CREATE DATABASE testlazy ENGINE = Lazy(expiration_time_in_seconds);
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/database_engines/lazy/) <!--hide-->
|
132
docs/fr/database_engines/mysql.md
Normal file
132
docs/fr/database_engines/mysql.md
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# MySQL {#mysql}
|
||||||
|
|
||||||
|
Permet de se connecter à des bases de données sur un serveur MySQL distant et `INSERT` et `SELECT` requêtes pour échanger des données entre Clickhouse et MySQL.
|
||||||
|
|
||||||
|
Le `MySQL` moteur de base de données traduire les requêtes sur le serveur MySQL afin que vous puissiez effectuer des opérations telles que `SHOW TABLES` ou `SHOW CREATE TABLE`.
|
||||||
|
|
||||||
|
Vous ne pouvez pas effectuer les requêtes suivantes:
|
||||||
|
|
||||||
|
- `RENAME`
|
||||||
|
- `CREATE TABLE`
|
||||||
|
- `ALTER`
|
||||||
|
|
||||||
|
## La création d'une Base de données {#creating-a-database}
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
|
||||||
|
ENGINE = MySQL('host:port', 'database', 'user', 'password')
|
||||||
|
```
|
||||||
|
|
||||||
|
**Les Paramètres Du Moteur**
|
||||||
|
|
||||||
|
- `host:port` — MySQL server address.
|
||||||
|
- `database` — Remote database name.
|
||||||
|
- `user` — MySQL user.
|
||||||
|
- `password` — User password.
|
||||||
|
|
||||||
|
## Types De Données Soutien {#data_types-support}
|
||||||
|
|
||||||
|
| MySQL | ClickHouse |
|
||||||
|
|----------------------------------|---------------------------------------------|
|
||||||
|
| UNSIGNED TINYINT | [UInt8](../data_types/int_uint.md) |
|
||||||
|
| TINYINT | [Int8](../data_types/int_uint.md) |
|
||||||
|
| UNSIGNED SMALLINT | [UInt16](../data_types/int_uint.md) |
|
||||||
|
| SMALLINT | [Int16](../data_types/int_uint.md) |
|
||||||
|
| UNSIGNED INT, UNSIGNED MEDIUMINT | [UInt32](../data_types/int_uint.md) |
|
||||||
|
| INT, MEDIUMINT | [Int32](../data_types/int_uint.md) |
|
||||||
|
| UNSIGNED BIGINT | [UInt64](../data_types/int_uint.md) |
|
||||||
|
| BIGINT | [Int64](../data_types/int_uint.md) |
|
||||||
|
| FLOAT | [Float32](../data_types/float.md) |
|
||||||
|
| DOUBLE | [Float64](../data_types/float.md) |
|
||||||
|
| DATE | [Date](../data_types/date.md) |
|
||||||
|
| DATETIME, TIMESTAMP | [DateTime](../data_types/datetime.md) |
|
||||||
|
| BINARY | [FixedString](../data_types/fixedstring.md) |
|
||||||
|
|
||||||
|
Tous les autres types de données MySQL sont convertis en [Chaîne](../data_types/string.md).
|
||||||
|
|
||||||
|
[Nullable](../data_types/nullable.md) est pris en charge.
|
||||||
|
|
||||||
|
## Exemples D'utilisation {#examples-of-use}
|
||||||
|
|
||||||
|
Table dans MySQL:
|
||||||
|
|
||||||
|
``` text
|
||||||
|
mysql> USE test;
|
||||||
|
Database changed
|
||||||
|
|
||||||
|
mysql> CREATE TABLE `mysql_table` (
|
||||||
|
-> `int_id` INT NOT NULL AUTO_INCREMENT,
|
||||||
|
-> `float` FLOAT NOT NULL,
|
||||||
|
-> PRIMARY KEY (`int_id`));
|
||||||
|
Query OK, 0 rows affected (0,09 sec)
|
||||||
|
|
||||||
|
mysql> insert into mysql_table (`int_id`, `float`) VALUES (1,2);
|
||||||
|
Query OK, 1 row affected (0,00 sec)
|
||||||
|
|
||||||
|
mysql> select * from mysql_table;
|
||||||
|
+--------+-------+
|
||||||
|
| int_id | value |
|
||||||
|
+--------+-------+
|
||||||
|
| 1 | 2 |
|
||||||
|
+--------+-------+
|
||||||
|
1 row in set (0,00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
Base de données dans ClickHouse, échange de données avec le serveur MySQL:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE DATABASE mysql_db ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password')
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SHOW DATABASES
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─name─────┐
|
||||||
|
│ default │
|
||||||
|
│ mysql_db │
|
||||||
|
│ system │
|
||||||
|
└──────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SHOW TABLES FROM mysql_db
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─name─────────┐
|
||||||
|
│ mysql_table │
|
||||||
|
└──────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT * FROM mysql_db.mysql_table
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─int_id─┬─value─┐
|
||||||
|
│ 1 │ 2 │
|
||||||
|
└────────┴───────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
INSERT INTO mysql_db.mysql_table VALUES (3,4)
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT * FROM mysql_db.mysql_table
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─int_id─┬─value─┐
|
||||||
|
│ 1 │ 2 │
|
||||||
|
│ 3 │ 4 │
|
||||||
|
└────────┴───────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/database_engines/mysql/) <!--hide-->
|
200
docs/fr/development/architecture.md
Normal file
200
docs/fr/development/architecture.md
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Vue d'ensemble de L'Architecture ClickHouse {#overview-of-clickhouse-architecture}
|
||||||
|
|
||||||
|
ClickHouse est un véritable SGBD orienté colonne. Les données sont stockées par colonnes et lors de l'exécution de tableaux (vecteurs ou morceaux de colonnes). Dans la mesure du possible, les opérations sont distribuées sur des tableaux, plutôt que sur des valeurs individuelles. Il est appelé “vectorized query execution,” et cela aide à réduire le coût du traitement des données réel.
|
||||||
|
|
||||||
|
> Cette idée n'est pas nouvelle. Il remonte à la `APL` langage de programmation et ses descendants: `A +`, `J`, `K`, et `Q`. La programmation de tableau est utilisée dans le traitement des données scientifiques. Cette idée n'est pas non plus nouvelle dans les bases de données relationnelles: par exemple, elle est utilisée dans le `Vectorwise` système.
|
||||||
|
|
||||||
|
Il existe deux approches différentes pour accélérer le traitement des requêtes: l'exécution vectorisée des requêtes et la génération de code d'exécution. Ce dernier supprime toute indirection et expédition dynamique. Aucune de ces approches est strictement meilleure que l'autre. La génération de code d'exécution peut être meilleure lorsqu'elle fusionne de nombreuses opérations, utilisant ainsi pleinement les unités D'exécution du processeur et le pipeline. L'exécution de requête vectorisée peut être moins pratique car elle implique des vecteurs temporaires qui doivent être écrits dans le cache et lus. Si les données temporaires ne rentre pas dans le cache L2, cela devient un problème. Mais l'exécution de requête vectorisée utilise plus facilement les capacités SIMD de la CPU. Un [document de recherche](http://15721.courses.cs.cmu.edu/spring2016/papers/p5-sompolski.pdf) écrit par nos amis montre qu'il est préférable de combiner les deux approches. ClickHouse utilise l'exécution de requête vectorisée et a un support initial limité pour la génération de code d'exécution.
|
||||||
|
|
||||||
|
## Colonne {#columns}
|
||||||
|
|
||||||
|
`IColumn` l'interface est utilisée pour représenter des colonnes en mémoire (en fait, des morceaux de colonnes). Cette interface fournit des méthodes d'aide pour la mise en œuvre de divers opérateurs relationnels. Presque toutes les opérations sont immuables: elles ne modifient pas la colonne d'origine, mais en créent une nouvelle modifiée. Par exemple, l' `IColumn :: filter` méthode accepte un masque d'octet de filtre. Il est utilisé pour le `WHERE` et `HAVING` opérateurs relationnels. Exemples supplémentaires: `IColumn :: permute` méthode de soutien `ORDER BY`, le `IColumn :: cut` méthode de soutien `LIMIT`.
|
||||||
|
|
||||||
|
Divers `IColumn` application (`ColumnUInt8`, `ColumnString` et ainsi de suite) sont responsables de la mémoire disposition de colonnes. La disposition de la mémoire est généralement un tableau contigu. Pour le type entier de colonnes, c'est juste un contiguë tableau, comme `std :: vector`. Pour `String` et `Array` colonnes, il s'agit de deux vecteurs: Un pour tous les éléments du tableau, placé de manière contiguë, et un second pour les décalages au début de chaque tableau. Il y a aussi `ColumnConst` cela stocke une seule valeur en mémoire, mais ressemble à une colonne.
|
||||||
|
|
||||||
|
## Champ {#field}
|
||||||
|
|
||||||
|
Néanmoins, il est possible de travailler avec des valeurs individuelles ainsi. Pour représenter une valeur individuelle, la `Field` est utilisée. `Field` est juste une union discriminée de `UInt64`, `Int64`, `Float64`, `String` et `Array`. `IColumn` a l' `operator[]` méthode pour obtenir la n-ème valeur en tant que `Field` et la `insert` méthode pour ajouter un `Field` à la fin d'une colonne. Ces méthodes ne sont pas très efficaces, car ils nécessitent de traiter avec temporaire `Field` des objets représentant une valeur individuelle. Il existe des méthodes plus efficaces, telles que `insertFrom`, `insertRangeFrom` et ainsi de suite.
|
||||||
|
|
||||||
|
`Field` ne pas avoir assez d'informations sur un type de données spécifique pour une table. Exemple, `UInt8`, `UInt16`, `UInt32`, et `UInt64` tous sont représentés comme `UInt64` dans un `Field`.
|
||||||
|
|
||||||
|
## Abstractions Qui Fuient {#leaky-abstractions}
|
||||||
|
|
||||||
|
`IColumn` a des méthodes pour les transformations relationnelles communes des données, mais elles ne répondent pas à tous les besoins. Exemple, `ColumnUInt64` ne pas avoir une méthode pour calculer la somme des deux colonnes, et `ColumnString` n'a pas de méthode pour exécuter une recherche de sous-chaîne. Ces innombrables routines sont mises en œuvre en dehors de `IColumn`.
|
||||||
|
|
||||||
|
Diverses fonctions sur les colonnes peuvent être implémentées de manière générique et non efficace en utilisant `IColumn` méthodes pour extraire `Field` valeurs, ou d'une manière spécialisée en utilisant la connaissance de la disposition de la mémoire interne des données dans un `IColumn` application. Il est implémenté en lançant des fonctions à un `IColumn` tapez et traitez directement la représentation interne. Exemple, `ColumnUInt64` a l' `getData` méthode qui renvoie une référence à un tableau interne, puis une autre routine lit ou remplit ce tableau directement. Nous avons “leaky abstractions” permettent de spécialisations diverses routines.
|
||||||
|
|
||||||
|
## Types De Données {#data_types}
|
||||||
|
|
||||||
|
`IDataType` est responsable de la sérialisation et de la désérialisation: pour la lecture et l'écriture de morceaux de colonnes ou de valeurs individuelles sous forme binaire ou de texte. `IDataType` correspond directement aux types de données dans les tables. Par exemple, il y a `DataTypeUInt32`, `DataTypeDateTime`, `DataTypeString` et ainsi de suite.
|
||||||
|
|
||||||
|
`IDataType` et `IColumn` ne sont que faiblement liés les uns aux autres. Différents types de données peuvent être représentés en mémoire par le même `IColumn` application. Exemple, `DataTypeUInt32` et `DataTypeDateTime` sont tous deux représentés par `ColumnUInt32` ou `ColumnConstUInt32`. En outre, le même type de données peut être représentée par différents `IColumn` application. Exemple, `DataTypeUInt8` peut être représenté par `ColumnUInt8` ou `ColumnConstUInt8`.
|
||||||
|
|
||||||
|
`IDataType` stocke uniquement les métadonnées. Par exemple, `DataTypeUInt8` ne stocke rien du tout (sauf vptr) et `DataTypeFixedString` magasins juste `N` (la taille des chaînes de taille fixe).
|
||||||
|
|
||||||
|
`IDataType` a des méthodes d'aide pour différents formats de données. Des exemples sont des méthodes pour sérialiser une valeur avec des guillemets possibles, pour sérialiser une valeur pour JSON et pour sérialiser une valeur dans le format XML. Il n'y a pas de correspondance directe avec les formats de données. Par exemple, les différents formats de données `Pretty` et `TabSeparated` pouvez utiliser le même `serializeTextEscaped` méthode d'aide à partir de la `IDataType` interface.
|
||||||
|
|
||||||
|
## Bloc {#block}
|
||||||
|
|
||||||
|
A `Block` est un conteneur qui représente un sous-ensemble (morceau) d'une table en mémoire. C'est juste un ensemble de triplets: `(IColumn, IDataType, column name)`. Pendant l'exécution de la requête, les données sont traitées par `Block`s. Si nous avons un `Block`, nous disposons de données (dans le `IColumn` objet), nous avons des informations sur son type (dans `IDataType`) qui nous indique comment traiter cette colonne, et nous avons le nom de la colonne. Il peut s'agir du nom de colonne d'origine de la table ou d'un nom artificiel attribué pour obtenir des résultats temporaires de calculs.
|
||||||
|
|
||||||
|
Lorsque nous calculons une fonction sur des colonnes dans un bloc, nous ajoutons une autre colonne avec son résultat au bloc, et nous ne touchons pas les colonnes pour les arguments de la fonction car les opérations sont immuables. Plus tard, les colonnes inutiles peuvent être supprimées du bloc, mais pas modifiées. Il est pratique pour l'élimination des sous-expressions communes.
|
||||||
|
|
||||||
|
Des blocs sont créés pour chaque bloc de données traité. Notez que pour le même type de calcul, les noms et les types de colonnes restent les mêmes pour différents blocs, et seules les données de colonne changent. Il est préférable de diviser les données de bloc de l'en-tête de bloc car les petites tailles de Bloc ont une surcharge élevée de chaînes temporaires pour copier shared\_ptrs et les noms de colonnes.
|
||||||
|
|
||||||
|
## Bloquer Les Flux {#block-streams}
|
||||||
|
|
||||||
|
Les flux de blocs sont destinés au traitement des données. Nous utilisons des flux de blocs pour lire des données quelque part, effectuer des transformations de données ou écrire des données quelque part. `IBlockInputStream` a l' `read` méthode pour récupérer le bloc suivant, tandis que des. `IBlockOutputStream` a l' `write` méthode pour pousser le bloc quelque part.
|
||||||
|
|
||||||
|
Les flux sont responsables de:
|
||||||
|
|
||||||
|
1. De la lecture ou de l'écriture dans une table. La table renvoie simplement un flux pour lire ou écrire des blocs.
|
||||||
|
2. Mise en œuvre des formats de données. Par exemple, si vous souhaitez envoyer des données vers un terminal `Pretty` format, vous créez un flux de sortie de bloc où vous poussez des blocs, et il les formate.
|
||||||
|
3. Effectuer des transformations de données. Disons que vous avez `IBlockInputStream` et veulent créer un flux filtré. Vous créez `FilterBlockInputStream` et l'initialiser avec votre flux de données. Puis quand vous tirez un bloc de `FilterBlockInputStream`, il extrait un bloc de votre flux, le filtre et vous renvoie le bloc filtré. Les pipelines d'exécution des requêtes sont représentés de cette façon.
|
||||||
|
|
||||||
|
Il y a des transformations plus sophistiquées. Par exemple, lorsque vous tirez de `AggregatingBlockInputStream` il lit toutes les données à partir de sa source, agrégats, puis renvoie un flux de données agrégées pour vous. Un autre exemple: `UnionBlockInputStream` accepte de nombreuses sources d'entrée dans le constructeur et également un certain nombre de threads. Il lance plusieurs threads et lit à partir de plusieurs sources en parallèle.
|
||||||
|
|
||||||
|
> Les flux de blocs utilisent le “pull” approche pour contrôler le flux: lorsque vous extrayez un bloc du premier flux, il extrait par conséquent les blocs requis des flux imbriqués, et l'ensemble du pipeline d'exécution fonctionnera. Ni “pull” ni “push” est la meilleure solution, car le flux de contrôle est implicite, ce qui limite l'implémentation de diverses fonctionnalités telles que l'exécution simultanée de plusieurs requêtes (fusion de plusieurs pipelines ensemble). Cette limitation pourrait être surmontée avec des coroutines ou simplement en exécutant des threads supplémentaires qui s'attendent les uns aux autres. Nous pouvons avoir plus de possibilités si nous rendons le flux de contrôle explicite: si nous localisons la logique pour passer des données d'une unité de calcul à une autre en dehors de ces unités de calcul. Lire ce [article](http://journal.stuffwithstuff.com/2013/01/13/iteration-inside-and-out/) pour plus de pensées.
|
||||||
|
|
||||||
|
Il convient de noter que le pipeline d'exécution de la requête crée des données temporaires à chaque étape. Nous essayons de garder la taille du bloc suffisamment petite pour que les données temporaires tiennent dans le cache du processeur. Avec cette hypothèse, l'écriture et la lecture de données temporaires sont presque libres en comparaison avec d'autres calculs. Nous pourrions envisager une alternative, qui est de fusionner de nombreuses opérations dans le pipeline ensemble. Cela pourrait rendre le pipeline aussi court que possible et supprimer une grande partie des données temporaires, ce qui pourrait être un avantage, mais cela présente également des inconvénients. Par exemple, un pipeline divisé facilite l'implémentation de la mise en cache de données intermédiaires, le vol de données intermédiaires à partir de requêtes similaires exécutées en même temps et la fusion de pipelines pour des requêtes similaires.
|
||||||
|
|
||||||
|
## Format {#formats}
|
||||||
|
|
||||||
|
Les formats de données sont implémentés avec des flux de blocs. Il y a “presentational” formats appropriés uniquement pour la sortie de données vers le client, tels que `Pretty` format, qui fournit seulement `IBlockOutputStream`. Et il existe des formats d'entrée / sortie, tels que `TabSeparated` ou `JSONEachRow`.
|
||||||
|
|
||||||
|
Il y a aussi des flux de lignes: `IRowInputStream` et `IRowOutputStream`. Ils vous permettent de tirer/pousser des données par des lignes individuelles, pas par des blocs. Et ils ne sont nécessaires que pour simplifier la mise en œuvre des formats orientés ligne. Wrapper `BlockInputStreamFromRowInputStream` et `BlockOutputStreamFromRowOutputStream` vous permet de convertir des flux orientés ligne en flux orientés blocs réguliers.
|
||||||
|
|
||||||
|
## I/O {#io}
|
||||||
|
|
||||||
|
Pour l'entrée/sortie orientée octet, il y a `ReadBuffer` et `WriteBuffer` les classes abstraites. Ils sont utilisés à la place de C++ `iostream`s. Ne vous inquiétez pas: chaque projet c++ mature utilise autre chose que `iostream`s pour de bonnes raisons.
|
||||||
|
|
||||||
|
`ReadBuffer` et `WriteBuffer` sont juste un tampon contigu et un curseur pointant vers la position dans ce tampon. Les implémentations peuvent posséder ou non la mémoire du tampon. Il existe une méthode virtuelle pour remplir le tampon avec les données suivantes (pour `ReadBuffer`) ou pour vider le tampon quelque part (pour `WriteBuffer`). Les méthodes virtuelles sont rarement cités.
|
||||||
|
|
||||||
|
Les implémentations de `ReadBuffer`/`WriteBuffer` sont utilisés pour travailler avec des fichiers et des descripteurs de fichiers et des sockets réseau, pour implémenter la compression (`CompressedWriteBuffer` is initialized with another WriteBuffer and performs compression before writing data to it), and for other purposes – the names `ConcatReadBuffer`, `LimitReadBuffer`, et `HashingWriteBuffer` parler pour eux-mêmes.
|
||||||
|
|
||||||
|
Read / WriteBuffers ne traite que les octets. Il y a des fonctions de `ReadHelpers` et `WriteHelpers` fichiers d'en-tête pour aider à formater l'entrée / sortie. Par exemple, il existe des assistants pour écrire un nombre au format décimal.
|
||||||
|
|
||||||
|
Regardons ce qui se passe lorsque vous voulez écrire un ensemble de résultats dans `JSON` format de sortie standard (stdout). Vous avez un jeu de résultats prêt à être récupéré `IBlockInputStream`. Vous créez `WriteBufferFromFileDescriptor(STDOUT_FILENO)` pour écrire des octets dans stdout. Vous créez `JSONRowOutputStream`, initialisé avec qui `WriteBuffer`, pour écrire des lignes dans `JSON` à stdout. Vous créez `BlockOutputStreamFromRowOutputStream` de plus, pour la représenter comme `IBlockOutputStream`. Ensuite, vous appelez `copyData` pour transférer des données de `IBlockInputStream` de `IBlockOutputStream` et tout fonctionne. Interne, `JSONRowOutputStream` écrira divers délimiteurs JSON et appellera `IDataType::serializeTextJSON` méthode avec une référence à `IColumn` et le numéro de ligne comme arguments. Conséquent, `IDataType::serializeTextJSON` appellera une méthode de `WriteHelpers.h`: exemple, `writeText` pour les types numériques et `writeJSONString` pour `DataTypeString`.
|
||||||
|
|
||||||
|
## Table {#tables}
|
||||||
|
|
||||||
|
Le `IStorage` l'interface représente les tables. Différentes implémentations de cette interface sont des moteurs de table différents. Les exemples sont `StorageMergeTree`, `StorageMemory` et ainsi de suite. Les Instances de ces classes ne sont que des tables.
|
||||||
|
|
||||||
|
Clé `IStorage` les méthodes sont `read` et `write`. Il y a aussi des `alter`, `rename`, `drop` et ainsi de suite. Le `read` méthode accepte les arguments suivants: l'ensemble de colonnes à lire à partir d'un tableau, l' `AST` requête à considérer, et le nombre souhaité de flux de retour. Il renvoie un ou plusieurs `IBlockInputStream` objets et informations sur l'étape de traitement des données qui a été effectuée dans un moteur de table lors de l'exécution de la requête.
|
||||||
|
|
||||||
|
Dans la plupart des cas, la méthode read n'est responsable que de la lecture des colonnes spécifiées à partir d'une table, et non d'un traitement ultérieur des données. Tout traitement ultérieur des données est effectué par l'interpréteur de requêtes et n'est pas de la responsabilité de `IStorage`.
|
||||||
|
|
||||||
|
Mais il y a des exceptions notables:
|
||||||
|
|
||||||
|
- La requête AST est transmise au `read` et le moteur de table peut l'utiliser pour dériver l'utilisation de l'index et pour lire moins de données à partir d'une table.
|
||||||
|
- Parfois, le moteur de table peut traiter les données lui-même à une étape spécifique. Exemple, `StorageDistributed` peut envoyer une requête aux serveurs distants, leur demander de traiter les données à une étape où les données de différents serveurs distants peuvent être fusionnées, et renvoyer ces données prétraitées. L'interpréteur de requête termine ensuite le traitement des données.
|
||||||
|
|
||||||
|
Table `read` la méthode peut retourner plusieurs `IBlockInputStream` objets permettant le traitement parallèle des données. Ces flux d'entrée de bloc multiples peuvent lire à partir d'une table en parallèle. Ensuite, vous pouvez envelopper ces flux avec diverses transformations (telles que l'évaluation d'expression ou le filtrage) qui peuvent être calculées indépendamment et créer un `UnionBlockInputStream` en plus d'eux, pour lire à partir de plusieurs flux en parallèle.
|
||||||
|
|
||||||
|
Il y a aussi des `TableFunction`s. Ce sont des fonctions qui renvoient un `IStorage` objet à utiliser dans le `FROM` la clause d'une requête.
|
||||||
|
|
||||||
|
Pour avoir une idée rapide de la façon d'implémenter votre moteur de table, regardez quelque chose de simple, comme `StorageMemory` ou `StorageTinyLog`.
|
||||||
|
|
||||||
|
> Comme le résultat de l' `read` méthode, `IStorage` retourner `QueryProcessingStage` – information about what parts of the query were already calculated inside storage.
|
||||||
|
|
||||||
|
## Analyseur {#parsers}
|
||||||
|
|
||||||
|
Un analyseur de descente récursif écrit à la main analyse une requête. Exemple, `ParserSelectQuery` appelle simplement récursivement les analyseurs sous-jacents pour diverses parties de la requête. Les analyseurs créent un `AST`. Le `AST` est représenté par des nœuds, qui sont des instances de `IAST`.
|
||||||
|
|
||||||
|
> Les générateurs d'analyseurs ne sont pas utilisés pour des raisons historiques.
|
||||||
|
|
||||||
|
## Interprète {#interpreters}
|
||||||
|
|
||||||
|
Les interprètes sont responsables de la création du pipeline d'exécution des requêtes à partir `AST`. Il existe des interprètes simples, tels que `InterpreterExistsQuery` et `InterpreterDropQuery` ou le plus sophistiqué de `InterpreterSelectQuery`. Le pipeline d'exécution de requête est une combinaison de flux d'entrée ou de sortie de bloc. Par exemple, le résultat de l'interprétation de la `SELECT` la requête est la `IBlockInputStream` pour lire le jeu de résultats; le résultat de la requête d'INSERTION est l' `IBlockOutputStream` pour écrire des données à insérer, et le résultat de l'interprétation `INSERT SELECT` la requête est la `IBlockInputStream` cela renvoie un jeu de résultats vide lors de la première lecture, mais qui copie `SELECT` de `INSERT` dans le même temps.
|
||||||
|
|
||||||
|
`InterpreterSelectQuery` utiliser `ExpressionAnalyzer` et `ExpressionActions` machines pour l'analyse des requêtes et des transformations. C'est là que la plupart des optimisations de requêtes basées sur des règles sont effectuées. `ExpressionAnalyzer` est assez désordonné et devrait être réécrit: diverses transformations et optimisations de requête doivent être extraites dans des classes séparées pour permettre des transformations modulaires ou une requête.
|
||||||
|
|
||||||
|
## Fonction {#functions}
|
||||||
|
|
||||||
|
Il y a des fonctions ordinaires et des fonctions agrégées. Pour les fonctions d'agrégation, voir la section suivante.
|
||||||
|
|
||||||
|
Ordinary functions don't change the number of rows – they work as if they are processing each row independently. In fact, functions are not called for individual rows, but for `Block`'s de données pour implémenter l'exécution de requête vectorisée.
|
||||||
|
|
||||||
|
Il y a quelques fonctions diverses, comme [la taille de bloc](../query_language/functions/other_functions.md#function-blocksize), [rowNumberInBlock](../query_language/functions/other_functions.md#function-rownumberinblock), et [runningAccumulate](../query_language/functions/other_functions.md#function-runningaccumulate), qui exploitent le traitement de bloc et violent l'indépendance des lignes.
|
||||||
|
|
||||||
|
ClickHouse a un typage fort, donc il n'y a pas de conversion de type implicite. Si une fonction ne prend pas en charge une combinaison spécifique de types, elle lève une exception. Mais les fonctions peuvent fonctionner (être surchargées) pour de nombreuses combinaisons de types différentes. Par exemple, l' `plus` fonction (pour mettre en œuvre la `+` opérateur) fonctionne pour toute combinaison de types numériques: `UInt8` + `Float32`, `UInt16` + `Int8` et ainsi de suite. En outre, certaines fonctions variadiques peuvent accepter n'importe quel nombre d'arguments, tels que `concat` fonction.
|
||||||
|
|
||||||
|
L'implémentation d'une fonction peut être légèrement gênante car une fonction distribue explicitement les types de données pris en charge et pris en charge `IColumns`. Par exemple, l' `plus` la fonction a du code généré par l'instanciation D'un modèle C++ pour chaque combinaison de types numériques, et des arguments gauche et droit constants ou non constants.
|
||||||
|
|
||||||
|
C'est un excellent endroit pour implémenter la génération de code d'exécution pour éviter le gonflement du code de modèle. En outre, il permet d'ajouter des fonctions fusionnées comme Fusionné Multiplier-Ajouter ou de faire plusieurs comparaisons dans une itération de boucle.
|
||||||
|
|
||||||
|
En raison de l'exécution de requête vectorisée, les fonctions ne sont pas court-circuitées. Par exemple, si vous écrivez `WHERE f(x) AND g(y)` les deux faces sont calculés, même pour les lignes, quand `f(x)` est égal à zéro (sauf quand `f(x)` est une expression constante nulle). Mais si la sélectivité de l' `f(x)` la condition est élevée, et le calcul de `f(x)` est beaucoup moins cher que `g(y)`, il est préférable d'implémenter le calcul multi-pass. Il serait d'abord calculer `f(x)` puis filtrer les colonnes par la suite, puis de calculer `g(y)` uniquement pour les petits morceaux de données filtrés.
|
||||||
|
|
||||||
|
## Les Fonctions D'Agrégation {#aggregate-functions}
|
||||||
|
|
||||||
|
Les fonctions d'agrégation sont des fonctions avec État. Ils accumulent les valeurs passées dans certains etats et vous permettent d'obtenir des résultats de cet état. Ils sont gérés avec le `IAggregateFunction` interface. Les États peuvent être assez simples (l'État pour `AggregateFunctionCount` est juste un seul `UInt64` valeur) ou très complexes (l'état de `AggregateFunctionUniqCombined` est une combinaison linéaire du tableau, d'une table de hachage, et un `HyperLogLog` structure probabiliste des données).
|
||||||
|
|
||||||
|
Les États sont répartis en `Arena` (un pool de mémoire) pour traiter plusieurs états lors de l'exécution d'une cardinalité élevée `GROUP BY` requête. Les États peuvent avoir un constructeur et un destructeur non triviaux: par exemple, les États d'agrégation compliqués peuvent allouer eux-mêmes de la mémoire supplémentaire. Il faut accorder une certaine attention à la création et à la destruction des États et à la transmission appropriée de leur propriété et de leur ordre de destruction.
|
||||||
|
|
||||||
|
Les États d'agrégation peuvent être sérialisés et désérialisés pour passer sur le réseau pendant l'exécution de la requête distribuée ou pour les écrire sur le disque où il n'y a pas assez de RAM. Ils peuvent même être stockés dans une table avec le `DataTypeAggregateFunction` pour permettre l'agrégation incrémentielle des données.
|
||||||
|
|
||||||
|
> Le format de données sérialisé pour les états de fonction d'agrégat n'est pas versionné pour le moment. C'est ok si les États d'agrégat ne sont stockés que temporairement. Mais nous avons l' `AggregatingMergeTree` moteur de table pour l'agrégation incrémentielle, et les gens l'utilisent déjà en production. C'est la raison pour laquelle la rétrocompatibilité est requise lors de la modification du format sérialisé pour toute fonction d'agrégat à l'avenir.
|
||||||
|
|
||||||
|
## Serveur {#server}
|
||||||
|
|
||||||
|
Le serveur implémente plusieurs interfaces différentes:
|
||||||
|
|
||||||
|
- Une interface HTTP pour tous les clients étrangers.
|
||||||
|
- Une interface TCP pour le client clickhouse natif et pour la communication inter-serveur lors de l'exécution de la requête distribuée.
|
||||||
|
- Une interface pour transférer des données pour la réplication.
|
||||||
|
|
||||||
|
En interne, il s'agit simplement d'un serveur multithread primitif sans coroutines ni fibres. Étant donné que le serveur n'est pas conçu pour traiter un taux élevé de requêtes simples, mais pour traiter un taux relativement faible de requêtes complexes, chacun d'eux peut traiter une grande quantité de données à des fins d'analyse.
|
||||||
|
|
||||||
|
Le serveur initialise le `Context` classe avec l'environnement nécessaire à l'exécution des requêtes: la liste des bases de données disponibles, des utilisateurs et des droits d'accès, des paramètres, des clusters, la liste des processus, le journal des requêtes, etc. Les interprètes utilisent cet environnement.
|
||||||
|
|
||||||
|
Nous maintenons une compatibilité ascendante et descendante complète pour le protocole TCP du serveur: les anciens clients peuvent parler à de nouveaux serveurs, et les nouveaux clients peuvent parler à d'anciens serveurs. Mais nous ne voulons pas le maintenir éternellement, et nous supprimons le support pour les anciennes versions après environ un an.
|
||||||
|
|
||||||
|
!!! note "Note"
|
||||||
|
Pour la plupart des applications externes, nous vous recommandons d'utiliser L'interface HTTP car elle est simple et facile à utiliser. Le protocole TCP est plus étroitement lié aux structures de données internes: il utilise un format interne pour passer des blocs de données, et il utilise un cadrage personnalisé pour les données compressées. Nous n'avons pas publié de bibliothèque C pour ce protocole car elle nécessite de lier la plupart de la base de code ClickHouse, ce qui n'est pas pratique.
|
||||||
|
|
||||||
|
## Exécution De Requête Distribuée {#distributed-query-execution}
|
||||||
|
|
||||||
|
Les serveurs d'une configuration de cluster sont pour la plupart indépendants. Vous pouvez créer un `Distributed` table sur un ou tous les serveurs dans un cluster. Le `Distributed` table does not store data itself – it only provides a “view” à toutes les tables sur plusieurs nœuds d'un cluster. Lorsque vous sélectionnez à partir d'un `Distributed` table, il réécrit cette requête, choisit les nœuds distants en fonction des paramètres d'équilibrage de charge et leur envoie la requête. Le `Distributed` table demande aux serveurs distants de traiter une requête jusqu'à une étape où les résultats intermédiaires de différents serveurs peuvent être fusionnés. Puis il reçoit les résultats intermédiaires et les fusionne. La table distribuée essaie de distribuer autant de travail que possible aux serveurs distants et n'envoie pas beaucoup de données intermédiaires sur le réseau.
|
||||||
|
|
||||||
|
Les choses deviennent plus compliquées lorsque vous avez des sous-requêtes dans des clauses IN ou JOIN, et que chacune d'elles utilise un `Distributed` table. Nous avons différentes stratégies pour l'exécution de ces requêtes.
|
||||||
|
|
||||||
|
Il n'existe pas de plan de requête global pour l'exécution des requêtes distribuées. Chaque nœud a son plan de requête local pour sa partie du travail. Nous n'avons qu'une simple exécution de requête distribuée en une seule passe: nous envoyons des requêtes pour les nœuds distants, puis fusionnons les résultats. Mais cela n'est pas possible pour les requêtes compliquées avec des groupes de cardinalité élevés ou avec une grande quantité de données temporaires pour la jointure. Dans de tels cas, nous avons besoin de “reshuffle” données entre les serveurs, ce qui nécessite une coordination supplémentaire. ClickHouse ne supporte pas ce type d'exécution de requête, et nous devons y travailler.
|
||||||
|
|
||||||
|
## Fusion De L'Arbre {#merge-tree}
|
||||||
|
|
||||||
|
`MergeTree` est une famille de moteurs de stockage qui prend en charge l'indexation par clé primaire. La clé primaire peut être un tuple arbitraire de colonnes ou d'expressions. De données dans un `MergeTree` la table est stockée dans “parts”. Chaque partie stocke les données dans l'ordre de la clé primaire, de sorte que les données sont ordonnées lexicographiquement par le tuple de clé primaire. Toutes les colonnes du tableau sont stockés dans différents `column.bin` les fichiers dans ces régions. Les fichiers sont constitués de blocs compressés. Chaque bloc est généralement de 64 KO à 1 Mo de données non compressées, en fonction de la taille de la valeur moyenne. Les blocs sont constitués de valeurs de colonne placées de manière contiguë l'une après l'autre. Les valeurs de colonne sont dans le même ordre pour chaque colonne (la clé primaire définit l'ordre), donc lorsque vous itérez par plusieurs colonnes, vous obtenez des valeurs pour les lignes correspondantes.
|
||||||
|
|
||||||
|
La clé primaire elle-même est “sparse”. Il ne traite pas chaque ligne, mais seulement certaines plages de données. Séparé `primary.idx` fichier a la valeur de la clé primaire pour chaque N-ième ligne, où N est appelé `index_granularity` (habituellement, N = 8192). Aussi, pour chaque colonne, nous avons `column.mrk` les fichiers avec l' “marks,” qui sont des décalages à chaque N-ème ligne dans le fichier de données. Chaque marque est une paire: le décalage dans le fichier au début du bloc compressé, et le décalage dans le bloc décompressé au début des données. Habituellement, les blocs compressés sont alignés par des marques, et le décalage dans le bloc décompressé est nul. Les données pour `primary.idx` réside toujours dans la mémoire, et les données pour `column.mrk` les fichiers sont mis en cache.
|
||||||
|
|
||||||
|
Quand nous allons lire quelque chose d'une partie dans `MergeTree` nous regardons `primary.idx` données et locate plages qui pourraient contenir des données demandées, puis regardez `column.mrk` données et calculer des décalages pour savoir où commencer à lire ces plages. En raison de la rareté, les données excédentaires peuvent être lues. ClickHouse ne convient pas à une charge élevée de requêtes ponctuelles simples, car toute la gamme avec `index_granularity` les lignes doivent être lues pour chaque clé, et le bloc compressé entier doit être décompressé pour chaque colonne. Nous avons rendu l'index clairsemé parce que nous devons être en mesure de maintenir des milliards de lignes par serveur unique sans consommation de mémoire notable pour l'index. De plus, comme la clé primaire est clairsemée, elle n'est pas unique: elle ne peut pas vérifier l'existence de la clé dans la table au moment de l'insertion. Vous pourriez avoir plusieurs lignes avec la même clé dans une table.
|
||||||
|
|
||||||
|
Lorsque vous `INSERT` un tas de données dans `MergeTree`, ce groupe est trié par ordre de clé primaire et forme une nouvelle partie. Il existe des threads d'arrière-plan qui sélectionnent périodiquement certaines parties et les fusionnent en une seule partie triée pour maintenir le nombre de parties relativement faible. C'est pourquoi il est appelé `MergeTree`. Bien sûr, la fusion conduit à “write amplification”. Toutes les parties sont immuables: elles sont seulement créées et supprimées, mais pas modifiées. Lorsque SELECT est exécuté, il contient un instantané de la table (un ensemble de parties). Après la Fusion, nous conservons également les anciennes pièces pendant un certain temps pour faciliter une récupération après une défaillance, donc si nous voyons qu'une partie fusionnée est probablement cassée, nous pouvons la remplacer par ses parties sources.
|
||||||
|
|
||||||
|
`MergeTree` n'est pas un arbre LSM car il ne contient pas “memtable” et “log”: inserted data is written directly to the filesystem. This makes it suitable only to INSERT data in batches, not by individual row and not very frequently – about once per second is ok, but a thousand times a second is not. We did it this way for simplicity's sake, and because we are already inserting data in batches in our applications.
|
||||||
|
|
||||||
|
> Les tables MergeTree ne peuvent avoir qu'un seul index (primaire): il n'y a pas d'index secondaires. Il serait bon d'autoriser plusieurs représentations physiques sous une table logique, par exemple, pour stocker des données dans plus d'un ordre physique ou même pour autoriser des représentations avec des données pré-agrégées avec des données originales.
|
||||||
|
|
||||||
|
Il existe des moteurs MergeTree qui effectuent un travail supplémentaire lors des fusions en arrière-plan. Les exemples sont `CollapsingMergeTree` et `AggregatingMergeTree`. Cela pourrait être traité comme un support spécial pour les mises à jour. Gardez à l'esprit que ce ne sont pas de vraies mises à jour car les utilisateurs n'ont généralement aucun contrôle sur le moment où les fusions en arrière-plan sont exécutées et les données dans un `MergeTree` la table est presque toujours stockée dans plus d'une partie, pas sous une forme complètement fusionnée.
|
||||||
|
|
||||||
|
## Réplication {#replication}
|
||||||
|
|
||||||
|
La réplication dans ClickHouse peut être configurée sur une base par table. Vous pouvez avoir des tables répliquées et des tables non répliquées sur le même serveur. Vous pouvez également avoir des tables répliquées de différentes manières, comme une table avec une réplication à deux facteurs et une autre avec trois facteurs.
|
||||||
|
|
||||||
|
La réplication est implémentée dans le `ReplicatedMergeTree` moteur de stockage. Le chemin d'accès dans `ZooKeeper` est spécifié comme paramètre pour le moteur de stockage. Toutes les tables avec le même chemin dans `ZooKeeper` devenez des répliques les unes des autres: elles synchronisent leurs données et maintiennent la cohérence. Les répliques peuvent être ajoutées et supprimées dynamiquement simplement en créant ou en supprimant une table.
|
||||||
|
|
||||||
|
La réplication utilise un schéma multi-maître asynchrone. Vous pouvez insérer des données dans n'importe quel réplica qui a une session avec `ZooKeeper`, et les données sont répliquées à toutes les autres répliques de manière asynchrone. Parce que ClickHouse ne prend pas en charge les mises à jour, la réplication est sans conflit. Comme il n'y a pas d'accusé de réception de quorum des insertions, les données juste insérées peuvent être perdues si un nœud échoue.
|
||||||
|
|
||||||
|
Les métadonnées pour la réplication sont stockées dans ZooKeeper. Il existe un journal de réplication qui répertorie les actions à effectuer. Les Actions sont: obtenir une partie; fusionner des parties; déposer une partition, et ainsi de suite. Chaque réplica copie le journal de réplication dans sa file d'attente, puis exécute les actions de la file d'attente. Par exemple, sur l'insertion, l' “get the part” l'action est créée dans le journal, et chaque réplique téléchargements de la partie. Les fusions sont coordonnées entre les répliques pour obtenir des résultats identiques aux octets. Toutes les parties sont fusionnées de la même manière sur toutes les répliques. Il est réalisé en élisant une réplique en tant que leader, et cette réplique initie fusionne et écrit “merge parts” actions dans le journal.
|
||||||
|
|
||||||
|
La réplication est physique: seules les parties compressées sont transférées entre les nœuds, pas les requêtes. Les fusions sont traitées sur chaque réplique indépendamment dans la plupart des cas pour réduire les coûts du réseau en évitant l'amplification du réseau. Grand fusionné les pièces sont envoyées sur le réseau uniquement en cas de retard de réplication.
|
||||||
|
|
||||||
|
En outre, chaque réplique stocke son état dans ZooKeeper comme l'ensemble des pièces et ses sommes de contrôle. Lorsque l'état sur le système de fichiers local diverge de l'état de référence dans ZooKeeper, le réplica restaure sa cohérence en téléchargeant les parties manquantes et brisées à partir d'autres réplicas. Lorsqu'il y a des données inattendues ou brisées dans le système de fichiers local, ClickHouse ne les supprime pas, mais les déplace dans un répertoire séparé et les oublie.
|
||||||
|
|
||||||
|
!!! note "Note"
|
||||||
|
Le cluster ClickHouse est constitué de fragments indépendants, et chaque fragment est constitué de répliques. Le cluster est **pas élastique**, donc, après avoir ajouté un nouveau fragment, les données ne sont pas rééquilibrées automatiquement entre les fragments. Au lieu de cela, la charge du cluster est censée être ajustée pour être inégale. Cette implémentation vous donne plus de contrôle, et c'est ok pour des clusters relativement petits, tels que des dizaines de nœuds. Mais pour les clusters avec des centaines de nœuds que nous utilisons en production, cette approche devient un inconvénient important. Nous devrions implémenter un moteur de table qui s'étend sur le cluster avec des régions répliquées dynamiquement qui pourraient être divisées et équilibrées automatiquement entre les clusters.
|
||||||
|
|
||||||
|
{## [Article Original](https://clickhouse.tech/docs/en/development/architecture/) ##}
|
11
docs/fr/development/browse_code.md
Normal file
11
docs/fr/development/browse_code.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Parcourir Le Code Source De ClickHouse {#browse-clickhouse-source-code}
|
||||||
|
|
||||||
|
Vous pouvez utiliser **Woboq** navigateur de code en ligne disponible [ici](https://clickhouse-test-reports.s3.yandex.net/codebrowser/html_report///ClickHouse/dbms/src/index.html). Il fournit la navigation de code et la mise en évidence sémantique, la recherche et l'indexation. L'instantané de code est mis à jour quotidiennement.
|
||||||
|
|
||||||
|
Aussi, vous pouvez parcourir les sources sur [GitHub](https://github.com/ClickHouse/ClickHouse) comme à l'habitude.
|
||||||
|
|
||||||
|
Si vous êtes intéressé par L'IDE à utiliser, nous vous recommandons CLion, Qt Creator, VS Code et KDevelop (avec des mises en garde). Vous pouvez utiliser N'importe quel IDE préféré. Vim et Emacs comptent également.
|
138
docs/fr/development/build.md
Normal file
138
docs/fr/development/build.md
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Comment Construire ClickHouse pour le développement {#how-to-build-clickhouse-for-development}
|
||||||
|
|
||||||
|
Le tutoriel suivant est basé sur le système Linux Ubuntu.
|
||||||
|
Avec les modifications appropriées, il devrait également fonctionner sur toute autre distribution Linux.
|
||||||
|
Plates-formes prises en charge: x86\_64 et AArch64. La prise en charge de Power9 est expérimentale.
|
||||||
|
|
||||||
|
## Installez Git, CMake, Python et Ninja {#install-git-cmake-python-and-ninja}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ sudo apt-get install git cmake python ninja-build
|
||||||
|
```
|
||||||
|
|
||||||
|
Ou cmake3 au lieu de cmake sur les systèmes plus anciens.
|
||||||
|
|
||||||
|
## Installer GCC 9 {#install-gcc-9}
|
||||||
|
|
||||||
|
Il y a plusieurs façons de le faire.
|
||||||
|
|
||||||
|
### Installer à partir d'un paquet PPA {#install-from-a-ppa-package}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ sudo apt-get install software-properties-common
|
||||||
|
$ sudo apt-add-repository ppa:ubuntu-toolchain-r/test
|
||||||
|
$ sudo apt-get update
|
||||||
|
$ sudo apt-get install gcc-9 g++-9
|
||||||
|
```
|
||||||
|
|
||||||
|
### Installer à partir de Sources {#install-from-sources}
|
||||||
|
|
||||||
|
Regarder [utils/ci/build-gcc-from-sources.sh](https://github.com/ClickHouse/ClickHouse/blob/master/utils/ci/build-gcc-from-sources.sh)
|
||||||
|
|
||||||
|
## Utilisez GCC 9 pour les Builds {#use-gcc-9-for-builds}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ export CC=gcc-9
|
||||||
|
$ export CXX=g++-9
|
||||||
|
```
|
||||||
|
|
||||||
|
## Commander Clickhouse Sources {#checkout-clickhouse-sources}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ git clone --recursive git@github.com:ClickHouse/ClickHouse.git
|
||||||
|
```
|
||||||
|
|
||||||
|
ou
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ git clone --recursive https://github.com/ClickHouse/ClickHouse.git
|
||||||
|
```
|
||||||
|
|
||||||
|
## Construire ClickHouse {#build-clickhouse}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ cd ClickHouse
|
||||||
|
$ mkdir build
|
||||||
|
$ cd build
|
||||||
|
$ cmake ..
|
||||||
|
$ ninja
|
||||||
|
$ cd ..
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour créer un exécutable, exécutez `ninja clickhouse`.
|
||||||
|
Cela va créer de l' `dbms/programs/clickhouse` exécutable, qui peut être utilisé avec `client` ou `server` argument.
|
||||||
|
|
||||||
|
# Comment Construire ClickHouse sur N'importe quel Linux {#how-to-build-clickhouse-on-any-linux}
|
||||||
|
|
||||||
|
La construction nécessite les composants suivants:
|
||||||
|
|
||||||
|
- Git (est utilisé uniquement pour extraire les sources, ce n'est pas nécessaire pour la construction)
|
||||||
|
- CMake 3.10 ou plus récent
|
||||||
|
- Ninja (recommandé) ou faire
|
||||||
|
- Compilateur C++: gcc 9 ou clang 8 ou plus récent
|
||||||
|
- Linker: lld ou gold (le classique GNU LD ne fonctionnera pas)
|
||||||
|
- Python (est seulement utilisé dans la construction LLVM et il est facultatif)
|
||||||
|
|
||||||
|
Si tous les composants sont installés, vous pouvez construire de la même manière que les étapes ci-dessus.
|
||||||
|
|
||||||
|
Exemple pour Ubuntu Eoan:
|
||||||
|
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install git cmake ninja-build g++ python
|
||||||
|
git clone --recursive https://github.com/ClickHouse/ClickHouse.git
|
||||||
|
mkdir build && cd build
|
||||||
|
cmake ../ClickHouse
|
||||||
|
ninja
|
||||||
|
|
||||||
|
Exemple Pour openSUSE Tumbleweed:
|
||||||
|
|
||||||
|
sudo zypper install git cmake ninja gcc-c++ python lld
|
||||||
|
git clone --recursive https://github.com/ClickHouse/ClickHouse.git
|
||||||
|
mkdir build && cd build
|
||||||
|
cmake ../ClickHouse
|
||||||
|
ninja
|
||||||
|
|
||||||
|
Exemple Pour Fedora Rawhide:
|
||||||
|
|
||||||
|
sudo yum update
|
||||||
|
yum --nogpg install git cmake make gcc-c++ python2
|
||||||
|
git clone --recursive https://github.com/ClickHouse/ClickHouse.git
|
||||||
|
mkdir build && cd build
|
||||||
|
cmake ../ClickHouse
|
||||||
|
make -j $(nproc)
|
||||||
|
|
||||||
|
# Vous N'avez pas à construire ClickHouse {#you-dont-have-to-build-clickhouse}
|
||||||
|
|
||||||
|
ClickHouse est disponible dans des binaires et des paquets pré-construits. Les binaires sont portables et peuvent être exécutés sur N'importe quelle saveur Linux.
|
||||||
|
|
||||||
|
Ils sont conçus pour les versions stables, préconfigurables et de test aussi longtemps que pour chaque commit à master et pour chaque requête d'extraction.
|
||||||
|
|
||||||
|
Pour trouver la construction la plus fraîche de `master`, aller à [page commits](https://github.com/ClickHouse/ClickHouse/commits/master), cliquez sur la première coche verte ou Croix Rouge près de commit, et cliquez sur le “Details” lien à droite après “ClickHouse Build Check”.
|
||||||
|
|
||||||
|
# Comment construire le paquet ClickHouse Debian {#how-to-build-clickhouse-debian-package}
|
||||||
|
|
||||||
|
## Installer Git et Pbuilder {#install-git-and-pbuilder}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ sudo apt-get update
|
||||||
|
$ sudo apt-get install git python pbuilder debhelper lsb-release fakeroot sudo debian-archive-keyring debian-keyring
|
||||||
|
```
|
||||||
|
|
||||||
|
## Commander Clickhouse Sources {#checkout-clickhouse-sources-1}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ git clone --recursive --branch master https://github.com/ClickHouse/ClickHouse.git
|
||||||
|
$ cd ClickHouse
|
||||||
|
```
|
||||||
|
|
||||||
|
## Exécuter Le Script De Publication {#run-release-script}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ ./release
|
||||||
|
```
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/development/build/) <!--hide-->
|
40
docs/fr/development/build_cross_arm.md
Normal file
40
docs/fr/development/build_cross_arm.md
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Comment Construire ClickHouse sur Linux pour l'architecture AARCH64 (ARM64) {#how-to-build-clickhouse-on-linux-for-aarch64-arm64-architecture}
|
||||||
|
|
||||||
|
C'est pour le cas où vous avez machine Linux et que vous voulez utiliser pour construire `clickhouse` binaire qui fonctionnera sur une autre machine Linux avec une architecture CPU AARCH64. Ceci est destiné aux contrôles d'intégration continus qui s'exécutent sur des serveurs Linux.
|
||||||
|
|
||||||
|
La construction croisée pour AARCH64 est basée sur [Instructions de construction](build.md), suivez d'abord.
|
||||||
|
|
||||||
|
# Installer Clang-8 {#install-clang-8}
|
||||||
|
|
||||||
|
Suivez les instructions de https://apt.llvm.org/ pour votre configuration Ubuntu ou Debian.
|
||||||
|
Par exemple, dans Ubuntu Bionic vous pouvez utiliser les commandes suivantes:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
echo "deb [trusted=yes] http://apt.llvm.org/bionic/ llvm-toolchain-bionic-8 main" | sudo tee /etc/apt/sources.list.d/llvm.list
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install clang-8
|
||||||
|
```
|
||||||
|
|
||||||
|
# Installer Un Ensemble D'Outils De Compilation Croisée {#install-cross-compilation-toolset}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
cd ClickHouse
|
||||||
|
mkdir -p build-aarch64/cmake/toolchain/linux-aarch64
|
||||||
|
wget 'https://developer.arm.com/-/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz?revision=2e88a73f-d233-4f96-b1f4-d8b36e9bb0b9&la=en' -O gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz
|
||||||
|
tar xJf gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz -C build-aarch64/cmake/toolchain/linux-aarch64 --strip-components=1
|
||||||
|
```
|
||||||
|
|
||||||
|
# Construire ClickHouse {#build-clickhouse}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
cd ClickHouse
|
||||||
|
mkdir build-arm64
|
||||||
|
CC=clang-8 CXX=clang++-8 cmake . -Bbuild-arm64 -DCMAKE_TOOLCHAIN_FILE=cmake/linux/toolchain-aarch64.cmake
|
||||||
|
ninja -C build-arm64
|
||||||
|
```
|
||||||
|
|
||||||
|
Le binaire résultant s'exécutera uniquement sur Linux avec l'architecture CPU AARCH64.
|
61
docs/fr/development/build_cross_osx.md
Normal file
61
docs/fr/development/build_cross_osx.md
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Comment Construire ClickHouse sur Linux pour Mac OS X {#how-to-build-clickhouse-on-linux-for-mac-os-x}
|
||||||
|
|
||||||
|
C'est pour le cas où vous avez machine Linux et que vous voulez utiliser pour construire `clickhouse` binaire qui s'exécutera sur OS X. Ceci est destiné aux contrôles d'intégration continus qui s'exécutent sur des serveurs Linux. Si vous voulez construire ClickHouse directement sur Mac OS X, puis procéder à [une autre instruction](build_osx.md).
|
||||||
|
|
||||||
|
Le cross-build pour Mac OS X est basé sur le [Instructions de construction](build.md), suivez d'abord.
|
||||||
|
|
||||||
|
# Installer Clang-8 {#install-clang-8}
|
||||||
|
|
||||||
|
Suivez les instructions de https://apt.llvm.org/ pour votre configuration Ubuntu ou Debian.
|
||||||
|
Par exemple les commandes pour Bionic sont comme:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
sudo echo "deb [trusted=yes] http://apt.llvm.org/bionic/ llvm-toolchain-bionic-8 main" >> /etc/apt/sources.list
|
||||||
|
sudo apt-get install clang-8
|
||||||
|
```
|
||||||
|
|
||||||
|
# Installer Un Ensemble D'Outils De Compilation Croisée {#install-cross-compilation-toolset}
|
||||||
|
|
||||||
|
Souvenons nous du chemin où nous installons `cctools` comme ${CCTOOLS}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
mkdir ${CCTOOLS}
|
||||||
|
|
||||||
|
git clone https://github.com/tpoechtrager/apple-libtapi.git
|
||||||
|
cd apple-libtapi
|
||||||
|
INSTALLPREFIX=${CCTOOLS} ./build.sh
|
||||||
|
./install.sh
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
git clone https://github.com/tpoechtrager/cctools-port.git
|
||||||
|
cd cctools-port/cctools
|
||||||
|
./configure --prefix=${CCTOOLS} --with-libtapi=${CCTOOLS} --target=x86_64-apple-darwin
|
||||||
|
make install
|
||||||
|
```
|
||||||
|
|
||||||
|
En outre, nous devons télécharger macOS X SDK dans l'arbre de travail.
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
cd ClickHouse
|
||||||
|
wget 'https://github.com/phracker/MacOSX-SDKs/releases/download/10.14-beta4/MacOSX10.14.sdk.tar.xz'
|
||||||
|
mkdir -p build-darwin/cmake/toolchain/darwin-x86_64
|
||||||
|
tar xJf MacOSX10.14.sdk.tar.xz -C build-darwin/cmake/toolchain/darwin-x86_64 --strip-components=1
|
||||||
|
```
|
||||||
|
|
||||||
|
# Construire ClickHouse {#build-clickhouse}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
cd ClickHouse
|
||||||
|
mkdir build-osx
|
||||||
|
CC=clang-8 CXX=clang++-8 cmake . -Bbuild-osx -DCMAKE_TOOLCHAIN_FILE=cmake/darwin/toolchain-x86_64.cmake \
|
||||||
|
-DCMAKE_AR:FILEPATH=${CCTOOLS}/bin/x86_64-apple-darwin-ar \
|
||||||
|
-DCMAKE_RANLIB:FILEPATH=${CCTOOLS}/bin/x86_64-apple-darwin-ranlib \
|
||||||
|
-DLINKER_NAME=${CCTOOLS}/bin/x86_64-apple-darwin-ld
|
||||||
|
ninja -C build-osx
|
||||||
|
```
|
||||||
|
|
||||||
|
Le binaire résultant aura un format exécutable Mach-O et ne pourra pas être exécuté sous Linux.
|
90
docs/fr/development/build_osx.md
Normal file
90
docs/fr/development/build_osx.md
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Comment Construire ClickHouse sur Mac OS X {#how-to-build-clickhouse-on-mac-os-x}
|
||||||
|
|
||||||
|
Build devrait fonctionner sur Mac OS X 10.15 (Catalina)
|
||||||
|
|
||||||
|
## Installer Homebrew {#install-homebrew}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Installez les compilateurs, outils et bibliothèques requis {#install-required-compilers-tools-and-libraries}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ brew install cmake ninja libtool gettext
|
||||||
|
```
|
||||||
|
|
||||||
|
## Commander Clickhouse Sources {#checkout-clickhouse-sources}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ git clone --recursive git@github.com:ClickHouse/ClickHouse.git
|
||||||
|
```
|
||||||
|
|
||||||
|
ou
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ git clone --recursive https://github.com/ClickHouse/ClickHouse.git
|
||||||
|
|
||||||
|
$ cd ClickHouse
|
||||||
|
```
|
||||||
|
|
||||||
|
## Construire ClickHouse {#build-clickhouse}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ mkdir build
|
||||||
|
$ cd build
|
||||||
|
$ cmake .. -DCMAKE_CXX_COMPILER=`which clang++` -DCMAKE_C_COMPILER=`which clang`
|
||||||
|
$ ninja
|
||||||
|
$ cd ..
|
||||||
|
```
|
||||||
|
|
||||||
|
## Mises en garde {#caveats}
|
||||||
|
|
||||||
|
Si vous avez l'intention d'exécuter clickhouse-server, assurez-vous d'augmenter la variable maxfiles du système.
|
||||||
|
|
||||||
|
!!! info "Note"
|
||||||
|
Vous aurez besoin d'utiliser sudo.
|
||||||
|
|
||||||
|
Pour ce faire, créez le fichier suivant:
|
||||||
|
|
||||||
|
/ Bibliothèque / LaunchDaemons / limite.maxfiles.plist:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
|
||||||
|
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>Label</key>
|
||||||
|
<string>limit.maxfiles</string>
|
||||||
|
<key>ProgramArguments</key>
|
||||||
|
<array>
|
||||||
|
<string>launchctl</string>
|
||||||
|
<string>limit</string>
|
||||||
|
<string>maxfiles</string>
|
||||||
|
<string>524288</string>
|
||||||
|
<string>524288</string>
|
||||||
|
</array>
|
||||||
|
<key>RunAtLoad</key>
|
||||||
|
<true/>
|
||||||
|
<key>ServiceIPC</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
```
|
||||||
|
|
||||||
|
Exécutez la commande suivante:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
|
||||||
|
```
|
||||||
|
|
||||||
|
Redémarrer.
|
||||||
|
|
||||||
|
Pour vérifier si elle fonctionne, vous pouvez utiliser `ulimit -n` commande.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/development/build_osx/) <!--hide-->
|
39
docs/fr/development/contrib.md
Normal file
39
docs/fr/development/contrib.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Bibliothèques Tierces Utilisées {#third-party-libraries-used}
|
||||||
|
|
||||||
|
| Bibliothèque | Licence |
|
||||||
|
|----------------------|------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| base64 | [Licence BSD 2-Clause](https://github.com/aklomp/base64/blob/a27c565d1b6c676beaf297fe503c4518185666f7/LICENSE) |
|
||||||
|
| stimuler | [Licence Logicielle Boost 1.0](https://github.com/ClickHouse-Extras/boost-extra/blob/6883b40449f378019aec792f9983ce3afc7ff16e/LICENSE_1_0.txt) |
|
||||||
|
| brotli | [MIT](https://github.com/google/brotli/blob/master/LICENSE) |
|
||||||
|
| capnproto | [MIT](https://github.com/capnproto/capnproto/blob/master/LICENSE) |
|
||||||
|
| cctz | [Licence Apache 2.0](https://github.com/google/cctz/blob/4f9776a310f4952454636363def82c2bf6641d5f/LICENSE.txt) |
|
||||||
|
| double-conversion | [Licence BSD 3-Clause](https://github.com/google/double-conversion/blob/cf2f0f3d547dc73b4612028a155b80536902ba02/LICENSE) |
|
||||||
|
| FastMemcpy | [MIT](https://github.com/ClickHouse/ClickHouse/blob/master/libs/libmemcpy/impl/LICENSE) |
|
||||||
|
| googletest | [Licence BSD 3-Clause](https://github.com/google/googletest/blob/master/LICENSE) |
|
||||||
|
| h3 | [Licence Apache 2.0](https://github.com/uber/h3/blob/master/LICENSE) |
|
||||||
|
| hyperscan | [Licence BSD 3-Clause](https://github.com/intel/hyperscan/blob/master/LICENSE) |
|
||||||
|
| libbtrie | [Licence BSD 2-Clause](https://github.com/ClickHouse/ClickHouse/blob/master/contrib/libbtrie/LICENSE) |
|
||||||
|
| libcxxabi | [BSD + MIT](https://github.com/ClickHouse/ClickHouse/blob/master/libs/libglibc-compatibility/libcxxabi/LICENSE.TXT) |
|
||||||
|
| libdivide | [Licence Zlib](https://github.com/ClickHouse/ClickHouse/blob/master/contrib/libdivide/LICENSE.txt) |
|
||||||
|
| libgsasl | [LGPL v2.1](https://github.com/ClickHouse-Extras/libgsasl/blob/3b8948a4042e34fb00b4fb987535dc9e02e39040/LICENSE) |
|
||||||
|
| libhdfs3 | [Licence Apache 2.0](https://github.com/ClickHouse-Extras/libhdfs3/blob/bd6505cbb0c130b0db695305b9a38546fa880e5a/LICENSE.txt) |
|
||||||
|
| libmetrohash | [Licence Apache 2.0](https://github.com/ClickHouse/ClickHouse/blob/master/contrib/libmetrohash/LICENSE) |
|
||||||
|
| libpcg-aléatoire | [Licence Apache 2.0](https://github.com/ClickHouse/ClickHouse/blob/master/contrib/libpcg-random/LICENSE-APACHE.txt) |
|
||||||
|
| libressl | [Licence OpenSSL](https://github.com/ClickHouse-Extras/ssl/blob/master/COPYING) |
|
||||||
|
| librdkafka | [Licence BSD 2-Clause](https://github.com/edenhill/librdkafka/blob/363dcad5a23dc29381cc626620e68ae418b3af19/LICENSE) |
|
||||||
|
| libwidechar\_width | [CC0 1.0 universel](https://github.com/ClickHouse/ClickHouse/blob/master/libs/libwidechar_width/LICENSE) |
|
||||||
|
| llvm | [Licence BSD 3-Clause](https://github.com/ClickHouse-Extras/llvm/blob/163def217817c90fb982a6daf384744d8472b92b/llvm/LICENSE.TXT) |
|
||||||
|
| lz4 | [Licence BSD 2-Clause](https://github.com/lz4/lz4/blob/c10863b98e1503af90616ae99725ecd120265dfb/LICENSE) |
|
||||||
|
| mariadb-connecteur-c | [LGPL v2.1](https://github.com/ClickHouse-Extras/mariadb-connector-c/blob/3.1/COPYING.LIB) |
|
||||||
|
| murmurhash | [Domaine Public](https://github.com/ClickHouse/ClickHouse/blob/master/contrib/murmurhash/LICENSE) |
|
||||||
|
| pdqsort | [Licence Zlib](https://github.com/ClickHouse/ClickHouse/blob/master/contrib/pdqsort/license.txt) |
|
||||||
|
| poco | [Licence Du Logiciel Boost-Version 1.0](https://github.com/ClickHouse-Extras/poco/blob/fe5505e56c27b6ecb0dcbc40c49dc2caf4e9637f/LICENSE) |
|
||||||
|
| protobuf | [Licence BSD 3-Clause](https://github.com/ClickHouse-Extras/protobuf/blob/12735370922a35f03999afff478e1c6d7aa917a4/LICENSE) |
|
||||||
|
| re2 | [Licence BSD 3-Clause](https://github.com/google/re2/blob/7cf8b88e8f70f97fd4926b56aa87e7f53b2717e0/LICENSE) |
|
||||||
|
| UnixODBC | [LGPL v2.1](https://github.com/ClickHouse-Extras/UnixODBC/tree/b0ad30f7f6289c12b76f04bfb9d466374bb32168) |
|
||||||
|
| zlib-ng | [Licence Zlib](https://github.com/ClickHouse-Extras/zlib-ng/blob/develop/LICENSE.md) |
|
||||||
|
| zstd | [Licence BSD 3-Clause](https://github.com/facebook/zstd/blob/dev/LICENSE) |
|
282
docs/fr/development/developer_instruction.md
Normal file
282
docs/fr/development/developer_instruction.md
Normal file
@ -0,0 +1,282 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
La construction de ClickHouse est prise en charge sous Linux, FreeBSD et Mac OS X.
|
||||||
|
|
||||||
|
# Si vous utilisez Windows {#if-you-use-windows}
|
||||||
|
|
||||||
|
Si vous utilisez Windows, vous devez créer une machine virtuelle avec Ubuntu. Pour commencer à travailler avec une machine virtuelle, installez VirtualBox. Vous pouvez télécharger Ubuntu sur le site: https://www.ubuntu.com/\#download. veuillez créer une machine virtuelle à partir de l'image téléchargée (vous devez réserver au moins 4 Go de RAM pour cela). Pour exécuter un terminal de ligne de commande dans Ubuntu, recherchez un programme contenant le mot “terminal” dans son nom (gnome-terminal, konsole etc.) ou appuyez simplement sur Ctrl + Alt + T.
|
||||||
|
|
||||||
|
# Si vous utilisez un système 32 bits {#if-you-use-a-32-bit-system}
|
||||||
|
|
||||||
|
ClickHouse ne peut pas fonctionner ou construire sur un système 32 bits. Vous devez acquérir l'accès à un système 64 bits et vous pouvez continuer la lecture.
|
||||||
|
|
||||||
|
# Création d'un référentiel sur GitHub {#creating-a-repository-on-github}
|
||||||
|
|
||||||
|
Pour commencer à travailler avec clickhouse repository, vous aurez besoin d'un compte GitHub.
|
||||||
|
|
||||||
|
Vous en avez probablement déjà un, mais si vous ne le faites pas, veuillez vous inscrire à https://github.com. dans le cas où vous n'avez pas de clés SSH, vous devez les générer, puis les télécharger sur GitHub. Il est nécessaire pour l'envoi de vos correctifs. Il est également possible d'utiliser les mêmes clés SSH que vous utilisez avec d'autres serveurs SSH - vous les avez probablement déjà.
|
||||||
|
|
||||||
|
Créer un fork de clickhouse repository. Pour ce faire, cliquez sur l' “fork” bouton dans le coin supérieur droit à https://github.com/ClickHouse/ClickHouse. il fourche votre propre copie de ClickHouse / ClickHouse à votre compte.
|
||||||
|
|
||||||
|
Le processus de développement consiste d'abord à valider les modifications prévues dans votre fork de ClickHouse, puis à créer un “pull request” pour que ces modifications soient acceptées dans le référentiel principal (ClickHouse/ClickHouse).
|
||||||
|
|
||||||
|
Pour travailler avec les dépôts git, veuillez installer `git`.
|
||||||
|
|
||||||
|
Pour ce faire dans Ubuntu vous exécutez dans le terminal de ligne de commande:
|
||||||
|
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install git
|
||||||
|
|
||||||
|
Un bref manuel sur l'utilisation de Git peut être trouvé ici: https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf.
|
||||||
|
Pour un manuel détaillé sur Git voir https://git-scm.com/book/en/v2.
|
||||||
|
|
||||||
|
# Clonage d'un référentiel sur votre machine de développement {#cloning-a-repository-to-your-development-machine}
|
||||||
|
|
||||||
|
Ensuite, vous devez télécharger les fichiers source sur votre machine de travail. Ceci est appelé “to clone a repository” parce qu'il crée une copie locale du dépôt sur votre machine de travail.
|
||||||
|
|
||||||
|
Dans le terminal de ligne de commande exécuter:
|
||||||
|
|
||||||
|
git clone --recursive git@guthub.com:your_github_username/ClickHouse.git
|
||||||
|
cd ClickHouse
|
||||||
|
|
||||||
|
Remarque: Veuillez remplacer *your\_github\_username* avec ce qui est approprié!
|
||||||
|
|
||||||
|
Cette commande va créer un répertoire `ClickHouse` contenant la copie de travail du projet.
|
||||||
|
|
||||||
|
Il est important que le chemin d'accès au répertoire de travail ne contienne aucun espace, car cela peut entraîner des problèmes lors de l'exécution du système de construction.
|
||||||
|
|
||||||
|
Veuillez noter que clickhouse repository utilise `submodules`. That is what the references to additional repositories are called (i.e. external libraries on which the project depends). It means that when cloning the repository you need to specify the `--recursive` drapeau comme dans l'exemple ci-dessus. Si le dépôt a été cloné sans submodules, pour télécharger, vous devez exécuter les opérations suivantes:
|
||||||
|
|
||||||
|
git submodule init
|
||||||
|
git submodule update
|
||||||
|
|
||||||
|
Vous pouvez vérifier l'état avec la commande: `git submodule status`.
|
||||||
|
|
||||||
|
Si vous obtenez le message d'erreur suivantes:
|
||||||
|
|
||||||
|
Permission denied (publickey).
|
||||||
|
fatal: Could not read from remote repository.
|
||||||
|
|
||||||
|
Please make sure you have the correct access rights
|
||||||
|
and the repository exists.
|
||||||
|
|
||||||
|
Cela signifie généralement que les clés SSH pour la connexion à GitHub sont manquantes. Ces clés sont normalement situés dans `~/.ssh`. Pour que les clés SSH soient acceptées, vous devez les télécharger dans la section Paramètres de L'interface utilisateur GitHub.
|
||||||
|
|
||||||
|
Vous pouvez également cloner le référentiel via le protocole https:
|
||||||
|
|
||||||
|
git clone https://github.com/ClickHouse/ClickHouse.git
|
||||||
|
|
||||||
|
Ceci, cependant, ne vous permettra pas d'envoyer vos modifications sur le serveur. Vous pouvez toujours l'utiliser temporairement et ajouter les clés SSH plus tard en remplaçant l'adresse distante du référentiel par `git remote` commande.
|
||||||
|
|
||||||
|
Vous pouvez également ajouter l'adresse du dépôt clickhouse original à votre référentiel local pour extraire les mises à jour à partir de là:
|
||||||
|
|
||||||
|
git remote add upstream git@github.com:ClickHouse/ClickHouse.git
|
||||||
|
|
||||||
|
Après avoir exécuté avec succès cette commande vous serez en mesure de tirer les mises à jour du repo clickhouse principal en exécutant `git pull upstream master`.
|
||||||
|
|
||||||
|
## Travailler avec des submodules {#working-with-submodules}
|
||||||
|
|
||||||
|
Travailler avec des sous-modules dans git pourrait être douloureux. Prochaines commandes aidera à gérer:
|
||||||
|
|
||||||
|
# ! each command accepts --recursive
|
||||||
|
# Update remote URLs for submodules. Barely rare case
|
||||||
|
git submodule sync
|
||||||
|
# Add new submodules
|
||||||
|
git submodule init
|
||||||
|
# Update existing submodules to the current state
|
||||||
|
git submodule update
|
||||||
|
# Two last commands could be merged together
|
||||||
|
git submodule update --init
|
||||||
|
|
||||||
|
Les commandes suivantes vous aideront à réinitialiser tous les sous-modules à l'état initial (!AVERTISSEMENT! - tout changement à l'intérieur sera supprimé):
|
||||||
|
|
||||||
|
# Synchronizes submodules' remote URL with .gitmodules
|
||||||
|
git submodule sync --recursive
|
||||||
|
# Update the registered submodules with initialize not yet initialized
|
||||||
|
git submodule update --init --recursive
|
||||||
|
# Reset all changes done after HEAD
|
||||||
|
git submodule foreach git reset --hard
|
||||||
|
# Clean files from .gitignore
|
||||||
|
git submodule foreach git clean -xfd
|
||||||
|
# Repeat last 4 commands for all submodule
|
||||||
|
git submodule foreach git submodule sync --recursive
|
||||||
|
git submodule foreach git submodule update --init --recursive
|
||||||
|
git submodule foreach git submodule foreach git reset --hard
|
||||||
|
git submodule foreach git submodule foreach git clean -xfd
|
||||||
|
|
||||||
|
# Système De Construction {#build-system}
|
||||||
|
|
||||||
|
ClickHouse utilise CMake et Ninja pour la construction.
|
||||||
|
|
||||||
|
CMake - un système de méta-construction qui peut générer des fichiers Ninja (tâches de construction).
|
||||||
|
Ninja - un système de construction plus petit avec un accent sur la vitesse utilisée pour exécuter ces tâches générées cmake.
|
||||||
|
|
||||||
|
Pour installer sur Ubuntu, Debian ou mint run `sudo apt install cmake ninja-build`.
|
||||||
|
|
||||||
|
Sur CentOS, RedHat run `sudo yum install cmake ninja-build`.
|
||||||
|
|
||||||
|
Si vous utilisez Arch ou Gentoo, vous savez probablement vous - même comment installer CMake.
|
||||||
|
|
||||||
|
Pour installer CMake et Ninja sur Mac OS X installez D'abord Homebrew puis installez tout le reste via brew:
|
||||||
|
|
||||||
|
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
|
||||||
|
brew install cmake ninja
|
||||||
|
|
||||||
|
Ensuite, vérifiez la version de CMake: `cmake --version`. Si elle est inférieure à 3.3, vous devez installer une version plus récente du site web: https://cmake.org/download/.
|
||||||
|
|
||||||
|
# Bibliothèques Externes Facultatives {#optional-external-libraries}
|
||||||
|
|
||||||
|
ClickHouse utilise plusieurs bibliothèques externes pour la construction. Tous n'ont pas besoin d'être installés séparément car ils sont construits avec ClickHouse à partir des sources situées dans les sous-modules. Vous pouvez vérifier la liste dans `contrib`.
|
||||||
|
|
||||||
|
# Compilateur C++ {#c-compiler}
|
||||||
|
|
||||||
|
Les compilateurs GCC à partir de la version 9 et Clang version 8 ou supérieure sont pris en charge pour construire ClickHouse.
|
||||||
|
|
||||||
|
Les builds officiels de Yandex utilisent actuellement GCC car ils génèrent du code machine de performances légèrement meilleures (ce qui donne une différence allant jusqu'à plusieurs pour cent selon nos benchmarks). Et Clang est plus pratique pour le développement habituellement. Cependant, notre plate-forme d'intégration continue (CI) vérifie environ une douzaine de combinaisons de construction.
|
||||||
|
|
||||||
|
Pour installer GCC sur Ubuntu Exécutez: `sudo apt install gcc g++`
|
||||||
|
|
||||||
|
Vérifiez la version de gcc: `gcc --version`. Si elle est inférieure à 9, suivez les instructions ici: https://clickhouse.tech/docs/fr/développement/construction/\#install-gcc-9.
|
||||||
|
|
||||||
|
Mac OS X build est pris en charge uniquement pour Clang. Il suffit d'exécuter `brew install llvm`
|
||||||
|
|
||||||
|
Si vous décidez d'utiliser Clang, vous pouvez également installer `libc++` et `lld` si vous savez ce que c'est. Utiliser `ccache` est également recommandé.
|
||||||
|
|
||||||
|
# Le processus de construction {#the-building-process}
|
||||||
|
|
||||||
|
Maintenant que vous êtes prêt à construire ClickHouse nous vous conseillons de créer un répertoire séparé `build` à l'intérieur de `ClickHouse` qui contiendra tous les artefacts de construction:
|
||||||
|
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
|
||||||
|
Vous pouvez avoir plusieurs répertoires différents (build\_release, build\_debug, etc.) pour les différents types de construction.
|
||||||
|
|
||||||
|
Tandis qu'à l'intérieur de la `build` répertoire, configurez votre build en exécutant CMake. Avant la première exécution, vous devez définir des variables d'environnement qui spécifient le compilateur (compilateur gcc version 9 dans cet exemple).
|
||||||
|
|
||||||
|
Linux:
|
||||||
|
|
||||||
|
export CC=gcc-9 CXX=g++-9
|
||||||
|
cmake ..
|
||||||
|
|
||||||
|
Mac OS X:
|
||||||
|
|
||||||
|
export CC=clang CXX=clang++
|
||||||
|
cmake ..
|
||||||
|
|
||||||
|
Le `CC` variable spécifie le compilateur pour C (abréviation de compilateur C), et `CXX` variable indique quel compilateur C++ doit être utilisé pour la construction.
|
||||||
|
|
||||||
|
Pour une version plus rapide, vous pouvez recourir à l' `debug` build type - Une construction sans optimisations. Pour cela fournissez le paramètre suivant `-D CMAKE_BUILD_TYPE=Debug`:
|
||||||
|
|
||||||
|
cmake -D CMAKE_BUILD_TYPE=Debug ..
|
||||||
|
|
||||||
|
Vous pouvez modifier le type de génération en exécutant cette commande dans le `build` répertoire.
|
||||||
|
|
||||||
|
Exécutez ninja pour construire:
|
||||||
|
|
||||||
|
ninja clickhouse-server clickhouse-client
|
||||||
|
|
||||||
|
Seules les binaires vont être construites dans cet exemple.
|
||||||
|
|
||||||
|
Si vous avez besoin de construire tous les binaires (utilitaires et tests), vous devez exécuter ninja sans paramètres:
|
||||||
|
|
||||||
|
ninja
|
||||||
|
|
||||||
|
La construction complète nécessite environ 30 Go d'espace disque libre ou 15 Go pour construire les binaires principaux.
|
||||||
|
|
||||||
|
Lorsqu'une grande quantité de RAM est disponible sur la machine de construction vous devez limiter le nombre de tâches de construction exécutées en parallèle avec `-j` param:
|
||||||
|
|
||||||
|
ninja -j 1 clickhouse-server clickhouse-client
|
||||||
|
|
||||||
|
Sur les machines avec 4 Go de RAM, il est recommandé de spécifier 1, pour 8 Go de RAM `-j 2` est recommandé.
|
||||||
|
|
||||||
|
Si vous recevez le message: `ninja: error: loading 'build.ninja': No such file or directory`, cela signifie que la génération d'une configuration de construction a échoué et que vous devez inspecter le message ci-dessus.
|
||||||
|
|
||||||
|
Après le démarrage réussi du processus de construction, vous verrez la progression de la construction - le nombre de tâches traitées et le nombre total de tâches.
|
||||||
|
|
||||||
|
Lors de la construction de messages sur les fichiers protobuf dans la bibliothèque libhdfs2 comme `libprotobuf WARNING` peuvent apparaître. Ils touchent rien et sont sûrs d'être ignoré.
|
||||||
|
|
||||||
|
Lors de la construction, vous obtenez un fichier exécutable `ClickHouse/<build_dir>/dbms/programs/clickhouse`:
|
||||||
|
|
||||||
|
ls -l dbms/programs/clickhouse
|
||||||
|
|
||||||
|
# Exécution de L'exécutable construit de ClickHouse {#running-the-built-executable-of-clickhouse}
|
||||||
|
|
||||||
|
Pour exécuter le serveur sous l'utilisateur actuel vous devez naviguer vers `ClickHouse/dbms/programs/server/` (situé à l'extérieur de `build` et les exécuter:
|
||||||
|
|
||||||
|
../../../build/dbms/programs/clickhouse server
|
||||||
|
|
||||||
|
Dans ce cas, ClickHouse utilisera les fichiers de configuration situés dans le répertoire courant. Vous pouvez l'exécuter `clickhouse server` depuis n'importe quel répertoire spécifiant le chemin d'accès à un fichier de configuration en tant que paramètre de ligne de commande `--config-file`.
|
||||||
|
|
||||||
|
Pour vous connecter à ClickHouse avec clickhouse-client dans un autre terminal, accédez à `ClickHouse/build/dbms/programs/` et exécuter `clickhouse client`.
|
||||||
|
|
||||||
|
Si vous obtenez `Connection refused` message sur Mac OS X ou FreeBSD, essayez de spécifier l'adresse hôte 127.0.0.1:
|
||||||
|
|
||||||
|
clickhouse client --host 127.0.0.1
|
||||||
|
|
||||||
|
Vous pouvez remplacer la version de production de clickhouse binary installée dans votre système par votre clickhouse Binary sur mesure. Pour ce faire, installez ClickHouse sur votre machine en suivant les instructions du site officiel. Ensuite, exécutez ce qui suit:
|
||||||
|
|
||||||
|
sudo service clickhouse-server stop
|
||||||
|
sudo cp ClickHouse/build/dbms/programs/clickhouse /usr/bin/
|
||||||
|
sudo service clickhouse-server start
|
||||||
|
|
||||||
|
Notez que `clickhouse-client`, `clickhouse-server` et d'autres sont des liens symboliques à la commune `clickhouse` binaire.
|
||||||
|
|
||||||
|
Vous pouvez également exécuter votre binaire ClickHouse personnalisé avec le fichier de configuration du package clickhouse installé sur votre système:
|
||||||
|
|
||||||
|
sudo service clickhouse-server stop
|
||||||
|
sudo -u clickhouse ClickHouse/build/dbms/programs/clickhouse server --config-file /etc/clickhouse-server/config.xml
|
||||||
|
|
||||||
|
# IDE (environnement de développement intégré) {#ide-integrated-development-environment}
|
||||||
|
|
||||||
|
Si vous ne savez pas quel IDE utiliser, nous vous recommandons D'utiliser CLion. CLion est un logiciel commercial, mais il offre une période d'essai gratuite de 30 jours. Il est également gratuit pour les étudiants. CLion peut être utilisé à la fois sur Linux et sur Mac OS X.
|
||||||
|
|
||||||
|
KDevelop et QTCreator sont d'autres grandes alternatives D'un IDE pour développer ClickHouse. KDevelop est un IDE très pratique bien qu'instable. Si KDevelop se bloque après un certain temps lors de l'ouverture du projet, vous devez cliquer sur “Stop All” bouton dès qu'il a ouvert la liste des fichiers du projet. Après cela, KDevelop devrait être bien pour travailler avec.
|
||||||
|
|
||||||
|
En tant qu'éditeurs de code simples, vous pouvez utiliser Sublime Text ou Visual Studio Code, ou Kate (qui sont tous disponibles sur Linux).
|
||||||
|
|
||||||
|
Juste au cas où, il convient de mentionner que CLion crée `build` chemin sur son propre, il aussi sur son propre sélectionne `debug` pour le type de construction, pour la configuration, il utilise une version de CMake définie dans CLion et non celle installée par vous, et enfin, CLion utilisera `make` pour exécuter construire des tâches au lieu de `ninja`. C'est un comportement normal, gardez cela à l'esprit pour éviter toute confusion.
|
||||||
|
|
||||||
|
# L'Écriture De Code {#writing-code}
|
||||||
|
|
||||||
|
La description de l'architecture ClickHouse peut être trouvée ici: https://clickhouse.tech/docs/fr/développement/architecture/
|
||||||
|
|
||||||
|
Le code Style Guide: https://clickhouse.tech/docs/fr/développement/style/
|
||||||
|
|
||||||
|
Rédaction de tests: https://clickhouse.tech/docs/fr/développement/tests/
|
||||||
|
|
||||||
|
Liste des tâches: https://github.com/ClickHouse/ClickHouse/blob/master/dbms/tests/instructions/easy\_tasks\_sorted\_en.md
|
||||||
|
|
||||||
|
# Des Données De Test {#test-data}
|
||||||
|
|
||||||
|
Le développement de ClickHouse nécessite souvent le chargement d'ensembles de données réalistes. Il est particulièrement important pour les tests de performance. Nous avons un ensemble spécialement préparé de données anonymisées de Yandex.Metrica. Il nécessite en outre quelques 3 Go d'espace disque libre. Notez que ces données ne sont pas requises pour accomplir la plupart des tâches de développement.
|
||||||
|
|
||||||
|
sudo apt install wget xz-utils
|
||||||
|
|
||||||
|
wget https://clickhouse-datasets.s3.yandex.net/hits/tsv/hits_v1.tsv.xz
|
||||||
|
wget https://clickhouse-datasets.s3.yandex.net/visits/tsv/visits_v1.tsv.xz
|
||||||
|
|
||||||
|
xz -v -d hits_v1.tsv.xz
|
||||||
|
xz -v -d visits_v1.tsv.xz
|
||||||
|
|
||||||
|
clickhouse-client
|
||||||
|
|
||||||
|
CREATE TABLE test.hits ( WatchID UInt64, JavaEnable UInt8, Title String, GoodEvent Int16, EventTime DateTime, EventDate Date, CounterID UInt32, ClientIP UInt32, ClientIP6 FixedString(16), RegionID UInt32, UserID UInt64, CounterClass Int8, OS UInt8, UserAgent UInt8, URL String, Referer String, URLDomain String, RefererDomain String, Refresh UInt8, IsRobot UInt8, RefererCategories Array(UInt16), URLCategories Array(UInt16), URLRegions Array(UInt32), RefererRegions Array(UInt32), ResolutionWidth UInt16, ResolutionHeight UInt16, ResolutionDepth UInt8, FlashMajor UInt8, FlashMinor UInt8, FlashMinor2 String, NetMajor UInt8, NetMinor UInt8, UserAgentMajor UInt16, UserAgentMinor FixedString(2), CookieEnable UInt8, JavascriptEnable UInt8, IsMobile UInt8, MobilePhone UInt8, MobilePhoneModel String, Params String, IPNetworkID UInt32, TraficSourceID Int8, SearchEngineID UInt16, SearchPhrase String, AdvEngineID UInt8, IsArtifical UInt8, WindowClientWidth UInt16, WindowClientHeight UInt16, ClientTimeZone Int16, ClientEventTime DateTime, SilverlightVersion1 UInt8, SilverlightVersion2 UInt8, SilverlightVersion3 UInt32, SilverlightVersion4 UInt16, PageCharset String, CodeVersion UInt32, IsLink UInt8, IsDownload UInt8, IsNotBounce UInt8, FUniqID UInt64, HID UInt32, IsOldCounter UInt8, IsEvent UInt8, IsParameter UInt8, DontCountHits UInt8, WithHash UInt8, HitColor FixedString(1), UTCEventTime DateTime, Age UInt8, Sex UInt8, Income UInt8, Interests UInt16, Robotness UInt8, GeneralInterests Array(UInt16), RemoteIP UInt32, RemoteIP6 FixedString(16), WindowName Int32, OpenerName Int32, HistoryLength Int16, BrowserLanguage FixedString(2), BrowserCountry FixedString(2), SocialNetwork String, SocialAction String, HTTPError UInt16, SendTiming Int32, DNSTiming Int32, ConnectTiming Int32, ResponseStartTiming Int32, ResponseEndTiming Int32, FetchTiming Int32, RedirectTiming Int32, DOMInteractiveTiming Int32, DOMContentLoadedTiming Int32, DOMCompleteTiming Int32, LoadEventStartTiming Int32, LoadEventEndTiming Int32, NSToDOMContentLoadedTiming Int32, FirstPaintTiming Int32, RedirectCount Int8, SocialSourceNetworkID UInt8, SocialSourcePage String, ParamPrice Int64, ParamOrderID String, ParamCurrency FixedString(3), ParamCurrencyID UInt16, GoalsReached Array(UInt32), OpenstatServiceName String, OpenstatCampaignID String, OpenstatAdID String, OpenstatSourceID String, UTMSource String, UTMMedium String, UTMCampaign String, UTMContent String, UTMTerm String, FromTag String, HasGCLID UInt8, RefererHash UInt64, URLHash UInt64, CLID UInt32, YCLID UInt64, ShareService String, ShareURL String, ShareTitle String, `ParsedParams.Key1` Array(String), `ParsedParams.Key2` Array(String), `ParsedParams.Key3` Array(String), `ParsedParams.Key4` Array(String), `ParsedParams.Key5` Array(String), `ParsedParams.ValueDouble` Array(Float64), IslandID FixedString(16), RequestNum UInt32, RequestTry UInt8) ENGINE = MergeTree PARTITION BY toYYYYMM(EventDate) SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID), EventTime);
|
||||||
|
|
||||||
|
CREATE TABLE test.visits ( CounterID UInt32, StartDate Date, Sign Int8, IsNew UInt8, VisitID UInt64, UserID UInt64, StartTime DateTime, Duration UInt32, UTCStartTime DateTime, PageViews Int32, Hits Int32, IsBounce UInt8, Referer String, StartURL String, RefererDomain String, StartURLDomain String, EndURL String, LinkURL String, IsDownload UInt8, TraficSourceID Int8, SearchEngineID UInt16, SearchPhrase String, AdvEngineID UInt8, PlaceID Int32, RefererCategories Array(UInt16), URLCategories Array(UInt16), URLRegions Array(UInt32), RefererRegions Array(UInt32), IsYandex UInt8, GoalReachesDepth Int32, GoalReachesURL Int32, GoalReachesAny Int32, SocialSourceNetworkID UInt8, SocialSourcePage String, MobilePhoneModel String, ClientEventTime DateTime, RegionID UInt32, ClientIP UInt32, ClientIP6 FixedString(16), RemoteIP UInt32, RemoteIP6 FixedString(16), IPNetworkID UInt32, SilverlightVersion3 UInt32, CodeVersion UInt32, ResolutionWidth UInt16, ResolutionHeight UInt16, UserAgentMajor UInt16, UserAgentMinor UInt16, WindowClientWidth UInt16, WindowClientHeight UInt16, SilverlightVersion2 UInt8, SilverlightVersion4 UInt16, FlashVersion3 UInt16, FlashVersion4 UInt16, ClientTimeZone Int16, OS UInt8, UserAgent UInt8, ResolutionDepth UInt8, FlashMajor UInt8, FlashMinor UInt8, NetMajor UInt8, NetMinor UInt8, MobilePhone UInt8, SilverlightVersion1 UInt8, Age UInt8, Sex UInt8, Income UInt8, JavaEnable UInt8, CookieEnable UInt8, JavascriptEnable UInt8, IsMobile UInt8, BrowserLanguage UInt16, BrowserCountry UInt16, Interests UInt16, Robotness UInt8, GeneralInterests Array(UInt16), Params Array(String), `Goals.ID` Array(UInt32), `Goals.Serial` Array(UInt32), `Goals.EventTime` Array(DateTime), `Goals.Price` Array(Int64), `Goals.OrderID` Array(String), `Goals.CurrencyID` Array(UInt32), WatchIDs Array(UInt64), ParamSumPrice Int64, ParamCurrency FixedString(3), ParamCurrencyID UInt16, ClickLogID UInt64, ClickEventID Int32, ClickGoodEvent Int32, ClickEventTime DateTime, ClickPriorityID Int32, ClickPhraseID Int32, ClickPageID Int32, ClickPlaceID Int32, ClickTypeID Int32, ClickResourceID Int32, ClickCost UInt32, ClickClientIP UInt32, ClickDomainID UInt32, ClickURL String, ClickAttempt UInt8, ClickOrderID UInt32, ClickBannerID UInt32, ClickMarketCategoryID UInt32, ClickMarketPP UInt32, ClickMarketCategoryName String, ClickMarketPPName String, ClickAWAPSCampaignName String, ClickPageName String, ClickTargetType UInt16, ClickTargetPhraseID UInt64, ClickContextType UInt8, ClickSelectType Int8, ClickOptions String, ClickGroupBannerID Int32, OpenstatServiceName String, OpenstatCampaignID String, OpenstatAdID String, OpenstatSourceID String, UTMSource String, UTMMedium String, UTMCampaign String, UTMContent String, UTMTerm String, FromTag String, HasGCLID UInt8, FirstVisit DateTime, PredLastVisit Date, LastVisit Date, TotalVisits UInt32, `TraficSource.ID` Array(Int8), `TraficSource.SearchEngineID` Array(UInt16), `TraficSource.AdvEngineID` Array(UInt8), `TraficSource.PlaceID` Array(UInt16), `TraficSource.SocialSourceNetworkID` Array(UInt8), `TraficSource.Domain` Array(String), `TraficSource.SearchPhrase` Array(String), `TraficSource.SocialSourcePage` Array(String), Attendance FixedString(16), CLID UInt32, YCLID UInt64, NormalizedRefererHash UInt64, SearchPhraseHash UInt64, RefererDomainHash UInt64, NormalizedStartURLHash UInt64, StartURLDomainHash UInt64, NormalizedEndURLHash UInt64, TopLevelDomain UInt64, URLScheme UInt64, OpenstatServiceNameHash UInt64, OpenstatCampaignIDHash UInt64, OpenstatAdIDHash UInt64, OpenstatSourceIDHash UInt64, UTMSourceHash UInt64, UTMMediumHash UInt64, UTMCampaignHash UInt64, UTMContentHash UInt64, UTMTermHash UInt64, FromHash UInt64, WebVisorEnabled UInt8, WebVisorActivity UInt32, `ParsedParams.Key1` Array(String), `ParsedParams.Key2` Array(String), `ParsedParams.Key3` Array(String), `ParsedParams.Key4` Array(String), `ParsedParams.Key5` Array(String), `ParsedParams.ValueDouble` Array(Float64), `Market.Type` Array(UInt8), `Market.GoalID` Array(UInt32), `Market.OrderID` Array(String), `Market.OrderPrice` Array(Int64), `Market.PP` Array(UInt32), `Market.DirectPlaceID` Array(UInt32), `Market.DirectOrderID` Array(UInt32), `Market.DirectBannerID` Array(UInt32), `Market.GoodID` Array(String), `Market.GoodName` Array(String), `Market.GoodQuantity` Array(Int32), `Market.GoodPrice` Array(Int64), IslandID FixedString(16)) ENGINE = CollapsingMergeTree(Sign) PARTITION BY toYYYYMM(StartDate) SAMPLE BY intHash32(UserID) ORDER BY (CounterID, StartDate, intHash32(UserID), VisitID);
|
||||||
|
|
||||||
|
clickhouse-client --max_insert_block_size 100000 --query "INSERT INTO test.hits FORMAT TSV" < hits_v1.tsv
|
||||||
|
clickhouse-client --max_insert_block_size 100000 --query "INSERT INTO test.visits FORMAT TSV" < visits_v1.tsv
|
||||||
|
|
||||||
|
# La Création De Pull Request {#creating-pull-request}
|
||||||
|
|
||||||
|
Accédez à votre référentiel fork dans L'interface utilisateur de GitHub. Si vous avez développé dans une branche, vous devez sélectionner cette branche. Il y aura un “Pull request” bouton situé sur l'écran. En substance, cela signifie “create a request for accepting my changes into the main repository”.
|
||||||
|
|
||||||
|
Une demande d'extraction peuvent être créés, même si le travail n'est pas encore terminée. Dans ce cas veuillez mettre le mot “WIP” (travaux en cours) au début du titre, il peut être modifié plus tard. Ceci est utile pour l'examen coopératif et la discussion des changements ainsi que pour l'exécution de tous les tests disponibles. Il est important que vous fournissiez une brève description de vos modifications, il sera ensuite utilisé pour générer des journaux de modifications de version.
|
||||||
|
|
||||||
|
Les tests commenceront dès que les employés de Yandex étiqueteront votre PR avec une étiquette “can be tested”. The results of some first checks (e.g. code style) will come in within several minutes. Build check results will arrive within half an hour. And the main set of tests will report itself within an hour.
|
||||||
|
|
||||||
|
Le système préparera les builds binaires ClickHouse pour votre demande de tirage individuellement. Pour récupérer ces versions cliquez sur le “Details” lien à côté “ClickHouse build check” entrée dans la liste de vérifications. Vous y trouverez des liens directs vers les construit .paquets deb de ClickHouse que vous pouvez déployer même sur vos serveurs de production (si vous n'avez pas peur).
|
||||||
|
|
||||||
|
Très probablement, certaines des constructions échoueront à la première fois. Cela est dû au fait que nous avons vérifier s'appuie à la fois avec gcc, ainsi qu'avec clang, pratiquement tous les avertissements existants (toujours avec le `-Werror` drapeau) activé pour clang. Sur cette même page, vous pouvez trouver tous les journaux de construction afin que vous n'ayez pas à construire ClickHouse de toutes les manières possibles.
|
7
docs/fr/development/index.md
Normal file
7
docs/fr/development/index.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Développement De ClickHouse {#clickhouse-development}
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/development/) <!--hide-->
|
838
docs/fr/development/style.md
Normal file
838
docs/fr/development/style.md
Normal file
@ -0,0 +1,838 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Comment écrire du Code C++ {#how-to-write-c-code}
|
||||||
|
|
||||||
|
## Recommandations Générales {#general-recommendations}
|
||||||
|
|
||||||
|
**1.** Ce qui suit sont des recommandations, pas des exigences.
|
||||||
|
|
||||||
|
**2.** Si vous modifiez du code, il est logique de suivre le formatage du code existant.
|
||||||
|
|
||||||
|
**3.** Le style de Code est nécessaire pour la cohérence. La cohérence facilite la lecture du code et facilite également la recherche du code.
|
||||||
|
|
||||||
|
**4.** Beaucoup de règles n'ont pas de raisons logiques; elles sont dictées par des pratiques établies.
|
||||||
|
|
||||||
|
## Formater {#formatting}
|
||||||
|
|
||||||
|
**1.** La plupart du formatage se fera automatiquement par `clang-format`.
|
||||||
|
|
||||||
|
**2.** Les tirets sont 4 espaces. Configurez votre environnement de développement afin qu'un onglet ajoute quatre espaces.
|
||||||
|
|
||||||
|
**3.** Les crochets d'ouverture et de fermeture doivent être sur une ligne séparée.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
inline void readBoolText(bool & x, ReadBuffer & buf)
|
||||||
|
{
|
||||||
|
char tmp = '0';
|
||||||
|
readChar(tmp, buf);
|
||||||
|
x = tmp != '0';
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**4.** Si le corps entier de la fonction est un `statement` il peut donc être placé sur une seule ligne. Place des espaces autour des accolades (en plus de l'espace à la fin de la ligne).
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
inline size_t mask() const { return buf_size() - 1; }
|
||||||
|
inline size_t place(HashValue x) const { return x & mask(); }
|
||||||
|
```
|
||||||
|
|
||||||
|
**5.** Pour les fonctions. Ne mettez pas d'espaces entre parenthèses.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
void reinsert(const Value & x)
|
||||||
|
```
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
memcpy(&buf[place_value], &x, sizeof(x));
|
||||||
|
```
|
||||||
|
|
||||||
|
**6.** Dans `if`, `for`, `while` et d'autres expressions, un espace est inséré devant le support d'ouverture (par opposition aux appels de fonction).
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
for (size_t i = 0; i < rows; i += storage.index_granularity)
|
||||||
|
```
|
||||||
|
|
||||||
|
**7.** Ajouter des espaces autour des opérateurs binaires (`+`, `-`, `*`, `/`, `%`, …) and the ternary operator `?:`.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
UInt16 year = (s[0] - '0') * 1000 + (s[1] - '0') * 100 + (s[2] - '0') * 10 + (s[3] - '0');
|
||||||
|
UInt8 month = (s[5] - '0') * 10 + (s[6] - '0');
|
||||||
|
UInt8 day = (s[8] - '0') * 10 + (s[9] - '0');
|
||||||
|
```
|
||||||
|
|
||||||
|
**8.** Si un saut de ligne est entré, placez l'opérateur sur une nouvelle ligne et augmentez le retrait avant.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
if (elapsed_ns)
|
||||||
|
message << " ("
|
||||||
|
<< rows_read_on_server * 1000000000 / elapsed_ns << " rows/s., "
|
||||||
|
<< bytes_read_on_server * 1000.0 / elapsed_ns << " MB/s.) ";
|
||||||
|
```
|
||||||
|
|
||||||
|
**9.** Vous pouvez utiliser des espaces pour l'alignement dans une ligne, si vous le souhaitez.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
dst.ClickLogID = click.LogID;
|
||||||
|
dst.ClickEventID = click.EventID;
|
||||||
|
dst.ClickGoodEvent = click.GoodEvent;
|
||||||
|
```
|
||||||
|
|
||||||
|
**10.** N'utilisez pas d'espaces autour des opérateurs `.`, `->`.
|
||||||
|
|
||||||
|
Si nécessaire, l'opérateur peut être renvoyé à la ligne suivante. Dans ce cas, le décalage devant celui-ci est augmenté.
|
||||||
|
|
||||||
|
**11.** N'utilisez pas d'espace pour séparer les opérateurs unaires (`--`, `++`, `*`, `&`, …) from the argument.
|
||||||
|
|
||||||
|
**12.** Mettre un espace après une virgule, mais pas avant. La même règle vaut pour un point-virgule à l'intérieur d'un `for` expression.
|
||||||
|
|
||||||
|
**13.** Ne pas utiliser des espaces pour séparer les `[]` opérateur.
|
||||||
|
|
||||||
|
**14.** Dans un `template <...>` expression, utiliser un espace entre les `template` et `<`; pas d'espace après `<` ou avant `>`.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
template <typename TKey, typename TValue>
|
||||||
|
struct AggregatedStatElement
|
||||||
|
{}
|
||||||
|
```
|
||||||
|
|
||||||
|
**15.** Dans les classes et les structures, écrivez `public`, `private`, et `protected` sur le même niveau que `class/struct` et tiret le reste du code.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
template <typename T>
|
||||||
|
class MultiVersion
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/// Version of object for usage. shared_ptr manage lifetime of version.
|
||||||
|
using Version = std::shared_ptr<const T>;
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**16.** Si le même `namespace` est utilisé pour l'ensemble du fichier, et il n'y a rien d'autre significatif, un décalage n'est pas nécessaire à l'intérieur `namespace`.
|
||||||
|
|
||||||
|
**17.** Si le bloc pour un `if`, `for`, `while` ou autres expressions se compose d'un seul `statement`, les accolades sont facultatives. Place de la `statement` sur une ligne séparée, à la place. Cette règle est également valable pour les imbriqués `if`, `for`, `while`, …
|
||||||
|
|
||||||
|
Mais si l'intérieur `statement` contient des accolades ou `else` le bloc externe doit être écrit dans les accolades.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
/// Finish write.
|
||||||
|
for (auto & stream : streams)
|
||||||
|
stream.second->finalize();
|
||||||
|
```
|
||||||
|
|
||||||
|
**18.** Il ne devrait pas y avoir d'espaces aux extrémités des lignes.
|
||||||
|
|
||||||
|
**19.** Les fichiers Source sont encodés en UTF-8.
|
||||||
|
|
||||||
|
**20.** Les caractères non-ASCII peuvent être utilisés dans les littéraux de chaîne.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
<< ", " << (timer.elapsed() / chunks_stats.hits) << " μsec/hit.";
|
||||||
|
```
|
||||||
|
|
||||||
|
**21.** N'écrivez pas plusieurs expressions sur une seule ligne.
|
||||||
|
|
||||||
|
**22.** Groupez les sections de code à l'intérieur des fonctions et séparez-les avec pas plus d'une ligne vide.
|
||||||
|
|
||||||
|
**23.** Séparez les fonctions, les classes, etc. avec une ou deux lignes vides.
|
||||||
|
|
||||||
|
**24.** `A const` (liés à une valeur) doit être écrit avant le nom du type.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
//correct
|
||||||
|
const char * pos
|
||||||
|
const std::string & s
|
||||||
|
//incorrect
|
||||||
|
char const * pos
|
||||||
|
```
|
||||||
|
|
||||||
|
**25.** Lors de la déclaration d'un pointeur ou d'une référence, le `*` et `&` les symboles doivent être séparés par des espaces des deux côtés.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
//correct
|
||||||
|
const char * pos
|
||||||
|
//incorrect
|
||||||
|
const char* pos
|
||||||
|
const char *pos
|
||||||
|
```
|
||||||
|
|
||||||
|
**26.** Lors de l'utilisation de types de modèles, les alias avec le `using` mot-clé (sauf dans les cas les plus simples).
|
||||||
|
|
||||||
|
En d'autres termes, les paramètres du modèle sont indiquées que dans `using` et ne sont pas répétés dans le code.
|
||||||
|
|
||||||
|
`using` peut être déclaré localement, comme dans une fonction.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
//correct
|
||||||
|
using FileStreams = std::map<std::string, std::shared_ptr<Stream>>;
|
||||||
|
FileStreams streams;
|
||||||
|
//incorrect
|
||||||
|
std::map<std::string, std::shared_ptr<Stream>> streams;
|
||||||
|
```
|
||||||
|
|
||||||
|
**27.** Ne déclarez pas plusieurs variables de types différents dans une instruction.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
//incorrect
|
||||||
|
int x, *y;
|
||||||
|
```
|
||||||
|
|
||||||
|
**28.** N'utilisez pas de moulages de style C.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
//incorrect
|
||||||
|
std::cerr << (int)c <<; std::endl;
|
||||||
|
//correct
|
||||||
|
std::cerr << static_cast<int>(c) << std::endl;
|
||||||
|
```
|
||||||
|
|
||||||
|
**29.** Dans les classes et les structures, groupez les membres et les fonctions séparément dans chaque portée de visibilité.
|
||||||
|
|
||||||
|
**30.** Pour les petites classes et structures, il n'est pas nécessaire de séparer la déclaration de méthode de l'implémentation.
|
||||||
|
|
||||||
|
La même chose est vraie pour les petites méthodes dans toutes les classes ou structures.
|
||||||
|
|
||||||
|
Pour les classes et les structures modélisées, ne séparez pas les déclarations de méthode de l'implémentation (car sinon elles doivent être définies dans la même unité de traduction).
|
||||||
|
|
||||||
|
**31.** Vous pouvez envelopper des lignes à 140 caractères, au lieu de 80.
|
||||||
|
|
||||||
|
**32.** Utilisez toujours les opérateurs d'incrémentation/décrémentation de préfixe si postfix n'est pas requis.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
for (Names::const_iterator it = column_names.begin(); it != column_names.end(); ++it)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Commentaire {#comments}
|
||||||
|
|
||||||
|
**1.** Assurez-vous d'ajouter des commentaires pour toutes les parties non triviales du code.
|
||||||
|
|
||||||
|
C'est très important. Écrit le commentaire peut vous aider à réaliser que le code n'est pas nécessaire, ou qu'il est mal conçu.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
/** Part of piece of memory, that can be used.
|
||||||
|
* For example, if internal_buffer is 1MB, and there was only 10 bytes loaded to buffer from file for reading,
|
||||||
|
* then working_buffer will have size of only 10 bytes
|
||||||
|
* (working_buffer.end() will point to position right after those 10 bytes available for read).
|
||||||
|
*/
|
||||||
|
```
|
||||||
|
|
||||||
|
**2.** Les commentaires peuvent être aussi détaillées que nécessaire.
|
||||||
|
|
||||||
|
**3.** Placez les commentaires avant le code qu'ils décrivent. Dans de rares cas, des commentaires peuvent venir après le code, sur la même ligne.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
/** Parses and executes the query.
|
||||||
|
*/
|
||||||
|
void executeQuery(
|
||||||
|
ReadBuffer & istr, /// Where to read the query from (and data for INSERT, if applicable)
|
||||||
|
WriteBuffer & ostr, /// Where to write the result
|
||||||
|
Context & context, /// DB, tables, data types, engines, functions, aggregate functions...
|
||||||
|
BlockInputStreamPtr & query_plan, /// Here could be written the description on how query was executed
|
||||||
|
QueryProcessingStage::Enum stage = QueryProcessingStage::Complete /// Up to which stage process the SELECT query
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
**4.** Les commentaires doivent être rédigés en anglais seulement.
|
||||||
|
|
||||||
|
**5.** Si vous écrivez une bibliothèque, incluez des commentaires détaillés l'expliquant dans le fichier d'en-tête principal.
|
||||||
|
|
||||||
|
**6.** N'ajoutez pas de commentaires qui ne fournissent pas d'informations supplémentaires. En particulier, ne laissez pas de commentaires vides comme celui-ci:
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
/*
|
||||||
|
* Procedure Name:
|
||||||
|
* Original procedure name:
|
||||||
|
* Author:
|
||||||
|
* Date of creation:
|
||||||
|
* Dates of modification:
|
||||||
|
* Modification authors:
|
||||||
|
* Original file name:
|
||||||
|
* Purpose:
|
||||||
|
* Intent:
|
||||||
|
* Designation:
|
||||||
|
* Classes used:
|
||||||
|
* Constants:
|
||||||
|
* Local variables:
|
||||||
|
* Parameters:
|
||||||
|
* Date of creation:
|
||||||
|
* Purpose:
|
||||||
|
*/
|
||||||
|
```
|
||||||
|
|
||||||
|
L'exemple est emprunté à partir de la ressource http://home.tamk.fi/~jaalto/cours/coding-style/doc/désuète-code/.
|
||||||
|
|
||||||
|
**7.** Ne pas écrire des commentaires de déchets (auteur, date de création .. au début de chaque fichier.
|
||||||
|
|
||||||
|
**8.** Les commentaires sur une seule ligne commencent par trois barres obliques: `///` et les commentaires multi-lignes commencer avec `/**`. Ces commentaires sont pris en considération “documentation”.
|
||||||
|
|
||||||
|
REMARQUE: Vous pouvez utiliser Doxygen pour générer de la documentation à partir de ces commentaires. Mais Doxygen n'est généralement pas utilisé car il est plus pratique de naviguer dans le code dans L'IDE.
|
||||||
|
|
||||||
|
**9.** Les commentaires multilignes ne doivent pas avoir de lignes vides au début et à la fin (sauf la ligne qui ferme un commentaire multilignes).
|
||||||
|
|
||||||
|
**10.** Pour commenter le code, utilisez des commentaires de base, pas “documenting” commentaire.
|
||||||
|
|
||||||
|
**11.** Supprimez les parties commentées du code avant de valider.
|
||||||
|
|
||||||
|
**12.** N'utilisez pas de blasphème dans les commentaires ou le code.
|
||||||
|
|
||||||
|
**13.** N'utilisez pas de majuscules. N'utilisez pas de ponctuation excessive.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
/// WHAT THE FAIL???
|
||||||
|
```
|
||||||
|
|
||||||
|
**14.** N'utilisez pas de commentaires pour créer des délimiteurs.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
///******************************************************
|
||||||
|
```
|
||||||
|
|
||||||
|
**15.** Ne commencez pas les discussions dans les commentaires.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
/// Why did you do this stuff?
|
||||||
|
```
|
||||||
|
|
||||||
|
**16.** Il n'est pas nécessaire d'écrire un commentaire à la fin d'un bloc décrivant de quoi il s'agissait.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
/// for
|
||||||
|
```
|
||||||
|
|
||||||
|
## Nom {#names}
|
||||||
|
|
||||||
|
**1.** Utilisez des lettres minuscules avec des traits de soulignement dans les noms des variables et des membres de la classe.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
size_t max_block_size;
|
||||||
|
```
|
||||||
|
|
||||||
|
**2.** Pour les noms de fonctions (méthodes), utilisez camelCase commençant par une lettre minuscule.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
std::string getName() const override { return "Memory"; }
|
||||||
|
```
|
||||||
|
|
||||||
|
**3.** Pour les noms de classes (structures), utilisez CamelCase commençant par une lettre majuscule. Les préfixes autres que I ne sont pas utilisés pour les interfaces.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
class StorageMemory : public IStorage
|
||||||
|
```
|
||||||
|
|
||||||
|
**4.** `using` sont nommées de la même manière que les classes, ou avec `_t` sur la fin.
|
||||||
|
|
||||||
|
**5.** Noms des arguments de type de modèle: dans les cas simples, utilisez `T`; `T`, `U`; `T1`, `T2`.
|
||||||
|
|
||||||
|
Pour les cas plus complexes, suivez les règles pour les noms de classe ou ajoutez le préfixe `T`.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
template <typename TKey, typename TValue>
|
||||||
|
struct AggregatedStatElement
|
||||||
|
```
|
||||||
|
|
||||||
|
**6.** Noms des arguments constants du modèle: suivez les règles pour les noms de variables ou utilisez `N` dans les cas simples.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
template <bool without_www>
|
||||||
|
struct ExtractDomain
|
||||||
|
```
|
||||||
|
|
||||||
|
**7.** Pour les classes abstraites (interfaces), vous pouvez ajouter `I` préfixe.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
class IBlockInputStream
|
||||||
|
```
|
||||||
|
|
||||||
|
**8.** Si vous utilisez une variable localement, vous pouvez utiliser le nom court.
|
||||||
|
|
||||||
|
Dans tous les autres cas, utilisez un nom qui décrit la signification.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
bool info_successfully_loaded = false;
|
||||||
|
```
|
||||||
|
|
||||||
|
**9.** Les noms de `define`les constantes s et globales utilisent ALL\_CAPS avec des traits de soulignement.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
#define MAX_SRC_TABLE_NAMES_TO_STORE 1000
|
||||||
|
```
|
||||||
|
|
||||||
|
**10.** Les noms de fichiers doivent utiliser le même style que leur contenu.
|
||||||
|
|
||||||
|
Si un fichier contient une seule classe, nommez-le de la même manière que la classe (CamelCase).
|
||||||
|
|
||||||
|
Si le fichier contient une seule fonction, nommez le fichier de la même manière que la fonction (camelCase).
|
||||||
|
|
||||||
|
**11.** Si le nom contient une abréviation, puis:
|
||||||
|
|
||||||
|
- Pour les noms de variables, l'abréviation doit utiliser des lettres minuscules `mysql_connection` (pas `mySQL_connection`).
|
||||||
|
- Pour les noms de classes et de fonctions, conservez les majuscules dans l'abréviation`MySQLConnection` (pas `MySqlConnection`).
|
||||||
|
|
||||||
|
**12.** Les arguments du constructeur utilisés uniquement pour initialiser les membres de la classe doivent être nommés de la même manière que les membres de la classe, mais avec un trait de soulignement à la fin.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
FileQueueProcessor(
|
||||||
|
const std::string & path_,
|
||||||
|
const std::string & prefix_,
|
||||||
|
std::shared_ptr<FileHandler> handler_)
|
||||||
|
: path(path_),
|
||||||
|
prefix(prefix_),
|
||||||
|
handler(handler_),
|
||||||
|
log(&Logger::get("FileQueueProcessor"))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Le suffixe de soulignement peut être omis si l'argument n'est pas utilisé dans le corps du constructeur.
|
||||||
|
|
||||||
|
**13.** Il n'y a pas de différence dans les noms des variables locales et des membres de classe (aucun préfixe requis).
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
timer (not m_timer)
|
||||||
|
```
|
||||||
|
|
||||||
|
**14.** Pour les constantes dans un `enum`, utilisez CamelCase avec une lettre majuscule. ALL\_CAPS est également acceptable. Si l' `enum` est non local, utilisez un `enum class`.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
enum class CompressionMethod
|
||||||
|
{
|
||||||
|
QuickLZ = 0,
|
||||||
|
LZ4 = 1,
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
**15.** Tous les noms doivent être en anglais. La translittération des mots russes n'est pas autorisé.
|
||||||
|
|
||||||
|
not Stroka
|
||||||
|
|
||||||
|
**16.** Les abréviations sont acceptables si elles sont bien connues (quand vous pouvez facilement trouver la signification de l'abréviation dans Wikipédia ou dans un moteur de recherche).
|
||||||
|
|
||||||
|
`AST`, `SQL`.
|
||||||
|
|
||||||
|
Not `NVDH` (some random letters)
|
||||||
|
|
||||||
|
Les mots incomplets sont acceptables si la version abrégée est d'usage courant.
|
||||||
|
|
||||||
|
Vous pouvez également utiliser une abréviation si le nom complet est ensuite incluse dans les commentaires.
|
||||||
|
|
||||||
|
**17.** Les noms de fichiers avec le code source C++ doivent avoir `.cpp` extension. Fichiers d'en-tête doit avoir la `.h` extension.
|
||||||
|
|
||||||
|
## Comment écrire du Code {#how-to-write-code}
|
||||||
|
|
||||||
|
**1.** Gestion de la mémoire.
|
||||||
|
|
||||||
|
Désallocation manuelle de la mémoire (`delete`) ne peut être utilisé que dans le code de la bibliothèque.
|
||||||
|
|
||||||
|
Dans le code de la bibliothèque, de la `delete` l'opérateur ne peut être utilisé dans des destructeurs.
|
||||||
|
|
||||||
|
Dans le code de l'application, la mémoire doit être libérée par l'objet qui la possède.
|
||||||
|
|
||||||
|
Exemple:
|
||||||
|
|
||||||
|
- Le plus simple est de placer un objet sur la pile, ou d'en faire un membre d'une autre classe.
|
||||||
|
- Pour un grand nombre de petits objets, utiliser des récipients.
|
||||||
|
- Pour la désallocation automatique d'un petit nombre d'objets qui résident dans le tas, utilisez `shared_ptr/unique_ptr`.
|
||||||
|
|
||||||
|
**2.** La gestion des ressources.
|
||||||
|
|
||||||
|
Utiliser `RAII` et voir ci-dessus.
|
||||||
|
|
||||||
|
**3.** La gestion des erreurs.
|
||||||
|
|
||||||
|
Utilisez des exceptions. Dans la plupart des cas, vous avez seulement besoin de lancer une exception, et n'avez pas besoin de l'attraper (à cause de `RAII`).
|
||||||
|
|
||||||
|
Dans les applications de traitement de données hors ligne, il est souvent acceptable de ne pas attraper d'exceptions.
|
||||||
|
|
||||||
|
Dans les serveurs qui gèrent les demandes des utilisateurs, il suffit généralement d'attraper des exceptions au niveau supérieur du gestionnaire de connexion.
|
||||||
|
|
||||||
|
Dans les fonctions de thread, vous devez attraper et conserver toutes les exceptions pour les repasser dans le thread principal après `join`.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
/// If there weren't any calculations yet, calculate the first block synchronously
|
||||||
|
if (!started)
|
||||||
|
{
|
||||||
|
calculate();
|
||||||
|
started = true;
|
||||||
|
}
|
||||||
|
else /// If calculations are already in progress, wait for the result
|
||||||
|
pool.wait();
|
||||||
|
|
||||||
|
if (exception)
|
||||||
|
exception->rethrow();
|
||||||
|
```
|
||||||
|
|
||||||
|
Ne cachez jamais les exceptions sans les manipuler. Ne mettez jamais aveuglément toutes les exceptions au journal.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
//Not correct
|
||||||
|
catch (...) {}
|
||||||
|
```
|
||||||
|
|
||||||
|
Si vous devez ignorer certaines exceptions, ne le faites que pour des exceptions spécifiques et repensez le reste.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
catch (const DB::Exception & e)
|
||||||
|
{
|
||||||
|
if (e.code() == ErrorCodes::UNKNOWN_AGGREGATE_FUNCTION)
|
||||||
|
return nullptr;
|
||||||
|
else
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Lorsque vous utilisez des fonctions avec des codes de réponse ou `errno` toujours vérifier le résultat et de lever une exception en cas d'erreur.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
if (0 != close(fd))
|
||||||
|
throwFromErrno("Cannot close file " + file_name, ErrorCodes::CANNOT_CLOSE_FILE);
|
||||||
|
```
|
||||||
|
|
||||||
|
`Do not use assert`.
|
||||||
|
|
||||||
|
**4.** Les types d'Exception.
|
||||||
|
|
||||||
|
Il n'est pas nécessaire d'utiliser une hiérarchie d'exceptions complexe dans le code de l'application. Le texte d'exception doit être compréhensible pour un administrateur système.
|
||||||
|
|
||||||
|
**5.** Lancer des exceptions de destructeurs.
|
||||||
|
|
||||||
|
Ce n'est pas recommandé, mais il est permis.
|
||||||
|
|
||||||
|
Utilisez les options suivantes:
|
||||||
|
|
||||||
|
- Créer une fonction (`done()` ou `finalize()`) qui vont faire tout le travail en amont qui pourrait conduire à une exception. Si cette fonction a été appelée, il ne devrait y avoir aucune exception dans le destructeur plus tard.
|
||||||
|
- Les tâches trop complexes (comme l'envoi de messages sur le réseau) peuvent être placées dans une méthode distincte que l'utilisateur de la classe devra appeler avant la destruction.
|
||||||
|
- Si il y a une exception dans le destructeur, il est préférable de l'enregistrer que de le cacher (si l'enregistreur est disponible).
|
||||||
|
- Dans les applications simples, il est acceptable de compter sur `std::terminate` (pour les cas de `noexcept` par défaut en C++11) pour gérer les exceptions.
|
||||||
|
|
||||||
|
**6.** Blocs de code anonymes.
|
||||||
|
|
||||||
|
Vous pouvez créer un bloc de code séparé à l'intérieur d'une seule fonction afin de rendre certaines variables locales, de sorte que les destructeurs sont appelés à la sortie du bloc.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
Block block = data.in->read();
|
||||||
|
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(mutex);
|
||||||
|
data.ready = true;
|
||||||
|
data.block = block;
|
||||||
|
}
|
||||||
|
|
||||||
|
ready_any.set();
|
||||||
|
```
|
||||||
|
|
||||||
|
**7.** Multithreading.
|
||||||
|
|
||||||
|
Dans les programmes de traitement de données hors ligne:
|
||||||
|
|
||||||
|
- Essayez d'obtenir les meilleures performances possibles sur un seul noyau CPU. Vous pouvez ensuite paralléliser votre code si nécessaire.
|
||||||
|
|
||||||
|
Dans les applications serveur:
|
||||||
|
|
||||||
|
- Utiliser le pool de threads pour traiter les demandes. À ce stade, nous n'avons pas eu de tâches nécessitant un changement de contexte dans l'espace utilisateur.
|
||||||
|
|
||||||
|
La fourche n'est pas utilisé pour la parallélisation.
|
||||||
|
|
||||||
|
**8.** Synchronisation des threads.
|
||||||
|
|
||||||
|
Souvent, il est possible de faire en sorte que différents threads utilisent différentes cellules de mémoire (encore mieux: différentes lignes de cache,) et de ne pas utiliser de synchronisation de thread (sauf `joinAll`).
|
||||||
|
|
||||||
|
Si la synchronisation est nécessaire, dans la plupart des cas, il suffit d'utiliser mutex sous `lock_guard`.
|
||||||
|
|
||||||
|
Dans d'autres cas, utilisez des primitives de synchronisation système. Ne pas utiliser occupé attendre.
|
||||||
|
|
||||||
|
Les opérations atomiques ne doivent être utilisées que dans les cas les plus simples.
|
||||||
|
|
||||||
|
N'essayez pas d'implémenter des structures de données sans verrou à moins qu'il ne s'agisse de votre principal domaine d'expertise.
|
||||||
|
|
||||||
|
**9.** Pointeurs vs références.
|
||||||
|
|
||||||
|
Dans la plupart des cas, préférez les références.
|
||||||
|
|
||||||
|
**10.** const.
|
||||||
|
|
||||||
|
Utiliser des références constantes, des pointeurs vers des constantes, `const_iterator` et const méthodes.
|
||||||
|
|
||||||
|
Considérer `const` pour être par défaut et utiliser non-`const` seulement quand c'est nécessaire.
|
||||||
|
|
||||||
|
Lors du passage de variables par valeur, en utilisant `const` habituellement ne fait pas de sens.
|
||||||
|
|
||||||
|
**11.** non signé.
|
||||||
|
|
||||||
|
Utiliser `unsigned` si nécessaire.
|
||||||
|
|
||||||
|
**12.** Les types numériques.
|
||||||
|
|
||||||
|
Utiliser les types `UInt8`, `UInt16`, `UInt32`, `UInt64`, `Int8`, `Int16`, `Int32`, et `Int64` ainsi que `size_t`, `ssize_t`, et `ptrdiff_t`.
|
||||||
|
|
||||||
|
N'utilisez pas ces types pour les nombres: `signed/unsigned long`, `long long`, `short`, `signed/unsigned char`, `char`.
|
||||||
|
|
||||||
|
**13.** Passer des arguments.
|
||||||
|
|
||||||
|
Passer des valeurs complexes par référence (y compris `std::string`).
|
||||||
|
|
||||||
|
Si une fonction capture la propriété d'un objet créé dans le tas, définissez le type d'argument `shared_ptr` ou `unique_ptr`.
|
||||||
|
|
||||||
|
**14.** Les valeurs de retour.
|
||||||
|
|
||||||
|
Dans la plupart des cas, il suffit d'utiliser `return`. Ne pas écrire `[return std::move(res)]{.strike}`.
|
||||||
|
|
||||||
|
Si la fonction alloue un objet sur le tas et le renvoie, utilisez `shared_ptr` ou `unique_ptr`.
|
||||||
|
|
||||||
|
Dans de rares cas, vous devrez peut-être renvoyer la valeur via un argument. Dans ce cas, l'argument doit être une référence.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
using AggregateFunctionPtr = std::shared_ptr<IAggregateFunction>;
|
||||||
|
|
||||||
|
/** Allows creating an aggregate function by its name.
|
||||||
|
*/
|
||||||
|
class AggregateFunctionFactory
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
AggregateFunctionFactory();
|
||||||
|
AggregateFunctionPtr get(const String & name, const DataTypes & argument_types) const;
|
||||||
|
```
|
||||||
|
|
||||||
|
**15.** espace de noms.
|
||||||
|
|
||||||
|
Il n'est pas nécessaire d'utiliser une `namespace` pour le code de l'application.
|
||||||
|
|
||||||
|
Les petites bibliothèques n'ont pas besoin de cela non plus.
|
||||||
|
|
||||||
|
Pour les bibliothèques moyennes et grandes, mettez tout dans un `namespace`.
|
||||||
|
|
||||||
|
Dans la bibliothèque `.h` fichier, vous pouvez utiliser `namespace detail` pour masquer les détails d'implémentation non nécessaires pour le code de l'application.
|
||||||
|
|
||||||
|
Dans un `.cpp` fichier, vous pouvez utiliser un `static` ou un espace de noms anonyme pour masquer les symboles.
|
||||||
|
|
||||||
|
Aussi, un `namespace` peut être utilisé pour un `enum` pour éviter que les noms correspondants ne tombent dans un `namespace` (mais il est préférable d'utiliser un `enum class`).
|
||||||
|
|
||||||
|
**16.** Initialisation différée.
|
||||||
|
|
||||||
|
Si des arguments sont requis pour l'initialisation, vous ne devriez normalement pas écrire de constructeur par défaut.
|
||||||
|
|
||||||
|
Si plus tard, vous devez retarder l'initialisation, vous pouvez ajouter un constructeur par défaut qui créera un objet invalide. Ou, pour un petit nombre d'objets, vous pouvez utiliser `shared_ptr/unique_ptr`.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
Loader(DB::Connection * connection_, const std::string & query, size_t max_block_size_);
|
||||||
|
|
||||||
|
/// For deferred initialization
|
||||||
|
Loader() {}
|
||||||
|
```
|
||||||
|
|
||||||
|
**17.** Des fonctions virtuelles.
|
||||||
|
|
||||||
|
Si la classe n'est pas destinée à une utilisation polymorphe, vous n'avez pas besoin de rendre les fonctions virtuelles. Ceci s'applique également pour le destructeur.
|
||||||
|
|
||||||
|
**18.** Encodage.
|
||||||
|
|
||||||
|
Utilisez UTF-8 partout. Utiliser `std::string`et`char *`. Ne pas utiliser de `std::wstring`et`wchar_t`.
|
||||||
|
|
||||||
|
**19.** Journalisation.
|
||||||
|
|
||||||
|
Voir les exemples partout dans le code.
|
||||||
|
|
||||||
|
Avant de valider, supprimez toute journalisation sans signification et de débogage, ainsi que tout autre type de sortie de débogage.
|
||||||
|
|
||||||
|
L'enregistrement des cycles doit être évité, même au niveau de la Trace.
|
||||||
|
|
||||||
|
Les journaux doivent être lisibles à tout niveau d'enregistrement.
|
||||||
|
|
||||||
|
La journalisation ne doit être utilisée que dans le code de l'application, pour la plupart.
|
||||||
|
|
||||||
|
Les messages du journal doivent être écrits en anglais.
|
||||||
|
|
||||||
|
Le journal devrait de préférence être compréhensible pour l'administrateur système.
|
||||||
|
|
||||||
|
N'utilisez pas de blasphème dans le journal.
|
||||||
|
|
||||||
|
Utilisez L'encodage UTF-8 dans le journal. Dans de rares cas, vous pouvez utiliser des caractères non-ASCII dans le journal.
|
||||||
|
|
||||||
|
**20.** D'entrée-sortie.
|
||||||
|
|
||||||
|
Ne pas utiliser de `iostreams` dans les cycles internes qui sont critiques pour les performances de l'application (et ne jamais utiliser `stringstream`).
|
||||||
|
|
||||||
|
L'utilisation de la `DB/IO` la bibliothèque la place.
|
||||||
|
|
||||||
|
**21.** La Date et l'heure.
|
||||||
|
|
||||||
|
Voir la `DateLUT` bibliothèque.
|
||||||
|
|
||||||
|
**22.** comprendre.
|
||||||
|
|
||||||
|
Toujours utiliser `#pragma once` au lieu d'inclure des gardes.
|
||||||
|
|
||||||
|
**23.** utiliser.
|
||||||
|
|
||||||
|
`using namespace` n'est pas utilisé. Vous pouvez utiliser `using` avec quelque chose de spécifique. Mais faire local à l'intérieur d'une classe ou d'une fonction.
|
||||||
|
|
||||||
|
**24.** Ne pas utiliser de `trailing return type` pour les fonctions, sauf si nécessaire.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
[auto f() -> void;]{.strike}
|
||||||
|
```
|
||||||
|
|
||||||
|
**25.** Déclaration et initialisation des variables.
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
//right way
|
||||||
|
std::string s = "Hello";
|
||||||
|
std::string s{"Hello"};
|
||||||
|
|
||||||
|
//wrong way
|
||||||
|
auto s = std::string{"Hello"};
|
||||||
|
```
|
||||||
|
|
||||||
|
**26.** Pour les fonctions virtuelles, écrire `virtual` dans la classe de base, mais d'écrire `override` plutôt `virtual` dans les classes descendantes.
|
||||||
|
|
||||||
|
## Fonctionnalités inutilisées de C++ {#unused-features-of-c}
|
||||||
|
|
||||||
|
**1.** L'héritage virtuel n'est pas utilisé.
|
||||||
|
|
||||||
|
**2.** Les spécificateurs d'Exception de C++03 ne sont pas utilisés.
|
||||||
|
|
||||||
|
## Plate {#platform}
|
||||||
|
|
||||||
|
**1.** Nous écrivons du code pour une plate-forme spécifique.
|
||||||
|
|
||||||
|
Mais toutes choses étant égales par ailleurs, le code multi-plateforme ou portable est préféré.
|
||||||
|
|
||||||
|
**2.** Langue: C++17.
|
||||||
|
|
||||||
|
**3.** Compilateur: `gcc`. En ce moment (décembre 2017), le code est compilé en utilisant la version 7.2. (Il peut également être compilé en utilisant `clang 4`.)
|
||||||
|
|
||||||
|
La bibliothèque standard est utilisée (`libstdc++` ou `libc++`).
|
||||||
|
|
||||||
|
**4.**OS: Linux Ubuntu, pas plus vieux que précis.
|
||||||
|
|
||||||
|
**5.**Le Code est écrit pour l'architecture CPU x86\_64.
|
||||||
|
|
||||||
|
Le jeu D'instructions CPU est l'ensemble minimum pris en charge parmi nos serveurs. Actuellement, il s'agit de SSE 4.2.
|
||||||
|
|
||||||
|
**6.** Utiliser `-Wall -Wextra -Werror` drapeaux de compilation.
|
||||||
|
|
||||||
|
**7.** Utilisez la liaison statique avec toutes les bibliothèques sauf celles qui sont difficiles à connecter statiquement (voir la sortie de la `ldd` commande).
|
||||||
|
|
||||||
|
**8.** Le Code est développé et débogué avec les paramètres de version.
|
||||||
|
|
||||||
|
## Outils {#tools}
|
||||||
|
|
||||||
|
**1.** KDevelop est un bon IDE.
|
||||||
|
|
||||||
|
**2.** Pour le débogage, utilisez `gdb`, `valgrind` (`memcheck`), `strace`, `-fsanitize=...`, ou `tcmalloc_minimal_debug`.
|
||||||
|
|
||||||
|
**3.** Pour le profilage, utilisez `Linux Perf`, `valgrind` (`callgrind`), ou `strace -cf`.
|
||||||
|
|
||||||
|
**4.** Les Sources sont dans Git.
|
||||||
|
|
||||||
|
**5.** Assemblée utilise `CMake`.
|
||||||
|
|
||||||
|
**6.** Les programmes sont libérés en utilisant `deb` paquet.
|
||||||
|
|
||||||
|
**7.** Les Commits à master ne doivent pas casser la construction.
|
||||||
|
|
||||||
|
Bien que seules les révisions sélectionnées soient considérées comme réalisables.
|
||||||
|
|
||||||
|
**8.** Faire s'engage aussi souvent que possible, même si le code n'est que partiellement prêt.
|
||||||
|
|
||||||
|
Utilisez des branches à cet effet.
|
||||||
|
|
||||||
|
Si votre code dans le `master` la branche n'est pas constructible pourtant, l'exclure de la construction avant que le `push`. Vous devrez le terminer ou l'enlever dans quelques jours.
|
||||||
|
|
||||||
|
**9.** Pour les modifications non triviales, utilisez les branches et publiez-les sur le serveur.
|
||||||
|
|
||||||
|
**10.** Le code inutilisé est supprimé du référentiel.
|
||||||
|
|
||||||
|
## Bibliothèque {#libraries}
|
||||||
|
|
||||||
|
**1.** La bibliothèque standard C++14 est utilisée (les extensions expérimentales sont autorisées), ainsi que `boost` et `Poco` Framework.
|
||||||
|
|
||||||
|
**2.** Si nécessaire, vous pouvez utiliser toutes les bibliothèques bien connues disponibles dans le package OS.
|
||||||
|
|
||||||
|
S'il existe déjà une bonne solution, utilisez-la, même si cela signifie que vous devez installer une autre bibliothèque.
|
||||||
|
|
||||||
|
(Mais soyez prêt à supprimer les mauvaises bibliothèques du code.)
|
||||||
|
|
||||||
|
**3.** Vous pouvez installer une bibliothèque qui n'est pas dans les paquets, les paquets n'ont pas ce que vous souhaitez ou avez une version périmée ou le mauvais type de compilation.
|
||||||
|
|
||||||
|
**4.** Si la Bibliothèque est petite et n'a pas son propre système de construction complexe, placez les fichiers source dans le `contrib` dossier.
|
||||||
|
|
||||||
|
**5.** La préférence est toujours donnée aux bibliothèques déjà utilisées.
|
||||||
|
|
||||||
|
## Recommandations Générales {#general-recommendations-1}
|
||||||
|
|
||||||
|
**1.** Écrivez aussi peu de code que possible.
|
||||||
|
|
||||||
|
**2.** Essayez la solution la plus simple.
|
||||||
|
|
||||||
|
**3.** N'écrivez pas de code tant que vous ne savez pas comment cela va fonctionner et comment la boucle interne fonctionnera.
|
||||||
|
|
||||||
|
**4.** Dans les cas les plus simples, utilisez `using` au lieu de classes ou des structures.
|
||||||
|
|
||||||
|
**5.** Si possible, n'écrivez pas de constructeurs de copie, d'opérateurs d'affectation, de destructeurs (autres que Virtuels, si la classe contient au moins une fonction virtuelle), de constructeurs de déplacement ou d'opérateurs d'affectation de déplacement. En d'autres termes, les fonctions générées par le compilateur doivent fonctionner correctement. Vous pouvez utiliser `default`.
|
||||||
|
|
||||||
|
**6.** La simplification du Code est encouragée. Réduire la taille de votre code si possible.
|
||||||
|
|
||||||
|
## Recommandations Supplémentaires {#additional-recommendations}
|
||||||
|
|
||||||
|
**1.** Spécifier explicitement `std::` pour les types de `stddef.h`
|
||||||
|
|
||||||
|
n'est pas recommandé. En d'autres termes, nous vous recommandons d'écriture `size_t` plutôt `std::size_t` parce que c'est plus court.
|
||||||
|
|
||||||
|
Il est acceptable d'ajouter `std::`.
|
||||||
|
|
||||||
|
**2.** Spécifier explicitement `std::` pour les fonctions de la bibliothèque C standard
|
||||||
|
|
||||||
|
n'est pas recommandé. En d'autres termes, écrire `memcpy` plutôt `std::memcpy`.
|
||||||
|
|
||||||
|
La raison en est qu'il existe des fonctions non standard similaires, telles que `memmem`. Nous utilisons ces fonctions à l'occasion. Ces fonctions n'existent pas dans `namespace std`.
|
||||||
|
|
||||||
|
Si vous écrivez `std::memcpy` plutôt `memcpy` partout, puis `memmem` sans `std::` va sembler étrange.
|
||||||
|
|
||||||
|
Néanmoins, vous pouvez toujours utiliser `std::` si vous le souhaitez.
|
||||||
|
|
||||||
|
**3.** Utilisation des fonctions de C lorsque les mêmes sont disponibles dans la bibliothèque C++ standard.
|
||||||
|
|
||||||
|
Ceci est acceptable s'il est plus efficace.
|
||||||
|
|
||||||
|
Par exemple, l'utilisation `memcpy` plutôt `std::copy` pour copier de gros morceaux de mémoire.
|
||||||
|
|
||||||
|
**4.** Arguments de fonction multiligne.
|
||||||
|
|
||||||
|
L'un des styles d'emballage suivants est autorisé:
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
function(
|
||||||
|
T1 x1,
|
||||||
|
T2 x2)
|
||||||
|
```
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
function(
|
||||||
|
size_t left, size_t right,
|
||||||
|
const & RangesInDataParts ranges,
|
||||||
|
size_t limit)
|
||||||
|
```
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
function(size_t left, size_t right,
|
||||||
|
const & RangesInDataParts ranges,
|
||||||
|
size_t limit)
|
||||||
|
```
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
function(size_t left, size_t right,
|
||||||
|
const & RangesInDataParts ranges,
|
||||||
|
size_t limit)
|
||||||
|
```
|
||||||
|
|
||||||
|
``` cpp
|
||||||
|
function(
|
||||||
|
size_t left,
|
||||||
|
size_t right,
|
||||||
|
const & RangesInDataParts ranges,
|
||||||
|
size_t limit)
|
||||||
|
```
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/development/style/) <!--hide-->
|
248
docs/fr/development/tests.md
Normal file
248
docs/fr/development/tests.md
Normal file
@ -0,0 +1,248 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# ClickHouse Test {#clickhouse-testing}
|
||||||
|
|
||||||
|
## Les Tests Fonctionnels {#functional-tests}
|
||||||
|
|
||||||
|
Les tests fonctionnels sont les plus simples et pratiques à utiliser. La plupart des fonctionnalités de ClickHouse peuvent être testées avec des tests fonctionnels et elles sont obligatoires à utiliser pour chaque changement de code de ClickHouse qui peut être testé de cette façon.
|
||||||
|
|
||||||
|
Chaque test fonctionnel envoie une ou plusieurs requêtes au serveur clickhouse en cours d'exécution et compare le résultat avec la référence.
|
||||||
|
|
||||||
|
Les Tests sont situés dans `dbms/tests/queries` répertoire. Il y a deux sous-répertoires: `stateless` et `stateful`. Les tests sans état exécutent des requêtes sans données de test préchargées - ils créent souvent de petits ensembles de données synthétiques à la volée, dans le test lui-même. Les tests avec État nécessitent des données de test préchargées de Yandex.Metrica et non disponible pour le grand public. Nous avons tendance à utiliser uniquement `stateless` tests et éviter d'ajouter de nouveaux `stateful` test.
|
||||||
|
|
||||||
|
Chaque test peut être de deux types: `.sql` et `.sh`. `.sql` test est le script SQL simple qui est canalisé vers `clickhouse-client --multiquery --testmode`. `.sh` test est un script qui est exécuté par lui-même.
|
||||||
|
|
||||||
|
Pour exécuter tous les tests, utilisez `dbms/tests/clickhouse-test` outil. Regarder `--help` pour la liste des options possibles. Vous pouvez simplement exécuter tous les tests ou exécuter un sous ensemble de tests filtrés par sous chaîne dans le nom du test: `./clickhouse-test substring`.
|
||||||
|
|
||||||
|
Le moyen le plus simple d'invoquer des tests fonctionnels est de copier `clickhouse-client` de `/usr/bin/`, exécuter `clickhouse-server` et puis exécutez `./clickhouse-test` à partir de son propre répertoire.
|
||||||
|
|
||||||
|
Pour ajouter un nouveau test, créez un `.sql` ou `.sh` fichier dans `dbms/tests/queries/0_stateless` répertoire, vérifiez-le manuellement, puis générez `.reference` fichier de la façon suivante: `clickhouse-client -n --testmode < 00000_test.sql > 00000_test.reference` ou `./00000_test.sh > ./00000_test.reference`.
|
||||||
|
|
||||||
|
Les Tests doivent utiliser (create, drop, etc) uniquement des tables dans `test` base de données supposée être créée au préalable; les tests peuvent également utiliser des tables temporaires.
|
||||||
|
|
||||||
|
Si vous souhaitez utiliser des requêtes distribuées dans les tests fonctionnels, vous pouvez tirer parti de `remote` fonction de table avec `127.0.0.{1..2}` ou vous pouvez utiliser des clusters de test prédéfinis dans le fichier de configuration du serveur comme `test_shard_localhost`.
|
||||||
|
|
||||||
|
Certains tests sont marqués avec `zookeeper`, `shard` ou `long` en leurs noms.
|
||||||
|
`zookeeper` est pour les tests qui utilisent ZooKeeper. `shard` est pour les tests
|
||||||
|
nécessite l'écoute du serveur `127.0.0.*`; `distributed` ou `global` avoir le même
|
||||||
|
sens. `long` est pour les tests qui s'exécutent légèrement plus longtemps qu'une seconde. Vous pouvez
|
||||||
|
désactivez ces groupes de tests en utilisant `--no-zookeeper`, `--no-shard` et
|
||||||
|
`--no-long` options, respectivement.
|
||||||
|
|
||||||
|
## Bugs connus {#known-bugs}
|
||||||
|
|
||||||
|
Si nous connaissons des bugs qui peuvent être facilement reproduits par des tests fonctionnels, nous plaçons des tests fonctionnels préparés dans `dbms/tests/queries/bugs` répertoire. Ces tests seront déplacés à `dbms/tests/queries/0_stateless` quand les bugs sont corrigés.
|
||||||
|
|
||||||
|
## Les Tests D'Intégration {#integration-tests}
|
||||||
|
|
||||||
|
Les tests d'intégration permettent de tester ClickHouse en configuration cluster et clickhouse interaction avec D'autres serveurs comme MySQL, Postgres, MongoDB. Ils sont utiles pour émuler les splits réseau, les chutes de paquets, etc. Ces tests sont exécutés sous Docker et créent plusieurs conteneurs avec divers logiciels.
|
||||||
|
|
||||||
|
Voir `dbms/tests/integration/README.md` sur la façon d'exécuter ces tests.
|
||||||
|
|
||||||
|
Notez que l'intégration de ClickHouse avec des pilotes tiers n'est pas testée. De plus, nous n'avons actuellement pas de tests d'intégration avec nos pilotes JDBC et ODBC.
|
||||||
|
|
||||||
|
## Les Tests Unitaires {#unit-tests}
|
||||||
|
|
||||||
|
Les tests unitaires sont utiles lorsque vous voulez tester non pas le ClickHouse dans son ensemble, mais une seule bibliothèque ou classe isolée. Vous pouvez activer ou désactiver la génération de tests avec `ENABLE_TESTS` Option CMake. Les tests unitaires (et autres programmes de test) sont situés dans `tests` sous-répertoires à travers le code. Pour exécuter des tests unitaires, tapez `ninja test`. Certains tests utilisent `gtest`, mais certains ne sont que des programmes qui renvoient un code de sortie non nul en cas d'échec du test.
|
||||||
|
|
||||||
|
Ce n'est pas nécessairement d'avoir des tests unitaires si le code est déjà couvert par des tests fonctionnels (et les tests fonctionnels sont généralement beaucoup plus simples à utiliser).
|
||||||
|
|
||||||
|
## Tests De Performance {#performance-tests}
|
||||||
|
|
||||||
|
Les tests de Performance permettent de mesurer et de comparer les performances d'une partie isolée de ClickHouse sur des requêtes synthétiques. Les Tests sont situés à `dbms/tests/performance`. Chaque test est représenté par `.xml` fichier avec description du cas de test. Les Tests sont exécutés avec `clickhouse performance-test` outil (qui est incorporé dans `clickhouse` binaire). Voir `--help` pour l'invocation.
|
||||||
|
|
||||||
|
Chaque essai un ou miltiple requêtes (éventuellement avec des combinaisons de paramètres) dans une boucle avec certaines conditions pour l'arrêt (comme “maximum execution speed is not changing in three seconds”) et mesurer certaines mesures sur les performances de la requête (comme “maximum execution speed”). Certains tests peuvent contenir des conditions préalables sur un ensemble de données de test préchargé.
|
||||||
|
|
||||||
|
Si vous souhaitez améliorer les performances de ClickHouse dans certains scénarios, et si des améliorations peuvent être observées sur des requêtes simples, il est fortement recommandé d'écrire un test de performance. Il est toujours logique d'utiliser `perf top` ou d'autres outils perf pendant vos tests.
|
||||||
|
|
||||||
|
## Outils Et Scripts De Test {#test-tools-and-scripts}
|
||||||
|
|
||||||
|
Certains programmes dans `tests` directory ne sont pas des tests préparés, mais sont des outils de test. Par exemple, pour `Lexer` il est un outil `dbms/src/Parsers/tests/lexer` Cela fait juste la tokenisation de stdin et écrit le résultat colorisé dans stdout. Vous pouvez utiliser ce genre d'outils comme exemples de code et pour l'exploration et les tests manuels.
|
||||||
|
|
||||||
|
Vous pouvez également placer une paire de fichiers `.sh` et `.reference` avec l'outil pour l'exécuter sur une entrée prédéfinie - alors le résultat du script peut être comparé à `.reference` fichier. Ce genre de tests ne sont pas automatisés.
|
||||||
|
|
||||||
|
## Tests Divers {#miscellanous-tests}
|
||||||
|
|
||||||
|
Il existe des tests pour les dictionnaires externes situés à `dbms/tests/external_dictionaries` et pour machine appris modèles dans `dbms/tests/external_models`. Ces tests ne sont pas mis à jour et doivent être transférés aux tests d'intégration.
|
||||||
|
|
||||||
|
Il y a un test séparé pour les inserts de quorum. Ce test exécute le cluster ClickHouse sur des serveurs séparés et émule divers cas d'échec: scission réseau, chute de paquets (entre les nœuds ClickHouse, entre Clickhouse et ZooKeeper, entre le serveur ClickHouse et le client, etc.), `kill -9`, `kill -STOP` et `kill -CONT` , comme [Jepsen](https://aphyr.com/tags/Jepsen). Ensuite, le test vérifie que toutes les insertions reconnues ont été écrites et que toutes les insertions rejetées ne l'ont pas été.
|
||||||
|
|
||||||
|
Le test de Quorum a été écrit par une équipe distincte avant que ClickHouse ne soit open-source. Cette équipe ne travaille plus avec ClickHouse. Test a été écrit accidentellement en Java. Pour ces raisons, quorum test doit être réécrit et déplacé vers tests d'intégration.
|
||||||
|
|
||||||
|
## Les Tests Manuels {#manual-testing}
|
||||||
|
|
||||||
|
Lorsque vous développez une nouvelle fonctionnalité, il est raisonnable de tester également manuellement. Vous pouvez le faire avec les étapes suivantes:
|
||||||
|
|
||||||
|
Construire ClickHouse. Exécuter ClickHouse à partir du terminal: changer le répertoire à `dbms/src/programs/clickhouse-server` et de l'exécuter avec `./clickhouse-server`. Il utilisera la configuration (`config.xml`, `users.xml` et les fichiers à l'intérieur `config.d` et `users.d` répertoires) à partir du répertoire courant par défaut. Pour vous connecter au serveur ClickHouse, exécutez `dbms/src/programs/clickhouse-client/clickhouse-client`.
|
||||||
|
|
||||||
|
Notez que tous les outils clickhouse (serveur, client, etc.) ne sont que des liens symboliques vers un seul binaire nommé `clickhouse`. Vous pouvez trouver ce binaire à `dbms/src/programs/clickhouse`. Tous les outils peuvent également être invoquée comme `clickhouse tool` plutôt `clickhouse-tool`.
|
||||||
|
|
||||||
|
Alternativement, vous pouvez installer le paquet ClickHouse: soit une version stable du référentiel Yandex, soit vous pouvez créer un paquet pour vous-même avec `./release` dans les sources de ClickHouse racine. Puis démarrez le serveur avec `sudo service clickhouse-server start` (ou stop pour arrêter le serveur). Rechercher des journaux à `/etc/clickhouse-server/clickhouse-server.log`.
|
||||||
|
|
||||||
|
Lorsque ClickHouse est déjà installé sur votre système, vous pouvez créer un nouveau `clickhouse` binaire et remplacer le binaire:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ sudo service clickhouse-server stop
|
||||||
|
$ sudo cp ./clickhouse /usr/bin/
|
||||||
|
$ sudo service clickhouse-server start
|
||||||
|
```
|
||||||
|
|
||||||
|
Vous pouvez également arrêter system clickhouse-server et exécuter le vôtre avec la même configuration mais en vous connectant au terminal:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ sudo service clickhouse-server stop
|
||||||
|
$ sudo -u clickhouse /usr/bin/clickhouse server --config-file /etc/clickhouse-server/config.xml
|
||||||
|
```
|
||||||
|
|
||||||
|
Exemple avec gdb:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ sudo -u clickhouse gdb --args /usr/bin/clickhouse server --config-file /etc/clickhouse-server/config.xml
|
||||||
|
```
|
||||||
|
|
||||||
|
Si le système clickhouse-server est déjà en cours d'exécution et que vous ne voulez pas l'arrêter, vous pouvez modifier les numéros de port dans votre `config.xml` (ou de les remplacer dans un fichier `config.d` répertoire), fournissez le chemin de données approprié, et exécutez-le.
|
||||||
|
|
||||||
|
`clickhouse` binary n'a presque aucune dépendance et fonctionne sur un large éventail de distributions Linux. Rapide et sale de tester vos modifications sur un serveur, vous pouvez simplement `scp` votre douce construite `clickhouse` binaire à votre serveur et ensuite l'exécuter comme dans les exemples ci-dessus.
|
||||||
|
|
||||||
|
## L'Environnement De Test {#testing-environment}
|
||||||
|
|
||||||
|
Avant de publier la version stable, nous la déployons sur l'environnement de test. L'environnement de test est un cluster processus 1/39 partie de [Yandex.Metrica](https://metrica.yandex.com/) données. Nous partageons notre environnement de test avec Yandex.Metrica de l'équipe. ClickHouse est mis à niveau sans temps d'arrêt au-dessus des données existantes. Nous regardons d'abord que les données sont traitées avec succès sans retard par rapport au temps réel, la réplication continue à fonctionner et il n'y a pas de problèmes visibles pour Yandex.Metrica de l'équipe. Première vérification peut être effectuée de la façon suivante:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT hostName() AS h, any(version()), any(uptime()), max(UTCEventTime), count() FROM remote('example01-01-{1..3}t', merge, hits) WHERE EventDate >= today() - 2 GROUP BY h ORDER BY h;
|
||||||
|
```
|
||||||
|
|
||||||
|
Dans certains cas, nous déployons également à l'environnement de test de nos équipes d'amis dans Yandex: marché, Cloud, etc. Nous avons également des serveurs matériels qui sont utilisés à des fins de développement.
|
||||||
|
|
||||||
|
## Les Tests De Charge {#load-testing}
|
||||||
|
|
||||||
|
Après le déploiement dans l'environnement de test, nous exécutons des tests de charge avec des requêtes du cluster de production. Ceci est fait manuellement.
|
||||||
|
|
||||||
|
Assurez-vous que vous avez activé `query_log` sur votre cluster de production.
|
||||||
|
|
||||||
|
Recueillir le journal des requêtes pour une journée ou plus:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ clickhouse-client --query="SELECT DISTINCT query FROM system.query_log WHERE event_date = today() AND query LIKE '%ym:%' AND query NOT LIKE '%system.query_log%' AND type = 2 AND is_initial_query" > queries.tsv
|
||||||
|
```
|
||||||
|
|
||||||
|
C'est une façon compliquée exemple. `type = 2` filtrera les requêtes exécutées avec succès. `query LIKE '%ym:%'` est de sélectionner les requêtes de Yandex.Metrica. `is_initial_query` est de sélectionner uniquement les requêtes initiées par le client, pas par ClickHouse lui-même (en tant que partie du traitement de requête distribué).
|
||||||
|
|
||||||
|
`scp` ce journal à votre cluster de test et l'exécuter comme suit:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ clickhouse benchmark --concurrency 16 < queries.tsv
|
||||||
|
```
|
||||||
|
|
||||||
|
(probablement vous voulez aussi spécifier un `--user`)
|
||||||
|
|
||||||
|
Ensuite, laissez-le pour une nuit ou un week-end et allez vous reposer.
|
||||||
|
|
||||||
|
Tu devrais vérifier ça `clickhouse-server` ne plante pas, l'empreinte mémoire est limitée et les performances ne se dégradent pas au fil du temps.
|
||||||
|
|
||||||
|
Les délais précis d'exécution des requêtes ne sont pas enregistrés et ne sont pas comparés en raison de la grande variabilité des requêtes et de l'environnement.
|
||||||
|
|
||||||
|
## Essais De Construction {#build-tests}
|
||||||
|
|
||||||
|
Les tests de construction permettent de vérifier que la construction n'est pas interrompue sur diverses configurations alternatives et sur certains systèmes étrangers. Les Tests sont situés à `ci` répertoire. Ils exécutent build from source à L'intérieur de Docker, Vagrant, et parfois avec `qemu-user-static` à l'intérieur de Docker. Ces tests sont en cours de développement et les essais ne sont pas automatisées.
|
||||||
|
|
||||||
|
Motivation:
|
||||||
|
|
||||||
|
Normalement, nous libérons et exécutons tous les tests sur une seule variante de construction ClickHouse. Mais il existe des variantes de construction alternatives qui ne sont pas complètement testées. Exemple:
|
||||||
|
|
||||||
|
- construire sur FreeBSD;
|
||||||
|
- construire sur Debian avec les bibliothèques des paquets système;
|
||||||
|
- construire avec des liens partagés de bibliothèques;
|
||||||
|
- construire sur la plate-forme AArch64;
|
||||||
|
- construire sur la plate-forme PowerPc.
|
||||||
|
|
||||||
|
Par exemple, construire avec des paquets système est une mauvaise pratique, car nous ne pouvons pas garantir quelle version exacte des paquets un système aura. Mais c'est vraiment nécessaire pour les responsables Debian. Pour cette raison, nous devons au moins soutenir cette variante de construction. Un autre exemple: la liaison partagée est une source commune de problèmes, mais elle est nécessaire pour certains amateurs.
|
||||||
|
|
||||||
|
Bien que nous ne puissions pas exécuter tous les tests sur toutes les variantes de builds, nous voulons vérifier au moins que les différentes variantes de build ne sont pas cassées. Pour cela nous utilisons les essais de construction.
|
||||||
|
|
||||||
|
## Test De Compatibilité Du Protocole {#testing-for-protocol-compatibility}
|
||||||
|
|
||||||
|
Lorsque nous étendons le protocole réseau ClickHouse, nous testons manuellement que l'ancien clickhouse-client fonctionne avec le nouveau clickhouse-server et que le nouveau clickhouse-client fonctionne avec l'ancien clickhouse-server (simplement en exécutant des binaires à partir des paquets correspondants).
|
||||||
|
|
||||||
|
## L'Aide Du Compilateur {#help-from-the-compiler}
|
||||||
|
|
||||||
|
Code ClickHouse principal (qui est situé dans `dbms` annuaire) est construit avec `-Wall -Wextra -Werror` et avec quelques avertissements supplémentaires activés. Bien que ces options ne soient pas activées pour les bibliothèques tierces.
|
||||||
|
|
||||||
|
Clang a des avertissements encore plus utiles - vous pouvez les chercher avec `-Weverything` et choisissez quelque chose à construire par défaut.
|
||||||
|
|
||||||
|
Pour les builds de production, gcc est utilisé (il génère toujours un code légèrement plus efficace que clang). Pour le développement, clang est généralement plus pratique à utiliser. Vous pouvez construire sur votre propre machine avec le mode débogage (pour économiser la batterie de votre ordinateur portable), mais veuillez noter que le compilateur est capable de générer plus d'Avertissements avec `-O3` grâce à une meilleure analyse du flux de contrôle et de l'inter-procédure. Lors de la construction avec clang, `libc++` est utilisé au lieu de `libstdc++` et lors de la construction avec le mode débogage, la version de débogage de `libc++` est utilisé qui permet d'attraper plus d'erreurs à l'exécution.
|
||||||
|
|
||||||
|
## Désinfectant {#sanitizers}
|
||||||
|
|
||||||
|
**Désinfectant d'adresse**.
|
||||||
|
Nous exécutons des tests fonctionnels et d'intégration sous ASan sur la base de per-commit.
|
||||||
|
|
||||||
|
**Valgrind (Memcheck)**.
|
||||||
|
Nous effectuons des tests fonctionnels sous Valgrind pendant la nuit. Cela prend plusieurs heures. Actuellement il y a un faux positif connu dans `re2` bibliothèque, consultez [cet article](https://research.swtch.com/sparse).
|
||||||
|
|
||||||
|
**Désinfectant de comportement indéfini.**
|
||||||
|
Nous exécutons des tests fonctionnels et d'intégration sous ASan sur la base de per-commit.
|
||||||
|
|
||||||
|
**Désinfectant pour filetage**.
|
||||||
|
Nous exécutons des tests fonctionnels sous TSan sur la base de per-commit. Nous n'exécutons toujours pas de tests D'intégration sous TSan sur la base de la validation.
|
||||||
|
|
||||||
|
**Mémoire de désinfectant**.
|
||||||
|
Actuellement, nous n'utilisons toujours pas MSan.
|
||||||
|
|
||||||
|
**Débogueur allocateur.**
|
||||||
|
Version de débogage de `jemalloc` est utilisé pour la construction de débogage.
|
||||||
|
|
||||||
|
## Fuzzing {#fuzzing}
|
||||||
|
|
||||||
|
Nous utilisons un simple test fuzz pour générer des requêtes SQL aléatoires et vérifier que le serveur ne meurt pas. Le test de Fuzz est effectué avec un désinfectant D'adresse. Vous pouvez le trouver dans `00746_sql_fuzzy.pl`. Ce test doit être exécuté en continu (pendant la nuit et plus longtemps).
|
||||||
|
|
||||||
|
En décembre 2018, nous n'utilisons toujours pas de tests fuzz isolés du code de la bibliothèque.
|
||||||
|
|
||||||
|
## Audit De Sécurité {#security-audit}
|
||||||
|
|
||||||
|
Les gens du Département Cloud de Yandex font un aperçu de base des capacités de ClickHouse du point de vue de la sécurité.
|
||||||
|
|
||||||
|
## Analyseurs Statiques {#static-analyzers}
|
||||||
|
|
||||||
|
Nous courons `PVS-Studio` par commettre base. Nous avons évalué `clang-tidy`, `Coverity`, `cppcheck`, `PVS-Studio`, `tscancode`. Vous trouverez des instructions pour l'utilisation dans `dbms/tests/instructions/` répertoire. Aussi, vous pouvez lire [l'article en russe](https://habr.com/company/yandex/blog/342018/).
|
||||||
|
|
||||||
|
Si vous utilisez `CLion` en tant QU'IDE, vous pouvez tirer parti de certains `clang-tidy` contrôles de la boîte.
|
||||||
|
|
||||||
|
## Durcir {#hardening}
|
||||||
|
|
||||||
|
`FORTIFY_SOURCE` est utilisé par défaut. C'est presque inutile, mais cela a toujours du sens dans de rares cas et nous ne le désactivons pas.
|
||||||
|
|
||||||
|
## Code De Style {#code-style}
|
||||||
|
|
||||||
|
Les règles de style de Code sont décrites [ici](https://clickhouse.tech/docs/en/development/style/).
|
||||||
|
|
||||||
|
Pour vérifier certaines violations de style courantes, vous pouvez utiliser `utils/check-style` script.
|
||||||
|
|
||||||
|
Pour forcer le style approprié de votre code, vous pouvez utiliser `clang-format`. Fichier `.clang-format` est situé à la racine des sources. Il correspond principalement à notre style de code réel. Mais il n'est pas recommandé d'appliquer `clang-format` pour les fichiers existants, car il rend le formatage pire. Vous pouvez utiliser `clang-format-diff` outil que vous pouvez trouver dans clang référentiel source.
|
||||||
|
|
||||||
|
Alternativement vous pouvez essayer `uncrustify` outil pour reformater votre code. La Configuration est en `uncrustify.cfg` dans la racine des sources. Il est moins testé que `clang-format`.
|
||||||
|
|
||||||
|
`CLion` a son propre formateur de code qui doit être réglé pour notre style de code.
|
||||||
|
|
||||||
|
## Tests Metrica B2B {#metrica-b2b-tests}
|
||||||
|
|
||||||
|
Chaque version de ClickHouse est testée avec les moteurs Yandex Metrica et AppMetrica. Les versions de test et stables de ClickHouse sont déployées sur des machines virtuelles et exécutées avec une petite copie de metrica engine qui traite un échantillon fixe de données d'entrée. Ensuite, les résultats de deux instances de metrica engine sont comparés ensemble.
|
||||||
|
|
||||||
|
Ces tests sont automatisés par une équipe distincte. En raison du nombre élevé de pièces en mouvement, les tests échouent la plupart du temps complètement raisons, qui sont très difficiles à comprendre. Très probablement, ces tests ont une valeur négative pour nous. Néanmoins, ces tests se sont révélés utiles dans environ une ou deux fois sur des centaines.
|
||||||
|
|
||||||
|
## La Couverture De Test {#test-coverage}
|
||||||
|
|
||||||
|
En juillet 2018, nous ne suivons pas la couverture des tests.
|
||||||
|
|
||||||
|
## Automatisation Des Tests {#test-automation}
|
||||||
|
|
||||||
|
Nous exécutons des tests avec Yandex CI interne et le système d'automatisation des tâches nommé “Sandbox”.
|
||||||
|
|
||||||
|
Les travaux de construction et les tests sont exécutés dans Sandbox sur une base de validation. Les paquets résultants et les résultats des tests sont publiés dans GitHub et peuvent être téléchargés par des liens directs. Les artefacts sont stockés éternellement. Lorsque vous envoyez une demande de tirage sur GitHub, nous l'étiquetons comme “can be tested” et notre système CI construira des paquets ClickHouse (release, debug, avec un désinfectant d'adresse, etc.) pour vous.
|
||||||
|
|
||||||
|
Nous n'utilisons pas Travis CI en raison de la limite de temps et de puissance de calcul.
|
||||||
|
On n'utilise pas Jenkins. Il a été utilisé avant et maintenant nous sommes heureux de ne pas utiliser Jenkins.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/development/tests/) <!--hide-->
|
57
docs/fr/faq/general.md
Normal file
57
docs/fr/faq/general.md
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Questions Générales {#general-questions}
|
||||||
|
|
||||||
|
## Pourquoi Ne Pas Utiliser Quelque Chose Comme MapReduce? {#why-not-use-something-like-mapreduce}
|
||||||
|
|
||||||
|
Nous pouvons nous référer à des systèmes comme MapReduce en tant que systèmes informatiques distribués dans lesquels l'opération de réduction est basée sur le tri distribué. La solution open-source la plus courante dans cette classe est [Apache Hadoop](http://hadoop.apache.org). Yandex utilise sa solution interne, YT.
|
||||||
|
|
||||||
|
Ces systèmes ne sont pas appropriés pour les requêtes en ligne en raison de leur latence élevée. En d'autres termes, ils ne peuvent pas être utilisés comme back-end pour une interface web. Ces types de systèmes ne sont pas utiles pour les mises à jour de données en temps réel. Le tri distribué n'est pas la meilleure façon d'effectuer des opérations de réduction si le résultat de l'opération et tous les résultats intermédiaires (s'il y en a) sont situés dans la RAM d'un seul serveur, ce qui est généralement le cas pour les requêtes en ligne. Dans un tel cas, une table de hachage est un moyen optimal d'effectuer des opérations de réduction. Une approche courante pour optimiser les tâches map-reduce est la pré-agrégation (réduction partielle) à l'aide d'une table de hachage en RAM. L'utilisateur effectue cette optimisation manuellement. Le tri distribué est l'une des principales causes de réduction des performances lors de l'exécution de tâches simples de réduction de la carte.
|
||||||
|
|
||||||
|
La plupart des implémentations MapReduce vous permettent d'exécuter du code arbitraire sur un cluster. Mais un langage de requête déclaratif est mieux adapté à OLAP pour exécuter des expériences rapidement. Par exemple, Hadoop a ruche et Cochon. Considérez également Cloudera Impala ou Shark (obsolète) pour Spark, ainsi que Spark SQL, Presto et Apache Drill. Les performances lors de l'exécution de telles tâches sont très sous-optimales par rapport aux systèmes spécialisés, mais une latence relativement élevée rend irréaliste l'utilisation de ces systèmes comme backend pour une interface web.
|
||||||
|
|
||||||
|
## Que Faire si j'ai un problème avec les encodages lors de l'utilisation D'Oracle via ODBC? {#oracle-odbc-encodings}
|
||||||
|
|
||||||
|
Si vous utilisez Oracle via le pilote ODBC comme source de dictionnaires externes, vous devez définir la valeur correcte pour `NLS_LANG` variable d'environnement dans `/etc/default/clickhouse`. Pour plus d'informations, voir le [FAQ Oracle NLS\_LANG](https://www.oracle.com/technetwork/products/globalization/nls-lang-099431.html).
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
NLS_LANG=RUSSIAN_RUSSIA.UTF8
|
||||||
|
```
|
||||||
|
|
||||||
|
## Comment exporter des données de ClickHouse vers un fichier? {#how-to-export-to-file}
|
||||||
|
|
||||||
|
### Utilisation de la Clause INTO OUTFILE {#using-into-outfile-clause}
|
||||||
|
|
||||||
|
Ajouter un [INTO OUTFILE](../query_language/select/#into-outfile-clause) clause à votre requête.
|
||||||
|
|
||||||
|
Exemple:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT * FROM table INTO OUTFILE 'file'
|
||||||
|
```
|
||||||
|
|
||||||
|
Par défaut, ClickHouse utilise [TabSeparated](../interfaces/formats.md#tabseparated) format pour les données de sortie. Pour sélectionner le [format de données](../interfaces/formats.md), utiliser le [FORMAT de la clause](../query_language/select/#format-clause).
|
||||||
|
|
||||||
|
Exemple:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT * FROM table INTO OUTFILE 'file' FORMAT CSV
|
||||||
|
```
|
||||||
|
|
||||||
|
### Utilisation d'une Table de moteur de fichiers {#using-a-file-engine-table}
|
||||||
|
|
||||||
|
Voir [Fichier](../operations/table_engines/file.md).
|
||||||
|
|
||||||
|
### Utilisation De La Redirection En Ligne De Commande {#using-command-line-redirection}
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
$ clickhouse-client --query "SELECT * from table" --format FormatName > result.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Voir [clickhouse-client](../interfaces/cli.md).
|
||||||
|
|
||||||
|
{## [Article Original](https://clickhouse.tech/docs/en/faq/general/) ##}
|
126
docs/fr/getting_started/example_datasets/amplab_benchmark.md
Normal file
126
docs/fr/getting_started/example_datasets/amplab_benchmark.md
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# AMPLab Big Data Benchmark {#amplab-big-data-benchmark}
|
||||||
|
|
||||||
|
Tu vois https://amplab.cs.berkeley.edu/benchmark/
|
||||||
|
|
||||||
|
Inscrivez-vous pour un compte GRATUIT à https://aws.amazon.com. il nécessite une carte de crédit, e-mail et numéro de téléphone. Obtenir une nouvelle clé d'accès à https://console.aws.amazon.com/iam/home?nc2=h\_m\_sc\#security\_credential
|
||||||
|
|
||||||
|
Exécutez ce qui suit dans la console:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ sudo apt-get install s3cmd
|
||||||
|
$ mkdir tiny; cd tiny;
|
||||||
|
$ s3cmd sync s3://big-data-benchmark/pavlo/text-deflate/tiny/ .
|
||||||
|
$ cd ..
|
||||||
|
$ mkdir 1node; cd 1node;
|
||||||
|
$ s3cmd sync s3://big-data-benchmark/pavlo/text-deflate/1node/ .
|
||||||
|
$ cd ..
|
||||||
|
$ mkdir 5nodes; cd 5nodes;
|
||||||
|
$ s3cmd sync s3://big-data-benchmark/pavlo/text-deflate/5nodes/ .
|
||||||
|
$ cd ..
|
||||||
|
```
|
||||||
|
|
||||||
|
Exécutez les requêtes ClickHouse suivantes:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE rankings_tiny
|
||||||
|
(
|
||||||
|
pageURL String,
|
||||||
|
pageRank UInt32,
|
||||||
|
avgDuration UInt32
|
||||||
|
) ENGINE = Log;
|
||||||
|
|
||||||
|
CREATE TABLE uservisits_tiny
|
||||||
|
(
|
||||||
|
sourceIP String,
|
||||||
|
destinationURL String,
|
||||||
|
visitDate Date,
|
||||||
|
adRevenue Float32,
|
||||||
|
UserAgent String,
|
||||||
|
cCode FixedString(3),
|
||||||
|
lCode FixedString(6),
|
||||||
|
searchWord String,
|
||||||
|
duration UInt32
|
||||||
|
) ENGINE = MergeTree(visitDate, visitDate, 8192);
|
||||||
|
|
||||||
|
CREATE TABLE rankings_1node
|
||||||
|
(
|
||||||
|
pageURL String,
|
||||||
|
pageRank UInt32,
|
||||||
|
avgDuration UInt32
|
||||||
|
) ENGINE = Log;
|
||||||
|
|
||||||
|
CREATE TABLE uservisits_1node
|
||||||
|
(
|
||||||
|
sourceIP String,
|
||||||
|
destinationURL String,
|
||||||
|
visitDate Date,
|
||||||
|
adRevenue Float32,
|
||||||
|
UserAgent String,
|
||||||
|
cCode FixedString(3),
|
||||||
|
lCode FixedString(6),
|
||||||
|
searchWord String,
|
||||||
|
duration UInt32
|
||||||
|
) ENGINE = MergeTree(visitDate, visitDate, 8192);
|
||||||
|
|
||||||
|
CREATE TABLE rankings_5nodes_on_single
|
||||||
|
(
|
||||||
|
pageURL String,
|
||||||
|
pageRank UInt32,
|
||||||
|
avgDuration UInt32
|
||||||
|
) ENGINE = Log;
|
||||||
|
|
||||||
|
CREATE TABLE uservisits_5nodes_on_single
|
||||||
|
(
|
||||||
|
sourceIP String,
|
||||||
|
destinationURL String,
|
||||||
|
visitDate Date,
|
||||||
|
adRevenue Float32,
|
||||||
|
UserAgent String,
|
||||||
|
cCode FixedString(3),
|
||||||
|
lCode FixedString(6),
|
||||||
|
searchWord String,
|
||||||
|
duration UInt32
|
||||||
|
) ENGINE = MergeTree(visitDate, visitDate, 8192);
|
||||||
|
```
|
||||||
|
|
||||||
|
Retournez à la console:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ for i in tiny/rankings/*.deflate; do echo $i; zlib-flate -uncompress < $i | clickhouse-client --host=example-perftest01j --query="INSERT INTO rankings_tiny FORMAT CSV"; done
|
||||||
|
$ for i in tiny/uservisits/*.deflate; do echo $i; zlib-flate -uncompress < $i | clickhouse-client --host=example-perftest01j --query="INSERT INTO uservisits_tiny FORMAT CSV"; done
|
||||||
|
$ for i in 1node/rankings/*.deflate; do echo $i; zlib-flate -uncompress < $i | clickhouse-client --host=example-perftest01j --query="INSERT INTO rankings_1node FORMAT CSV"; done
|
||||||
|
$ for i in 1node/uservisits/*.deflate; do echo $i; zlib-flate -uncompress < $i | clickhouse-client --host=example-perftest01j --query="INSERT INTO uservisits_1node FORMAT CSV"; done
|
||||||
|
$ for i in 5nodes/rankings/*.deflate; do echo $i; zlib-flate -uncompress < $i | clickhouse-client --host=example-perftest01j --query="INSERT INTO rankings_5nodes_on_single FORMAT CSV"; done
|
||||||
|
$ for i in 5nodes/uservisits/*.deflate; do echo $i; zlib-flate -uncompress < $i | clickhouse-client --host=example-perftest01j --query="INSERT INTO uservisits_5nodes_on_single FORMAT CSV"; done
|
||||||
|
```
|
||||||
|
|
||||||
|
Requêtes pour obtenir des échantillons de données:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT pageURL, pageRank FROM rankings_1node WHERE pageRank > 1000
|
||||||
|
|
||||||
|
SELECT substring(sourceIP, 1, 8), sum(adRevenue) FROM uservisits_1node GROUP BY substring(sourceIP, 1, 8)
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
sourceIP,
|
||||||
|
sum(adRevenue) AS totalRevenue,
|
||||||
|
avg(pageRank) AS pageRank
|
||||||
|
FROM rankings_1node ALL INNER JOIN
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
sourceIP,
|
||||||
|
destinationURL AS pageURL,
|
||||||
|
adRevenue
|
||||||
|
FROM uservisits_1node
|
||||||
|
WHERE (visitDate > '1980-01-01') AND (visitDate < '1980-04-01')
|
||||||
|
) USING pageURL
|
||||||
|
GROUP BY sourceIP
|
||||||
|
ORDER BY totalRevenue DESC
|
||||||
|
LIMIT 1
|
||||||
|
```
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/getting_started/example_datasets/amplab_benchmark/) <!--hide-->
|
78
docs/fr/getting_started/example_datasets/criteo.md
Normal file
78
docs/fr/getting_started/example_datasets/criteo.md
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Téraoctet de journaux de clics de Criteo {#terabyte-of-click-logs-from-criteo}
|
||||||
|
|
||||||
|
Télécharger les données à partir de http://labs.criteo.com/downloads/download-terabyte-click-logs/
|
||||||
|
|
||||||
|
Créer une table pour importer le journal:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE criteo_log (date Date, clicked UInt8, int1 Int32, int2 Int32, int3 Int32, int4 Int32, int5 Int32, int6 Int32, int7 Int32, int8 Int32, int9 Int32, int10 Int32, int11 Int32, int12 Int32, int13 Int32, cat1 String, cat2 String, cat3 String, cat4 String, cat5 String, cat6 String, cat7 String, cat8 String, cat9 String, cat10 String, cat11 String, cat12 String, cat13 String, cat14 String, cat15 String, cat16 String, cat17 String, cat18 String, cat19 String, cat20 String, cat21 String, cat22 String, cat23 String, cat24 String, cat25 String, cat26 String) ENGINE = Log
|
||||||
|
```
|
||||||
|
|
||||||
|
Télécharger les données:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ for i in {00..23}; do echo $i; zcat datasets/criteo/day_${i#0}.gz | sed -r 's/^/2000-01-'${i/00/24}'\t/' | clickhouse-client --host=example-perftest01j --query="INSERT INTO criteo_log FORMAT TabSeparated"; done
|
||||||
|
```
|
||||||
|
|
||||||
|
Créer une table pour les données converties:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE criteo
|
||||||
|
(
|
||||||
|
date Date,
|
||||||
|
clicked UInt8,
|
||||||
|
int1 Int32,
|
||||||
|
int2 Int32,
|
||||||
|
int3 Int32,
|
||||||
|
int4 Int32,
|
||||||
|
int5 Int32,
|
||||||
|
int6 Int32,
|
||||||
|
int7 Int32,
|
||||||
|
int8 Int32,
|
||||||
|
int9 Int32,
|
||||||
|
int10 Int32,
|
||||||
|
int11 Int32,
|
||||||
|
int12 Int32,
|
||||||
|
int13 Int32,
|
||||||
|
icat1 UInt32,
|
||||||
|
icat2 UInt32,
|
||||||
|
icat3 UInt32,
|
||||||
|
icat4 UInt32,
|
||||||
|
icat5 UInt32,
|
||||||
|
icat6 UInt32,
|
||||||
|
icat7 UInt32,
|
||||||
|
icat8 UInt32,
|
||||||
|
icat9 UInt32,
|
||||||
|
icat10 UInt32,
|
||||||
|
icat11 UInt32,
|
||||||
|
icat12 UInt32,
|
||||||
|
icat13 UInt32,
|
||||||
|
icat14 UInt32,
|
||||||
|
icat15 UInt32,
|
||||||
|
icat16 UInt32,
|
||||||
|
icat17 UInt32,
|
||||||
|
icat18 UInt32,
|
||||||
|
icat19 UInt32,
|
||||||
|
icat20 UInt32,
|
||||||
|
icat21 UInt32,
|
||||||
|
icat22 UInt32,
|
||||||
|
icat23 UInt32,
|
||||||
|
icat24 UInt32,
|
||||||
|
icat25 UInt32,
|
||||||
|
icat26 UInt32
|
||||||
|
) ENGINE = MergeTree(date, intHash32(icat1), (date, intHash32(icat1)), 8192)
|
||||||
|
```
|
||||||
|
|
||||||
|
Transformez les données du journal brut et placez - les dans la deuxième table:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
INSERT INTO criteo SELECT date, clicked, int1, int2, int3, int4, int5, int6, int7, int8, int9, int10, int11, int12, int13, reinterpretAsUInt32(unhex(cat1)) AS icat1, reinterpretAsUInt32(unhex(cat2)) AS icat2, reinterpretAsUInt32(unhex(cat3)) AS icat3, reinterpretAsUInt32(unhex(cat4)) AS icat4, reinterpretAsUInt32(unhex(cat5)) AS icat5, reinterpretAsUInt32(unhex(cat6)) AS icat6, reinterpretAsUInt32(unhex(cat7)) AS icat7, reinterpretAsUInt32(unhex(cat8)) AS icat8, reinterpretAsUInt32(unhex(cat9)) AS icat9, reinterpretAsUInt32(unhex(cat10)) AS icat10, reinterpretAsUInt32(unhex(cat11)) AS icat11, reinterpretAsUInt32(unhex(cat12)) AS icat12, reinterpretAsUInt32(unhex(cat13)) AS icat13, reinterpretAsUInt32(unhex(cat14)) AS icat14, reinterpretAsUInt32(unhex(cat15)) AS icat15, reinterpretAsUInt32(unhex(cat16)) AS icat16, reinterpretAsUInt32(unhex(cat17)) AS icat17, reinterpretAsUInt32(unhex(cat18)) AS icat18, reinterpretAsUInt32(unhex(cat19)) AS icat19, reinterpretAsUInt32(unhex(cat20)) AS icat20, reinterpretAsUInt32(unhex(cat21)) AS icat21, reinterpretAsUInt32(unhex(cat22)) AS icat22, reinterpretAsUInt32(unhex(cat23)) AS icat23, reinterpretAsUInt32(unhex(cat24)) AS icat24, reinterpretAsUInt32(unhex(cat25)) AS icat25, reinterpretAsUInt32(unhex(cat26)) AS icat26 FROM criteo_log;
|
||||||
|
|
||||||
|
DROP TABLE criteo_log;
|
||||||
|
```
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/getting_started/example_datasets/criteo/) <!--hide-->
|
18
docs/fr/getting_started/example_datasets/index.md
Normal file
18
docs/fr/getting_started/example_datasets/index.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Exemple De Jeux De Données {#example-datasets}
|
||||||
|
|
||||||
|
Cette section décrit comment obtenir des exemples de jeux de données et les importer dans ClickHouse.
|
||||||
|
Pour certains ensembles de données exemple les requêtes sont également disponibles.
|
||||||
|
|
||||||
|
- [Yandex Anonymisé.Metrica Dataset](metrica.md)
|
||||||
|
- [Référence Du Schéma En Étoile](star_schema.md)
|
||||||
|
- [WikiStat](wikistat.md)
|
||||||
|
- [Téraoctet de journaux de clics de Criteo](criteo.md)
|
||||||
|
- [AMPLab Big Data Benchmark](amplab_benchmark.md)
|
||||||
|
- [New York Taxi Données](nyc_taxi.md)
|
||||||
|
- [OnTime](ontime.md)
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/getting_started/example_datasets) <!--hide-->
|
67
docs/fr/getting_started/example_datasets/metrica.md
Normal file
67
docs/fr/getting_started/example_datasets/metrica.md
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Yandex Anonymisé.Metrica De Données {#anonymized-yandex-metrica-data}
|
||||||
|
|
||||||
|
Dataset se compose de deux tables contenant des données anonymisées sur les hits (`hits_v1`) et les visites (`visits_v1`) de Yandex.Metrica. Vous pouvez en savoir plus sur Yandex.Metrica dans [Histoire de ClickHouse](../../introduction/history.md) section.
|
||||||
|
|
||||||
|
L'ensemble de données se compose de deux tables, l'une d'elles peut être téléchargée sous forme compressée `tsv.xz` fichier ou comme partitions préparées. En outre, une version étendue de l' `hits` table contenant 100 millions de lignes est disponible comme TSV à https://clickhouse-datasets.s3.yandex.net/hits/tsv/hits\_100m\_obfuscated\_v1.tsv.xz et comme partitions préparées à https://clickhouse-datasets.s3.yandex.net/hits/partitions/hits\_100m\_obfuscated\_v1.tar.xz.
|
||||||
|
|
||||||
|
## Obtention de Tables à partir de Partitions préparées {#obtaining-tables-from-prepared-partitions}
|
||||||
|
|
||||||
|
Télécharger et importer la table hits:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
curl -O https://clickhouse-datasets.s3.yandex.net/hits/partitions/hits_v1.tar
|
||||||
|
tar xvf hits_v1.tar -C /var/lib/clickhouse # path to ClickHouse data directory
|
||||||
|
# check permissions on unpacked data, fix if required
|
||||||
|
sudo service clickhouse-server restart
|
||||||
|
clickhouse-client --query "SELECT COUNT(*) FROM datasets.hits_v1"
|
||||||
|
```
|
||||||
|
|
||||||
|
Télécharger et importer des visites:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
curl -O https://clickhouse-datasets.s3.yandex.net/visits/partitions/visits_v1.tar
|
||||||
|
tar xvf visits_v1.tar -C /var/lib/clickhouse # path to ClickHouse data directory
|
||||||
|
# check permissions on unpacked data, fix if required
|
||||||
|
sudo service clickhouse-server restart
|
||||||
|
clickhouse-client --query "SELECT COUNT(*) FROM datasets.visits_v1"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Obtention de Tables à partir D'un fichier TSV compressé {#obtaining-tables-from-compressed-tsv-file}
|
||||||
|
|
||||||
|
Télécharger et importer des hits à partir du fichier TSV compressé:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
curl https://clickhouse-datasets.s3.yandex.net/hits/tsv/hits_v1.tsv.xz | unxz --threads=`nproc` > hits_v1.tsv
|
||||||
|
# now create table
|
||||||
|
clickhouse-client --query "CREATE DATABASE IF NOT EXISTS datasets"
|
||||||
|
clickhouse-client --query "CREATE TABLE datasets.hits_v1 ( WatchID UInt64, JavaEnable UInt8, Title String, GoodEvent Int16, EventTime DateTime, EventDate Date, CounterID UInt32, ClientIP UInt32, ClientIP6 FixedString(16), RegionID UInt32, UserID UInt64, CounterClass Int8, OS UInt8, UserAgent UInt8, URL String, Referer String, URLDomain String, RefererDomain String, Refresh UInt8, IsRobot UInt8, RefererCategories Array(UInt16), URLCategories Array(UInt16), URLRegions Array(UInt32), RefererRegions Array(UInt32), ResolutionWidth UInt16, ResolutionHeight UInt16, ResolutionDepth UInt8, FlashMajor UInt8, FlashMinor UInt8, FlashMinor2 String, NetMajor UInt8, NetMinor UInt8, UserAgentMajor UInt16, UserAgentMinor FixedString(2), CookieEnable UInt8, JavascriptEnable UInt8, IsMobile UInt8, MobilePhone UInt8, MobilePhoneModel String, Params String, IPNetworkID UInt32, TraficSourceID Int8, SearchEngineID UInt16, SearchPhrase String, AdvEngineID UInt8, IsArtifical UInt8, WindowClientWidth UInt16, WindowClientHeight UInt16, ClientTimeZone Int16, ClientEventTime DateTime, SilverlightVersion1 UInt8, SilverlightVersion2 UInt8, SilverlightVersion3 UInt32, SilverlightVersion4 UInt16, PageCharset String, CodeVersion UInt32, IsLink UInt8, IsDownload UInt8, IsNotBounce UInt8, FUniqID UInt64, HID UInt32, IsOldCounter UInt8, IsEvent UInt8, IsParameter UInt8, DontCountHits UInt8, WithHash UInt8, HitColor FixedString(1), UTCEventTime DateTime, Age UInt8, Sex UInt8, Income UInt8, Interests UInt16, Robotness UInt8, GeneralInterests Array(UInt16), RemoteIP UInt32, RemoteIP6 FixedString(16), WindowName Int32, OpenerName Int32, HistoryLength Int16, BrowserLanguage FixedString(2), BrowserCountry FixedString(2), SocialNetwork String, SocialAction String, HTTPError UInt16, SendTiming Int32, DNSTiming Int32, ConnectTiming Int32, ResponseStartTiming Int32, ResponseEndTiming Int32, FetchTiming Int32, RedirectTiming Int32, DOMInteractiveTiming Int32, DOMContentLoadedTiming Int32, DOMCompleteTiming Int32, LoadEventStartTiming Int32, LoadEventEndTiming Int32, NSToDOMContentLoadedTiming Int32, FirstPaintTiming Int32, RedirectCount Int8, SocialSourceNetworkID UInt8, SocialSourcePage String, ParamPrice Int64, ParamOrderID String, ParamCurrency FixedString(3), ParamCurrencyID UInt16, GoalsReached Array(UInt32), OpenstatServiceName String, OpenstatCampaignID String, OpenstatAdID String, OpenstatSourceID String, UTMSource String, UTMMedium String, UTMCampaign String, UTMContent String, UTMTerm String, FromTag String, HasGCLID UInt8, RefererHash UInt64, URLHash UInt64, CLID UInt32, YCLID UInt64, ShareService String, ShareURL String, ShareTitle String, ParsedParams Nested(Key1 String, Key2 String, Key3 String, Key4 String, Key5 String, ValueDouble Float64), IslandID FixedString(16), RequestNum UInt32, RequestTry UInt8) ENGINE = MergeTree() PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDate, intHash32(UserID)) SAMPLE BY intHash32(UserID) SETTINGS index_granularity = 8192"
|
||||||
|
# import data
|
||||||
|
cat hits_v1.tsv | clickhouse-client --query "INSERT INTO datasets.hits_v1 FORMAT TSV" --max_insert_block_size=100000
|
||||||
|
# optionally you can optimize table
|
||||||
|
clickhouse-client --query "OPTIMIZE TABLE datasets.hits_v1 FINAL"
|
||||||
|
clickhouse-client --query "SELECT COUNT(*) FROM datasets.hits_v1"
|
||||||
|
```
|
||||||
|
|
||||||
|
Télécharger et importer des visites à partir du fichier TSV compressé:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
curl https://clickhouse-datasets.s3.yandex.net/visits/tsv/visits_v1.tsv.xz | unxz --threads=`nproc` > visits_v1.tsv
|
||||||
|
# now create table
|
||||||
|
clickhouse-client --query "CREATE DATABASE IF NOT EXISTS datasets"
|
||||||
|
clickhouse-client --query "CREATE TABLE datasets.visits_v1 ( CounterID UInt32, StartDate Date, Sign Int8, IsNew UInt8, VisitID UInt64, UserID UInt64, StartTime DateTime, Duration UInt32, UTCStartTime DateTime, PageViews Int32, Hits Int32, IsBounce UInt8, Referer String, StartURL String, RefererDomain String, StartURLDomain String, EndURL String, LinkURL String, IsDownload UInt8, TraficSourceID Int8, SearchEngineID UInt16, SearchPhrase String, AdvEngineID UInt8, PlaceID Int32, RefererCategories Array(UInt16), URLCategories Array(UInt16), URLRegions Array(UInt32), RefererRegions Array(UInt32), IsYandex UInt8, GoalReachesDepth Int32, GoalReachesURL Int32, GoalReachesAny Int32, SocialSourceNetworkID UInt8, SocialSourcePage String, MobilePhoneModel String, ClientEventTime DateTime, RegionID UInt32, ClientIP UInt32, ClientIP6 FixedString(16), RemoteIP UInt32, RemoteIP6 FixedString(16), IPNetworkID UInt32, SilverlightVersion3 UInt32, CodeVersion UInt32, ResolutionWidth UInt16, ResolutionHeight UInt16, UserAgentMajor UInt16, UserAgentMinor UInt16, WindowClientWidth UInt16, WindowClientHeight UInt16, SilverlightVersion2 UInt8, SilverlightVersion4 UInt16, FlashVersion3 UInt16, FlashVersion4 UInt16, ClientTimeZone Int16, OS UInt8, UserAgent UInt8, ResolutionDepth UInt8, FlashMajor UInt8, FlashMinor UInt8, NetMajor UInt8, NetMinor UInt8, MobilePhone UInt8, SilverlightVersion1 UInt8, Age UInt8, Sex UInt8, Income UInt8, JavaEnable UInt8, CookieEnable UInt8, JavascriptEnable UInt8, IsMobile UInt8, BrowserLanguage UInt16, BrowserCountry UInt16, Interests UInt16, Robotness UInt8, GeneralInterests Array(UInt16), Params Array(String), Goals Nested(ID UInt32, Serial UInt32, EventTime DateTime, Price Int64, OrderID String, CurrencyID UInt32), WatchIDs Array(UInt64), ParamSumPrice Int64, ParamCurrency FixedString(3), ParamCurrencyID UInt16, ClickLogID UInt64, ClickEventID Int32, ClickGoodEvent Int32, ClickEventTime DateTime, ClickPriorityID Int32, ClickPhraseID Int32, ClickPageID Int32, ClickPlaceID Int32, ClickTypeID Int32, ClickResourceID Int32, ClickCost UInt32, ClickClientIP UInt32, ClickDomainID UInt32, ClickURL String, ClickAttempt UInt8, ClickOrderID UInt32, ClickBannerID UInt32, ClickMarketCategoryID UInt32, ClickMarketPP UInt32, ClickMarketCategoryName String, ClickMarketPPName String, ClickAWAPSCampaignName String, ClickPageName String, ClickTargetType UInt16, ClickTargetPhraseID UInt64, ClickContextType UInt8, ClickSelectType Int8, ClickOptions String, ClickGroupBannerID Int32, OpenstatServiceName String, OpenstatCampaignID String, OpenstatAdID String, OpenstatSourceID String, UTMSource String, UTMMedium String, UTMCampaign String, UTMContent String, UTMTerm String, FromTag String, HasGCLID UInt8, FirstVisit DateTime, PredLastVisit Date, LastVisit Date, TotalVisits UInt32, TraficSource Nested(ID Int8, SearchEngineID UInt16, AdvEngineID UInt8, PlaceID UInt16, SocialSourceNetworkID UInt8, Domain String, SearchPhrase String, SocialSourcePage String), Attendance FixedString(16), CLID UInt32, YCLID UInt64, NormalizedRefererHash UInt64, SearchPhraseHash UInt64, RefererDomainHash UInt64, NormalizedStartURLHash UInt64, StartURLDomainHash UInt64, NormalizedEndURLHash UInt64, TopLevelDomain UInt64, URLScheme UInt64, OpenstatServiceNameHash UInt64, OpenstatCampaignIDHash UInt64, OpenstatAdIDHash UInt64, OpenstatSourceIDHash UInt64, UTMSourceHash UInt64, UTMMediumHash UInt64, UTMCampaignHash UInt64, UTMContentHash UInt64, UTMTermHash UInt64, FromHash UInt64, WebVisorEnabled UInt8, WebVisorActivity UInt32, ParsedParams Nested(Key1 String, Key2 String, Key3 String, Key4 String, Key5 String, ValueDouble Float64), Market Nested(Type UInt8, GoalID UInt32, OrderID String, OrderPrice Int64, PP UInt32, DirectPlaceID UInt32, DirectOrderID UInt32, DirectBannerID UInt32, GoodID String, GoodName String, GoodQuantity Int32, GoodPrice Int64), IslandID FixedString(16)) ENGINE = CollapsingMergeTree(Sign) PARTITION BY toYYYYMM(StartDate) ORDER BY (CounterID, StartDate, intHash32(UserID), VisitID) SAMPLE BY intHash32(UserID) SETTINGS index_granularity = 8192"
|
||||||
|
# import data
|
||||||
|
cat visits_v1.tsv | clickhouse-client --query "INSERT INTO datasets.visits_v1 FORMAT TSV" --max_insert_block_size=100000
|
||||||
|
# optionally you can optimize table
|
||||||
|
clickhouse-client --query "OPTIMIZE TABLE datasets.visits_v1 FINAL"
|
||||||
|
clickhouse-client --query "SELECT COUNT(*) FROM datasets.visits_v1"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Exemple De Requêtes {#example-queries}
|
||||||
|
|
||||||
|
[Tutoriel ClickHouse](../../getting_started/tutorial.md) est basé sur Yandex.Metrica dataset et la façon recommandée pour commencer avec cet ensemble de données est de simplement passer par tutoriel.
|
||||||
|
|
||||||
|
D'autres exemples de requêtes pour ces tables peuvent être trouvés parmi [tests avec État](https://github.com/ClickHouse/ClickHouse/tree/master/dbms/tests/queries/1_stateful) de ClickHouse (ils sont nommés `test.hists` et `test.visits` y).
|
387
docs/fr/getting_started/example_datasets/nyc_taxi.md
Normal file
387
docs/fr/getting_started/example_datasets/nyc_taxi.md
Normal file
File diff suppressed because one or more lines are too long
409
docs/fr/getting_started/example_datasets/ontime.md
Normal file
409
docs/fr/getting_started/example_datasets/ontime.md
Normal file
@ -0,0 +1,409 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# OnTime {#ontime}
|
||||||
|
|
||||||
|
Ce jeu de données peut être obtenu de deux façons:
|
||||||
|
|
||||||
|
- importation à partir de données brutes
|
||||||
|
- téléchargement de partitions
|
||||||
|
|
||||||
|
## Importation À Partir De Données Brutes {#import-from-raw-data}
|
||||||
|
|
||||||
|
Téléchargement de données:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
for s in `seq 1987 2018`
|
||||||
|
do
|
||||||
|
for m in `seq 1 12`
|
||||||
|
do
|
||||||
|
wget https://transtats.bts.gov/PREZIP/On_Time_Reporting_Carrier_On_Time_Performance_1987_present_${s}_${m}.zip
|
||||||
|
done
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
(à partir de https://github.com/Percona-Lab/ontime-airline-performance/blob/master/download.sh )
|
||||||
|
|
||||||
|
Création d'une table:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE `ontime` (
|
||||||
|
`Year` UInt16,
|
||||||
|
`Quarter` UInt8,
|
||||||
|
`Month` UInt8,
|
||||||
|
`DayofMonth` UInt8,
|
||||||
|
`DayOfWeek` UInt8,
|
||||||
|
`FlightDate` Date,
|
||||||
|
`UniqueCarrier` FixedString(7),
|
||||||
|
`AirlineID` Int32,
|
||||||
|
`Carrier` FixedString(2),
|
||||||
|
`TailNum` String,
|
||||||
|
`FlightNum` String,
|
||||||
|
`OriginAirportID` Int32,
|
||||||
|
`OriginAirportSeqID` Int32,
|
||||||
|
`OriginCityMarketID` Int32,
|
||||||
|
`Origin` FixedString(5),
|
||||||
|
`OriginCityName` String,
|
||||||
|
`OriginState` FixedString(2),
|
||||||
|
`OriginStateFips` String,
|
||||||
|
`OriginStateName` String,
|
||||||
|
`OriginWac` Int32,
|
||||||
|
`DestAirportID` Int32,
|
||||||
|
`DestAirportSeqID` Int32,
|
||||||
|
`DestCityMarketID` Int32,
|
||||||
|
`Dest` FixedString(5),
|
||||||
|
`DestCityName` String,
|
||||||
|
`DestState` FixedString(2),
|
||||||
|
`DestStateFips` String,
|
||||||
|
`DestStateName` String,
|
||||||
|
`DestWac` Int32,
|
||||||
|
`CRSDepTime` Int32,
|
||||||
|
`DepTime` Int32,
|
||||||
|
`DepDelay` Int32,
|
||||||
|
`DepDelayMinutes` Int32,
|
||||||
|
`DepDel15` Int32,
|
||||||
|
`DepartureDelayGroups` String,
|
||||||
|
`DepTimeBlk` String,
|
||||||
|
`TaxiOut` Int32,
|
||||||
|
`WheelsOff` Int32,
|
||||||
|
`WheelsOn` Int32,
|
||||||
|
`TaxiIn` Int32,
|
||||||
|
`CRSArrTime` Int32,
|
||||||
|
`ArrTime` Int32,
|
||||||
|
`ArrDelay` Int32,
|
||||||
|
`ArrDelayMinutes` Int32,
|
||||||
|
`ArrDel15` Int32,
|
||||||
|
`ArrivalDelayGroups` Int32,
|
||||||
|
`ArrTimeBlk` String,
|
||||||
|
`Cancelled` UInt8,
|
||||||
|
`CancellationCode` FixedString(1),
|
||||||
|
`Diverted` UInt8,
|
||||||
|
`CRSElapsedTime` Int32,
|
||||||
|
`ActualElapsedTime` Int32,
|
||||||
|
`AirTime` Int32,
|
||||||
|
`Flights` Int32,
|
||||||
|
`Distance` Int32,
|
||||||
|
`DistanceGroup` UInt8,
|
||||||
|
`CarrierDelay` Int32,
|
||||||
|
`WeatherDelay` Int32,
|
||||||
|
`NASDelay` Int32,
|
||||||
|
`SecurityDelay` Int32,
|
||||||
|
`LateAircraftDelay` Int32,
|
||||||
|
`FirstDepTime` String,
|
||||||
|
`TotalAddGTime` String,
|
||||||
|
`LongestAddGTime` String,
|
||||||
|
`DivAirportLandings` String,
|
||||||
|
`DivReachedDest` String,
|
||||||
|
`DivActualElapsedTime` String,
|
||||||
|
`DivArrDelay` String,
|
||||||
|
`DivDistance` String,
|
||||||
|
`Div1Airport` String,
|
||||||
|
`Div1AirportID` Int32,
|
||||||
|
`Div1AirportSeqID` Int32,
|
||||||
|
`Div1WheelsOn` String,
|
||||||
|
`Div1TotalGTime` String,
|
||||||
|
`Div1LongestGTime` String,
|
||||||
|
`Div1WheelsOff` String,
|
||||||
|
`Div1TailNum` String,
|
||||||
|
`Div2Airport` String,
|
||||||
|
`Div2AirportID` Int32,
|
||||||
|
`Div2AirportSeqID` Int32,
|
||||||
|
`Div2WheelsOn` String,
|
||||||
|
`Div2TotalGTime` String,
|
||||||
|
`Div2LongestGTime` String,
|
||||||
|
`Div2WheelsOff` String,
|
||||||
|
`Div2TailNum` String,
|
||||||
|
`Div3Airport` String,
|
||||||
|
`Div3AirportID` Int32,
|
||||||
|
`Div3AirportSeqID` Int32,
|
||||||
|
`Div3WheelsOn` String,
|
||||||
|
`Div3TotalGTime` String,
|
||||||
|
`Div3LongestGTime` String,
|
||||||
|
`Div3WheelsOff` String,
|
||||||
|
`Div3TailNum` String,
|
||||||
|
`Div4Airport` String,
|
||||||
|
`Div4AirportID` Int32,
|
||||||
|
`Div4AirportSeqID` Int32,
|
||||||
|
`Div4WheelsOn` String,
|
||||||
|
`Div4TotalGTime` String,
|
||||||
|
`Div4LongestGTime` String,
|
||||||
|
`Div4WheelsOff` String,
|
||||||
|
`Div4TailNum` String,
|
||||||
|
`Div5Airport` String,
|
||||||
|
`Div5AirportID` Int32,
|
||||||
|
`Div5AirportSeqID` Int32,
|
||||||
|
`Div5WheelsOn` String,
|
||||||
|
`Div5TotalGTime` String,
|
||||||
|
`Div5LongestGTime` String,
|
||||||
|
`Div5WheelsOff` String,
|
||||||
|
`Div5TailNum` String
|
||||||
|
) ENGINE = MergeTree
|
||||||
|
PARTITION BY Year
|
||||||
|
ORDER BY (Carrier, FlightDate)
|
||||||
|
SETTINGS index_granularity = 8192;
|
||||||
|
```
|
||||||
|
|
||||||
|
Le chargement des données:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ for i in *.zip; do echo $i; unzip -cq $i '*.csv' | sed 's/\.00//g' | clickhouse-client --host=example-perftest01j --query="INSERT INTO ontime FORMAT CSVWithNames"; done
|
||||||
|
```
|
||||||
|
|
||||||
|
## Téléchargement des Partitions préparées {#download-of-prepared-partitions}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ curl -O https://clickhouse-datasets.s3.yandex.net/ontime/partitions/ontime.tar
|
||||||
|
$ tar xvf ontime.tar -C /var/lib/clickhouse # path to ClickHouse data directory
|
||||||
|
$ # check permissions of unpacked data, fix if required
|
||||||
|
$ sudo service clickhouse-server restart
|
||||||
|
$ clickhouse-client --query "select count(*) from datasets.ontime"
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! info "Info"
|
||||||
|
Si vous exécutez les requêtes décrites ci-dessous, vous devez utiliser le nom complet de la table, `datasets.ontime`.
|
||||||
|
|
||||||
|
## Requête {#queries}
|
||||||
|
|
||||||
|
Q0.
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT avg(c1)
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT Year, Month, count(*) AS c1
|
||||||
|
FROM ontime
|
||||||
|
GROUP BY Year, Month
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
T1. Le nombre de vols par jour de l'année 2000 à 2008
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT DayOfWeek, count(*) AS c
|
||||||
|
FROM ontime
|
||||||
|
WHERE Year>=2000 AND Year<=2008
|
||||||
|
GROUP BY DayOfWeek
|
||||||
|
ORDER BY c DESC;
|
||||||
|
```
|
||||||
|
|
||||||
|
T2. Le nombre de vols retardés de plus de 10 minutes, regroupés par jour de la semaine, pour 2000-2008
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT DayOfWeek, count(*) AS c
|
||||||
|
FROM ontime
|
||||||
|
WHERE DepDelay>10 AND Year>=2000 AND Year<=2008
|
||||||
|
GROUP BY DayOfWeek
|
||||||
|
ORDER BY c DESC;
|
||||||
|
```
|
||||||
|
|
||||||
|
T3. Le nombre de retards par l'aéroport pour 2000-2008
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT Origin, count(*) AS c
|
||||||
|
FROM ontime
|
||||||
|
WHERE DepDelay>10 AND Year>=2000 AND Year<=2008
|
||||||
|
GROUP BY Origin
|
||||||
|
ORDER BY c DESC
|
||||||
|
LIMIT 10;
|
||||||
|
```
|
||||||
|
|
||||||
|
T4. Nombre de retards par transporteur pour 2007
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT Carrier, count(*)
|
||||||
|
FROM ontime
|
||||||
|
WHERE DepDelay>10 AND Year=2007
|
||||||
|
GROUP BY Carrier
|
||||||
|
ORDER BY count(*) DESC;
|
||||||
|
```
|
||||||
|
|
||||||
|
Q5. Pourcentage de retards par transporteur pour 2007
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT Carrier, c, c2, c*100/c2 as c3
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
Carrier,
|
||||||
|
count(*) AS c
|
||||||
|
FROM ontime
|
||||||
|
WHERE DepDelay>10
|
||||||
|
AND Year=2007
|
||||||
|
GROUP BY Carrier
|
||||||
|
)
|
||||||
|
JOIN
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
Carrier,
|
||||||
|
count(*) AS c2
|
||||||
|
FROM ontime
|
||||||
|
WHERE Year=2007
|
||||||
|
GROUP BY Carrier
|
||||||
|
) USING Carrier
|
||||||
|
ORDER BY c3 DESC;
|
||||||
|
```
|
||||||
|
|
||||||
|
Meilleure version de la même requête:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT Carrier, avg(DepDelay>10)*100 AS c3
|
||||||
|
FROM ontime
|
||||||
|
WHERE Year=2007
|
||||||
|
GROUP BY Carrier
|
||||||
|
ORDER BY c3 DESC
|
||||||
|
```
|
||||||
|
|
||||||
|
Q6. La demande précédente pour une plus large gamme d'années, 2000-2008
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT Carrier, c, c2, c*100/c2 as c3
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
Carrier,
|
||||||
|
count(*) AS c
|
||||||
|
FROM ontime
|
||||||
|
WHERE DepDelay>10
|
||||||
|
AND Year>=2000 AND Year<=2008
|
||||||
|
GROUP BY Carrier
|
||||||
|
)
|
||||||
|
JOIN
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
Carrier,
|
||||||
|
count(*) AS c2
|
||||||
|
FROM ontime
|
||||||
|
WHERE Year>=2000 AND Year<=2008
|
||||||
|
GROUP BY Carrier
|
||||||
|
) USING Carrier
|
||||||
|
ORDER BY c3 DESC;
|
||||||
|
```
|
||||||
|
|
||||||
|
Meilleure version de la même requête:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT Carrier, avg(DepDelay>10)*100 AS c3
|
||||||
|
FROM ontime
|
||||||
|
WHERE Year>=2000 AND Year<=2008
|
||||||
|
GROUP BY Carrier
|
||||||
|
ORDER BY c3 DESC;
|
||||||
|
```
|
||||||
|
|
||||||
|
Q7. Pourcentage de vols retardés de plus de 10 minutes, par année
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT Year, c1/c2
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
select
|
||||||
|
Year,
|
||||||
|
count(*)*100 as c1
|
||||||
|
from ontime
|
||||||
|
WHERE DepDelay>10
|
||||||
|
GROUP BY Year
|
||||||
|
)
|
||||||
|
JOIN
|
||||||
|
(
|
||||||
|
select
|
||||||
|
Year,
|
||||||
|
count(*) as c2
|
||||||
|
from ontime
|
||||||
|
GROUP BY Year
|
||||||
|
) USING (Year)
|
||||||
|
ORDER BY Year;
|
||||||
|
```
|
||||||
|
|
||||||
|
Meilleure version de la même requête:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT Year, avg(DepDelay>10)*100
|
||||||
|
FROM ontime
|
||||||
|
GROUP BY Year
|
||||||
|
ORDER BY Year;
|
||||||
|
```
|
||||||
|
|
||||||
|
Q8. Les destinations les plus populaires par le nombre de villes directement connectées pour différentes plages d'années
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT DestCityName, uniqExact(OriginCityName) AS u
|
||||||
|
FROM ontime
|
||||||
|
WHERE Year >= 2000 and Year <= 2010
|
||||||
|
GROUP BY DestCityName
|
||||||
|
ORDER BY u DESC LIMIT 10;
|
||||||
|
```
|
||||||
|
|
||||||
|
Q9.
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT Year, count(*) AS c1
|
||||||
|
FROM ontime
|
||||||
|
GROUP BY Year;
|
||||||
|
```
|
||||||
|
|
||||||
|
Q10.
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT
|
||||||
|
min(Year), max(Year), Carrier, count(*) AS cnt,
|
||||||
|
sum(ArrDelayMinutes>30) AS flights_delayed,
|
||||||
|
round(sum(ArrDelayMinutes>30)/count(*),2) AS rate
|
||||||
|
FROM ontime
|
||||||
|
WHERE
|
||||||
|
DayOfWeek NOT IN (6,7) AND OriginState NOT IN ('AK', 'HI', 'PR', 'VI')
|
||||||
|
AND DestState NOT IN ('AK', 'HI', 'PR', 'VI')
|
||||||
|
AND FlightDate < '2010-01-01'
|
||||||
|
GROUP by Carrier
|
||||||
|
HAVING cnt>100000 and max(Year)>1990
|
||||||
|
ORDER by rate DESC
|
||||||
|
LIMIT 1000;
|
||||||
|
```
|
||||||
|
|
||||||
|
Bonus:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT avg(cnt)
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT Year,Month,count(*) AS cnt
|
||||||
|
FROM ontime
|
||||||
|
WHERE DepDel15=1
|
||||||
|
GROUP BY Year,Month
|
||||||
|
);
|
||||||
|
|
||||||
|
SELECT avg(c1) FROM
|
||||||
|
(
|
||||||
|
SELECT Year,Month,count(*) AS c1
|
||||||
|
FROM ontime
|
||||||
|
GROUP BY Year,Month
|
||||||
|
);
|
||||||
|
|
||||||
|
SELECT DestCityName, uniqExact(OriginCityName) AS u
|
||||||
|
FROM ontime
|
||||||
|
GROUP BY DestCityName
|
||||||
|
ORDER BY u DESC
|
||||||
|
LIMIT 10;
|
||||||
|
|
||||||
|
SELECT OriginCityName, DestCityName, count() AS c
|
||||||
|
FROM ontime
|
||||||
|
GROUP BY OriginCityName, DestCityName
|
||||||
|
ORDER BY c DESC
|
||||||
|
LIMIT 10;
|
||||||
|
|
||||||
|
SELECT OriginCityName, count() AS c
|
||||||
|
FROM ontime
|
||||||
|
GROUP BY OriginCityName
|
||||||
|
ORDER BY c DESC
|
||||||
|
LIMIT 10;
|
||||||
|
```
|
||||||
|
|
||||||
|
Ce test de performance a été créé par Vadim Tkachenko. Voir:
|
||||||
|
|
||||||
|
- https://www.percona.com/blog/2009/10/02/analyzing-air-traffic-performance-with-infobright-and-monetdb/
|
||||||
|
- https://www.percona.com/blog/2009/10/26/air-traffic-queries-in-luciddb/
|
||||||
|
- https://www.percona.com/blog/2009/11/02/air-traffic-queries-in-infinidb-early-alpha/
|
||||||
|
- https://www.percona.com/blog/2014/04/21/using-apache-hadoop-and-impala-together-with-mysql-for-data-analysis/
|
||||||
|
- https://www.percona.com/blog/2016/01/07/apache-spark-with-air-ontime-performance-data/
|
||||||
|
- http://nickmakos.blogspot.ru/2012/08/analyzing-air-traffic-performance-with.html
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/getting_started/example_datasets/ontime/) <!--hide-->
|
367
docs/fr/getting_started/example_datasets/star_schema.md
Normal file
367
docs/fr/getting_started/example_datasets/star_schema.md
Normal file
@ -0,0 +1,367 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Référence Du Schéma En Étoile {#star-schema-benchmark}
|
||||||
|
|
||||||
|
Compilation de dbgen:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ git clone git@github.com:vadimtk/ssb-dbgen.git
|
||||||
|
$ cd ssb-dbgen
|
||||||
|
$ make
|
||||||
|
```
|
||||||
|
|
||||||
|
La production de données:
|
||||||
|
|
||||||
|
!!! warning "Attention"
|
||||||
|
Avec `-s 100` dbgen génère 600 millions de lignes (67 Go), tandis que while `-s 1000` il génère 6 milliards de lignes (ce qui prend beaucoup de temps)
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ ./dbgen -s 1000 -T c
|
||||||
|
$ ./dbgen -s 1000 -T l
|
||||||
|
$ ./dbgen -s 1000 -T p
|
||||||
|
$ ./dbgen -s 1000 -T s
|
||||||
|
$ ./dbgen -s 1000 -T d
|
||||||
|
```
|
||||||
|
|
||||||
|
Création de tables dans ClickHouse:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE customer
|
||||||
|
(
|
||||||
|
C_CUSTKEY UInt32,
|
||||||
|
C_NAME String,
|
||||||
|
C_ADDRESS String,
|
||||||
|
C_CITY LowCardinality(String),
|
||||||
|
C_NATION LowCardinality(String),
|
||||||
|
C_REGION LowCardinality(String),
|
||||||
|
C_PHONE String,
|
||||||
|
C_MKTSEGMENT LowCardinality(String)
|
||||||
|
)
|
||||||
|
ENGINE = MergeTree ORDER BY (C_CUSTKEY);
|
||||||
|
|
||||||
|
CREATE TABLE lineorder
|
||||||
|
(
|
||||||
|
LO_ORDERKEY UInt32,
|
||||||
|
LO_LINENUMBER UInt8,
|
||||||
|
LO_CUSTKEY UInt32,
|
||||||
|
LO_PARTKEY UInt32,
|
||||||
|
LO_SUPPKEY UInt32,
|
||||||
|
LO_ORDERDATE Date,
|
||||||
|
LO_ORDERPRIORITY LowCardinality(String),
|
||||||
|
LO_SHIPPRIORITY UInt8,
|
||||||
|
LO_QUANTITY UInt8,
|
||||||
|
LO_EXTENDEDPRICE UInt32,
|
||||||
|
LO_ORDTOTALPRICE UInt32,
|
||||||
|
LO_DISCOUNT UInt8,
|
||||||
|
LO_REVENUE UInt32,
|
||||||
|
LO_SUPPLYCOST UInt32,
|
||||||
|
LO_TAX UInt8,
|
||||||
|
LO_COMMITDATE Date,
|
||||||
|
LO_SHIPMODE LowCardinality(String)
|
||||||
|
)
|
||||||
|
ENGINE = MergeTree PARTITION BY toYear(LO_ORDERDATE) ORDER BY (LO_ORDERDATE, LO_ORDERKEY);
|
||||||
|
|
||||||
|
CREATE TABLE part
|
||||||
|
(
|
||||||
|
P_PARTKEY UInt32,
|
||||||
|
P_NAME String,
|
||||||
|
P_MFGR LowCardinality(String),
|
||||||
|
P_CATEGORY LowCardinality(String),
|
||||||
|
P_BRAND LowCardinality(String),
|
||||||
|
P_COLOR LowCardinality(String),
|
||||||
|
P_TYPE LowCardinality(String),
|
||||||
|
P_SIZE UInt8,
|
||||||
|
P_CONTAINER LowCardinality(String)
|
||||||
|
)
|
||||||
|
ENGINE = MergeTree ORDER BY P_PARTKEY;
|
||||||
|
|
||||||
|
CREATE TABLE supplier
|
||||||
|
(
|
||||||
|
S_SUPPKEY UInt32,
|
||||||
|
S_NAME String,
|
||||||
|
S_ADDRESS String,
|
||||||
|
S_CITY LowCardinality(String),
|
||||||
|
S_NATION LowCardinality(String),
|
||||||
|
S_REGION LowCardinality(String),
|
||||||
|
S_PHONE String
|
||||||
|
)
|
||||||
|
ENGINE = MergeTree ORDER BY S_SUPPKEY;
|
||||||
|
```
|
||||||
|
|
||||||
|
Insertion de données:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ clickhouse-client --query "INSERT INTO customer FORMAT CSV" < customer.tbl
|
||||||
|
$ clickhouse-client --query "INSERT INTO part FORMAT CSV" < part.tbl
|
||||||
|
$ clickhouse-client --query "INSERT INTO supplier FORMAT CSV" < supplier.tbl
|
||||||
|
$ clickhouse-client --query "INSERT INTO lineorder FORMAT CSV" < lineorder.tbl
|
||||||
|
```
|
||||||
|
|
||||||
|
Conversion “star schema” pour dénormalisée “flat schema”:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SET max_memory_usage = 20000000000;
|
||||||
|
|
||||||
|
CREATE TABLE lineorder_flat
|
||||||
|
ENGINE = MergeTree
|
||||||
|
PARTITION BY toYear(LO_ORDERDATE)
|
||||||
|
ORDER BY (LO_ORDERDATE, LO_ORDERKEY) AS
|
||||||
|
SELECT
|
||||||
|
l.LO_ORDERKEY AS LO_ORDERKEY,
|
||||||
|
l.LO_LINENUMBER AS LO_LINENUMBER,
|
||||||
|
l.LO_CUSTKEY AS LO_CUSTKEY,
|
||||||
|
l.LO_PARTKEY AS LO_PARTKEY,
|
||||||
|
l.LO_SUPPKEY AS LO_SUPPKEY,
|
||||||
|
l.LO_ORDERDATE AS LO_ORDERDATE,
|
||||||
|
l.LO_ORDERPRIORITY AS LO_ORDERPRIORITY,
|
||||||
|
l.LO_SHIPPRIORITY AS LO_SHIPPRIORITY,
|
||||||
|
l.LO_QUANTITY AS LO_QUANTITY,
|
||||||
|
l.LO_EXTENDEDPRICE AS LO_EXTENDEDPRICE,
|
||||||
|
l.LO_ORDTOTALPRICE AS LO_ORDTOTALPRICE,
|
||||||
|
l.LO_DISCOUNT AS LO_DISCOUNT,
|
||||||
|
l.LO_REVENUE AS LO_REVENUE,
|
||||||
|
l.LO_SUPPLYCOST AS LO_SUPPLYCOST,
|
||||||
|
l.LO_TAX AS LO_TAX,
|
||||||
|
l.LO_COMMITDATE AS LO_COMMITDATE,
|
||||||
|
l.LO_SHIPMODE AS LO_SHIPMODE,
|
||||||
|
c.C_NAME AS C_NAME,
|
||||||
|
c.C_ADDRESS AS C_ADDRESS,
|
||||||
|
c.C_CITY AS C_CITY,
|
||||||
|
c.C_NATION AS C_NATION,
|
||||||
|
c.C_REGION AS C_REGION,
|
||||||
|
c.C_PHONE AS C_PHONE,
|
||||||
|
c.C_MKTSEGMENT AS C_MKTSEGMENT,
|
||||||
|
s.S_NAME AS S_NAME,
|
||||||
|
s.S_ADDRESS AS S_ADDRESS,
|
||||||
|
s.S_CITY AS S_CITY,
|
||||||
|
s.S_NATION AS S_NATION,
|
||||||
|
s.S_REGION AS S_REGION,
|
||||||
|
s.S_PHONE AS S_PHONE,
|
||||||
|
p.P_NAME AS P_NAME,
|
||||||
|
p.P_MFGR AS P_MFGR,
|
||||||
|
p.P_CATEGORY AS P_CATEGORY,
|
||||||
|
p.P_BRAND AS P_BRAND,
|
||||||
|
p.P_COLOR AS P_COLOR,
|
||||||
|
p.P_TYPE AS P_TYPE,
|
||||||
|
p.P_SIZE AS P_SIZE,
|
||||||
|
p.P_CONTAINER AS P_CONTAINER
|
||||||
|
FROM lineorder AS l
|
||||||
|
INNER JOIN customer AS c ON c.C_CUSTKEY = l.LO_CUSTKEY
|
||||||
|
INNER JOIN supplier AS s ON s.S_SUPPKEY = l.LO_SUPPKEY
|
||||||
|
INNER JOIN part AS p ON p.P_PARTKEY = l.LO_PARTKEY;
|
||||||
|
```
|
||||||
|
|
||||||
|
Exécution des requêtes:
|
||||||
|
|
||||||
|
Q1.1
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE toYear(LO_ORDERDATE) = 1993 AND LO_DISCOUNT BETWEEN 1 AND 3 AND LO_QUANTITY < 25;
|
||||||
|
```
|
||||||
|
|
||||||
|
Q1.2
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE toYYYYMM(LO_ORDERDATE) = 199401 AND LO_DISCOUNT BETWEEN 4 AND 6 AND LO_QUANTITY BETWEEN 26 AND 35;
|
||||||
|
```
|
||||||
|
|
||||||
|
Q1.3
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE toISOWeek(LO_ORDERDATE) = 6 AND toYear(LO_ORDERDATE) = 1994
|
||||||
|
AND LO_DISCOUNT BETWEEN 5 AND 7 AND LO_QUANTITY BETWEEN 26 AND 35;
|
||||||
|
```
|
||||||
|
|
||||||
|
Q2.1
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT
|
||||||
|
sum(LO_REVENUE),
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
P_BRAND
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE P_CATEGORY = 'MFGR#12' AND S_REGION = 'AMERICA'
|
||||||
|
GROUP BY
|
||||||
|
year,
|
||||||
|
P_BRAND
|
||||||
|
ORDER BY
|
||||||
|
year,
|
||||||
|
P_BRAND;
|
||||||
|
```
|
||||||
|
|
||||||
|
Q2.2
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT
|
||||||
|
sum(LO_REVENUE),
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
P_BRAND
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE P_BRAND >= 'MFGR#2221' AND P_BRAND <= 'MFGR#2228' AND S_REGION = 'ASIA'
|
||||||
|
GROUP BY
|
||||||
|
year,
|
||||||
|
P_BRAND
|
||||||
|
ORDER BY
|
||||||
|
year,
|
||||||
|
P_BRAND;
|
||||||
|
```
|
||||||
|
|
||||||
|
Q2.3
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT
|
||||||
|
sum(LO_REVENUE),
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
P_BRAND
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE P_BRAND = 'MFGR#2239' AND S_REGION = 'EUROPE'
|
||||||
|
GROUP BY
|
||||||
|
year,
|
||||||
|
P_BRAND
|
||||||
|
ORDER BY
|
||||||
|
year,
|
||||||
|
P_BRAND;
|
||||||
|
```
|
||||||
|
|
||||||
|
Q3.1
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT
|
||||||
|
C_NATION,
|
||||||
|
S_NATION,
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
sum(LO_REVENUE) AS revenue
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE C_REGION = 'ASIA' AND S_REGION = 'ASIA' AND year >= 1992 AND year <= 1997
|
||||||
|
GROUP BY
|
||||||
|
C_NATION,
|
||||||
|
S_NATION,
|
||||||
|
year
|
||||||
|
ORDER BY
|
||||||
|
year ASC,
|
||||||
|
revenue DESC;
|
||||||
|
```
|
||||||
|
|
||||||
|
Q3.2
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT
|
||||||
|
C_CITY,
|
||||||
|
S_CITY,
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
sum(LO_REVENUE) AS revenue
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE C_NATION = 'UNITED STATES' AND S_NATION = 'UNITED STATES' AND year >= 1992 AND year <= 1997
|
||||||
|
GROUP BY
|
||||||
|
C_CITY,
|
||||||
|
S_CITY,
|
||||||
|
year
|
||||||
|
ORDER BY
|
||||||
|
year ASC,
|
||||||
|
revenue DESC;
|
||||||
|
```
|
||||||
|
|
||||||
|
Q3.3
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT
|
||||||
|
C_CITY,
|
||||||
|
S_CITY,
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
sum(LO_REVENUE) AS revenue
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE (C_CITY = 'UNITED KI1' OR C_CITY = 'UNITED KI5') AND (S_CITY = 'UNITED KI1' OR S_CITY = 'UNITED KI5') AND year >= 1992 AND year <= 1997
|
||||||
|
GROUP BY
|
||||||
|
C_CITY,
|
||||||
|
S_CITY,
|
||||||
|
year
|
||||||
|
ORDER BY
|
||||||
|
year ASC,
|
||||||
|
revenue DESC;
|
||||||
|
```
|
||||||
|
|
||||||
|
Q3.4
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT
|
||||||
|
C_CITY,
|
||||||
|
S_CITY,
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
sum(LO_REVENUE) AS revenue
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE (C_CITY = 'UNITED KI1' OR C_CITY = 'UNITED KI5') AND (S_CITY = 'UNITED KI1' OR S_CITY = 'UNITED KI5') AND toYYYYMM(LO_ORDERDATE) = 199712
|
||||||
|
GROUP BY
|
||||||
|
C_CITY,
|
||||||
|
S_CITY,
|
||||||
|
year
|
||||||
|
ORDER BY
|
||||||
|
year ASC,
|
||||||
|
revenue DESC;
|
||||||
|
```
|
||||||
|
|
||||||
|
Q4.1
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
C_NATION,
|
||||||
|
sum(LO_REVENUE - LO_SUPPLYCOST) AS profit
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE C_REGION = 'AMERICA' AND S_REGION = 'AMERICA' AND (P_MFGR = 'MFGR#1' OR P_MFGR = 'MFGR#2')
|
||||||
|
GROUP BY
|
||||||
|
year,
|
||||||
|
C_NATION
|
||||||
|
ORDER BY
|
||||||
|
year ASC,
|
||||||
|
C_NATION ASC;
|
||||||
|
```
|
||||||
|
|
||||||
|
Q4.2
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
S_NATION,
|
||||||
|
P_CATEGORY,
|
||||||
|
sum(LO_REVENUE - LO_SUPPLYCOST) AS profit
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE C_REGION = 'AMERICA' AND S_REGION = 'AMERICA' AND (year = 1997 OR year = 1998) AND (P_MFGR = 'MFGR#1' OR P_MFGR = 'MFGR#2')
|
||||||
|
GROUP BY
|
||||||
|
year,
|
||||||
|
S_NATION,
|
||||||
|
P_CATEGORY
|
||||||
|
ORDER BY
|
||||||
|
year ASC,
|
||||||
|
S_NATION ASC,
|
||||||
|
P_CATEGORY ASC;
|
||||||
|
```
|
||||||
|
|
||||||
|
Q4.3
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
S_CITY,
|
||||||
|
P_BRAND,
|
||||||
|
sum(LO_REVENUE - LO_SUPPLYCOST) AS profit
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE S_NATION = 'UNITED STATES' AND (year = 1997 OR year = 1998) AND P_CATEGORY = 'MFGR#14'
|
||||||
|
GROUP BY
|
||||||
|
year,
|
||||||
|
S_CITY,
|
||||||
|
P_BRAND
|
||||||
|
ORDER BY
|
||||||
|
year ASC,
|
||||||
|
S_CITY ASC,
|
||||||
|
P_BRAND ASC;
|
||||||
|
```
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/getting_started/example_datasets/star_schema/) <!--hide-->
|
32
docs/fr/getting_started/example_datasets/wikistat.md
Normal file
32
docs/fr/getting_started/example_datasets/wikistat.md
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# WikiStat {#wikistat}
|
||||||
|
|
||||||
|
Voir: http://dumps.wikimedia.org/other/pagecounts-raw/
|
||||||
|
|
||||||
|
Création d'une table:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE wikistat
|
||||||
|
(
|
||||||
|
date Date,
|
||||||
|
time DateTime,
|
||||||
|
project String,
|
||||||
|
subproject String,
|
||||||
|
path String,
|
||||||
|
hits UInt64,
|
||||||
|
size UInt64
|
||||||
|
) ENGINE = MergeTree(date, (path, time), 8192);
|
||||||
|
```
|
||||||
|
|
||||||
|
Le chargement des données:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ for i in {2007..2016}; do for j in {01..12}; do echo $i-$j >&2; curl -sSL "http://dumps.wikimedia.org/other/pagecounts-raw/$i/$i-$j/" | grep -oE 'pagecounts-[0-9]+-[0-9]+\.gz'; done; done | sort | uniq | tee links.txt
|
||||||
|
$ cat links.txt | while read link; do wget http://dumps.wikimedia.org/other/pagecounts-raw/$(echo $link | sed -r 's/pagecounts-([0-9]{4})([0-9]{2})[0-9]{2}-[0-9]+\.gz/\1/')/$(echo $link | sed -r 's/pagecounts-([0-9]{4})([0-9]{2})[0-9]{2}-[0-9]+\.gz/\1-\2/')/$link; done
|
||||||
|
$ ls -1 /opt/wikistat/ | grep gz | while read i; do echo $i; gzip -cd /opt/wikistat/$i | ./wikistat-loader --time="$(echo -n $i | sed -r 's/pagecounts-([0-9]{4})([0-9]{2})([0-9]{2})-([0-9]{2})([0-9]{2})([0-9]{2})\.gz/\1-\2-\3 \4-00-00/')" | clickhouse-client --query="INSERT INTO wikistat FORMAT TabSeparated"; done
|
||||||
|
```
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/getting_started/example_datasets/wikistat/) <!--hide-->
|
12
docs/fr/getting_started/index.md
Normal file
12
docs/fr/getting_started/index.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Prise En Main {#getting-started}
|
||||||
|
|
||||||
|
Si vous êtes nouveau à ClickHouse et que vous voulez obtenir un sentiment pratique de sa performance, tout d'abord, vous devez passer par le [processus d'installation](install.md). Après cela, vous pouvez:
|
||||||
|
|
||||||
|
- [Passez par tutoriel détaillé](tutorial.md)
|
||||||
|
- [Expérience avec des exemples de jeux de données](example_datasets/ontime.md)
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/getting_started/) <!--hide-->
|
188
docs/fr/getting_started/install.md
Normal file
188
docs/fr/getting_started/install.md
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Installation {#installation}
|
||||||
|
|
||||||
|
## Configuration Système Requise {#system-requirements}
|
||||||
|
|
||||||
|
ClickHouse peut fonctionner sur N'importe quel Linux, FreeBSD ou Mac OS X avec une architecture CPU x86\_64, AArch64 ou PowerPC64LE.
|
||||||
|
|
||||||
|
Les binaires pré-construits officiels sont généralement compilés pour le jeu d'instructions x86\_64 et leverage SSE 4.2, donc sauf indication contraire, l'utilisation du processeur qui le prend en charge devient une exigence système supplémentaire. Voici la commande pour vérifier si le processeur actuel prend en charge SSE 4.2:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour exécuter ClickHouse sur des processeurs qui ne prennent pas en charge SSE 4.2 ou qui ont une architecture AArch64 ou PowerPC64LE, vous devez [construire ClickHouse à partir de sources](#from-sources) avec des ajustements de configuration appropriés.
|
||||||
|
|
||||||
|
## Options D'Installation Disponibles {#available-installation-options}
|
||||||
|
|
||||||
|
### À partir de paquets DEB {#install-from-deb-packages}
|
||||||
|
|
||||||
|
Il est recommandé d'utiliser officiel pré-compilé `deb` Paquets Pour Debian ou Ubuntu.
|
||||||
|
|
||||||
|
Pour installer les paquets officiels ajoutez le référentiel Yandex dans `/etc/apt/sources.list` ou dans un autre `/etc/apt/sources.list.d/clickhouse.list` fichier:
|
||||||
|
|
||||||
|
deb http://repo.clickhouse.tech/deb/stable/ main/
|
||||||
|
|
||||||
|
Si vous souhaitez utiliser la version la plus récente, remplacer `stable` avec `testing` (ceci est recommandé pour vos environnements de test).
|
||||||
|
|
||||||
|
Exécutez ensuite ces commandes pour installer les paquets:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
sudo apt-get install dirmngr # optional
|
||||||
|
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E0C56BD4 # optional
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install clickhouse-client clickhouse-server
|
||||||
|
```
|
||||||
|
|
||||||
|
Vous pouvez également télécharger et installer des paquets manuellement à partir d'ici: https://repo.yandex.ru/clickhouse/deb/stable/main/.
|
||||||
|
|
||||||
|
#### Paquet {#packages}
|
||||||
|
|
||||||
|
- `clickhouse-common-static` — Installs ClickHouse compiled binary files.
|
||||||
|
- `clickhouse-server` — Creates a symbolic link for `clickhouse-server` et installe la configuration du serveur par défaut.
|
||||||
|
- `clickhouse-client` — Creates a symbolic link for `clickhouse-client` et d'autres outils. et installe les fichiers de configuration du client.
|
||||||
|
- `clickhouse-common-static-dbg` — Installs ClickHouse compiled binary files with debug info.
|
||||||
|
|
||||||
|
### À partir de paquets RPM {#from-rpm-packages}
|
||||||
|
|
||||||
|
Il est recommandé d'utiliser officiel pré-compilé `rpm` packages pour CentOS, RedHat et toutes les autres distributions Linux basées sur rpm.
|
||||||
|
|
||||||
|
Tout d'abord, vous devez ajouter le dépôt officiel:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
sudo yum install yum-utils
|
||||||
|
sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
|
||||||
|
sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64
|
||||||
|
```
|
||||||
|
|
||||||
|
Si vous souhaitez utiliser la version la plus récente, remplacer `stable` avec `testing` (ceci est recommandé pour vos environnements de test). Le `prestable` la balise est parfois trop.
|
||||||
|
|
||||||
|
Exécutez ensuite ces commandes pour installer les paquets:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
sudo yum install clickhouse-server clickhouse-client
|
||||||
|
```
|
||||||
|
|
||||||
|
Vous pouvez également télécharger et installer des paquets manuellement à partir d'ici: https://repo.clickhouse.tech / rpm / stable / x86\_64.
|
||||||
|
|
||||||
|
### À partir d'archives tgz {#from-tgz-archives}
|
||||||
|
|
||||||
|
Il est recommandé d'utiliser officiel pré-compilé `tgz` archives pour toutes les distributions Linux, où l'installation de `deb` ou `rpm` les emballages n'est pas possible.
|
||||||
|
|
||||||
|
La version requise peut être téléchargée avec `curl` ou `wget` depuis le référentiel https://repo.yandex.ru/clickhouse/tgz/.
|
||||||
|
Après cela, les archives téléchargées doivent être décompressées et installées avec des scripts d'installation. Exemple pour la dernière version:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
export LATEST_VERSION=`curl https://api.github.com/repos/ClickHouse/ClickHouse/tags 2>/dev/null | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | head -n 1`
|
||||||
|
curl -O https://repo.clickhouse.tech/tgz/clickhouse-common-static-$LATEST_VERSION.tgz
|
||||||
|
curl -O https://repo.clickhouse.tech/tgz/clickhouse-common-static-dbg-$LATEST_VERSION.tgz
|
||||||
|
curl -O https://repo.clickhouse.tech/tgz/clickhouse-server-$LATEST_VERSION.tgz
|
||||||
|
curl -O https://repo.clickhouse.tech/tgz/clickhouse-client-$LATEST_VERSION.tgz
|
||||||
|
|
||||||
|
tar -xzvf clickhouse-common-static-$LATEST_VERSION.tgz
|
||||||
|
sudo clickhouse-common-static-$LATEST_VERSION/install/doinst.sh
|
||||||
|
|
||||||
|
tar -xzvf clickhouse-common-static-dbg-$LATEST_VERSION.tgz
|
||||||
|
sudo clickhouse-common-static-dbg-$LATEST_VERSION/install/doinst.sh
|
||||||
|
|
||||||
|
tar -xzvf clickhouse-server-$LATEST_VERSION.tgz
|
||||||
|
sudo clickhouse-server-$LATEST_VERSION/install/doinst.sh
|
||||||
|
sudo /etc/init.d/clickhouse-server start
|
||||||
|
|
||||||
|
tar -xzvf clickhouse-client-$LATEST_VERSION.tgz
|
||||||
|
sudo clickhouse-client-$LATEST_VERSION/install/doinst.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour les environnements de production, il est recommandé d'utiliser la dernière `stable`-version. Vous pouvez trouver son numéro sur la page GitHub https://github.com/ClickHouse/ClickHouse/tags avec postfix `-stable`.
|
||||||
|
|
||||||
|
### À Partir De L'Image Docker {#from-docker-image}
|
||||||
|
|
||||||
|
Pour exécuter Clickhouse à L'intérieur Docker suivez le guide sur [Hub Docker](https://hub.docker.com/r/yandex/clickhouse-server/). Ces images utilisent officiel `deb` les paquets à l'intérieur.
|
||||||
|
|
||||||
|
### À Partir De Sources {#from-sources}
|
||||||
|
|
||||||
|
Pour compiler manuellement ClickHouse, suivez les instructions pour [Linux](../development/build.md) ou [Mac OS X](../development/build_osx.md).
|
||||||
|
|
||||||
|
Vous pouvez compiler des paquets et les installer ou utiliser des programmes sans installer de paquets. En outre, en construisant manuellement, vous pouvez désactiver L'exigence SSE 4.2 ou construire pour les processeurs AArch64.
|
||||||
|
|
||||||
|
Client: dbms/programs/clickhouse-client
|
||||||
|
Server: dbms/programs/clickhouse-server
|
||||||
|
|
||||||
|
Vous devrez créer un dossier de données et de métadonnées et `chown` pour l'utilisateur souhaité. Leurs chemins peuvent être modifiés dans la configuration du serveur (src / SGBD / programs / server / config.xml), par défaut, ils sont:
|
||||||
|
|
||||||
|
/opt/clickhouse/data/default/
|
||||||
|
/opt/clickhouse/metadata/default/
|
||||||
|
|
||||||
|
Sur Gentoo, vous pouvez simplement utiliser `emerge clickhouse` pour installer ClickHouse à partir de sources.
|
||||||
|
|
||||||
|
## Lancer {#launch}
|
||||||
|
|
||||||
|
Pour démarrer le serveur en tant que démon, exécutez:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ sudo service clickhouse-server start
|
||||||
|
```
|
||||||
|
|
||||||
|
Si vous n'avez pas `service` commande, exécuter comme
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ sudo /etc/init.d/clickhouse-server start
|
||||||
|
```
|
||||||
|
|
||||||
|
Voir les journaux dans le `/var/log/clickhouse-server/` répertoire.
|
||||||
|
|
||||||
|
Si le serveur ne démarre pas, vérifiez les configurations dans le fichier `/etc/clickhouse-server/config.xml`.
|
||||||
|
|
||||||
|
Vous pouvez également lancer manuellement le serveur à partir de la console:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ clickhouse-server --config-file=/etc/clickhouse-server/config.xml
|
||||||
|
```
|
||||||
|
|
||||||
|
Dans ce cas, le journal sera imprimé sur la console, ce qui est pratique lors du développement.
|
||||||
|
Si le fichier de configuration se trouve dans le répertoire courant, vous n'avez pas besoin `--config-file` paramètre. Par défaut, il utilise `./config.xml`.
|
||||||
|
|
||||||
|
ClickHouse prend en charge les paramètres de restriction d'accès. Ils sont situés dans la `users.xml` fichier (à côté de `config.xml`).
|
||||||
|
Par défaut, l'accès est autorisé depuis n'importe où pour `default` l'utilisateur, sans un mot de passe. Voir `user/default/networks`.
|
||||||
|
Pour plus d'informations, consultez la section [“Configuration Files”](../operations/configuration_files.md).
|
||||||
|
|
||||||
|
Après le lancement du serveur, vous pouvez utiliser le client de ligne de commande pour vous y connecter:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ clickhouse-client
|
||||||
|
```
|
||||||
|
|
||||||
|
Par défaut, il se connecte à `localhost:9000` au nom de l'utilisateur `default` sans un mot de passe. Il peut également être utilisé pour se connecter à un serveur distant en utilisant `--host` argument.
|
||||||
|
|
||||||
|
Le terminal doit utiliser L'encodage UTF-8.
|
||||||
|
Pour plus d'informations, consultez la section [“Command-line client”](../interfaces/cli.md).
|
||||||
|
|
||||||
|
Exemple:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ ./clickhouse-client
|
||||||
|
ClickHouse client version 0.0.18749.
|
||||||
|
Connecting to localhost:9000.
|
||||||
|
Connected to ClickHouse server version 0.0.18749.
|
||||||
|
|
||||||
|
:) SELECT 1
|
||||||
|
|
||||||
|
SELECT 1
|
||||||
|
|
||||||
|
┌─1─┐
|
||||||
|
│ 1 │
|
||||||
|
└───┘
|
||||||
|
|
||||||
|
1 rows in set. Elapsed: 0.003 sec.
|
||||||
|
|
||||||
|
:)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Félicitations, le système fonctionne!**
|
||||||
|
|
||||||
|
Pour continuer à expérimenter, vous pouvez télécharger l'un des jeux de données de test ou passer par [tutoriel](https://clickhouse.tech/tutorial.html).
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/getting_started/install/) <!--hide-->
|
45
docs/fr/getting_started/playground.md
Normal file
45
docs/fr/getting_started/playground.md
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Clickhouse Aire De Jeux {#clickhouse-playground}
|
||||||
|
|
||||||
|
[Clickhouse Aire De Jeux](https://play.clickhouse.tech?file=welcome) permet aux utilisateurs d'expérimenter avec ClickHouse en exécutant des requêtes instantanément, sans configurer leur serveur ou leur cluster.
|
||||||
|
Plusieurs exemples de jeux de données sont disponibles dans le terrain de jeu ainsi que des exemples de requêtes qui montrent les fonctionnalités de ClickHouse.
|
||||||
|
|
||||||
|
Les requêtes sont exécutées comme un utilisateur en lecture seule. Cela implique certaines limites:
|
||||||
|
|
||||||
|
- Les requêtes DDL ne sont pas autorisées
|
||||||
|
- Les requêtes D'insertion ne sont pas autorisées
|
||||||
|
|
||||||
|
Les paramètres suivants sont également appliquées:
|
||||||
|
- [`max_result_bytes=10485760`](../operations/settings/query_complexity/#max-result-bytes)
|
||||||
|
- [`max_result_rows=2000`](../operations/settings/query_complexity/#setting-max_result_rows)
|
||||||
|
- [`result_overflow_mode=break`](../operations/settings/query_complexity/#result-overflow-mode)
|
||||||
|
- [`max_execution_time=60000`](../operations/settings/query_complexity/#max-execution-time)
|
||||||
|
|
||||||
|
Clickhouse Playground donne l'expérience du m2.Petite
|
||||||
|
[Service géré pour ClickHouse](https://cloud.yandex.com/services/managed-clickhouse)
|
||||||
|
exemple hébergé dans [Yandex.Nuage](https://cloud.yandex.com/).
|
||||||
|
Plus d'informations sur [les fournisseurs de cloud](../commercial/cloud.md).
|
||||||
|
|
||||||
|
Clickhouse Playground interface web fait des demandes via ClickHouse [HTTP API](../interfaces/http.md).
|
||||||
|
Le backend Playground est juste un cluster ClickHouse sans aucune application Côté Serveur supplémentaire.
|
||||||
|
ClickHouse HTTPS endpoint est également disponible dans le cadre du terrain de jeu.
|
||||||
|
|
||||||
|
Vous pouvez effectuer des requêtes sur playground en utilisant n'importe quel client HTTP, par exemple [curl](https://curl.haxx.se) ou [wget](https://www.gnu.org/software/wget/), ou configurer une connexion en utilisant [JDBC](../interfaces/jdbc.md) ou [ODBC](../interfaces/odbc.md) pilote.
|
||||||
|
Plus d'informations sur les produits logiciels qui prennent en charge ClickHouse est disponible [ici](../interfaces/index.md).
|
||||||
|
|
||||||
|
| Paramètre | Valeur |
|
||||||
|
|:-------------|:----------------------------------------------|
|
||||||
|
| Terminaison | https://play-api.clickhouse.technologie: 8443 |
|
||||||
|
| Utilisateur | `playground` |
|
||||||
|
| Mot de passe | `clickhouse` |
|
||||||
|
|
||||||
|
Notez que ce paramètre nécessite une connexion sécurisée.
|
||||||
|
|
||||||
|
Exemple:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
curl "https://play-api.clickhouse.tech:8443/?query=SELECT+'Play+ClickHouse!';&user=playground&password=clickhouse&database=datasets"
|
||||||
|
```
|
668
docs/fr/getting_started/tutorial.md
Normal file
668
docs/fr/getting_started/tutorial.md
Normal file
@ -0,0 +1,668 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Tutoriel ClickHouse {#clickhouse-tutorial}
|
||||||
|
|
||||||
|
## À quoi S'attendre de ce tutoriel? {#what-to-expect-from-this-tutorial}
|
||||||
|
|
||||||
|
En parcourant ce tutoriel, vous apprendrez à configurer un cluster ClickHouse simple. Ce sera petit, mais tolérant aux pannes et évolutif. Ensuite, nous utiliserons l'un des exemples de jeux de données pour le remplir de données et exécuter des requêtes de démonstration.
|
||||||
|
|
||||||
|
## Configuration De Noeud Unique {#single-node-setup}
|
||||||
|
|
||||||
|
Pour retarder les complexités d'un environnement distribué, nous allons commencer par déployer ClickHouse sur un seul serveur ou une machine virtuelle. ClickHouse est généralement installé à partir de [deb](index.md#install-from-deb-packages) ou [tr / min](index.md#from-rpm-packages) les paquets, mais il y a [alternative](index.md#from-docker-image) pour les systèmes d'exploitation qui ne sont pas les soutenir.
|
||||||
|
|
||||||
|
Par exemple, vous avez choisi `deb` paquets et exécutés:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
sudo apt-get install dirmngr
|
||||||
|
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E0C56BD4
|
||||||
|
|
||||||
|
echo "deb http://repo.clickhouse.tech/deb/stable/ main/" | sudo tee /etc/apt/sources.list.d/clickhouse.list
|
||||||
|
sudo apt-get update
|
||||||
|
|
||||||
|
sudo apt-get install -y clickhouse-server clickhouse-client
|
||||||
|
```
|
||||||
|
|
||||||
|
Quelles sont les paquets installés:
|
||||||
|
|
||||||
|
- `clickhouse-client` package contient [clickhouse-client](../interfaces/cli.md) application, client interactif de console de ClickHouse.
|
||||||
|
- `clickhouse-common` paquet contient un fichier exécutable ClickHouse.
|
||||||
|
- `clickhouse-server` package contient des fichiers de configuration pour exécuter ClickHouse en tant que serveur.
|
||||||
|
|
||||||
|
Les fichiers de configuration du serveur sont `/etc/clickhouse-server/`. Avant d'aller plus loin, notez le `<path>` élément `config.xml`. Path détermine l'emplacement pour le stockage des données, il doit donc être situé sur le volume avec une grande capacité de disque; la valeur par défaut est `/var/lib/clickhouse/`. Si vous souhaitez ajuster la configuration, il n'est pas pratique de modifier directement `config.xml` fichier, considérant qu'il pourrait obtenir réécrit sur les futures mises à jour du progiciel. La façon recommandée de remplacer les éléments de configuration est de créer [fichiers dans config.d: répertoire](../operations/configuration_files.md) qui servent de “patches” config.XML.
|
||||||
|
|
||||||
|
Comme vous l'avez peut-être remarqué, `clickhouse-server` n'est pas lancé automatiquement après l'installation du paquet. Il ne sera pas redémarré automatiquement après les mises à jour, non plus. La façon dont vous démarrez le serveur dépend de votre système d'initialisation, généralement, c'est:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
sudo service clickhouse-server start
|
||||||
|
```
|
||||||
|
|
||||||
|
ou
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
sudo /etc/init.d/clickhouse-server start
|
||||||
|
```
|
||||||
|
|
||||||
|
L'emplacement par défaut pour les journaux du serveur est `/var/log/clickhouse-server/`. Le serveur est prêt à gérer les connexions client une fois `Ready for connections` message.
|
||||||
|
|
||||||
|
Une fois l' `clickhouse-server` est opérationnel, nous pouvons utiliser `clickhouse-client` pour se connecter au serveur et effectuer des tests de requêtes comme `SELECT "Hello, world!";`.
|
||||||
|
|
||||||
|
<details markdown="1">
|
||||||
|
|
||||||
|
<summary>Conseils rapides pour clickhouse-client</summary>
|
||||||
|
Mode interactif:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
clickhouse-client
|
||||||
|
clickhouse-client --host=... --port=... --user=... --password=...
|
||||||
|
```
|
||||||
|
|
||||||
|
Activer les requêtes multilignes:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
clickhouse-client -m
|
||||||
|
clickhouse-client --multiline
|
||||||
|
```
|
||||||
|
|
||||||
|
Exécuter des requêtes en mode batch:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
clickhouse-client --query='SELECT 1'
|
||||||
|
echo 'SELECT 1' | clickhouse-client
|
||||||
|
clickhouse-client <<< 'SELECT 1'
|
||||||
|
```
|
||||||
|
|
||||||
|
Insérer des données à partir d'un fichier au format spécifié:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
clickhouse-client --query='INSERT INTO table VALUES' < data.txt
|
||||||
|
clickhouse-client --query='INSERT INTO table FORMAT TabSeparated' < data.tsv
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Importer Un Échantillon De Données {#import-sample-dataset}
|
||||||
|
|
||||||
|
Maintenant, il est temps de remplir notre serveur ClickHouse avec quelques exemples de données. Dans ce tutoriel, nous allons utiliser les données anonymisées de Yandex.Metrica, le premier service qui exécute ClickHouse en production avant de devenir open-source (plus à ce sujet dans [section d'histoire](../introduction/history.md)). Il y a [plusieurs façons d'importer Yandex.Metrica dataset](example_datasets/metrica.md), et pour le bien du tutoriel, nous irons avec le plus réaliste.
|
||||||
|
|
||||||
|
### Télécharger et extraire les données de la Table {#download-and-extract-table-data}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
curl https://clickhouse-datasets.s3.yandex.net/hits/tsv/hits_v1.tsv.xz | unxz --threads=`nproc` > hits_v1.tsv
|
||||||
|
curl https://clickhouse-datasets.s3.yandex.net/visits/tsv/visits_v1.tsv.xz | unxz --threads=`nproc` > visits_v1.tsv
|
||||||
|
```
|
||||||
|
|
||||||
|
Les fichiers extraits ont une taille d'environ 10 Go.
|
||||||
|
|
||||||
|
### Créer Des Tables {#create-tables}
|
||||||
|
|
||||||
|
Comme dans la plupart des systèmes de gestion de bases de données, clickhouse regroupe logiquement les tables en “databases”. Il y a un `default` base de données, mais nous allons en créer une nouvelle nommée `tutorial`:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
clickhouse-client --query "CREATE DATABASE IF NOT EXISTS tutorial"
|
||||||
|
```
|
||||||
|
|
||||||
|
La syntaxe pour créer des tables est beaucoup plus compliquée par rapport aux bases de données (voir [référence](../query_language/create.md). En général `CREATE TABLE` déclaration doit spécifier trois choses clés:
|
||||||
|
|
||||||
|
1. Nom de la table à créer.
|
||||||
|
2. Table schema, i.e. list of columns and their [types de données](../data_types/index.md).
|
||||||
|
3. [Tableau moteur](../operations/table_engines/index.md) et ce sont les paramètres, qui déterminent tous les détails sur la façon dont les requêtes à cette table seront physiquement exécutées.
|
||||||
|
|
||||||
|
Yandex.Metrica est un service d'analyse web, et l'exemple de jeu de données ne couvre pas toutes ses fonctionnalités, il n'y a donc que deux tables à créer:
|
||||||
|
|
||||||
|
- `hits` est un tableau avec chaque action effectuée par tous les utilisateurs sur tous les sites couverts par le service.
|
||||||
|
- `visits` est une table qui contient des sessions pré-construites au lieu d'actions individuelles.
|
||||||
|
|
||||||
|
Voyons et exécutons les vraies requêtes create table pour ces tables:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE tutorial.hits_v1
|
||||||
|
(
|
||||||
|
`WatchID` UInt64,
|
||||||
|
`JavaEnable` UInt8,
|
||||||
|
`Title` String,
|
||||||
|
`GoodEvent` Int16,
|
||||||
|
`EventTime` DateTime,
|
||||||
|
`EventDate` Date,
|
||||||
|
`CounterID` UInt32,
|
||||||
|
`ClientIP` UInt32,
|
||||||
|
`ClientIP6` FixedString(16),
|
||||||
|
`RegionID` UInt32,
|
||||||
|
`UserID` UInt64,
|
||||||
|
`CounterClass` Int8,
|
||||||
|
`OS` UInt8,
|
||||||
|
`UserAgent` UInt8,
|
||||||
|
`URL` String,
|
||||||
|
`Referer` String,
|
||||||
|
`URLDomain` String,
|
||||||
|
`RefererDomain` String,
|
||||||
|
`Refresh` UInt8,
|
||||||
|
`IsRobot` UInt8,
|
||||||
|
`RefererCategories` Array(UInt16),
|
||||||
|
`URLCategories` Array(UInt16),
|
||||||
|
`URLRegions` Array(UInt32),
|
||||||
|
`RefererRegions` Array(UInt32),
|
||||||
|
`ResolutionWidth` UInt16,
|
||||||
|
`ResolutionHeight` UInt16,
|
||||||
|
`ResolutionDepth` UInt8,
|
||||||
|
`FlashMajor` UInt8,
|
||||||
|
`FlashMinor` UInt8,
|
||||||
|
`FlashMinor2` String,
|
||||||
|
`NetMajor` UInt8,
|
||||||
|
`NetMinor` UInt8,
|
||||||
|
`UserAgentMajor` UInt16,
|
||||||
|
`UserAgentMinor` FixedString(2),
|
||||||
|
`CookieEnable` UInt8,
|
||||||
|
`JavascriptEnable` UInt8,
|
||||||
|
`IsMobile` UInt8,
|
||||||
|
`MobilePhone` UInt8,
|
||||||
|
`MobilePhoneModel` String,
|
||||||
|
`Params` String,
|
||||||
|
`IPNetworkID` UInt32,
|
||||||
|
`TraficSourceID` Int8,
|
||||||
|
`SearchEngineID` UInt16,
|
||||||
|
`SearchPhrase` String,
|
||||||
|
`AdvEngineID` UInt8,
|
||||||
|
`IsArtifical` UInt8,
|
||||||
|
`WindowClientWidth` UInt16,
|
||||||
|
`WindowClientHeight` UInt16,
|
||||||
|
`ClientTimeZone` Int16,
|
||||||
|
`ClientEventTime` DateTime,
|
||||||
|
`SilverlightVersion1` UInt8,
|
||||||
|
`SilverlightVersion2` UInt8,
|
||||||
|
`SilverlightVersion3` UInt32,
|
||||||
|
`SilverlightVersion4` UInt16,
|
||||||
|
`PageCharset` String,
|
||||||
|
`CodeVersion` UInt32,
|
||||||
|
`IsLink` UInt8,
|
||||||
|
`IsDownload` UInt8,
|
||||||
|
`IsNotBounce` UInt8,
|
||||||
|
`FUniqID` UInt64,
|
||||||
|
`HID` UInt32,
|
||||||
|
`IsOldCounter` UInt8,
|
||||||
|
`IsEvent` UInt8,
|
||||||
|
`IsParameter` UInt8,
|
||||||
|
`DontCountHits` UInt8,
|
||||||
|
`WithHash` UInt8,
|
||||||
|
`HitColor` FixedString(1),
|
||||||
|
`UTCEventTime` DateTime,
|
||||||
|
`Age` UInt8,
|
||||||
|
`Sex` UInt8,
|
||||||
|
`Income` UInt8,
|
||||||
|
`Interests` UInt16,
|
||||||
|
`Robotness` UInt8,
|
||||||
|
`GeneralInterests` Array(UInt16),
|
||||||
|
`RemoteIP` UInt32,
|
||||||
|
`RemoteIP6` FixedString(16),
|
||||||
|
`WindowName` Int32,
|
||||||
|
`OpenerName` Int32,
|
||||||
|
`HistoryLength` Int16,
|
||||||
|
`BrowserLanguage` FixedString(2),
|
||||||
|
`BrowserCountry` FixedString(2),
|
||||||
|
`SocialNetwork` String,
|
||||||
|
`SocialAction` String,
|
||||||
|
`HTTPError` UInt16,
|
||||||
|
`SendTiming` Int32,
|
||||||
|
`DNSTiming` Int32,
|
||||||
|
`ConnectTiming` Int32,
|
||||||
|
`ResponseStartTiming` Int32,
|
||||||
|
`ResponseEndTiming` Int32,
|
||||||
|
`FetchTiming` Int32,
|
||||||
|
`RedirectTiming` Int32,
|
||||||
|
`DOMInteractiveTiming` Int32,
|
||||||
|
`DOMContentLoadedTiming` Int32,
|
||||||
|
`DOMCompleteTiming` Int32,
|
||||||
|
`LoadEventStartTiming` Int32,
|
||||||
|
`LoadEventEndTiming` Int32,
|
||||||
|
`NSToDOMContentLoadedTiming` Int32,
|
||||||
|
`FirstPaintTiming` Int32,
|
||||||
|
`RedirectCount` Int8,
|
||||||
|
`SocialSourceNetworkID` UInt8,
|
||||||
|
`SocialSourcePage` String,
|
||||||
|
`ParamPrice` Int64,
|
||||||
|
`ParamOrderID` String,
|
||||||
|
`ParamCurrency` FixedString(3),
|
||||||
|
`ParamCurrencyID` UInt16,
|
||||||
|
`GoalsReached` Array(UInt32),
|
||||||
|
`OpenstatServiceName` String,
|
||||||
|
`OpenstatCampaignID` String,
|
||||||
|
`OpenstatAdID` String,
|
||||||
|
`OpenstatSourceID` String,
|
||||||
|
`UTMSource` String,
|
||||||
|
`UTMMedium` String,
|
||||||
|
`UTMCampaign` String,
|
||||||
|
`UTMContent` String,
|
||||||
|
`UTMTerm` String,
|
||||||
|
`FromTag` String,
|
||||||
|
`HasGCLID` UInt8,
|
||||||
|
`RefererHash` UInt64,
|
||||||
|
`URLHash` UInt64,
|
||||||
|
`CLID` UInt32,
|
||||||
|
`YCLID` UInt64,
|
||||||
|
`ShareService` String,
|
||||||
|
`ShareURL` String,
|
||||||
|
`ShareTitle` String,
|
||||||
|
`ParsedParams` Nested(
|
||||||
|
Key1 String,
|
||||||
|
Key2 String,
|
||||||
|
Key3 String,
|
||||||
|
Key4 String,
|
||||||
|
Key5 String,
|
||||||
|
ValueDouble Float64),
|
||||||
|
`IslandID` FixedString(16),
|
||||||
|
`RequestNum` UInt32,
|
||||||
|
`RequestTry` UInt8
|
||||||
|
)
|
||||||
|
ENGINE = MergeTree()
|
||||||
|
PARTITION BY toYYYYMM(EventDate)
|
||||||
|
ORDER BY (CounterID, EventDate, intHash32(UserID))
|
||||||
|
SAMPLE BY intHash32(UserID)
|
||||||
|
SETTINGS index_granularity = 8192
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE tutorial.visits_v1
|
||||||
|
(
|
||||||
|
`CounterID` UInt32,
|
||||||
|
`StartDate` Date,
|
||||||
|
`Sign` Int8,
|
||||||
|
`IsNew` UInt8,
|
||||||
|
`VisitID` UInt64,
|
||||||
|
`UserID` UInt64,
|
||||||
|
`StartTime` DateTime,
|
||||||
|
`Duration` UInt32,
|
||||||
|
`UTCStartTime` DateTime,
|
||||||
|
`PageViews` Int32,
|
||||||
|
`Hits` Int32,
|
||||||
|
`IsBounce` UInt8,
|
||||||
|
`Referer` String,
|
||||||
|
`StartURL` String,
|
||||||
|
`RefererDomain` String,
|
||||||
|
`StartURLDomain` String,
|
||||||
|
`EndURL` String,
|
||||||
|
`LinkURL` String,
|
||||||
|
`IsDownload` UInt8,
|
||||||
|
`TraficSourceID` Int8,
|
||||||
|
`SearchEngineID` UInt16,
|
||||||
|
`SearchPhrase` String,
|
||||||
|
`AdvEngineID` UInt8,
|
||||||
|
`PlaceID` Int32,
|
||||||
|
`RefererCategories` Array(UInt16),
|
||||||
|
`URLCategories` Array(UInt16),
|
||||||
|
`URLRegions` Array(UInt32),
|
||||||
|
`RefererRegions` Array(UInt32),
|
||||||
|
`IsYandex` UInt8,
|
||||||
|
`GoalReachesDepth` Int32,
|
||||||
|
`GoalReachesURL` Int32,
|
||||||
|
`GoalReachesAny` Int32,
|
||||||
|
`SocialSourceNetworkID` UInt8,
|
||||||
|
`SocialSourcePage` String,
|
||||||
|
`MobilePhoneModel` String,
|
||||||
|
`ClientEventTime` DateTime,
|
||||||
|
`RegionID` UInt32,
|
||||||
|
`ClientIP` UInt32,
|
||||||
|
`ClientIP6` FixedString(16),
|
||||||
|
`RemoteIP` UInt32,
|
||||||
|
`RemoteIP6` FixedString(16),
|
||||||
|
`IPNetworkID` UInt32,
|
||||||
|
`SilverlightVersion3` UInt32,
|
||||||
|
`CodeVersion` UInt32,
|
||||||
|
`ResolutionWidth` UInt16,
|
||||||
|
`ResolutionHeight` UInt16,
|
||||||
|
`UserAgentMajor` UInt16,
|
||||||
|
`UserAgentMinor` UInt16,
|
||||||
|
`WindowClientWidth` UInt16,
|
||||||
|
`WindowClientHeight` UInt16,
|
||||||
|
`SilverlightVersion2` UInt8,
|
||||||
|
`SilverlightVersion4` UInt16,
|
||||||
|
`FlashVersion3` UInt16,
|
||||||
|
`FlashVersion4` UInt16,
|
||||||
|
`ClientTimeZone` Int16,
|
||||||
|
`OS` UInt8,
|
||||||
|
`UserAgent` UInt8,
|
||||||
|
`ResolutionDepth` UInt8,
|
||||||
|
`FlashMajor` UInt8,
|
||||||
|
`FlashMinor` UInt8,
|
||||||
|
`NetMajor` UInt8,
|
||||||
|
`NetMinor` UInt8,
|
||||||
|
`MobilePhone` UInt8,
|
||||||
|
`SilverlightVersion1` UInt8,
|
||||||
|
`Age` UInt8,
|
||||||
|
`Sex` UInt8,
|
||||||
|
`Income` UInt8,
|
||||||
|
`JavaEnable` UInt8,
|
||||||
|
`CookieEnable` UInt8,
|
||||||
|
`JavascriptEnable` UInt8,
|
||||||
|
`IsMobile` UInt8,
|
||||||
|
`BrowserLanguage` UInt16,
|
||||||
|
`BrowserCountry` UInt16,
|
||||||
|
`Interests` UInt16,
|
||||||
|
`Robotness` UInt8,
|
||||||
|
`GeneralInterests` Array(UInt16),
|
||||||
|
`Params` Array(String),
|
||||||
|
`Goals` Nested(
|
||||||
|
ID UInt32,
|
||||||
|
Serial UInt32,
|
||||||
|
EventTime DateTime,
|
||||||
|
Price Int64,
|
||||||
|
OrderID String,
|
||||||
|
CurrencyID UInt32),
|
||||||
|
`WatchIDs` Array(UInt64),
|
||||||
|
`ParamSumPrice` Int64,
|
||||||
|
`ParamCurrency` FixedString(3),
|
||||||
|
`ParamCurrencyID` UInt16,
|
||||||
|
`ClickLogID` UInt64,
|
||||||
|
`ClickEventID` Int32,
|
||||||
|
`ClickGoodEvent` Int32,
|
||||||
|
`ClickEventTime` DateTime,
|
||||||
|
`ClickPriorityID` Int32,
|
||||||
|
`ClickPhraseID` Int32,
|
||||||
|
`ClickPageID` Int32,
|
||||||
|
`ClickPlaceID` Int32,
|
||||||
|
`ClickTypeID` Int32,
|
||||||
|
`ClickResourceID` Int32,
|
||||||
|
`ClickCost` UInt32,
|
||||||
|
`ClickClientIP` UInt32,
|
||||||
|
`ClickDomainID` UInt32,
|
||||||
|
`ClickURL` String,
|
||||||
|
`ClickAttempt` UInt8,
|
||||||
|
`ClickOrderID` UInt32,
|
||||||
|
`ClickBannerID` UInt32,
|
||||||
|
`ClickMarketCategoryID` UInt32,
|
||||||
|
`ClickMarketPP` UInt32,
|
||||||
|
`ClickMarketCategoryName` String,
|
||||||
|
`ClickMarketPPName` String,
|
||||||
|
`ClickAWAPSCampaignName` String,
|
||||||
|
`ClickPageName` String,
|
||||||
|
`ClickTargetType` UInt16,
|
||||||
|
`ClickTargetPhraseID` UInt64,
|
||||||
|
`ClickContextType` UInt8,
|
||||||
|
`ClickSelectType` Int8,
|
||||||
|
`ClickOptions` String,
|
||||||
|
`ClickGroupBannerID` Int32,
|
||||||
|
`OpenstatServiceName` String,
|
||||||
|
`OpenstatCampaignID` String,
|
||||||
|
`OpenstatAdID` String,
|
||||||
|
`OpenstatSourceID` String,
|
||||||
|
`UTMSource` String,
|
||||||
|
`UTMMedium` String,
|
||||||
|
`UTMCampaign` String,
|
||||||
|
`UTMContent` String,
|
||||||
|
`UTMTerm` String,
|
||||||
|
`FromTag` String,
|
||||||
|
`HasGCLID` UInt8,
|
||||||
|
`FirstVisit` DateTime,
|
||||||
|
`PredLastVisit` Date,
|
||||||
|
`LastVisit` Date,
|
||||||
|
`TotalVisits` UInt32,
|
||||||
|
`TraficSource` Nested(
|
||||||
|
ID Int8,
|
||||||
|
SearchEngineID UInt16,
|
||||||
|
AdvEngineID UInt8,
|
||||||
|
PlaceID UInt16,
|
||||||
|
SocialSourceNetworkID UInt8,
|
||||||
|
Domain String,
|
||||||
|
SearchPhrase String,
|
||||||
|
SocialSourcePage String),
|
||||||
|
`Attendance` FixedString(16),
|
||||||
|
`CLID` UInt32,
|
||||||
|
`YCLID` UInt64,
|
||||||
|
`NormalizedRefererHash` UInt64,
|
||||||
|
`SearchPhraseHash` UInt64,
|
||||||
|
`RefererDomainHash` UInt64,
|
||||||
|
`NormalizedStartURLHash` UInt64,
|
||||||
|
`StartURLDomainHash` UInt64,
|
||||||
|
`NormalizedEndURLHash` UInt64,
|
||||||
|
`TopLevelDomain` UInt64,
|
||||||
|
`URLScheme` UInt64,
|
||||||
|
`OpenstatServiceNameHash` UInt64,
|
||||||
|
`OpenstatCampaignIDHash` UInt64,
|
||||||
|
`OpenstatAdIDHash` UInt64,
|
||||||
|
`OpenstatSourceIDHash` UInt64,
|
||||||
|
`UTMSourceHash` UInt64,
|
||||||
|
`UTMMediumHash` UInt64,
|
||||||
|
`UTMCampaignHash` UInt64,
|
||||||
|
`UTMContentHash` UInt64,
|
||||||
|
`UTMTermHash` UInt64,
|
||||||
|
`FromHash` UInt64,
|
||||||
|
`WebVisorEnabled` UInt8,
|
||||||
|
`WebVisorActivity` UInt32,
|
||||||
|
`ParsedParams` Nested(
|
||||||
|
Key1 String,
|
||||||
|
Key2 String,
|
||||||
|
Key3 String,
|
||||||
|
Key4 String,
|
||||||
|
Key5 String,
|
||||||
|
ValueDouble Float64),
|
||||||
|
`Market` Nested(
|
||||||
|
Type UInt8,
|
||||||
|
GoalID UInt32,
|
||||||
|
OrderID String,
|
||||||
|
OrderPrice Int64,
|
||||||
|
PP UInt32,
|
||||||
|
DirectPlaceID UInt32,
|
||||||
|
DirectOrderID UInt32,
|
||||||
|
DirectBannerID UInt32,
|
||||||
|
GoodID String,
|
||||||
|
GoodName String,
|
||||||
|
GoodQuantity Int32,
|
||||||
|
GoodPrice Int64),
|
||||||
|
`IslandID` FixedString(16)
|
||||||
|
)
|
||||||
|
ENGINE = CollapsingMergeTree(Sign)
|
||||||
|
PARTITION BY toYYYYMM(StartDate)
|
||||||
|
ORDER BY (CounterID, StartDate, intHash32(UserID), VisitID)
|
||||||
|
SAMPLE BY intHash32(UserID)
|
||||||
|
SETTINGS index_granularity = 8192
|
||||||
|
```
|
||||||
|
|
||||||
|
Vous pouvez exécuter ces requêtes en utilisant le mode interactif de `clickhouse-client` (lancez - le simplement dans un terminal sans spécifier une requête à l'avance) ou essayez-en [interface de rechange](../interfaces/index.md) Si tu veux.
|
||||||
|
|
||||||
|
Comme nous pouvons le voir, `hits_v1` utilise la [moteur MergeTree de base](../operations/table_engines/mergetree.md) tandis que le `visits_v1` utilise la [Effondrer](../operations/table_engines/collapsingmergetree.md) variante.
|
||||||
|
|
||||||
|
### Importer Des Données {#import-data}
|
||||||
|
|
||||||
|
L'importation de données vers ClickHouse se fait via [INSERT INTO](../query_language/insert_into.md) requête comme dans de nombreuses autres bases de données SQL. Toutefois, les données sont généralement fournies dans l'une des [formats de sérialisation pris en charge](../interfaces/formats.md) plutôt `VALUES` clause (qui est également pris en charge).
|
||||||
|
|
||||||
|
Les fichiers que nous avons téléchargés plus tôt sont au format séparé par des onglets, alors voici comment les importer via le client console:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
clickhouse-client --query "INSERT INTO tutorial.hits_v1 FORMAT TSV" --max_insert_block_size=100000 < hits_v1.tsv
|
||||||
|
clickhouse-client --query "INSERT INTO tutorial.visits_v1 FORMAT TSV" --max_insert_block_size=100000 < visits_v1.tsv
|
||||||
|
```
|
||||||
|
|
||||||
|
ClickHouse a beaucoup de [les paramètres de tune](../operations/settings/index.md) et une façon de Les spécifier dans le client console est via des arguments, comme nous pouvons le voir avec `--max_insert_block_size`. La façon la plus simple de comprendre quels paramètres sont disponibles, que signifient-ils et quelles sont les valeurs par défaut est d'interroger le `system.settings` table:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT name, value, changed, description
|
||||||
|
FROM system.settings
|
||||||
|
WHERE name LIKE '%max_insert_b%'
|
||||||
|
FORMAT TSV
|
||||||
|
|
||||||
|
max_insert_block_size 1048576 0 "The maximum block size for insertion, if we control the creation of blocks for insertion."
|
||||||
|
```
|
||||||
|
|
||||||
|
Optionnellement, vous pouvez [OPTIMIZE](../query_language/misc/#misc_operations-optimize) les tables après l'importation. Les Tables configurées avec un moteur de MergeTree-family font toujours des fusions de parties de données en arrière-plan pour optimiser le stockage des données (ou au moins vérifier si cela a du sens). Ces requêtes forcent le moteur de table à optimiser le stockage dès maintenant au lieu d'un certain temps plus tard:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
clickhouse-client --query "OPTIMIZE TABLE tutorial.hits_v1 FINAL"
|
||||||
|
clickhouse-client --query "OPTIMIZE TABLE tutorial.visits_v1 FINAL"
|
||||||
|
```
|
||||||
|
|
||||||
|
Ces requêtes démarrent une opération intensive D'E/S et de CPU, donc si la table reçoit systématiquement de nouvelles données, il est préférable de la laisser seule et de laisser les fusions s'exécuter en arrière-plan.
|
||||||
|
|
||||||
|
Maintenant, nous pouvons vérifier si l'importation de table a réussi:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
clickhouse-client --query "SELECT COUNT(*) FROM tutorial.hits_v1"
|
||||||
|
clickhouse-client --query "SELECT COUNT(*) FROM tutorial.visits_v1"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Exemple De Requêtes {#example-queries}
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT
|
||||||
|
StartURL AS URL,
|
||||||
|
AVG(Duration) AS AvgDuration
|
||||||
|
FROM tutorial.visits_v1
|
||||||
|
WHERE StartDate BETWEEN '2014-03-23' AND '2014-03-30'
|
||||||
|
GROUP BY URL
|
||||||
|
ORDER BY AvgDuration DESC
|
||||||
|
LIMIT 10
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT
|
||||||
|
sum(Sign) AS visits,
|
||||||
|
sumIf(Sign, has(Goals.ID, 1105530)) AS goal_visits,
|
||||||
|
(100. * goal_visits) / visits AS goal_percent
|
||||||
|
FROM tutorial.visits_v1
|
||||||
|
WHERE (CounterID = 912887) AND (toYYYYMM(StartDate) = 201403) AND (domain(StartURL) = 'yandex.ru')
|
||||||
|
```
|
||||||
|
|
||||||
|
## Déploiement De Cluster {#cluster-deployment}
|
||||||
|
|
||||||
|
Clickhouse cluster est un cluster homogène. Étapes pour configurer:
|
||||||
|
|
||||||
|
1. Installer clickhouse server sur toutes les machines du cluster
|
||||||
|
2. Configurer les configurations de cluster dans les fichiers de configuration
|
||||||
|
3. Créer des tables locales sur chaque instance
|
||||||
|
4. Créer un [Distribué table](../operations/table_engines/distributed.md)
|
||||||
|
|
||||||
|
[Distribué table](../operations/table_engines/distributed.md) est en fait une sorte de “view” aux tables locales du cluster ClickHouse. SELECT query from a distributed table s'exécute à l'aide des ressources de tous les fragments du cluster. Vous pouvez spécifier des configurations pour plusieurs clusters et créer plusieurs tables distribuées fournissant des vues à différents clusters.
|
||||||
|
|
||||||
|
Exemple de configuration pour un cluster avec trois fragments, une réplique chacun:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<remote_servers>
|
||||||
|
<perftest_3shards_1replicas>
|
||||||
|
<shard>
|
||||||
|
<replica>
|
||||||
|
<host>example-perftest01j.yandex.ru</host>
|
||||||
|
<port>9000</port>
|
||||||
|
</replica>
|
||||||
|
</shard>
|
||||||
|
<shard>
|
||||||
|
<replica>
|
||||||
|
<host>example-perftest02j.yandex.ru</host>
|
||||||
|
<port>9000</port>
|
||||||
|
</replica>
|
||||||
|
</shard>
|
||||||
|
<shard>
|
||||||
|
<replica>
|
||||||
|
<host>example-perftest03j.yandex.ru</host>
|
||||||
|
<port>9000</port>
|
||||||
|
</replica>
|
||||||
|
</shard>
|
||||||
|
</perftest_3shards_1replicas>
|
||||||
|
</remote_servers>
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour plus de démonstration, créons une nouvelle table locale avec le même `CREATE TABLE` la requête que nous avons utilisé pour `hits_v1`, mais nom de table différent:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE tutorial.hits_local (...) ENGINE = MergeTree() ...
|
||||||
|
```
|
||||||
|
|
||||||
|
Création d'une table distribuée fournissant une vue dans les tables locales du cluster:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE tutorial.hits_all AS tutorial.hits_local
|
||||||
|
ENGINE = Distributed(perftest_3shards_1replicas, tutorial, hits_local, rand());
|
||||||
|
```
|
||||||
|
|
||||||
|
Une pratique courante consiste à créer des tables distribuées similaires sur toutes les machines du cluster. Il permet d'exécuter des requêtes distribuées sur n'importe quelle machine du cluster. Il existe également une autre option pour créer une table distribuée temporaire pour une requête SELECT donnée en utilisant [distant](../query_language/table_functions/remote.md) table de fonction.
|
||||||
|
|
||||||
|
Passons à l'exécution de [INSERT SELECT](../query_language/insert_into.md) dans les Distribué table la table à plusieurs serveurs.
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
INSERT INTO tutorial.hits_all SELECT * FROM tutorial.hits_v1;
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! warning "Avis"
|
||||||
|
Cette approche ne convient pas au sharding de grandes tables. Il y a un outil séparé [clickhouse-copieur](../operations/utils/clickhouse-copier.md) cela peut re-fragmenter de grandes tables arbitraires.
|
||||||
|
|
||||||
|
Comme vous pouvez vous y attendre, les requêtes lourdes de calcul s'exécutent N fois plus vite si elles utilisent 3 serveurs au lieu d'un.
|
||||||
|
|
||||||
|
Dans ce cas, nous avons utilisé un cluster avec 3 fragments, et chacun contient une seule réplique.
|
||||||
|
|
||||||
|
Pour assurer la résilience dans un environnement de production, nous recommandons que chaque fragment contienne 2-3 répliques réparties entre plusieurs zones de disponibilité ou centres de données (ou au moins des racks). Notez que ClickHouse prend en charge un nombre illimité de répliques.
|
||||||
|
|
||||||
|
Exemple de configuration pour un cluster d'un fragment contenant trois répliques:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<remote_servers>
|
||||||
|
...
|
||||||
|
<perftest_1shards_3replicas>
|
||||||
|
<shard>
|
||||||
|
<replica>
|
||||||
|
<host>example-perftest01j.yandex.ru</host>
|
||||||
|
<port>9000</port>
|
||||||
|
</replica>
|
||||||
|
<replica>
|
||||||
|
<host>example-perftest02j.yandex.ru</host>
|
||||||
|
<port>9000</port>
|
||||||
|
</replica>
|
||||||
|
<replica>
|
||||||
|
<host>example-perftest03j.yandex.ru</host>
|
||||||
|
<port>9000</port>
|
||||||
|
</replica>
|
||||||
|
</shard>
|
||||||
|
</perftest_1shards_3replicas>
|
||||||
|
</remote_servers>
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour activer la réplication native [ZooKeeper](http://zookeeper.apache.org/) est requis. ClickHouse s'occupe de la cohérence des données sur toutes les répliques et exécute automatiquement la procédure de restauration après l'échec. Il est recommandé de déployer le cluster ZooKeeper sur des serveurs séparés (où aucun autre processus, y compris ClickHouse, n'est en cours d'exécution).
|
||||||
|
|
||||||
|
!!! note "Note"
|
||||||
|
ZooKeeper est pas une exigence stricte: dans certains cas simples, vous pouvez dupliquer les données par écrit dans tous les réplicas de votre code d'application. Cette approche est **pas** recommandé, dans ce cas, ClickHouse ne sera pas en mesure de garantir la cohérence des données sur toutes les répliques. Ainsi, il devient la responsabilité de votre application.
|
||||||
|
|
||||||
|
Les emplacements ZooKeeper sont spécifiés dans le fichier de configuration:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<zookeeper>
|
||||||
|
<node>
|
||||||
|
<host>zoo01.yandex.ru</host>
|
||||||
|
<port>2181</port>
|
||||||
|
</node>
|
||||||
|
<node>
|
||||||
|
<host>zoo02.yandex.ru</host>
|
||||||
|
<port>2181</port>
|
||||||
|
</node>
|
||||||
|
<node>
|
||||||
|
<host>zoo03.yandex.ru</host>
|
||||||
|
<port>2181</port>
|
||||||
|
</node>
|
||||||
|
</zookeeper>
|
||||||
|
```
|
||||||
|
|
||||||
|
En outre, nous devons définir des macros pour identifier chaque fragment et chaque réplique utilisés lors de la création de la table:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<macros>
|
||||||
|
<shard>01</shard>
|
||||||
|
<replica>01</replica>
|
||||||
|
</macros>
|
||||||
|
```
|
||||||
|
|
||||||
|
S'il n'y a pas de répliques pour le moment lors de la création de la table répliquée, une nouvelle première réplique est instanciée. S'il existe déjà des répliques en direct, la nouvelle réplique clone les données de celles existantes. Vous avez la possibilité de créer toutes les tables répliquées d'abord, et ensuite insérer les données. Une autre option consiste à créer des répliques et à en ajouter d'autres Après ou pendant l'insertion des données.
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
CREATE TABLE tutorial.hits_replica (...)
|
||||||
|
ENGINE = ReplcatedMergeTree(
|
||||||
|
'/clickhouse_perftest/tables/{shard}/hits',
|
||||||
|
'{replica}'
|
||||||
|
)
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
Ici, nous utilisons [ReplicatedMergeTree](../operations/table_engines/replication.md) tableau moteur. Dans les paramètres, nous spécifions le chemin Zookeeper contenant des identificateurs de fragments et de répliques.
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
INSERT INTO tutorial.hits_replica SELECT * FROM tutorial.hits_local;
|
||||||
|
```
|
||||||
|
|
||||||
|
La réplication fonctionne en mode multi-maître. Les données peuvent être chargées dans n'importe quel réplica, et le système les synchronise ensuite automatiquement avec d'autres instances. La réplication est asynchrone, donc à un moment donné, toutes les répliques ne peuvent pas contenir de données récemment insérées. Au moins une réplique devrait être en place pour permettre l'ingestion de données. D'autres synchroniseront les données et répareront la cohérence une fois qu'ils redeviendront actifs. Notez que cette approche permet une faible possibilité de perte de données récemment insérées.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/getting_started/tutorial/) <!--hide-->
|
236
docs/fr/guides/apply_catboost_model.md
Normal file
236
docs/fr/guides/apply_catboost_model.md
Normal file
@ -0,0 +1,236 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Application D'un modèle Catboost dans ClickHouse {#applying-catboost-model-in-clickhouse}
|
||||||
|
|
||||||
|
[CatBoost](https://catboost.ai) est une bibliothèque de dynamisation de gradient libre et open-source développée à [Yandex](https://yandex.com/company/) pour l'apprentissage automatique.
|
||||||
|
|
||||||
|
Avec cette instruction, vous apprendrez à appliquer des modèles pré-formés dans ClickHouse en exécutant l'inférence de modèle à partir de SQL.
|
||||||
|
|
||||||
|
Pour appliquer un modèle CatBoost dans ClickHouse:
|
||||||
|
|
||||||
|
1. [Créer une Table](#create-table).
|
||||||
|
2. [Insérez les données dans la Table](#insert-data-to-table).
|
||||||
|
3. [Intégrer CatBoost dans ClickHouse](#integrate-catboost-into-clickhouse) (Étape facultative).
|
||||||
|
4. [Exécutez L'inférence du modèle à partir de SQL](#run-model-inference).
|
||||||
|
|
||||||
|
Pour plus d'informations sur la formation des modèles CatBoost, voir [Formation et application de modèles](https://catboost.ai/docs/features/training.html#training).
|
||||||
|
|
||||||
|
## Préalable {#prerequisites}
|
||||||
|
|
||||||
|
Si vous n'avez pas le [Docker](https://docs.docker.com/install/) pourtant, l'installer.
|
||||||
|
|
||||||
|
!!! note "Note"
|
||||||
|
[Docker](https://www.docker.com) est une plate-forme logicielle qui vous permet de créer des conteneurs qui isolent une installation CatBoost et ClickHouse du reste du système.
|
||||||
|
|
||||||
|
Avant d'appliquer un modèle CatBoost:
|
||||||
|
|
||||||
|
**1.** Tirez la [Docker image](https://hub.docker.com/r/yandex/tutorial-catboost-clickhouse) à partir du registre:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ docker pull yandex/tutorial-catboost-clickhouse
|
||||||
|
```
|
||||||
|
|
||||||
|
Cette image Docker contient tout ce dont vous avez besoin pour exécuter CatBoost et ClickHouse: code, runtime, bibliothèques, variables d'environnement et fichiers de configuration.
|
||||||
|
|
||||||
|
**2.** Assurez-vous que l'image Docker a été tirée avec succès:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ docker image ls
|
||||||
|
REPOSITORY TAG IMAGE ID CREATED SIZE
|
||||||
|
yandex/tutorial-catboost-clickhouse latest 622e4d17945b 22 hours ago 1.37GB
|
||||||
|
```
|
||||||
|
|
||||||
|
**3.** Démarrer un conteneur Docker basé sur cette image:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ docker run -it -p 8888:8888 yandex/tutorial-catboost-clickhouse
|
||||||
|
```
|
||||||
|
|
||||||
|
## 1. Créer une Table {#create-table}
|
||||||
|
|
||||||
|
Pour créer une table ClickHouse pour l'exemple de formation:
|
||||||
|
|
||||||
|
**1.** Démarrez clickhouse console client en mode interactif:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ clickhouse client
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! note "Note"
|
||||||
|
Le serveur ClickHouse est déjà en cours d'exécution dans le conteneur Docker.
|
||||||
|
|
||||||
|
**2.** Créer la table à l'aide de la commande:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
:) CREATE TABLE amazon_train
|
||||||
|
(
|
||||||
|
date Date MATERIALIZED today(),
|
||||||
|
ACTION UInt8,
|
||||||
|
RESOURCE UInt32,
|
||||||
|
MGR_ID UInt32,
|
||||||
|
ROLE_ROLLUP_1 UInt32,
|
||||||
|
ROLE_ROLLUP_2 UInt32,
|
||||||
|
ROLE_DEPTNAME UInt32,
|
||||||
|
ROLE_TITLE UInt32,
|
||||||
|
ROLE_FAMILY_DESC UInt32,
|
||||||
|
ROLE_FAMILY UInt32,
|
||||||
|
ROLE_CODE UInt32
|
||||||
|
)
|
||||||
|
ENGINE = MergeTree ORDER BY date
|
||||||
|
```
|
||||||
|
|
||||||
|
**3.** Quitter le client de la console ClickHouse:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
:) exit
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. Insérez les données dans la Table {#insert-data-to-table}
|
||||||
|
|
||||||
|
Pour insérer les données:
|
||||||
|
|
||||||
|
**1.** Exécutez la commande suivante:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ clickhouse client --host 127.0.0.1 --query 'INSERT INTO amazon_train FORMAT CSVWithNames' < ~/amazon/train.csv
|
||||||
|
```
|
||||||
|
|
||||||
|
**2.** Démarrez clickhouse console client en mode interactif:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ clickhouse client
|
||||||
|
```
|
||||||
|
|
||||||
|
**3.** Assurez-vous que les données ont été téléchargées:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
:) SELECT count() FROM amazon_train
|
||||||
|
|
||||||
|
SELECT count()
|
||||||
|
FROM amazon_train
|
||||||
|
|
||||||
|
+-count()-+
|
||||||
|
| 65538 |
|
||||||
|
+---------+
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3. Intégrer CatBoost dans ClickHouse {#integrate-catboost-into-clickhouse}
|
||||||
|
|
||||||
|
!!! note "Note"
|
||||||
|
**Étape facultative.** L'image Docker contient tout ce dont vous avez besoin pour exécuter CatBoost et ClickHouse.
|
||||||
|
|
||||||
|
Pour intégrer CatBoost dans ClickHouse:
|
||||||
|
|
||||||
|
**1.** Construire la bibliothèque d'évaluation.
|
||||||
|
|
||||||
|
Le moyen le plus rapide d'évaluer un modèle CatBoost est la compilation `libcatboostmodel.<so|dll|dylib>` bibliothèque. Pour plus d'informations sur la création de la bibliothèque, voir [Documentation CatBoost](https://catboost.ai/docs/concepts/c-plus-plus-api_dynamic-c-pluplus-wrapper.html).
|
||||||
|
|
||||||
|
**2.** Créez un nouveau répertoire n'importe où et avec n'importe quel nom, par exemple, `data` et mettez la bibliothèque créée dedans. L'image Docker contient déjà la bibliothèque `data/libcatboostmodel.so`.
|
||||||
|
|
||||||
|
**3.** Créez un nouveau répertoire pour le modèle de configuration n'importe où et avec n'importe quel nom, par exemple, `models`.
|
||||||
|
|
||||||
|
**4.** Créez un fichier de configuration de modèle avec n'importe quel nom, par exemple, `models/amazon_model.xml`.
|
||||||
|
|
||||||
|
**5.** Décrire la configuration du modèle:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<models>
|
||||||
|
<model>
|
||||||
|
<!-- Model type. Now catboost only. -->
|
||||||
|
<type>catboost</type>
|
||||||
|
<!-- Model name. -->
|
||||||
|
<name>amazon</name>
|
||||||
|
<!-- Path to trained model. -->
|
||||||
|
<path>/home/catboost/tutorial/catboost_model.bin</path>
|
||||||
|
<!-- Update interval. -->
|
||||||
|
<lifetime>0</lifetime>
|
||||||
|
</model>
|
||||||
|
</models>
|
||||||
|
```
|
||||||
|
|
||||||
|
**6.** Ajoutez le chemin D'accès à CatBoost et la configuration du modèle à la configuration de ClickHouse:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<!-- File etc/clickhouse-server/config.d/models_config.xml. -->
|
||||||
|
<catboost_dynamic_library_path>/home/catboost/data/libcatboostmodel.so</catboost_dynamic_library_path>
|
||||||
|
<models_config>/home/catboost/models/*_model.xml</models_config>
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. Exécutez L'inférence du modèle à partir de SQL {#run-model-inference}
|
||||||
|
|
||||||
|
Pour le modèle de test exécutez le client ClickHouse `$ clickhouse client`.
|
||||||
|
|
||||||
|
Assurons nous que le modèle fonctionne:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
:) SELECT
|
||||||
|
modelEvaluate('amazon',
|
||||||
|
RESOURCE,
|
||||||
|
MGR_ID,
|
||||||
|
ROLE_ROLLUP_1,
|
||||||
|
ROLE_ROLLUP_2,
|
||||||
|
ROLE_DEPTNAME,
|
||||||
|
ROLE_TITLE,
|
||||||
|
ROLE_FAMILY_DESC,
|
||||||
|
ROLE_FAMILY,
|
||||||
|
ROLE_CODE) > 0 AS prediction,
|
||||||
|
ACTION AS target
|
||||||
|
FROM amazon_train
|
||||||
|
LIMIT 10
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! note "Note"
|
||||||
|
Fonction [modelEvaluate](../query_language/functions/other_functions.md#function-modelevaluate) retourne tuple avec des prédictions brutes par classe pour les modèles multiclasse.
|
||||||
|
|
||||||
|
Prédisons la probabilité:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
:) SELECT
|
||||||
|
modelEvaluate('amazon',
|
||||||
|
RESOURCE,
|
||||||
|
MGR_ID,
|
||||||
|
ROLE_ROLLUP_1,
|
||||||
|
ROLE_ROLLUP_2,
|
||||||
|
ROLE_DEPTNAME,
|
||||||
|
ROLE_TITLE,
|
||||||
|
ROLE_FAMILY_DESC,
|
||||||
|
ROLE_FAMILY,
|
||||||
|
ROLE_CODE) AS prediction,
|
||||||
|
1. / (1 + exp(-prediction)) AS probability,
|
||||||
|
ACTION AS target
|
||||||
|
FROM amazon_train
|
||||||
|
LIMIT 10
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! note "Note"
|
||||||
|
Plus d'infos sur [exp()](../query_language/functions/math_functions.md) fonction.
|
||||||
|
|
||||||
|
Calculons LogLoss sur l'échantillon:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
:) SELECT -avg(tg * log(prob) + (1 - tg) * log(1 - prob)) AS logloss
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
modelEvaluate('amazon',
|
||||||
|
RESOURCE,
|
||||||
|
MGR_ID,
|
||||||
|
ROLE_ROLLUP_1,
|
||||||
|
ROLE_ROLLUP_2,
|
||||||
|
ROLE_DEPTNAME,
|
||||||
|
ROLE_TITLE,
|
||||||
|
ROLE_FAMILY_DESC,
|
||||||
|
ROLE_FAMILY,
|
||||||
|
ROLE_CODE) AS prediction,
|
||||||
|
1. / (1. + exp(-prediction)) AS prob,
|
||||||
|
ACTION AS tg
|
||||||
|
FROM amazon_train
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! note "Note"
|
||||||
|
Plus d'infos sur [avg()](../query_language/agg_functions/reference.md#agg_function-avg) et [journal()](../query_language/functions/math_functions.md) fonction.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/guides/apply_catboost_model/) <!--hide-->
|
12
docs/fr/guides/index.md
Normal file
12
docs/fr/guides/index.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# ClickHouse Guides {#clickhouse-guides}
|
||||||
|
|
||||||
|
Liste des instructions détaillées étape par étape qui aident à résoudre diverses tâches en utilisant ClickHouse:
|
||||||
|
|
||||||
|
- [Tutoriel sur la configuration simple du cluster](../getting_started/tutorial.md)
|
||||||
|
- [Application D'un modèle CatBoost dans ClickHouse](apply_catboost_model.md)
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/guides/) <!--hide-->
|
1
docs/fr/images
Symbolic link
1
docs/fr/images
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../en/images
|
136
docs/fr/index.md
Normal file
136
docs/fr/index.md
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Qu'est-ce que ClickHouse? {#what-is-clickhouse}
|
||||||
|
|
||||||
|
ClickHouse est un système de gestion de base de données orienté colonne (SGBD) pour le traitement analytique en ligne des requêtes (OLAP).
|
||||||
|
|
||||||
|
Dans un “normal” SGBD orienté ligne, les données sont stockées dans cet ordre:
|
||||||
|
|
||||||
|
| Rangée | WatchID | JavaEnable | Intitulé | GoodEvent | EventTime |
|
||||||
|
|--------|-------------|------------|----------------------------------|-----------|---------------------|
|
||||||
|
| \#0 | 89354350662 | 1 | Relations Avec Les Investisseurs | 1 | 2016-05-18 05:19:20 |
|
||||||
|
| \#1 | 90329509958 | 0 | Contacter | 1 | 2016-05-18 08:10:20 |
|
||||||
|
| \#2 | 89953706054 | 1 | Mission | 1 | 2016-05-18 07:38:00 |
|
||||||
|
| \#N | … | … | … | … | … |
|
||||||
|
|
||||||
|
En d'autres termes, toutes les valeurs liées à une ligne sont physiquement stockées l'une à côté de l'autre.
|
||||||
|
|
||||||
|
Des exemples d'un SGBD orienté ligne sont MySQL, Postgres et MS SQL Server. {: .gris }
|
||||||
|
|
||||||
|
Dans un SGBD orienté colonne, les données sont stockées comme ceci:
|
||||||
|
|
||||||
|
| Rangée: | \#0 | \#1 | \#2 | \#N |
|
||||||
|
|-------------|----------------------------------|---------------------|---------------------|-----|
|
||||||
|
| WatchID: | 89354350662 | 90329509958 | 89953706054 | … |
|
||||||
|
| JavaEnable: | 1 | 0 | 1 | … |
|
||||||
|
| Intitulé: | Relations Avec Les Investisseurs | Contacter | Mission | … |
|
||||||
|
| GoodEvent: | 1 | 1 | 1 | … |
|
||||||
|
| EventTime: | 2016-05-18 05:19:20 | 2016-05-18 08:10:20 | 2016-05-18 07:38:00 | … |
|
||||||
|
|
||||||
|
Ces exemples montrent l'ordre que les données sont organisées en. Les valeurs de différentes colonnes sont stockés séparément, et les données de la même colonne sont stockées ensemble.
|
||||||
|
|
||||||
|
Exemples D'un SGBD orienté colonne: Vertica, Paraccel (matrice Actian et Amazon Redshift), Sybase IQ, Exasol, Infobright, InfiniDB, MonetDB (VectorWise et Actian Vector), LucidDB, SAP HANA, Google Dremel, Google PowerDrill, Druid et kdb+. {: .gris }
|
||||||
|
|
||||||
|
Different orders for storing data are better suited to different scenarios. The data access scenario refers to what queries are made, how often, and in what proportion; how much data is read for each type of query – rows, columns, and bytes; the relationship between reading and updating data; the working size of the data and how locally it is used; whether transactions are used, and how isolated they are; requirements for data replication and logical integrity; requirements for latency and throughput for each type of query, and so on.
|
||||||
|
|
||||||
|
Plus la charge sur le système est élevée, plus il est important de personnaliser le système configuré pour correspondre aux exigences du scénario d'utilisation, et plus cette personnalisation devient fine. Il n'y a pas de système qui soit aussi bien adapté à des scénarios significativement différents. Si un système est adaptable à un large ensemble de scénarios, sous une charge élevée, le système traitera tous les scénarios de manière également médiocre, ou fonctionnera bien pour un ou quelques-uns des scénarios possibles.
|
||||||
|
|
||||||
|
## Propriétés clés du scénario OLAP {#key-properties-of-olap-scenario}
|
||||||
|
|
||||||
|
- La grande majorité des demandes concernent l'accès en lecture.
|
||||||
|
- Les données sont mises à jour en lots assez importants (\> 1000 lignes), pas par des lignes simples; ou elles ne sont pas mises à jour du tout.
|
||||||
|
- Les données sont ajoutées à la base de données mais ne sont pas modifiées.
|
||||||
|
- Pour les lectures, un assez grand nombre de lignes sont extraites de la base de données, mais seulement un petit sous-ensemble de colonnes.
|
||||||
|
- Les Tables sont “wide,” ce qui signifie qu'ils contiennent un grand nombre de colonnes.
|
||||||
|
- Les requêtes sont relativement rares (généralement des centaines de requêtes par serveur ou moins par seconde).
|
||||||
|
- Pour les requêtes simples, les latences autour de 50 ms sont autorisées.
|
||||||
|
- Les valeurs de colonne sont assez petites: nombres et chaînes courtes (par exemple, 60 octets par URL).
|
||||||
|
- Nécessite un débit élevé lors du traitement d'une seule requête (jusqu'à des milliards de lignes par seconde par serveur).
|
||||||
|
- Les Transactions ne sont pas nécessaires.
|
||||||
|
- Faibles exigences en matière de cohérence des données.
|
||||||
|
- Il y a une grande table par requête. Toutes les tables sont petites, sauf une.
|
||||||
|
- Un résultat de requête est significativement plus petit que les données source. En d'autres termes, les données sont filtrées ou agrégées, de sorte que le résultat s'intègre dans la RAM d'un seul serveur.
|
||||||
|
|
||||||
|
Il est facile de voir que le scénario OLAP est très différent des autres scénarios populaires (tels que OLTP ou key-Value access). Il n'est donc pas logique d'essayer D'utiliser OLTP ou une base de données clé-valeur pour traiter les requêtes analytiques si vous voulez obtenir des performances décentes. Par exemple, si vous essayez D'utiliser MongoDB ou Redis pour l'analyse, vous obtiendrez des performances très médiocres par rapport aux bases de données OLAP.
|
||||||
|
|
||||||
|
## Pourquoi les bases de données orientées colonne fonctionnent mieux dans le scénario OLAP {#why-column-oriented-databases-work-better-in-the-olap-scenario}
|
||||||
|
|
||||||
|
Les bases de données orientées colonne sont mieux adaptées aux scénarios OLAP: elles sont au moins 100 fois plus rapides dans le traitement de la plupart des requêtes. Les raisons sont expliquées en détail ci-dessous, mais le fait est plus facile de démontrer visuellement:
|
||||||
|
|
||||||
|
**SGBD orienté ligne**
|
||||||
|
|
||||||
|
![Row-oriented](images/row_oriented.gif#)
|
||||||
|
|
||||||
|
**SGBD orienté colonne**
|
||||||
|
|
||||||
|
![Column-oriented](images/column_oriented.gif#)
|
||||||
|
|
||||||
|
Vous voyez la différence?
|
||||||
|
|
||||||
|
### D'entrée/sortie {#inputoutput}
|
||||||
|
|
||||||
|
1. Pour une requête analytique, seul un petit nombre de colonnes de table doit être lu. Dans une base de données orientée colonne, vous pouvez lire uniquement les données dont vous avez besoin. Par exemple, si vous avez besoin de 5 colonnes sur 100, Vous pouvez vous attendre à une réduction de 20 fois des e / s.
|
||||||
|
2. Puisque les données sont lues en paquets, il est plus facile de les compresser. Les données dans les colonnes sont également plus faciles à compresser. Cela réduit d'autant le volume d'e/S.
|
||||||
|
3. En raison de la réduction des E / S, Plus de données s'insèrent dans le cache du système.
|
||||||
|
|
||||||
|
Par exemple, la requête “count the number of records for each advertising platform” nécessite la lecture d'un “advertising platform ID” colonne, qui prend 1 octet non compressé. Si la majeure partie du trafic ne provenait pas de plates-formes publicitaires, vous pouvez vous attendre à une compression d'au moins 10 fois de cette colonne. Lors de l'utilisation d'un algorithme de compression rapide, la décompression des données est possible à une vitesse d'au moins plusieurs gigaoctets de données non compressées par seconde. En d'autres termes, cette requête ne peut être traitée qu'à une vitesse d'environ plusieurs milliards de lignes par seconde sur un seul serveur. Cette vitesse est effectivement atteinte dans la pratique.
|
||||||
|
|
||||||
|
<details markdown="1">
|
||||||
|
|
||||||
|
<summary>Exemple</summary>
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ clickhouse-client
|
||||||
|
ClickHouse client version 0.0.52053.
|
||||||
|
Connecting to localhost:9000.
|
||||||
|
Connected to ClickHouse server version 0.0.52053.
|
||||||
|
```
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT CounterID, count() FROM hits GROUP BY CounterID ORDER BY count() DESC LIMIT 20
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
┌─CounterID─┬──count()─┐
|
||||||
|
│ 114208 │ 56057344 │
|
||||||
|
│ 115080 │ 51619590 │
|
||||||
|
│ 3228 │ 44658301 │
|
||||||
|
│ 38230 │ 42045932 │
|
||||||
|
│ 145263 │ 42042158 │
|
||||||
|
│ 91244 │ 38297270 │
|
||||||
|
│ 154139 │ 26647572 │
|
||||||
|
│ 150748 │ 24112755 │
|
||||||
|
│ 242232 │ 21302571 │
|
||||||
|
│ 338158 │ 13507087 │
|
||||||
|
│ 62180 │ 12229491 │
|
||||||
|
│ 82264 │ 12187441 │
|
||||||
|
│ 232261 │ 12148031 │
|
||||||
|
│ 146272 │ 11438516 │
|
||||||
|
│ 168777 │ 11403636 │
|
||||||
|
│ 4120072 │ 11227824 │
|
||||||
|
│ 10938808 │ 10519739 │
|
||||||
|
│ 74088 │ 9047015 │
|
||||||
|
│ 115079 │ 8837972 │
|
||||||
|
│ 337234 │ 8205961 │
|
||||||
|
└───────────┴──────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### CPU {#cpu}
|
||||||
|
|
||||||
|
Étant donné que l'exécution d'une requête nécessite le traitement d'un grand nombre de lignes, il est utile de répartir toutes les opérations pour des vecteurs entiers au lieu de lignes séparées, ou d'implémenter le moteur de requête de sorte qu'il n'y ait presque aucun coût d'expédition. Si vous ne le faites pas, avec un sous-système de disque à moitié décent, l'interpréteur de requête bloque inévitablement le processeur. Il est logique de stocker des données dans des colonnes et de les traiter, si possible, par des colonnes.
|
||||||
|
|
||||||
|
Il y a deux façons de le faire:
|
||||||
|
|
||||||
|
1. Un moteur vectoriel. Toutes les opérations sont écrites pour les vecteurs, au lieu de valeurs séparées. Cela signifie que vous n'avez pas besoin d'appeler les opérations très souvent, et les coûts d'expédition sont négligeables. Le code d'opération contient un cycle interne optimisé.
|
||||||
|
|
||||||
|
2. La génération de Code. Le code généré pour la requête contient tous les appels indirects.
|
||||||
|
|
||||||
|
Ce n'est pas fait dans “normal” bases de données, car cela n'a pas de sens lors de l'exécution de requêtes simples. Cependant, il y a des exceptions. Par exemple, MemSQL utilise la génération de code pour réduire la latence lors du traitement des requêtes SQL. (À titre de comparaison, les SGBD analytiques nécessitent une optimisation du débit, et non une latence.)
|
||||||
|
|
||||||
|
Notez que pour l'efficacité du processeur, le langage de requête doit être déclaratif (SQL ou MDX), ou au moins un vecteur (J, K). La requête ne doit contenir que des boucles implicites, permettant une optimisation.
|
||||||
|
|
||||||
|
{## [Article Original](https://clickhouse.tech/docs/en/) ##}
|
146
docs/fr/interfaces/cli.md
Normal file
146
docs/fr/interfaces/cli.md
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Client de ligne de commande {#command-line-client}
|
||||||
|
|
||||||
|
ClickHouse fournit un client de ligne de commande natif: `clickhouse-client`. Le client prend en charge les options de ligne de commande et les fichiers de configuration. Pour plus d'informations, voir [Configuration](#interfaces_cli_configuration).
|
||||||
|
|
||||||
|
[Installer](../getting_started/index.md) à partir de la `clickhouse-client` package et l'exécuter avec la commande `clickhouse-client`.
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ clickhouse-client
|
||||||
|
ClickHouse client version 19.17.1.1579 (official build).
|
||||||
|
Connecting to localhost:9000 as user default.
|
||||||
|
Connected to ClickHouse server version 19.17.1 revision 54428.
|
||||||
|
|
||||||
|
:)
|
||||||
|
```
|
||||||
|
|
||||||
|
Différentes versions client et serveur sont compatibles les unes avec les autres, mais certaines fonctionnalités peuvent ne pas être disponibles dans les anciens clients. Nous vous recommandons d'utiliser la même version du client que l'application serveur. Lorsque vous essayez d'utiliser un client de l'ancienne version, puis le serveur, `clickhouse-client` affiche le message:
|
||||||
|
|
||||||
|
ClickHouse client version is older than ClickHouse server. It may lack support for new features.
|
||||||
|
|
||||||
|
## Utilisation {#cli_usage}
|
||||||
|
|
||||||
|
Le client peut être utilisé en mode interactif et non interactif (batch). Pour utiliser le mode batch, spécifiez ‘query’ d'un paramètre ou d'envoyer des données à ‘stdin’ (il vérifie que ‘stdin’ n'est pas un terminal), ou les deux. Similaire à L'interface HTTP, lors de l'utilisation ‘query’ paramètre et envoi de données à ‘stdin’ la demande est une concaténation de la ‘query’ paramètre, un saut de ligne, et les données de ‘stdin’. Ceci est pratique pour les grandes requêtes D'insertion.
|
||||||
|
|
||||||
|
Exemple d'utilisation du client pour insérer des données:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ echo -ne "1, 'some text', '2016-08-14 00:00:00'\n2, 'some more text', '2016-08-14 00:00:01'" | clickhouse-client --database=test --query="INSERT INTO test FORMAT CSV";
|
||||||
|
|
||||||
|
$ cat <<_EOF | clickhouse-client --database=test --query="INSERT INTO test FORMAT CSV";
|
||||||
|
3, 'some text', '2016-08-14 00:00:00'
|
||||||
|
4, 'some more text', '2016-08-14 00:00:01'
|
||||||
|
_EOF
|
||||||
|
|
||||||
|
$ cat file.csv | clickhouse-client --database=test --query="INSERT INTO test FORMAT CSV";
|
||||||
|
```
|
||||||
|
|
||||||
|
En mode batch, le format de données par défaut est TabSeparated. Vous pouvez définir le format dans la clause FORMAT de la requête.
|
||||||
|
|
||||||
|
Par défaut, vous ne pouvez traiter une seule requête en mode batch. De faire plusieurs requêtes à partir d'un “script,” l'utilisation de la `--multiquery` paramètre. Cela fonctionne pour toutes les requêtes sauf INSERT. Les résultats de la requête sont produits consécutivement sans séparateurs supplémentaires. De même, pour traiter un grand nombre de requêtes, vous pouvez exécuter ‘clickhouse-client’ pour chaque requête. Notez que cela peut prendre des dizaines de millisecondes pour lancer le ‘clickhouse-client’ programme.
|
||||||
|
|
||||||
|
En mode interactif, vous obtenez une ligne de commande où vous pouvez entrer des requêtes.
|
||||||
|
|
||||||
|
Si ‘multiline’ n'est pas spécifié (par défaut): Pour exécuter la requête, appuyez sur Entrée. Le point-virgule n'est pas nécessaire à la fin de la requête. Pour entrer une requête multiligne, entrez une barre oblique inverse `\` avant le saut de ligne. Après avoir appuyé sur Entrée, il vous sera demandé d'entrer la ligne suivante de la requête.
|
||||||
|
|
||||||
|
Si multiline est spécifié: pour exécuter une requête, terminez-la par un point-virgule et appuyez sur Entrée. Si le point-virgule a été omis à la fin de l'entrée ligne, vous serez invité à entrer la ligne suivante de la requête.
|
||||||
|
|
||||||
|
Une seule requête est exécutée, donc tout après le point-virgule est ignoré.
|
||||||
|
|
||||||
|
Vous pouvez spécifier `\G` au lieu de le ou après le point-virgule. Cela indique le format Vertical. Dans ce format, chaque valeur est imprimée sur une ligne distincte, ce qui est pratique pour les grandes tables. Cette fonctionnalité inhabituelle a été ajoutée pour la compatibilité avec la CLI MySQL.
|
||||||
|
|
||||||
|
La ligne de commande est basé sur ‘replxx’ (similaire à ‘readline’). En d'autres termes, il utilise les raccourcis clavier familiers et conserve un historique. L'histoire est écrite à `~/.clickhouse-client-history`.
|
||||||
|
|
||||||
|
Par défaut, le format utilisé est Jolicompact. Vous pouvez modifier le format dans la clause FORMAT de la requête, ou en spécifiant `\G` à la fin de la requête, en utilisant le `--format` ou `--vertical` dans la ligne de commande, ou en utilisant le fichier de configuration client.
|
||||||
|
|
||||||
|
Pour quitter le client, appuyez sur Ctrl + D (ou Ctrl + C), ou entrez l'une des options suivantes au lieu d'une requête: “exit”, “quit”, “logout”, “exit;”, “quit;”, “logout;”, “q”, “Q”, “:q”
|
||||||
|
|
||||||
|
Lors du traitement d'une requête, le client affiche:
|
||||||
|
|
||||||
|
1. Progrès, qui est mis à jour pas plus de 10 fois par seconde (par défaut). Pour les requêtes rapides, la progression peut ne pas avoir le temps d'être affichée.
|
||||||
|
2. La requête formatée après l'analyse, pour le débogage.
|
||||||
|
3. Le résultat dans le format spécifié.
|
||||||
|
4. Le nombre de lignes dans le résultat, le temps passé et la vitesse moyenne de traitement des requêtes.
|
||||||
|
|
||||||
|
Vous pouvez annuler une requête longue en appuyant sur Ctrl + C. Cependant, vous devrez toujours attendre un peu pour que le serveur abandonne la requête. Il n'est pas possible d'annuler une requête à certaines étapes. Si vous n'attendez pas et appuyez une seconde fois sur Ctrl+C, le client quittera.
|
||||||
|
|
||||||
|
Le client de ligne de commande permet de passer des données externes (tables temporaires externes) pour l'interrogation. Pour plus d'informations, consultez la section “External data for query processing”.
|
||||||
|
|
||||||
|
### Requêtes avec paramètres {#cli-queries-with-parameters}
|
||||||
|
|
||||||
|
Vous pouvez créer une requête avec des paramètres et leur transmettre des valeurs à partir de l'application cliente. Cela permet d'éviter le formatage de la requête avec des valeurs dynamiques spécifiques côté client. Exemple:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ clickhouse-client --param_parName="[1, 2]" -q "SELECT * FROM table WHERE a = {parName:Array(UInt16)}"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### La Syntaxe De La Requête {#cli-queries-with-parameters-syntax}
|
||||||
|
|
||||||
|
Formatez une requête comme d'habitude, puis placez les valeurs que vous souhaitez transmettre des paramètres de l'application à la requête entre accolades au format suivant:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
{<name>:<data type>}
|
||||||
|
```
|
||||||
|
|
||||||
|
- `name` — Placeholder identifier. In the console client it should be used in app parameters as `--param_<name> = value`.
|
||||||
|
- `data type` — [Type de données](../data_types/index.md) de l'application valeur de paramètre. Par exemple, une structure de données comme `(integer, ('string', integer))` peut avoir la `Tuple(UInt8, Tuple(String, UInt8))` type de données (vous pouvez également utiliser un autre [entier](../data_types/int_uint.md) type).
|
||||||
|
|
||||||
|
#### Exemple {#example}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ clickhouse-client --param_tuple_in_tuple="(10, ('dt', 10))" -q "SELECT * FROM table WHERE val = {tuple_in_tuple:Tuple(UInt8, Tuple(String, UInt8))}"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration {#interfaces_cli_configuration}
|
||||||
|
|
||||||
|
Vous pouvez passer des paramètres à `clickhouse-client` (tous les paramètres ont une valeur par défaut) en utilisant:
|
||||||
|
|
||||||
|
- À partir de la ligne de commande
|
||||||
|
|
||||||
|
Les options de ligne de commande remplacent les valeurs et les paramètres par défaut dans les fichiers de configuration.
|
||||||
|
|
||||||
|
- Les fichiers de Configuration.
|
||||||
|
|
||||||
|
Les paramètres des fichiers de configuration remplacent les valeurs par défaut.
|
||||||
|
|
||||||
|
### Options De Ligne De Commande {#command-line-options}
|
||||||
|
|
||||||
|
- `--host, -h` -– The server name, ‘localhost’ par défaut. Vous pouvez utiliser le nom ou L'adresse IPv4 ou IPv6.
|
||||||
|
- `--port` – The port to connect to. Default value: 9000. Note that the HTTP interface and the native interface use different ports.
|
||||||
|
- `--user, -u` – The username. Default value: default.
|
||||||
|
- `--password` – The password. Default value: empty string.
|
||||||
|
- `--query, -q` – The query to process when using non-interactive mode.
|
||||||
|
- `--database, -d` – Select the current default database. Default value: the current database from the server settings (‘default’ par défaut).
|
||||||
|
- `--multiline, -m` – If specified, allow multiline queries (do not send the query on Enter).
|
||||||
|
- `--multiquery, -n` – If specified, allow processing multiple queries separated by semicolons.
|
||||||
|
- `--format, -f` – Use the specified default format to output the result.
|
||||||
|
- `--vertical, -E` – If specified, use the Vertical format by default to output the result. This is the same as ‘–format=Vertical’. Dans ce format, chaque valeur est imprimée sur une ligne séparée, ce qui est utile lors de l'affichage de tables larges.
|
||||||
|
- `--time, -t` – If specified, print the query execution time to ‘stderr’ en mode non interactif.
|
||||||
|
- `--stacktrace` – If specified, also print the stack trace if an exception occurs.
|
||||||
|
- `--config-file` – The name of the configuration file.
|
||||||
|
- `--secure` – If specified, will connect to server over secure connection.
|
||||||
|
- `--param_<name>` — Value for a [requête avec paramètres](#cli-queries-with-parameters).
|
||||||
|
|
||||||
|
### Fichiers De Configuration {#configuration_files}
|
||||||
|
|
||||||
|
`clickhouse-client` utilise le premier fichier existant de suite:
|
||||||
|
|
||||||
|
- Défini dans le `--config-file` paramètre.
|
||||||
|
- `./clickhouse-client.xml`
|
||||||
|
- `~/.clickhouse-client/config.xml`
|
||||||
|
- `/etc/clickhouse-client/config.xml`
|
||||||
|
|
||||||
|
Exemple de fichier de configuration:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<config>
|
||||||
|
<user>username</user>
|
||||||
|
<password>password</password>
|
||||||
|
<secure>False</secure>
|
||||||
|
</config>
|
||||||
|
```
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/interfaces/cli/) <!--hide-->
|
9
docs/fr/interfaces/cpp.md
Normal file
9
docs/fr/interfaces/cpp.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Bibliothèque Client C++ {#c-client-library}
|
||||||
|
|
||||||
|
Voir le fichier README à [clickhouse-cpp](https://github.com/ClickHouse/clickhouse-cpp) référentiel.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/interfaces/cpp/) <!--hide-->
|
1209
docs/fr/interfaces/formats.md
Normal file
1209
docs/fr/interfaces/formats.md
Normal file
File diff suppressed because it is too large
Load Diff
285
docs/fr/interfaces/http.md
Normal file
285
docs/fr/interfaces/http.md
Normal file
@ -0,0 +1,285 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Interface HTTP {#http-interface}
|
||||||
|
|
||||||
|
L'interface HTTP vous permet D'utiliser ClickHouse sur n'importe quelle plate-forme à partir de n'importe quel langage de programmation. Nous l'utilisons pour travailler à partir de Java et Perl, ainsi que des scripts shell. Dans d'autres départements, L'interface HTTP est utilisée à partir de Perl, Python et Go. L'interface HTTP est plus limitée que l'interface native, mais elle a une meilleure compatibilité.
|
||||||
|
|
||||||
|
Par défaut, clickhouse-server écoute HTTP sur le port 8123 (cela peut être modifié dans la configuration).
|
||||||
|
|
||||||
|
Si vous faites une requête GET / sans Paramètres, elle renvoie le code de réponse 200 et la chaîne définie dans [http\_server\_default\_response](../operations/server_settings/settings.md#server_settings-http_server_default_response) valeur par défaut “Ok.” (avec un saut de ligne à la fin)
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ curl 'http://localhost:8123/'
|
||||||
|
Ok.
|
||||||
|
```
|
||||||
|
|
||||||
|
Utilisez la requête GET /ping dans les scripts de vérification de la santé. Ce gestionnaire revient toujours “Ok.” (avec un saut de ligne à la fin). Disponible à partir de la version 18.12.13.
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ curl 'http://localhost:8123/ping'
|
||||||
|
Ok.
|
||||||
|
```
|
||||||
|
|
||||||
|
Envoyer la demande sous forme D'URL ‘query’ paramètre, ou comme un POSTE. Ou envoyer le début de la requête dans l' ‘query’ paramètre, et le reste dans le POST (nous expliquerons plus tard pourquoi cela est nécessaire). La taille de L'URL est limitée à 16 Ko, alors gardez cela à l'esprit lors de l'envoi de requêtes volumineuses.
|
||||||
|
|
||||||
|
En cas de succès, vous recevez le code de réponse 200 et le résultat dans le corps de réponse.
|
||||||
|
Si une erreur se produit, vous recevez le code de réponse 500 et un texte de description de l'erreur dans le corps de la réponse.
|
||||||
|
|
||||||
|
Lorsque vous utilisez la méthode GET, ‘readonly’ est définie. En d'autres termes, pour les requêtes qui modifient les données, vous ne pouvez utiliser que la méthode POST. Vous pouvez envoyer la requête elle-même dans le corps du message ou dans le paramètre URL.
|
||||||
|
|
||||||
|
Exemple:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ curl 'http://localhost:8123/?query=SELECT%201'
|
||||||
|
1
|
||||||
|
|
||||||
|
$ wget -O- -q 'http://localhost:8123/?query=SELECT 1'
|
||||||
|
1
|
||||||
|
|
||||||
|
$ echo -ne 'GET /?query=SELECT%201 HTTP/1.0\r\n\r\n' | nc localhost 8123
|
||||||
|
HTTP/1.0 200 OK
|
||||||
|
Date: Wed, 27 Nov 2019 10:30:18 GMT
|
||||||
|
Connection: Close
|
||||||
|
Content-Type: text/tab-separated-values; charset=UTF-8
|
||||||
|
X-ClickHouse-Server-Display-Name: clickhouse.ru-central1.internal
|
||||||
|
X-ClickHouse-Query-Id: 5abe861c-239c-467f-b955-8a201abb8b7f
|
||||||
|
X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0"}
|
||||||
|
|
||||||
|
1
|
||||||
|
```
|
||||||
|
|
||||||
|
Comme vous pouvez le voir, curl est un peu gênant en ce sens que les espaces doivent être échappés URL.
|
||||||
|
Bien que wget échappe à tout lui-même, nous ne recommandons pas de l'utiliser car il ne fonctionne pas bien sur HTTP 1.1 lors de l'utilisation de keep-alive et Transfer-Encoding: chunked.
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ echo 'SELECT 1' | curl 'http://localhost:8123/' --data-binary @-
|
||||||
|
1
|
||||||
|
|
||||||
|
$ echo 'SELECT 1' | curl 'http://localhost:8123/?query=' --data-binary @-
|
||||||
|
1
|
||||||
|
|
||||||
|
$ echo '1' | curl 'http://localhost:8123/?query=SELECT' --data-binary @-
|
||||||
|
1
|
||||||
|
```
|
||||||
|
|
||||||
|
Si une partie de la requête est envoyée dans le paramètre et une partie dans la publication, un saut de ligne est inséré entre ces deux parties de données.
|
||||||
|
Exemple (cela ne fonctionnera pas):
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ echo 'ECT 1' | curl 'http://localhost:8123/?query=SEL' --data-binary @-
|
||||||
|
Code: 59, e.displayText() = DB::Exception: Syntax error: failed at position 0: SEL
|
||||||
|
ECT 1
|
||||||
|
, expected One of: SHOW TABLES, SHOW DATABASES, SELECT, INSERT, CREATE, ATTACH, RENAME, DROP, DETACH, USE, SET, OPTIMIZE., e.what() = DB::Exception
|
||||||
|
```
|
||||||
|
|
||||||
|
Par défaut, les données sont renvoyées au format TabSeparated (pour plus d'informations, voir “Formats” section).
|
||||||
|
Vous utilisez la clause FORMAT de la requête pour demander tout autre format.
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ echo 'SELECT 1 FORMAT Pretty' | curl 'http://localhost:8123/?' --data-binary @-
|
||||||
|
┏━━━┓
|
||||||
|
┃ 1 ┃
|
||||||
|
┡━━━┩
|
||||||
|
│ 1 │
|
||||||
|
└───┘
|
||||||
|
```
|
||||||
|
|
||||||
|
La méthode POST de transmission des données est nécessaire pour les requêtes INSERT. Dans ce cas, vous pouvez écrire le début de la requête dans le paramètre URL et utiliser POST pour transmettre les données à insérer. Les données à insérer pourraient être, par exemple, un vidage séparé par tabulation de MySQL. De cette façon, la requête INSERT remplace LOAD DATA LOCAL INFILE de MySQL.
|
||||||
|
|
||||||
|
Exemples: création d'une table:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ echo 'CREATE TABLE t (a UInt8) ENGINE = Memory' | curl 'http://localhost:8123/' --data-binary @-
|
||||||
|
```
|
||||||
|
|
||||||
|
Utilisation de la requête D'insertion familière pour l'insertion de données:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ echo 'INSERT INTO t VALUES (1),(2),(3)' | curl 'http://localhost:8123/' --data-binary @-
|
||||||
|
```
|
||||||
|
|
||||||
|
Les données peuvent être envoyées séparément de la requête:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ echo '(4),(5),(6)' | curl 'http://localhost:8123/?query=INSERT%20INTO%20t%20VALUES' --data-binary @-
|
||||||
|
```
|
||||||
|
|
||||||
|
Vous pouvez spécifier n'importe quel format de données. Le ‘Values’ le format est le même que ce qui est utilisé lors de L'écriture INSERT dans les valeurs t:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ echo '(7),(8),(9)' | curl 'http://localhost:8123/?query=INSERT%20INTO%20t%20FORMAT%20Values' --data-binary @-
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour insérer des données à partir d'un vidage séparé par des tabulations, spécifiez le format correspondant:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ echo -ne '10\n11\n12\n' | curl 'http://localhost:8123/?query=INSERT%20INTO%20t%20FORMAT%20TabSeparated' --data-binary @-
|
||||||
|
```
|
||||||
|
|
||||||
|
La lecture de la table des matières. Les données sont sorties dans un ordre aléatoire en raison d'un traitement de requête parallèle:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ curl 'http://localhost:8123/?query=SELECT%20a%20FROM%20t'
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
10
|
||||||
|
11
|
||||||
|
12
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
```
|
||||||
|
|
||||||
|
Suppression de la table.
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ echo 'DROP TABLE t' | curl 'http://localhost:8123/' --data-binary @-
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour les requêtes réussies qui ne renvoient pas de table de données, un corps de réponse vide est renvoyé.
|
||||||
|
|
||||||
|
Vous pouvez utiliser le format de compression ClickHouse interne lors de la transmission de données. Les données compressées ont un format non standard, et vous devrez utiliser le spécial `clickhouse-compressor` programme de travail (il s'est installé avec le `clickhouse-client` paquet). Pour augmenter l'efficacité de l'insertion de données, vous pouvez désactiver la vérification de la somme de contrôle côté serveur en utilisant [http\_native\_compression\_disable\_checksumming\_on\_decompress](../operations/settings/settings.md#settings-http_native_compression_disable_checksumming_on_decompress) paramètre.
|
||||||
|
|
||||||
|
Si vous avez spécifié `compress=1` dans l'URL, le serveur compresse les données qu'il vous envoie.
|
||||||
|
Si vous avez spécifié `decompress=1` dans L'URL, le serveur décompresse les mêmes données que vous transmettez `POST` méthode.
|
||||||
|
|
||||||
|
Vous pouvez également choisir d'utiliser [La compression HTTP](https://en.wikipedia.org/wiki/HTTP_compression). Pour envoyer un compressé `POST` demande, ajouter l'en-tête de requête `Content-Encoding: compression_method`. Pour que ClickHouse compresse la réponse, vous devez ajouter `Accept-Encoding: compression_method`. Supports ClickHouse `gzip`, `br`, et `deflate` [méthodes de compression](https://en.wikipedia.org/wiki/HTTP_compression#Content-Encoding_tokens). Pour activer la compression HTTP, vous devez utiliser le ClickHouse [enable\_http\_compression](../operations/settings/settings.md#settings-enable_http_compression) paramètre. Vous pouvez configurer le niveau de compression des données dans le [http\_zlib\_compression\_level](#settings-http_zlib_compression_level) pour toutes les méthodes de compression.
|
||||||
|
|
||||||
|
Vous pouvez l'utiliser pour réduire le trafic réseau lors de la transmission d'une grande quantité de données, ou pour créer des vidages qui sont immédiatement compressés.
|
||||||
|
|
||||||
|
Exemples d'envoi de données avec compression:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
#Sending data to the server:
|
||||||
|
$ curl -vsS "http://localhost:8123/?enable_http_compression=1" -d 'SELECT number FROM system.numbers LIMIT 10' -H 'Accept-Encoding: gzip'
|
||||||
|
|
||||||
|
#Sending data to the client:
|
||||||
|
$ echo "SELECT 1" | gzip -c | curl -sS --data-binary @- -H 'Content-Encoding: gzip' 'http://localhost:8123/'
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! note "Note"
|
||||||
|
Certains clients HTTP peuvent décompresser les données du serveur par défaut (avec `gzip` et `deflate`) et vous pouvez obtenir des données décompressées même si vous utilisez les paramètres de compression correctement.
|
||||||
|
|
||||||
|
Vous pouvez utiliser l' ‘database’ Paramètre URL pour spécifier la base de données par défaut.
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ echo 'SELECT number FROM numbers LIMIT 10' | curl 'http://localhost:8123/?database=system' --data-binary @-
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
```
|
||||||
|
|
||||||
|
Par défaut, la base de données enregistrée dans les paramètres du serveur est utilisée comme base de données par défaut. Par défaut, c'est la base de données appelée ‘default’. Alternativement, vous pouvez toujours spécifier la base de données en utilisant un point avant le nom de la table.
|
||||||
|
|
||||||
|
Le nom d'utilisateur et le mot de passe peuvent être indiqués de l'une des trois façons suivantes:
|
||||||
|
|
||||||
|
1. Utilisation de L'authentification de base HTTP. Exemple:
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ echo 'SELECT 1' | curl 'http://user:password@localhost:8123/' -d @-
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Dans le ‘user’ et ‘password’ Les paramètres d'URL. Exemple:
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ echo 'SELECT 1' | curl 'http://localhost:8123/?user=user&password=password' -d @-
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Utiliser ‘X-ClickHouse-User’ et ‘X-ClickHouse-Key’ tête. Exemple:
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ echo 'SELECT 1' | curl -H 'X-ClickHouse-User: user' -H 'X-ClickHouse-Key: password' 'http://localhost:8123/' -d @-
|
||||||
|
```
|
||||||
|
|
||||||
|
Si le nom d'utilisateur n'est spécifié, le `default` le nom est utilisé. Si le mot de passe n'est spécifié, le mot de passe vide est utilisé.
|
||||||
|
Vous pouvez également utiliser les paramètres D'URL pour spécifier des paramètres pour le traitement d'une seule requête ou de profils entiers de paramètres. Exemple: http: / / localhost: 8123/?profil = web & max\_rows\_to\_read=1000000000 & query=sélectionner + 1
|
||||||
|
|
||||||
|
Pour plus d'informations, voir le [Paramètre](../operations/settings/index.md) section.
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ echo 'SELECT number FROM system.numbers LIMIT 10' | curl 'http://localhost:8123/?' --data-binary @-
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour plus d'informations sur les autres paramètres, consultez la section “SET”.
|
||||||
|
|
||||||
|
De même, vous pouvez utiliser des sessions ClickHouse dans le protocole HTTP. Pour ce faire, vous devez ajouter l' `session_id` GET paramètre à la demande. Vous pouvez utiliser n'importe quelle chaîne comme ID de session. Par défaut, la session est terminée après 60 secondes d'inactivité. Pour modifier ce délai d'attente, de modifier la `default_session_timeout` dans la configuration du serveur, ou ajoutez le `session_timeout` GET paramètre à la demande. Pour vérifier l'état de la session, utilisez `session_check=1` paramètre. Une seule requête à la fois peut être exécutée dans une seule session.
|
||||||
|
|
||||||
|
Vous pouvez recevoir des informations sur le déroulement d'une requête en `X-ClickHouse-Progress` en-têtes de réponse. Pour ce faire, activez [send\_progress\_in\_http\_headers](../operations/settings/settings.md#settings-send_progress_in_http_headers). Exemple de l'en-tête de séquence:
|
||||||
|
|
||||||
|
``` text
|
||||||
|
X-ClickHouse-Progress: {"read_rows":"2752512","read_bytes":"240570816","total_rows_to_read":"8880128"}
|
||||||
|
X-ClickHouse-Progress: {"read_rows":"5439488","read_bytes":"482285394","total_rows_to_read":"8880128"}
|
||||||
|
X-ClickHouse-Progress: {"read_rows":"8783786","read_bytes":"819092887","total_rows_to_read":"8880128"}
|
||||||
|
```
|
||||||
|
|
||||||
|
Possibles champs d'en-tête:
|
||||||
|
|
||||||
|
- `read_rows` — Number of rows read.
|
||||||
|
- `read_bytes` — Volume of data read in bytes.
|
||||||
|
- `total_rows_to_read` — Total number of rows to be read.
|
||||||
|
- `written_rows` — Number of rows written.
|
||||||
|
- `written_bytes` — Volume of data written in bytes.
|
||||||
|
|
||||||
|
Les requêtes en cours d'exécution ne s'arrêtent pas automatiquement si la connexion HTTP est perdue. L'analyse et le formatage des données sont effectués côté serveur et l'utilisation du réseau peut s'avérer inefficace.
|
||||||
|
Facultatif ‘query\_id’ le paramètre peut être passé comme ID de requête (n'importe quelle chaîne). Pour plus d'informations, consultez la section “Settings, replace\_running\_query”.
|
||||||
|
|
||||||
|
Facultatif ‘quota\_key’ le paramètre peut être passé comme clé de quota (n'importe quelle chaîne). Pour plus d'informations, consultez la section “Quotas”.
|
||||||
|
|
||||||
|
L'interface HTTP permet de transmettre des données externes (tables temporaires externes) pour l'interrogation. Pour plus d'informations, consultez la section “External data for query processing”.
|
||||||
|
|
||||||
|
## Tampon De Réponse {#response-buffering}
|
||||||
|
|
||||||
|
Vous pouvez activer la mise en mémoire tampon des réponses côté serveur. Le `buffer_size` et `wait_end_of_query` Les paramètres D'URL sont fournis à cette fin.
|
||||||
|
|
||||||
|
`buffer_size` détermine le nombre d'octets dans le résultat de tampon dans la mémoire du serveur. Si un corps de résultat est supérieur à ce seuil, le tampon est écrit sur le canal HTTP et les données restantes sont envoyées directement au canal HTTP.
|
||||||
|
|
||||||
|
Pour vous assurer que la réponse entière est mise en mémoire tampon, définissez `wait_end_of_query=1`. Dans ce cas, les données ne sont pas stockées dans la mémoire tampon temporaire du serveur de fichiers.
|
||||||
|
|
||||||
|
Exemple:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ curl -sS 'http://localhost:8123/?max_result_bytes=4000000&buffer_size=3000000&wait_end_of_query=1' -d 'SELECT toUInt8(number) FROM system.numbers LIMIT 9000000 FORMAT RowBinary'
|
||||||
|
```
|
||||||
|
|
||||||
|
Utilisez la mise en mémoire tampon pour éviter les situations où une erreur de traitement de requête s'est produite après l'envoi du code de réponse et des en-têtes HTTP au client. Dans cette situation, un message d'erreur est écrit à la fin du corps de la réponse, et du côté client, l'erreur ne peut être détectée qu'à l'étape d'analyse.
|
||||||
|
|
||||||
|
### Requêtes avec paramètres {#cli-queries-with-parameters}
|
||||||
|
|
||||||
|
Vous pouvez créer une requête avec paramètres et transmettre des valeurs des paramètres de la requête HTTP. Pour plus d'informations, voir [Requêtes avec des paramètres pour CLI](cli.md#cli-queries-with-parameters).
|
||||||
|
|
||||||
|
### Exemple {#example}
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ curl -sS "<address>?param_id=2¶m_phrase=test" -d "SELECT * FROM table WHERE int_column = {id:UInt8} and string_column = {phrase:String}"
|
||||||
|
```
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/interfaces/http_interface/) <!--hide-->
|
25
docs/fr/interfaces/index.md
Normal file
25
docs/fr/interfaces/index.md
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Interface {#interfaces}
|
||||||
|
|
||||||
|
ClickHouse fournit deux interfaces réseau (les deux peuvent être encapsulées en option dans TLS pour plus de sécurité):
|
||||||
|
|
||||||
|
- [HTTP](http.md) qui est documenté et facile à utiliser directement.
|
||||||
|
- [Natif de TCP](tcp.md) qui a moins de frais généraux.
|
||||||
|
|
||||||
|
Dans la plupart des cas, il est recommandé d'utiliser un outil ou une bibliothèque approprié au lieu d'interagir directement avec ceux-ci. Officiellement pris en charge par Yandex sont les suivants:
|
||||||
|
|
||||||
|
- [Client de ligne de commande](cli.md)
|
||||||
|
- [JDBC](jdbc.md)
|
||||||
|
- [Pilote ODBC](odbc.md)
|
||||||
|
- [Bibliothèque client c++ ](cpp.md)
|
||||||
|
|
||||||
|
Il existe également un large éventail de bibliothèques tierces pour travailler avec ClickHouse:
|
||||||
|
|
||||||
|
- [Bibliothèques clientes](third-party/client_libraries.md)
|
||||||
|
- [Intégration](third-party/integrations.md)
|
||||||
|
- [Les interfaces visuelles](third-party/gui.md)
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/interfaces/) <!--hide-->
|
12
docs/fr/interfaces/jdbc.md
Normal file
12
docs/fr/interfaces/jdbc.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# JDBC {#jdbc-driver}
|
||||||
|
|
||||||
|
- **[Pilote officiel](https://github.com/ClickHouse/clickhouse-jdbc)**
|
||||||
|
- Les pilotes tiers:
|
||||||
|
- [ClickHouse-natif-JDBC](https://github.com/housepower/ClickHouse-Native-JDBC)
|
||||||
|
- [clickhouse4j](https://github.com/blynkkk/clickhouse4j)
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/interfaces/jdbc/) <!--hide-->
|
46
docs/fr/interfaces/mysql.md
Normal file
46
docs/fr/interfaces/mysql.md
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Interface MySQL {#mysql-interface}
|
||||||
|
|
||||||
|
ClickHouse prend en charge le protocole de fil MySQL. Il peut être activé par [mysql\_port](../operations/server_settings/settings.md#server_settings-mysql_port) paramètre dans le fichier de configuration:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<mysql_port>9004</mysql_port>
|
||||||
|
```
|
||||||
|
|
||||||
|
Exemple de connexion à l'aide d'outil de ligne de commande `mysql`:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ mysql --protocol tcp -u default -P 9004
|
||||||
|
```
|
||||||
|
|
||||||
|
Sortie si une connexion a réussi:
|
||||||
|
|
||||||
|
``` text
|
||||||
|
Welcome to the MySQL monitor. Commands end with ; or \g.
|
||||||
|
Your MySQL connection id is 4
|
||||||
|
Server version: 20.2.1.1-ClickHouse
|
||||||
|
|
||||||
|
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
|
||||||
|
Oracle is a registered trademark of Oracle Corporation and/or its
|
||||||
|
affiliates. Other names may be trademarks of their respective
|
||||||
|
owners.
|
||||||
|
|
||||||
|
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
|
||||||
|
|
||||||
|
mysql>
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour la compatibilité avec tous les clients MySQL, il est recommandé de spécifier le mot de passe utilisateur avec [double SHA1](../operations/settings/settings_users.md#password_double_sha1_hex) dans le fichier de configuration.
|
||||||
|
Si le mot de passe de l'utilisateur est spécifié [SHA256](../operations/settings/settings_users.md#password_sha256_hex), certains clients ne pourront pas s'authentifier (mysqljs et anciennes versions de l'outil de ligne de commande mysql).
|
||||||
|
|
||||||
|
Restriction:
|
||||||
|
|
||||||
|
- les requêtes préparées ne sont pas prises en charge
|
||||||
|
|
||||||
|
- certains types de données sont envoyés sous forme de chaînes
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/interfaces/mysql/) <!--hide-->
|
9
docs/fr/interfaces/odbc.md
Normal file
9
docs/fr/interfaces/odbc.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Pilote ODBC {#odbc-driver}
|
||||||
|
|
||||||
|
- [Pilote officiel](https://github.com/ClickHouse/clickhouse-odbc).
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/interfaces/odbc/) <!--hide-->
|
9
docs/fr/interfaces/tcp.md
Normal file
9
docs/fr/interfaces/tcp.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Interface Native (TCP) {#native-interface-tcp}
|
||||||
|
|
||||||
|
Le protocole natif est utilisé dans le [client de ligne de commande](cli.md), pour la communication inter-serveur pendant le traitement de requête distribué, et également dans d'autres programmes C++. Malheureusement, le protocole clickhouse natif n'a pas encore de spécification formelle, mais il peut être rétro-conçu à partir du code source ClickHouse (démarrage [ici](https://github.com/ClickHouse/ClickHouse/tree/master/dbms/src/Client)) et/ou en interceptant et en analysant le trafic TCP.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/interfaces/tcp/) <!--hide-->
|
55
docs/fr/interfaces/third-party/client_libraries.md
vendored
Normal file
55
docs/fr/interfaces/third-party/client_libraries.md
vendored
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Bibliothèques clientes de développeurs tiers {#client-libraries-from-third-party-developers}
|
||||||
|
|
||||||
|
!!! warning "Avertissement"
|
||||||
|
Yandex ne **pas** maintenir les bibliothèques énumérées ci-dessous et n'ont pas fait de tests approfondis pour assurer leur qualité.
|
||||||
|
|
||||||
|
- Python
|
||||||
|
- [infi.clickhouse\_orm](https://github.com/Infinidat/infi.clickhouse_orm)
|
||||||
|
- [clickhouse-chauffeur](https://github.com/mymarilyn/clickhouse-driver)
|
||||||
|
- [clickhouse-client](https://github.com/yurial/clickhouse-client)
|
||||||
|
- [aiochclient](https://github.com/maximdanilchenko/aiochclient)
|
||||||
|
- PHP
|
||||||
|
- [smi2 / phpclickhouse](https://packagist.org/packages/smi2/phpClickHouse)
|
||||||
|
- [8bitov / clickhouse-PHP-client](https://packagist.org/packages/8bitov/clickhouse-php-client)
|
||||||
|
- [bozerkins / clickhouse-client](https://packagist.org/packages/bozerkins/clickhouse-client)
|
||||||
|
- [simpod / clickhouse-client](https://packagist.org/packages/simpod/clickhouse-client)
|
||||||
|
- [seva-code/php-cliquez-maison-client](https://packagist.org/packages/seva-code/php-click-house-client)
|
||||||
|
- [Client Seasclick c++ ](https://github.com/SeasX/SeasClick)
|
||||||
|
- Aller
|
||||||
|
- [clickhouse](https://github.com/kshvakov/clickhouse/)
|
||||||
|
- [aller-clickhouse](https://github.com/roistat/go-clickhouse)
|
||||||
|
- [mailrugo-clickhouse](https://github.com/mailru/go-clickhouse)
|
||||||
|
- [golang-clickhouse](https://github.com/leprosus/golang-clickhouse)
|
||||||
|
- NodeJs
|
||||||
|
- [clickhouse (NodeJs)](https://github.com/TimonKK/clickhouse)
|
||||||
|
- [node-clickhouse](https://github.com/apla/node-clickhouse)
|
||||||
|
- Perl
|
||||||
|
- [perl-DBD-ClickHouse](https://github.com/elcamlost/perl-DBD-ClickHouse)
|
||||||
|
- [HTTP-ClickHouse](https://metacpan.org/release/HTTP-ClickHouse)
|
||||||
|
- [AnyEvent-ClickHouse](https://metacpan.org/release/AnyEvent-ClickHouse)
|
||||||
|
- Rubis
|
||||||
|
- [ClickHouse (Ruby)](https://github.com/shlima/click_house)
|
||||||
|
- R
|
||||||
|
- [clickhouse-r](https://github.com/hannesmuehleisen/clickhouse-r)
|
||||||
|
- [RClickhouse](https://github.com/IMSMWU/RClickhouse)
|
||||||
|
- Java
|
||||||
|
- [clickhouse-client-java](https://github.com/VirtusAI/clickhouse-client-java)
|
||||||
|
- [clickhouse-client](https://github.com/Ecwid/clickhouse-client)
|
||||||
|
- Scala
|
||||||
|
- [clickhouse-Scala-client](https://github.com/crobox/clickhouse-scala-client)
|
||||||
|
- Kotlin
|
||||||
|
- [AORM](https://github.com/TanVD/AORM)
|
||||||
|
- C\#
|
||||||
|
- [ClickHouse.Ado](https://github.com/killwort/ClickHouse-Net)
|
||||||
|
- [ClickHouse.Client](https://github.com/DarkWanderer/ClickHouse.Client)
|
||||||
|
- [ClickHouse.Net](https://github.com/ilyabreev/ClickHouse.Net)
|
||||||
|
- Elixir
|
||||||
|
- [clickhousex](https://github.com/appodeal/clickhousex/)
|
||||||
|
- Nim
|
||||||
|
- [nim-clickhouse](https://github.com/leonardoce/nim-clickhouse)
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/interfaces/third-party/client_libraries/) <!--hide-->
|
149
docs/fr/interfaces/third-party/gui.md
vendored
Normal file
149
docs/fr/interfaces/third-party/gui.md
vendored
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Interfaces visuelles de développeurs tiers {#visual-interfaces-from-third-party-developers}
|
||||||
|
|
||||||
|
## Open-Source {#open-source}
|
||||||
|
|
||||||
|
### Tabix {#tabix}
|
||||||
|
|
||||||
|
Interface Web pour ClickHouse dans le [Tabix](https://github.com/tabixio/tabix) projet.
|
||||||
|
|
||||||
|
Caractéristique:
|
||||||
|
|
||||||
|
- Fonctionne avec ClickHouse directement à partir du navigateur, sans avoir besoin d'installer un logiciel supplémentaire.
|
||||||
|
- Éditeur de requête avec coloration syntaxique.
|
||||||
|
- L'Auto-complétion des commandes.
|
||||||
|
- Outils d'analyse graphique de l'exécution des requêtes.
|
||||||
|
- Options de jeu de couleurs.
|
||||||
|
|
||||||
|
[Documentation Tabix](https://tabix.io/doc/).
|
||||||
|
|
||||||
|
### HouseOps {#houseops}
|
||||||
|
|
||||||
|
[HouseOps](https://github.com/HouseOps/HouseOps) est une interface utilisateur / IDE pour OSX, Linux et Windows.
|
||||||
|
|
||||||
|
Caractéristique:
|
||||||
|
|
||||||
|
- Générateur de requêtes avec coloration syntaxique. Affichez la réponse dans une table ou une vue JSON.
|
||||||
|
- Exporter les résultats de la requête au format CSV ou JSON.
|
||||||
|
- Liste des processus avec des descriptions. Le mode d'écriture. Capacité à arrêter (`KILL`) processus.
|
||||||
|
- Base de données du graphique. Affiche toutes les tables et leurs colonnes avec des informations supplémentaires.
|
||||||
|
- Une vue rapide de la taille de la colonne.
|
||||||
|
- La configuration du serveur.
|
||||||
|
|
||||||
|
Les fonctionnalités suivantes sont prévues pour le développement:
|
||||||
|
|
||||||
|
- Gestion de base de données.
|
||||||
|
- La gestion des utilisateurs.
|
||||||
|
- En temps réel l'analyse des données.
|
||||||
|
- Surveillance de Cluster.
|
||||||
|
- La gestion de Cluster.
|
||||||
|
- Suivi des tables répliquées et Kafka.
|
||||||
|
|
||||||
|
### Phare {#lighthouse}
|
||||||
|
|
||||||
|
[Phare](https://github.com/VKCOM/lighthouse) est une interface web légère pour ClickHouse.
|
||||||
|
|
||||||
|
Caractéristique:
|
||||||
|
|
||||||
|
- Liste de Table avec filtrage et métadonnées.
|
||||||
|
- Aperçu de la Table avec filtrage et tri.
|
||||||
|
- Les requêtes en lecture seule exécution.
|
||||||
|
|
||||||
|
### Redash {#redash}
|
||||||
|
|
||||||
|
[Redash](https://github.com/getredash/redash) est une plate-forme pour la visualisation des données.
|
||||||
|
|
||||||
|
Prise en charge de plusieurs sources de données, y compris ClickHouse, Redash peut joindre les résultats des requêtes provenant de différentes sources de données dans un ensemble de données final.
|
||||||
|
|
||||||
|
Caractéristique:
|
||||||
|
|
||||||
|
- Puissant éditeur de requêtes.
|
||||||
|
- Explorateur de base de données.
|
||||||
|
- Des outils de visualisation qui vous permettent de représenter des données sous différentes formes.
|
||||||
|
|
||||||
|
### DBeaver {#dbeaver}
|
||||||
|
|
||||||
|
[DBeaver](https://dbeaver.io/) - client de base de données de bureau universel avec support ClickHouse.
|
||||||
|
|
||||||
|
Caractéristique:
|
||||||
|
|
||||||
|
- Développement de requêtes avec mise en évidence de la syntaxe et complétion automatique.
|
||||||
|
- Liste de Table avec filtres et recherche de métadonnées.
|
||||||
|
- Aperçu des données de la Table.
|
||||||
|
- Recherche en texte intégral.
|
||||||
|
|
||||||
|
### clickhouse-cli {#clickhouse-cli}
|
||||||
|
|
||||||
|
[clickhouse-cli](https://github.com/hatarist/clickhouse-cli) est un client de ligne de commande alternatif pour ClickHouse, écrit en Python 3.
|
||||||
|
|
||||||
|
Caractéristique:
|
||||||
|
|
||||||
|
- Complétion.
|
||||||
|
- Coloration syntaxique pour les requêtes et la sortie de données.
|
||||||
|
- Support Pager pour la sortie de données.
|
||||||
|
- Commandes personnalisées de type PostgreSQL.
|
||||||
|
|
||||||
|
### clickhouse-flamegraph {#clickhouse-flamegraph}
|
||||||
|
|
||||||
|
[clickhouse-flamegraph](https://github.com/Slach/clickhouse-flamegraph) est un outil spécialisé pour visualiser la `system.trace_log` comme [flamegraph](http://www.brendangregg.com/flamegraphs.html).
|
||||||
|
|
||||||
|
## Commercial {#commercial}
|
||||||
|
|
||||||
|
### DataGrip {#datagrip}
|
||||||
|
|
||||||
|
[DataGrip](https://www.jetbrains.com/datagrip/) est un IDE de base de données de JetBrains avec un support dédié pour ClickHouse. Il est également intégré dans D'autres outils basés sur IntelliJ: PyCharm, IntelliJ IDEA, GoLand, PhpStorm et autres.
|
||||||
|
|
||||||
|
Caractéristique:
|
||||||
|
|
||||||
|
- Achèvement du code très rapide.
|
||||||
|
- Mise en évidence de la syntaxe ClickHouse.
|
||||||
|
- Prise en charge des fonctionnalités spécifiques à ClickHouse, par exemple, les colonnes imbriquées, les moteurs de table.
|
||||||
|
- Éditeur De Données.
|
||||||
|
- Refactoring.
|
||||||
|
- Recherche et Navigation.
|
||||||
|
|
||||||
|
### Yandex DataLens {#yandex-datalens}
|
||||||
|
|
||||||
|
[Yandex DataLens](https://cloud.yandex.ru/services/datalens) est un service de visualisation et d'analyse de données.
|
||||||
|
|
||||||
|
Caractéristique:
|
||||||
|
|
||||||
|
- Large gamme de visualisations disponibles, des graphiques à barres simples aux tableaux de bord complexes.
|
||||||
|
- Les tableaux de bord pourraient être rendus publics.
|
||||||
|
- Prise en charge de plusieurs sources de données, y compris ClickHouse.
|
||||||
|
- Stockage de données matérialisées basé sur ClickHouse.
|
||||||
|
|
||||||
|
DataLens est [disponible gratuitement](https://cloud.yandex.com/docs/datalens/pricing) pour les projets à faible charge, même pour un usage commercial.
|
||||||
|
|
||||||
|
- [Documentation DataLens](https://cloud.yandex.com/docs/datalens/).
|
||||||
|
- [Tutoriel](https://cloud.yandex.com/docs/solutions/datalens/data-from-ch-visualization) sur la visualisation des données à partir d'une base de données ClickHouse.
|
||||||
|
|
||||||
|
### Logiciel Holistics {#holistics-software}
|
||||||
|
|
||||||
|
[Holistics](https://www.holistics.io/) est une plate-forme de données à pile complète et un outil de business intelligence.
|
||||||
|
|
||||||
|
Caractéristique:
|
||||||
|
|
||||||
|
- E-mail automatisé, Slack et Google Sheet horaires de rapports.
|
||||||
|
- Éditeur SQL avec visualisations, contrôle de version, auto-complétion, composants de requête réutilisables et filtres dynamiques.
|
||||||
|
- Analyse intégrée des rapports et des tableaux de bord via iframe.
|
||||||
|
- Préparation des données et capacités ETL.
|
||||||
|
- Prise en charge de la modélisation des données SQL pour la cartographie relationnelle des données.
|
||||||
|
|
||||||
|
### Looker {#looker}
|
||||||
|
|
||||||
|
[Looker](https://looker.com) est une plate-forme de données et un outil de business intelligence avec prise en charge de plus de 50 dialectes de base de données, y compris ClickHouse. Looker est disponible en tant que plate-forme SaaS et auto-hébergé. Les utilisateurs peuvent utiliser Looker via le navigateur pour explorer les données, créer des visualisations et des tableaux de bord, planifier des rapports et partager leurs idées avec des collègues. Looker fournit un riche ensemble d'outils pour intégrer ces fonctionnalités dans d'autres applications, et une API
|
||||||
|
pour intégrer les données avec d'autres applications.
|
||||||
|
|
||||||
|
Caractéristique:
|
||||||
|
|
||||||
|
- Développement facile et agile en utilisant LookML, un langage qui prend en charge curated
|
||||||
|
[La Modélisation Des Données](https://looker.com/platform/data-modeling) pour soutenir les auteurs et les utilisateurs finaux.
|
||||||
|
- Intégration de flux de travail puissante via Looker [Actions De Données](https://looker.com/platform/actions).
|
||||||
|
|
||||||
|
[Comment configurer ClickHouse dans Looker.](https://docs.looker.com/setup-and-management/database-config/clickhouse)
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/interfaces/third-party/gui/) <!--hide-->
|
93
docs/fr/interfaces/third-party/integrations.md
vendored
Normal file
93
docs/fr/interfaces/third-party/integrations.md
vendored
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Bibliothèques d'intégration de développeurs tiers {#integration-libraries-from-third-party-developers}
|
||||||
|
|
||||||
|
!!! warning "Avertissement"
|
||||||
|
Yandex ne **pas** maintenir les outils et les bibliothèques énumérés ci-dessous et n'ont pas fait de tests approfondis pour assurer leur qualité.
|
||||||
|
|
||||||
|
## Produits D'Infrastructure {#infrastructure-products}
|
||||||
|
|
||||||
|
- Systèmes de gestion de bases de données relationnelles
|
||||||
|
- [MySQL](https://www.mysql.com)
|
||||||
|
- [ProxySQL](https://github.com/sysown/proxysql/wiki/ClickHouse-Support)
|
||||||
|
- [clickhouse-mysql-lecteur de données](https://github.com/Altinity/clickhouse-mysql-data-reader)
|
||||||
|
- [horgh-réplicateur](https://github.com/larsnovikov/horgh-replicator)
|
||||||
|
- [PostgreSQL](https://www.postgresql.org)
|
||||||
|
- [clickhousedb\_fdw](https://github.com/Percona-Lab/clickhousedb_fdw)
|
||||||
|
- [infi.clickhouse\_fdw](https://github.com/Infinidat/infi.clickhouse_fdw) (utiliser [infi.clickhouse\_orm](https://github.com/Infinidat/infi.clickhouse_orm))
|
||||||
|
- [pg2ch](https://github.com/mkabilov/pg2ch)
|
||||||
|
- [clickhouse\_fdw](https://github.com/adjust/clickhouse_fdw)
|
||||||
|
- [MSSQL](https://en.wikipedia.org/wiki/Microsoft_SQL_Server)
|
||||||
|
- [ClickHouseMigrator](https://github.com/zlzforever/ClickHouseMigrator)
|
||||||
|
- Files d'attente de messages
|
||||||
|
- [Kafka](https://kafka.apache.org)
|
||||||
|
- [clickhouse\_sinker](https://github.com/housepower/clickhouse_sinker) (utiliser [Allez client](https://github.com/kshvakov/clickhouse/))
|
||||||
|
- Objet de stockages
|
||||||
|
- [S3](https://en.wikipedia.org/wiki/Amazon_S3)
|
||||||
|
- [clickhouse-sauvegarde](https://github.com/AlexAkulov/clickhouse-backup)
|
||||||
|
- Orchestration de conteneur
|
||||||
|
- [Kubernetes](https://kubernetes.io)
|
||||||
|
- [clickhouse-opérateur](https://github.com/Altinity/clickhouse-operator)
|
||||||
|
- Gestion de la Configuration
|
||||||
|
- [marionnette](https://puppet.com)
|
||||||
|
- [innogames / clickhouse](https://forge.puppet.com/innogames/clickhouse)
|
||||||
|
- [mfedotov / clickhouse](https://forge.puppet.com/mfedotov/clickhouse)
|
||||||
|
- Surveiller
|
||||||
|
- [Graphite](https://graphiteapp.org)
|
||||||
|
- [graphouse](https://github.com/yandex/graphouse)
|
||||||
|
- [carbone-clickhouse](https://github.com/lomik/carbon-clickhouse) +
|
||||||
|
- [graphite-clickhouse](https://github.com/lomik/graphite-clickhouse)
|
||||||
|
- [graphite-CH-optimizer](https://github.com/innogames/graphite-ch-optimizer) - optimise les partitions calées dans [\* GraphiteMergeTree](../../operations/table_engines/graphitemergetree.md#graphitemergetree) si les règles de [configuration de cumul](../../operations/table_engines/graphitemergetree.md#rollup-configuration) pourrait être appliquée
|
||||||
|
- [Grafana](https://grafana.com/)
|
||||||
|
- [clickhouse-grafana](https://github.com/Vertamedia/clickhouse-grafana)
|
||||||
|
- [Prometheus](https://prometheus.io/)
|
||||||
|
- [clickhouse\_exporter](https://github.com/f1yegor/clickhouse_exporter)
|
||||||
|
- [PromHouse](https://github.com/Percona-Lab/PromHouse)
|
||||||
|
- [clickhouse\_exporter](https://github.com/hot-wifi/clickhouse_exporter) (utiliser [Allez client](https://github.com/kshvakov/clickhouse/))
|
||||||
|
- [Nagios](https://www.nagios.org/)
|
||||||
|
- [check\_clickhouse](https://github.com/exogroup/check_clickhouse/)
|
||||||
|
- [check\_clickhouse.py](https://github.com/innogames/igmonplugins/blob/master/src/check_clickhouse.py)
|
||||||
|
- [Zabbix](https://www.zabbix.com)
|
||||||
|
- [clickhouse-Zabbix-modèle](https://github.com/Altinity/clickhouse-zabbix-template)
|
||||||
|
- [Sematext](https://sematext.com/)
|
||||||
|
- [intégration de clickhouse](https://github.com/sematext/sematext-agent-integrations/tree/master/clickhouse)
|
||||||
|
- Journalisation
|
||||||
|
- [rsyslog](https://www.rsyslog.com/)
|
||||||
|
- [omclickhouse](https://www.rsyslog.com/doc/master/configuration/modules/omclickhouse.html)
|
||||||
|
- [fluentd](https://www.fluentd.org)
|
||||||
|
- [maison de bois](https://github.com/flant/loghouse) (pour [Kubernetes](https://kubernetes.io))
|
||||||
|
- [logagent](https://www.sematext.com/logagent)
|
||||||
|
- [sortie logagent-plugin-clickhouse](https://sematext.com/docs/logagent/output-plugin-clickhouse/)
|
||||||
|
- Geo
|
||||||
|
- [MaxMind](https://dev.maxmind.com/geoip/)
|
||||||
|
- [clickhouse-maxmind-geoip](https://github.com/AlexeyKupershtokh/clickhouse-maxmind-geoip)
|
||||||
|
|
||||||
|
## Écosystèmes De Langage De Programmation {#programming-language-ecosystems}
|
||||||
|
|
||||||
|
- Python
|
||||||
|
- [SQLAlchemy](https://www.sqlalchemy.org)
|
||||||
|
- [sqlalchemy-clickhouse](https://github.com/cloudflare/sqlalchemy-clickhouse) (utiliser [infi.clickhouse\_orm](https://github.com/Infinidat/infi.clickhouse_orm))
|
||||||
|
- [Panda](https://pandas.pydata.org)
|
||||||
|
- [pandahouse](https://github.com/kszucs/pandahouse)
|
||||||
|
- R
|
||||||
|
- [dplyr](https://db.rstudio.com/dplyr/)
|
||||||
|
- [RClickhouse](https://github.com/IMSMWU/RClickhouse) (utiliser [clickhouse-cpp](https://github.com/artpaul/clickhouse-cpp))
|
||||||
|
- Java
|
||||||
|
- [Hadoop](http://hadoop.apache.org)
|
||||||
|
- [clickhouse-HDFS-chargeur](https://github.com/jaykelin/clickhouse-hdfs-loader) (utiliser [JDBC](../../query_language/table_functions/jdbc.md))
|
||||||
|
- Scala
|
||||||
|
- [Akka](https://akka.io)
|
||||||
|
- [clickhouse-Scala-client](https://github.com/crobox/clickhouse-scala-client)
|
||||||
|
- C\#
|
||||||
|
- [ADO.NET](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/ado-net-overview)
|
||||||
|
- [ClickHouse.Ado](https://github.com/killwort/ClickHouse-Net)
|
||||||
|
- [ClickHouse.Client](https://github.com/DarkWanderer/ClickHouse.Client)
|
||||||
|
- [ClickHouse.Net](https://github.com/ilyabreev/ClickHouse.Net)
|
||||||
|
- [ClickHouse.Net.Les Migrations](https://github.com/ilyabreev/ClickHouse.Net.Migrations)
|
||||||
|
- Elixir
|
||||||
|
- [Ecto](https://github.com/elixir-ecto/ecto)
|
||||||
|
- [clickhouse\_ecto](https://github.com/appodeal/clickhouse_ecto)
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/interfaces/third-party/integrations/) <!--hide-->
|
43
docs/fr/interfaces/third-party/proxy.md
vendored
Normal file
43
docs/fr/interfaces/third-party/proxy.md
vendored
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Serveurs Proxy de développeurs tiers {#proxy-servers-from-third-party-developers}
|
||||||
|
|
||||||
|
## chproxy {#chproxy}
|
||||||
|
|
||||||
|
[chproxy](https://github.com/Vertamedia/chproxy), est un proxy HTTP et un équilibreur de charge pour la base de données ClickHouse.
|
||||||
|
|
||||||
|
Caractéristique:
|
||||||
|
|
||||||
|
- Routage par utilisateur et mise en cache des réponses.
|
||||||
|
- Limites flexibles.
|
||||||
|
- Renouvellement automatique du certificat SSL.
|
||||||
|
|
||||||
|
Mis en œuvre dans Go.
|
||||||
|
|
||||||
|
## KittenHouse {#kittenhouse}
|
||||||
|
|
||||||
|
[KittenHouse](https://github.com/VKCOM/kittenhouse) est conçu pour être un proxy local entre ClickHouse et serveur d'applications dans le cas où il est impossible ou gênant d'insérer des données en mémoire tampon du côté de votre application.
|
||||||
|
|
||||||
|
Caractéristique:
|
||||||
|
|
||||||
|
- En mémoire et sur disque de données en mémoire tampon.
|
||||||
|
- Routage par table.
|
||||||
|
- Équilibrage de charge et vérification de la santé.
|
||||||
|
|
||||||
|
Mis en œuvre dans Go.
|
||||||
|
|
||||||
|
## ClickHouse-Vrac {#clickhouse-bulk}
|
||||||
|
|
||||||
|
[ClickHouse-Vrac](https://github.com/nikepan/clickhouse-bulk) est un collecteur simple D'insertion de ClickHouse.
|
||||||
|
|
||||||
|
Caractéristique:
|
||||||
|
|
||||||
|
- Groupez les demandes et envoyez-les par seuil ou intervalle.
|
||||||
|
- Plusieurs serveurs distants.
|
||||||
|
- L'authentification de base.
|
||||||
|
|
||||||
|
Mis en œuvre dans Go.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/interfaces/third-party/proxy/) <!--hide-->
|
79
docs/fr/introduction/adopters.md
Normal file
79
docs/fr/introduction/adopters.md
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Clickhouse Adopteurs {#clickhouse-adopters}
|
||||||
|
|
||||||
|
!!! warning "Avertissement"
|
||||||
|
La liste suivante des entreprises utilisant ClickHouse et leurs histoires de réussite est assemblé à partir de sources publiques, pourrait donc différer de la réalité actuelle. Nous vous serions reconnaissants si vous partager l'histoire de l'adoption de ClickHouse dans votre entreprise et [ajouter à la liste](https://github.com/ClickHouse/ClickHouse/edit/master/docs/en/introduction/adopters.md), mais assurez-vous que vous n'aurez aucun problème de NDA en le faisant. Fournir des mises à jour avec des publications d'autres entreprises est également utile.
|
||||||
|
|
||||||
|
| Entreprise | Industrie | Cas d'utilisation | La Taille De Cluster | (Onu)Taille Des Données Compressées<abbr title="of single replica"><sup>\*</sup></abbr> | Référence |
|
||||||
|
|-------------------------------------------------------------------------------|-------------------------------------|------------------------------|-----------------------------------------------------------------|-----------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| [2gis](https://2gis.ru) | Cartographie | Surveiller | — | — | [Parler en russe, juillet 2019](https://youtu.be/58sPkXfq6nw) |
|
||||||
|
| [Aloha Navigateur](https://alohabrowser.com/) | Mobile App | Navigateur backend | — | — | [Diapositives en russe, mai 2019](https://github.com/yandex/clickhouse-presentations/blob/master/meetup22/aloha.pdf) |
|
||||||
|
| [Amadeus](https://amadeus.com/) | Voyage | Analytics | — | — | [Communiqué De Presse, Avril 2018](https://www.altinity.com/blog/2018/4/5/amadeus-technologies-launches-investment-and-insights-tool-based-on-machine-learning-and-strategy-algorithms) |
|
||||||
|
| [Appsflyer](https://www.appsflyer.com) | Mobile analytics | Produit principal | — | — | [Parler en russe, juillet 2019](https://www.youtube.com/watch?v=M3wbRlcpBbY) |
|
||||||
|
| [ArenaData](https://arenadata.tech/) | Plate-Forme De Données | Produit principal | — | — | [Diapositives en russe, décembre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup38/indexes.pdf) |
|
||||||
|
| [Badoo](https://badoo.com) | Rencontres | Timeseries | — | — | [Diapositives en russe, décembre 2019](https://presentations.clickhouse.tech/meetup38/forecast.pdf) |
|
||||||
|
| [Benocs](https://www.benocs.com/) | Télémétrie et analyse de réseau | Produit Principal | — | — | [Diapositives en anglais, octobre 2017](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup9/lpm.pdf) |
|
||||||
|
| [Bloomberg](https://www.bloomberg.com/) | Les Finances, Les Médias | Surveiller | 102 serveurs | — | [Diapositives, Mai 2018](https://www.slideshare.net/Altinity/http-analytics-for-6m-requests-per-second-using-clickhouse-by-alexander-bocharov) |
|
||||||
|
| [Bloxy](https://bloxy.info) | Blockchain | Analytics | — | — | [Diapositives en russe, août 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup17/4_bloxy.pptx) |
|
||||||
|
| `Dataliance/UltraPower` | Télécommunication | Analytics | — | — | [Diapositives en chinois, janvier 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup12/telecom.pdf) |
|
||||||
|
| [CARTO](https://carto.com/) | Business Intelligence | GEO analytics | — | — | [Traitement géospatial avec Clickhouse](https://carto.com/blog/geospatial-processing-with-clickhouse/) |
|
||||||
|
| [CERN](http://public.web.cern.ch/public/) | Recherche | Expérience | — | — | [Communiqué De Presse, avril 2012](https://www.yandex.com/company/press_center/press_releases/2012/2012-04-10/) |
|
||||||
|
| [Cisco](http://cisco.com/) | Réseau | L'analyse de trafic | — | — | [Lightning talk, octobre 2019](https://youtu.be/-hI1vDR2oPY?t=5057) |
|
||||||
|
| [Citadelle Titres](https://www.citadelsecurities.com/) | Finance | — | — | — | [Contribution, Mars 2019](https://github.com/ClickHouse/ClickHouse/pull/4774) |
|
||||||
|
| [Citymobil](https://city-mobil.ru) | Taxi | Analytics | — | — | [Billet de Blog en russe, mars 2020](https://habr.com/en/company/citymobil/blog/490660/) |
|
||||||
|
| [ContentSquare](https://contentsquare.com) | Web analytics | Produit principal | — | — | [Billet de Blog, novembre 2018](http://souslecapot.net/2018/11/21/patrick-chatain-vp-engineering-chez-contentsquare-penser-davantage-amelioration-continue-que-revolution-constante/) |
|
||||||
|
| [Cloudflare](https://cloudflare.com) | CDN | L'analyse de trafic | 36 serveurs | — | [Billet de Blog, mai 2017](https://blog.cloudflare.com/how-cloudflare-analyzes-1m-dns-queries-per-second/), [Billet de Blog, mars 2018](https://blog.cloudflare.com/http-analytics-for-6m-requests-per-second-using-clickhouse/) |
|
||||||
|
| [Corunet](https://coru.net/) | Analytics | Produit principal | — | — | [Diapositives en anglais, avril 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup21/predictive_models.pdf) |
|
||||||
|
| [CraiditX 氪信](https://creditx.com) | Les finances de l'IA | Analyse | — | — | [Diapositives en anglais, novembre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup33/udf.pptx) |
|
||||||
|
| [Criteo / Storetail](https://www.criteo.com/) | Détail | Produit principal | — | — | [Diapositives en anglais, octobre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup18/3_storetail.pptx) |
|
||||||
|
| [La Deutsche Bank](https://db.com) | Finance | BI Analytics | — | — | [Diapositives en anglais, octobre 2019](https://bigdatadays.ru/wp-content/uploads/2019/10/D2-H3-3_Yakunin-Goihburg.pdf) |
|
||||||
|
| [Diva-e](https://www.diva-e.com) | Conseil Digital | Produit Principal | — | — | [Diapositives en anglais, septembre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup29/ClickHouse-MeetUp-Unusual-Applications-sd-2019-09-17.pdf) |
|
||||||
|
| [Exness](https://www.exness.com) | Trading | Métriques, Journalisation | — | — | [Parler en russe, mai 2019](https://youtu.be/_rpU-TvSfZ8?t=3215) |
|
||||||
|
| [Geniee](https://geniee.co.jp) | Réseau publicitaire | Produit principal | — | — | [Billet de Blog en japonais, juillet 2017](https://tech.geniee.co.jp/entry/2017/07/20/160100) |
|
||||||
|
| [HUYA](https://www.huya.com/) | Le Streaming Vidéo | Analytics | — | — | [Diapositives en chinois, octobre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup19/7.%20ClickHouse万亿数据分析实践%20李本旺(sundy-li)%20虎牙.pdf) |
|
||||||
|
| [Idealista](https://www.idealista.com) | Immobilier | Analytics | — | — | [Billet de Blog en anglais, avril 2019](https://clickhouse.yandex/blog/en/clickhouse-meetup-in-madrid-on-april-2-2019) |
|
||||||
|
| [Infovista](https://www.infovista.com/) | Réseau | Analytics | — | — | [Diapositives en anglais, octobre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup30/infovista.pdf) |
|
||||||
|
| [InnoGames](https://www.innogames.com) | Jeu | Métriques, Journalisation | — | — | [Diapositives en russe, septembre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup28/graphite_and_clickHouse.pdf) |
|
||||||
|
| [Integros](https://integros.com) | Plate-forme pour les services vidéo | Analytics | — | — | [Diapositives en russe, mai 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup22/strategies.pdf) |
|
||||||
|
| [Données Kodiak](https://www.kodiakdata.com/) | Nuage | Produit principal | — | — | [Diapositives en Engish, avril 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup13/kodiak_data.pdf) |
|
||||||
|
| [Kontur](https://kontur.ru) | Le Développement De Logiciels | Métrique | — | — | [Parler en russe, novembre 2018](https://www.youtube.com/watch?v=U4u4Bd0FtrY) |
|
||||||
|
| [LifeStreet](https://lifestreet.com/) | Réseau publicitaire | Produit principal | 75 serveurs (3 répliques) | 5.27 FRP | [Billet de Blog en russe, février 2017](https://habr.com/en/post/322620/) |
|
||||||
|
| [Mail.ru Solutions Cloud](https://mcs.mail.ru/) | Les services de Cloud | Produit principal | — | — | [Exécution de L'Instance ClickHouse, en russe](https://mcs.mail.ru/help/db-create/clickhouse#) |
|
||||||
|
| [MessageBird](https://www.messagebird.com) | Télécommunication | Statistique | — | — | [Diapositives en anglais, novembre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup20/messagebird.pdf) |
|
||||||
|
| [MGID](https://www.mgid.com/) | Réseau publicitaire | Web-analytics | — | — | [Notre expérience dans la mise en œuvre de SGBD analytique ClickHouse, en russe](http://gs-studio.com/news-about-it/32777----clickhouse---c) |
|
||||||
|
| [OneAPM](https://www.oneapm.com/) | Monitorings et analyse des données | Produit principal | — | — | [Diapositives en chinois, octobre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup19/8.%20clickhouse在OneAPM的应用%20杜龙.pdf) |
|
||||||
|
| [Pragma L'Innovation](http://www.pragma-innovation.fr/) | Télémétrie et analyse Big Data | Produit principal | — | — | [Diapositives en anglais, octobre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup18/4_pragma_innovation.pdf) |
|
||||||
|
| [QINGCLOUD](https://www.qingcloud.com/) | Les services de Cloud | Produit principal | — | — | [Diapositives en chinois, octobre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup19/4.%20Cloud%20%2B%20TSDB%20for%20ClickHouse%20张健%20QingCloud.pdf) |
|
||||||
|
| [Qrator](https://qrator.net) | Protection DDoS | Produit principal | — | — | [Billet De Blog, Mars 2019](https://blog.qrator.net/en/clickhouse-ddos-mitigation_37/) |
|
||||||
|
| [Beijing pour cent Information Technology Co., Ltd.](https://www.percent.cn/) | Analytics | Produit Principal | — | — | [Diapositives en chinois, juin 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup24/4.%20ClickHouse万亿数据双中心的设计与实践%20.pdf) |
|
||||||
|
| [Rambler](https://rambler.ru) | Services Internet | Analytics | — | — | [Parler en russe, avril 2018](https://medium.com/@ramblertop/разработка-api-clickhouse-для-рамблер-топ-100-f4c7e56f3141) |
|
||||||
|
| [Tencent](https://www.tencent.com) | Messagerie | Journalisation | — | — | [Parler en chinois, novembre 2019](https://youtu.be/T-iVQRuw-QY?t=5050) |
|
||||||
|
| [Étoiles De Circulation](https://trafficstars.com/) | Réseau publicitaire | — | — | — | [Diapositives en russe, mai 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup15/lightning/ninja.pdf) |
|
||||||
|
| [S7 Airlines](https://www.s7.ru) | Avion | Métriques, Journalisation | — | — | [Parler en russe, mars 2019](https://www.youtube.com/watch?v=nwG68klRpPg&t=15s) |
|
||||||
|
| [SEMrush](https://www.semrush.com/) | Marketing | Produit principal | — | — | [Diapositives en russe, août 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup17/5_semrush.pdf) |
|
||||||
|
| [scireum GmbH](https://www.scireum.de/) | Ecommerce | Produit principal | — | — | [Présentation en allemand, février 2020](https://www.youtube.com/watch?v=7QWAn5RbyR4) |
|
||||||
|
| [Sentry](https://sentry.io/) | Développeur de logiciels | Backend pour le produit | — | — | [Billet de Blog en anglais, mai 2019](https://blog.sentry.io/2019/05/16/introducing-snuba-sentrys-new-search-infrastructure) |
|
||||||
|
| [SGK](http://www.sgk.gov.tr/wps/portal/sgk/tr) | Gouvernement Sécurité Sociale | Analytics | — | — | [Diapositives en anglais, novembre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup35/ClickHouse%20Meetup-Ramazan%20POLAT.pdf) |
|
||||||
|
| [seo.do](https://seo.do/) | Analytics | Produit principal | — | — | [Diapositives en anglais, novembre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup35/CH%20Presentation-%20Metehan%20Çetinkaya.pdf) |
|
||||||
|
| [Sina](http://english.sina.com/index.html) | Nouvelles | — | — | — | [Diapositives en chinois, octobre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup19/6.%20ClickHouse最佳实践%20高鹏_新浪.pdf) |
|
||||||
|
| [SMI2](https://smi2.ru/) | Nouvelles | Analytics | — | — | [Billet de Blog en russe, novembre 2017](https://habr.com/ru/company/smi2/blog/314558/) |
|
||||||
|
| [Splunk](https://www.splunk.com/) | Business Analytics | Produit principal | — | — | [Diapositives en anglais, janvier 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup12/splunk.pdf) |
|
||||||
|
| [Spotify](https://www.spotify.com) | Musical | Expérimentation | — | — | [Diapositives, Juillet 2018](https://www.slideshare.net/glebus/using-clickhouse-for-experimentation-104247173) |
|
||||||
|
| [Tencent](https://www.tencent.com) | Big Data | Le traitement des données | — | — | [Diapositives en chinois, octobre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup19/5.%20ClickHouse大数据集群应用_李俊飞腾讯网媒事业部.pdf) |
|
||||||
|
| [Uber](https://www.uber.com) | Taxi | Journalisation | — | — | [Diapositives, Février 2020](https://presentations.clickhouse.tech/meetup40/uber.pdf) |
|
||||||
|
| [VKontakte](https://vk.com) | Réseau Social | Statistiques, Journalisation | — | — | [Diapositives en russe, août 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup17/3_vk.pdf) |
|
||||||
|
| [Wisebits](https://wisebits.com/) | Solutions informatiques | Analytics | — | — | [Diapositives en russe, mai 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup22/strategies.pdf) |
|
||||||
|
| [Xiaoxin Tech.](https://www.xiaoheiban.cn/) | Éducation | But commun | — | — | [Diapositives en anglais, novembre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup33/sync-clickhouse-with-mysql-mongodb.pptx) |
|
||||||
|
| [Ximalaya](https://www.ximalaya.com/) | Partage Audio | OLAP | — | — | [Diapositives en anglais, novembre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup33/ximalaya.pdf) |
|
||||||
|
| [Yandex Cloud](https://cloud.yandex.ru/services/managed-clickhouse) | Le Cloud Public | Produit principal | — | — | [Parler en russe, décembre 2019](https://www.youtube.com/watch?v=pgnak9e_E0o) |
|
||||||
|
| [Yandex DataLens](https://cloud.yandex.ru/services/datalens) | Business Intelligence | Produit principal | — | — | [Diapositives en russe, décembre 2019](https://presentations.clickhouse.tech/meetup38/datalens.pdf) |
|
||||||
|
| [Yandex Marché](https://market.yandex.ru/) | Ecommerce | Métriques, Journalisation | — | — | [Parler en russe, janvier 2019](https://youtu.be/_l1qP0DyBcA?t=478) |
|
||||||
|
| [Yandex Metrica](https://metrica.yandex.com) | Web analytics | Produit principal | 360 serveurs dans un cluster, 1862 serveurs dans un département | 66,41 FRP / 5,68 FRP | [Diapositives, Février 2020](https://presentations.clickhouse.tech/meetup40/introduction/#13) |
|
||||||
|
| [ЦВТ](https://htc-cs.ru/) | Le Développement De Logiciels | Métriques, Journalisation | — | — | [Billet de Blog, mars 2019, en russe](https://vc.ru/dev/62715-kak-my-stroili-monitoring-na-prometheus-clickhouse-i-elk) |
|
||||||
|
| [МКБ](https://mkb.ru/) | Banque | Surveillance du système Web | — | — | [Diapositives en russe, septembre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup28/mkb.pdf) |
|
||||||
|
| [金数据](https://jinshuju.net) | BI Analytics | Produit principal | — | — | [Diapositives en chinois, octobre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup24/3.%20金数据数据架构调整方案Public.pdf) |
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/introduction/adopters/) <!--hide-->
|
68
docs/fr/introduction/distinctive_features.md
Normal file
68
docs/fr/introduction/distinctive_features.md
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Caractéristiques distinctives de ClickHouse {#distinctive-features-of-clickhouse}
|
||||||
|
|
||||||
|
## Vrai SGBD orienté colonne {#true-column-oriented-dbms}
|
||||||
|
|
||||||
|
Dans un vrai SGBD orienté colonne, aucune donnée supplémentaire n'est stockée avec les valeurs. Entre autres choses, cela signifie que les valeurs de longueur constante doivent être prises en charge, pour éviter de stocker leur longueur “number” à côté de ces valeurs. Par exemple, un milliard de valeurs de type UInt8 devrait consommer environ 1 Go non compressé, ou cela affecte fortement l'utilisation du processeur. Il est essentiel de stocker des données de manière compacte (sans “garbage”) même lorsqu'il n'est pas compressé, puisque la vitesse de décompression (utilisation du processeur) dépend principalement du volume de données non compressées.
|
||||||
|
|
||||||
|
Il est à noter car il existe des systèmes qui peuvent stocker des valeurs de différentes colonnes séparément, mais qui ne peuvent pas traiter efficacement les requêtes analytiques en raison de leur optimisation pour d'autres scénarios. Les exemples sont HBase, BigTable, Cassandra et HyperTable. Dans ces systèmes, vous obtiendriez un débit d'environ cent mille lignes par seconde, mais pas des centaines de millions de lignes par seconde.
|
||||||
|
|
||||||
|
Il est également intéressant de noter que ClickHouse est un système de gestion de base de données, pas une seule base de données. ClickHouse permet de créer des tables et des bases de données en cours d'exécution, de charger des données et d'exécuter des requêtes sans reconfigurer et redémarrer le serveur.
|
||||||
|
|
||||||
|
## Compression De Données {#data-compression}
|
||||||
|
|
||||||
|
Certains SGBD orientés colonne (InfiniDB CE et MonetDB) n'utilisent pas la compression de données. Cependant, la compression des données joue un rôle clé dans la réalisation d'excellentes performances.
|
||||||
|
|
||||||
|
## Stockage de données sur disque {#disk-storage-of-data}
|
||||||
|
|
||||||
|
Garder les données physiquement triées par clé primaire permet d'extraire des données pour ses valeurs spécifiques ou plages de valeurs avec une faible latence, moins de quelques dizaines de millisecondes. Certains SGBD orientés colonne (tels que SAP HANA et Google PowerDrill) ne peuvent fonctionner qu'en RAM. Cette approche encourage l'allocation d'un budget matériel plus important que ce qui est nécessaire pour l'analyse en temps réel. ClickHouse est conçu pour fonctionner sur des disques durs réguliers, ce qui signifie que le coût par Go de stockage de données est faible, mais SSD et RAM supplémentaire sont également entièrement utilisés si disponible.
|
||||||
|
|
||||||
|
## Traitement parallèle sur plusieurs cœurs {#parallel-processing-on-multiple-cores}
|
||||||
|
|
||||||
|
Les grandes requêtes sont parallélisées naturellement, en prenant toutes les ressources nécessaires disponibles sur le serveur actuel.
|
||||||
|
|
||||||
|
## Traitement distribué sur plusieurs serveurs {#distributed-processing-on-multiple-servers}
|
||||||
|
|
||||||
|
Presque aucun des SGBD en colonnes mentionnés ci-dessus ne prend en charge le traitement des requêtes distribuées.
|
||||||
|
Dans ClickHouse, les données peuvent résider sur différents fragments. Chaque fragment peut être un groupe de répliques utilisées pour la tolérance aux pannes. Tous les fragments sont utilisés pour exécuter une requête en parallèle, de façon transparente pour l'utilisateur.
|
||||||
|
|
||||||
|
## Prise en charge SQL {#sql-support}
|
||||||
|
|
||||||
|
ClickHouse prend en charge un langage de requête déclarative basé sur SQL qui est identique à la norme SQL dans de nombreux cas.
|
||||||
|
Les requêtes prises en charge incluent les clauses GROUP BY, ORDER BY, les sous-requêtes in FROM, IN et JOIN, ainsi que les sous-requêtes scalaires.
|
||||||
|
Les sous-requêtes dépendantes et les fonctions de fenêtre ne sont pas prises en charge.
|
||||||
|
|
||||||
|
## Moteur Vectoriel {#vector-engine}
|
||||||
|
|
||||||
|
Les données ne sont pas seulement stockées par des colonnes, mais sont traitées par des vecteurs (parties de colonnes), ce qui permet d'atteindre une efficacité élevée du processeur.
|
||||||
|
|
||||||
|
## Données en temps réel des Mises à jour {#real-time-data-updates}
|
||||||
|
|
||||||
|
ClickHouse prend en charge les tables avec une clé primaire. Pour effectuer rapidement des requêtes sur la plage de la clé primaire, les données sont triées progressivement à l'aide de l'arborescence de fusion. Pour cette raison, les données peuvent être continuellement ajoutées à la table. Pas de verrouillage lorsque de nouvelles données sont ingérés.
|
||||||
|
|
||||||
|
## Index {#index}
|
||||||
|
|
||||||
|
Avoir une donnée physiquement triée par clé primaire permet d'extraire des données pour ses valeurs spécifiques ou plages de valeurs avec une faible latence, moins de quelques dizaines de millisecondes.
|
||||||
|
|
||||||
|
## Convient pour les requêtes en ligne {#suitable-for-online-queries}
|
||||||
|
|
||||||
|
Faible latence signifie que les requêtes peuvent être traitées sans délai et sans essayer de préparer une réponse à l'avance, au même moment pendant le chargement de la page de l'interface utilisateur. En d'autres termes, en ligne.
|
||||||
|
|
||||||
|
## Prise en charge des calculs approximatifs {#support-for-approximated-calculations}
|
||||||
|
|
||||||
|
ClickHouse offre différentes façons d'échanger la précision pour la performance:
|
||||||
|
|
||||||
|
1. Fonctions d'agrégation pour le calcul approximatif du nombre de valeurs distinctes, de médianes et de quantiles.
|
||||||
|
2. L'exécution d'une requête basée sur une partie (échantillon) de données et obtenir un pseudo résultat. Dans ce cas, proportionnellement, moins de données sont récupérées à partir du disque.
|
||||||
|
3. L'exécution d'une agrégation pour un nombre limité de clés aléatoires, au lieu de toutes les clés. Sous certaines conditions pour la distribution des clés dans les données, cela fournit un résultat raisonnablement précis tout en utilisant moins de ressources.
|
||||||
|
|
||||||
|
## Prise en charge de la réplication et de l'intégrité des données {#data-replication-and-data-integrity-support}
|
||||||
|
|
||||||
|
ClickHouse utilise la réplication multi-maître asynchrone. Après avoir été écrit dans n'importe quelle réplique disponible, toutes les répliques restantes récupèrent leur copie en arrière-plan. Le système conserve des données identiques sur différentes répliques. La récupération après la plupart des échecs est effectuée automatiquement ou semi-automatiquement dans les cas complexes.
|
||||||
|
|
||||||
|
Pour plus d'informations, consultez la section [Réplication des données](../operations/table_engines/replication.md).
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/introduction/distinctive_features/) <!--hide-->
|
11
docs/fr/introduction/features_considered_disadvantages.md
Normal file
11
docs/fr/introduction/features_considered_disadvantages.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Caractéristiques de ClickHouse qui peuvent être considérées comme des inconvénients {#clickhouse-features-that-can-be-considered-disadvantages}
|
||||||
|
|
||||||
|
1. Pas de transactions à part entière.
|
||||||
|
2. Manque de capacité à modifier ou supprimer des données déjà insérées avec un taux élevé et une faible latence. Des suppressions et des mises à jour par lots sont disponibles pour nettoyer ou modifier les données, par exemple pour [GDPR](https://gdpr-info.eu).
|
||||||
|
3. L'index clairsemé rend ClickHouse pas si approprié pour les requêtes ponctuelles récupérant des lignes simples par leurs clés.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/introduction/features_considered_disadvantages/) <!--hide-->
|
53
docs/fr/introduction/history.md
Normal file
53
docs/fr/introduction/history.md
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Histoire De ClickHouse {#clickhouse-history}
|
||||||
|
|
||||||
|
ClickHouse a été développé initialement au pouvoir [Yandex.Metrica](https://metrica.yandex.com/), [la deuxième plus grande plateforme d'analyse dans le monde](http://w3techs.com/technologies/overview/traffic_analysis/all) et continue à être le composant de base de ce système. Avec plus de 13 Billions d'enregistrements dans la base de données et plus de 20 milliards d'événements par jour, ClickHouse permet de générer des rapports personnalisés à la volée directement à partir de données non agrégées. Cet article couvre brièvement les objectifs de ClickHouse dans les premiers stades de son développement.
|
||||||
|
|
||||||
|
Yandex.Metrica construit des rapports personnalisés à la volée en fonction des hits et des sessions, avec des segments arbitraires définis par l'utilisateur. Faisant souvent requiert la construction d'agrégats complexes, tels que le nombre d'utilisateurs uniques. De nouvelles données pour la création d'un rapport arrivent en temps réel.
|
||||||
|
|
||||||
|
En avril 2014, Yandex.Metrica suivait environ 12 milliards d'événements (pages vues et clics) par jour. Tous ces événements doivent être stockés à créer des rapports personnalisés. Une seule requête peut exiger de la numérisation de millions de lignes en quelques centaines de millisecondes, ou des centaines de millions de lignes en quelques secondes.
|
||||||
|
|
||||||
|
## Utilisation dans Yandex.Metrica et autres Services Yandex {#usage-in-yandex-metrica-and-other-yandex-services}
|
||||||
|
|
||||||
|
ClickHouse sert à des fins multiples dans Yandex.Metrica.
|
||||||
|
Sa tâche principale est de créer des rapports en mode en ligne en utilisant des données non agrégées. Il utilise un cluster de 374 serveurs qui stockent plus de 20,3 billions de lignes dans la base de données. Le volume de données compressées est d'environ 2 PB, sans tenir compte des doublons et des répliques. Le volume de données non compressées (au format TSV) serait d'environ 17 PB.
|
||||||
|
|
||||||
|
ClickHouse joue également un rôle clé dans les processus suivants:
|
||||||
|
|
||||||
|
- Stockage des données pour la relecture de Session de Yandex.Metrica.
|
||||||
|
- Traitement des données intermédiaires.
|
||||||
|
- Création de rapports globaux avec Analytics.
|
||||||
|
- Exécution de requêtes pour le débogage du Yandex.Moteur Metrica.
|
||||||
|
- Analyse des journaux de L'API et de l'interface utilisateur.
|
||||||
|
|
||||||
|
De nos jours, il existe plusieurs dizaines d'installations ClickHouse dans D'autres services et départements Yandex: recherche verticale, E-commerce, Publicité, business analytics, développement mobile, Services personnels et autres.
|
||||||
|
|
||||||
|
## Données agrégées et non agrégées {#aggregated-and-non-aggregated-data}
|
||||||
|
|
||||||
|
Il y a une opinion répandue que pour calculer efficacement les statistiques, vous devez agréger les données car cela réduit le volume de données.
|
||||||
|
|
||||||
|
Mais l'agrégation de données est livré avec beaucoup de limitations:
|
||||||
|
|
||||||
|
- Vous devez disposer d'une liste prédéfinie des rapports requis.
|
||||||
|
- L'utilisateur ne peut pas créer de rapports personnalisés.
|
||||||
|
- Lors de l'agrégation sur un grand nombre de clés distinctes, le volume de données est à peine réduit, l'agrégation est donc inutile.
|
||||||
|
- Pour un grand nombre de rapports, il y a trop de variations d'agrégation (explosion combinatoire).
|
||||||
|
- Lors de l'agrégation de clés avec une cardinalité élevée (telles que les URL), le volume de données n'est pas réduit de beaucoup (moins de deux fois).
|
||||||
|
- Pour cette raison, le volume de données avec l'agrégation peut augmenter au lieu de diminuer.
|
||||||
|
- Les utilisateurs ne voient pas tous les rapports que nous générons pour eux. Une grande partie de ces calculs est inutile.
|
||||||
|
- L'intégrité logique des données peut être violée pour diverses agrégations.
|
||||||
|
|
||||||
|
Si nous n'agrégeons rien et travaillons avec des données non agrégées, cela pourrait réduire le volume des calculs.
|
||||||
|
|
||||||
|
Cependant, avec l'agrégation, une partie importante du travail est déconnectée et achevée relativement calmement. En revanche, les calculs en ligne nécessitent un calcul aussi rapide que possible, car l'utilisateur attend le résultat.
|
||||||
|
|
||||||
|
Yandex.Metrica dispose d'un système spécialisé d'agrégation des données appelé Metrage, qui a été utilisé pour la majorité des rapports.
|
||||||
|
À partir de 2009, Yandex.Metrica a également utilisé une base de données OLAP spécialisée pour les données non agrégées appelée OLAPServer, qui était auparavant utilisée pour le générateur de rapports.
|
||||||
|
OLAPServer a bien fonctionné pour les données non agrégées, mais il avait de nombreuses restrictions qui ne lui permettaient pas d'être utilisé pour tous les rapports comme souhaité. Ceux-ci comprenaient le manque de prise en charge des types de données (uniquement des nombres) et l'incapacité de mettre à jour progressivement les données en temps réel (cela ne pouvait être fait qu'en réécrivant les données quotidiennement). OLAPServer n'est pas un SGBD, mais une base de données spécialisée.
|
||||||
|
|
||||||
|
L'objectif initial de ClickHouse était de supprimer les limites D'OLAPServer et de résoudre le problème du travail avec des données non agrégées pour tous les rapports, mais au fil des ans, il est devenu un système de gestion de base de données polyvalent adapté à un large éventail de tâches analytiques.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/introduction/history/) <!--hide-->
|
29
docs/fr/introduction/performance.md
Normal file
29
docs/fr/introduction/performance.md
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Performance {#performance}
|
||||||
|
|
||||||
|
Selon les résultats des tests internes chez Yandex, ClickHouse affiche les meilleures performances (à la fois le débit le plus élevé pour les requêtes longues et la latence la plus faible pour les requêtes courtes) pour des scénarios d'exploitation comparables parmi les systèmes de sa classe disponibles pour les tests. Vous pouvez afficher les résultats du test sur un [page séparée](https://clickhouse.tech/benchmark.html).
|
||||||
|
|
||||||
|
De nombreux points de repère indépendants sont arrivés à des conclusions similaires. Ils ne sont pas difficiles à trouver en utilisant une recherche sur internet, ou vous pouvez voir [notre petite collection de liens](https://clickhouse.tech/#independent-benchmarks).
|
||||||
|
|
||||||
|
## Débit pour une seule grande requête {#throughput-for-a-single-large-query}
|
||||||
|
|
||||||
|
Le débit peut être mesuré en lignes par seconde ou en mégaoctets par seconde. Si les données sont placées dans le cache de page, une requête pas trop complexe est traitée sur du matériel moderne à une vitesse d'environ 2-10 GB / s de données non compressées sur un seul serveur (pour les cas les plus simples, la vitesse peut atteindre 30 GB/s). Si les données ne sont pas placées dans le cache de page, la vitesse dépend du sous-système de disque et du taux de compression des données. Par exemple, si le sous-système de disque permet de lire des données à 400 Mo/s et que le taux de compression des données est de 3, la vitesse devrait être d'environ 1,2 Go/s. Pour obtenir la vitesse en lignes par seconde, divisez la vitesse en octets par seconde par la taille totale des colonnes utilisées dans la requête. Par exemple, si 10 octets de colonnes sont extraites, la vitesse devrait être d'environ 100 à 200 millions de lignes par seconde.
|
||||||
|
|
||||||
|
La vitesse de traitement augmente presque linéairement pour le traitement distribué, mais seulement si le nombre de lignes résultant de l'agrégation ou du tri n'est pas trop important.
|
||||||
|
|
||||||
|
## Latence Lors Du Traitement Des Requêtes Courtes {#latency-when-processing-short-queries}
|
||||||
|
|
||||||
|
Si une requête utilise une clé primaire et ne sélectionne pas trop de colonnes et de lignes à traiter (des centaines de milliers), Vous pouvez vous attendre à moins de 50 millisecondes de latence (un seul chiffre de millisecondes dans le meilleur des cas) si les données sont placées dans le cache de page. Sinon, la latence est principalement dominée par le nombre de recherches. Si vous utilisez des lecteurs de disque rotatifs, pour un système qui n'est pas surchargé, la latence peut être estimée avec cette formule: `seek time (10 ms) * count of columns queried * count of data parts`.
|
||||||
|
|
||||||
|
## Débit lors du traitement d'une grande quantité de requêtes courtes {#throughput-when-processing-a-large-quantity-of-short-queries}
|
||||||
|
|
||||||
|
Dans les mêmes conditions, ClickHouse peut traiter plusieurs centaines de requêtes par seconde sur un seul serveur (jusqu'à plusieurs milliers dans le meilleur des cas). Étant donné que ce scénario n'est pas typique pour les SGBD analytiques, nous vous recommandons d'attendre un maximum de 100 requêtes par seconde.
|
||||||
|
|
||||||
|
## Performances Lors De L'Insertion De Données {#performance-when-inserting-data}
|
||||||
|
|
||||||
|
Nous vous recommandons d'insérer des données dans des paquets d'au moins 1000 lignes, ou pas plus qu'une seule demande par seconde. Lors de l'insertion dans une table MergeTree à partir d'un dump séparé par des tabulations, la vitesse d'insertion peut être de 50 à 200 Mo/s. Si les lignes insérées ont une taille d'environ 1 KO, La vitesse sera de 50 000 à 200 000 lignes par seconde. Si les lignes sont petites, les performances peuvent être plus élevées en lignes par seconde (sur les données du système de bannière -`>` 500 000 lignes par seconde; sur les données de Graphite -`>` 1 000 000 lignes par seconde). Pour améliorer les performances, vous pouvez effectuer plusieurs requêtes D'insertion en parallèle, qui s'adaptent linéairement.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/introduction/performance/) <!--hide-->
|
110
docs/fr/operations/access_rights.md
Normal file
110
docs/fr/operations/access_rights.md
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Les Droits D'Accès {#access-rights}
|
||||||
|
|
||||||
|
Les utilisateurs et les droits d'accès sont configurés dans la configuration utilisateur. Ce n'est généralement `users.xml`.
|
||||||
|
|
||||||
|
Les utilisateurs sont enregistrés dans le `users` section. Voici un fragment de la `users.xml` fichier:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<!-- Users and ACL. -->
|
||||||
|
<users>
|
||||||
|
<!-- If the user name is not specified, the 'default' user is used. -->
|
||||||
|
<default>
|
||||||
|
<!-- Password could be specified in plaintext or in SHA256 (in hex format).
|
||||||
|
|
||||||
|
If you want to specify password in plaintext (not recommended), place it in 'password' element.
|
||||||
|
Example: <password>qwerty</password>.
|
||||||
|
Password could be empty.
|
||||||
|
|
||||||
|
If you want to specify SHA256, place it in 'password_sha256_hex' element.
|
||||||
|
Example: <password_sha256_hex>65e84be33532fb784c48129675f9eff3a682b27168c0ea744b2cf58ee02337c5</password_sha256_hex>
|
||||||
|
|
||||||
|
How to generate decent password:
|
||||||
|
Execute: PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'
|
||||||
|
In first line will be password and in second - corresponding SHA256.
|
||||||
|
-->
|
||||||
|
<password></password>
|
||||||
|
|
||||||
|
<!-- A list of networks that access is allowed from.
|
||||||
|
Each list item has one of the following forms:
|
||||||
|
<ip> The IP address or subnet mask. For example: 198.51.100.0/24 or 2001:DB8::/32.
|
||||||
|
<host> Host name. For example: example01. A DNS query is made for verification, and all addresses obtained are compared with the address of the customer.
|
||||||
|
<host_regexp> Regular expression for host names. For example, ^example\d\d-\d\d-\d\.host\.ru$
|
||||||
|
To check it, a DNS PTR request is made for the client's address and a regular expression is applied to the result.
|
||||||
|
Then another DNS query is made for the result of the PTR query, and all received address are compared to the client address.
|
||||||
|
We strongly recommend that the regex ends with \.host\.ru$.
|
||||||
|
|
||||||
|
If you are installing ClickHouse yourself, specify here:
|
||||||
|
<networks>
|
||||||
|
<ip>::/0</ip>
|
||||||
|
</networks>
|
||||||
|
-->
|
||||||
|
<networks incl="networks" />
|
||||||
|
|
||||||
|
<!-- Settings profile for the user. -->
|
||||||
|
<profile>default</profile>
|
||||||
|
|
||||||
|
<!-- Quota for the user. -->
|
||||||
|
<quota>default</quota>
|
||||||
|
</default>
|
||||||
|
|
||||||
|
<!-- For requests from the Yandex.Metrica user interface via the API for data on specific counters. -->
|
||||||
|
<web>
|
||||||
|
<password></password>
|
||||||
|
<networks incl="networks" />
|
||||||
|
<profile>web</profile>
|
||||||
|
<quota>default</quota>
|
||||||
|
<allow_databases>
|
||||||
|
<database>test</database>
|
||||||
|
</allow_databases>
|
||||||
|
<allow_dictionaries>
|
||||||
|
<dictionary>test</dictionary>
|
||||||
|
</allow_dictionaries>
|
||||||
|
</web>
|
||||||
|
</users>
|
||||||
|
```
|
||||||
|
|
||||||
|
Vous pouvez voir une déclaration de deux utilisateurs: `default`et`web`. Nous avons ajouté l' `web` utilisateur séparément.
|
||||||
|
|
||||||
|
Le `default` l'utilisateur est choisi dans les cas où le nom d'utilisateur n'est pas passé. Le `default` l'utilisateur est également utilisé pour le traitement des requêtes distribuées, si la configuration du serveur ou du cluster `user` et `password` (voir la section sur les [Distribué](../operations/table_engines/distributed.md) moteur).
|
||||||
|
|
||||||
|
The user that is used for exchanging information between servers combined in a cluster must not have substantial restrictions or quotas – otherwise, distributed queries will fail.
|
||||||
|
|
||||||
|
Le mot de passe est spécifié en texte clair (non recommandé) ou en SHA-256. Le hash n'est pas salé. À cet égard, vous ne devez pas considérer ces mots de passe comme assurant la sécurité contre les attaques malveillantes potentielles. Au contraire, ils sont nécessaires pour la protection contre les employés.
|
||||||
|
|
||||||
|
Une liste de réseaux est précisé que l'accès est autorisé à partir. Dans cet exemple, la liste des réseaux pour les utilisateurs est chargé à partir d'un fichier séparé (`/etc/metrika.xml`) contenant les `networks` substitution. Voici un fragment de:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<yandex>
|
||||||
|
...
|
||||||
|
<networks>
|
||||||
|
<ip>::/64</ip>
|
||||||
|
<ip>203.0.113.0/24</ip>
|
||||||
|
<ip>2001:DB8::/32</ip>
|
||||||
|
...
|
||||||
|
</networks>
|
||||||
|
</yandex>
|
||||||
|
```
|
||||||
|
|
||||||
|
Vous pouvez définir cette liste de réseaux directement dans `users.xml` ou dans un fichier dans le `users.d` répertoire (pour plus d'informations, consultez la section “[Fichiers de Configuration](configuration_files.md#configuration_files)”).
|
||||||
|
|
||||||
|
La configuration comprend des commentaires expliquant comment ouvrir l'accès de partout.
|
||||||
|
|
||||||
|
Pour une utilisation en production, spécifiez uniquement `ip` (adresses IP et leurs masques), depuis l'utilisation `host` et `hoost_regexp` peut causer une latence supplémentaire.
|
||||||
|
|
||||||
|
Ensuite, le profil des paramètres utilisateur est spécifié (voir la section “[Les paramètres des profils](settings/settings_profiles.md)”. Vous pouvez spécifier le profil par défaut, `default'`. Le profil peut avoir n'importe quel nom. Vous pouvez spécifier le même profil pour différents utilisateurs. La chose la plus importante que vous pouvez écrire dans les paramètres de profil `readonly=1` qui assure un accès en lecture seule. Spécifiez ensuite le quota à utiliser (voir la section “[Quota](quotas.md#quotas)”). Vous pouvez spécifier le quota par défaut: `default`. It is set in the config by default to only count resource usage, without restricting it. The quota can have any name. You can specify the same quota for different users – in this case, resource usage is calculated for each user individually.
|
||||||
|
|
||||||
|
Dans le facultatif `<allow_databases>` section, vous pouvez également spécifier une liste de bases de données que l'utilisateur peut accéder. Par défaut, toutes les bases de données sont disponibles pour l'utilisateur. Vous pouvez spécifier l' `default` la base de données. Dans ce cas, l'utilisateur recevra l'accès à la base de données par défaut.
|
||||||
|
|
||||||
|
Dans le facultatif `<allow_dictionaries>` section, vous pouvez également spécifier une liste de dictionnaires que l'utilisateur peut accéder. Par défaut, tous les dictionnaires sont disponibles pour l'utilisateur.
|
||||||
|
|
||||||
|
L'accès à la `system` la base de données est toujours autorisée (puisque cette base de données est utilisée pour traiter les requêtes).
|
||||||
|
|
||||||
|
L'utilisateur peut obtenir une liste de toutes les bases de données et tables en utilisant `SHOW` requêtes ou tables système, même si l'accès aux bases de données individuelles n'est pas autorisé.
|
||||||
|
|
||||||
|
Accès de base de données n'est pas liée à la [ReadOnly](settings/permissions_for_queries.md#settings_readonly) paramètre. Vous ne pouvez pas accorder un accès complet à une base de données et `readonly` l'accès à un autre.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/operations/access_rights/) <!--hide-->
|
38
docs/fr/operations/backup.md
Normal file
38
docs/fr/operations/backup.md
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# La Sauvegarde Des Données {#data-backup}
|
||||||
|
|
||||||
|
Alors [réplication](table_engines/replication.md) provides protection from hardware failures, it does not protect against human errors: accidental deletion of data, deletion of the wrong table or a table on the wrong cluster, and software bugs that result in incorrect data processing or data corruption. In many cases mistakes like these will affect all replicas. ClickHouse has built-in safeguards to prevent some types of mistakes — for example, by default [vous ne pouvez pas simplement supprimer des tables avec un moteur de type MergeTree contenant plus de 50 Go de données](https://github.com/ClickHouse/ClickHouse/blob/v18.14.18-stable/dbms/programs/server/config.xml#L322-L330). Toutefois, ces garanties ne couvrent pas tous les cas possibles et peuvent être contournés.
|
||||||
|
|
||||||
|
Afin d'atténuer efficacement les erreurs humaines possibles, vous devez préparer soigneusement une stratégie de sauvegarde et de restauration de vos données **préalablement**.
|
||||||
|
|
||||||
|
Chaque entreprise a différentes ressources disponibles et les exigences de l'entreprise, donc il n'y a pas de solution universelle pour les sauvegardes et restaurations ClickHouse qui s'adaptera à toutes les situations. Ce qui fonctionne pour un gigaoctet de données ne fonctionnera probablement pas pour des dizaines de pétaoctets. Il existe une variété d'approches possibles avec leurs propres avantages et inconvénients, qui sera discuté ci-dessous. C'est une bonne idée d'utiliser plusieurs approches au lieu d'un seul, afin de compenser leurs lacunes.
|
||||||
|
|
||||||
|
!!! note "Note"
|
||||||
|
Gardez à l'esprit que si vous avez sauvegardé quelque chose et que vous n'avez jamais essayé de le restaurer, il est probable que la restauration ne fonctionnera pas correctement lorsque vous en avez réellement besoin (ou du moins cela prendra plus de temps que ce que les entreprises peuvent tolérer). Donc, quelle que soit l'approche de sauvegarde que vous choisissez, assurez-vous d'automatiser le processus de restauration et de le pratiquer sur un cluster clickhouse de rechange régulièrement.
|
||||||
|
|
||||||
|
## Dupliquer Les Données Sources Ailleurs {#duplicating-source-data-somewhere-else}
|
||||||
|
|
||||||
|
Souvent, les données qui sont ingérées dans ClickHouse sont livrées via une sorte de file d'attente persistante, telle que [Apache Kafka](https://kafka.apache.org). Dans ce cas, il est possible de configurer un ensemble supplémentaire d'abonnés qui liront le même flux de données pendant qu'il est écrit dans ClickHouse et le stockeront dans un stockage à froid quelque part. La plupart des entreprises ont déjà un stockage à froid recommandé par défaut, qui pourrait être un magasin d'objets ou un système de fichiers distribué comme [HDFS](https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html).
|
||||||
|
|
||||||
|
## Instantanés Du Système De Fichiers {#filesystem-snapshots}
|
||||||
|
|
||||||
|
Certains systèmes de fichiers locaux fournissent des fonctionnalités d'instantané (par exemple, [ZFS](https://en.wikipedia.org/wiki/ZFS)), mais ils pourraient ne pas être le meilleur choix pour servir les requêtes actives. Une solution possible consiste à créer des répliques supplémentaires avec ce type de système de fichiers et à les exclure du [Distribué](table_engines/distributed.md) les tables qui sont utilisés pour `SELECT` requête. Les instantanés sur ces répliques seront hors de portée des requêtes qui modifient les données. En prime, ces répliques pourraient avoir des configurations matérielles spéciales avec plus de disques attachés par serveur, ce qui serait rentable.
|
||||||
|
|
||||||
|
## clickhouse-copieur {#clickhouse-copier}
|
||||||
|
|
||||||
|
[clickhouse-copieur](utils/clickhouse-copier.md) est un outil polyvalent qui a été initialement créé pour re-shard petaoctet - sized tables. Il peut également être utilisé à des fins de sauvegarde et de restauration car il copie de manière fiable les données entre les tables ClickHouse et les clusters.
|
||||||
|
|
||||||
|
Pour de plus petits volumes de données, un simple `INSERT INTO ... SELECT ...` les tables distantes peuvent également fonctionner.
|
||||||
|
|
||||||
|
## Manipulations avec des pièces {#manipulations-with-parts}
|
||||||
|
|
||||||
|
ClickHouse permet d'utiliser le `ALTER TABLE ... FREEZE PARTITION ...` requête pour créer une copie locale des partitions de table. Ceci est implémenté en utilisant des liens durs vers le `/var/lib/clickhouse/shadow/` dossier, donc il ne consomme généralement pas d'espace disque supplémentaire pour les anciennes données. Les copies créées des fichiers ne sont pas gérées par clickhouse server, vous pouvez donc les laisser là: vous aurez une sauvegarde simple qui ne nécessite aucun système externe supplémentaire, mais elle sera toujours sujette à des problèmes matériels. Pour cette raison, il est préférable de les copier à distance vers un autre emplacement, puis de supprimer les copies locales. Les systèmes de fichiers distribués et les magasins d'objets sont toujours une bonne option pour cela, mais les serveurs de fichiers attachés normaux avec une capacité suffisante peuvent également fonctionner (dans ce cas, le transfert se fera via le système de fichiers réseau ou peut-être [rsync](https://en.wikipedia.org/wiki/Rsync)).
|
||||||
|
|
||||||
|
Pour plus d'informations sur les requêtes liées aux manipulations de [Modifier la documentation](../query_language/alter.md#alter_manipulations-with-partitions).
|
||||||
|
|
||||||
|
Un outil tiers est disponible pour automatiser cette approche: [clickhouse-sauvegarde](https://github.com/AlexAkulov/clickhouse-backup).
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/operations/backup/) <!--hide-->
|
54
docs/fr/operations/configuration_files.md
Normal file
54
docs/fr/operations/configuration_files.md
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Fichiers De Configuration {#configuration_files}
|
||||||
|
|
||||||
|
ClickHouse prend en charge la gestion de la configuration multi-fichiers. Le fichier de configuration du serveur principal est `/etc/clickhouse-server/config.xml`. Les autres fichiers doivent être dans le `/etc/clickhouse-server/config.d` répertoire.
|
||||||
|
|
||||||
|
!!! note "Note"
|
||||||
|
Tous les fichiers de configuration doivent être au format XML. Aussi, ils doivent avoir le même élément racine, généralement `<yandex>`.
|
||||||
|
|
||||||
|
Certains paramètres spécifiés dans le fichier de configuration principal peuvent être remplacés dans d'autres fichiers de configuration. Le `replace` ou `remove` les attributs peuvent être spécifiés pour les éléments de ces fichiers de configuration.
|
||||||
|
|
||||||
|
Si ni l'un ni l'autre n'est spécifié, il combine le contenu des éléments de manière récursive, remplaçant les valeurs des enfants en double.
|
||||||
|
|
||||||
|
Si `replace` est spécifié, il remplace l'élément entier par celui spécifié.
|
||||||
|
|
||||||
|
Si `remove` est spécifié, il supprime l'élément.
|
||||||
|
|
||||||
|
La configuration peut également définir “substitutions”. Si un élément a le `incl` attribut, la substitution correspondante du fichier sera utilisée comme valeur. Par défaut, le chemin d'accès au fichier avec des substitutions est `/etc/metrika.xml`. Ceci peut être changé dans le [include\_from](server_settings/settings.md#server_settings-include_from) élément dans la configuration du serveur. Les valeurs de substitution sont spécifiées dans `/yandex/substitution_name` les éléments de ce fichier. Si une substitution spécifiée dans `incl` n'existe pas, il est enregistré dans le journal. Pour empêcher ClickHouse de consigner les substitutions manquantes, spécifiez `optional="true"` attribut (par exemple, les paramètres de [macro](server_settings/settings.md)).
|
||||||
|
|
||||||
|
Les Substitutions peuvent également être effectuées à partir de ZooKeeper. Pour ce faire, spécifiez l'attribut `from_zk = "/path/to/node"`. La valeur de l'élément est remplacé par le contenu du noeud au `/path/to/node` dans ZooKeeper. Vous pouvez également placer un sous-arbre XML entier sur le nœud ZooKeeper et il sera entièrement inséré dans l'élément source.
|
||||||
|
|
||||||
|
Le `config.xml` le fichier peut spécifier une configuration distincte avec les paramètres utilisateur, les profils et les quotas. Le chemin relatif à cette configuration est défini dans `users_config` élément. Par défaut, il est `users.xml`. Si `users_config` est omis, les paramètres utilisateur, les profils et les quotas sont `config.xml`.
|
||||||
|
|
||||||
|
La configuration des utilisateurs peut être divisée en fichiers séparés similaires à `config.xml` et `config.d/`.
|
||||||
|
Nom du répertoire est défini comme `users_config` sans `.xml` postfix concaténé avec `.d`.
|
||||||
|
Répertoire `users.d` est utilisé par défaut, comme `users_config` par défaut `users.xml`.
|
||||||
|
Par exemple, vous pouvez avoir séparé fichier de configuration pour chaque utilisateur comme ceci:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ cat /etc/clickhouse-server/users.d/alice.xml
|
||||||
|
```
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<yandex>
|
||||||
|
<users>
|
||||||
|
<alice>
|
||||||
|
<profile>analytics</profile>
|
||||||
|
<networks>
|
||||||
|
<ip>::/0</ip>
|
||||||
|
</networks>
|
||||||
|
<password_sha256_hex>...</password_sha256_hex>
|
||||||
|
<quota>analytics</quota>
|
||||||
|
</alice>
|
||||||
|
</users>
|
||||||
|
</yandex>
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour chaque fichier de configuration, le serveur génère également `file-preprocessed.xml` les fichiers lors du démarrage. Ces fichiers contiennent toutes les remplacements et des remplacements, et ils sont destinés à l'usage informatif. Si des substitutions ZooKeeper ont été utilisées dans les fichiers de configuration mais que ZooKeeper n'est pas disponible au démarrage du serveur, le serveur charge la configuration à partir du fichier prétraité.
|
||||||
|
|
||||||
|
Le serveur suit les changements dans les fichiers de configuration, ainsi que les fichiers et les nœuds ZooKeeper utilisés lors des substitutions et des remplacements, et recharge les paramètres pour les utilisateurs et les clusters à la volée. Cela signifie que vous pouvez modifier le cluster, les utilisateurs et leurs paramètres sans redémarrer le serveur.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/operations/configuration_files/) <!--hide-->
|
24
docs/fr/operations/index.md
Normal file
24
docs/fr/operations/index.md
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Opérations {#operations}
|
||||||
|
|
||||||
|
Le manuel d'exploitation de ClickHouse comprend les principales sections suivantes:
|
||||||
|
|
||||||
|
- [Exigence](requirements.md)
|
||||||
|
- [Surveiller](monitoring.md)
|
||||||
|
- [Dépannage](troubleshooting.md)
|
||||||
|
- [Recommandations D'Utilisation](tips.md)
|
||||||
|
- [Procédure De Mise À Jour](update.md)
|
||||||
|
- [Les Droits D'Accès](access_rights.md)
|
||||||
|
- [La Sauvegarde Des Données](backup.md)
|
||||||
|
- [Fichiers De Configuration](configuration_files.md)
|
||||||
|
- [Quota](quotas.md)
|
||||||
|
- [Les Tables Système](system_tables.md)
|
||||||
|
- [Paramètres De Configuration Du Serveur](server_settings/index.md)
|
||||||
|
- [Comment Tester Votre Matériel Avec ClickHouse](performance_test.md)
|
||||||
|
- [Paramètre](settings/index.md)
|
||||||
|
- [Utilitaire](utils/index.md)
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/operations/) <!--hide-->
|
41
docs/fr/operations/monitoring.md
Normal file
41
docs/fr/operations/monitoring.md
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Surveiller {#monitoring}
|
||||||
|
|
||||||
|
Vous pouvez surveiller:
|
||||||
|
|
||||||
|
- L'utilisation des ressources matérielles.
|
||||||
|
- Statistiques du serveur ClickHouse.
|
||||||
|
|
||||||
|
## L'Utilisation Des Ressources {#resource-utilization}
|
||||||
|
|
||||||
|
ClickHouse ne surveille pas l'état des ressources matérielles par lui-même.
|
||||||
|
|
||||||
|
Il est fortement recommandé de configurer la surveillance de:
|
||||||
|
|
||||||
|
- Charge et température sur les processeurs.
|
||||||
|
|
||||||
|
Vous pouvez utiliser [dmesg](https://en.wikipedia.org/wiki/Dmesg), [turbostat](https://www.linux.org/docs/man8/turbostat.html) ou d'autres instruments.
|
||||||
|
|
||||||
|
- Utilisation du système de stockage, de la RAM et du réseau.
|
||||||
|
|
||||||
|
## Métriques Du Serveur ClickHouse {#clickhouse-server-metrics}
|
||||||
|
|
||||||
|
Clickhouse server a des instruments embarqués pour la surveillance de l'auto-état.
|
||||||
|
|
||||||
|
Pour suivre les événements du serveur, utilisez les journaux du serveur. Voir la [enregistreur](server_settings/settings.md#server_settings-logger) section du fichier de configuration.
|
||||||
|
|
||||||
|
Clickhouse recueille:
|
||||||
|
|
||||||
|
- Différentes mesures de la façon dont le serveur utilise les ressources de calcul.
|
||||||
|
- Statistiques communes sur le traitement des requêtes.
|
||||||
|
|
||||||
|
Vous pouvez trouver des mesures dans le [système.métrique](system_tables.md#system_tables-metrics), [système.événement](system_tables.md#system_tables-events), et [système.asynchronous\_metrics](system_tables.md#system_tables-asynchronous_metrics) table.
|
||||||
|
|
||||||
|
Vous pouvez configurer ClickHouse pour exporter des métriques vers [Graphite](https://github.com/graphite-project). Voir la [Graphite section](server_settings/settings.md#server_settings-graphite) dans le fichier de configuration du serveur ClickHouse. Avant de configurer l'exportation des métriques, vous devez configurer Graphite en suivant leur [guide](https://graphite.readthedocs.io/en/latest/install.html).
|
||||||
|
|
||||||
|
De plus, vous pouvez surveiller la disponibilité du serveur via L'API HTTP. Envoyer la `HTTP GET` demande à `/ping`. Si le serveur est disponible, il répond avec `200 OK`.
|
||||||
|
|
||||||
|
Pour surveiller les serveurs dans une configuration de cluster, vous devez [max\_replica\_delay\_for\_distributed\_queries](settings/settings.md#settings-max_replica_delay_for_distributed_queries) paramètre et utiliser la ressource HTTP `/replicas_status`. Une demande de `/replicas_status` retourner `200 OK` si la réplique est disponible et n'est pas retardé derrière les autres réplicas. Si une réplique est retardée, elle revient `503 HTTP_SERVICE_UNAVAILABLE` avec des informations sur l'écart.
|
61
docs/fr/operations/performance/sampling_query_profiler.md
Normal file
61
docs/fr/operations/performance/sampling_query_profiler.md
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Échantillonnage Du Profileur De Requête {#sampling-query-profiler}
|
||||||
|
|
||||||
|
ClickHouse exécute un profileur d'échantillonnage qui permet d'analyser l'exécution des requêtes. En utilisant profiler, vous pouvez trouver des routines de code source qui ont utilisé le plus fréquemment lors de l'exécution de la requête. Vous pouvez suivre le temps CPU et le temps d'horloge murale passé, y compris le temps d'inactivité.
|
||||||
|
|
||||||
|
Utilisation du générateur de profils:
|
||||||
|
|
||||||
|
- Installation de la [trace\_log](../server_settings/settings.md#server_settings-trace_log) la section de la configuration du serveur.
|
||||||
|
|
||||||
|
Cette section configure le [trace\_log](../system_tables.md#system_tables-trace_log) tableau système contenant les résultats du fonctionnement du profileur. Il est configuré par défaut. Rappelez-vous que les données de ce tableau est valable que pour un serveur en cours d'exécution. Après le redémarrage du serveur, ClickHouse ne nettoie pas la table et toute l'adresse de mémoire virtuelle stockée peut devenir invalide.
|
||||||
|
|
||||||
|
- Installation de la [query\_profiler\_cpu\_time\_period\_ns](../settings/settings.md#query_profiler_cpu_time_period_ns) ou [query\_profiler\_real\_time\_period\_ns](../settings/settings.md#query_profiler_real_time_period_ns) paramètre. Les deux paramètres peuvent être utilisés simultanément.
|
||||||
|
|
||||||
|
Ces paramètres vous permettent de configurer les minuteries du profileur. Comme il s'agit des paramètres de session, vous pouvez obtenir une fréquence d'échantillonnage différente pour l'ensemble du serveur, les utilisateurs individuels ou les profils d'utilisateurs, pour votre session interactive et pour chaque requête individuelle.
|
||||||
|
|
||||||
|
La fréquence d'échantillonnage par défaut est d'un échantillon par seconde et le processeur et les minuteries réelles sont activés. Cette fréquence permet de collecter suffisamment d'informations sur le cluster ClickHouse. En même temps, en travaillant avec cette fréquence, profiler n'affecte pas les performances du serveur ClickHouse. Si vous avez besoin de profiler chaque requête individuelle, essayez d'utiliser une fréquence d'échantillonnage plus élevée.
|
||||||
|
|
||||||
|
Pour analyser les `trace_log` système de table:
|
||||||
|
|
||||||
|
- Installer le `clickhouse-common-static-dbg` paquet. Voir [Installer à partir de paquets DEB](../../getting_started/install.md#install-from-deb-packages).
|
||||||
|
|
||||||
|
- Autoriser les fonctions d'introspection par [allow\_introspection\_functions](../settings/settings.md#settings-allow_introspection_functions) paramètre.
|
||||||
|
|
||||||
|
Pour des raisons de sécurité, les fonctions d'introspection sont désactivées par défaut.
|
||||||
|
|
||||||
|
- L'utilisation de la `addressToLine`, `addressToSymbol` et `demangle` [fonctions d'introspection](../../query_language/functions/introspection.md) pour obtenir les noms de fonctions et leurs positions dans le code ClickHouse. Pour obtenir un profil pour une requête, vous devez agréger les données du `trace_log` table. Vous pouvez agréger des données par des fonctions individuelles ou par l'ensemble des traces de la pile.
|
||||||
|
|
||||||
|
Si vous avez besoin de visualiser `trace_log` info, essayez [flamegraph](../../interfaces/third-party/gui/#clickhouse-flamegraph) et [speedscope](https://github.com/laplab/clickhouse-speedscope).
|
||||||
|
|
||||||
|
## Exemple {#example}
|
||||||
|
|
||||||
|
Dans cet exemple, nous:
|
||||||
|
|
||||||
|
- Filtrage `trace_log` données par un identifiant de requête et la date actuelle.
|
||||||
|
|
||||||
|
- Agrégation par trace de pile.
|
||||||
|
|
||||||
|
- En utilisant les fonctions d'introspection, nous obtiendrons un rapport de:
|
||||||
|
|
||||||
|
- Noms des symboles et des fonctions de code source correspondantes.
|
||||||
|
- Emplacements de code Source de ces fonctions.
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SELECT
|
||||||
|
count(),
|
||||||
|
arrayStringConcat(arrayMap(x -> concat(demangle(addressToSymbol(x)), '\n ', addressToLine(x)), trace), '\n') AS sym
|
||||||
|
FROM system.trace_log
|
||||||
|
WHERE (query_id = 'ebca3574-ad0a-400a-9cbc-dca382f5998c') AND (event_date = today())
|
||||||
|
GROUP BY trace
|
||||||
|
ORDER BY count() DESC
|
||||||
|
LIMIT 10
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
{% include "operations/performance/sampling_query_profiler_example_result.txt" %}
|
||||||
|
```
|
@ -0,0 +1 @@
|
|||||||
|
../../../en/operations/performance/sampling_query_profiler_example_result.txt
|
79
docs/fr/operations/performance_test.md
Normal file
79
docs/fr/operations/performance_test.md
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Comment Tester Votre Matériel Avec ClickHouse {#how-to-test-your-hardware-with-clickhouse}
|
||||||
|
|
||||||
|
Avec cette instruction, vous pouvez exécuter le test de performance clickhouse de base sur n'importe quel serveur sans installation de paquets ClickHouse.
|
||||||
|
|
||||||
|
1. Aller à “commits” page: https://github.com/ClickHouse/ClickHouse/commits/master
|
||||||
|
|
||||||
|
2. Cliquez sur la première coche verte ou croix rouge avec vert “ClickHouse Build Check” et cliquez sur le “Details” lien de proximité “ClickHouse Build Check”.
|
||||||
|
|
||||||
|
3. Copiez le lien à “clickhouse” binaire pour amd64 ou aarch64.
|
||||||
|
|
||||||
|
4. ssh sur le serveur et le télécharger avec wget:
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
# For amd64:
|
||||||
|
wget https://clickhouse-builds.s3.yandex.net/0/00ba767f5d2a929394ea3be193b1f79074a1c4bc/1578163263_binary/clickhouse
|
||||||
|
# For aarch64:
|
||||||
|
wget https://clickhouse-builds.s3.yandex.net/0/00ba767f5d2a929394ea3be193b1f79074a1c4bc/1578161264_binary/clickhouse
|
||||||
|
# Then do:
|
||||||
|
chmod a+x clickhouse
|
||||||
|
|
||||||
|
1. Télécharger configs:
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
wget https://raw.githubusercontent.com/ClickHouse/ClickHouse/master/dbms/programs/server/config.xml
|
||||||
|
wget https://raw.githubusercontent.com/ClickHouse/ClickHouse/master/dbms/programs/server/users.xml
|
||||||
|
mkdir config.d
|
||||||
|
wget https://raw.githubusercontent.com/ClickHouse/ClickHouse/master/dbms/programs/server/config.d/path.xml -O config.d/path.xml
|
||||||
|
wget https://raw.githubusercontent.com/ClickHouse/ClickHouse/master/dbms/programs/server/config.d/log_to_console.xml -O config.d/log_to_console.xml
|
||||||
|
|
||||||
|
1. Télécharger des fichiers de référence:
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
wget https://raw.githubusercontent.com/ClickHouse/ClickHouse/master/dbms/benchmark/clickhouse/benchmark-new.sh
|
||||||
|
chmod a+x benchmark-new.sh
|
||||||
|
wget https://raw.githubusercontent.com/ClickHouse/ClickHouse/master/dbms/benchmark/clickhouse/queries.sql
|
||||||
|
|
||||||
|
1. Télécharger les données de test selon le [Yandex.Metrica dataset](../getting_started/example_datasets/metrica.md) instruction (“hits” tableau contenant 100 millions de lignes).
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
wget https://clickhouse-datasets.s3.yandex.net/hits/partitions/hits_100m_obfuscated_v1.tar.xz
|
||||||
|
tar xvf hits_100m_obfuscated_v1.tar.xz -C .
|
||||||
|
mv hits_100m_obfuscated_v1/* .
|
||||||
|
|
||||||
|
1. Exécuter le serveur:
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
./clickhouse server
|
||||||
|
|
||||||
|
1. Vérifiez les données: ssh au serveur dans un autre terminal
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
./clickhouse client --query "SELECT count() FROM hits_100m_obfuscated"
|
||||||
|
100000000
|
||||||
|
|
||||||
|
1. Modifier le benchmark-new.sh, changement “clickhouse-client” de “./clickhouse client” et d'ajouter “–max\_memory\_usage 100000000000” paramètre.
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
mcedit benchmark-new.sh
|
||||||
|
|
||||||
|
1. Exécutez le test:
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
./benchmark-new.sh hits_100m_obfuscated
|
||||||
|
|
||||||
|
1. Envoyez les numéros et les informations sur votre configuration matérielle à clickhouse-feedback@yandex-team.com
|
||||||
|
|
||||||
|
Tous les résultats sont publiés ici: https://clickhouse.tech / benchmark\_hardware.HTML
|
109
docs/fr/operations/quotas.md
Normal file
109
docs/fr/operations/quotas.md
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Quota {#quotas}
|
||||||
|
|
||||||
|
Les Quotas permettent de limiter l'utilisation des ressources au cours d'une période de temps, ou tout simplement suivre l'utilisation des ressources.
|
||||||
|
Les Quotas sont configurés dans la configuration utilisateur. Ce n'est généralement ‘users.xml’.
|
||||||
|
|
||||||
|
Le système dispose également d'une fonctionnalité pour limiter la complexité d'une seule requête. Voir la section “Restrictions on query complexity”).
|
||||||
|
|
||||||
|
Contrairement aux restrictions de complexité des requêtes, les quotas:
|
||||||
|
|
||||||
|
- Placez des restrictions sur un ensemble de requêtes qui peuvent être exécutées sur une période de temps, au lieu de limiter une seule requête.
|
||||||
|
- Compte des ressources dépensées sur tous les serveurs distants pour le traitement des requêtes distribuées.
|
||||||
|
|
||||||
|
Regardons la section de la ‘users.xml’ fichier qui définit les quotas.
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<!-- Quotas -->
|
||||||
|
<quotas>
|
||||||
|
<!-- Quota name. -->
|
||||||
|
<default>
|
||||||
|
<!-- Restrictions for a time period. You can set many intervals with different restrictions. -->
|
||||||
|
<interval>
|
||||||
|
<!-- Length of the interval. -->
|
||||||
|
<duration>3600</duration>
|
||||||
|
|
||||||
|
<!-- Unlimited. Just collect data for the specified time interval. -->
|
||||||
|
<queries>0</queries>
|
||||||
|
<errors>0</errors>
|
||||||
|
<result_rows>0</result_rows>
|
||||||
|
<read_rows>0</read_rows>
|
||||||
|
<execution_time>0</execution_time>
|
||||||
|
</interval>
|
||||||
|
</default>
|
||||||
|
```
|
||||||
|
|
||||||
|
Par défaut, le quota suit simplement la consommation de ressources pour chaque heure, sans limiter l'utilisation.
|
||||||
|
La consommation de ressources calculé pour chaque intervalle est sortie dans le journal du serveur après chaque demande.
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<statbox>
|
||||||
|
<!-- Restrictions for a time period. You can set many intervals with different restrictions. -->
|
||||||
|
<interval>
|
||||||
|
<!-- Length of the interval. -->
|
||||||
|
<duration>3600</duration>
|
||||||
|
|
||||||
|
<queries>1000</queries>
|
||||||
|
<errors>100</errors>
|
||||||
|
<result_rows>1000000000</result_rows>
|
||||||
|
<read_rows>100000000000</read_rows>
|
||||||
|
<execution_time>900</execution_time>
|
||||||
|
</interval>
|
||||||
|
|
||||||
|
<interval>
|
||||||
|
<duration>86400</duration>
|
||||||
|
|
||||||
|
<queries>10000</queries>
|
||||||
|
<errors>1000</errors>
|
||||||
|
<result_rows>5000000000</result_rows>
|
||||||
|
<read_rows>500000000000</read_rows>
|
||||||
|
<execution_time>7200</execution_time>
|
||||||
|
</interval>
|
||||||
|
</statbox>
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour l' ‘statbox’ quota, restrictions sont fixées pour toutes les heures et pour toutes les 24 heures (86 400 secondes). L'intervalle de temps est compté à partir d'un moment fixe défini par l'implémentation. En d'autres termes, l'intervalle de 24 heures ne commence pas nécessairement à minuit.
|
||||||
|
|
||||||
|
Lorsque l'intervalle se termine, toutes les valeurs collectées sont effacées. Pour l'heure suivante, le calcul du quota recommence.
|
||||||
|
|
||||||
|
Voici les montants qui peuvent être restreint:
|
||||||
|
|
||||||
|
`queries` – The total number of requests.
|
||||||
|
|
||||||
|
`errors` – The number of queries that threw an exception.
|
||||||
|
|
||||||
|
`result_rows` – The total number of rows given as the result.
|
||||||
|
|
||||||
|
`read_rows` – The total number of source rows read from tables for running the query, on all remote servers.
|
||||||
|
|
||||||
|
`execution_time` – The total query execution time, in seconds (wall time).
|
||||||
|
|
||||||
|
Si la limite est dépassée pendant au moins un intervalle de temps, une exception est levée avec un texte indiquant quelle restriction a été dépassée, pour quel intervalle et quand le nouvel intervalle commence (lorsque les requêtes peuvent être envoyées à nouveau).
|
||||||
|
|
||||||
|
Les Quotas peuvent utiliser le “quota key” fonctionnalité afin de rendre compte des ressources pour plusieurs clés indépendamment. Voici un exemple de ce:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<!-- For the global reports designer. -->
|
||||||
|
<web_global>
|
||||||
|
<!-- keyed – The quota_key "key" is passed in the query parameter,
|
||||||
|
and the quota is tracked separately for each key value.
|
||||||
|
For example, you can pass a Yandex.Metrica username as the key,
|
||||||
|
so the quota will be counted separately for each username.
|
||||||
|
Using keys makes sense only if quota_key is transmitted by the program, not by a user.
|
||||||
|
|
||||||
|
You can also write <keyed_by_ip /> so the IP address is used as the quota key.
|
||||||
|
(But keep in mind that users can change the IPv6 address fairly easily.)
|
||||||
|
-->
|
||||||
|
<keyed />
|
||||||
|
```
|
||||||
|
|
||||||
|
Le quota est attribué aux utilisateurs dans le ‘users’ section de la configuration. Voir la section “Access rights”.
|
||||||
|
|
||||||
|
Pour le traitement des requêtes distribuées, les montants accumulés sont stockés sur le serveur demandeur. Donc, si l'utilisateur se rend sur un autre serveur, le quota y sera “start over”.
|
||||||
|
|
||||||
|
Lorsque le serveur est redémarré, les quotas sont réinitialisés.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/operations/quotas/) <!--hide-->
|
58
docs/fr/operations/requirements.md
Normal file
58
docs/fr/operations/requirements.md
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Exigence {#requirements}
|
||||||
|
|
||||||
|
## CPU {#cpu}
|
||||||
|
|
||||||
|
Pour l'installation à partir de paquets deb prédéfinis, utilisez un processeur avec l'architecture x86\_64 et la prise en charge des instructions SSE 4.2. Pour exécuter ClickHouse avec des processeurs qui ne prennent pas en charge SSE 4.2 ou qui ont une architecture AArch64 ou PowerPC64LE, vous devez créer ClickHouse à partir de sources.
|
||||||
|
|
||||||
|
ClickHouse implémente le traitement parallèle des données et utilise toutes les ressources matérielles disponibles. Lors du choix d'un processeur, tenez compte du fait que ClickHouse fonctionne plus efficacement dans les configurations avec un grand nombre de cœurs mais une fréquence d'horloge plus faible que dans les configurations avec moins de cœurs et une fréquence d'horloge plus élevée. Par exemple, 16 cœurs avec 2600 MHz est préférable à 8 cœurs avec 3600 MHz.
|
||||||
|
|
||||||
|
L'utilisation de **Turbo Boost** et **la technologie hyper-threading** technologies est recommandé. Il améliore sensiblement les performances avec une charge typique.
|
||||||
|
|
||||||
|
## RAM {#ram}
|
||||||
|
|
||||||
|
Nous vous recommandons d'utiliser un minimum de 4 Go de RAM afin d'effectuer des requêtes non triviales. Le serveur ClickHouse peut fonctionner avec une quantité beaucoup plus petite de RAM, mais il nécessite de la mémoire pour traiter les requêtes.
|
||||||
|
|
||||||
|
Le volume de RAM requis dépend de:
|
||||||
|
|
||||||
|
- La complexité des requêtes.
|
||||||
|
- La quantité de données traitées dans les requêtes.
|
||||||
|
|
||||||
|
Pour calculer le volume de RAM requis, vous devez estimer la taille des données temporaires pour [GROUP BY](../query_language/select.md#select-group-by-clause), [DISTINCT](../query_language/select.md#select-distinct), [JOIN](../query_language/select.md#select-join) et d'autres opérations que vous utilisez.
|
||||||
|
|
||||||
|
ClickHouse peut utiliser la mémoire externe pour les données temporaires. Voir [Groupe par dans la mémoire externe](../query_language/select.md#select-group-by-in-external-memory) pour plus de détails.
|
||||||
|
|
||||||
|
## Fichier D'Échange {#swap-file}
|
||||||
|
|
||||||
|
Désactiver le fichier d'échange pour les environnements de production.
|
||||||
|
|
||||||
|
## Sous-Système De Stockage {#storage-subsystem}
|
||||||
|
|
||||||
|
Vous devez avoir 2 Go d'espace disque libre pour installer ClickHouse.
|
||||||
|
|
||||||
|
Le volume de stockage requis pour vos données doit être calculé séparément. L'évaluation devrait inclure:
|
||||||
|
|
||||||
|
- Estimation du volume de données.
|
||||||
|
|
||||||
|
Vous pouvez prendre un échantillon des données et obtenir la taille moyenne d'une ligne. Ensuite, multipliez la valeur par le nombre de lignes que vous souhaitez stocker.
|
||||||
|
|
||||||
|
- Le coefficient de compression des données.
|
||||||
|
|
||||||
|
Pour estimer le coefficient de compression des données, chargez un échantillon de vos données dans ClickHouse et comparez la taille réelle des données avec la taille de la table stockée. Par exemple, les données de flux de clics sont généralement compressées de 6 à 10 fois.
|
||||||
|
|
||||||
|
Pour calculer le volume final de données à stocker, appliquez le coefficient de compression au volume de données estimé. Si vous prévoyez de stocker des données dans plusieurs répliques, puis multipliez le volume estimé par le nombre de réplicas.
|
||||||
|
|
||||||
|
## Réseau {#network}
|
||||||
|
|
||||||
|
Si possible, utilisez des réseaux de classe 10G ou supérieure.
|
||||||
|
|
||||||
|
La bande passante du réseau est essentielle pour traiter les requêtes distribuées avec une grande quantité de données intermédiaires. En outre, la vitesse du réseau affecte les processus de réplication.
|
||||||
|
|
||||||
|
## Logiciel {#software}
|
||||||
|
|
||||||
|
ClickHouse est développé pour la famille de systèmes D'exploitation Linux. La distribution Linux recommandée est Ubuntu. Le `tzdata` paquet doit être installé dans le système.
|
||||||
|
|
||||||
|
ClickHouse peut également fonctionner dans d'autres familles de systèmes d'exploitation. Voir les détails dans le [Prise en main](../getting_started/index.md) section de la documentation.
|
15
docs/fr/operations/server_settings/index.md
Normal file
15
docs/fr/operations/server_settings/index.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Paramètres de configuration du serveur {#server-settings}
|
||||||
|
|
||||||
|
Cette section contient des descriptions des paramètres du serveur qui ne peuvent pas être modifiés au niveau de la session ou de la requête.
|
||||||
|
|
||||||
|
Ces paramètres sont stockés dans la `config.xml` fichier sur le serveur ClickHouse.
|
||||||
|
|
||||||
|
D'autres paramètres sont décrits dans le “[Paramètre](../settings/index.md#settings)” section.
|
||||||
|
|
||||||
|
Avant d'étudier les paramètres, lire la [Fichiers de Configuration](../configuration_files.md#configuration_files) section et notez l'utilisation de substitutions (le `incl` et `optional` attribut).
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/operations/server_settings/) <!--hide-->
|
869
docs/fr/operations/server_settings/settings.md
Normal file
869
docs/fr/operations/server_settings/settings.md
Normal file
@ -0,0 +1,869 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Les Paramètres Du Serveur {#server-settings}
|
||||||
|
|
||||||
|
## builtin\_dictionaries\_reload\_interval {#builtin-dictionaries-reload-interval}
|
||||||
|
|
||||||
|
L'intervalle en secondes avant de recharger les dictionnaires intégrés.
|
||||||
|
|
||||||
|
Clickhouse recharge les dictionnaires intégrés toutes les X secondes. Cela permet d'éditer des dictionnaires “on the fly” sans redémarrer le serveur.
|
||||||
|
|
||||||
|
Valeur par défaut: 3600.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<builtin_dictionaries_reload_interval>3600</builtin_dictionaries_reload_interval>
|
||||||
|
```
|
||||||
|
|
||||||
|
## compression {#server-settings-compression}
|
||||||
|
|
||||||
|
Paramètres de compression de données pour [MergeTree](../table_engines/mergetree.md)-tables de moteur.
|
||||||
|
|
||||||
|
!!! warning "Avertissement"
|
||||||
|
Ne l'utilisez pas si vous venez de commencer à utiliser ClickHouse.
|
||||||
|
|
||||||
|
Modèle de Configuration:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<compression>
|
||||||
|
<case>
|
||||||
|
<min_part_size>...</min_part_size>
|
||||||
|
<min_part_size_ratio>...</min_part_size_ratio>
|
||||||
|
<method>...</method>
|
||||||
|
</case>
|
||||||
|
...
|
||||||
|
</compression>
|
||||||
|
```
|
||||||
|
|
||||||
|
`<case>` Fields:
|
||||||
|
|
||||||
|
- `min_part_size` – The minimum size of a data part.
|
||||||
|
- `min_part_size_ratio` – The ratio of the data part size to the table size.
|
||||||
|
- `method` – Compression method. Acceptable values: `lz4` ou `zstd`.
|
||||||
|
|
||||||
|
Vous pouvez configurer plusieurs `<case>` section.
|
||||||
|
|
||||||
|
Actions lorsque les conditions sont remplies:
|
||||||
|
|
||||||
|
- Si une partie de données correspond à un ensemble de conditions, ClickHouse utilise la méthode de compression spécifiée.
|
||||||
|
- Si une partie de données correspond à plusieurs ensembles de conditions, ClickHouse utilise le premier ensemble de conditions correspondant.
|
||||||
|
|
||||||
|
Si aucune condition n'est remplie pour une partie de données, ClickHouse utilise `lz4` compression.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<compression incl="clickhouse_compression">
|
||||||
|
<case>
|
||||||
|
<min_part_size>10000000000</min_part_size>
|
||||||
|
<min_part_size_ratio>0.01</min_part_size_ratio>
|
||||||
|
<method>zstd</method>
|
||||||
|
</case>
|
||||||
|
</compression>
|
||||||
|
```
|
||||||
|
|
||||||
|
## default\_database {#default-database}
|
||||||
|
|
||||||
|
La base de données par défaut.
|
||||||
|
|
||||||
|
Pour obtenir une liste de bases de données, utilisez la [SHOW DATABASES](../../query_language/show.md#show-databases) requête.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<default_database>default</default_database>
|
||||||
|
```
|
||||||
|
|
||||||
|
## default\_profile {#default-profile}
|
||||||
|
|
||||||
|
Profil des paramètres par défaut.
|
||||||
|
|
||||||
|
Les paramètres des profils sont situés dans le fichier spécifié dans le paramètre `user_config`.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<default_profile>default</default_profile>
|
||||||
|
```
|
||||||
|
|
||||||
|
## dictionaries\_config {#server_settings-dictionaries_config}
|
||||||
|
|
||||||
|
Chemin d'accès au fichier de configuration des dictionnaires externes.
|
||||||
|
|
||||||
|
Chemin:
|
||||||
|
|
||||||
|
- Spécifiez le chemin absolu ou le chemin relatif au fichier de configuration du serveur.
|
||||||
|
- Le chemin peut contenir des caractères génériques \* et ?.
|
||||||
|
|
||||||
|
Voir aussi “[Dictionnaires externes](../../query_language/dicts/external_dicts.md)”.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<dictionaries_config>*_dictionary.xml</dictionaries_config>
|
||||||
|
```
|
||||||
|
|
||||||
|
## dictionaries\_lazy\_load {#server_settings-dictionaries_lazy_load}
|
||||||
|
|
||||||
|
Chargement paresseux des dictionnaires.
|
||||||
|
|
||||||
|
Si `true` chaque dictionnaire est créé lors de la première utilisation. Si la création du dictionnaire a échoué, la fonction qui utilisait le dictionnaire lève une exception.
|
||||||
|
|
||||||
|
Si `false`, tous les dictionnaires sont créés lorsque le serveur démarre, et si il y a une erreur, le serveur s'arrête.
|
||||||
|
|
||||||
|
La valeur par défaut est `true`.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<dictionaries_lazy_load>true</dictionaries_lazy_load>
|
||||||
|
```
|
||||||
|
|
||||||
|
## format\_schema\_path {#server_settings-format_schema_path}
|
||||||
|
|
||||||
|
Le chemin d'accès au répertoire avec des régimes pour l'entrée de données, tels que les schémas pour l' [CapnProto](../../interfaces/formats.md#capnproto) format.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<!-- Directory containing schema files for various input formats. -->
|
||||||
|
<format_schema_path>format_schemas/</format_schema_path>
|
||||||
|
```
|
||||||
|
|
||||||
|
## graphite {#server_settings-graphite}
|
||||||
|
|
||||||
|
Envoi de données à [Graphite](https://github.com/graphite-project).
|
||||||
|
|
||||||
|
Paramètre:
|
||||||
|
|
||||||
|
- host – The Graphite server.
|
||||||
|
- port – The port on the Graphite server.
|
||||||
|
- interval – The interval for sending, in seconds.
|
||||||
|
- timeout – The timeout for sending data, in seconds.
|
||||||
|
- root\_path – Prefix for keys.
|
||||||
|
- metrics – Sending data from the [système.métrique](../system_tables.md#system_tables-metrics) table.
|
||||||
|
- events – Sending deltas data accumulated for the time period from the [système.événement](../system_tables.md#system_tables-events) table.
|
||||||
|
- events\_cumulative – Sending cumulative data from the [système.événement](../system_tables.md#system_tables-events) table.
|
||||||
|
- asynchronous\_metrics – Sending data from the [système.asynchronous\_metrics](../system_tables.md#system_tables-asynchronous_metrics) table.
|
||||||
|
|
||||||
|
Vous pouvez configurer plusieurs `<graphite>` clause. Par exemple, vous pouvez l'utiliser pour envoyer des données différentes à différents intervalles.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<graphite>
|
||||||
|
<host>localhost</host>
|
||||||
|
<port>42000</port>
|
||||||
|
<timeout>0.1</timeout>
|
||||||
|
<interval>60</interval>
|
||||||
|
<root_path>one_min</root_path>
|
||||||
|
<metrics>true</metrics>
|
||||||
|
<events>true</events>
|
||||||
|
<events_cumulative>false</events_cumulative>
|
||||||
|
<asynchronous_metrics>true</asynchronous_metrics>
|
||||||
|
</graphite>
|
||||||
|
```
|
||||||
|
|
||||||
|
## graphite\_rollup {#server_settings-graphite-rollup}
|
||||||
|
|
||||||
|
Paramètres pour l'amincissement des données pour le Graphite.
|
||||||
|
|
||||||
|
Pour plus de détails, voir [GraphiteMergeTree](../table_engines/graphitemergetree.md).
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<graphite_rollup_example>
|
||||||
|
<default>
|
||||||
|
<function>max</function>
|
||||||
|
<retention>
|
||||||
|
<age>0</age>
|
||||||
|
<precision>60</precision>
|
||||||
|
</retention>
|
||||||
|
<retention>
|
||||||
|
<age>3600</age>
|
||||||
|
<precision>300</precision>
|
||||||
|
</retention>
|
||||||
|
<retention>
|
||||||
|
<age>86400</age>
|
||||||
|
<precision>3600</precision>
|
||||||
|
</retention>
|
||||||
|
</default>
|
||||||
|
</graphite_rollup_example>
|
||||||
|
```
|
||||||
|
|
||||||
|
## http\_port/https\_port {#http-porthttps-port}
|
||||||
|
|
||||||
|
Port de connexion au serveur via HTTP(S).
|
||||||
|
|
||||||
|
Si `https_port` est spécifié, [openSSL](#server_settings-openssl) doit être configuré.
|
||||||
|
|
||||||
|
Si `http_port` est spécifié, la configuration OpenSSL est ignorée même si elle est définie.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<https>0000</https>
|
||||||
|
```
|
||||||
|
|
||||||
|
## http\_server\_default\_response {#server_settings-http_server_default_response}
|
||||||
|
|
||||||
|
Page affichée par défaut lorsque vous accédez au serveur HTTP(S) ClickHouse.
|
||||||
|
La valeur par défaut est “Ok.” (avec un saut de ligne à la fin)
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
Ouvrir `https://tabix.io/` lors de l'accès à `http://localhost: http_port`.
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<http_server_default_response>
|
||||||
|
<![CDATA[<html ng-app="SMI2"><head><base href="http://ui.tabix.io/"></head><body><div ui-view="" class="content-ui"></div><script src="http://loader.tabix.io/master.js"></script></body></html>]]>
|
||||||
|
</http_server_default_response>
|
||||||
|
```
|
||||||
|
|
||||||
|
## include\_from {#server_settings-include_from}
|
||||||
|
|
||||||
|
Le chemin d'accès au fichier avec des substitutions.
|
||||||
|
|
||||||
|
Pour plus d'informations, consultez la section “[Fichiers de Configuration](../configuration_files.md#configuration_files)”.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<include_from>/etc/metrica.xml</include_from>
|
||||||
|
```
|
||||||
|
|
||||||
|
## interserver\_http\_port {#interserver-http-port}
|
||||||
|
|
||||||
|
Port pour l'échange de données entre les serveurs ClickHouse.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<interserver_http_port>9009</interserver_http_port>
|
||||||
|
```
|
||||||
|
|
||||||
|
## interserver\_http\_host {#interserver-http-host}
|
||||||
|
|
||||||
|
Le nom d'hôte qui peut être utilisé par d'autres serveurs pour accéder à ce serveur.
|
||||||
|
|
||||||
|
Si elle est omise, elle est définie de la même manière que `hostname-f` commande.
|
||||||
|
|
||||||
|
Utile pour rompre avec une interface réseau spécifique.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<interserver_http_host>example.yandex.ru</interserver_http_host>
|
||||||
|
```
|
||||||
|
|
||||||
|
## interserver\_http\_credentials {#server-settings-interserver-http-credentials}
|
||||||
|
|
||||||
|
Le nom d'utilisateur et le mot de passe utilisés pour [réplication](../table_engines/replication.md) avec les moteurs \* répliqués. Ces informations d'identification sont utilisées uniquement pour la communication entre les répliques et ne sont pas liées aux informations d'identification des clients ClickHouse. Le serveur vérifie ces informations d'identification pour la connexion de répliques et utilise les mêmes informations d'identification lors de la connexion à d'autres répliques. Donc, ces informations d'identification doivent être identiques pour tous les réplicas dans un cluster.
|
||||||
|
Par défaut, l'authentification n'est pas utilisé.
|
||||||
|
|
||||||
|
Cette section contient les paramètres suivants:
|
||||||
|
|
||||||
|
- `user` — username.
|
||||||
|
- `password` — password.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<interserver_http_credentials>
|
||||||
|
<user>admin</user>
|
||||||
|
<password>222</password>
|
||||||
|
</interserver_http_credentials>
|
||||||
|
```
|
||||||
|
|
||||||
|
## keep\_alive\_timeout {#keep-alive-timeout}
|
||||||
|
|
||||||
|
Le nombre de secondes que ClickHouse attend pour les demandes entrantes avant de fermer la connexion. Par défaut est de 3 secondes.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<keep_alive_timeout>3</keep_alive_timeout>
|
||||||
|
```
|
||||||
|
|
||||||
|
## listen\_host {#server_settings-listen_host}
|
||||||
|
|
||||||
|
Restriction sur les hôtes dont les demandes peuvent provenir. Si vous voulez que le serveur réponde à tous, spécifiez `::`.
|
||||||
|
|
||||||
|
Exemple:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<listen_host>::1</listen_host>
|
||||||
|
<listen_host>127.0.0.1</listen_host>
|
||||||
|
```
|
||||||
|
|
||||||
|
## enregistreur {#server_settings-logger}
|
||||||
|
|
||||||
|
Paramètres de journalisation.
|
||||||
|
|
||||||
|
Touches:
|
||||||
|
|
||||||
|
- level – Logging level. Acceptable values: `trace`, `debug`, `information`, `warning`, `error`.
|
||||||
|
- log – The log file. Contains all the entries according to `level`.
|
||||||
|
- errorlog – Error log file.
|
||||||
|
- size – Size of the file. Applies to `log`et`errorlog`. Une fois que le fichier atteint `size`, Archives ClickHouse et le renomme, et crée un nouveau fichier journal à sa place.
|
||||||
|
- count – The number of archived log files that ClickHouse stores.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<logger>
|
||||||
|
<level>trace</level>
|
||||||
|
<log>/var/log/clickhouse-server/clickhouse-server.log</log>
|
||||||
|
<errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>
|
||||||
|
<size>1000M</size>
|
||||||
|
<count>10</count>
|
||||||
|
</logger>
|
||||||
|
```
|
||||||
|
|
||||||
|
L'écriture dans le syslog est également prise en charge. Exemple de Config:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<logger>
|
||||||
|
<use_syslog>1</use_syslog>
|
||||||
|
<syslog>
|
||||||
|
<address>syslog.remote:10514</address>
|
||||||
|
<hostname>myhost.local</hostname>
|
||||||
|
<facility>LOG_LOCAL6</facility>
|
||||||
|
<format>syslog</format>
|
||||||
|
</syslog>
|
||||||
|
</logger>
|
||||||
|
```
|
||||||
|
|
||||||
|
Touches:
|
||||||
|
|
||||||
|
- use\_syslog — Required setting if you want to write to the syslog.
|
||||||
|
- address — The host\[:port\] of syslogd. If omitted, the local daemon is used.
|
||||||
|
- hostname — Optional. The name of the host that logs are sent from.
|
||||||
|
- facility — [Le mot clé syslog facility](https://en.wikipedia.org/wiki/Syslog#Facility) en majuscules avec la “LOG\_” préfixe: (`LOG_USER`, `LOG_DAEMON`, `LOG_LOCAL3` et ainsi de suite).
|
||||||
|
Valeur par défaut: `LOG_USER` si `address` est spécifié, `LOG_DAEMON otherwise.`
|
||||||
|
- format – Message format. Possible values: `bsd` et `syslog.`
|
||||||
|
|
||||||
|
## macro {#macros}
|
||||||
|
|
||||||
|
Substitutions de paramètres pour les tables répliquées.
|
||||||
|
|
||||||
|
Peut être omis si les tables répliquées ne sont pas utilisées.
|
||||||
|
|
||||||
|
Pour plus d'informations, consultez la section “[Création de tables répliquées](../../operations/table_engines/replication.md)”.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<macros incl="macros" optional="true" />
|
||||||
|
```
|
||||||
|
|
||||||
|
## mark\_cache\_size {#server-mark-cache-size}
|
||||||
|
|
||||||
|
Taille approximative (en octets) du cache des marques utilisées par les [MergeTree](../table_engines/mergetree.md) famille.
|
||||||
|
|
||||||
|
Le cache est partagé pour le serveur et la mémoire est allouée au besoin. La taille du cache doit être d'au moins 5368709120.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<mark_cache_size>5368709120</mark_cache_size>
|
||||||
|
```
|
||||||
|
|
||||||
|
## max\_concurrent\_queries {#max-concurrent-queries}
|
||||||
|
|
||||||
|
Nombre maximal de demandes traitées simultanément.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<max_concurrent_queries>100</max_concurrent_queries>
|
||||||
|
```
|
||||||
|
|
||||||
|
## max\_connections {#max-connections}
|
||||||
|
|
||||||
|
Le nombre maximal de connexions entrantes.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<max_connections>4096</max_connections>
|
||||||
|
```
|
||||||
|
|
||||||
|
## max\_open\_files {#max-open-files}
|
||||||
|
|
||||||
|
Le nombre maximal de fichiers ouverts.
|
||||||
|
|
||||||
|
Par défaut: `maximum`.
|
||||||
|
|
||||||
|
Nous vous recommandons d'utiliser cette option sous Mac OS X depuis le `getrlimit()` la fonction renvoie une valeur incorrecte.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<max_open_files>262144</max_open_files>
|
||||||
|
```
|
||||||
|
|
||||||
|
## max\_table\_size\_to\_drop {#max-table-size-to-drop}
|
||||||
|
|
||||||
|
Restriction sur la suppression de tables.
|
||||||
|
|
||||||
|
Si la taille d'un [MergeTree](../table_engines/mergetree.md) table dépasse `max_table_size_to_drop` (en octets), vous ne pouvez pas le supprimer à l'aide d'une requête DROP.
|
||||||
|
|
||||||
|
Si vous devez toujours supprimer la table sans redémarrer le serveur ClickHouse, créez le `<clickhouse-path>/flags/force_drop_table` fichier et exécutez la requête DROP.
|
||||||
|
|
||||||
|
Valeur par défaut: 50 Go.
|
||||||
|
|
||||||
|
La valeur 0 signifie que vous pouvez supprimer toutes les tables sans aucune restriction.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<max_table_size_to_drop>0</max_table_size_to_drop>
|
||||||
|
```
|
||||||
|
|
||||||
|
## merge\_tree {#server_settings-merge_tree}
|
||||||
|
|
||||||
|
Réglage fin des tables dans le [MergeTree](../table_engines/mergetree.md).
|
||||||
|
|
||||||
|
Pour plus d'informations, consultez MergeTreeSettings.h fichier d'en-tête.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<merge_tree>
|
||||||
|
<max_suspicious_broken_parts>5</max_suspicious_broken_parts>
|
||||||
|
</merge_tree>
|
||||||
|
```
|
||||||
|
|
||||||
|
## openSSL {#server_settings-openssl}
|
||||||
|
|
||||||
|
Configuration client/serveur SSL.
|
||||||
|
|
||||||
|
Le Support pour SSL est fourni par le `libpoco` bibliothèque. L'interface est décrite dans le fichier [SSLManager.h](https://github.com/ClickHouse-Extras/poco/blob/master/NetSSL_OpenSSL/include/Poco/Net/SSLManager.h)
|
||||||
|
|
||||||
|
Clés pour les paramètres Serveur/client:
|
||||||
|
|
||||||
|
- privateKeyFile – The path to the file with the secret key of the PEM certificate. The file may contain a key and certificate at the same time.
|
||||||
|
- certificateFile – The path to the client/server certificate file in PEM format. You can omit it if `privateKeyFile` contient le certificat.
|
||||||
|
- caConfig – The path to the file or directory that contains trusted root certificates.
|
||||||
|
- verificationMode – The method for checking the node's certificates. Details are in the description of the [Cadre](https://github.com/ClickHouse-Extras/poco/blob/master/NetSSL_OpenSSL/include/Poco/Net/Context.h) classe. Valeurs possibles: `none`, `relaxed`, `strict`, `once`.
|
||||||
|
- verificationDepth – The maximum length of the verification chain. Verification will fail if the certificate chain length exceeds the set value.
|
||||||
|
- loadDefaultCAFile – Indicates that built-in CA certificates for OpenSSL will be used. Acceptable values: `true`, `false`. \|
|
||||||
|
- cipherList – Supported OpenSSL encryptions. For example: `ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH`.
|
||||||
|
- cacheSessions – Enables or disables caching sessions. Must be used in combination with `sessionIdContext`. Les valeurs acceptables: `true`, `false`.
|
||||||
|
- sessionIdContext – A unique set of random characters that the server appends to each generated identifier. The length of the string must not exceed `SSL_MAX_SSL_SESSION_ID_LENGTH`. Ce paramètre est toujours recommandé car il permet d'éviter les problèmes à la fois si le serveur met en cache la session et si le client demande la mise en cache. Valeur par défaut: `${application.name}`.
|
||||||
|
- sessionCacheSize – The maximum number of sessions that the server caches. Default value: 1024\*20. 0 – Unlimited sessions.
|
||||||
|
- sessionTimeout – Time for caching the session on the server.
|
||||||
|
- extendedVerification – Automatically extended verification of certificates after the session ends. Acceptable values: `true`, `false`.
|
||||||
|
- requireTLSv1 – Require a TLSv1 connection. Acceptable values: `true`, `false`.
|
||||||
|
- requireTLSv1\_1 – Require a TLSv1.1 connection. Acceptable values: `true`, `false`.
|
||||||
|
- requireTLSv1 – Require a TLSv1.2 connection. Acceptable values: `true`, `false`.
|
||||||
|
- fips – Activates OpenSSL FIPS mode. Supported if the library's OpenSSL version supports FIPS.
|
||||||
|
- privateKeyPassphraseHandler – Class (PrivateKeyPassphraseHandler subclass) that requests the passphrase for accessing the private key. For example: `<privateKeyPassphraseHandler>`, `<name>KeyFileHandler</name>`, `<options><password>test</password></options>`, `</privateKeyPassphraseHandler>`.
|
||||||
|
- invalidCertificateHandler – Class (a subclass of CertificateHandler) for verifying invalid certificates. For example: `<invalidCertificateHandler> <name>ConsoleCertificateHandler</name> </invalidCertificateHandler>` .
|
||||||
|
- disableProtocols – Protocols that are not allowed to use.
|
||||||
|
- preferServerCiphers – Preferred server ciphers on the client.
|
||||||
|
|
||||||
|
**Exemple de paramètres:**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<openSSL>
|
||||||
|
<server>
|
||||||
|
<!-- openssl req -subj "/CN=localhost" -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/clickhouse-server/server.key -out /etc/clickhouse-server/server.crt -->
|
||||||
|
<certificateFile>/etc/clickhouse-server/server.crt</certificateFile>
|
||||||
|
<privateKeyFile>/etc/clickhouse-server/server.key</privateKeyFile>
|
||||||
|
<!-- openssl dhparam -out /etc/clickhouse-server/dhparam.pem 4096 -->
|
||||||
|
<dhParamsFile>/etc/clickhouse-server/dhparam.pem</dhParamsFile>
|
||||||
|
<verificationMode>none</verificationMode>
|
||||||
|
<loadDefaultCAFile>true</loadDefaultCAFile>
|
||||||
|
<cacheSessions>true</cacheSessions>
|
||||||
|
<disableProtocols>sslv2,sslv3</disableProtocols>
|
||||||
|
<preferServerCiphers>true</preferServerCiphers>
|
||||||
|
</server>
|
||||||
|
<client>
|
||||||
|
<loadDefaultCAFile>true</loadDefaultCAFile>
|
||||||
|
<cacheSessions>true</cacheSessions>
|
||||||
|
<disableProtocols>sslv2,sslv3</disableProtocols>
|
||||||
|
<preferServerCiphers>true</preferServerCiphers>
|
||||||
|
<!-- Use for self-signed: <verificationMode>none</verificationMode> -->
|
||||||
|
<invalidCertificateHandler>
|
||||||
|
<!-- Use for self-signed: <name>AcceptCertificateHandler</name> -->
|
||||||
|
<name>RejectCertificateHandler</name>
|
||||||
|
</invalidCertificateHandler>
|
||||||
|
</client>
|
||||||
|
</openSSL>
|
||||||
|
```
|
||||||
|
|
||||||
|
## part\_log {#server_settings-part-log}
|
||||||
|
|
||||||
|
Journalisation des événements associés à [MergeTree](../table_engines/mergetree.md). Par exemple, ajouter ou fusionner des données. Vous pouvez utiliser le journal pour simuler des algorithmes de fusion et comparer leurs caractéristiques. Vous pouvez visualiser le processus de fusion.
|
||||||
|
|
||||||
|
Les requêtes sont enregistrées dans le [système.part\_log](../system_tables.md#system_tables-part-log) table, pas dans un fichier séparé. Vous pouvez configurer le nom de cette table dans le `table` paramètre (voir ci-dessous).
|
||||||
|
|
||||||
|
Utilisez les paramètres suivants pour configurer la journalisation:
|
||||||
|
|
||||||
|
- `database` – Name of the database.
|
||||||
|
- `table` – Name of the system table.
|
||||||
|
- `partition_by` – Sets a [partitionnement personnalisé clé](../../operations/table_engines/custom_partitioning_key.md).
|
||||||
|
- `flush_interval_milliseconds` – Interval for flushing data from the buffer in memory to the table.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<part_log>
|
||||||
|
<database>system</database>
|
||||||
|
<table>part_log</table>
|
||||||
|
<partition_by>toMonday(event_date)</partition_by>
|
||||||
|
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
|
||||||
|
</part_log>
|
||||||
|
```
|
||||||
|
|
||||||
|
## chemin {#server_settings-path}
|
||||||
|
|
||||||
|
Chemin d'accès au répertoire contenant des données.
|
||||||
|
|
||||||
|
!!! note "Note"
|
||||||
|
La barre oblique de fin est obligatoire.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<path>/var/lib/clickhouse/</path>
|
||||||
|
```
|
||||||
|
|
||||||
|
## query\_log {#server_settings-query-log}
|
||||||
|
|
||||||
|
Réglage de la journalisation des requêtes reçues avec [log\_queries=1](../settings/settings.md) paramètre.
|
||||||
|
|
||||||
|
Les requêtes sont enregistrées dans le [système.query\_log](../system_tables.md#system_tables-query_log) table, pas dans un fichier séparé. Vous pouvez modifier le nom de la table dans le `table` paramètre (voir ci-dessous).
|
||||||
|
|
||||||
|
Utilisez les paramètres suivants pour configurer la journalisation:
|
||||||
|
|
||||||
|
- `database` – Name of the database.
|
||||||
|
- `table` – Name of the system table the queries will be logged in.
|
||||||
|
- `partition_by` – Sets a [partitionnement personnalisé clé](../../operations/table_engines/custom_partitioning_key.md) pour une table.
|
||||||
|
- `flush_interval_milliseconds` – Interval for flushing data from the buffer in memory to the table.
|
||||||
|
|
||||||
|
Si la table n'existe pas, ClickHouse la créera. Si la structure du journal des requêtes a été modifiée lors de la mise à jour du serveur ClickHouse, la table avec l'ancienne structure est renommée et une nouvelle table est créée automatiquement.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<query_log>
|
||||||
|
<database>system</database>
|
||||||
|
<table>query_log</table>
|
||||||
|
<partition_by>toMonday(event_date)</partition_by>
|
||||||
|
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
|
||||||
|
</query_log>
|
||||||
|
```
|
||||||
|
|
||||||
|
## query\_thread\_log {#server_settings-query-thread-log}
|
||||||
|
|
||||||
|
Réglage de la journalisation des threads de requêtes reçues avec [log\_query\_threads=1](../settings/settings.md#settings-log-query-threads) paramètre.
|
||||||
|
|
||||||
|
Les requêtes sont enregistrées dans le [système.query\_thread\_log](../system_tables.md#system_tables-query-thread-log) table, pas dans un fichier séparé. Vous pouvez modifier le nom de la table dans le `table` paramètre (voir ci-dessous).
|
||||||
|
|
||||||
|
Utilisez les paramètres suivants pour configurer la journalisation:
|
||||||
|
|
||||||
|
- `database` – Name of the database.
|
||||||
|
- `table` – Name of the system table the queries will be logged in.
|
||||||
|
- `partition_by` – Sets a [partitionnement personnalisé clé](../../operations/table_engines/custom_partitioning_key.md) pour un système de tableau.
|
||||||
|
- `flush_interval_milliseconds` – Interval for flushing data from the buffer in memory to the table.
|
||||||
|
|
||||||
|
Si la table n'existe pas, ClickHouse la créera. Si la structure du journal des threads de requête a été modifiée lors de la mise à jour du serveur ClickHouse, la table avec l'ancienne structure est renommée et une nouvelle table est créée automatiquement.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<query_thread_log>
|
||||||
|
<database>system</database>
|
||||||
|
<table>query_thread_log</table>
|
||||||
|
<partition_by>toMonday(event_date)</partition_by>
|
||||||
|
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
|
||||||
|
</query_thread_log>
|
||||||
|
```
|
||||||
|
|
||||||
|
## trace\_log {#server_settings-trace_log}
|
||||||
|
|
||||||
|
Paramètres pour le [trace\_log](../system_tables.md#system_tables-trace_log) opération de table de système.
|
||||||
|
|
||||||
|
Paramètre:
|
||||||
|
|
||||||
|
- `database` — Database for storing a table.
|
||||||
|
- `table` — Table name.
|
||||||
|
- `partition_by` — [Partitionnement personnalisé clé](../../operations/table_engines/custom_partitioning_key.md) pour un système de tableau.
|
||||||
|
- `flush_interval_milliseconds` — Interval for flushing data from the buffer in memory to the table.
|
||||||
|
|
||||||
|
Le fichier de configuration du serveur par défaut `config.xml` contient la section Paramètres suivante:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<trace_log>
|
||||||
|
<database>system</database>
|
||||||
|
<table>trace_log</table>
|
||||||
|
<partition_by>toYYYYMM(event_date)</partition_by>
|
||||||
|
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
|
||||||
|
</trace_log>
|
||||||
|
```
|
||||||
|
|
||||||
|
## query\_masking\_rules {#query-masking-rules}
|
||||||
|
|
||||||
|
Règles basées sur Regexp, qui seront appliquées aux requêtes ainsi qu'à tous les messages de journal avant de les stocker dans les journaux du serveur,
|
||||||
|
`system.query_log`, `system.text_log`, `system.processes` table, et dans les journaux envoyés au client. Qui permet à la prévention de
|
||||||
|
fuite de données sensibles à partir de requêtes SQL (comme les noms, e-mails,
|
||||||
|
identificateurs ou numéros de carte de crédit) aux journaux.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<query_masking_rules>
|
||||||
|
<rule>
|
||||||
|
<name>hide SSN</name>
|
||||||
|
<regexp>(^|\D)\d{3}-\d{2}-\d{4}($|\D)</regexp>
|
||||||
|
<replace>000-00-0000</replace>
|
||||||
|
</rule>
|
||||||
|
</query_masking_rules>
|
||||||
|
```
|
||||||
|
|
||||||
|
Config champs:
|
||||||
|
- `name` - nom de la règle (facultatif)
|
||||||
|
- `regexp` - Expression régulière compatible RE2 (obligatoire)
|
||||||
|
- `replace` - chaîne de substitution pour les données sensibles (facultatif, par défaut - six astérisques)
|
||||||
|
|
||||||
|
Les règles de masquage sont appliquées à l'ensemble de la requête (pour éviter les fuites de données sensibles provenant de requêtes malformées / Non analysables).
|
||||||
|
|
||||||
|
`system.events` table ont compteur `QueryMaskingRulesMatch` qui ont un nombre global de requête de masquage des règles de correspondances.
|
||||||
|
|
||||||
|
Pour les requêtes distribuées chaque serveur doivent être configurés séparément, sinon, les sous-requêtes transmises à d'autres
|
||||||
|
les nœuds seront stockés sans masquage.
|
||||||
|
|
||||||
|
## remote\_servers {#server-settings-remote-servers}
|
||||||
|
|
||||||
|
Configuration des clusters utilisés par le [Distribué](../../operations/table_engines/distributed.md) moteur de table et par le `cluster` table de fonction.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<remote_servers incl="clickhouse_remote_servers" />
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour la valeur de l' `incl` attribut, voir la section “[Fichiers de Configuration](../configuration_files.md#configuration_files)”.
|
||||||
|
|
||||||
|
**Voir Aussi**
|
||||||
|
|
||||||
|
- [skip\_unavailable\_shards](../settings/settings.md#settings-skip_unavailable_shards)
|
||||||
|
|
||||||
|
## fuseau {#server_settings-timezone}
|
||||||
|
|
||||||
|
Le fuseau horaire du serveur.
|
||||||
|
|
||||||
|
Spécifié comme identifiant IANA pour le fuseau horaire UTC ou l'emplacement géographique (par exemple, Afrique / Abidjan).
|
||||||
|
|
||||||
|
Le fuseau horaire est nécessaire pour les conversions entre les formats String et DateTime lorsque les champs DateTime sont sortis au format texte (imprimés à l'écran ou dans un fichier) et lors de L'obtention de DateTime à partir d'une chaîne. En outre, le fuseau horaire est utilisé dans les fonctions qui fonctionnent avec l'heure et la date si elles ne reçoivent pas le fuseau horaire dans les paramètres d'entrée.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<timezone>Europe/Moscow</timezone>
|
||||||
|
```
|
||||||
|
|
||||||
|
## tcp\_port {#server_settings-tcp_port}
|
||||||
|
|
||||||
|
Port pour communiquer avec les clients via le protocole TCP.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<tcp_port>9000</tcp_port>
|
||||||
|
```
|
||||||
|
|
||||||
|
## tcp\_port\_secure {#server_settings-tcp_port-secure}
|
||||||
|
|
||||||
|
Port TCP pour une communication sécurisée avec les clients. Utilisez le avec [OpenSSL](#server_settings-openssl) paramètre.
|
||||||
|
|
||||||
|
**Valeurs possibles**
|
||||||
|
|
||||||
|
Entier positif.
|
||||||
|
|
||||||
|
**Valeur par défaut**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<tcp_port_secure>9440</tcp_port_secure>
|
||||||
|
```
|
||||||
|
|
||||||
|
## mysql\_port {#server_settings-mysql_port}
|
||||||
|
|
||||||
|
Port pour communiquer avec les clients via le protocole MySQL.
|
||||||
|
|
||||||
|
**Valeurs possibles**
|
||||||
|
|
||||||
|
Entier positif.
|
||||||
|
|
||||||
|
Exemple
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<mysql_port>9004</mysql_port>
|
||||||
|
```
|
||||||
|
|
||||||
|
## tmp\_path {#server-settings-tmp_path}
|
||||||
|
|
||||||
|
Chemin d'accès aux données temporaires pour le traitement des requêtes volumineuses.
|
||||||
|
|
||||||
|
!!! note "Note"
|
||||||
|
La barre oblique de fin est obligatoire.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<tmp_path>/var/lib/clickhouse/tmp/</tmp_path>
|
||||||
|
```
|
||||||
|
|
||||||
|
## tmp\_policy {#server-settings-tmp-policy}
|
||||||
|
|
||||||
|
La politique de [`storage_configuration`](../table_engines/mergetree.md#table_engine-mergetree-multiple-volumes) pour stocker des fichiers temporaires.
|
||||||
|
Si cela n'est pas [`tmp_path`](#server-settings-tmp_path) est utilisé, sinon elle est ignorée.
|
||||||
|
|
||||||
|
!!! note "Note"
|
||||||
|
- `move_factor` est ignoré
|
||||||
|
- `keep_free_space_bytes` est ignoré
|
||||||
|
- `max_data_part_size_bytes` est ignoré
|
||||||
|
- vous devez avoir exactement un volume dans cette politique
|
||||||
|
|
||||||
|
## uncompressed\_cache\_size {#server-settings-uncompressed_cache_size}
|
||||||
|
|
||||||
|
Taille du Cache (en octets) pour les données non compressées utilisées par les [MergeTree](../table_engines/mergetree.md).
|
||||||
|
|
||||||
|
Il y a un cache partagé pour le serveur. La mémoire est allouée à la demande. Le cache est utilisé si l'option [use\_uncompressed\_cache](../settings/settings.md#setting-use_uncompressed_cache) est activé.
|
||||||
|
|
||||||
|
Le cache non compressé est avantageux pour les requêtes très courtes dans des cas individuels.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<uncompressed_cache_size>8589934592</uncompressed_cache_size>
|
||||||
|
```
|
||||||
|
|
||||||
|
## user\_files\_path {#server_settings-user_files_path}
|
||||||
|
|
||||||
|
Le répertoire avec les fichiers utilisateur. Utilisé dans la fonction de table [fichier()](../../query_language/table_functions/file.md).
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<user_files_path>/var/lib/clickhouse/user_files/</user_files_path>
|
||||||
|
```
|
||||||
|
|
||||||
|
## users\_config {#users-config}
|
||||||
|
|
||||||
|
Chemin d'accès au fichier qui contient:
|
||||||
|
|
||||||
|
- Les configurations de l'utilisateur.
|
||||||
|
- Les droits d'accès.
|
||||||
|
- Les paramètres des profils.
|
||||||
|
- Les paramètres de Quota.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<users_config>users.xml</users_config>
|
||||||
|
```
|
||||||
|
|
||||||
|
## zookeeper {#server-settings_zookeeper}
|
||||||
|
|
||||||
|
Contient des paramètres qui permettent à ClickHouse d'interagir avec [ZooKeeper](http://zookeeper.apache.org/) cluster.
|
||||||
|
|
||||||
|
ClickHouse utilise ZooKeeper pour stocker les métadonnées des répliques lors de l'utilisation de tables répliquées. Si les tables répliquées ne sont pas utilisées, cette section de paramètres peut être omise.
|
||||||
|
|
||||||
|
Cette section contient les paramètres suivants:
|
||||||
|
|
||||||
|
- `node` — ZooKeeper endpoint. You can set multiple endpoints.
|
||||||
|
|
||||||
|
Exemple:
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<node index="1">
|
||||||
|
<host>example_host</host>
|
||||||
|
<port>2181</port>
|
||||||
|
</node>
|
||||||
|
```
|
||||||
|
|
||||||
|
The `index` attribute specifies the node order when trying to connect to the ZooKeeper cluster.
|
||||||
|
|
||||||
|
- `session_timeout` — Maximum timeout for the client session in milliseconds.
|
||||||
|
- `root` — The [znode](http://zookeeper.apache.org/doc/r3.5.5/zookeeperOver.html#Nodes+and+ephemeral+nodes) qui est utilisé comme racine pour les znodes utilisés par le serveur ClickHouse. Facultatif.
|
||||||
|
- `identity` — User and password, that can be required by ZooKeeper to give access to requested znodes. Optional.
|
||||||
|
|
||||||
|
**Exemple de configuration**
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<zookeeper>
|
||||||
|
<node>
|
||||||
|
<host>example1</host>
|
||||||
|
<port>2181</port>
|
||||||
|
</node>
|
||||||
|
<node>
|
||||||
|
<host>example2</host>
|
||||||
|
<port>2181</port>
|
||||||
|
</node>
|
||||||
|
<session_timeout_ms>30000</session_timeout_ms>
|
||||||
|
<operation_timeout_ms>10000</operation_timeout_ms>
|
||||||
|
<!-- Optional. Chroot suffix. Should exist. -->
|
||||||
|
<root>/path/to/zookeeper/node</root>
|
||||||
|
<!-- Optional. Zookeeper digest ACL string. -->
|
||||||
|
<identity>user:password</identity>
|
||||||
|
</zookeeper>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Voir Aussi**
|
||||||
|
|
||||||
|
- [Réplication](../../operations/table_engines/replication.md)
|
||||||
|
- [Guide du programmeur ZooKeeper](http://zookeeper.apache.org/doc/current/zookeeperProgrammers.html)
|
||||||
|
|
||||||
|
## use\_minimalistic\_part\_header\_in\_zookeeper {#server-settings-use_minimalistic_part_header_in_zookeeper}
|
||||||
|
|
||||||
|
Méthode de stockage pour les en-têtes de partie de données dans ZooKeeper.
|
||||||
|
|
||||||
|
Ce paramètre s'applique uniquement à l' `MergeTree` famille. Il peut être spécifié:
|
||||||
|
|
||||||
|
- À l'échelle mondiale dans le [merge\_tree](#server_settings-merge_tree) la section de la `config.xml` fichier.
|
||||||
|
|
||||||
|
ClickHouse utilise le paramètre pour toutes les tables du serveur. Vous pouvez modifier le réglage à tout moment. Les tables existantes changent de comportement lorsque le paramètre change.
|
||||||
|
|
||||||
|
- Pour chaque table.
|
||||||
|
|
||||||
|
Lors de la création d'un tableau, indiquer la [moteur de réglage](../table_engines/mergetree.md#table_engine-mergetree-creating-a-table). Le comportement d'une table existante avec ce paramètre ne change pas, même si le paramètre global des changements.
|
||||||
|
|
||||||
|
**Valeurs possibles**
|
||||||
|
|
||||||
|
- 0 — Functionality is turned off.
|
||||||
|
- 1 — Functionality is turned on.
|
||||||
|
|
||||||
|
Si `use_minimalistic_part_header_in_zookeeper = 1`, puis [répliqué](../table_engines/replication.md) les tables stockent les en-têtes des parties de données de manière compacte à l'aide `znode`. Si la table contient plusieurs colonnes, cette méthode de stockage réduit considérablement le volume des données stockées dans Zookeeper.
|
||||||
|
|
||||||
|
!!! attention "Attention"
|
||||||
|
Après l'application de `use_minimalistic_part_header_in_zookeeper = 1`, vous ne pouvez pas rétrograder le serveur ClickHouse vers une version qui ne prend pas en charge ce paramètre. Soyez prudent lors de la mise à niveau de ClickHouse sur les serveurs d'un cluster. Ne mettez pas à niveau tous les serveurs à la fois. Il est plus sûr de tester de nouvelles versions de ClickHouse dans un environnement de test, ou sur quelques serveurs d'un cluster.
|
||||||
|
|
||||||
|
Data part headers already stored with this setting can't be restored to their previous (non-compact) representation.
|
||||||
|
|
||||||
|
**Valeur par défaut:** 0.
|
||||||
|
|
||||||
|
## disable\_internal\_dns\_cache {#server-settings-disable-internal-dns-cache}
|
||||||
|
|
||||||
|
Désactive le cache DNS interne. Recommandé pour l'utilisation de ClickHouse dans les systèmes
|
||||||
|
avec des infrastructures en constante évolution telles que Kubernetes.
|
||||||
|
|
||||||
|
**Valeur par défaut:** 0.
|
||||||
|
|
||||||
|
## dns\_cache\_update\_period {#server-settings-dns-cache-update-period}
|
||||||
|
|
||||||
|
La période de mise à jour des adresses IP stockées dans le cache DNS interne de ClickHouse (en secondes).
|
||||||
|
La mise à jour est effectuée de manière asynchrone, dans un thread système séparé.
|
||||||
|
|
||||||
|
**Valeur par défaut**: 15.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/operations/server_settings/settings/) <!--hide-->
|
72
docs/fr/operations/settings/constraints_on_settings.md
Normal file
72
docs/fr/operations/settings/constraints_on_settings.md
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Contraintes sur les paramètres {#constraints-on-settings}
|
||||||
|
|
||||||
|
Les contraintes sur les paramètres peuvent être définis dans le `profiles` la section de la `user.xml` fichier de configuration et interdire aux utilisateurs de modifier certains `SET` requête.
|
||||||
|
Les contraintes sont définies comme suit:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<profiles>
|
||||||
|
<user_name>
|
||||||
|
<constraints>
|
||||||
|
<setting_name_1>
|
||||||
|
<min>lower_boundary</min>
|
||||||
|
</setting_name_1>
|
||||||
|
<setting_name_2>
|
||||||
|
<max>upper_boundary</max>
|
||||||
|
</setting_name_2>
|
||||||
|
<setting_name_3>
|
||||||
|
<min>lower_boundary</min>
|
||||||
|
<max>upper_boundary</max>
|
||||||
|
</setting_name_3>
|
||||||
|
<setting_name_4>
|
||||||
|
<readonly/>
|
||||||
|
</setting_name_4>
|
||||||
|
</constraints>
|
||||||
|
</user_name>
|
||||||
|
</profiles>
|
||||||
|
```
|
||||||
|
|
||||||
|
Si l'utilisateur tente de violer les contraintes une exception est levée et le réglage n'est pas modifié.
|
||||||
|
Trois types de contraintes sont pris en charge: `min`, `max`, `readonly`. Le `min` et `max` les contraintes spécifient les limites supérieure et inférieure pour un paramètre numérique et peuvent être utilisées en combinaison. Le `readonly` contrainte spécifie que l'utilisateur ne peut pas modifier le paramètre correspondant à tous.
|
||||||
|
|
||||||
|
**Exemple:** Laisser `users.xml` comprend des lignes:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<profiles>
|
||||||
|
<default>
|
||||||
|
<max_memory_usage>10000000000</max_memory_usage>
|
||||||
|
<force_index_by_date>0</force_index_by_date>
|
||||||
|
...
|
||||||
|
<constraints>
|
||||||
|
<max_memory_usage>
|
||||||
|
<min>5000000000</min>
|
||||||
|
<max>20000000000</max>
|
||||||
|
</max_memory_usage>
|
||||||
|
<force_index_by_date>
|
||||||
|
<readonly/>
|
||||||
|
</force_index_by_date>
|
||||||
|
</constraints>
|
||||||
|
</default>
|
||||||
|
</profiles>
|
||||||
|
```
|
||||||
|
|
||||||
|
Les requêtes suivantes toutes les exceptions throw:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SET max_memory_usage=20000000001;
|
||||||
|
SET max_memory_usage=4999999999;
|
||||||
|
SET force_index_by_date=1;
|
||||||
|
```
|
||||||
|
|
||||||
|
``` text
|
||||||
|
Code: 452, e.displayText() = DB::Exception: Setting max_memory_usage should not be greater than 20000000000.
|
||||||
|
Code: 452, e.displayText() = DB::Exception: Setting max_memory_usage should not be less than 5000000000.
|
||||||
|
Code: 452, e.displayText() = DB::Exception: Setting force_index_by_date should not be changed.
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note:** le `default` le profil a une manipulation particulière: toutes les contraintes définies pour `default` le profil devient les contraintes par défaut, de sorte qu'ils restreignent tous les utilisateurs jusqu'à ce qu'ils soient explicitement remplacés pour ces utilisateurs.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/operations/settings/constraints_on_settings/) <!--hide-->
|
28
docs/fr/operations/settings/index.md
Normal file
28
docs/fr/operations/settings/index.md
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Paramètre {#settings}
|
||||||
|
|
||||||
|
Il existe plusieurs façons de faire tous les paramètres décrits ci-dessous.
|
||||||
|
Les paramètres sont configurés en couches, de sorte que chaque couche suivante redéfinit les paramètres précédents.
|
||||||
|
|
||||||
|
Façons de configurer les paramètres, par ordre de priorité:
|
||||||
|
|
||||||
|
- Paramètres dans l' `users.xml` fichier de configuration du serveur.
|
||||||
|
|
||||||
|
Situé dans l'élément `<profiles>`.
|
||||||
|
|
||||||
|
- Les paramètres de la Session.
|
||||||
|
|
||||||
|
Envoyer `SET setting=value` depuis le client de la console ClickHouse en mode interactif.
|
||||||
|
De même, vous pouvez utiliser des sessions ClickHouse dans le protocole HTTP. Pour ce faire, vous devez spécifier le `session_id` Paramètre HTTP.
|
||||||
|
|
||||||
|
- Les paramètres de requête.
|
||||||
|
|
||||||
|
- Lorsque vous démarrez le client clickhouse console en mode non interactif, définissez le paramètre startup `--setting=value`.
|
||||||
|
- Lors de l'utilisation de L'API HTTP, passez les paramètres CGI (`URL?setting_1=value&setting_2=value...`).
|
||||||
|
|
||||||
|
Les paramètres qui ne peuvent être effectués que dans le fichier de configuration du serveur ne sont pas couverts dans cette section.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/operations/settings/) <!--hide-->
|
58
docs/fr/operations/settings/permissions_for_queries.md
Normal file
58
docs/fr/operations/settings/permissions_for_queries.md
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Autorisations pour les requêtes {#permissions_for_queries}
|
||||||
|
|
||||||
|
Les requêtes dans ClickHouse peuvent être divisées en plusieurs types:
|
||||||
|
|
||||||
|
1. Lire les requêtes de données: `SELECT`, `SHOW`, `DESCRIBE`, `EXISTS`.
|
||||||
|
2. Écrire des requêtes de données: `INSERT`, `OPTIMIZE`.
|
||||||
|
3. Modifier les paramètres requête: `SET`, `USE`.
|
||||||
|
4. [DDL](https://en.wikipedia.org/wiki/Data_definition_language) requête: `CREATE`, `ALTER`, `RENAME`, `ATTACH`, `DETACH`, `DROP` `TRUNCATE`.
|
||||||
|
5. `KILL QUERY`.
|
||||||
|
|
||||||
|
Les paramètres suivants règlent les autorisations utilisateur selon le type de requête:
|
||||||
|
|
||||||
|
- [ReadOnly](#settings_readonly) — Restricts permissions for all types of queries except DDL queries.
|
||||||
|
- [allow\_ddl](#settings_allow_ddl) — Restricts permissions for DDL queries.
|
||||||
|
|
||||||
|
`KILL QUERY` peut être réalisée avec tous les paramètres.
|
||||||
|
|
||||||
|
## ReadOnly {#settings_readonly}
|
||||||
|
|
||||||
|
Restreint les autorisations pour lire des données, écrire des données et modifier les requêtes de paramètres.
|
||||||
|
|
||||||
|
Voyez comment les requêtes sont divisées en types [surtout](#permissions_for_queries).
|
||||||
|
|
||||||
|
Valeurs possibles:
|
||||||
|
|
||||||
|
- 0 — All queries are allowed.
|
||||||
|
- 1 — Only read data queries are allowed.
|
||||||
|
- 2 — Read data and change settings queries are allowed.
|
||||||
|
|
||||||
|
Après le réglage de `readonly = 1` l'utilisateur ne peut pas changer `readonly` et `allow_ddl` les paramètres de la session en cours.
|
||||||
|
|
||||||
|
Lors de l'utilisation de la `GET` méthode dans le [Interface HTTP](../../interfaces/http.md), `readonly = 1` est définie automatiquement. Pour modifier les données, utilisez `POST` méthode.
|
||||||
|
|
||||||
|
Paramètre `readonly = 1` interdire à l'utilisateur de modifier tous les paramètres. Il y a un moyen d'interdire à l'utilisateur
|
||||||
|
de modifier uniquement des paramètres spécifiques, pour plus de détails, voir [contraintes sur les paramètres](constraints_on_settings.md).
|
||||||
|
|
||||||
|
Valeur par défaut: 0
|
||||||
|
|
||||||
|
## allow\_ddl {#settings_allow_ddl}
|
||||||
|
|
||||||
|
Permet ou interdit [DDL](https://en.wikipedia.org/wiki/Data_definition_language) requête.
|
||||||
|
|
||||||
|
Voyez comment les requêtes sont divisées en types [surtout](#permissions_for_queries).
|
||||||
|
|
||||||
|
Valeurs possibles:
|
||||||
|
|
||||||
|
- 0 — DDL queries are not allowed.
|
||||||
|
- 1 — DDL queries are allowed.
|
||||||
|
|
||||||
|
Vous ne pouvez pas exécuter `SET allow_ddl = 1` si `allow_ddl = 0` pour la session en cours.
|
||||||
|
|
||||||
|
Valeur par défaut: 1
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/operations/settings/permissions_for_queries/) <!--hide-->
|
298
docs/fr/operations/settings/query_complexity.md
Normal file
298
docs/fr/operations/settings/query_complexity.md
Normal file
@ -0,0 +1,298 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Restrictions sur la complexité des requêtes {#restrictions-on-query-complexity}
|
||||||
|
|
||||||
|
Les Restrictions sur la complexité des requêtes font partie des paramètres.
|
||||||
|
Ils sont utilisés pour fournir une exécution plus sûre à partir de l'interface utilisateur.
|
||||||
|
Presque toutes les restrictions ne s'appliquent qu'à `SELECT`. Pour le traitement des requêtes distribuées, des restrictions sont appliquées sur chaque serveur séparément.
|
||||||
|
|
||||||
|
ClickHouse vérifie les restrictions pour les parties de données, pas pour chaque ligne. Cela signifie que vous pouvez dépasser la valeur de restriction de la taille de la partie données.
|
||||||
|
|
||||||
|
Restrictions sur l' “maximum amount of something” peut prendre la valeur 0, ce qui signifie “unrestricted”.
|
||||||
|
La plupart des restrictions ont également un ‘overflow\_mode’ paramètre signification que faire lorsque la limite est dépassée.
|
||||||
|
Il peut prendre deux valeurs: `throw` ou `break`. Les Restrictions sur l'agrégation (group\_by\_overflow\_mode) ont également la valeur `any`.
|
||||||
|
|
||||||
|
`throw` – Throw an exception (default).
|
||||||
|
|
||||||
|
`break` – Stop executing the query and return the partial result, as if the source data ran out.
|
||||||
|
|
||||||
|
`any (only for group_by_overflow_mode)` – Continuing aggregation for the keys that got into the set, but don't add new keys to the set.
|
||||||
|
|
||||||
|
## max\_memory\_usage {#settings_max_memory_usage}
|
||||||
|
|
||||||
|
La quantité maximale de RAM à utiliser pour exécuter une requête sur un seul serveur.
|
||||||
|
|
||||||
|
Dans le fichier de configuration par défaut, le maximum est de 10 Go.
|
||||||
|
|
||||||
|
Le réglage ne tient pas compte du volume de mémoire disponible ou du volume total de mémoire sur la machine.
|
||||||
|
La restriction s'applique à une seule requête au sein d'un seul serveur.
|
||||||
|
Vous pouvez utiliser `SHOW PROCESSLIST` pour vérifier la consommation de mémoire pour chaque requête.
|
||||||
|
En outre, la consommation de mémoire maximale est suivie pour chaque requête et écrite dans le journal.
|
||||||
|
|
||||||
|
L'utilisation de la mémoire n'est pas surveillée pour les membres de certaines fonctions d'agrégation.
|
||||||
|
|
||||||
|
L'utilisation de la mémoire n'est pas totalement suivies pour les états des fonctions d'agrégation `min`, `max`, `any`, `anyLast`, `argMin`, `argMax` de `String` et `Array` argument.
|
||||||
|
|
||||||
|
La consommation de mémoire est également limitée par les paramètres `max_memory_usage_for_user` et `max_memory_usage_for_all_queries`.
|
||||||
|
|
||||||
|
## max\_memory\_usage\_for\_user {#max-memory-usage-for-user}
|
||||||
|
|
||||||
|
Quantité maximale de RAM à utiliser pour exécuter les requêtes d'un utilisateur sur un seul serveur.
|
||||||
|
|
||||||
|
Les valeurs par défaut sont définies dans [Paramètre.h](https://github.com/ClickHouse/ClickHouse/blob/master/dbms/src/Core/Settings.h#L288). Par défaut, le montant n'est pas limité (`max_memory_usage_for_user = 0`).
|
||||||
|
|
||||||
|
Voir aussi la description de [max\_memory\_usage](#settings_max_memory_usage).
|
||||||
|
|
||||||
|
## max\_memory\_usage\_for\_all\_queries {#max-memory-usage-for-all-queries}
|
||||||
|
|
||||||
|
La quantité maximale de RAM à utiliser pour exécuter toutes les requêtes sur un seul serveur.
|
||||||
|
|
||||||
|
Les valeurs par défaut sont définies dans [Paramètre.h](https://github.com/ClickHouse/ClickHouse/blob/master/dbms/src/Core/Settings.h#L289). Par défaut, le montant n'est pas limité (`max_memory_usage_for_all_queries = 0`).
|
||||||
|
|
||||||
|
Voir aussi la description de [max\_memory\_usage](#settings_max_memory_usage).
|
||||||
|
|
||||||
|
## max\_rows\_to\_read {#max-rows-to-read}
|
||||||
|
|
||||||
|
Les restrictions suivantes peut être vérifiée sur chaque bloc (au lieu de sur chaque ligne). Autrement dit, les restrictions peuvent être brisées un peu.
|
||||||
|
Lors de l'exécution d'une requête dans plusieurs threads, les restrictions suivantes s'appliquent à chaque thread séparément.
|
||||||
|
|
||||||
|
Un nombre maximum de lignes pouvant être lues à partir d'un tableau lors de l'exécution d'une requête.
|
||||||
|
|
||||||
|
## max\_bytes\_to\_read {#max-bytes-to-read}
|
||||||
|
|
||||||
|
Nombre maximal d'octets (données non compressées) pouvant être lus à partir d'une table lors de l'exécution d'une requête.
|
||||||
|
|
||||||
|
## read\_overflow\_mode {#read-overflow-mode}
|
||||||
|
|
||||||
|
Que faire lorsque le volume de lecture de données dépasse l'une des limites: ‘throw’ ou ‘break’. Par défaut, les jeter.
|
||||||
|
|
||||||
|
## max\_rows\_to\_group\_by {#settings-max-rows-to-group-by}
|
||||||
|
|
||||||
|
Un nombre maximum de clés uniques reçues de l'agrégation. Ce paramètre permet de limiter la consommation de mémoire lors de l'agrégation.
|
||||||
|
|
||||||
|
## group\_by\_overflow\_mode {#group-by-overflow-mode}
|
||||||
|
|
||||||
|
Que faire lorsque le nombre de clés uniques pour l'agrégation dépasse la limite: ‘throw’, ‘break’, ou ‘any’. Par défaut, les jeter.
|
||||||
|
À l'aide de la ‘any’ valeur vous permet d'exécuter une approximation de GROUP BY. La qualité de cette approximation dépend de la nature statistique des données.
|
||||||
|
|
||||||
|
## max\_bytes\_before\_external\_group\_by {#settings-max_bytes_before_external_group_by}
|
||||||
|
|
||||||
|
Active ou désactive l'exécution de `GROUP BY` clauses dans la mémoire externe. Voir [Groupe par dans la mémoire externe](../../query_language/select.md#select-group-by-in-external-memory).
|
||||||
|
|
||||||
|
Valeurs possibles:
|
||||||
|
|
||||||
|
- Volume maximal de RAM (en octets) pouvant être utilisé par le [GROUP BY](../../query_language/select.md#select-group-by-clause) opération.
|
||||||
|
- 0 — `GROUP BY` dans la mémoire externe désactivé.
|
||||||
|
|
||||||
|
Valeur par défaut: 0.
|
||||||
|
|
||||||
|
## max\_rows\_to\_sort {#max-rows-to-sort}
|
||||||
|
|
||||||
|
Un nombre maximum de lignes avant le tri. Cela vous permet de limiter la consommation de mémoire lors du tri.
|
||||||
|
|
||||||
|
## max\_bytes\_to\_sort {#max-bytes-to-sort}
|
||||||
|
|
||||||
|
Un nombre maximal d'octets avant le tri.
|
||||||
|
|
||||||
|
## sort\_overflow\_mode {#sort-overflow-mode}
|
||||||
|
|
||||||
|
Que faire si le nombre de lignes reçues avant le tri dépasse l'une des limites: ‘throw’ ou ‘break’. Par défaut, les jeter.
|
||||||
|
|
||||||
|
## max\_result\_rows {#setting-max_result_rows}
|
||||||
|
|
||||||
|
Limite sur le nombre de lignes dans le résultat. Également vérifié pour les sous-requêtes, et sur des serveurs distants lors de l'exécution de parties d'une requête distribuée.
|
||||||
|
|
||||||
|
## max\_result\_bytes {#max-result-bytes}
|
||||||
|
|
||||||
|
Limite sur le nombre d'octets dans le résultat. Le même que le réglage précédent.
|
||||||
|
|
||||||
|
## result\_overflow\_mode {#result-overflow-mode}
|
||||||
|
|
||||||
|
Que faire si le volume du résultat dépasse l'une des limites: ‘throw’ ou ‘break’. Par défaut, les jeter.
|
||||||
|
|
||||||
|
Utiliser ‘break’ est similaire à L'utilisation de LIMIT. `Break` interrompt l'exécution seulement au niveau du bloc. Cela signifie que la quantité de lignes renvoyées est supérieure à [max\_result\_rows](#setting-max_result_rows) multiples de [max\_block\_size](settings.md#setting-max_block_size) et dépend de l' [max\_threads](settings.md#settings-max_threads).
|
||||||
|
|
||||||
|
Exemple:
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SET max_threads = 3, max_block_size = 3333;
|
||||||
|
SET max_result_rows = 3334, result_overflow_mode = 'break';
|
||||||
|
|
||||||
|
SELECT *
|
||||||
|
FROM numbers_mt(100000)
|
||||||
|
FORMAT Null;
|
||||||
|
```
|
||||||
|
|
||||||
|
Résultat:
|
||||||
|
|
||||||
|
``` text
|
||||||
|
6666 rows in set. ...
|
||||||
|
```
|
||||||
|
|
||||||
|
## max\_execution\_time {#max-execution-time}
|
||||||
|
|
||||||
|
Durée maximale d'exécution de la requête en secondes.
|
||||||
|
Pour le moment, il n'est pas vérifié pour l'une des étapes de tri, ni lors de la fusion et de la finalisation des fonctions d'agrégat.
|
||||||
|
|
||||||
|
## timeout\_overflow\_mode {#timeout-overflow-mode}
|
||||||
|
|
||||||
|
Que faire si la requête est exécutée plus de ‘max\_execution\_time’: ‘throw’ ou ‘break’. Par défaut, les jeter.
|
||||||
|
|
||||||
|
## min\_execution\_speed {#min-execution-speed}
|
||||||
|
|
||||||
|
Vitesse d'exécution minimale en lignes par seconde. Vérifié sur chaque bloc de données quand ‘timeout\_before\_checking\_execution\_speed’ expirer. Si la vitesse d'exécution est inférieure, une exception est levée.
|
||||||
|
|
||||||
|
## min\_execution\_speed\_bytes {#min-execution-speed-bytes}
|
||||||
|
|
||||||
|
Un nombre minimum d'exécution d'octets par seconde. Vérifié sur chaque bloc de données quand ‘timeout\_before\_checking\_execution\_speed’ expirer. Si la vitesse d'exécution est inférieure, une exception est levée.
|
||||||
|
|
||||||
|
## max\_execution\_speed {#max-execution-speed}
|
||||||
|
|
||||||
|
Un nombre maximal d'exécution de lignes par seconde. Vérifié sur chaque bloc de données quand ‘timeout\_before\_checking\_execution\_speed’ expirer. Si la vitesse d'exécution est élevée, la vitesse d'exécution sera réduit.
|
||||||
|
|
||||||
|
## max\_execution\_speed\_bytes {#max-execution-speed-bytes}
|
||||||
|
|
||||||
|
Un nombre maximal d'exécution d'octets par seconde. Vérifié sur chaque bloc de données quand ‘timeout\_before\_checking\_execution\_speed’ expirer. Si la vitesse d'exécution est élevée, la vitesse d'exécution sera réduit.
|
||||||
|
|
||||||
|
## timeout\_before\_checking\_execution\_speed {#timeout-before-checking-execution-speed}
|
||||||
|
|
||||||
|
Vérifie que la vitesse d'exécution n'est pas trop lent (pas moins de ‘min\_execution\_speed’), après l'expiration du temps spécifié en secondes.
|
||||||
|
|
||||||
|
## max\_columns\_to\_read {#max-columns-to-read}
|
||||||
|
|
||||||
|
Nombre maximal de colonnes pouvant être lues à partir d'une table dans une seule requête. Si une requête nécessite la lecture d'un plus grand nombre de colonnes, il lève une exception.
|
||||||
|
|
||||||
|
## max\_temporary\_columns {#max-temporary-columns}
|
||||||
|
|
||||||
|
Nombre maximal de colonnes temporaires qui doivent être conservées en RAM en même temps lors de l'exécution d'une requête, y compris les colonnes constantes. S'il y a plus de colonnes temporaires que cela, il lève une exception.
|
||||||
|
|
||||||
|
## max\_temporary\_non\_const\_columns {#max-temporary-non-const-columns}
|
||||||
|
|
||||||
|
La même chose que ‘max\_temporary\_columns’ mais sans compter constante colonnes.
|
||||||
|
Notez que les colonnes constantes sont formées assez souvent lors de l'exécution d'une requête, mais elles nécessitent environ zéro ressource informatique.
|
||||||
|
|
||||||
|
## max\_subquery\_depth {#max-subquery-depth}
|
||||||
|
|
||||||
|
Profondeur maximale de sous-requêtes. Si les sous-requêtes sont plus profondes, une exception est levée. Par défaut, 100.
|
||||||
|
|
||||||
|
## max\_pipeline\_depth {#max-pipeline-depth}
|
||||||
|
|
||||||
|
Profondeur maximale du pipeline. Correspond au nombre de transformations que chaque bloc de données lors du traitement des requêtes. Compté dans les limites d'un seul serveur. Si la profondeur du pipeline est supérieure, une exception est levée. Par défaut, 1000.
|
||||||
|
|
||||||
|
## max\_ast\_depth {#max-ast-depth}
|
||||||
|
|
||||||
|
Profondeur maximale d'une requête arbre syntaxique. En cas de dépassement, une exception est levée.
|
||||||
|
À ce moment, il n'est pas vérifié pendant l'analyse, mais seulement après l'analyse de la requête. Autrement dit, un arbre syntaxique trop profond peut être créé pendant l'analyse, mais la requête échouera. Par défaut, 1000.
|
||||||
|
|
||||||
|
## max\_ast\_elements {#max-ast-elements}
|
||||||
|
|
||||||
|
Un nombre maximal d'éléments dans une requête arbre syntaxique. En cas de dépassement, une exception est levée.
|
||||||
|
De la même manière que le paramètre précédent, il est vérifié qu'après l'analyse de la requête. Par défaut, 50 000.
|
||||||
|
|
||||||
|
## max\_rows\_in\_set {#max-rows-in-set}
|
||||||
|
|
||||||
|
Nombre maximal de lignes pour un ensemble de données dans la clause in créée à partir d'une sous-requête.
|
||||||
|
|
||||||
|
## max\_bytes\_in\_set {#max-bytes-in-set}
|
||||||
|
|
||||||
|
Nombre maximal d'octets (données non compressées) utilisés par un ensemble de la clause in créé à partir d'une sous-requête.
|
||||||
|
|
||||||
|
## set\_overflow\_mode {#set-overflow-mode}
|
||||||
|
|
||||||
|
Que faire lorsque la quantité de données dépasse l'une des limites: ‘throw’ ou ‘break’. Par défaut, les jeter.
|
||||||
|
|
||||||
|
## max\_rows\_in\_distinct {#max-rows-in-distinct}
|
||||||
|
|
||||||
|
Un nombre maximum de lignes différentes lors de L'utilisation de DISTINCT.
|
||||||
|
|
||||||
|
## max\_bytes\_in\_distinct {#max-bytes-in-distinct}
|
||||||
|
|
||||||
|
Nombre maximal d'octets utilisés par une table de hachage lors de L'utilisation de DISTINCT.
|
||||||
|
|
||||||
|
## distinct\_overflow\_mode {#distinct-overflow-mode}
|
||||||
|
|
||||||
|
Que faire lorsque la quantité de données dépasse l'une des limites: ‘throw’ ou ‘break’. Par défaut, les jeter.
|
||||||
|
|
||||||
|
## max\_rows\_to\_transfer {#max-rows-to-transfer}
|
||||||
|
|
||||||
|
Nombre maximal de lignes pouvant être transmises à un serveur distant ou enregistrées dans une table temporaire lors de L'utilisation de GLOBAL IN.
|
||||||
|
|
||||||
|
## max\_bytes\_to\_transfer {#max-bytes-to-transfer}
|
||||||
|
|
||||||
|
Nombre maximal d'octets (données non compressées) pouvant être transmis à un serveur distant ou enregistrés dans une table temporaire lors de L'utilisation de GLOBAL IN.
|
||||||
|
|
||||||
|
## transfer\_overflow\_mode {#transfer-overflow-mode}
|
||||||
|
|
||||||
|
Que faire lorsque la quantité de données dépasse l'une des limites: ‘throw’ ou ‘break’. Par défaut, les jeter.
|
||||||
|
|
||||||
|
## max\_rows\_in\_join {#settings-max_rows_in_join}
|
||||||
|
|
||||||
|
Limite le nombre de lignes dans la table de hachage utilisée lors de la jonction de tables.
|
||||||
|
|
||||||
|
Ce réglage s'applique à [SELECT … JOIN](../../query_language/select.md#select-join) les opérations et les [Rejoindre](../table_engines/join.md) tableau moteur.
|
||||||
|
|
||||||
|
Si une requête contient plusieurs jointures, ClickHouse vérifie ce paramètre pour chaque résultat intermédiaire.
|
||||||
|
|
||||||
|
ClickHouse peut procéder à différentes actions lorsque la limite est atteinte. L'utilisation de la [join\_overflow\_mode](#settings-join_overflow_mode) réglage pour choisir l'action.
|
||||||
|
|
||||||
|
Valeurs possibles:
|
||||||
|
|
||||||
|
- Entier positif.
|
||||||
|
- 0 — Unlimited number of rows.
|
||||||
|
|
||||||
|
Valeur par défaut: 0.
|
||||||
|
|
||||||
|
## max\_bytes\_in\_join {#settings-max_bytes_in_join}
|
||||||
|
|
||||||
|
Limite la taille en octets de la table de hachage utilisée lors de l'assemblage de tables.
|
||||||
|
|
||||||
|
Ce réglage s'applique à [SELECT … JOIN](../../query_language/select.md#select-join) les opérations et les [Rejoindre le moteur de table](../table_engines/join.md).
|
||||||
|
|
||||||
|
Si la requête contient des jointures, ClickHouse vérifie ce paramètre pour chaque résultat intermédiaire.
|
||||||
|
|
||||||
|
ClickHouse peut procéder à différentes actions lorsque la limite est atteinte. Utiliser [join\_overflow\_mode](#settings-join_overflow_mode) paramètres pour choisir l'action.
|
||||||
|
|
||||||
|
Valeurs possibles:
|
||||||
|
|
||||||
|
- Entier positif.
|
||||||
|
- 0 — Memory control is disabled.
|
||||||
|
|
||||||
|
Valeur par défaut: 0.
|
||||||
|
|
||||||
|
## join\_overflow\_mode {#settings-join_overflow_mode}
|
||||||
|
|
||||||
|
Définit l'action que ClickHouse effectue lorsque l'une des limites de jointure suivantes est atteinte:
|
||||||
|
|
||||||
|
- [max\_bytes\_in\_join](#settings-max_bytes_in_join)
|
||||||
|
- [max\_rows\_in\_join](#settings-max_rows_in_join)
|
||||||
|
|
||||||
|
Valeurs possibles:
|
||||||
|
|
||||||
|
- `THROW` — ClickHouse throws an exception and breaks operation.
|
||||||
|
- `BREAK` — ClickHouse breaks operation and doesn't throw an exception.
|
||||||
|
|
||||||
|
Valeur par défaut: `THROW`.
|
||||||
|
|
||||||
|
**Voir Aussi**
|
||||||
|
|
||||||
|
- [Clause de JOINTURE](../../query_language/select.md#select-join)
|
||||||
|
- [Rejoindre le moteur de table](../table_engines/join.md)
|
||||||
|
|
||||||
|
## max\_partitions\_per\_insert\_block {#max-partitions-per-insert-block}
|
||||||
|
|
||||||
|
Limite le nombre maximal de partitions dans un seul bloc inséré.
|
||||||
|
|
||||||
|
- Entier positif.
|
||||||
|
- 0 — Unlimited number of partitions.
|
||||||
|
|
||||||
|
Valeur par défaut: 100.
|
||||||
|
|
||||||
|
**Détail**
|
||||||
|
|
||||||
|
Lors de l'insertion de données, ClickHouse calcule le nombre de partitions dans le bloc inséré. Si le nombre de partitions est plus que `max_partitions_per_insert_block`, ClickHouse lève une exception avec le texte suivant:
|
||||||
|
|
||||||
|
> “Too many partitions for single INSERT block (more than” + toString (max\_parts) + “). The limit is controlled by ‘max\_partitions\_per\_insert\_block’ setting. A large number of partitions is a common misconception. It will lead to severe negative performance impact, including slow server startup, slow INSERT queries and slow SELECT queries. Recommended total number of partitions for a table is under 1000..10000. Please note, that partitioning is not intended to speed up SELECT queries (ORDER BY key is sufficient to make range queries fast). Partitions are intended for data manipulation (DROP PARTITION, etc).”
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/operations/settings/query_complexity/) <!--hide-->
|
1199
docs/fr/operations/settings/settings.md
Normal file
1199
docs/fr/operations/settings/settings.md
Normal file
File diff suppressed because it is too large
Load Diff
68
docs/fr/operations/settings/settings_profiles.md
Normal file
68
docs/fr/operations/settings/settings_profiles.md
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Les Paramètres Des Profils {#settings-profiles}
|
||||||
|
|
||||||
|
Un profil de paramètres est une collection de paramètres regroupés sous le même nom. Chaque utilisateur de ClickHouse a un profil.
|
||||||
|
Pour appliquer tous les paramètres d'un profil, définissez `profile` paramètre.
|
||||||
|
|
||||||
|
Exemple:
|
||||||
|
|
||||||
|
Installer le `web` profil.
|
||||||
|
|
||||||
|
``` sql
|
||||||
|
SET profile = 'web'
|
||||||
|
```
|
||||||
|
|
||||||
|
Les profils de paramètres sont déclarés dans le fichier de configuration utilisateur. Ce n'est généralement `users.xml`.
|
||||||
|
|
||||||
|
Exemple:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<!-- Settings profiles -->
|
||||||
|
<profiles>
|
||||||
|
<!-- Default settings -->
|
||||||
|
<default>
|
||||||
|
<!-- The maximum number of threads when running a single query. -->
|
||||||
|
<max_threads>8</max_threads>
|
||||||
|
</default>
|
||||||
|
|
||||||
|
<!-- Settings for quries from the user interface -->
|
||||||
|
<web>
|
||||||
|
<max_rows_to_read>1000000000</max_rows_to_read>
|
||||||
|
<max_bytes_to_read>100000000000</max_bytes_to_read>
|
||||||
|
|
||||||
|
<max_rows_to_group_by>1000000</max_rows_to_group_by>
|
||||||
|
<group_by_overflow_mode>any</group_by_overflow_mode>
|
||||||
|
|
||||||
|
<max_rows_to_sort>1000000</max_rows_to_sort>
|
||||||
|
<max_bytes_to_sort>1000000000</max_bytes_to_sort>
|
||||||
|
|
||||||
|
<max_result_rows>100000</max_result_rows>
|
||||||
|
<max_result_bytes>100000000</max_result_bytes>
|
||||||
|
<result_overflow_mode>break</result_overflow_mode>
|
||||||
|
|
||||||
|
<max_execution_time>600</max_execution_time>
|
||||||
|
<min_execution_speed>1000000</min_execution_speed>
|
||||||
|
<timeout_before_checking_execution_speed>15</timeout_before_checking_execution_speed>
|
||||||
|
|
||||||
|
<max_columns_to_read>25</max_columns_to_read>
|
||||||
|
<max_temporary_columns>100</max_temporary_columns>
|
||||||
|
<max_temporary_non_const_columns>50</max_temporary_non_const_columns>
|
||||||
|
|
||||||
|
<max_subquery_depth>2</max_subquery_depth>
|
||||||
|
<max_pipeline_depth>25</max_pipeline_depth>
|
||||||
|
<max_ast_depth>50</max_ast_depth>
|
||||||
|
<max_ast_elements>100</max_ast_elements>
|
||||||
|
|
||||||
|
<readonly>1</readonly>
|
||||||
|
</web>
|
||||||
|
</profiles>
|
||||||
|
```
|
||||||
|
|
||||||
|
L'exemple spécifie deux profils: `default` et `web`. Le `default` profil a un but particulier: il doit toujours être présent et est appliquée lors du démarrage du serveur. En d'autres termes, l' `default` profil contient les paramètres par défaut. Le `web` profil est un profil régulier qui peut être défini à l'aide `SET` requête ou en utilisant un paramètre URL dans une requête HTTP.
|
||||||
|
|
||||||
|
Paramètres les profils peuvent hériter les uns des autres. Pour utiliser l'héritage, indiquer un ou plusieurs `profile` paramètres avant les autres paramètres répertoriés dans le profil. Dans le cas où un paramètre est défini dans les différents profils, les dernières définie est utilisée.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/operations/settings/settings_profiles/) <!--hide-->
|
145
docs/fr/operations/settings/settings_users.md
Normal file
145
docs/fr/operations/settings/settings_users.md
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
---
|
||||||
|
machine_translated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Les Paramètres De L'Utilisateur {#user-settings}
|
||||||
|
|
||||||
|
Le `users` la section de la `user.xml` le fichier de configuration contient les paramètres utilisateur.
|
||||||
|
|
||||||
|
La Structure de la `users` section:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<users>
|
||||||
|
<!-- If user name was not specified, 'default' user is used. -->
|
||||||
|
<user_name>
|
||||||
|
<password></password>
|
||||||
|
<!-- Or -->
|
||||||
|
<password_sha256_hex></password_sha256_hex>
|
||||||
|
|
||||||
|
<networks incl="networks" replace="replace">
|
||||||
|
</networks>
|
||||||
|
|
||||||
|
<profile>profile_name</profile>
|
||||||
|
|
||||||
|
<quota>default</quota>
|
||||||
|
|
||||||
|
<databases>
|
||||||
|
<database_name>
|
||||||
|
<table_name>
|
||||||
|
<filter>expression</filter>
|
||||||
|
<table_name>
|
||||||
|
</database_name>
|
||||||
|
</databases>
|
||||||
|
</user_name>
|
||||||
|
<!-- Other users settings -->
|
||||||
|
</users>
|
||||||
|
```
|
||||||
|
|
||||||
|
### nom\_utilisateur/mot de passe {#user-namepassword}
|
||||||
|
|
||||||
|
Le mot de passe peut être spécifié en texte clair ou en SHA256 (format hexadécimal).
|
||||||
|
|
||||||
|
- Pour attribuer un mot de passe en clair (**pas recommandé**), la placer dans un `password` élément.
|
||||||
|
|
||||||
|
Exemple, `<password>qwerty</password>`. Le mot de passe peut être laissé en blanc.
|
||||||
|
|
||||||
|
<a id="password_sha256_hex"></a>
|
||||||
|
|
||||||
|
- Pour attribuer un mot de passe à l'aide de son hachage SHA256, placez-le dans un `password_sha256_hex` élément.
|
||||||
|
|
||||||
|
Exemple, `<password_sha256_hex>65e84be33532fb784c48129675f9eff3a682b27168c0ea744b2cf58ee02337c5</password_sha256_hex>`.
|
||||||
|
|
||||||
|
Exemple de génération d'un mot de passe à partir du shell:
|
||||||
|
|
||||||
|
PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'
|
||||||
|
|
||||||
|
La première ligne du résultat est le mot de passe. La deuxième ligne est le hachage SHA256 correspondant.
|
||||||
|
|
||||||
|
<a id="password_double_sha1_hex"></a>
|
||||||
|
|
||||||
|
- Pour la compatibilité avec les clients MySQL, le mot de passe peut être spécifié dans le hachage double SHA1. Le placer dans `password_double_sha1_hex` élément.
|
||||||
|
|
||||||
|
Exemple, `<password_double_sha1_hex>08b4a0f1de6ad37da17359e592c8d74788a83eb0</password_double_sha1_hex>`.
|
||||||
|
|
||||||
|
Exemple de génération d'un mot de passe à partir du shell:
|
||||||
|
|
||||||
|
PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha1sum | tr -d '-' | xxd -r -p | sha1sum | tr -d '-'
|
||||||
|
|
||||||
|
La première ligne du résultat est le mot de passe. La deuxième ligne est le double hachage SHA1 correspondant.
|
||||||
|
|
||||||
|
### nom\_utilisateur / réseaux {#user-namenetworks}
|
||||||
|
|
||||||
|
Liste des réseaux à partir desquels L'utilisateur peut se connecter au serveur ClickHouse.
|
||||||
|
|
||||||
|
Chaque élément de la liste peut avoir l'une des formes suivantes:
|
||||||
|
|
||||||
|
- `<ip>` — IP address or network mask.
|
||||||
|
|
||||||
|
Exemple: `213.180.204.3`, `10.0.0.1/8`, `10.0.0.1/255.255.255.0`, `2a02:6b8::3`, `2a02:6b8::3/64`, `2a02:6b8::3/ffff:ffff:ffff:ffff::`.
|
||||||
|
|
||||||
|
- `<host>` — Hostname.
|
||||||
|
|
||||||
|
Exemple: `example01.host.ru`.
|
||||||
|
|
||||||
|
Pour vérifier l'accès, une requête DNS est effectuée et toutes les adresses IP renvoyées sont comparées à l'adresse homologue.
|
||||||
|
|
||||||
|
- `<host_regexp>` — Regular expression for hostnames.
|
||||||
|
|
||||||
|
Exemple, `^example\d\d-\d\d-\d\.host\.ru$`
|
||||||
|
|
||||||
|
Pour vérifier l'accès, un [Requête DNS PTR](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) est effectuée pour l'adresse homologue, puis l'expression rationnelle spécifiée est appliquée. Ensuite, une autre requête DNS est effectuée pour les résultats de la requête PTR et toutes les adresses reçues sont comparées à l'adresse homologue. Nous recommandons fortement que regexp se termine avec $.
|
||||||
|
|
||||||
|
Tous les résultats des requêtes DNS sont mis en cache jusqu'au redémarrage du serveur.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
Pour ouvrir l'accès de l'utilisateur à partir de n'importe quel réseau, spécifiez:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<ip>::/0</ip>
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! warning "Avertissement"
|
||||||
|
Il n'est pas sûr d'ouvrir l'accès à partir de n'importe quel réseau, sauf si vous avez un pare-feu correctement configuré ou si le serveur n'est pas directement connecté à Internet.
|
||||||
|
|
||||||
|
Pour ouvrir l'accès uniquement à partir de localhost, spécifier:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<ip>::1</ip>
|
||||||
|
<ip>127.0.0.1</ip>
|
||||||
|
```
|
||||||
|
|
||||||
|
### nom\_utilisateur / profil {#user-nameprofile}
|
||||||
|
|
||||||
|
Vous pouvez attribuer un profil des paramètres pour l'utilisateur. Les profils de paramètres sont configurés dans une section distincte du `users.xml` fichier. Pour plus d'informations, voir [Profils des paramètres](settings_profiles.md).
|
||||||
|
|
||||||
|
### nom\_utilisateur / quota {#user-namequota}
|
||||||
|
|
||||||
|
Les Quotas vous permettent de suivre ou de limiter l'utilisation des ressources sur une période donnée. Les Quotas sont configurés dans le `quotas`
|
||||||
|
la section de la `users.xml` fichier de configuration.
|
||||||
|
|
||||||
|
Vous pouvez attribuer un jeu de quotas à l'utilisateur. Pour une description détaillée de la configuration des quotas, voir [Quota](../quotas.md#quotas).
|
||||||
|
|
||||||
|
### nom\_utilisateur/bases de données {#user-namedatabases}
|
||||||
|
|
||||||
|
Dans cette section, vous pouvez limiter les lignes renvoyées par ClickHouse pour `SELECT` requêtes faites par l'utilisateur actuel, implémentant ainsi la sécurité de base au niveau de la ligne.
|
||||||
|
|
||||||
|
**Exemple**
|
||||||
|
|
||||||
|
La configuration suivante force cet utilisateur `user1` ne peut voir les lignes de `table1` comme le résultat de `SELECT` requêtes, où la valeur de la `id` le champ est 1000.
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<user1>
|
||||||
|
<databases>
|
||||||
|
<database_name>
|
||||||
|
<table1>
|
||||||
|
<filter>id = 1000</filter>
|
||||||
|
</table1>
|
||||||
|
</database_name>
|
||||||
|
</databases>
|
||||||
|
</user1>
|
||||||
|
```
|
||||||
|
|
||||||
|
Le `filter` peut être n'importe quelle expression résultant en un [UInt8](../../data_types/int_uint.md)-le type de la valeur. Il contient généralement des comparaisons et des opérateurs logiques. Les lignes de `database_name.table1` où filtrer les résultats à 0 ne sont pas retournés pour cet utilisateur. Le filtrage est incompatible avec `PREWHERE` opérations et désactive `WHERE→PREWHERE` optimisation.
|
||||||
|
|
||||||
|
[Article Original](https://clickhouse.tech/docs/en/operations/settings/settings_users/) <!--hide-->
|
1051
docs/fr/operations/system_tables.md
Normal file
1051
docs/fr/operations/system_tables.md
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user